提交 ca8e59ae authored 作者: Whispa's avatar Whispa

commit

上级 6d32c460
...@@ -43,6 +43,23 @@ ...@@ -43,6 +43,23 @@
<artifactId>jjwt</artifactId> <artifactId>jjwt</artifactId>
<version>0.9.1</version> <version>0.9.1</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.wso2.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.wso2.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.1.wso2v1</version>
</dependency>
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<!--<version>2.8.5</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.base;
/**
* 状态常数
*/
public class StateConstant {
//有效
public static Integer VALID = 1;
//无效
public static Integer INVALID = 0;
public static Integer TWO = 2;
}
package com.example.afrishop_v3.bo;
/**
* templates/email-template.ftl 对应的参数
*/
public class EmailTemplateBo {
//用户名
private String nick;
//验证码
private Integer identifyCode;
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public Integer getIdentifyCode() {
return identifyCode;
}
public void setIdentifyCode(Integer identifyCode) {
this.identifyCode = identifyCode;
}
}
package com.example.afrishop_v3.bo;
/*腾讯翻译接口参数
* 基于翻译君 https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttranslate
* */
public class TencentTranslateParam {
private Integer app_id;
private Long time_stamp;
private String nonce_str;
private String sign;
private String text;
private String source;
private String target;
/**
* 默认中文转英文
* @param text 待翻译文本
*/
public TencentTranslateParam(String text) {
this.text = text;
}
/**
*
* @param text 待翻译文本
* @param source 源语言缩写 zh
* @param target 目标语言缩写 en
*/
public TencentTranslateParam(String text, String source, String target) {
this.text = text;
this.source = source;
this.target = target;
}
public TencentTranslateParam(Integer app_id, Long time_stamp, String nonce_str, String sign, String text, String source, String target) {
this.app_id = app_id;
this.time_stamp = time_stamp;
this.nonce_str = nonce_str;
this.sign = sign;
this.text = text;
this.source = source;
this.target = target;
}
public Integer getApp_id() {
return app_id;
}
public void setApp_id(Integer app_id) {
this.app_id = app_id;
}
public Long getTime_stamp() {
return time_stamp;
}
public void setTime_stamp(Long time_stamp) {
this.time_stamp = time_stamp;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
}
package com.example.afrishop_v3.bo;
/** 腾讯分词接口参数
* https://api.ai.qq.com/fcgi-bin/nlp/nlp_wordpos
* */
public class TencentWordsegParam {
private Integer app_id;
private Long time_stamp;
private String nonce_str;
private String sign;
private String text;
/**
*
* @param text 待翻译文本
*/
public TencentWordsegParam(String text) {
this.text = text;
}
public TencentWordsegParam(Integer app_id, Long time_stamp, String nonce_str, String sign, String text) {
this.app_id = app_id;
this.time_stamp = time_stamp;
this.nonce_str = nonce_str;
this.sign = sign;
this.text = text;
}
public Integer getApp_id() {
return app_id;
}
public void setApp_id(Integer app_id) {
this.app_id = app_id;
}
public Long getTime_stamp() {
return time_stamp;
}
public void setTime_stamp(Long time_stamp) {
this.time_stamp = time_stamp;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
package com.example.afrishop_v3.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
/**
* domain.properties 配置类
*/
@Component("domainProperties")
@PropertySource({"classpath:properties/domain.properties"})
public class DomainProperties {
@Autowired
private Environment env;
public String getProperty(String propertyName) {
return env.getProperty(propertyName);
}
}
package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.models.TbCfAddress;
import com.example.afrishop_v3.repository.TbCfAddressRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/address")
public class AddressController extends Controller{
private final TbCfAddressRepository repository;
private final AuthenticationUser user;
public AddressController(TbCfAddressRepository repository, AuthenticationUser user) {
this.repository = repository;
this.user = user;
}
@GetMapping
public Result<Iterable<TbCfAddress>> getUserInfoList() {
Iterable<TbCfAddress> tbCfAddressVoList = repository.findAllByUserId(user.userId());
return new Result<>(tbCfAddressVoList);
}
@PostMapping
public Result addUserInfo(@RequestBody TbCfAddress address) {
address.setUserId(user.userId());
address.setAddressId(uid());
return new Result<>(repository.save(address));
}
@PutMapping("/{addressId}")
public Result editAddressInfo(@PathVariable("addressId") String addressId,@RequestBody TbCfAddress address) {
address.setUserId(user.userId());
address.setAddressId(addressId);
return new Result<>(repository.save(address));
}
}
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.ResultCodeEnum;
import com.example.afrishop_v3.models.TbCfCartRecordR;
import com.example.afrishop_v3.models.TbCfExpressTemplate;
import com.example.afrishop_v3.models.TbCfItemDetail;
import com.example.afrishop_v3.repository.TbCfCartRecordRRepository;
import com.example.afrishop_v3.repository.TbCfExpressTemplateRepository;
import com.example.afrishop_v3.repository.TbCfItemDetailRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.ValidateUtils;
import com.example.afrishop_v3.util.WordposHelper;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
@RestController
@RequestMapping("/cart")
public class CartController extends Controller {
private final TbCfCartRecordRRepository repository;
private final TbCfItemDetailRepository itemDetailRepository;
private final TbCfExpressTemplateRepository templateRepository;
private final AuthenticationUser user;
public CartController(TbCfCartRecordRRepository repository, TbCfItemDetailRepository itemDetailRepository, TbCfExpressTemplateRepository templateRepository, AuthenticationUser user) {
this.repository = repository;
this.itemDetailRepository = itemDetailRepository;
this.templateRepository = templateRepository;
this.user = user;
}
@PostMapping
public Result addToCart(@RequestBody TbCfItemDetail itemDetail){
String userId = this.user.userId();
if( itemDetail == null ){
return new Result(ResultCodeEnum.SERVICE_ERROR.getCode(),"Request body is empty");
}
int count = repository.countByUserId(userId);
if( count > 99 ){
return new Result(ResultCodeEnum.SERVICE_ERROR.getCode(),"Your shopping cart is full");
}
BigDecimal price = itemDetail.getItemPrice();
if ( price == null || price.compareTo(BigDecimal.ZERO) <= 0) {
return new Result(ResultCodeEnum.SERVICE_ERROR.getCode(),"The price of the goods is incorrect");
}
Optional<TbCfItemDetail> optionalItem;
String itemId = itemDetail.getItemId();
if( itemId != null && !itemId.isEmpty()){
optionalItem = itemDetailRepository.findFirstByItemImgAndItemSku(itemDetail.getItemImg(), itemDetail.getItemSku());
}else {
optionalItem = itemDetailRepository.findFirstBySourceItemIdAndItemSku(itemDetail.getSourceItemId(),itemDetail.getItemSku());
}
if ( optionalItem.isPresent() ){
TbCfItemDetail detail = optionalItem.get();
detail.setGoodsId(itemId);
itemDetailRepository.save(detail);
itemId = itemDetail.getItemId();
}else{
itemId = uid();
try {
insertItem(itemDetail,itemId);
} catch (Exception e) {
return new Result(ResultCodeEnum.SERVICE_ERROR.getCode(),e.getMessage());
}
}
// Check if the item exist in cart
Optional<TbCfCartRecordR> cartOptional = repository.findFirstByUserIdAndItemIdAndItemSku(userId, itemId, itemDetail.getItemSku());
if ( cartOptional.isPresent() ){
TbCfCartRecordR cart = cartOptional.get();
cart.increaseNum(itemDetail.getItemNum());
repository.save(cart);
}else{
insertRecord(itemDetail, userId,itemId);
}
return new Result();
}
private void insertRecord(TbCfItemDetail itemDetail, String userId, String itemId) {
TbCfCartRecordR tbCfCartRecordREntity = new TbCfCartRecordR();
tbCfCartRecordREntity.setCartRecordId(uid());
tbCfCartRecordREntity.setCheckFlag(StateConstant.INVALID);
tbCfCartRecordREntity.setEnableFlag(StateConstant.VALID);
if (itemId != null) {
tbCfCartRecordREntity.setItemId(itemId);
} else {
tbCfCartRecordREntity.setItemId(itemDetail.getItemId());
}
tbCfCartRecordREntity.setUserId(userId);
tbCfCartRecordREntity.setCreateTime(new Date());
tbCfCartRecordREntity.setItemNum(itemDetail.getItemNum());
tbCfCartRecordREntity.setItemSku(itemDetail.getItemSku());
tbCfCartRecordREntity.setSourceItemId(itemDetail.getSourceItemId());
tbCfCartRecordREntity.setItemPrice(itemDetail.getItemPrice());
repository.save(tbCfCartRecordREntity);
}
private void insertItem(TbCfItemDetail tbCfItemDetail, String itemId) throws Exception {
tbCfItemDetail.setCreateTime(new Date());
//为商品分类,后面计算运费
TbCfExpressTemplate expressTemplate = recognizeItemCategory(tbCfItemDetail.getItemTitle());
if (expressTemplate!=null)
tbCfItemDetail.setItemCategory(expressTemplate.getTemplateId());
//加入商品详情
tbCfItemDetail.setGoodsId(tbCfItemDetail.getItemId());
tbCfItemDetail.setStatus(1);
//设置为默认一件商品(为了保证前人数据库信息完整性,无实际作用)
tbCfItemDetail.setItemNum(1);
if (itemId != null) {
tbCfItemDetail.setItemId(itemId);
} else {
tbCfItemDetail.setItemId(tbCfItemDetail.getItemId());
}
itemDetailRepository.save(tbCfItemDetail);
//logger.info("插入一条商品数据!");
}
private TbCfExpressTemplate recognizeItemCategory(String itemTitle) throws ExecutionException, InterruptedException, TimeoutException {
Map<String, Object> wordResult = separateText(itemTitle);
//pos_code 16为名词,用名词去匹配; 23非汉字串
JSONArray baseTokens = (JSONArray) wordResult.get("base_tokens");
List<String> keywordList = new ArrayList<>();
for (Object baseToken : baseTokens) {
JSONObject jsonObject = (JSONObject) baseToken;
if (16 == (Integer) jsonObject.get("pos_code")) {
keywordList.add((String) jsonObject.get("word"));
}
if (23 == (Integer) jsonObject.get("pos_code")) {
keywordList.add((String) jsonObject.get("word"));
}
}
//总的可能适用的运费模板
Set<TbCfExpressTemplate> totalTemplateSet = new HashSet<>();
if (!keywordList.isEmpty()) {
for (String keyword : keywordList) {
//根据keyword获取运费模板
List<TbCfExpressTemplate> tbCfExpressTemplateList = templateRepository.getTemplateByKeyword(keyword);
totalTemplateSet.addAll(tbCfExpressTemplateList);
//TODO 后续优化
if (ValidateUtils.isContainChinese(keyword)) {
if ( 0 == tbCfExpressTemplateList.size()) {
String[] split = keyword.split("");
for (int i = 0; i < split.length; i++) {
if (i + 1 <= split.length) {
List<TbCfExpressTemplate> tbCfExpressTemplateLists = templateRepository.getTemplateByKeyword(split[i] + split[i + 1]);
totalTemplateSet.addAll(tbCfExpressTemplateLists);
}
}
}
}
}
}
//没有的话就设置 其他
if (totalTemplateSet.isEmpty()) {
//根据keyword获取运费模板
List<TbCfExpressTemplate> tbCfExpressTemplateList = templateRepository.getTemplateByKeyword("其他");
totalTemplateSet.addAll(tbCfExpressTemplateList);
}
//取第一个运费
Iterator<TbCfExpressTemplate> iterator = totalTemplateSet.iterator();
return iterator.next();
}
private Map<String, Object> separateText(String text) throws ExecutionException, InterruptedException, TimeoutException {
List<Map<String, Object>> futureList = new ArrayList<>();
Map<String, Object> titleMap = new HashMap<>();
titleMap.put("text", text);
WordposHelper.separeteText(futureList, titleMap, text);
WordposHelper.waitForResult(futureList);
return titleMap;
}
}
package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.util.IdUtil;
class Controller {
String uid(){
return IdUtil.createIdbyUUID();
}
}
...@@ -3,13 +3,12 @@ package com.example.afrishop_v3.controllers; ...@@ -3,13 +3,12 @@ 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.TbCfFeedback; import com.example.afrishop_v3.models.TbCfFeedback;
import com.example.afrishop_v3.repository.TbCfFeedbackRepository; import com.example.afrishop_v3.repository.TbCfFeedbackRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.IdUtil; import com.example.afrishop_v3.util.IdUtil;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@RestController @RestController
@RequestMapping("/feedback") @RequestMapping("/feedback")
public class FeedbackController { public class FeedbackController extends Controller{
private final TbCfFeedbackRepository repository; private final TbCfFeedbackRepository repository;
public FeedbackController(TbCfFeedbackRepository repository) { public FeedbackController(TbCfFeedbackRepository repository) {
...@@ -19,7 +18,7 @@ public class FeedbackController { ...@@ -19,7 +18,7 @@ public class FeedbackController {
@PostMapping @PostMapping
public Result saveFeedbackList(@RequestBody TbCfFeedback feedback) { public Result saveFeedbackList(@RequestBody TbCfFeedback feedback) {
feedback.setFeedbackId(IdUtil.createIdbyUUID()); feedback.setFeedbackId(uid());
return new Result<>(repository.save(feedback)); return new Result<>(repository.save(feedback));
} }
......
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.*;
import com.example.afrishop_v3.repository.*;
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.util.*;
import static org.springframework.data.domain.Sort.Order.*;
@RestController
@RequestMapping("/itemStation")
public class ItemController {
private final TbCfStationItemRepository repository;
private final TbCfGoodstwotypeRepository goodstwotypeRepository;
private final TbCfGoodstypeRepository goodstypeRepository;
private final TbCfDescripitonRepository descriptionRepository;
private final TbCfCategoryRepository categoryRepository;
private final TbCfItemSkuRepository skuRepository;
private final TbCfItemDescRepository descRepository;
private final TbCfItemCollectionRepository collectionRepository;
public ItemController(TbCfStationItemRepository repository, TbCfGoodstwotypeRepository goodstwotypeRepository, TbCfGoodstypeRepository goodstypeRepository, TbCfDescripitonRepository descriptionRepository, TbCfCategoryRepository categoryRepository, TbCfItemSkuRepository skuRepository, TbCfItemDescRepository descRepository, TbCfItemCollectionRepository collectionRepository) {
this.repository = repository;
this.goodstwotypeRepository = goodstwotypeRepository;
this.goodstypeRepository = goodstypeRepository;
this.descriptionRepository = descriptionRepository;
this.categoryRepository = categoryRepository;
this.skuRepository = skuRepository;
this.descRepository = descRepository;
this.collectionRepository = collectionRepository;
}
@GetMapping("/queryAll")
public Result queryAll(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize) {
return new Result<>(repository.findAll(PageRequest.of(pageNum,pageSize)));
}
@GetMapping("/queryItemsByTypeTwo")
public Result queryItemsByTypeTwo( @RequestParam("typeTwoId") String typeTwoId,
@RequestParam(value = "pageNum", defaultValue = "1") 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,sort(order))));
}
@GetMapping("/queryCategoryTwoByCid/{categoryId}")
public Result queryCategoryTwoByCid( @PathVariable("categoryId") String categoryId) {
Map<String, Object> map = new HashMap<>();
Optional<TbCfGoodstype> byId = goodstypeRepository.findById(categoryId);
List<TbCfGoodstwotype> allByGoodstypeId = goodstwotypeRepository.findAllByGoodstypeId(categoryId);
map.put("category", byId.orElse(null));
map.put("categoryTwoList", allByGoodstypeId);
return new Result<>(map);
}
@GetMapping("/queryDescriptionByCTwoId/{categoryTwoId}")
public Result queryDescriptionByCTwoId(@PathVariable("categoryTwoId") String categoryTwoId) {
Map<String, Object> map = new HashMap<>();
Optional<TbCfGoodstwotype> byId = goodstwotypeRepository.findById(categoryTwoId);
List<TbCfDescripiton> allByGoodstwotypeId = descriptionRepository.findAllByGoodstwotypeId(categoryTwoId);
map.put("category", byId.orElse(null));
map.put("descriptionList", allByGoodstwotypeId);
return new Result<>(map);
}
@GetMapping("/searchItems")
public Result searchItems(@RequestParam(value = "name") String name,
@RequestParam(value = "order", required = false) String order,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize) {
Page<TbCfStationItem> list = repository.findAllByItemNameContainingOrItemTagsContaining(name, name, PageRequest.of(pageNum, pageSize, sort(order)));
return new Result<>(list);
}
@GetMapping("/getRecommendItems")
public Result getRecommendItems(@RequestParam("itemId") String itemId,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "12") Integer pageSize) {
Optional<TbCfStationItem> byId = repository.findById(itemId);
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");
}
@GetMapping("/queryItemByDescription/{descriptionId}")
public Result queryItemByDescription(@PathVariable("descriptionId") String descriptionId) {
return new Result<>(repository.findAllByItemDescritionId(descriptionId));
}
@GetMapping("/queryItemsByTypeThree")
public Result queryItemsByTypeThree( @RequestParam("typeThreeId") String typeThreeId,
@RequestParam(value = "pageNum", defaultValue = "1") 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,sort(order))));
}
private Sort sort(String order){
String col = "discountPrice";
return Sort.by( "desc".equals(order) ? desc(col) : asc(col));
}
@GetMapping("/queryItemsByLabel")
public Result queryItemsByLabel(@RequestParam("label") String label,
@RequestParam(value = "pageNum", defaultValue = "1") 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,sort(order))));
}
@GetMapping("/queryItemSku")
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");
List<TbCfCategory> categoryList = categoryRepository.findAllByItemId(itemId);
List<TbCfItemSkus> skusList = skuRepository.findAllByItemId(itemId);
HashMap<String, Object> map = new HashMap<>();
TbCfStationItem item = itemOptional.get();
map.put("score",item.getTotalScore());
map.put("isCollection",userId != null && !userId.isEmpty() && collectionRepository.existsByUserIdAndItemId(userId,itemId));
map.put("optionList",categoryList);
map.put("itemDetail",skusList);
map.put("itemInfo", item);
map.put("itemDesc",descRepository.findById(itemId));
return new Result<>(map);
}
}
...@@ -4,6 +4,7 @@ import com.example.afrishop_v3.base.Result; ...@@ -4,6 +4,7 @@ import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.enums.ResultCodeEnum; import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.TbCfSearch; import com.example.afrishop_v3.models.TbCfSearch;
import com.example.afrishop_v3.repository.TbCfSearchRepository; import com.example.afrishop_v3.repository.TbCfSearchRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.IdUtil; import com.example.afrishop_v3.util.IdUtil;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -16,8 +17,11 @@ import java.util.List; ...@@ -16,8 +17,11 @@ import java.util.List;
public class SearchController { public class SearchController {
private final TbCfSearchRepository repository; private final TbCfSearchRepository repository;
public SearchController(TbCfSearchRepository repository) { private final AuthenticationUser user;
public SearchController(TbCfSearchRepository repository, AuthenticationUser authenticationUser) {
this.repository = repository; this.repository = repository;
this.user = authenticationUser;
} }
@PostMapping("/save") @PostMapping("/save")
...@@ -25,14 +29,16 @@ public class SearchController { ...@@ -25,14 +29,16 @@ public class SearchController {
tbCfSearch.setId(IdUtil.createIdbyUUID()); tbCfSearch.setId(IdUtil.createIdbyUUID());
tbCfSearch.setUserId(user.userId());
TbCfSearch entity = repository.save(tbCfSearch); TbCfSearch entity = repository.save(tbCfSearch);
return new Result<>(entity); return new Result<>(entity);
} }
@GetMapping("/getRecords/{userId}") @GetMapping("/getRecords")
public Result getRecords(@PathVariable("userId") String userId) { public Result getRecords() {
List<TbCfSearch> list = repository.getAllByUserId(userId); List<TbCfSearch> list = repository.getAllByUserId(user.userId());
return new Result<>(list); return new Result<>(list);
} }
......
package com.example.afrishop_v3.enums;
/**
* 爬虫枚举
*
* @author G
*/
public enum PlatformEnum implements EnumItemable<PlatformEnum> {
/**
* 对应爬虫的枚举
*/
TB("淘宝", "tb"),
TM("天猫", "tm"),
PULLANDBEAR("Pullandbear", "pullandbear"),
GAP("GAP", "gap"),
ZARA("Zara", "zara"),
UNIQLO("优衣库", "uniqlo"),
NIKE("耐克", "nike"),
ADIDAS("阿迪达斯", "adidas"),
HM("H&M", "hm"),
LILY("Lily", "lily"),
EIFINI("伊芙丽", "eifini"),
URBANREVIVO("UrbanRevivo", "urbanrevivo"),
ABERCROMBIEFITCH("Abercrombie&Fitch", "aberCrombieFitch"),
UNDERARMOUR("安德玛", "underarmour"),
OCHIRLY("欧时力", "ochirly"),
ESPRIT("思捷", "esprit"),
LEVI("李维斯", "levi"),
MOCO("MO&Co.", "moco"),
MASSIMODUTTI("MassimoDutti", "massimodutti"),
COACH("蔻驰", "coach"),
REVOLVE("Revolve", "revolve"),
VANS("范斯", "vans"),
ZARAHOME("ZaraHome", "zaraHome"),
OYSHO("Oysho", "oysho"),
STRADIVARIUS("斯特拉迪瓦里斯", "stradivarius"),
MAJE("Maje", "maje"),
GUCCI("古驰", "gucci"),
BURBERRY("博柏利", "burberry"),
PRADA("普拉达", "prada"),
FENDI("芬迪", "fendi"),
APPLE("苹果", "apple"),
LOUISVUITTON("路易威登LV", "louisVuitton"),
UN("未知", "un"),
AfriEshop("Afrishop", "Afrishop");
private String label;
private String value;
PlatformEnum(String label, String value) {
this.label = label;
this.value = value;
}
@Override
public String getLabel() {
return this.label;
}
@Override
public String getValue() {
return this.value;
}
}
package com.example.afrishop_v3.models;
/**
* @Auther: wudepeng
* @Date: 2019/12/31
* @Description:
*/
public class SkuDetail {
private String skuName;
private String skuDesc;
public SkuDetail(String skuName,String skuDesc){
this.skuName = skuName;
this.skuDesc = skuDesc;
}
public String getSkuName() {
return skuName;
}
public void setSkuName(String skuName) {
this.skuName = skuName;
}
public String getSkuDesc() {
return skuDesc;
}
public void setSkuDesc(String skuDesc) {
this.skuDesc = skuDesc;
}
}
package com.example.afrishop_v3.models;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
/**
* 实体
* 表名 tb_cf_address
*
* @author G
* @date 2019-08-16 15:51:16
*/
@Entity
@Setter
@Getter
public class TbCfAddress{
/**
* 地址id
*/
@Id
private String addressId;
/**
* 用户id
*/
private String userId;
/**
* 收货人
*/
private String deliveryName;
/**
* 联系电话
*/
private String phone;
/**
* 邮箱
*/
private String email;
/**
* 是否为默认地址
*/
private Integer defaultFlag;
/**
* 地址详情
*/
private String addressDetail;
/**
* 所在国家code
*/
private String addressCountryCode;
/**
* 所在国家
*/
private String addressCountryName;
/**
* 所在州code
*/
private String addressStateCode;
/**
* 所在州
*/
private String addressStateName;
/**
* 所在区code
*/
private String addressAreaCode;
/**
* 所在区
*/
private String addressAreaName;
/**
* 标签code
*/
private String labelCode;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
/**
* 设置:地址id
*/
public void setAddressId(String addressId) {
this.addressId = addressId;
}
/**
* 获取:地址id
*/
public String getAddressId() {
return addressId;
}
/**
* 设置:用户id
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:用户id
*/
public String getUserId() {
return userId;
}
/**
* 设置:收货人
*/
public void setDeliveryName(String deliveryName) {
this.deliveryName = deliveryName;
}
/**
* 获取:收货人
*/
public String getDeliveryName() {
return deliveryName;
}
/**
* 设置:联系电话
*/
public void setPhone(String phone) {
this.phone = phone;
}
/**
* 获取:联系电话
*/
public String getPhone() {
return phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
/**
* 设置:是否为默认地址
*/
public void setDefaultFlag(Integer defaultFlag) {
this.defaultFlag = defaultFlag;
}
/**
* 获取:是否为默认地址
*/
public Integer getDefaultFlag() {
return defaultFlag;
}
/**
* 设置:地址详情
*/
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}
/**
* 获取:地址详情
*/
public String getAddressDetail() {
return addressDetail;
}
/**
* 设置:所在国家code
*/
public void setAddressCountryCode(String addressCountryCode) {
this.addressCountryCode = addressCountryCode;
}
/**
* 获取:所在国家code
*/
public String getAddressCountryCode() {
return addressCountryCode;
}
/**
* 设置:所在国家
*/
public void setAddressCountryName(String addressCountryName) {
this.addressCountryName = addressCountryName;
}
/**
* 获取:所在国家
*/
public String getAddressCountryName() {
return addressCountryName;
}
/**
* 设置:所在州code
*/
public void setAddressStateCode(String addressStateCode) {
this.addressStateCode = addressStateCode;
}
/**
* 获取:所在州code
*/
public String getAddressStateCode() {
return addressStateCode;
}
/**
* 设置:所在州
*/
public void setAddressStateName(String addressStateName) {
this.addressStateName = addressStateName;
}
/**
* 获取:所在州
*/
public String getAddressStateName() {
return addressStateName;
}
/**
* 设置:所在区code
*/
public void setAddressAreaCode(String addressAreaCode) {
this.addressAreaCode = addressAreaCode;
}
/**
* 获取:所在区code
*/
public String getAddressAreaCode() {
return addressAreaCode;
}
/**
* 设置:所在区
*/
public void setAddressAreaName(String addressAreaName) {
this.addressAreaName = addressAreaName;
}
/**
* 获取:所在区
*/
public String getAddressAreaName() {
return addressAreaName;
}
/**
* 设置:标签code
*/
public void setLabelCode(String labelCode) {
this.labelCode = labelCode;
}
/**
* 获取:标签code
*/
public String getLabelCode() {
return labelCode;
}
/**
* 设置:创建时间
*/
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;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import org.hibernate.annotations.Where;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 购物车记录表实体
* 表名 tb_cf_cart_record_r
*
* @author G
* @date 2019-08-16 15:51:16
*/
@Entity
@Data
@Where(clause = "enable_flag=1")
public class TbCfCartRecordR {
/**
* 购物车记录id
*/
@Id
private String cartRecordId;
/**
* 商品id
*/
private String itemId;
/**
* 用户id
*/
private String userId;
/**
* 是否已经被勾选,0未勾选,1勾选
*/
private Integer checkFlag;
/**
* 是否有效
*/
private Integer enableFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 商品链接
*/
private String sourceItemId;
/**
* 商品SKU
*/
private String itemSku;
/**
* 商品SKU
*/
private Integer itemNum;
/**
* 商品价格
*/
private BigDecimal itemPrice;
public BigDecimal getItemPrice() {
return itemPrice;
}
public void setItemPrice(BigDecimal itemPrice) {
this.itemPrice = itemPrice;
}
/**
* 设置:购物车记录id
*/
public void setCartRecordId(String cartRecordId) {
this.cartRecordId = cartRecordId;
}
/**
* 获取:购物车记录id
*/
public String getCartRecordId() {
return cartRecordId;
}
/**
* 设置:商品id
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品id
*/
public String getItemId() {
return itemId;
}
/**
* 设置:用户id
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:用户id
*/
public String getUserId() {
return userId;
}
/**
* 设置:是否已经被勾选,0未勾选,1勾选
*/
public void setCheckFlag(Integer checkFlag) {
this.checkFlag = checkFlag;
}
/**
* 获取:是否已经被勾选,0未勾选,1勾选
*/
public Integer getCheckFlag() {
return checkFlag;
}
/**
* 设置:是否有效
*/
public void setEnableFlag(Integer enableFlag) {
this.enableFlag = enableFlag;
}
/**
* 获取:是否有效
*/
public Integer getEnableFlag() {
return enableFlag;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getSourceItemId() {
return sourceItemId;
}
public void setSourceItemId(String sourceItemId) {
this.sourceItemId = sourceItemId;
}
public String getItemSku() {
return itemSku;
}
public void setItemSku(String itemSku) {
this.itemSku = itemSku;
}
public Integer getItemNum() {
return itemNum;
}
public void increaseNum(Integer itemNum){
setItemNum(this.itemNum+itemNum);
}
public void setItemNum(Integer itemNum) {
this.itemNum = itemNum;
}
}
package com.example.afrishop_v3.models;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 实体
* 表名 tb_cf_category
*
* @author lipengjun
* @date 2019-12-26 21:20:36
*/
@Entity
@Getter
@Setter
public class TbCfCategory {
/**
* 商品规格ID
*/
@Id
private String categoryId;
/**
* 规格名称
*/
private String categoryName;
/**
* 规格详情
*/
private String categoryDesc;
/**
* option
*/
private String option;
/**
* 商品ID
*/
private String itemId;
/**
* 排序
*/
private Integer orderNum;
/**
* 删除标志 0:正常 1:已删除
*/
private Integer delFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
@OneToMany(mappedBy = "category")
private List<TbCfOption> optionList = new ArrayList<>();
/**
* 设置:商品规格ID
*/
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
/**
* 获取:商品规格ID
*/
public String getCategoryId() {
return categoryId;
}
/**
* 设置:规格名称
*/
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
/**
* 获取:规格名称
*/
public String getCategoryName() {
return categoryName;
}
/**
* 设置:规格详情
*/
public void setCategoryDesc(String categoryDesc) {
this.categoryDesc = categoryDesc;
}
/**
* 获取:规格详情
*/
public String getCategoryDesc() {
return categoryDesc;
}
/**
* 设置:option
*/
public void setOption(String option) {
this.option = option;
}
/**
* 获取:option
*/
public String getOption() {
return option;
}
/**
* 设置:商品ID
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品ID
*/
public String getItemId() {
return itemId;
}
/**
* 设置:排序
*/
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}
/**
* 获取:排序
*/
public Integer getOrderNum() {
return orderNum;
}
/**
* 设置:删除标志 0:正常 1:已删除
*/
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
/**
* 获取:删除标志 0:正常 1:已删除
*/
public Integer getDelFlag() {
return delFlag;
}
/**
* 设置:创建时间
*/
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;
}
}
package com.example.afrishop_v3.models;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 实体
* 表名 tb_cf_descripiton
*
* @author lipengjun
* @date 2020-01-10 11:01:40
*/
@Entity
@Getter
@Setter
public class TbCfDescripiton{
/**
* 品名Id
*/
@Id
private String descripitionId;
/**
* 品名名字
*/
private String descripitionName;
/**
* 海关编码
*/
private String descripitionCode;
/**
* 一级分类Id
*/
private String goodstypeId;
/**
* 二级分类Id
*/
private String goodstwotypeId;
/**
* 品名图片
*/
private String image;
/**
* 单件邮费
*/
private BigDecimal postage;
/**
* 续件邮费
*/
private BigDecimal morePostage;
/**
* 一级分类名称
*/
private String type;
/**
* 二级分类名称
*/
private String twoType;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTwoType() {
return twoType;
}
public void setTwoType(String twoType) {
this.twoType = twoType;
}
/**
* 设置:品名Id
*/
public void setDescripitionId(String descripitionId) {
this.descripitionId = descripitionId;
}
/**
* 获取:品名Id
*/
public String getDescripitionId() {
return descripitionId;
}
/**
* 设置:品名名字
*/
public void setDescripitionName(String descripitionName) {
this.descripitionName = descripitionName;
}
/**
* 获取:品名名字
*/
public String getDescripitionName() {
return descripitionName;
}
/**
* 设置:海关编码
*/
public void setDescripitionCode(String descripitionCode) {
this.descripitionCode = descripitionCode;
}
/**
* 获取:海关编码
*/
public String getDescripitionCode() {
return descripitionCode;
}
/**
* 设置:一级分类Id
*/
public void setGoodstypeId(String goodstypeId) {
this.goodstypeId = goodstypeId;
}
/**
* 获取:一级分类Id
*/
public String getGoodstypeId() {
return goodstypeId;
}
/**
* 设置:二级分类Id
*/
public void setGoodstwotypeId(String goodstwotypeId) {
this.goodstwotypeId = goodstwotypeId;
}
/**
* 获取:二级分类Id
*/
public String getGoodstwotypeId() {
return goodstwotypeId;
}
/**
* 设置:品名图片
*/
public void setImage(String image) {
this.image = image;
}
/**
* 获取:品名图片
*/
public String getImage() {
return image;
}
/**
* 设置:单件邮费
*/
public void setPostage(BigDecimal postage) {
this.postage = postage;
}
/**
* 获取:单件邮费
*/
public BigDecimal getPostage() {
return postage;
}
/**
* 设置:续件邮费
*/
public void setMorePostage(BigDecimal morePostage) {
this.morePostage = morePostage;
}
/**
* 获取:续件邮费
*/
public BigDecimal getMorePostage() {
return morePostage;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import java.io.Serializable;
/**
* 运费模板关键字对应表实体
* 表名 tb_cf_exp_tem_keyword
*
* @author lipengjun
* @date 2019-09-16 15:22:46
*/
@Entity
@Data
public class TbCfExpTemKeyword{
/**
*
*/
private String id;
/**
* 模板id,express_template
*/
private String templateId;
/**
* 关键字
*/
private String keyword;
/**
* 设置:
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:
*/
public String getId() {
return id;
}
/**
* 设置:模板id,express_template
*/
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
/**
* 获取:模板id,express_template
*/
public String getTemplateId() {
return templateId;
}
/**
* 设置:关键字
*/
public void setKeyword(String keyword) {
this.keyword = keyword;
}
/**
* 获取:关键字
*/
public String getKeyword() {
return keyword;
}
}
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_express_template
*
* @author lipengjun
* @date 2020-08-27 14:58:56
*/
@Entity
@Data
public class TbCfExpressTemplate{
/**
* 模板id
*/
@Id
private String templateId;
/**
* 模板标题
*/
private String templateTitle;
/**
* 计费方式 0:计件 1:计重
*/
private Integer type;
/**
* 商品类型
*/
private String itemCategoryId;
/**
* 起始数量
*/
private Integer startNum;
/**
* 快递费
*/
private BigDecimal expressFee;
/**
* 续件数量
*/
private Integer continuationNum;
/**
* 续件费用
*/
private BigDecimal continuationFee;
/**
* 手续费
*/
private BigDecimal handlingFee;
/**
* 关税
*/
private BigDecimal tariff;
/**
* 国家编号
*/
private String countryCode;
/**
* 国家
*/
private String country;
/**
* 状态 0:删除 1:正常
*/
private Integer status;
/**
* 地区默认模板 0:默认 1:非默认
*/
private Integer isDefault;
/**
* 免邮价格
*/
private BigDecimal postageFreePrice;
/**
* 创建日期
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 设置:模板id
*/
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
/**
* 获取:模板id
*/
public String getTemplateId() {
return templateId;
}
/**
* 设置:模板标题
*/
public void setTemplateTitle(String templateTitle) {
this.templateTitle = templateTitle;
}
/**
* 获取:模板标题
*/
public String getTemplateTitle() {
return templateTitle;
}
/**
* 设置:计费方式 0:计件 1:计重
*/
public void setType(Integer type) {
this.type = type;
}
/**
* 获取:计费方式 0:计件 1:计重
*/
public Integer getType() {
return type;
}
/**
* 设置:商品类型
*/
public void setItemCategoryId(String itemCategoryId) {
this.itemCategoryId = itemCategoryId;
}
/**
* 获取:商品类型
*/
public String getItemCategoryId() {
return itemCategoryId;
}
/**
* 设置:起始数量
*/
public void setStartNum(Integer startNum) {
this.startNum = startNum;
}
/**
* 获取:起始数量
*/
public Integer getStartNum() {
return startNum;
}
/**
* 设置:快递费
*/
public void setExpressFee(BigDecimal expressFee) {
this.expressFee = expressFee;
}
/**
* 获取:快递费
*/
public BigDecimal getExpressFee() {
return expressFee;
}
/**
* 设置:续件数量
*/
public void setContinuationNum(Integer continuationNum) {
this.continuationNum = continuationNum;
}
/**
* 获取:续件数量
*/
public Integer getContinuationNum() {
return continuationNum;
}
/**
* 设置:续件费用
*/
public void setContinuationFee(BigDecimal continuationFee) {
this.continuationFee = continuationFee;
}
/**
* 获取:续件费用
*/
public BigDecimal getContinuationFee() {
return continuationFee;
}
/**
* 设置:手续费
*/
public void setHandlingFee(BigDecimal handlingFee) {
this.handlingFee = handlingFee;
}
/**
* 获取:手续费
*/
public BigDecimal getHandlingFee() {
return handlingFee;
}
/**
* 设置:关税
*/
public void setTariff(BigDecimal tariff) {
this.tariff = tariff;
}
/**
* 获取:关税
*/
public BigDecimal getTariff() {
return tariff;
}
/**
* 设置:国家编号
*/
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
/**
* 获取:国家编号
*/
public String getCountryCode() {
return countryCode;
}
/**
* 设置:国家
*/
public void setCountry(String country) {
this.country = country;
}
/**
* 获取:国家
*/
public String getCountry() {
return country;
}
/**
* 设置:状态 0:删除 1:正常
*/
public void setStatus(Integer status) {
this.status = status;
}
/**
* 获取:状态 0:删除 1:正常
*/
public Integer getStatus() {
return status;
}
/**
* 设置:地区默认模板 0:默认 1:非默认
*/
public void setIsDefault(Integer isDefault) {
this.isDefault = isDefault;
}
/**
* 获取:地区默认模板 0:默认 1:非默认
*/
public Integer getIsDefault() {
return isDefault;
}
/**
* 设置:免邮价格
*/
public void setPostageFreePrice(BigDecimal postageFreePrice) {
this.postageFreePrice = postageFreePrice;
}
/**
* 获取:免邮价格
*/
public BigDecimal getPostageFreePrice() {
return postageFreePrice;
}
/**
* 设置:创建日期
*/
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;
}
}
package com.example.afrishop_v3.models;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
/**
* 商品二级分类表实体
* 表名 tb_cf_goodstwotype
*
* @author lipengjun
* @date 2020-03-05 13:29:28
*/
@Entity
@Setter
@Getter
public class TbCfGoodstwotype{
/**
* 商品二级分类Id
*/
@Id
private String goodstwotypeId;
/**
* 商品二级分类标题
*/
private String goodstwotypeTitle;
/**
* 商品一级分类id
*/
private String goodstypeId;
/**
* 二级分类图片
*/
private String goodstwotypeUrl;
/**
* 设置:商品二级分类Id
*/
public void setGoodstwotypeId(String goodstwotypeId) {
this.goodstwotypeId = goodstwotypeId;
}
/**
* 获取:商品二级分类Id
*/
public String getGoodstwotypeId() {
return goodstwotypeId;
}
/**
* 设置:商品二级分类标题
*/
public void setGoodstwotypeTitle(String goodstwotypeTitle) {
this.goodstwotypeTitle = goodstwotypeTitle;
}
/**
* 获取:商品二级分类标题
*/
public String getGoodstwotypeTitle() {
return goodstwotypeTitle;
}
/**
* 设置:商品一级分类id
*/
public void setGoodstypeId(String goodstypeId) {
this.goodstypeId = goodstypeId;
}
/**
* 获取:商品一级分类id
*/
public String getGoodstypeId() {
return goodstypeId;
}
/**
* 设置:二级分类图片
*/
public void setGoodstwotypeUrl(String goodstwotypeUrl) {
this.goodstwotypeUrl = goodstwotypeUrl;
}
/**
* 获取:二级分类图片
*/
public String getGoodstwotypeUrl() {
return goodstwotypeUrl;
}
}
package com.example.afrishop_v3.models;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
/**
* 商品一级分类表实体
* 表名 tb_cf_goodstype
*
* @author lipengjun
* @date 2020-03-31 17:04:36
*/
@Entity
@Setter
@Getter
public class TbCfGoodstype{
/**
* 商品分类Id
*/
@Id
private String goodstypeId;
/**
* 商品分类标题
*/
private String goodstypeTitle;
/**
* 商品分类排序编号
*/
private Integer goodstypeSort;
/**
* 分类详情(旧版)
*/
private String goodstypeUrl;
/**
* 分类图片
*/
private String goodstypeImage;
/**
* 设置:商品分类Id
*/
public void setGoodstypeId(String goodstypeId) {
this.goodstypeId = goodstypeId;
}
/**
* 获取:商品分类Id
*/
public String getGoodstypeId() {
return goodstypeId;
}
/**
* 设置:商品分类标题
*/
public void setGoodstypeTitle(String goodstypeTitle) {
this.goodstypeTitle = goodstypeTitle;
}
/**
* 获取:商品分类标题
*/
public String getGoodstypeTitle() {
return goodstypeTitle;
}
/**
* 设置:商品分类排序编号
*/
public void setGoodstypeSort(Integer goodstypeSort) {
this.goodstypeSort = goodstypeSort;
}
/**
* 获取:商品分类排序编号
*/
public Integer getGoodstypeSort() {
return goodstypeSort;
}
/**
* 设置:分类详情(旧版)
*/
public void setGoodstypeUrl(String goodstypeUrl) {
this.goodstypeUrl = goodstypeUrl;
}
/**
* 获取:分类详情(旧版)
*/
public String getGoodstypeUrl() {
return goodstypeUrl;
}
/**
* 设置:分类图片
*/
public void setGoodstypeImage(String goodstypeImage) {
this.goodstypeImage = goodstypeImage;
}
/**
* 获取:分类图片
*/
public String getGoodstypeImage() {
return goodstypeImage;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Date;
/**
* 实体
* 表名 tb_cf_item_collection
*
* @author lipengjun
* @date 2019-12-31 12:09:48
*/
@Entity
@Data
public class TbCfItemCollection {
/**
* ID
*/
@Id
private String id;
/**
* 用户
*/
private String userId;
/**
* 商品
*/
private String itemId;
/**
* 删除
*/
private Integer delFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 设置:ID
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:ID
*/
public String getId() {
return id;
}
/**
* 设置:用户
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:用户
*/
public String getUserId() {
return userId;
}
/**
* 设置:商品
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品
*/
public String getItemId() {
return itemId;
}
/**
* 设置:删除
*/
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
/**
* 获取:删除
*/
public Integer getDelFlag() {
return delFlag;
}
/**
* 设置:创建时间
*/
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;
}
}
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_item_desc
*
* @author lipengjun
* @date 2019-12-23 14:28:47
*/
@Entity
@Data
public class TbCfItemDesc {
/**
* 商品ID
*/
@Id
private String itemId;
/**
* 商品描述
*/
private String itemDesc;
/**
* 删除标志
*/
private Integer delFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 设置:商品ID
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品ID
*/
public String getItemId() {
return itemId;
}
/**
* 设置:商品描述
*/
public void setItemDesc(String itemDesc) {
this.itemDesc = itemDesc;
}
/**
* 获取:商品描述
*/
public String getItemDesc() {
return itemDesc;
}
/**
* 设置:删除标志
*/
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
/**
* 获取:删除标志
*/
public Integer getDelFlag() {
return delFlag;
}
/**
* 设置:创建时间
*/
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;
}
}
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_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
*/
private String sourceItemId;
/**
* 来源站点id
*/
private String stationId;
/**
* 站点类型 1:自营商品 2:其他
*/
private Integer stationType;
/**
* 商品名称
*/
private String itemTitle;
/**
* 商品数量
*/
private Integer itemNum;
/**
* 商品主图
*/
private String itemImg;
/**
* 商品单价
*/
private BigDecimal itemPrice;
/**
* 商品分类
*/
private String itemCategory;
/**
* 商品skus
*/
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.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 商品规格表实体
* 表名 tb_cf_item_skus
*
* @author lipengjun
* @date 2020-04-10 14:23:43
*/
@Entity
@Data
public class TbCfItemSkus{
/**
* 商品规格ID
*/
@Id
private String id;
/**
* 商品ID
*/
private String itemId;
/**
* 规格名称
*/
private String skuName;
/**
* 商品规格图片
*/
private String skuImg;
/**
* 商品规格编码
*/
private String skuCode;
/**
* 规格描述
*/
private String skuDesc;
/**
* 价格
*/
private BigDecimal skuPrice;
/**
* 属性IDS
*/
private String optionIds;
/**
* 数量
*/
private Integer skuCount;
/**
* 排序号
*/
private Integer orderNum;
/**
* 删除标记
*/
private Integer delFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
@JsonProperty
public List<SkuDetail> skus(){
String[] split = skuName.split("/");
String[] split2 = skuDesc.split("/");
int index = 0;
List<SkuDetail> detailList = new ArrayList<>();
for (String s : split){
if( index > split2.length ) break;
detailList.add(new SkuDetail(s,split2[index]));
index++;
}
return detailList;
}
/**
* 设置:商品规格ID
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:商品规格ID
*/
public String getId() {
return id;
}
/**
* 设置:商品ID
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品ID
*/
public String getItemId() {
return itemId;
}
/**
* 设置:规格名称
*/
public void setSkuName(String skuName) {
this.skuName = skuName;
}
/**
* 获取:规格名称
*/
public String getSkuName() {
return skuName;
}
/**
* 设置:商品规格图片
*/
public void setSkuImg(String skuImg) {
this.skuImg = skuImg;
}
/**
* 获取:商品规格图片
*/
public String getSkuImg() {
return skuImg;
}
/**
* 设置:商品规格编码
*/
public void setSkuCode(String skuCode) {
this.skuCode = skuCode;
}
/**
* 获取:商品规格编码
*/
public String getSkuCode() {
return skuCode;
}
/**
* 设置:规格描述
*/
public void setSkuDesc(String skuDesc) {
this.skuDesc = skuDesc;
}
/**
* 获取:规格描述
*/
public String getSkuDesc() {
return skuDesc;
}
/**
* 设置:价格
*/
public void setSkuPrice(BigDecimal skuPrice) {
this.skuPrice = skuPrice;
}
/**
* 获取:价格
*/
public BigDecimal getSkuPrice() {
return skuPrice;
}
/**
* 设置:属性IDS
*/
public void setOptionIds(String optionIds) {
this.optionIds = optionIds;
}
/**
* 获取:属性IDS
*/
public String getOptionIds() {
return optionIds;
}
/**
* 设置:数量
*/
public void setSkuCount(Integer skuCount) {
this.skuCount = skuCount;
}
/**
* 获取:数量
*/
public Integer getSkuCount() {
return skuCount;
}
/**
* 设置:排序号
*/
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}
/**
* 获取:排序号
*/
public Integer getOrderNum() {
return orderNum;
}
/**
* 设置:删除标记
*/
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
/**
* 获取:删除标记
*/
public Integer getDelFlag() {
return delFlag;
}
/**
* 设置:创建时间
*/
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;
}
}
package com.example.afrishop_v3.models;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* 商品属性实体
* 表名 tb_cf_option
*
* @author lipengjun
* @date 2019-12-26 16:36:21
*/
@Entity
@Getter
@Setter
public class TbCfOption{
/**
* 商品属性
*/
@Id
private String optionId;
/**
* 属性名
*/
private String optionName;
/**
* 属性种类
*/
private String optiionSpecies;
/**
* 商品ID
*/
private String itemId;
/**
* 商品规格ID
*/
@ManyToOne
@JsonBackReference
@JoinColumn(columnDefinition = "cid",name = "cid")
private TbCfCategory category;
/**
* 删除标志 0:正常 1:已删除
*/
private Integer delFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 设置:商品属性
*/
public void setOptionId(String optionId) {
this.optionId = optionId;
}
/**
* 获取:商品属性
*/
public String getOptionId() {
return optionId;
}
/**
* 设置:属性名
*/
public void setOptionName(String optionName) {
this.optionName = optionName;
}
/**
* 获取:属性名
*/
public String getOptionName() {
return optionName;
}
/**
* 设置:属性种类
*/
public void setOptiionSpecies(String optiionSpecies) {
optiionSpecies = optiionSpecies.trim();
this.optiionSpecies = optiionSpecies;
}
/**
* 获取:属性种类
*/
public String getOptiionSpecies() {
return optiionSpecies;
}
/**
* 设置:商品ID
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品ID
*/
public String getItemId() {
return itemId;
}
/**
* 设置:删除标志 0:正常 1:已删除
*/
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
/**
* 获取:删除标志 0:正常 1:已删除
*/
public Integer getDelFlag() {
return delFlag;
}
/**
* 设置:创建时间
*/
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;
}
}
package com.example.afrishop_v3.models;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Formula;
import org.hibernate.annotations.Where;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;
import java.util.Date;
/**
* 站点商品实体
* 表名 tb_cf_station_item
*
* @author lipengjun
* @date 2020-03-14 10:16:03
*/
@Entity
@Getter
@Setter
@Where(clause="enable_flag=1")
public class TbCfStationItem {
/**
* 商品id
*/
@Id
private String itemId;
/**
* 商品编号
*/
private String itemCode;
/**
* 商品名字
*/
private String itemName;
/**
* 商品标题
*/
private String itemBrief;
/**
* 商品一级分类
*/
private String itemCategory;
/**
* 商品价格
*/
private BigDecimal itemPrice;
/**
* 商品折扣价
*/
private BigDecimal discountPrice;
/**
* 商品链接
*/
private String itemUrl;
/**
* 商品图片
*/
private String itemImg;
/**
* 搜索关键字
*/
private String itemTags;
/**
* 商品标签
*/
private String itemLabel;
/**
* 浏览人数
*/
private Long itemNum;
/**
* 收藏人数
*/
private Long itemCollectionNum;
/**
* 商品库存
*/
private Long itemCount;
/**
* 商品规格
*/
private String itemSku;
/**
* 是否置顶 Y:是 N:否
*/
private String itemTop;
/**
* 供应商
*/
private String supplier;
/**
* 所属平台
*/
private String platformCode;
/**
* 平台名
*/
private String platformName;
/**
* 状态 0、删除 1、上架 2、下架
*/
private Integer enableFlag;
/**
* 创建日期
*/
private Date createTime;
/**
* 商品二级分类
*/
private String itemCategorytwo;
/**
* 商品品名
*/
private String itemDescritionId;
private String template;
@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;
/**
* 设置:商品id
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品id
*/
public String getItemId() {
return itemId;
}
/**
* 设置:商品编号
*/
public void setItemCode(String itemCode) {
this.itemCode = itemCode;
}
/**
* 获取:商品编号
*/
public String getItemCode() {
return itemCode;
}
public int getTotalScore() {
return totalScore;
}
/**
* 设置:商品名字
*/
public void setItemName(String itemName) {
this.itemName = itemName;
}
/**
* 获取:商品名字
*/
public String getItemName() {
return itemName;
}
/**
* 设置:商品标题
*/
public void setItemBrief(String itemBrief) {
this.itemBrief = itemBrief;
}
/**
* 获取:商品标题
*/
public String getItemBrief() {
return itemBrief;
}
/**
* 设置:商品一级分类
*/
public void setItemCategory(String itemCategory) {
this.itemCategory = itemCategory;
}
/**
* 获取:商品一级分类
*/
public String getItemCategory() {
return itemCategory;
}
/**
* 设置:商品价格
*/
public void setItemPrice(BigDecimal itemPrice) {
this.itemPrice = itemPrice;
}
/**
* 获取:商品价格
*/
public BigDecimal getItemPrice() {
return itemPrice;
}
/**
* 设置:商品折扣价
*/
public void setDiscountPrice(BigDecimal discountPrice) {
this.discountPrice = discountPrice;
}
/**
* 获取:商品折扣价
*/
public BigDecimal getDiscountPrice() {
return discountPrice;
}
/**
* 设置:商品链接
*/
public void setItemUrl(String itemUrl) {
this.itemUrl = itemUrl;
}
/**
* 获取:商品链接
*/
public String getItemUrl() {
return itemUrl;
}
/**
* 设置:商品图片
*/
public void setItemImg(String itemImg) {
itemImg = itemImg.split(";")[0];
this.itemImg = itemImg;
}
/**
* 获取:商品图片
*/
public String getItemImg() {
return itemImg;
}
/**
* 设置:搜索关键字
*/
public void setItemTags(String itemTags) {
this.itemTags = itemTags;
}
/**
* 获取:搜索关键字
*/
public String getItemTags() {
return itemTags;
}
/**
* 设置:商品标签
*/
public void setItemLabel(String itemLabel) {
this.itemLabel = itemLabel;
}
/**
* 获取:商品标签
*/
public String getItemLabel() {
return itemLabel;
}
/**
* 设置:浏览人数
*/
public void setItemNum(Long itemNum) {
this.itemNum = itemNum;
}
/**
* 获取:浏览人数
*/
public Long getItemNum() {
return itemNum;
}
/**
* 设置:收藏人数
*/
public void setItemCollectionNum(Long itemCollectionNum) {
this.itemCollectionNum = itemCollectionNum;
}
/**
* 获取:收藏人数
*/
public Long getItemCollectionNum() {
return itemCollectionNum;
}
/**
* 设置:商品库存
*/
public void setItemCount(Long itemCount) {
this.itemCount = itemCount;
}
/**
* 获取:商品库存
*/
public Long getItemCount() {
return itemCount;
}
/**
* 设置:商品规格
*/
public void setItemSku(String itemSku) {
this.itemSku = itemSku;
}
/**
* 获取:商品规格
*/
public String getItemSku() {
return itemSku;
}
/**
* 设置:是否置顶 Y:是 N:否
*/
public void setItemTop(String itemTop) {
this.itemTop = itemTop;
}
/**
* 获取:是否置顶 Y:是 N:否
*/
public String getItemTop() {
return itemTop;
}
/**
* 设置:供应商
*/
public void setSupplier(String supplier) {
this.supplier = supplier;
}
/**
* 获取:供应商
*/
public String getSupplier() {
return supplier;
}
/**
* 设置:所属平台
*/
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;
}
/**
* 设置:状态 0、删除 1、上架 2、下架
*/
public void setEnableFlag(Integer enableFlag) {
this.enableFlag = enableFlag;
}
/**
* 获取:状态 0、删除 1、上架 2、下架
*/
public Integer getEnableFlag() {
return enableFlag;
}
/**
* 设置:创建日期
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* 获取:创建日期
*/
public Date getCreateTime() {
return createTime;
}
/**
* 设置:商品二级分类
*/
public void setItemCategorytwo(String itemCategorytwo) {
this.itemCategorytwo = itemCategorytwo;
}
/**
* 获取:商品二级分类
*/
public String getItemCategorytwo() {
return itemCategorytwo;
}
/**
* 设置:商品品名
*/
public void setItemDescritionId(String itemDescritionId) {
this.itemDescritionId = itemDescritionId;
}
/**
* 获取:商品品名
*/
public String getItemDescritionId() {
return itemDescritionId;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfAddress;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfAddressRepository extends PagingAndSortingRepository<TbCfAddress,String> {
List<TbCfAddress> findAllByUserId(String userId);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfCartRecordR;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Optional;
public interface TbCfCartRecordRRepository extends PagingAndSortingRepository<TbCfCartRecordR,String> {
int countByUserId(String userId);
Optional<TbCfCartRecordR> findFirstByUserIdAndItemIdAndItemSku(String userId, String itemId, String itemSku);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfCategory;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfCategoryRepository extends PagingAndSortingRepository<TbCfCategory,String> {
List<TbCfCategory> findAllByItemId(String itemId);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfDescripiton;
import org.springframework.data.domain.Page;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfDescripitonRepository extends PagingAndSortingRepository<TbCfDescripiton,String> {
List<TbCfDescripiton> findAllByGoodstwotypeId(String categoryTwo);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfExpTemKeyword;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface TbCfExpTemKeywordRepository extends PagingAndSortingRepository<TbCfExpTemKeyword,String> {
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfExpressTemplate;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfExpressTemplateRepository extends PagingAndSortingRepository<TbCfExpressTemplate,String> {
@Query(value = "select a from #{#entityName} a WHERE ")
List<TbCfExpressTemplate> getTemplateByKeyword(String keyword);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfGoodstwotype;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfGoodstwotypeRepository extends PagingAndSortingRepository<TbCfGoodstwotype,String> {
List<TbCfGoodstwotype> findAllByGoodstypeId(String id);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfGoodstype;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface TbCfGoodstypeRepository extends PagingAndSortingRepository<TbCfGoodstype,String> {
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfItemCollection;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface TbCfItemCollectionRepository extends PagingAndSortingRepository<TbCfItemCollection,String> {
boolean existsByUserIdAndItemId(String userId, String itemId);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfItemDesc;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface TbCfItemDescRepository extends PagingAndSortingRepository<TbCfItemDesc,String> {
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfItemDetail;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Optional;
public interface TbCfItemDetailRepository extends PagingAndSortingRepository<TbCfItemDetail,String> {
Optional<TbCfItemDetail> findFirstByItemImgAndItemSku(String itemImg, String itemSku);
Optional<TbCfItemDetail> findFirstBySourceItemIdAndItemSku(String itemImg, String itemSku);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfItemSkus;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfItemSkuRepository extends PagingAndSortingRepository<TbCfItemSkus,String> {
List<TbCfItemSkus> findAllByItemId(String itemId);
}
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfStationItem;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface TbCfStationItemRepository extends PagingAndSortingRepository<TbCfStationItem,String> {
Page<TbCfStationItem> findAllByItemCategorytwo(String category, Pageable pageable);
Page<TbCfStationItem> findAllByItemDescritionId(String description, Pageable pageable);
Page<TbCfStationItem> findAllByItemLabelContaining(String label, Pageable pageable);
@Query(value = "select a from #{#entityName} a WHERE a.itemId <> :itemId and (a.itemDescritionId = :descriptionId or a.itemCategorytwo = :categoryTwo or a.itemCategory = :category )")
Page<TbCfStationItem> getRecommendItems(@Param("itemId") String itemId,@Param("descriptionId") String descriptionId,@Param("categoryTwo") String categoryTwo,@Param("category") String category, Pageable pageable);
Page<TbCfStationItem> findAllByItemNameContainingOrItemTagsContaining(String itemName, String itemTags, Pageable pageable);
List<TbCfStationItem> findAllByItemDescritionId(String id);
}
...@@ -50,7 +50,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -50,7 +50,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean @Bean
public PasswordEncoder passwordEncoder() { public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); return new BCryptPasswordEncoder(12);
} }
@Override @Override
...@@ -58,7 +58,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -58,7 +58,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
http.cors().and().csrf().disable() http.cors().and().csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/api/auth/**").permitAll() .authorizeRequests().antMatchers("/api/auth/**","/itemStation/**").permitAll()
.antMatchers("/api/test/**").permitAll() .antMatchers("/api/test/**").permitAll()
.anyRequest().authenticated(); .anyRequest().authenticated();
......
...@@ -11,6 +11,7 @@ import org.springframework.stereotype.Component; ...@@ -11,6 +11,7 @@ import org.springframework.stereotype.Component;
public class AuthenticationUser implements IAuthenticationFacade { public class AuthenticationUser implements IAuthenticationFacade {
private final UserRepository repository; private final UserRepository repository;
public AuthenticationUser(UserRepository repository) { public AuthenticationUser(UserRepository repository) {
this.repository = repository; this.repository = repository;
} }
...@@ -20,7 +21,11 @@ public class AuthenticationUser implements IAuthenticationFacade { ...@@ -20,7 +21,11 @@ public class AuthenticationUser implements IAuthenticationFacade {
return SecurityContextHolder.getContext().getAuthentication(); return SecurityContextHolder.getContext().getAuthentication();
} }
public TbCfUserInfo userInfo(){ public TbCfUserInfo user(){
return repository.findByAccount(getAuthentication().getName()).orElseGet(null); return repository.findByAccount(getAuthentication().getName()).orElseGet(null);
} }
public String userId(){
return user().getUserId();
}
} }
package com.example.afrishop_v3.thread;
import com.example.afrishop_v3.util.HttpClientUtil;
import com.example.afrishop_v3.util.SortUtil;
import net.sf.json.JSONObject;
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.concurrent.Callable;
/*腾讯ai 基类*/
public abstract class AbstractTencentCallable<T> implements Callable<Map<String, Object>> {
//申请的app_id
protected Integer app_id;
//申请的app_url
protected String app_url;
protected T param;
//编码方式
protected String charset;
@Override
public Map<String, Object> call() throws Exception {
//logger.info("call()方法被自动调用!!! " + Thread.currentThread().getName());
Map paramMap = BeanUtils.describe(param);
// TODO 去除class说明,或许可以尝试别的方法
paramMap.remove("class");
SortedMap<String, Object> sortMap = new TreeMap<String, Object>(paramMap);
String sign = SortUtil.createSign(sortMap,charset);
paramMap.put("sign", sign);
//发送请求
String resultStr = HttpClientUtil.createConnection(this.app_url, paramMap,charset);
return JSONObject.fromObject(resultStr);
}
abstract void fillParam(T param);
}
package com.example.afrishop_v3.thread;
import java.util.concurrent.*;
/**
* 通过Semaphore限定线程数的线程池调用
*/
public class TaskLimitSemaphore {
//the number of threads to keep in the pool, even
// if they are idle, unless {@code allowCoreThreadTimeOut} is set
private int corePoolSize = 5;
//the maximum number of threads to allow in the pool
private int maximumPoolSize = 20;
//when the number of threads is greater than
//the core, this is the maximum time that excess idle threads
//will wait for new tasks before terminating.
private long keepAliveTime = 60L;
//线程池
private ExecutorService executor;
//控制线程数
private Semaphore semaphore;
public TaskLimitSemaphore(int limit) {
corePoolSize = limit;
this.maximumPoolSize = limit + 20;
this.semaphore = new Semaphore(limit);
this.executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,
keepAliveTime, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
}
/**
* @param corePoolSize the number of threads to keep in the pool, even
* if they are idle, unless {@code allowCoreThreadTimeOut} is set
* @param limit 最大线程数 数值小于等于 maximumPoolSize
*/
public TaskLimitSemaphore(int corePoolSize, int limit) {
corePoolSize = limit;
this.maximumPoolSize = limit + 20;
this.semaphore = new Semaphore(limit);
this.executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,
keepAliveTime, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
}
/**
* @param corePoolSize the number of threads to keep in the pool, even
* if they are idle, unless {@code allowCoreThreadTimeOut} is set
* @param maximumPoolSize the maximum number of threads to allow in the pool
* @param keepAliveTime when the number of threads is greater than
* the core, this is the maximum time that excess idle threads
* will wait for new tasks before terminating.
* @param limit 最大线程数 数值小于等于 maximumPoolSize
*/
public TaskLimitSemaphore(int corePoolSize, int maximumPoolSize, long keepAliveTime, int limit) {
corePoolSize = limit;
this.maximumPoolSize = limit + 20;
this.keepAliveTime = keepAliveTime;
this.semaphore = new Semaphore(limit);
this.executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,
keepAliveTime, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
}
public <T> Future<T> submit(final Callable<T> task) throws InterruptedException {
semaphore.acquire();
return executor.submit(() -> {
try {
return task.call();
} finally {
semaphore.release();
}
});
}
/**
* 关闭线程池
*/
public void shutdown() {
executor.shutdown();
}
}
package com.example.afrishop_v3.thread;
import com.example.afrishop_v3.bo.TencentWordsegParam;
import com.example.afrishop_v3.config.DomainProperties;
import com.example.afrishop_v3.util.IdUtil;
import com.example.afrishop_v3.util.SpringContextUtil;
import java.util.Map;
/** 腾讯分词类
* https://api.ai.qq.com/fcgi-bin/nlp/nlp_wordpos
* */
public class WordposCallable extends AbstractTencentCallable<TencentWordsegParam>{
//private static Logger logger = LoggerFactory.getLogger(WordposCallable.class);
private static DomainProperties domainProperties = (DomainProperties) SpringContextUtil.getBean("domainProperties");
public WordposCallable(TencentWordsegParam param) {
this.app_id = Integer.valueOf(domainProperties.getProperty("tencent.translate.app_id"));
this.app_url = domainProperties.getProperty("tencent.wordpos.app_url");
this.param = param;
this.charset="GBK";
}
@Override
public Map<String, Object> call() throws Exception {
//logger.info("call()方法被自动调用!!! " + Thread.currentThread().getName());
//填充参数
fillParam(param);
Map<String, Object> resultMap = super.call();
return resultMap;
}
/**
* 填充翻译时参数
*
* @param param
*/
@Override
void fillParam(TencentWordsegParam param) {
if (param.getApp_id() == null) {
param.setApp_id(this.app_id);
}
if (param.getNonce_str() == null) {
String randomLetters = IdUtil.createIdbyUUID();
param.setNonce_str(randomLetters);
}
if (param.getTime_stamp() == null) {
long currentTime = System.currentTimeMillis() / 1000;
param.setTime_stamp(currentTime);
}
}
}
package com.example.afrishop_v3.util;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.util.List;
import java.util.Map;
public class GsonUtil {
//不用创建对象,直接使用Gson.就可以调用方法
private static Gson gson = null;
//判断gson对象是否存在了,不存在则创建对象
static {
if (gson == null) {
//gson = new Gson(); //当使用GsonBuilder方式时属性为空的时候输出来的json字符串是有键值key的,显示形式是"key":null,而直接new出来的就没有"key":null的
gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
}
}
//无参的私有构造方法
private GsonUtil() {
}
/**
* 将对象转成json格式
*
* @param object
* @return String
*/
public static String GsonString(Object object) {
String gsonString = null;
if (gson != null) {
gsonString = gson.toJson(object);
}
return gsonString;
}
/**
* 将json转成特定的cls的对象
*
* @param gsonString
* @param cls
* @return
*/
public static <T> T GsonToBean(String gsonString, Class<T> cls) {
T t = null;
if (gson != null) {
//传入json对象和对象类型,将json转成对象
t = gson.fromJson(gsonString, cls);
}
return t;
}
/**
* json字符串转成list
*
* @param gsonString
* @param cls
* @return
*/
public static <T> List<T> GsonToList(String gsonString, Class<T> cls) {
List<T> list = null;
if (gson != null) {
//根据泛型返回解析指定的类型,TypeToken<List<T>>{}.getType()获取返回类型
list = gson.fromJson(gsonString, new TypeToken<List<T>>() {
}.getType());
}
return list;
}
/**
* json字符串转成list中有map的
*
* @param gsonString
* @return
*/
public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) {
List<Map<String, T>> list = null;
if (gson != null) {
list = gson.fromJson(gsonString,
new TypeToken<List<Map<String, T>>>() {
}.getType());
}
return list;
}
/**
* json字符串转成map的
*
* @param gsonString
* @return
*/
public static <T> Map<String, T> GsonToMaps(String gsonString) {
Map<String, T> map = null;
if (gson != null) {
map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {
}.getType());
}
return map;
}
}
package com.example.afrishop_v3.util;
import com.example.afrishop_v3.enums.PlatformEnum;
import com.mashape.unirest.http.Unirest;
import org.apache.http.*;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HttpClientUtil {
private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
/**
* 获取url链接中的content 内容
*
* @param sourceUrl 目标url
* @param sourceType
* @return
* @throws URISyntaxException
* @throws IOException
*/
public static String getContentByUrl(String sourceUrl, String sourceType) throws URISyntaxException, IOException {
sourceUrl = urlEncode(sourceUrl, Consts.UTF_8.name());
URL url = new URL(sourceUrl);
//构建URI
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
//创建一个HttpContext对象,用来保存Cookie
//HttpClientContext httpClientContext = HttpClientContext.create();
//构造自定义的HttpClient对象
CloseableHttpClient httpClient;
if (PlatformEnum.TB.getValue().equals(sourceType)) {
httpClient = createBrowserClient();
} else if (PlatformEnum.TM.getValue().equals(sourceType)) {
//天猫用手机端访问拿的数据 香港服务器不可行
httpClient = createIphoneClient();
//httpClient= createBrowserClient();
} else {
httpClient = createBrowserClient();
}
/* 构造请求对象 */
HttpUriRequest httpUriRequest = RequestBuilder.get().setUri(uri).build();
/* ****************获取商品详情链接******************* */
//执行请求,传入HttpContext,将会得到请求结果的信息
//httpClient.execute(httpUriRequest,httpClientContext)
HttpResponse httpResponse = httpClient.execute(httpUriRequest);
//拿到返回的HttpResponse的"实体"
HttpEntity result = httpResponse.getEntity();
//System.getProperties().list(System.out);//输出当前环境属性 55555555
/*if(result.getContentEncoding()!=null) {
if ("gzip".equalsIgnoreCase(result.getContentEncoding().getValue())) {
result = new GzipDecompressingEntity(result);
} else if ("deflate".equalsIgnoreCase(result.getContentEncoding().getValue())) {
result = new DeflateDecompressingEntity(result);
}
}*/
String defaultCharset = Consts.UTF_8.name();
if (PlatformEnum.TM.getValue().equals(sourceType)) {
defaultCharset = Consts.UTF_8.name();
}
String content = EntityUtils.toString(result, defaultCharset);
//logger.info(content);
//关闭连接
httpClient.close();
return content;
}
/**
* 获取url链接中的content 网页内容
*
* @param url 目标url
* @return
* @throws URISyntaxException
* @throws IOException
*/
public static String getContentByUrl(String url, BasicHeader basicHeader) throws URISyntaxException, IOException {
URI sibUri = new URIBuilder(url).build();
//构造请求对象
HttpUriRequest sibUriRequest = RequestBuilder.get().setUri(sibUri).build();
//构造自定义的HttpClient对象
CloseableHttpClient sibClient = createBrowserClient(basicHeader);
//创建一个HttpContext对象,用来保存Cookie
//HttpClientContext sibClientContext = HttpClientContext.create();
//执行请求,传入HttpContext,将会得到请求结果的信息
HttpResponse sibResponse = sibClient.execute(sibUriRequest);
//拿到返回的HttpResponse的"实体"
HttpEntity sibResult = sibResponse.getEntity();
String sibContent = EntityUtils.toString(sibResult);
//unicode 解码
//关闭连接
sibClient.close();
return sibContent;
}
/**
* 创建带浏览器头部的连接
*
* @return
*/
public static CloseableHttpClient createBrowserClient() {
//构造自定义Header信息
List<Header> headerList = new ArrayList<>();
headerList.add(new BasicHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"));
headerList.add(new BasicHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"));
headerList.add(new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br"));
headerList.add(new BasicHeader(HttpHeaders.CACHE_CONTROL, "max-age=0"));
headerList.add(new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"));
headerList.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "zh-CN,zh;q=0.9"));
headerList.add(new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=utf-8"));
//cookie
BasicCookieStore cookieStore = new BasicCookieStore();
return HttpClients.custom().setDefaultHeaders(headerList).setDefaultCookieStore(cookieStore).build();
}
/**
* 创建带浏览器头部的连接
*
* @return
*/
public static CloseableHttpClient createBrowserClient(BasicHeader basicHeader) {
//构造自定义Header信息
List<Header> headerList = new ArrayList<>();
headerList.add(new BasicHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9," +
"image/webp,image/apng,*/*;q=0.8"));
headerList.add(new BasicHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"));
headerList.add(new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br"));
headerList.add(new BasicHeader(HttpHeaders.CACHE_CONTROL, "max-age=0"));
headerList.add(new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"));
headerList.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "zh-CN,zh;q=0.9"));
headerList.add(basicHeader);
//cookie
BasicCookieStore cookieStore = new BasicCookieStore();
return HttpClients.custom().setDefaultHeaders(headerList).setDefaultCookieStore(cookieStore).build();
}
/**
* 创建带苹果手机头部的连接
*
* @return
*/
public static CloseableHttpClient createIphoneClient() {
//构造自定义Header信息
List<Header> headerList = new ArrayList<>();
headerList.add(new BasicHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"));
headerList.add(new BasicHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"));
//headerList.add(new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br"));
headerList.add(new BasicHeader(HttpHeaders.CACHE_CONTROL, "max-age=0"));
headerList.add(new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"));
headerList.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "zh-CN,zh;q=0.9"));
//cookie
BasicCookieStore cookieStore = new BasicCookieStore();
return HttpClients.custom().setDefaultHeaders(headerList).setDefaultCookieStore(cookieStore).build();
}
/**
* 发送请求
*
* @param url
* @param paramMap
* @param charset
* @return
*/
public static String createConnection(String url, Map<String, Object> paramMap, String charset) throws IOException {
List<NameValuePair> formparams = setHttpParams(paramMap);
String param = URLEncodedUtils.format(formparams, charset);
// 构建一个GET请求
HttpGet httpGet = new HttpGet();
httpGet.setURI(URI.create(url + "?" + param));
CloseableHttpClient httpClient = createBrowserClient();
HttpResponse sibResponse = httpClient.execute(httpGet);
// 拿到返回的HttpResponse的"实体"
HttpEntity sibResult = sibResponse.getEntity();
return EntityUtils.toString(sibResult);
}
/**
* 设置 Http 参数
*
* @param paramsMap
* @return
*/
private static List<NameValuePair> setHttpParams(Map<String, Object> paramsMap) {
List<NameValuePair> list = new ArrayList<>();
for (Map.Entry<String, Object> stringObjectEntry : paramsMap.entrySet()) {
String key = stringObjectEntry.getKey();
String value = (String) stringObjectEntry.getValue();
list.add(new BasicNameValuePair(key, value));
}
return list;
}
/**
* 获取连接中的参数
*
* @param targetUrl
* @return
*/
public static Map<String, String> getParamMap(String targetUrl) throws URISyntaxException, MalformedURLException {
URL url = new URL(targetUrl);
//构建URI
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
List<NameValuePair> params = URLEncodedUtils.parse(uri, String.valueOf(Charset.forName(Consts.UTF_8.name())));
Map<String, String> paramMap = new HashMap<>();
for (NameValuePair param : params) {
paramMap.put(param.getName(), param.getValue());
}
return paramMap;
}
/**
* 发送带body参数的post请求
*
* @param url
* @param paramMap
* @return
* @throws URISyntaxException
* @throws IOException
*/
public static String sendPostWithBodyParameter(String url, Map<String, Object> paramMap) throws IOException {
//构建一个Post请求
HttpPost httpPost = new HttpPost();
httpPost.setURI(URI.create(url));
httpPost.setHeader("Content-Type", "application/json");
//放参数
StringEntity entity = new StringEntity(GsonUtil.GsonString(paramMap), ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
//构造自定义的HttpClient对象
CloseableHttpClient sibClient = HttpClients.custom().build();
//执行请求,传入HttpContext,将会得到请求结果的信息
HttpResponse sibResponse = sibClient.execute(httpPost);
//拿到返回的HttpResponse的"实体"
HttpEntity sibResult = sibResponse.getEntity();
String sibContent = EntityUtils.toString(sibResult);
//unicode 解码
//关闭连接
sibClient.close();
return sibContent;
}
/**
* 对链接进行url编码
*
* @param url
* @param chartSet
* @return
*/
public static String urlEncode(String url, String chartSet) {
try {
//双字节,包括中文和中文符号[^\x00-\xff] 中文[\u4e00-\u9fa5]
Matcher matcher = Pattern.compile("[^\\x00-\\xff]").matcher(url);
while (matcher.find()) {
String tmp = matcher.group();
url = url.replaceAll(tmp, URLEncoder.encode(tmp, chartSet));
}
} catch (UnsupportedEncodingException e) {
logger.error("双字节编码异常:", e);
}
return url;
}
/**
* 发送请求
*
* @param url
* @param paramMap
* @param charset
* @return
*/
public static String getConnection(String url, Map<String, Object> paramMap, String charset) throws IOException {
List<NameValuePair> formparams = setHttpParams(paramMap);
String param = URLEncodedUtils.format(formparams, charset);
// 构建一个GET请求
HttpGet httpGet = new HttpGet();
httpGet.setURI(URI.create(url + "?" + param));
CloseableHttpClient httpClient = createBrowserClient();
HttpResponse sibResponse = httpClient.execute(httpGet);
// 拿到返回的HttpResponse的"实体"
HttpEntity sibResult = sibResponse.getEntity();
Header header = sibResult.getContentEncoding();
return EntityUtils.toString(sibResult) + "#" + header;
}
/**
* 获取shopify接口 headers里的参数【Link】
*
* @param url
* @return
* @throws Exception
*/
public static List<String> getHeaders(String url) throws Exception {
List<String> list = new ArrayList();
com.mashape.unirest.http.HttpResponse<String> response = Unirest.get(url)
.headers(new HashMap<>())
.asString();
List<String> link = response.getHeaders().get("Link");
String linkString = link.toString();
boolean next = linkString.contains("next");
boolean previous = linkString.contains("previous");
String str = link.get(0);
String[] split = str.split(",");
for (int i = 0; i < split.length; i++) {
String s = split[i];
String sub = s.substring(s.indexOf("page_info="), s.lastIndexOf(">;"));
String substring = sub.substring(10);
list.add(substring);
}
if (next) {
list.add("first");
if (previous) {
list.add("middle");
}
} else {
list.add("last");
}
return list;
}
}
package com.example.afrishop_v3.util;
import com.example.afrishop_v3.bo.TencentWordsegParam;
import com.example.afrishop_v3.thread.TaskLimitSemaphore;
import com.example.afrishop_v3.thread.WordposCallable;
import net.sf.json.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
/**
* 分词
*/
public class WordposHelper {
private static Logger logger = LoggerFactory.getLogger(WordposHelper.class);
//默认10条线程跑分词
private static final TaskLimitSemaphore taskLimitSemaphore=new TaskLimitSemaphore(10);
/**
* 翻译文本
* @param valeMap
* @param text
* @throws ExecutionException
* @throws InterruptedException
*/
public static void separeteText(List<Map<String, Object>> futureList, Map<String,Object> valeMap, String text) {
TencentWordsegParam param=new TencentWordsegParam(text);
Future<Map<String,Object>> future = null;
try {
future = taskLimitSemaphore.submit(new WordposCallable(param));
Map<String,Object> map=new HashMap<>();
map.put("future",future);
map.put("value",valeMap);
futureList.add(map);
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}
/**
* 等待翻译结果
* @param futureList
*/
public static void waitForResult(List<Map<String, Object>> futureList) throws ExecutionException, InterruptedException, TimeoutException {
for(Map<String,Object> futureMap:futureList) {
Future<Map<String,Object>> future= (Future<Map<String, Object>>) futureMap.get("future");
Map<String,Object> valeMap = (Map<String,Object> ) futureMap.get("value");
while(!future.isDone());//Future返回如果没有完成,则一直循环等待,直到Future返回完成
Map<String,Object> resultMap=future.get(10000, TimeUnit.MILLISECONDS);
if(resultMap!=null&&(int)resultMap.get("ret")==0) {
Map<String,Object> dataMap=(Map<String,Object>)resultMap.get("data");
JSONArray tokens = (JSONArray) dataMap.get("mix_tokens");//base_tokens
valeMap.put("base_tokens",tokens);
//logger.info(tokens.toString());
} else {
logger.error("翻译出错");
}
}
}
}
#############配置###########################
#用户默认头像
user.avatar=https://dev.diaosaas.com/upload/chinafrica/user/avatar.png
################################################################################
###################################邮箱###############################################
#网易
#email.hostName=smtp.yeah.net
#email.from.email=chinafrica@yeah.net
#email.from.name=chinafrica
#email.authentication.userName=chinafrica@yeah.net
#email.authentication.password=diaoyun2019
#阿里企业邮箱
email.hostName=smtp.mxhichina.com
email.from.email=official@afrieshop.com
email.from.name=Afrishop
email.authentication.userName=official@afrieshop.com
email.authentication.password=Afri123456
#发送主题
email.subject=Verification Code from Afrishop
###################################邮箱 END###############################################
################redis有效时间###################
#登录token second 默认30分 一个星期 604800
redis.token.expiredTime=7776000000
#订单 1天 second 86400
redis.order.expiredTime=86400
################腾讯翻译配置###################
tencent.translate.app_id=2120761040
//tencent.translate.app_id=2124562134
tencent.translate.app_url=https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttranslate
//tencent.wordseg.app_url=https://api.ai.qq.com/fcgi-bin/nlp/nlp_wordseg
tencent.wordpos.app_url=https://api.ai.qq.com/fcgi-bin/nlp/nlp_wordpos
################腾讯翻译配置 END###################
##################新11.05(stripe公钥(不加密)和私钥(已用 AESUtils 加密))################################
#stripe.pk=pk_live_FP6ipnw3lt0e1AmS5IVdpJWd00s5PLdbVa
#stripe.sk=YWA9aMOPvCfq0KWda2Wsh567lLl600+QK/X8ZEFDPj6UDNd3icKr6fJ+X3ey8X+T
#stripe.pk=pk_test_y5dXLjyUyBD11Ta9g2DGynxN0048vnmpGz
#stripe.sk=+RFm7p84hym4liN1/MSoshYMiy4rWgUFoZ3S5+ucxRTyzblQL2Pi0y1TDQoSE96z
stripe.pk=pk_live_puDlKTnBSW6CXQ6TG766jWZ000UuPSIUDU
stripe.sk=YVym3/CqlcF3PF6JZw6CEOhCoR4R7oqlK8HM8LHlZnqzZijZdjlxIb5wl7/S6e6y
##################stripe公钥(不加密)和私钥(已用 AESUtils 加密)################################
#stripe.pk=pk_live_5MdXU4N1cvmU1yatYp5v0E0n00C7tAXpGB
#stripe.sk=d87UqTQ6QUjuNkXrjH51Gl/Zqnfy98HRl23xljism2hpaXjSNTwdl6pv6FM7D4tT
#stripe.pk=pk_test_rXUSgU8Kw7DLhDzMbHM0r55O00JAzVBBJR
#stripe.sk=3ff57yz9S5INBexBOnzi/ZaxClXkXlJ+FZ6XLc/f2vpESScG7YOaQaG2YNRic3HF
######################outlook的账户公钥密钥#####################
#stripe.pk=pk_test_uljWJWUuD8fzZXPlGtDZ1fxx00o1ZKr7QL
#stripe.sk=BbLXgo+ohgrAP7p3tB52YTqNwhAiTYzYWAX0W+/1PES6kOupxwc/7xpAR8QsG6gP
######################outlook的账户公钥密钥 END#####################
##################stripe公钥和私钥 END###############################
#############################第三方物流公司接口#################################
express.info.api=http://shd.kjwlxt.com/api/track.php
express.info.user_no=shd806
express.info.token=d44426bd5b64dd2
##########################PayPal支付############################################
#paypal.mode=sandbox
#paypal.client.app=AW7u5JVLhzA7_0EznoZ7uKHFzz1_nACOtt6k9oEpbisGUy3nqjjb3L-MmBFnD3YDuMSapcXpfSiYWtiB
#paypal.client.secret=EIyDryMDyM0BDWp2mtuGFdSU2WOkWtmSuGGaRnUiIom7kxuM7JhuSFfETbC8X4e9E_ZbMX4zg4jHA1lV
paypal.mode=live
#################################paypal真实######################################################
#paypal.client.app=AUUFVT30kPIP-a7dcQfPS8KYdl5cCZIwyYNIS79Cp7E_0GNZWfut3ZHQiRIoamqRstHigMoTTy1n8Glj
#paypal.client.secret=EJBVz86f9Mg482bL3lniPtLYe_ULyBkjTS0q-qhZBIVFC3dgae-J7-JJA5iWQAZsQqtAOV_ctVGWNLJS
paypal.success.url=https://africa.gzdazt.com/zion/paypal/success
paypal.cancel.url=https://africa.gzdazt.com/zion/paypal/cancel
#################################paypal测试######################################################
paypal.client.app=AW7u5JVLhzA7_0EznoZ7uKHFzz1_nACOtt6k9oEpbisGUy3nqjjb3L-MmBFnD3YDuMSapcXpfSiYWtiB
paypal.client.secret=EIyDryMDyM0BDWp2mtuGFdSU2WOkWtmSuGGaRnUiIom7kxuM7JhuSFfETbC8X4e9E_ZbMX4zg4jHA1lV
#paypal.success.url=http://localhost:8083/zion/paypal/success
#paypal.cancel.url=http://localhost:8083/zion/paypal/cancel
#################################flutterwave真实######################################################
#flutterwave.public.key=FLWPUBK-f69061bce3128da9b15c1e12c6182ff8-X
#flutterwave.secret.key=FLWSECK-38ec6860f49e953333218d929281ce65-X
#flutterwave.encryption.key=38ec6860f49e0d9d488a83b1
#flutterwave.merchant.id=3950728
#################################flutterwave真实(miumiu@afrieshop.com)######################################################
#flutterwave.public.key=FLWPUBK-ee0f5d653f5f33fc89e6caf9de6a4c34-X
#flutterwave.secret.key=FLWSECK-c06cdc19526077f3855b76045ca77de3-X
#flutterwave.encryption.key=c06cdc1952600626ec8779ed
#flutterwave.merchant.id=6577084
#################################flutterwave测试(TEST)######################################################
flutterwave.public.key=FLWPUBK_TEST-e3cc948e7cb24b2128fca3b781f6fce0-X
flutterwave.secret.key=FLWSECK_TEST-f88371ca63a989a4af95625475a0d22d-X
flutterwave.encryption.key=FLWSECK_TEST001d4c34f798
flutterwave.merchant.id=1508207
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论