新增快手电商接口

This commit is contained in:
Richie 2024-03-30 10:35:49 +08:00
parent 555a7e1ee0
commit a7a18bfa0e
114 changed files with 2009 additions and 73 deletions

View File

@ -8,10 +8,11 @@ package com.qihang.common.common;
*/
public enum ResultVoEnum {
SUCCESS("成功", 0),
TokenFail("Token失效",401),
NotFound("NotFound", 404),//没有找到
Unable("Unable", 403),//无法处理
// NotLogin("未登录", 400),//未登录
Cancelled("Cancelled", 401),//已经取消的
Cancelled("Cancelled", 408),//已经取消的
StateError("StateError", 402),//状态错误
Locking("Locking", 405),//锁定不能操作
NumberLess("数量不足", 406),

View File

@ -12,6 +12,7 @@ public enum EnumShopType {
JD("京东", 2),
DOUDIAN("抖音", 3),
WEI("微信视频号小店", 5),
KWAI("快手小店", 6),
PDD("拼多多", 4);
private String name;
private int index;

View File

@ -1615,29 +1615,6 @@ INSERT INTO `sys_menu` VALUES (117, '菜单管理', 5, 1, 'menu', 'system/menu/i
INSERT INTO `sys_menu` VALUES (2078, '添加ERP商品', 4, 9, 'goods_add', 'goods/create', NULL, 1, 0, 'C', '0', '0', NULL, 'checkbox', 'admin', '2024-03-18 07:59:57', '', NULL, '');
INSERT INTO `sys_menu` VALUES (2079, '字典管理', 5, 9, 'dict', 'system/dict/index', NULL, 1, 0, 'C', '0', '0', '', 'dict', 'admin', '2024-03-18 08:43:55', 'admin', '2024-03-18 08:44:08', '');
-- ----------------------------
-- Table structure for sys_platform
-- ----------------------------
DROP TABLE IF EXISTS `sys_platform`;
CREATE TABLE `sys_platform` (
`id` int(0) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '平台名',
`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '平台编码',
`app_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`app_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`redirect_uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '平台回调uri',
`server_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '接口访问地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_platform
-- ----------------------------
INSERT INTO `sys_platform` VALUES (1, '天猫', 'TMALL', '', '', NULL, NULL);
INSERT INTO `sys_platform` VALUES (2, '京东', 'JD', '', '', '', '');
INSERT INTO `sys_platform` VALUES (3, '抖店', 'DOUDIAN', '', '', NULL, NULL);
INSERT INTO `sys_platform` VALUES (4, '拼多多', 'PDD', '', '', NULL, NULL);
INSERT INTO `sys_platform` VALUES (5, '视频号小店', 'WEI', '', NULL, NULL, 'https://api.weixin.qq.com');
-- ----------------------------
-- Table structure for sys_post
@ -1809,39 +1786,6 @@ INSERT INTO `sys_role_menu` VALUES (2, 1058);
INSERT INTO `sys_role_menu` VALUES (2, 1059);
INSERT INTO `sys_role_menu` VALUES (2, 1060);
-- ----------------------------
-- Table structure for sys_shop
-- ----------------------------
DROP TABLE IF EXISTS `sys_shop`;
CREATE TABLE `sys_shop` (
`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '店铺名',
`type` int(0) NOT NULL COMMENT '对应第三方平台Id',
`url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '店铺url',
`sort` int(0) NOT NULL DEFAULT 9 COMMENT '排序',
`status` int(0) DEFAULT 0 COMMENT '状态1正常2已删除',
`modify_on` bigint(0) NOT NULL COMMENT '更新时间',
`remark` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '描述',
`seller_id` bigint(0) NOT NULL DEFAULT 0 COMMENT '第三方平台店铺id淘宝天猫开放平台使用',
`app_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'Appkey',
`app_sercet` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'Appsercet',
`access_token` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '第三方平台sessionKeyaccess_token',
`expires_in` bigint(0) DEFAULT NULL COMMENT '到期',
`access_token_begin` bigint(0) DEFAULT NULL COMMENT 'access_token开始时间',
`refresh_token` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '刷新token',
`refresh_token_timeout` bigint(0) DEFAULT NULL COMMENT '刷新token过期时间',
`api_request_url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '请求url',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据中心-店铺' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_shop
-- ----------------------------
INSERT INTO `sys_shop` VALUES (1, '天猫旗舰店', 1, '', 98, 1, 0, '', 59972781, '', '', '', NULL, NULL, NULL, NULL, 'http://gw.api.taobao.com/router/rest');
INSERT INTO `sys_shop` VALUES (2, '京东旗舰店', 2, NULL, 9, 1, 0, NULL, 10706, NULL, NULL, '', 31535999, NULL, '', NULL, NULL);
INSERT INTO `sys_shop` VALUES (3, '抖音旗舰店', 3, 'http://openapi.jinritemai.com', 87, 1, 1653672695, NULL, 0, '', '', '', NULL, NULL, NULL, NULL, '2');
INSERT INTO `sys_shop` VALUES (5, '拼多多旗舰店', 4, NULL, 99, 1, 1680698886, '', 100061591, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_shop` VALUES (6, '视频号小店', 5, NULL, 9, 0, 0, NULL, 0, '', '', '', NULL, NULL, NULL, NULL, 'https://api.weixin.qq.com');
-- ----------------------------
-- Table structure for sys_shop_pull_lasttime

30
open-api/kwai-api/pom.xml Normal file
View File

@ -0,0 +1,30 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.qihang</groupId>
<artifactId>open-api</artifactId>
<version>1.0.0</version>
</parent>
<groupId>com.qihang.kwai</groupId>
<artifactId>kwai-api</artifactId>
<packaging>jar</packaging>
<name>kwai-api</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>kuaishou</groupId>
<artifactId>kuaishou-merchant-open-sdk-</artifactId>
<version>1.0.10</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/kuaishou-merchant-open-sdk-1.0.10.jar</systemPath>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,15 @@
package com.qihang.kwai;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages={"com.qihang"})
@SpringBootApplication
public class KwaiApi {
public static void main( String[] args )
{
System.out.println( "Hello kwai-api!" );
SpringApplication.run(KwaiApi.class, args);
}
}

View File

@ -0,0 +1,8 @@
package com.qihang.kwai.common;
import lombok.Data;
@Data
public class PullRequest {
private Integer shopId;//店铺Id
}

View File

@ -0,0 +1,19 @@
package com.qihang.kwai.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.qihang.kwai.mapper")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //注意使用哪种数据库
return interceptor;
}
}

View File

@ -0,0 +1,213 @@
package com.qihang.kwai.controller;
import com.kuaishou.merchant.open.api.KsMerchantApiException;
import com.kuaishou.merchant.open.api.client.AccessTokenKsMerchantClient;
import com.kuaishou.merchant.open.api.request.KsMerchantOrderListRequest;
import com.kuaishou.merchant.open.api.request.KsMerchantOrderLogisticsUpdateRequest;
import com.kuaishou.merchant.open.api.response.KsMerchantOrderListResponse;
import com.qihang.common.common.AjaxResult;
import com.qihang.common.common.ResultVo;
import com.qihang.common.common.ResultVoEnum;
import com.qihang.common.enums.EnumShopType;
import com.qihang.kwai.common.PullRequest;
import com.qihang.kwai.domain.KwaiOrder;
import com.qihang.kwai.service.KwaiOrderService;
import com.qihang.kwai.service.SysPlatformService;
import com.qihang.kwai.service.SysShopService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.*;
@RequestMapping("/order")
@RestController
public class AjaxOrderKwaiController {
private static Logger log = LoggerFactory.getLogger(AjaxOrderKwaiController.class);
@Autowired
private SysPlatformService platformService;
@Autowired
private KwaiOrderService kwaiOrderService;
@Autowired
private SysShopService shopService;
// private static String appKey="ks701717119425407331";
// // 对应授权商家快手账号
// private static long sellerId = 1372638315L;
@RequestMapping(value = "/pull_order", method = RequestMethod.POST)
public AjaxResult getOrderList(@RequestBody PullRequest reqData){
Integer shopId = reqData.getShopId();
var shop = shopService.getById(shopId);
var platform = platformService.getById(EnumShopType.KWAI.getIndex());
// String accessToken = shop.getAccessToken();
// String startDate = "";//reqData.getString("startTime");
// String endDate = "";//reqData.getString("endTime");
Long endTime = System.currentTimeMillis() / 1000;//订单更新结束时间
Long startTime = endTime-(60 * 60 * 24 * 1);//订单更新开始时间
// if(!StringUtils.isEmpty(startDate))startTime = DateUtil.dateToStamp(startDate).longValue();
// if (!StringUtils.isEmpty(endDate)) endTime = DateUtil.dateTimeToStamp(endDate + " 23:59:00").longValue();
long kaishidaojiesu = endTime - startTime;
long forSize = (kaishidaojiesu % (60 * 60 * 24) == 0) ? kaishidaojiesu / (60 * 60 * 24) : kaishidaojiesu / (60 * 60 * 24) + 1;//计算需要循环的次数
// log.info("开始循环更新快手订单。开始时间:" + DateUtil.unixTimeStampToDate(startTime) + "结束时间:" + DateUtil.unixTimeStampToDate(endTime) + "总共循环" + forSize);
int pageIndex = 1;
int pageSize = 50;
ResultVo<Long> result=null;
for (int i = 0; i < forSize; i++) {
Long startTime1 = startTime + i * 60 * 60 * 24;
Long endTime1 = startTime1 + 60 * 60 * 24;
result = this.pullOrder(platform.getAppKey(),shop.getSellerId(), pageIndex,pageSize,shop.getAccessToken(), startTime1, endTime1);
if(result.getCode()>0) return AjaxResult.error(result.getCode(), result.getMsg());
//计算总页数
int totalPage = (result.getData().intValue() % pageSize == 0) ? result.getData().intValue() / pageSize : (result.getData().intValue() / pageSize) + 1;
while (pageIndex < totalPage) {
pageIndex++;
result = this.pullOrder(platform.getAppKey(),shop.getSellerId(),pageIndex,pageSize,shop.getAccessToken(), startTime1, endTime1);
}
pageIndex=1;
}
return AjaxResult.success();
}
public ResultVo<Long> pullOrder(String appKey,Long sellerId,Integer pageIndex, Integer pageSize, String token, Long startTime, Long endTime) {
AccessTokenKsMerchantClient tokenKsMerchantClient = new AccessTokenKsMerchantClient(appKey);
KsMerchantOrderListRequest ksMerchantOrderListRequest = new KsMerchantOrderListRequest();
// common param
ksMerchantOrderListRequest.setAccessToken(token);
ksMerchantOrderListRequest.setUid(sellerId);
ksMerchantOrderListRequest.setApiMethodVersion(1);
// business param
ksMerchantOrderListRequest.setType(1);
ksMerchantOrderListRequest.setQueryType(2);
ksMerchantOrderListRequest.setSellerId(sellerId);
ksMerchantOrderListRequest.setCurrentPage(pageIndex);
ksMerchantOrderListRequest.setPageSize(pageSize);
ksMerchantOrderListRequest.setBeginTime(startTime*1000);//时间范围只能24小时
ksMerchantOrderListRequest.setEndTime(endTime*1000);
ksMerchantOrderListRequest.setPcursor("");
// api invoke
try {
KsMerchantOrderListResponse response = tokenKsMerchantClient.execute(ksMerchantOrderListRequest);
if(!StringUtils.isEmpty(response.getErrorMsg()) && response.getResult()==24)
return ResultVo.error(ResultVoEnum.TokenFail.getIndex(), "异常:"+response.getErrorMsg());
if(!StringUtils.isEmpty(response.getErrorMsg()) && response.getResult()!=24)
return ResultVo.error(ResultVoEnum.SystemException.getIndex(), "异常:"+response.getErrorMsg());
var list= response.getMerchantOrderListData().getOrderInfoList();
for(var obj :list){
KwaiOrder order= new KwaiOrder();
// var address = JsonUtil.strToObject(obj.getAddress(),DcKwaiAddressVo.class);
order.setOid(obj.getOid());
Long discountFee=obj.getDiscountFee();
order.setDiscountfee(obj.getDiscountFee()>0 ? new BigDecimal(discountFee/100) : new BigDecimal(0));
Long expressFee=obj.getExpressFee();
order.setExpressfee(obj.getExpressFee()>0 ? new BigDecimal(expressFee.doubleValue() /100) : new BigDecimal(0));
order.setNum(obj.getNum());
// order.setConsignee(address.getConsignee());
// order.setMobile(address.getMobile());
// order.setPaytime(obj.getPayTime()>0 ? obj.getPayTime()/1000 : 0L);
// order.setBuyerRemark(obj.getRemark());
// order.setSellerRemark(obj.getSellerNoteList().toString());
// order.setStatus(obj.getStatus());
// order.setRefund(obj.getRefund());
// Long totalFee=obj.getTotalFee();
// order.setTotalfee(totalFee>0 ? new BigDecimal(totalFee.doubleValue()/100) : new BigDecimal(0));
// order.setProvince(address.getProvince());
// order.setCity(address.getCity());
// order.setDistrict(address.getDistrict());
// StringBuilder sb= new StringBuilder(address.getProvince()).append(address.getCity()).append(address.getDistrict()).append(address.getAddress());
// order.setAddress(sb.toString());
// order.setCreatetime(obj.getCreateTime()>0 ? obj.getCreateTime()/1000 :0L);
// List<DcKwaiOrdersItemEntity> items = new ArrayList<>();
// for(var kwaiItem:obj.getOrderProductInfoList()){
// DcKwaiOrdersItemEntity item=new DcKwaiOrdersItemEntity();
// item.setItemid(kwaiItem.getItemId());
// item.setItempicurl(kwaiItem.getItemPicUrl());
// Long price=kwaiItem.getPrice();
// item.setPrice(price>0 ? new BigDecimal(price.doubleValue()/100) : new BigDecimal(0));
// item.setRefundId(kwaiItem.getRefundId());
// item.setRefundStatus(kwaiItem.getRefundStatus());
// item.setSkunick(StringUtils.isEmpty(kwaiItem.getSkuNick()) ? "" : kwaiItem.getSkuNick());
// item.setItemtitle(kwaiItem.getItemTitle());
// item.setNum(kwaiItem.getNum());
// item.setGoodsspec(kwaiItem.getSkuDesc());
// items.add(item);
// }
// order.setItems(items);
// var result= kwaiOrderService.editKwaiOrder(order);
log.info(order.getOid()+"更新:");
}
return ResultVo.success(response.getMerchantOrderListData().getTotalSize());
} catch (KsMerchantApiException e) {
return ResultVo.error(ResultVoEnum.Fail.getIndex(), "异常:"+e.getErrorMsg());
}
}
/**
* 订单确认
* @return
*/
// @RequestMapping(value = "/affirm_order", method = RequestMethod.POST)
// public ApiResult<Integer> orderAffirm(@RequestBody OrderConfirmReq req){
// if (req.getOrderId() == null || req.getOrderId() <= 0)
// return new ApiResult<>(ApiResultEnum.ParamsError.getIndex(), "参数错误缺少orderId");
//
// if (StringUtils.isEmpty(req.getClientId()))req.setClientId(0);
//
// if (StringUtils.isEmpty(req.getReceiver()))
// return new ApiResult<>(ApiResultEnum.ParamsError.getIndex(), "参数错误缺少receiver");
// if (StringUtils.isEmpty(req.getMobile()))
// return new ApiResult<>(ApiResultEnum.ParamsError.getIndex(), "参数错误缺少mobile");
// if (StringUtils.isEmpty(req.getAddress()))
// return new ApiResult<>(ApiResultEnum.ParamsError.getIndex(), "参数错误缺少address");
// var result = kwaiOrderService.kwaiOrderAffirm(req.getOrderId(),req.getClientId(),req.getReceiver(), req.getMobile(), req.getAddress(), req.getSellerMemo());
// return new ApiResult<>(result.getCode(), result.getMsg());
// }
// /**
// * 订单发货
// * @param req
// * @return
// */
// @RequestMapping(value = "/send_order", method = RequestMethod.POST)
// public ApiResult<Integer> orderSend(@RequestBody DataRow req){
// if(StringUtils.isEmpty(req.get("orderId")))return new ApiResult<>(EnumResultVo.ParamsError.getIndex(),"参数错误订单id不能为空");
// if(StringUtils.isEmpty(req.get("code")))return new ApiResult<>(EnumResultVo.ParamsError.getIndex(),"参数错误,快递单号不能为空");
// Integer shopId = 13;
// var shop = shopService.getShop(shopId);
// var settingEntity = thirdSettingService.getEntity(shop.getType());
// AccessTokenKsMerchantClient tokenKsMerchantClient = new AccessTokenKsMerchantClient(appKey);
// KsMerchantOrderLogisticsUpdateRequest ksMerchantLogisticsRequest=new KsMerchantOrderLogisticsUpdateRequest();
// try {
// ksMerchantLogisticsRequest.setAccessToken(settingEntity.getAccess_token());
// ksMerchantLogisticsRequest.setUid(sellerId);
// ksMerchantLogisticsRequest.setApiMethodVersion(1);
// ksMerchantLogisticsRequest.setOrderId(req.getLong("orderId"));
// ksMerchantLogisticsRequest.setExpressCode(EnumKwaiExpressCodeVo.getIndex(req.getString("name")));
// ksMerchantLogisticsRequest.setExpressNo(req.getString("code"));
// ksMerchantLogisticsRequest.setSellerId(sellerId);
// var ksResponse = tokenKsMerchantClient.execute(ksMerchantLogisticsRequest);
// if(ksResponse.getResult()==1){
// kwaiOrderService.updKwaiOrderStatus(req.getLong("orderId"));
// return new ApiResult<>(ApiResultEnum.SUCCESS.getIndex(), "成功");
// }else return new ApiResult<>(ApiResultEnum.Fail.getIndex(), ksResponse.getErrorMsg());
// }catch (KsMerchantApiException e) {
// return new ApiResult<>(ApiResultEnum.Fail.getIndex(), "异常:"+e.getErrorMsg());
// }
// }
}

View File

@ -0,0 +1,4 @@
package com.qihang.kwai.controller;
public class HomeController {
}

View File

@ -0,0 +1,73 @@
package com.qihang.kwai.controller;
import com.kuaishou.merchant.open.api.KsMerchantApiException;
import com.kuaishou.merchant.open.api.client.oauth.OauthAccessTokenKsClient;
import com.kuaishou.merchant.open.api.response.KsAccessTokenResponse;
import com.qihang.common.enums.EnumShopType;
import com.qihang.kwai.service.SysPlatformService;
import com.qihang.kwai.service.SysShopService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
/**
* 描述
* 阿里授权Controller
*
* @author qlp
* @date 2019-09-12 14:13
*/
@AllArgsConstructor
@RequestMapping("/kwai")
@RestController
public class KwaiOAuthController {
private final SysPlatformService platformService;
private final SysShopService shopService;
private static String clientId="ks701717119425407331";
private static String clientSecret="0qBrIYOPrqGb8SM9ouVx9w";
private static Logger log = LoggerFactory.getLogger(KwaiOAuthController.class);
/**
* 调取授权页面
* @return
* @throws IOException
* @throws InterruptedException
*/
@RequestMapping("/callback")
public String aliOAuth(HttpServletRequest req) throws IOException, InterruptedException {
String grantCode = req.getParameter("code");
String shopId = req.getParameter("state");
OauthAccessTokenKsClient oauthAccessTokenKsClient = new OauthAccessTokenKsClient(clientId, clientSecret);
try {
KsAccessTokenResponse response = oauthAccessTokenKsClient.getAccessToken(grantCode);
Long expireIn=response.getExpiresIn();
shopService.updateAccessToken(Integer.parseInt(shopId), response.getAccessToken(), response.getRefreshToken(),expireIn);
} catch (KsMerchantApiException e) {
e.printStackTrace();
}
return "redirect:/";
}
@RequestMapping("/oauth2")
public String callback(@RequestParam Integer shopId) throws IOException, InterruptedException {
var platform = platformService.getById(EnumShopType.KWAI.getIndex());
String redirect_uri = platform.getRedirectUri();
String appId= platform.getAppKey();
String url = "https://s.kwaixiaodian.com/oauth/authorize?response_type=code&app_id="+appId+"&scope=user_info,merchant_item,merchant_order,merchant_refund&redirect_uri="+redirect_uri+"&state="+shopId;
return url;
}
}

View File

@ -0,0 +1,110 @@
//package com.qihang.kwai.controller;
//
//import com.qihang.kwai.service.KwaiOrderService;
//import com.qihang.kwai.service.SysShopService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.RestController;
//
///**
// * 描述
// *
// * @author qlp
// * @date 2019-11-13 14:44
// */
//@RestController
//@RequestMapping("/kwai")
//public class KwaiOrderController {
// @Autowired
// private SysShopService shopService;
// @Autowired
// private KwaiOrderService kwaiOrderService;
// /**
// * 订单列表
// * @param model
// * @param request
// * @return
// */
// @RequestMapping("/order_list")
// public String orderList(){
// Integer shopId= 13;
// //查询店铺信息
// var shop = shopService.getShop(shopId);
// model.addAttribute("shop",shop);
//
// model.addAttribute("menuId","order_list");
// model.addAttribute("shopId",shopId);
// String orderNum="";
// if (!StringUtils.isEmpty(request.getParameter("orderNum"))) {
// orderNum = request.getParameter("orderNum");
// model.addAttribute("orderNum", orderNum);
// }
// String status="";
// if (!StringUtils.isEmpty(request.getParameter("status"))) status = request.getParameter("status");
// Integer startTime=null;
// if (!StringUtils.isEmpty(request.getParameter("startTime"))){
// startTime = DateUtil.dateToStamp(request.getParameter("startTime")) ;
// model.addAttribute("startTime",request.getParameter("startTime"));
// }
// Integer endTime=null;
// if (!StringUtils.isEmpty(request.getParameter("endTime"))) {
// endTime = DateUtil.dateTimeToStamp(request.getParameter("endTime") + " 23:59:59");
// model.addAttribute("endTime",request.getParameter("endTime"));
// }
// Integer pageIndex = 1, pageSize = DataConfigObject.getInstance().getPageSize();
// if (!StringUtils.isEmpty(request.getParameter("page"))) {
// pageIndex = Integer.parseInt(request.getParameter("page"));
// }
//
// PagingResponse<DcKwaiOrderEntity> result =kwaiOrderService.getKwaiOrders(pageIndex,pageSize,orderNum,startTime,endTime,status);
// model.addAttribute("pageIndex", pageIndex);
// model.addAttribute("pageSize", pageSize);
// model.addAttribute("totalSize", result.getTotalSize());
// model.addAttribute("lists", result.getList());
//
// return "v3/order_list_kwai";
// }
// /**
// * 订单详情douyin
// *
// * @param model
// * @param id
// * @param shopId
// * @param request
// * @return
// */
// @RequestMapping(value = "/orderDetail", method = RequestMethod.GET)
// public String orderDetailTmall(Model model, @RequestParam Long id, @RequestParam Integer shopId, HttpServletRequest request) {
//
// DcKwaiOrderEntity orderDetail = kwaiOrderService.getOderDetailByOrderId(id);
//
// model.addAttribute("orderVo", orderDetail);
//
// //查询店铺信息
// var shop = shopService.getShop(shopId);
// model.addAttribute("shop", shop);
// model.addAttribute("menuId", "order_list");
//
// return "v3/order_detail_kwai";
// }
//
// /**
// * 订单确认页面
// * @param model
// * @param orderId
// * @param request
// * @return
// */
// @RequestMapping("/order_confirm")
// public String orderList(Model model,@RequestParam Long orderId, HttpServletRequest request){
// DcKwaiOrderEntity orderDetail = kwaiOrderService.getOderDetailByOrderId(orderId);
// model.addAttribute("orderVo", orderDetail);
//
// return "v3/order_confirm_kwai";
// }
//}

View File

@ -0,0 +1,139 @@
package com.qihang.kwai.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Data;
/**
* 快手订单
* @TableName kwai_order
*/
@Data
public class KwaiOrder implements Serializable {
/**
* dc订单id
*/
private Long id;
/**
* 快手订单id
*/
private Long oid;
/**
* 创建时间
*/
private Long createtime;
/**
* 折扣价格
*/
private BigDecimal discountfee;
/**
* 运费
*/
private BigDecimal expressfee;
/**
* sku数量
*/
private Integer num;
/**
* 收件人姓名
*/
private String consignee;
/**
* 收件人手机号
*/
private String mobile;
/**
* 支付时间
*/
private Long paytime;
/**
* 买家备注
*/
private String buyerremark;
/**
* 卖家备注
*/
private String sellerremark;
/**
* 订单状态
*/
private Integer status;
/**
* 是否退款 0未退款 1该订单申请过退款
*/
private Integer refund;
/**
* 子订单商品总价
*/
private BigDecimal totalfee;
/**
*
*/
private String province;
/**
*
*/
private String city;
/**
*
*/
private String district;
/**
* 详细地址
*/
private String address;
/**
* 快递公司
*/
private String logisticscompany;
/**
* 快递公司编码
*/
private String logisticscompanycode;
/**
* 快递单号
*/
private String logisticscode;
/**
* 订单审核状态0待审核1已审核
*/
private Integer auditstatus;
/**
* 创建时间
*/
private Long createon;
/**
* 发货状态0待出库1拣货中2已拣货3已出库4已发货
*/
private Integer sendstatus;
/**
* 发货时间仓库真实发货时间
*/
private Long sendtime;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,93 @@
package com.qihang.kwai.domain;
import java.io.Serializable;
import lombok.Data;
/**
*
* @TableName kwai_orders_item
*/
@Data
public class KwaiOrdersItem implements Serializable {
/**
* id自增
*/
private Long id;
/**
* 快手子订单id
*/
private Long itemid;
/**
* 订单ID
*/
private Long orderid;
/**
* erp系统商品id
*/
private Integer erpgoodsid;
/**
* erp系统商品规格id
*/
private Integer erpgoodsspecid;
/**
* 商品名称
*/
private String itemtitle;
/**
* 商品图片
*/
private String itempicurl;
/**
* 商品编码
*/
private String goodsnum;
/**
* 商品规格
*/
private String goodsspec;
/**
* 商品规格编码
*/
private String skunick;
/**
* 商品单价
*/
private Double price;
/**
* 商品数量
*/
private Integer num;
/**
* 退货Id
*/
private Long refundid;
/**
* 退货状态
*/
private Integer refundstatus;
/**
*
*/
private String remark;
/**
* 是否赠品0:否1:
*/
private Integer isgift;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,48 @@
package com.qihang.kwai.domain;
import java.io.Serializable;
import lombok.Data;
/**
*
* @TableName sys_platform
*/
@Data
public class SysPlatform implements Serializable {
/**
*
*/
private Integer id;
/**
* 平台名
*/
private String name;
/**
* 平台编码
*/
private String code;
/**
*
*/
private String appKey;
/**
*
*/
private String appSecret;
/**
* 平台回调uri
*/
private String redirectUri;
/**
* 接口访问地址
*/
private String serverUrl;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,98 @@
package com.qihang.kwai.domain;
import java.io.Serializable;
import lombok.Data;
/**
* 数据中心-店铺
* @TableName sys_shop
*/
@Data
public class SysShop implements Serializable {
/**
* 主键
*/
private Integer id;
/**
* 店铺名
*/
private String name;
/**
* 对应第三方平台Id
*/
private Integer type;
/**
* 店铺url
*/
private String url;
/**
* 排序
*/
private Integer sort;
/**
* 状态1正常2已删除
*/
private Integer status;
/**
* 更新时间
*/
private Long modifyOn;
/**
* 描述
*/
private String remark;
/**
* 第三方平台店铺id淘宝天猫开放平台使用
*/
private Long sellerId;
/**
* Appkey
*/
private String appKey;
/**
* Appsercet
*/
private String appSercet;
/**
* 第三方平台sessionKeyaccess_token
*/
private String accessToken;
/**
* 到期
*/
private Long expiresIn;
/**
* access_token开始时间
*/
private Long accessTokenBegin;
/**
* 刷新token
*/
private String refreshToken;
/**
* 刷新token过期时间
*/
private Long refreshTokenTimeout;
/**
* 请求url
*/
private String apiRequestUrl;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,18 @@
package com.qihang.kwai.mapper;
import com.qihang.kwai.domain.KwaiOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author qilip
* @description 针对表kwai_order(快手订单)的数据库操作Mapper
* @createDate 2024-03-30 10:04:16
* @Entity com.qihang.kwai.domain.KwaiOrder
*/
public interface KwaiOrderMapper extends BaseMapper<KwaiOrder> {
}

View File

@ -0,0 +1,18 @@
package com.qihang.kwai.mapper;
import com.qihang.kwai.domain.KwaiOrdersItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author qilip
* @description 针对表kwai_orders_item的数据库操作Mapper
* @createDate 2024-03-30 10:04:16
* @Entity com.qihang.kwai.domain.KwaiOrdersItem
*/
public interface KwaiOrdersItemMapper extends BaseMapper<KwaiOrdersItem> {
}

View File

@ -0,0 +1,18 @@
package com.qihang.kwai.mapper;
import com.qihang.kwai.domain.SysPlatform;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author qilip
* @description 针对表sys_platform的数据库操作Mapper
* @createDate 2024-03-30 10:04:16
* @Entity com.qihang.kwai.domain.SysPlatform
*/
public interface SysPlatformMapper extends BaseMapper<SysPlatform> {
}

View File

@ -0,0 +1,18 @@
package com.qihang.kwai.mapper;
import com.qihang.kwai.domain.SysShop;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author qilip
* @description 针对表sys_shop(数据中心-店铺)的数据库操作Mapper
* @createDate 2024-03-30 10:04:16
* @Entity com.qihang.kwai.domain.SysShop
*/
public interface SysShopMapper extends BaseMapper<SysShop> {
}

View File

@ -0,0 +1,130 @@
package com.qihang.kwai.mapper;
import com.qihang.security.entity.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 用户表 数据层
*
* @author qihang
*/
@Mapper
public interface SysUserMapper
{
/**
* 根据条件分页查询用户列表
*
* @param sysUser 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectUserList(SysUser sysUser);
/**
* 根据条件分页查询已配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectAllocatedList(SysUser user);
/**
* 根据条件分页查询未分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectUnallocatedList(SysUser user);
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
public SysUser selectUserByUserName(String userName);
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
public SysUser selectUserById(Long userId);
/**
* 新增用户信息
*
* @param user 用户信息
* @return 结果
*/
public int insertUser(SysUser user);
/**
* 修改用户信息
*
* @param user 用户信息
* @return 结果
*/
public int updateUser(SysUser user);
/**
* 修改用户头像
*
* @param userName 用户名
* @param avatar 头像地址
* @return 结果
*/
public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
/**
* 重置用户密码
*
* @param userName 用户名
* @param password 密码
* @return 结果
*/
public int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
/**
* 通过用户ID删除用户
*
* @param userId 用户ID
* @return 结果
*/
public int deleteUserById(Long userId);
/**
* 批量删除用户信息
*
* @param userIds 需要删除的用户ID
* @return 结果
*/
public int deleteUserByIds(Long[] userIds);
/**
* 校验用户名称是否唯一
*
* @param userName 用户名称
* @return 结果
*/
public SysUser checkUserNameUnique(String userName);
/**
* 校验手机号码是否唯一
*
* @param phonenumber 手机号码
* @return 结果
*/
public SysUser checkPhoneUnique(String phonenumber);
/**
* 校验email是否唯一
*
* @param email 用户邮箱
* @return 结果
*/
public SysUser checkEmailUnique(String email);
}

View File

@ -0,0 +1,13 @@
package com.qihang.kwai.service;
import com.qihang.kwai.domain.KwaiOrder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author qilip
* @description 针对表kwai_order(快手订单)的数据库操作Service
* @createDate 2024-03-30 10:04:16
*/
public interface KwaiOrderService extends IService<KwaiOrder> {
}

View File

@ -0,0 +1,13 @@
package com.qihang.kwai.service;
import com.qihang.kwai.domain.KwaiOrdersItem;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author qilip
* @description 针对表kwai_orders_item的数据库操作Service
* @createDate 2024-03-30 10:04:16
*/
public interface KwaiOrdersItemService extends IService<KwaiOrdersItem> {
}

View File

@ -0,0 +1,13 @@
package com.qihang.kwai.service;
import com.qihang.kwai.domain.SysPlatform;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author qilip
* @description 针对表sys_platform的数据库操作Service
* @createDate 2024-03-30 10:04:16
*/
public interface SysPlatformService extends IService<SysPlatform> {
}

View File

@ -0,0 +1,13 @@
package com.qihang.kwai.service;
import com.qihang.kwai.domain.SysShop;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author qilip
* @description 针对表sys_shop(数据中心-店铺)的数据库操作Service
* @createDate 2024-03-30 10:04:16
*/
public interface SysShopService extends IService<SysShop> {
void updateAccessToken(Integer shopId,String accessToken,String refreshToken,Long expireIn);
}

View File

@ -0,0 +1,298 @@
package com.qihang.kwai.service;
import com.qihang.common.common.ServiceException;
import com.qihang.common.constant.UserConstants;
import com.qihang.common.utils.StringUtils;
import com.qihang.kwai.mapper.SysUserMapper;
import com.qihang.security.entity.SysUser;
import com.qihang.security.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 用户 业务层处理
*
* @author qihang
*/
@Service
public class SysUserServiceImpl implements ISysUserService
{
private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
@Autowired
private SysUserMapper userMapper;
/**
* 根据条件分页查询用户列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
public List<SysUser> selectUserList(SysUser user)
{
return userMapper.selectUserList(user);
}
/**
* 根据条件分页查询已分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
public List<SysUser> selectAllocatedList(SysUser user)
{
return userMapper.selectAllocatedList(user);
}
/**
* 根据条件分页查询未分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
public List<SysUser> selectUnallocatedList(SysUser user)
{
return userMapper.selectUnallocatedList(user);
}
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
@Override
public SysUser selectUserByUserName(String userName)
{
return userMapper.selectUserByUserName(userName);
}
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
@Override
public SysUser selectUserById(Long userId)
{
return userMapper.selectUserById(userId);
}
/**
* 校验用户名称是否唯一
*
* @param user 用户信息
* @return 结果
*/
@Override
public boolean checkUserNameUnique(SysUser user)
{
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkUserNameUnique(user.getUserName());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验手机号码是否唯一
*
* @param user 用户信息
* @return
*/
@Override
public boolean checkPhoneUnique(SysUser user)
{
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验email是否唯一
*
* @param user 用户信息
* @return
*/
@Override
public boolean checkEmailUnique(SysUser user)
{
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkEmailUnique(user.getEmail());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验用户是否允许操作
*
* @param user 用户信息
*/
@Override
public void checkUserAllowed(SysUser user)
{
if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin())
{
throw new ServiceException("不允许操作超级管理员用户");
}
}
/**
* 新增保存用户信息
*
* @param user 用户信息
* @return 结果
*/
@Override
@Transactional
public int insertUser(SysUser user)
{
// 新增用户信息
int rows = userMapper.insertUser(user);
// // 新增用户岗位关联
// insertUserPost(user);
// // 新增用户与角色管理
// insertUserRole(user);
return rows;
}
/**
* 注册用户信息
*
* @param user 用户信息
* @return 结果
*/
@Override
public boolean registerUser(SysUser user)
{
return userMapper.insertUser(user) > 0;
}
/**
* 修改保存用户信息
*
* @param user 用户信息
* @return 结果
*/
@Override
@Transactional
public int updateUser(SysUser user)
{
Long userId = user.getUserId();
// // 删除用户与角色关联
// userRoleMapper.deleteUserRoleByUserId(userId);
// // 新增用户与角色管理
// insertUserRole(user);
// // 删除用户与岗位关联
// userPostMapper.deleteUserPostByUserId(userId);
// 新增用户与岗位管理
// insertUserPost(user);
return userMapper.updateUser(user);
}
/**
* 修改用户状态
*
* @param user 用户信息
* @return 结果
*/
@Override
public int updateUserStatus(SysUser user)
{
return userMapper.updateUser(user);
}
/**
* 修改用户基本信息
*
* @param user 用户信息
* @return 结果
*/
@Override
public int updateUserProfile(SysUser user)
{
return userMapper.updateUser(user);
}
/**
* 修改用户头像
*
* @param userName 用户名
* @param avatar 头像地址
* @return 结果
*/
@Override
public boolean updateUserAvatar(String userName, String avatar)
{
return userMapper.updateUserAvatar(userName, avatar) > 0;
}
/**
* 重置用户密码
*
* @param user 用户信息
* @return 结果
*/
@Override
public int resetPwd(SysUser user)
{
return userMapper.updateUser(user);
}
/**
* 重置用户密码
*
* @param userName 用户名
* @param password 密码
* @return 结果
*/
@Override
public int resetUserPwd(String userName, String password)
{
return userMapper.resetUserPwd(userName, password);
}
/**
* 通过用户ID删除用户
*
* @param userId 用户ID
* @return 结果
*/
@Override
@Transactional
public int deleteUserById(Long userId)
{
// // 删除用户与角色关联
// userRoleMapper.deleteUserRoleByUserId(userId);
// // 删除用户与岗位表
// userPostMapper.deleteUserPostByUserId(userId);
return userMapper.deleteUserById(userId);
}
@Override
public void checkUserDataScope(Long userId) {
}
}

View File

@ -0,0 +1,22 @@
package com.qihang.kwai.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qihang.kwai.domain.KwaiOrder;
import com.qihang.kwai.service.KwaiOrderService;
import com.qihang.kwai.mapper.KwaiOrderMapper;
import org.springframework.stereotype.Service;
/**
* @author qilip
* @description 针对表kwai_order(快手订单)的数据库操作Service实现
* @createDate 2024-03-30 10:04:16
*/
@Service
public class KwaiOrderServiceImpl extends ServiceImpl<KwaiOrderMapper, KwaiOrder>
implements KwaiOrderService{
}

View File

@ -0,0 +1,22 @@
package com.qihang.kwai.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qihang.kwai.domain.KwaiOrdersItem;
import com.qihang.kwai.service.KwaiOrdersItemService;
import com.qihang.kwai.mapper.KwaiOrdersItemMapper;
import org.springframework.stereotype.Service;
/**
* @author qilip
* @description 针对表kwai_orders_item的数据库操作Service实现
* @createDate 2024-03-30 10:04:16
*/
@Service
public class KwaiOrdersItemServiceImpl extends ServiceImpl<KwaiOrdersItemMapper, KwaiOrdersItem>
implements KwaiOrdersItemService{
}

View File

@ -0,0 +1,22 @@
package com.qihang.kwai.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qihang.kwai.domain.SysPlatform;
import com.qihang.kwai.service.SysPlatformService;
import com.qihang.kwai.mapper.SysPlatformMapper;
import org.springframework.stereotype.Service;
/**
* @author qilip
* @description 针对表sys_platform的数据库操作Service实现
* @createDate 2024-03-30 10:04:16
*/
@Service
public class SysPlatformServiceImpl extends ServiceImpl<SysPlatformMapper, SysPlatform>
implements SysPlatformService{
}

View File

@ -0,0 +1,34 @@
package com.qihang.kwai.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qihang.kwai.domain.SysShop;
import com.qihang.kwai.service.SysShopService;
import com.qihang.kwai.mapper.SysShopMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
* @author qilip
* @description 针对表sys_shop(数据中心-店铺)的数据库操作Service实现
* @createDate 2024-03-30 10:04:16
*/
@AllArgsConstructor
@Service
public class SysShopServiceImpl extends ServiceImpl<SysShopMapper, SysShop>
implements SysShopService{
private final SysShopMapper mapper;
@Override
public void updateAccessToken(Integer shopId, String accessToken, String refreshToken, Long expireIn) {
SysShop shop =new SysShop();
shop.setId(shopId);
shop.setAccessToken(accessToken);
shop.setRefreshToken(refreshToken);
shop.setExpiresIn(expireIn);
mapper.updateById(shop);
}
}

View File

@ -0,0 +1,23 @@
spring:
cloud:
nacos:
# serverAddr: 127.0.0.1:8848
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
config:
import:
- nacos:qihang-oms.yaml?refresh=true
application:
name: kwai-api
server:
port: 8088
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml
type-aliases-package: com.qihang.kwai.domain;com.qihang.security.entity;
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启sql日志

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qihang.kwai.mapper.KwaiOrderMapper">
<resultMap id="BaseResultMap" type="com.qihang.kwai.domain.KwaiOrder">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="oid" column="oid" jdbcType="BIGINT"/>
<result property="createtime" column="createTime" jdbcType="BIGINT"/>
<result property="discountfee" column="discountFee" jdbcType="DECIMAL"/>
<result property="expressfee" column="expressFee" jdbcType="DECIMAL"/>
<result property="num" column="num" jdbcType="INTEGER"/>
<result property="consignee" column="consignee" jdbcType="VARCHAR"/>
<result property="mobile" column="mobile" jdbcType="VARCHAR"/>
<result property="paytime" column="payTime" jdbcType="BIGINT"/>
<result property="buyerremark" column="buyerRemark" jdbcType="VARCHAR"/>
<result property="sellerremark" column="sellerRemark" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="refund" column="refund" jdbcType="INTEGER"/>
<result property="totalfee" column="totalFee" jdbcType="DECIMAL"/>
<result property="province" column="province" jdbcType="VARCHAR"/>
<result property="city" column="city" jdbcType="VARCHAR"/>
<result property="district" column="district" jdbcType="VARCHAR"/>
<result property="address" column="address" jdbcType="VARCHAR"/>
<result property="logisticscompany" column="logisticsCompany" jdbcType="VARCHAR"/>
<result property="logisticscompanycode" column="logisticsCompanyCode" jdbcType="VARCHAR"/>
<result property="logisticscode" column="logisticsCode" jdbcType="VARCHAR"/>
<result property="auditstatus" column="auditStatus" jdbcType="INTEGER"/>
<result property="createon" column="createOn" jdbcType="BIGINT"/>
<result property="sendstatus" column="sendStatus" jdbcType="INTEGER"/>
<result property="sendtime" column="sendTime" jdbcType="BIGINT"/>
</resultMap>
<sql id="Base_Column_List">
id,oid,createTime,
discountFee,expressFee,num,
consignee,mobile,payTime,
buyerRemark,sellerRemark,status,
refund,totalFee,province,
city,district,address,
logisticsCompany,logisticsCompanyCode,logisticsCode,
auditStatus,createOn,sendStatus,
sendTime
</sql>
</mapper>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qihang.kwai.mapper.KwaiOrdersItemMapper">
<resultMap id="BaseResultMap" type="com.qihang.kwai.domain.KwaiOrdersItem">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="itemid" column="itemId" jdbcType="BIGINT"/>
<result property="orderid" column="orderId" jdbcType="BIGINT"/>
<result property="erpgoodsid" column="erpGoodsId" jdbcType="INTEGER"/>
<result property="erpgoodsspecid" column="erpGoodsSpecId" jdbcType="INTEGER"/>
<result property="itemtitle" column="itemTitle" jdbcType="VARCHAR"/>
<result property="itempicurl" column="itemPicUrl" jdbcType="VARCHAR"/>
<result property="goodsnum" column="goodsNum" jdbcType="VARCHAR"/>
<result property="goodsspec" column="goodsSpec" jdbcType="VARCHAR"/>
<result property="skunick" column="skuNick" jdbcType="VARCHAR"/>
<result property="price" column="price" jdbcType="DOUBLE"/>
<result property="num" column="num" jdbcType="INTEGER"/>
<result property="refundid" column="refundId" jdbcType="BIGINT"/>
<result property="refundstatus" column="refundStatus" jdbcType="INTEGER"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="isgift" column="isGift" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id,itemId,orderId,
erpGoodsId,erpGoodsSpecId,itemTitle,
itemPicUrl,goodsNum,goodsSpec,
skuNick,price,num,
refundId,refundStatus,remark,
isGift
</sql>
</mapper>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qihang.kwai.mapper.SysPlatformMapper">
<resultMap id="BaseResultMap" type="com.qihang.kwai.domain.SysPlatform">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="appKey" column="app_key" jdbcType="VARCHAR"/>
<result property="appSecret" column="app_secret" jdbcType="VARCHAR"/>
<result property="redirectUri" column="redirect_uri" jdbcType="VARCHAR"/>
<result property="serverUrl" column="server_url" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,name,code,
app_key,app_secret,redirect_uri,
server_url
</sql>
</mapper>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qihang.kwai.mapper.SysShopMapper">
<resultMap id="BaseResultMap" type="com.qihang.kwai.domain.SysShop">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="type" column="type" jdbcType="INTEGER"/>
<result property="url" column="url" jdbcType="VARCHAR"/>
<result property="sort" column="sort" jdbcType="INTEGER"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="modifyOn" column="modify_on" jdbcType="BIGINT"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="sellerId" column="seller_id" jdbcType="BIGINT"/>
<result property="appKey" column="app_key" jdbcType="VARCHAR"/>
<result property="appSercet" column="app_sercet" jdbcType="VARCHAR"/>
<result property="accessToken" column="access_token" jdbcType="VARCHAR"/>
<result property="expiresIn" column="expires_in" jdbcType="BIGINT"/>
<result property="accessTokenBegin" column="access_token_begin" jdbcType="BIGINT"/>
<result property="refreshToken" column="refresh_token" jdbcType="VARCHAR"/>
<result property="refreshTokenTimeout" column="refresh_token_timeout" jdbcType="BIGINT"/>
<result property="apiRequestUrl" column="api_request_url" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,name,type,
url,sort,status,
modify_on,remark,seller_id,
app_key,app_sercet,access_token,
expires_in,access_token_begin,refresh_token,
refresh_token_timeout,api_request_url
</sql>
</mapper>

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qihang.kwai.mapper.SysUserMapper">
<resultMap type="SysUser" id="SysUserResult">
<id property="userId" column="user_id" />
<result property="deptId" column="dept_id" />
<result property="userName" column="user_name" />
<result property="nickName" column="nick_name" />
<result property="email" column="email" />
<result property="phonenumber" column="phonenumber" />
<result property="sex" column="sex" />
<result property="avatar" column="avatar" />
<result property="password" column="password" />
<result property="status" column="status" />
<result property="delFlag" column="del_flag" />
<result property="loginIp" column="login_ip" />
<result property="loginDate" column="login_date" />
</resultMap>
<sql id="selectUserVo">
select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark
from sys_user u
</sql>
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
<if test="userId != null and userId != 0">
AND u.user_id = #{userId}
</if>
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="status != null and status != ''">
AND u.status = #{status}
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
</if>
<if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on r.role_id = ur.role_id
where u.del_flag = '0' and r.role_id = #{roleId}
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on r.role_id = ur.role_id
where u.del_flag = '0' and (r.role_id != #{roleId} or r.role_id IS NULL)
and u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and ur.role_id = #{roleId})
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_name = #{userName} and u.del_flag = '0'
</select>
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_id = #{userId}
</select>
<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
</select>
<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
</select>
<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
</select>
<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_user(
<if test="userId != null and userId != 0">user_id,</if>
<if test="deptId != null and deptId != 0">dept_id,</if>
<if test="userName != null and userName != ''">user_name,</if>
<if test="nickName != null and nickName != ''">nick_name,</if>
<if test="email != null and email != ''">email,</if>
<if test="avatar != null and avatar != ''">avatar,</if>
<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
<if test="sex != null and sex != ''">sex,</if>
<if test="password != null and password != ''">password,</if>
<if test="status != null and status != ''">status,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
<if test="deptId != null and deptId != ''">#{deptId},</if>
<if test="userName != null and userName != ''">#{userName},</if>
<if test="nickName != null and nickName != ''">#{nickName},</if>
<if test="email != null and email != ''">#{email},</if>
<if test="avatar != null and avatar != ''">#{avatar},</if>
<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
<if test="sex != null and sex != ''">#{sex},</if>
<if test="password != null and password != ''">#{password},</if>
<if test="status != null and status != ''">#{status},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if>
current_timestamp()
)
</insert>
<update id="updateUser" parameterType="SysUser">
update sys_user
<set>
<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
<if test="userName != null and userName != ''">user_name = #{userName},</if>
<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
<if test="email != null ">email = #{email},</if>
<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
<if test="sex != null and sex != ''">sex = #{sex},</if>
<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
<if test="password != null and password != ''">password = #{password},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
<if test="loginDate != null">login_date = #{loginDate},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},</if>
update_time = current_timestamp()
</set>
where user_id = #{userId}
</update>
<update id="updateUserStatus" parameterType="SysUser">
update sys_user set status = #{status} where user_id = #{userId}
</update>
<update id="updateUserAvatar" parameterType="SysUser">
update sys_user set avatar = #{avatar} where user_name = #{userName}
</update>
<update id="resetUserPwd" parameterType="SysUser">
update sys_user set password = #{password} where user_name = #{userName}
</update>
<delete id="deleteUserById" parameterType="Long">
update sys_user set del_flag = '2' where user_id = #{userId}
</delete>
<delete id="deleteUserByIds" parameterType="Long">
update sys_user set del_flag = '2' where user_id in
<foreach collection="array" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,38 @@
package com.qihang.kwai;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -1,24 +1,23 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- <parent>-->
<!-- <groupId>com.qihang</groupId>-->
<!-- <artifactId>qihang-oms</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- </parent>-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.2</version>
<relativePath/>
</parent>
<groupId>com.qihang.wei</groupId>
<artifactId>wei-api</artifactId>
<packaging>jar</packaging>
<name>wei-api</name>
<url>http://maven.apache.org</url>
<groupId>com.qihang</groupId>
<artifactId>open-api</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>wei-api</module>
<module>kwai-api</module>
</modules>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -27,7 +26,6 @@
<spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
<jwt.version>0.11.5</jwt.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
@ -100,4 +98,4 @@
</dependency>
</dependencies>
</dependencyManagement>
</project>
</project>

98
open-api/wei-api/pom.xml Normal file
View File

@ -0,0 +1,98 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.qihang</groupId>
<artifactId>open-api</artifactId>
<version>1.0.0</version>
</parent>
<groupId>com.qihang.wei</groupId>
<artifactId>wei-api</artifactId>
<packaging>jar</packaging>
<name>wei-api</name>
<url>http://maven.apache.org</url>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.0.2</spring-boot.version>
<spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
<jwt.version>0.11.5</jwt.version>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-web</artifactId>-->
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-tomcat</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-undertow</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-webflux</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash;SpringCloud Alibaba nacos 服务发现依赖&ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.qihang</groupId>-->
<!-- <artifactId>security</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <version>8.0.33</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.baomidou</groupId>-->
<!-- <artifactId>mybatis-plus-spring-boot3-starter</artifactId>-->
<!-- <version>3.5.5</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- <version>1.18.30</version>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
</dependencies>
<!-- <dependencyManagement>-->
<!-- <dependencies>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-dependencies</artifactId>-->
<!-- <version>${spring-boot.version}</version>-->
<!-- <type>pom</type>-->
<!-- <scope>import</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-alibaba-dependencies</artifactId>-->
<!-- <version>${spring-cloud-alibaba.version}</version>-->
<!-- <type>pom</type>-->
<!-- <scope>import</scope>-->
<!-- </dependency>-->
<!-- </dependencies>-->
<!-- </dependencyManagement>-->
</project>

Some files were not shown because too many files have changed in this diff Show More