diff --git a/core/common/src/main/java/com/qihang/common/api/ShopApiParams.java b/core/common/src/main/java/com/qihang/common/api/ShopApiParams.java
index 8b2182e3..ca6513dd 100644
--- a/core/common/src/main/java/com/qihang/common/api/ShopApiParams.java
+++ b/core/common/src/main/java/com/qihang/common/api/ShopApiParams.java
@@ -1,67 +1,14 @@
package com.qihang.common.api;
+import lombok.Data;
+
+@Data
public class ShopApiParams {
private String appKey;
private String appSecret;
private String accessToken;
- private String apiRequestUrl;
- private String tokenRequestUrl;
+ private String redirectUrl;
private String serverUrl;
- private String sellerId;
+ private Long sellerShopId;
- public String getSellerId() {
- return sellerId;
- }
-
- public void setSellerId(String sellerId) {
- this.sellerId = sellerId;
- }
-
- public String getServerUrl() {
- return serverUrl;
- }
-
- public void setServerUrl(String serverUrl) {
- this.serverUrl = serverUrl;
- }
-
- public String getTokenRequestUrl() {
- return tokenRequestUrl;
- }
-
- public void setTokenRequestUrl(String tokenRequestUrl) {
- this.tokenRequestUrl = tokenRequestUrl;
- }
-
- public String getAppKey() {
- return appKey;
- }
-
- public void setAppKey(String appKey) {
- this.appKey = appKey;
- }
-
- public String getAppSecret() {
- return appSecret;
- }
-
- public void setAppSecret(String appSecret) {
- this.appSecret = appSecret;
- }
-
- public String getAccessToken() {
- return accessToken;
- }
-
- public void setAccessToken(String accessToken) {
- this.accessToken = accessToken;
- }
-
- public String getApiRequestUrl() {
- return apiRequestUrl;
- }
-
- public void setApiRequestUrl(String apiRequestUrl) {
- this.apiRequestUrl = apiRequestUrl;
- }
}
diff --git a/core/common/src/main/java/com/qihang/common/common/ResultVoEnum.java b/core/common/src/main/java/com/qihang/common/common/ResultVoEnum.java
index ab280d74..ca6b8a9d 100644
--- a/core/common/src/main/java/com/qihang/common/common/ResultVoEnum.java
+++ b/core/common/src/main/java/com/qihang/common/common/ResultVoEnum.java
@@ -8,7 +8,7 @@ package com.qihang.common.common;
*/
public enum ResultVoEnum {
SUCCESS("成功", 0),
- TokenFail("Token失效",401),
+ TokenFail("Token失效",1401),
NotFound("NotFound", 404),//没有找到
Unable("Unable", 403),//无法处理
// NotLogin("未登录", 400),//未登录
diff --git a/open-api/dou-api/libs/dou-api-0.3.jar b/open-api/dou-api/libs/dou-api-0.3.jar
new file mode 100644
index 00000000..13452ea0
Binary files /dev/null and b/open-api/dou-api/libs/dou-api-0.3.jar differ
diff --git a/open-api/dou-api/libs/doudian-sdk-java-1.1.0-20240217120650.jar b/open-api/dou-api/libs/doudian-sdk-java-1.1.0-20240217120650.jar
deleted file mode 100644
index ce1f56ba..00000000
Binary files a/open-api/dou-api/libs/doudian-sdk-java-1.1.0-20240217120650.jar and /dev/null differ
diff --git a/open-api/dou-api/libs/doudian-sdk-java-1.1.0-20240311114923.jar b/open-api/dou-api/libs/doudian-sdk-java-1.1.0-20240311114923.jar
deleted file mode 100644
index 5cd54848..00000000
Binary files a/open-api/dou-api/libs/doudian-sdk-java-1.1.0-20240311114923.jar and /dev/null differ
diff --git a/open-api/dou-api/pom.xml b/open-api/dou-api/pom.xml
index d33d2938..a67d31e7 100644
--- a/open-api/dou-api/pom.xml
+++ b/open-api/dou-api/pom.xml
@@ -25,79 +25,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
doudian
- doudian-sdk-java
- 1.1.0-20240217120650
+ dou-api
+ 0.3
system
- ${project.basedir}/libs/doudian-sdk-java-1.1.0-20240217120650.jar
+ ${project.basedir}/libs/dou-api-0.3.jar
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/config/MybatisPlusConfig.java b/open-api/dou-api/src/main/java/com/qihang/dou/config/MybatisPlusConfig.java
new file mode 100644
index 00000000..1bc1b9ce
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/config/MybatisPlusConfig.java
@@ -0,0 +1,19 @@
+package com.qihang.dou.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.dou.mapper")
+public class MybatisPlusConfig {
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //注意使用哪种数据库
+ return interceptor;
+ }
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouApiHelper.java b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouApiHelper.java
new file mode 100644
index 00000000..1ee798ac
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouApiHelper.java
@@ -0,0 +1,54 @@
+package com.qihang.dou.controller;
+
+import cn.qihangerp.open.dou.common.ApiResultVo;
+import com.qihang.common.api.ShopApiParams;
+import com.qihang.common.common.ResultVoEnum;
+import com.qihang.common.enums.EnumShopType;
+import com.qihang.dou.service.SShopPlatformService;
+import com.qihang.dou.service.SShopService;
+import lombok.AllArgsConstructor;
+import lombok.extern.java.Log;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+@AllArgsConstructor
+@Log
+@Component
+public class DouApiHelper {
+ private final SShopService shopService;
+ private final SShopPlatformService platformService;
+
+ public ApiResultVo checkBefore(Long shopId) {
+ log.info("/**************主动更新dou 参数检查****************/");
+ var shop = shopService.selectShopById(shopId);
+
+ if (shop == null) return ApiResultVo.error(ResultVoEnum.ParamsError.getIndex(), "参数错误,没有找到店铺");
+
+ if (shop.getPlatform() != EnumShopType.DOU.getIndex())
+ return ApiResultVo.error(ResultVoEnum.ParamsError.getIndex(), "参数错误,店铺不是dou店铺");
+
+ if(shop.getSellerShopId()==null || shop.getSellerShopId()<=0) return ApiResultVo.error(ResultVoEnum.ParamsError.getIndex(), "店铺配置错误,请配置店铺平台shop_id");
+
+ var thirdConfig = platformService.getById(shop.getPlatform().longValue());
+ if (thirdConfig == null) return ApiResultVo.error(ResultVoEnum.SystemException.getIndex(), "系统错误,没有找到第三方平台的配置信息");
+ else if (StringUtils.isEmpty(thirdConfig.getAppKey()))
+ return ApiResultVo.error(ResultVoEnum.SystemException.getIndex(), "系统错误,第三方平台配置信息不完整,缺少appkey");
+ else if (StringUtils.isEmpty(thirdConfig.getAppSecret()))
+ return ApiResultVo.error(ResultVoEnum.SystemException.getIndex(), "系统错误,第三方平台配置信息不完整,缺少appSecret");
+// else if (StringUtils.isEmpty(thirdConfig.getServerUrl()))
+// return new ApiResult<>(ResultVoEnum.SystemException.getIndex(), "系统错误,第三方平台配置信息不完整,缺少server_url");
+
+ ShopApiParams params = new ShopApiParams();
+ params.setAppKey(thirdConfig.getAppKey());
+ params.setAppSecret(thirdConfig.getAppSecret());
+ params.setAccessToken(shop.getAccessToken());
+ params.setServerUrl(thirdConfig.getServerUrl());
+ params.setRedirectUrl(thirdConfig.getRedirectUrl());
+ params.setSellerShopId(shop.getSellerShopId());
+ if (!StringUtils.hasText(shop.getAccessToken()))
+ return ApiResultVo.error(ResultVoEnum.TokenFail.getIndex(), "Token已过期,请重新授权",params);
+
+ return ApiResultVo.success(params);
+ }
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsApiController.java b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsApiController.java
new file mode 100644
index 00000000..2be9a041
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsApiController.java
@@ -0,0 +1,100 @@
+package com.qihang.dou.controller;
+
+
+import cn.qihangerp.open.dou.DouGoodsApiHelper;
+import cn.qihangerp.open.dou.DouTokenApiHelper;
+import cn.qihangerp.open.dou.common.ApiResultVo;
+import cn.qihangerp.open.dou.model.GoodsListResultVo;
+import cn.qihangerp.open.dou.model.Token;
+import com.qihang.common.common.AjaxResult;
+import com.qihang.common.common.ResultVoEnum;
+import com.qihang.common.enums.HttpStatus;
+import com.qihang.dou.domain.OmsDouGoods;
+import com.qihang.dou.domain.OmsDouGoodsSku;
+import com.qihang.dou.domain.bo.DouRequest;
+import com.qihang.dou.service.OmsDouGoodsService;
+import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+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.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AllArgsConstructor
+@RequestMapping("/goods")
+@RestController
+public class DouGoodsApiController {
+ private static Logger logger = LoggerFactory.getLogger(DouGoodsApiController.class);
+ private final DouApiHelper douApiHelper;
+ private final OmsDouGoodsService goodsService;
+
+ @RequestMapping(value = "/pull_goods", method = RequestMethod.POST)
+ public AjaxResult getOrderList(@RequestBody DouRequest req) throws Exception {
+ if (req.getShopId() == null || req.getShopId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id");
+ }
+ var checkResult = douApiHelper.checkBefore(req.getShopId());
+ if (checkResult.getCode() != ResultVoEnum.SUCCESS.getIndex()) {
+ return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData());
+ }
+ String accessToken = checkResult.getData().getAccessToken();
+ String url = checkResult.getData().getServerUrl();
+ String appKey = checkResult.getData().getAppKey();
+ String appSercet = checkResult.getData().getAppSecret();
+
+ ApiResultVo token = DouTokenApiHelper.getToken(appKey, appSercet,checkResult.getData().getSellerShopId());
+ if(token.getCode()==0) {
+ accessToken = token.getData().getAccessToken();
+ }else{
+ return AjaxResult.error(token.getMsg());
+ }
+
+ int insertSuccess = 0;//新增成功的订单
+ int totalError = 0;
+ int hasExistOrder = 0;//已存在的订单数
+ ApiResultVo apiResultVo = DouGoodsApiHelper.getGoodsList(appKey, appSercet, accessToken, 1, 10);
+ if (apiResultVo.getCode() != 0) return AjaxResult.error(apiResultVo.getCode(), apiResultVo.getMsg());
+ //成功
+ if (apiResultVo.getData().getGoodsList() != null) {
+ for (var g : apiResultVo.getData().getGoodsList()) {
+ OmsDouGoods goods = new OmsDouGoods();
+ BeanUtils.copyProperties(g, goods);
+ // TODO:转换goods
+ goods.setShopId(req.getShopId());
+ goods.setPullTime(new Date());
+ List skuList = new ArrayList<>();
+ for (var s : g.getSkuList()) {
+ OmsDouGoodsSku sku = new OmsDouGoodsSku();
+ BeanUtils.copyProperties(s, sku);
+ sku.setShopId(req.getShopId());
+ sku.setName(g.getName());
+ sku.setImg(g.getImg());
+ skuList.add(sku);
+ }
+ goods.setSkuList(skuList);
+
+ int result = goodsService.saveAndUpdateGoods(req.getShopId(), goods);
+ if (result == ResultVoEnum.DataExist.getIndex()) {
+ //已经存在
+ hasExistOrder++;
+ } else if (result == ResultVoEnum.SUCCESS.getIndex()) {
+ insertSuccess++;
+ } else {
+ totalError++;
+ }
+ }
+ }
+ String msg = "成功,总共找到:" + apiResultVo.getData().getGoodsList().size() + "条商品数据,新增:" + insertSuccess + "条,添加错误:" + totalError + "条,更新:" + hasExistOrder + "条";
+ logger.info(msg);
+// return new ApiResult<>(EnumResultVo.SUCCESS.getIndex(), msg);
+ return AjaxResult.success(msg);
+ }
+
+
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsController.java b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsController.java
new file mode 100644
index 00000000..f022627c
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsController.java
@@ -0,0 +1,55 @@
+package com.qihang.dou.controller;
+
+
+import com.qihang.common.bo.LinkErpGoodsSkuBo;
+import com.qihang.common.common.AjaxResult;
+import com.qihang.common.common.PageQuery;
+import com.qihang.common.common.PageResult;
+import com.qihang.common.common.TableDataInfo;
+import com.qihang.dou.domain.OmsDouGoods;
+import com.qihang.dou.domain.OmsDouGoodsSku;
+import com.qihang.dou.service.OmsDouGoodsService;
+import com.qihang.dou.service.OmsDouGoodsSkuService;
+import com.qihang.security.common.BaseController;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RequestMapping("/goods")
+@RestController
+@AllArgsConstructor
+public class DouGoodsController extends BaseController {
+ private final OmsDouGoodsService goodsService;
+ private final OmsDouGoodsSkuService skuService;
+ @RequestMapping(value = "/list", method = RequestMethod.GET)
+ public TableDataInfo goodsList(OmsDouGoods bo, PageQuery pageQuery) {
+ PageResult result = goodsService.queryPageList(bo, pageQuery);
+
+ return getDataTable(result);
+ }
+
+ @RequestMapping(value = "/skuList", method = RequestMethod.GET)
+ public TableDataInfo skuList(OmsDouGoodsSku bo, PageQuery pageQuery) {
+ PageResult result = skuService.queryPageList(bo, pageQuery);
+
+ return getDataTable(result);
+ }
+
+ /**
+ * 获取店铺订单详细信息
+ */
+ @GetMapping(value = "/sku/{id}")
+ public AjaxResult getSkuInfo(@PathVariable("id") Long id)
+ {
+ return AjaxResult.success(skuService.getById(id));
+ }
+ @PostMapping(value = "/sku/linkErp")
+ public AjaxResult linkErp(@RequestBody LinkErpGoodsSkuBo bo)
+ {
+ OmsDouGoodsSku sku = new OmsDouGoodsSku();
+ sku.setId(bo.getId());
+ sku.setErpGoodsSkuId(Long.parseLong(bo.getErpGoodsSkuId()));
+ skuService.updateById(sku);
+ return success();
+ }
+
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/controller/HomeController.java b/open-api/dou-api/src/main/java/com/qihang/dou/controller/HomeController.java
index 9a365ac9..98f0999e 100644
--- a/open-api/dou-api/src/main/java/com/qihang/dou/controller/HomeController.java
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/controller/HomeController.java
@@ -1,14 +1,5 @@
package com.qihang.dou.controller;
-import com.doudian.open.api.order_searchList.OrderSearchListRequest;
-import com.doudian.open.api.order_searchList.OrderSearchListResponse;
-import com.doudian.open.api.order_searchList.param.OrderSearchListParam;
-import com.doudian.open.api.token_create.TokenCreateRequest;
-import com.doudian.open.api.token_create.TokenCreateResponse;
-import com.doudian.open.api.token_create.param.TokenCreateParam;
-import com.doudian.open.core.AccessToken;
-import com.doudian.open.core.AccessTokenBuilder;
-import com.doudian.open.core.GlobalConfig;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -18,40 +9,7 @@ import org.springframework.web.bind.annotation.RestController;
public class HomeController {
@GetMapping("/")
public String home() {
- //设置appKey和appSecret,全局设置一次
- String appkey = "7005157746437834253";
- String appSecret = "8104c8b8-9085-4a80-9248-629759b4f1a3";
- appkey = "7344938657423296019";
- appSecret = "4e704882-832a-42e5-845f-6af991ce0ce2";
- GlobalConfig.initAppKey(appkey);
- GlobalConfig.initAppSecret(appSecret);
- //获取access_token方法
- AccessToken accessToken = AccessTokenBuilder.build(90158786L); //入参为shopId 4463798L
- if ("50002".equals(accessToken.getCode())) {
- return accessToken.getSubMsg();
- }
-
- OrderSearchListRequest request = new OrderSearchListRequest();
- OrderSearchListParam param = request.getParam();
- param.setProduct("3473196049974326153");
- param.setBType(2L);
- param.setAfterSaleStatusDesc("refund_success");
- param.setTrackingNo("435435");
- param.setPresellType(1L);
- param.setOrderType(1L);
-// param.setCreateTimeStart(1617355413L);
-// param.setCreateTimeEnd(1617355413L);
- param.setAbnormalOrder(1L);
- param.setTradeType(1L);
- param.setUpdateTimeStart(1709222400L);
- param.setUpdateTimeEnd(System.currentTimeMillis()/1000);
- param.setSize(20L);
- param.setPage(0L);
- param.setOrderBy("create_time");
- param.setOrderAsc(false);
- param.setFulfilStatus("no_accept");
- OrderSearchListResponse response = request.execute(accessToken);
return "{'code':0,'msg':'dou-api请通过api访问'}";
}
}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouGoods.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouGoods.java
new file mode 100644
index 00000000..7531e595
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouGoods.java
@@ -0,0 +1,109 @@
+package com.qihang.dou.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * 抖店商品表
+ * @TableName oms_dou_goods
+ */
+@Data
+public class OmsDouGoods implements Serializable {
+ /**
+ *
+ */
+ private Long id;
+
+ /**
+ * 店铺id
+ */
+ private Long shopId;
+
+ /**
+ * 商品ID,抖店系统生成,店铺下唯一
+ */
+ private Long productId;
+
+ /**
+ * 商品类型;0-普通;1-新客商品;3-虚拟;6-玉石闪购;7-云闪购 ;127-其他类型;
+ */
+ private Integer productType;
+
+ /**
+ * 商品标题。
+ */
+ private String name;
+
+ /**
+ * 商品主图的第一张图
+ */
+ private String img;
+
+ /**
+ * 商品审核状态: 1-未提交;2-待审核;3-审核通过;4-审核未通过;5-封禁;7-审核通过待上架;
+ */
+ private Integer checkStatus;
+
+ /**
+ * 商品在店铺中状态: 0-在线;1-下线;2-删除;
+ */
+ private Integer status;
+
+ /**
+ * 商品规格,全局唯一
+ */
+ private Long specId;
+
+ /**
+ * 商品创建时间,unix时间戳,单位:秒;
+ */
+ private Integer createTime;
+
+ /**
+ * 商品更新时间,unix时间戳,单位:秒;
+ */
+ private Integer updateTime;
+
+ /**
+ * 商品详情,最大支持50张图片,单张详情图宽高比不超2000*2000px,大小5M内,仅支持jpg/jpeg/png格式;
+ */
+ private String description;
+
+ /**
+ * 类目详情;商品类目id可使用【/shop/getShopCategory】查询
+ */
+ private String categoryDetail;
+
+ /**
+ * 外部商家编码,商家自定义字段,支持最多 255个字符
+ */
+ private String outerProductId;
+
+ /**
+ * 是否是组合商品,true-是,false-不是;
+ */
+ private String isPackageProduct;
+
+ /**
+ * erp商品id
+ */
+ private Long erpGoodsId;
+
+ /**
+ * 拉取时间
+ */
+ private Date pullTime;
+
+ /**
+ * 更新时间
+ */
+ private Date modifyTime;
+
+ @TableField(exist = false)
+ private List skuList;
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouGoodsSku.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouGoodsSku.java
new file mode 100644
index 00000000..c0edda8d
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouGoodsSku.java
@@ -0,0 +1,161 @@
+package com.qihang.dou.domain;
+
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 抖店商品Sku表
+ * @TableName oms_dou_goods_sku
+ */
+@Data
+public class OmsDouGoodsSku implements Serializable {
+ /**
+ * 商品sku_id;抖店系统生成。
+ */
+ private String id;
+
+ /**
+ * 商品ID;抖店系统生成。
+ */
+ private Long productId;
+
+ /**
+ * 规格ID
+ */
+ private Long specId;
+
+ /**
+ * sku外部编码
+ */
+ private String code;
+
+ /**
+ * 库存类型;0-普通;1-区域库存;10-阶梯库存;
+ */
+ private Integer skuType;
+
+ /**
+ * sku状态 true上架 false下架
+ */
+ private String skuStatus;
+
+ /**
+ * 外部的skuId;商家自定义;未设置返回为0。
+ */
+ private Long outSkuId;
+
+ /**
+ * 第一级子规格
+ */
+ private Long specDetailId1;
+
+ /**
+ * 第二级子规格
+ */
+ private Long specDetailId2;
+
+ /**
+ *
+第三级子规格
+ */
+ private Long specDetailId3;
+
+ /**
+ * 第一级子规格名
+ */
+ private String specDetailName1;
+
+ /**
+ * 第二级子规格名
+ */
+ private String specDetailName2;
+
+ /**
+ *
+第三级子规格名
+ */
+ private String specDetailName3;
+
+ /**
+ * 商品价格,单位:分
+ */
+ private Integer price;
+
+ /**
+ * 创建时间,时间戳:单位秒;
+ */
+ private Integer createTime;
+
+ /**
+ * ku_type=0时,表示普通库存数量 ;sku_type=1时,使用stock_map,表示区域库存数量
+ */
+ private Integer stockNum;
+
+ /**
+ * sku_type=0时,表示预占库存数量; sku_type=1时,表示区域库存数量,使用prehold_stock_map
+ */
+ private Integer preholdStockNum;
+
+ /**
+ * 活动库存
+ */
+ private Integer promStockNum;
+
+ /**
+ *
+阶梯库存
+ */
+ private Integer stepStockNum;
+
+ /**
+ * 预占阶梯库存
+ */
+ private Integer preholdStepStockNum;
+
+ /**
+ * 活动阶梯库存
+ */
+ private Integer promStepStockNum;
+
+ /**
+ * 库存模型V2新增 普通库存 非活动可售
+ */
+ private Integer normalStockNum;
+
+ /**
+ * 库存模型V2新增 渠道库存
+ */
+ private Integer channelStockNum;
+
+ /**
+ * 销售属性,代替spec_detail_id123、spec_detail_name123
+ */
+ private String sellProperties;
+
+ /**
+ * 商品id(o_goods外键)
+ */
+ private Long erpGoodsId;
+
+ /**
+ * 商品skuid(o_goods_sku外键)
+ */
+ private Long erpGoodsSkuId;
+
+ /**
+ * 店铺id
+ */
+ private Long shopId;
+
+ /**
+ * 商品标题。
+ */
+ private String name;
+
+ /**
+ * 商品主图的第一张图
+ */
+ private String img;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShop.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShop.java
new file mode 100644
index 00000000..15a5801d
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShop.java
@@ -0,0 +1,114 @@
+package com.qihang.dou.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 电商平台店铺表
+ * @TableName s_shop
+ */
+@Data
+public class SShop implements Serializable {
+ /**
+ * 主键
+ */
+ private Integer id;
+
+ /**
+ * 店铺名
+ */
+ private String name;
+
+ /**
+ * 店铺别名
+ */
+ private String nickName;
+
+ /**
+ * 标识
+ */
+ private String ename;
+
+ /**
+ * 店铺主题
+ */
+ private String company;
+
+ /**
+ * 对应第三方平台Id
+ */
+ private Integer platform;
+
+ /**
+ * 店铺url
+ */
+ private String shopUrl;
+
+ /**
+ * 排序
+ */
+ private Integer orderNum;
+
+ /**
+ * 是否删除0否1是
+ */
+ private Integer isDelete;
+
+ /**
+ * 描述
+ */
+ private String remark;
+
+ /**
+ * 第三方平台店铺id
+ */
+ private Long sellerShopId;
+
+ /**
+ * Appkey(微信视频号小店专用)
+ */
+ private String appKey;
+
+ /**
+ * Appsercet(微信视频号小店专用)
+ */
+ private String appSercet;
+
+ /**
+ * 第三方平台sessionKey(access_token)
+ */
+ private String accessToken;
+
+ /**
+ * accessToken到期(秒)
+ */
+ private Long accessExpiresIn;
+
+ /**
+ * access_token开始时间
+ */
+ private Long accessTokenBegin;
+
+ /**
+ * 刷新token
+ */
+ private String refreshToken;
+
+ /**
+ * 刷新token过期时间
+ */
+ private Long refreshTokenTimeout;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPlatform.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPlatform.java
new file mode 100644
index 00000000..aa0ab35e
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPlatform.java
@@ -0,0 +1,59 @@
+package com.qihang.dou.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 电商平台配置表
+ * @TableName s_shop_platform
+ */
+@Data
+public class SShopPlatform implements Serializable {
+ /**
+ * 主键
+ */
+ private Integer id;
+
+ /**
+ * 平台名
+ */
+ private String name;
+
+ /**
+ * appKey
+ */
+ private String appKey;
+
+ /**
+ * appSecret
+ */
+ private String appSecret;
+
+ /**
+ * 描述
+ */
+ private String remark;
+
+ /**
+ * 服务url
+ */
+ private String serverUrl;
+
+ /**
+ * 回调url
+ */
+ private String redirectUrl;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLasttime.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLasttime.java
new file mode 100644
index 00000000..0c223640
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLasttime.java
@@ -0,0 +1,44 @@
+package com.qihang.dou.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 店铺更新最后时间记录
+ * @TableName s_shop_pull_lasttime
+ */
+@Data
+public class SShopPullLasttime implements Serializable {
+ /**
+ *
+ */
+ private Integer id;
+
+ /**
+ * 店铺id
+ */
+ private Integer shopId;
+
+ /**
+ * 类型(ORDER:订单,REFUND:退款)
+ */
+ private Object pullType;
+
+ /**
+ * 最后更新时间
+ */
+ private Date lasttime;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLogs.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLogs.java
new file mode 100644
index 00000000..b27ad11f
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLogs.java
@@ -0,0 +1,59 @@
+package com.qihang.dou.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 店铺更新日志表
+ * @TableName s_shop_pull_logs
+ */
+@Data
+public class SShopPullLogs implements Serializable {
+ /**
+ * 主键Id
+ */
+ private Long id;
+
+ /**
+ * 店铺id
+ */
+ private Integer shopId;
+
+ /**
+ * 平台id
+ */
+ private Integer shopType;
+
+ /**
+ * 类型(ORDER订单,GOODS商品,REFUND退款)
+ */
+ private Object pullType;
+
+ /**
+ * 拉取方式(主动拉取、定时任务)
+ */
+ private String pullWay;
+
+ /**
+ * 拉取参数
+ */
+ private String pullParams;
+
+ /**
+ * 拉取结果
+ */
+ private String pullResult;
+
+ /**
+ * 拉取时间
+ */
+ private Date pullTime;
+
+ /**
+ * 耗时(毫秒)
+ */
+ private Long duration;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouRequest.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouRequest.java
new file mode 100644
index 00000000..809978ec
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouRequest.java
@@ -0,0 +1,49 @@
+package com.qihang.dou.domain.bo;
+
+public class DouRequest {
+ private Long shopId;//店铺Id
+ private Long orderId;//订单id
+ private Integer updType;//更新类型0拉取新订单1更新订单
+ private String startDate;
+ private String endDate;
+
+ public String getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(String startDate) {
+ this.startDate = startDate;
+ }
+
+ public String getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(String endDate) {
+ this.endDate = endDate;
+ }
+
+ public Integer getUpdType() {
+ return updType;
+ }
+
+ public void setUpdType(Integer updType) {
+ this.updType = updType;
+ }
+
+ public Long getOrderId() {
+ return orderId;
+ }
+
+ public void setOrderId(Long orderId) {
+ this.orderId = orderId;
+ }
+
+ public Long getShopId() {
+ return shopId;
+ }
+
+ public void setShopId(Long shopId) {
+ this.shopId = shopId;
+ }
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouGoodsMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouGoodsMapper.java
new file mode 100644
index 00000000..4dafb02f
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouGoodsMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.dou.mapper;
+
+import com.qihang.dou.domain.OmsDouGoods;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【oms_dou_goods(抖店商品表)】的数据库操作Mapper
+* @createDate 2024-06-11 14:49:40
+* @Entity com.qihang.dou.domain.OmsDouGoods
+*/
+public interface OmsDouGoodsMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouGoodsSkuMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouGoodsSkuMapper.java
new file mode 100644
index 00000000..ca4786c3
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouGoodsSkuMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.dou.mapper;
+
+import com.qihang.dou.domain.OmsDouGoodsSku;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【oms_dou_goods_sku(抖店商品Sku表)】的数据库操作Mapper
+* @createDate 2024-06-11 14:49:40
+* @Entity com.qihang.dou.domain.OmsDouGoodsSku
+*/
+public interface OmsDouGoodsSkuMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopMapper.java
new file mode 100644
index 00000000..6a1a207e
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.dou.mapper;
+
+import com.qihang.dou.domain.SShop;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【s_shop(电商平台店铺表)】的数据库操作Mapper
+* @createDate 2024-06-11 14:40:36
+* @Entity com.qihang.dou.domain.SShop
+*/
+public interface SShopMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPlatformMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPlatformMapper.java
new file mode 100644
index 00000000..644d7576
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPlatformMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.dou.mapper;
+
+import com.qihang.dou.domain.SShopPlatform;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【s_shop_platform(电商平台配置表)】的数据库操作Mapper
+* @createDate 2024-06-11 14:40:36
+* @Entity com.qihang.dou.domain.SShopPlatform
+*/
+public interface SShopPlatformMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPullLasttimeMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPullLasttimeMapper.java
new file mode 100644
index 00000000..d1ba0ee6
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPullLasttimeMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.dou.mapper;
+
+import com.qihang.dou.domain.SShopPullLasttime;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_lasttime(店铺更新最后时间记录)】的数据库操作Mapper
+* @createDate 2024-06-11 14:40:36
+* @Entity com.qihang.dou.domain.SShopPullLasttime
+*/
+public interface SShopPullLasttimeMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPullLogsMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPullLogsMapper.java
new file mode 100644
index 00000000..dbe8f16f
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/SShopPullLogsMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.dou.mapper;
+
+import com.qihang.dou.domain.SShopPullLogs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_logs(店铺更新日志表)】的数据库操作Mapper
+* @createDate 2024-06-11 14:40:36
+* @Entity com.qihang.dou.domain.SShopPullLogs
+*/
+public interface SShopPullLogsMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouGoodsService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouGoodsService.java
new file mode 100644
index 00000000..352c9bc2
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouGoodsService.java
@@ -0,0 +1,17 @@
+package com.qihang.dou.service;
+
+import com.qihang.common.common.PageQuery;
+import com.qihang.common.common.PageResult;
+import com.qihang.dou.domain.OmsDouGoods;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【oms_dou_goods(抖店商品表)】的数据库操作Service
+* @createDate 2024-06-11 14:49:40
+*/
+public interface OmsDouGoodsService extends IService {
+ PageResult queryPageList(OmsDouGoods bo, PageQuery pageQuery);
+
+ int saveAndUpdateGoods(Long shopId,OmsDouGoods goods);
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouGoodsSkuService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouGoodsSkuService.java
new file mode 100644
index 00000000..4095914e
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouGoodsSkuService.java
@@ -0,0 +1,15 @@
+package com.qihang.dou.service;
+
+import com.qihang.common.common.PageQuery;
+import com.qihang.common.common.PageResult;
+import com.qihang.dou.domain.OmsDouGoodsSku;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【oms_dou_goods_sku(抖店商品Sku表)】的数据库操作Service
+* @createDate 2024-06-11 14:49:40
+*/
+public interface OmsDouGoodsSkuService extends IService {
+ PageResult queryPageList(OmsDouGoodsSku bo, PageQuery pageQuery);
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPlatformService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPlatformService.java
new file mode 100644
index 00000000..bbd3939c
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPlatformService.java
@@ -0,0 +1,13 @@
+package com.qihang.dou.service;
+
+import com.qihang.dou.domain.SShopPlatform;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【s_shop_platform(电商平台配置表)】的数据库操作Service
+* @createDate 2024-06-11 14:40:36
+*/
+public interface SShopPlatformService extends IService {
+
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLasttimeService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLasttimeService.java
new file mode 100644
index 00000000..218fec8d
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLasttimeService.java
@@ -0,0 +1,13 @@
+package com.qihang.dou.service;
+
+import com.qihang.dou.domain.SShopPullLasttime;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_lasttime(店铺更新最后时间记录)】的数据库操作Service
+* @createDate 2024-06-11 14:40:36
+*/
+public interface SShopPullLasttimeService extends IService {
+
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLogsService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLogsService.java
new file mode 100644
index 00000000..aa1b801d
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLogsService.java
@@ -0,0 +1,13 @@
+package com.qihang.dou.service;
+
+import com.qihang.dou.domain.SShopPullLogs;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_logs(店铺更新日志表)】的数据库操作Service
+* @createDate 2024-06-11 14:40:36
+*/
+public interface SShopPullLogsService extends IService {
+
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopService.java
new file mode 100644
index 00000000..d774fb74
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopService.java
@@ -0,0 +1,14 @@
+package com.qihang.dou.service;
+
+import com.qihang.dou.domain.SShop;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【s_shop(电商平台店铺表)】的数据库操作Service
+* @createDate 2024-06-11 14:40:36
+*/
+public interface SShopService extends IService {
+ SShop selectShopById(Long shopId);
+ void updateSessionKey(Integer shopId, String ownerId, String sessionKey, String refreshToken, Long expiresIn);
+}
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouGoodsServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouGoodsServiceImpl.java
new file mode 100644
index 00000000..5cde9989
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouGoodsServiceImpl.java
@@ -0,0 +1,106 @@
+package com.qihang.dou.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.common.common.PageQuery;
+import com.qihang.common.common.PageResult;
+import com.qihang.common.common.ResultVoEnum;
+import com.qihang.dou.domain.OmsDouGoods;
+import com.qihang.dou.domain.OmsDouGoodsSku;
+import com.qihang.dou.mapper.OmsDouGoodsSkuMapper;
+import com.qihang.dou.service.OmsDouGoodsService;
+import com.qihang.dou.mapper.OmsDouGoodsMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+* @author TW
+* @description 针对表【oms_dou_goods(抖店商品表)】的数据库操作Service实现
+* @createDate 2024-06-11 14:49:40
+*/
+@AllArgsConstructor
+@Service
+public class OmsDouGoodsServiceImpl extends ServiceImpl
+ implements OmsDouGoodsService{
+ private final OmsDouGoodsMapper mapper;
+ private final OmsDouGoodsSkuMapper skuMapper;
+ @Override
+ public PageResult queryPageList(OmsDouGoods bo, PageQuery pageQuery) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .eq(bo.getShopId()!=null,OmsDouGoods::getShopId,bo.getShopId());
+
+ Page goodsPage = mapper.selectPage(pageQuery.build(), queryWrapper);
+ return PageResult.build(goodsPage);
+ }
+
+ @Override
+ public int saveAndUpdateGoods(Long shopId, OmsDouGoods goods) {
+ List goodsList = mapper.selectList(new LambdaQueryWrapper().eq(OmsDouGoods::getProductId, goods.getProductId()));
+ if(goodsList!=null && goodsList.size()>0){
+ // 存在,更新
+ goods.setShopId(shopId);
+ goods.setId(goodsList.get(0).getId());
+ goods.setModifyTime(new Date());
+ mapper.updateById(goods);
+
+ // 删除sku
+ skuMapper.delete(new LambdaQueryWrapper().eq(OmsDouGoodsSku::getProductId,goods.getProductId()));
+
+ // 重新插入sku
+ if(goods.getSkuList()!=null) {
+ for (var sku : goods.getSkuList()) {
+ sku.setShopId(shopId);
+ sku.setImg(goods.getImg());
+ sku.setName(goods.getName());
+ sku.setErpGoodsId(0L);
+ sku.setErpGoodsSkuId(0L);
+ // 根据OuterId查找ERP系统中的skuid
+// if(StringUtils.isNotEmpty(sku.getCode())) {
+// ErpGoodsSpecVo erpGoodsSpecVo = skuMapper.selectGoodsSpecBySpecNum(sku.getCode());
+// if(erpGoodsSpecVo!=null ){
+// sku.setErpGoodsId(erpGoodsSpecVo.getGoodsId());
+// sku.setErpGoodsSkuId(erpGoodsSpecVo.getId());
+//// sku.setErpSupplierId(erpGoodsSpecVo.getSupplierId());
+// }
+// }
+ skuMapper.insert(sku);
+ }
+ }
+ return ResultVoEnum.DataExist.getIndex();
+ }else {
+ // 不存在,新增
+ goods.setShopId(shopId);
+ goods.setPullTime(new Date());
+ mapper.insert(goods);
+ // 插入sku
+ if(goods.getSkuList()!=null) {
+ for (var sku : goods.getSkuList()) {
+ sku.setShopId(shopId);
+ sku.setImg(goods.getImg());
+ sku.setName(goods.getName());
+ sku.setErpGoodsId(0L);
+ sku.setErpGoodsSkuId(0L);
+ // 根据OuterId查找ERP系统中的skuid
+// if(StringUtils.isNotEmpty(sku.getCode())) {
+// ErpGoodsSpecVo erpGoodsSpecVo = skuMapper.selectGoodsSpecBySpecNum(sku.getCode());
+// if(erpGoodsSpecVo!=null ){
+// sku.setErpGoodsId(erpGoodsSpecVo.getGoodsId());
+// sku.setErpGoodsSkuId(erpGoodsSpecVo.getId());
+//// sku.setErpSupplierId(erpGoodsSpecVo.getSupplierId());
+// }
+// }
+ skuMapper.insert(sku);
+ }
+ }
+ return 0;
+ }
+ }
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouGoodsSkuServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouGoodsSkuServiceImpl.java
new file mode 100644
index 00000000..601235fe
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouGoodsSkuServiceImpl.java
@@ -0,0 +1,36 @@
+package com.qihang.dou.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.common.common.PageQuery;
+import com.qihang.common.common.PageResult;
+import com.qihang.dou.domain.OmsDouGoodsSku;
+import com.qihang.dou.service.OmsDouGoodsSkuService;
+import com.qihang.dou.mapper.OmsDouGoodsSkuMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @author TW
+* @description 针对表【oms_dou_goods_sku(抖店商品Sku表)】的数据库操作Service实现
+* @createDate 2024-06-11 14:49:40
+*/
+@AllArgsConstructor
+@Service
+public class OmsDouGoodsSkuServiceImpl extends ServiceImpl
+ implements OmsDouGoodsSkuService{
+ private final OmsDouGoodsSkuMapper mapper;
+ @Override
+ public PageResult queryPageList(OmsDouGoodsSku bo, PageQuery pageQuery) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .eq(bo.getShopId()!=null,OmsDouGoodsSku::getShopId,bo.getShopId());
+
+ Page goodsSkuPage = mapper.selectPage(pageQuery.build(), queryWrapper);
+ return PageResult.build(goodsSkuPage);
+ }
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPlatformServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPlatformServiceImpl.java
new file mode 100644
index 00000000..73647661
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPlatformServiceImpl.java
@@ -0,0 +1,22 @@
+package com.qihang.dou.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.dou.domain.SShopPlatform;
+import com.qihang.dou.service.SShopPlatformService;
+import com.qihang.dou.mapper.SShopPlatformMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author TW
+* @description 针对表【s_shop_platform(电商平台配置表)】的数据库操作Service实现
+* @createDate 2024-06-11 14:40:36
+*/
+@Service
+public class SShopPlatformServiceImpl extends ServiceImpl
+ implements SShopPlatformService{
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLasttimeServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLasttimeServiceImpl.java
new file mode 100644
index 00000000..015b4655
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLasttimeServiceImpl.java
@@ -0,0 +1,22 @@
+package com.qihang.dou.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.dou.domain.SShopPullLasttime;
+import com.qihang.dou.service.SShopPullLasttimeService;
+import com.qihang.dou.mapper.SShopPullLasttimeMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_lasttime(店铺更新最后时间记录)】的数据库操作Service实现
+* @createDate 2024-06-11 14:40:36
+*/
+@Service
+public class SShopPullLasttimeServiceImpl extends ServiceImpl
+ implements SShopPullLasttimeService{
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLogsServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLogsServiceImpl.java
new file mode 100644
index 00000000..cdcc1fd3
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLogsServiceImpl.java
@@ -0,0 +1,22 @@
+package com.qihang.dou.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.dou.domain.SShopPullLogs;
+import com.qihang.dou.service.SShopPullLogsService;
+import com.qihang.dou.mapper.SShopPullLogsMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_logs(店铺更新日志表)】的数据库操作Service实现
+* @createDate 2024-06-11 14:40:36
+*/
+@Service
+public class SShopPullLogsServiceImpl extends ServiceImpl
+ implements SShopPullLogsService{
+
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopServiceImpl.java
new file mode 100644
index 00000000..f57145cc
--- /dev/null
+++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopServiceImpl.java
@@ -0,0 +1,39 @@
+package com.qihang.dou.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.dou.domain.SShop;
+import com.qihang.dou.service.SShopService;
+import com.qihang.dou.mapper.SShopMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @author TW
+* @description 针对表【s_shop(电商平台店铺表)】的数据库操作Service实现
+* @createDate 2024-06-11 14:40:36
+*/
+@AllArgsConstructor
+@Service
+public class SShopServiceImpl extends ServiceImpl
+ implements SShopService{
+ private SShopMapper mapper;
+ @Override
+ public SShop selectShopById(Long shopId) {
+ return mapper.selectById(shopId);
+ }
+
+ @Override
+ public void updateSessionKey(Integer shopId, String ownerId, String sessionKey, String refreshToken, Long expiresIn) {
+ SShop shop = new SShop();
+ shop.setId(shopId);
+ shop.setAccessToken(sessionKey);
+ shop.setRefreshToken(refreshToken);
+ shop.setAccessExpiresIn(expiresIn);
+ shop.setAccessTokenBegin(System.currentTimeMillis() / 1000);
+ mapper.updateById(shop);
+ }
+}
+
+
+
+
diff --git a/open-api/dou-api/src/main/resources/mapper/OmsDouGoodsMapper.xml b/open-api/dou-api/src/main/resources/mapper/OmsDouGoodsMapper.xml
new file mode 100644
index 00000000..1b088acb
--- /dev/null
+++ b/open-api/dou-api/src/main/resources/mapper/OmsDouGoodsMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,shop_id,product_id,
+ product_type,name,img,
+ check_status,status,spec_id,
+ create_time,update_time,description,
+ category_detail,outer_product_id,is_package_product,
+ erp_goods_id,pull_time,modify_time
+
+
diff --git a/open-api/dou-api/src/main/resources/mapper/OmsDouGoodsSkuMapper.xml b/open-api/dou-api/src/main/resources/mapper/OmsDouGoodsSkuMapper.xml
new file mode 100644
index 00000000..400b6b5e
--- /dev/null
+++ b/open-api/dou-api/src/main/resources/mapper/OmsDouGoodsSkuMapper.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,product_id,spec_id,
+ code,sku_type,sku_status,
+ out_sku_id,spec_detail_id1,spec_detail_id2,
+ spec_detail_id3,spec_detail_name1,spec_detail_name2,
+ spec_detail_name3,price,create_time,
+ stock_num,prehold_stock_num,prom_stock_num,
+ step_stock_num,prehold_step_stock_num,prom_step_stock_num,
+ normal_stock_num,channel_stock_num,sell_properties,
+ erp_goods_id,erp_goods_sku_id,shop_id,
+ name,img
+
+
diff --git a/open-api/dou-api/src/main/resources/mapper/SShopMapper.xml b/open-api/dou-api/src/main/resources/mapper/SShopMapper.xml
new file mode 100644
index 00000000..68336d2a
--- /dev/null
+++ b/open-api/dou-api/src/main/resources/mapper/SShopMapper.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,name,nick_name,
+ ename,company,platform,
+ shop_url,order_num,is_delete,
+ remark,seller_shop_id,app_key,
+ app_sercet,access_token,access_expires_in,
+ access_token_begin,refresh_token,refresh_token_timeout,
+ create_time,update_time
+
+
diff --git a/open-api/dou-api/src/main/resources/mapper/SShopPlatformMapper.xml b/open-api/dou-api/src/main/resources/mapper/SShopPlatformMapper.xml
new file mode 100644
index 00000000..2e01a0a4
--- /dev/null
+++ b/open-api/dou-api/src/main/resources/mapper/SShopPlatformMapper.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,name,app_key,
+ app_secret,remark,server_url,
+ redirect_url,create_time,update_time
+
+
diff --git a/open-api/dou-api/src/main/resources/mapper/SShopPullLasttimeMapper.xml b/open-api/dou-api/src/main/resources/mapper/SShopPullLasttimeMapper.xml
new file mode 100644
index 00000000..612cdbf9
--- /dev/null
+++ b/open-api/dou-api/src/main/resources/mapper/SShopPullLasttimeMapper.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,shop_id,pull_type,
+ lasttime,create_time,update_time
+
+
diff --git a/open-api/dou-api/src/main/resources/mapper/SShopPullLogsMapper.xml b/open-api/dou-api/src/main/resources/mapper/SShopPullLogsMapper.xml
new file mode 100644
index 00000000..18a8bd33
--- /dev/null
+++ b/open-api/dou-api/src/main/resources/mapper/SShopPullLogsMapper.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,shop_id,shop_type,
+ pull_type,pull_way,pull_params,
+ pull_result,pull_time,duration
+
+
diff --git a/vue/src/views/shop/dou/goods/index.vue b/vue/src/views/shop/dou/goods/index.vue
index ccd6559e..cf0eb03b 100644
--- a/vue/src/views/shop/dou/goods/index.vue
+++ b/vue/src/views/shop/dou/goods/index.vue
@@ -86,12 +86,12 @@
-
-
- 已下架
- 销售中
-
-
+
+
+
+
+
+
-
-
+
+
@@ -134,7 +134,7 @@
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {listShop} from "@/api/shop/shop";
-import {pullGoodsList,listGoodsSku} from "@/api/dou/goods";
+import {pullGoodsList, listGoodsSku, getGoodsSku, linkErpGoodsSkuId} from "@/api/dou/goods";
import {MessageBox} from "element-ui";
import {isRelogin} from "@/utils/request";