From 5688523882eed5d1bd78a8092e9345939d975f2c Mon Sep 17 00:00:00 2001 From: Richie <280645618@qq.com> Date: Tue, 20 May 2025 16:10:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Edou=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=90=8C=E6=AD=A5=E5=88=B0=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=BA=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dou/controller/DouGoodsController.java | 59 ++++- .../module/open/dou/domain/DouGoods.java | 13 +- .../module/open/dou/domain/DouGoodsSku.java | 16 +- .../open/dou/service/DouGoodsService.java | 1 + .../open/dou/service/DouGoodsSkuService.java | 3 + .../dou/service/impl/DouGoodsServiceImpl.java | 215 +++++++++++++++++- .../service/impl/DouGoodsSkuServiceImpl.java | 50 ++++ .../dou/service/impl/DouOrderServiceImpl.java | 8 +- .../resources/mapper/dou/DouGoodsMapper.xml | 4 +- .../mapper/dou/DouGoodsSkuMapper.xml | 18 +- .../pdd/service/impl/PddGoodsServiceImpl.java | 2 +- .../tao/service/impl/TaoGoodsServiceImpl.java | 2 +- vue/src/api/dou/goods.js | 22 +- vue/src/views/dou/goods/goods_list.vue | 130 +++++++++-- vue/src/views/dou/goods/goods_sku.vue | 19 +- vue/src/views/pdd/goods/goods_list.vue | 2 +- 16 files changed, 496 insertions(+), 68 deletions(-) diff --git a/microservices/dou-api/src/main/java/cn/qihangerp/api/dou/controller/DouGoodsController.java b/microservices/dou-api/src/main/java/cn/qihangerp/api/dou/controller/DouGoodsController.java index 5e02ca22..b36bd57d 100644 --- a/microservices/dou-api/src/main/java/cn/qihangerp/api/dou/controller/DouGoodsController.java +++ b/microservices/dou-api/src/main/java/cn/qihangerp/api/dou/controller/DouGoodsController.java @@ -1,10 +1,7 @@ package cn.qihangerp.api.dou.controller; -import cn.qihangerp.common.AjaxResult; -import cn.qihangerp.common.PageQuery; -import cn.qihangerp.common.PageResult; -import cn.qihangerp.common.TableDataInfo; +import cn.qihangerp.common.*; import cn.qihangerp.domain.bo.LinkErpGoodsSkuBo; import cn.qihangerp.module.goods.domain.OGoodsSku; import cn.qihangerp.module.goods.service.OGoodsSkuService; @@ -19,6 +16,9 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; +import java.util.Map; + @RequestMapping("/dou/goods") @RestController @AllArgsConstructor @@ -48,6 +48,12 @@ public class DouGoodsController extends BaseController { { return AjaxResult.success(skuService.getById(id)); } + + /** + * 关联 + * @param bo + * @return + */ @PostMapping(value = "/sku/linkErp") public AjaxResult linkErp(@RequestBody LinkErpGoodsSkuBo bo) { @@ -57,13 +63,44 @@ public class DouGoodsController extends BaseController { if(StringUtils.isBlank(bo.getErpGoodsSkuId())){ return AjaxResult.error(500,"缺少参数oGoodsSkuId"); } - OGoodsSku oGoodsSku = oGoodsSkuService.getById(bo.getErpGoodsSkuId()); - if(oGoodsSku == null) return AjaxResult.error(1500,"未找到系统商品sku"); - DouGoodsSku sku = new DouGoodsSku(); - sku.setId(bo.getId()); - sku.setOGoodsSkuId(bo.getErpGoodsSkuId()); - skuService.updateById(sku); - return success(); + ResultVo resultVo = skuService.linkErpGoodsSku(bo); + if(resultVo.getCode()==0) + return success(); + else return AjaxResult.error(resultVo.getMsg()); + +// OGoodsSku oGoodsSku = oGoodsSkuService.getById(bo.getErpGoodsSkuId()); +// if(oGoodsSku == null) return AjaxResult.error(1500,"未找到系统商品sku"); +// DouGoodsSku sku = new DouGoodsSku(); +// sku.setId(bo.getId()); +// sku.setOGoodsSkuId(bo.getErpGoodsSkuId()); +// skuService.updateById(sku); +// return success(); + } + + /** + * 推送商品到OMS + * @param ids + * @return + */ + @PostMapping("/push_oms") + @ResponseBody + public AjaxResult pushOms(@RequestBody String[] ids) { + if (ids == null || ids.length == 0) return AjaxResult.error("缺少参数"); + int success = 0; + int isExist = 0; + int fail = 0; + for (String id : ids) { + ResultVo resultVo = goodsService.pushToOms(Long.parseLong(id)); + if(resultVo.getCode()==0) success++; + else if(resultVo.getCode()==ResultVoEnum.DataExist.getIndex()) isExist++; + else fail++; + } + Map map = new HashMap<>(); + map.put("success", success); + map.put("isExist", isExist); + map.put("fail", fail); + map.put("total", success + isExist+fail); + return success(map); } } diff --git a/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoods.java b/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoods.java index 6b14a415..c373e43d 100644 --- a/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoods.java +++ b/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoods.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; @@ -31,7 +32,7 @@ public class DouGoods implements Serializable { /** * 商品ID,抖店系统生成,店铺下唯一 */ - private Long productId; + private String productId; /** * 商品类型;0-普通;1-新客商品;3-虚拟;6-玉石闪购;7-云闪购 ;127-其他类型; @@ -39,7 +40,13 @@ public class DouGoods implements Serializable { private Long productType; private Long marketPrice; private Long discountPrice; - + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.##") + public double getFormattedPrice() { + if(marketPrice == null){ + return 0; + } + return marketPrice / 100; + } /** * 商品标题。 */ @@ -98,7 +105,7 @@ public class DouGoods implements Serializable { /** * erp商品id */ - private Long oGoodsId; + private Long erpGoodsId; /** * 拉取时间 diff --git a/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoodsSku.java b/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoodsSku.java index 7e229fdc..f9a5c5a5 100644 --- a/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoodsSku.java +++ b/module/dou/src/main/java/cn/qihangerp/module/open/dou/domain/DouGoodsSku.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * 抖店商品Sku表 @@ -141,12 +142,12 @@ public class DouGoodsSku implements Serializable { /** * 商品id(o_goods外键) */ - private String oGoodsId; + private String erpGoodsId; /** * 商品skuid(o_goods_sku外键) */ - private String oGoodsSkuId; + private String erpGoodsSkuId; /** * 店铺id @@ -163,5 +164,16 @@ public class DouGoodsSku implements Serializable { */ private String img; + + /** + * 拉取时间 + */ + private Date pullTime; + + /** + * 更新时间 + */ + private Date modifyTime; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsService.java b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsService.java index 81517aeb..77200e1e 100644 --- a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsService.java +++ b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsService.java @@ -16,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService; public interface DouGoodsService extends IService { PageResult queryPageList(DouGoodsBo bo, PageQuery pageQuery); ResultVo saveGoods(Long shopId, DouGoods goods); + ResultVo pushToOms(Long taoGoodsId); } diff --git a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsSkuService.java b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsSkuService.java index 9fd2b26e..f26e49bc 100644 --- a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsSkuService.java +++ b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/DouGoodsSkuService.java @@ -2,6 +2,8 @@ package cn.qihangerp.module.open.dou.service; import cn.qihangerp.common.PageQuery; import cn.qihangerp.common.PageResult; +import cn.qihangerp.common.ResultVo; +import cn.qihangerp.domain.bo.LinkErpGoodsSkuBo; import cn.qihangerp.module.open.dou.domain.DouGoodsSku; import cn.qihangerp.module.open.dou.domain.bo.DouGoodsBo; import cn.qihangerp.module.open.dou.domain.vo.DouGoodsSkuListVo; @@ -15,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface DouGoodsSkuService extends IService { PageResult queryPageList(DouGoodsBo bo, PageQuery pageQuery); + ResultVo linkErpGoodsSku(LinkErpGoodsSkuBo bo); } diff --git a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsServiceImpl.java b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsServiceImpl.java index db63f49e..4be54f25 100644 --- a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsServiceImpl.java +++ b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsServiceImpl.java @@ -1,11 +1,15 @@ package cn.qihangerp.module.open.dou.service.impl; - import cn.qihangerp.common.PageQuery; import cn.qihangerp.common.PageResult; import cn.qihangerp.common.ResultVo; +import cn.qihangerp.common.ResultVoEnum; import cn.qihangerp.common.utils.StringUtils; +import cn.qihangerp.module.goods.domain.OGoods; +import cn.qihangerp.module.goods.domain.OGoodsInventory; import cn.qihangerp.module.goods.domain.OGoodsSku; +import cn.qihangerp.module.goods.mapper.OGoodsInventoryMapper; +import cn.qihangerp.module.goods.mapper.OGoodsMapper; import cn.qihangerp.module.goods.mapper.OGoodsSkuMapper; import cn.qihangerp.module.open.dou.domain.DouGoods; import cn.qihangerp.module.open.dou.domain.DouGoodsSku; @@ -13,6 +17,8 @@ import cn.qihangerp.module.open.dou.domain.bo.DouGoodsBo; import cn.qihangerp.module.open.dou.mapper.DouGoodsMapper; import cn.qihangerp.module.open.dou.mapper.DouGoodsSkuMapper; import cn.qihangerp.module.open.dou.service.DouGoodsService; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -20,8 +26,10 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * @author TW @@ -35,6 +43,9 @@ public class DouGoodsServiceImpl extends ServiceImpl private final DouGoodsMapper mapper; private final DouGoodsSkuMapper skuMapper; private final OGoodsSkuMapper goodsSkuMapper; + private final OGoodsMapper goodsMapper; + private final OGoodsInventoryMapper inventoryMapper; + @Override public PageResult queryPageList(DouGoodsBo bo, PageQuery pageQuery) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() @@ -43,6 +54,11 @@ public class DouGoodsServiceImpl extends ServiceImpl ; Page goodsPage = mapper.selectPage(pageQuery.build(), queryWrapper); + if(goodsPage.getRecords()!=null && goodsPage.getRecords().size()>0){ + for(DouGoods goods : goodsPage.getRecords()){ + goods.setSkuList(skuMapper.selectList(new LambdaQueryWrapper().eq(DouGoodsSku::getProductId,goods.getProductId()))); + } + } return PageResult.build(goodsPage); } @@ -62,9 +78,11 @@ public class DouGoodsServiceImpl extends ServiceImpl mapper.updateById(goods); // 删除sku - skuMapper.delete(new LambdaQueryWrapper().eq(DouGoodsSku::getProductId,goods.getProductId())); +// skuMapper.delete(new LambdaQueryWrapper().eq(DouGoodsSku::getProductId,goods.getProductId())); } + Long erpGoodsId=0L; + String erpGoodsNum=""; // 添加sku if(goods.getSkuList()!=null && !goods.getSkuList().isEmpty()){ for (var item : goods.getSkuList()){ @@ -75,13 +93,200 @@ public class DouGoodsServiceImpl extends ServiceImpl if(StringUtils.isNotEmpty(item.getCode())) { List oGoodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper().eq(OGoodsSku::getSkuCode, item.getCode())); if(oGoodsSkus!=null && !oGoodsSkus.isEmpty()){ - item.setOGoodsId(oGoodsSkus.get(0).getGoodsId().toString()); - item.setOGoodsSkuId(oGoodsSkus.get(0).getId().toString()); + erpGoodsId = oGoodsSkus.get(0).getGoodsId(); + erpGoodsNum = oGoodsSkus.get(0).getGoodsNum(); + item.setErpGoodsId(oGoodsSkus.get(0).getGoodsId().toString()); + item.setErpGoodsSkuId(oGoodsSkus.get(0).getId().toString()); } } - skuMapper.insert(item); + List pddGoodsSkus = skuMapper.selectList(new LambdaQueryWrapper().eq(DouGoodsSku::getSpecId, item.getSpecId())); + if(pddGoodsSkus!=null && !pddGoodsSkus.isEmpty()){ + item.setModifyTime(new Date()); + skuMapper.updateById(item); + }else { + item.setPullTime(new Date()); + skuMapper.insert(item); + } } } + + if(erpGoodsId>0){ + DouGoods updateGoods = new DouGoods(); + updateGoods.setId(goods.getId()); + updateGoods.setErpGoodsId(erpGoodsId); + updateGoods.setOuterProductId(erpGoodsNum); + mapper.updateById(goods); + } + + return ResultVo.success(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public ResultVo pushToOms(Long taoGoodsId) { + DouGoods shopGoods = mapper.selectById(taoGoodsId); + if(shopGoods==null) return ResultVo.error("店铺商品数据不存在"); + + List shopGoodsSkus = skuMapper.selectList(new LambdaQueryWrapper().eq(DouGoodsSku::getProductId, shopGoods.getProductId())); + if(shopGoodsSkus==null || shopGoodsSkus.isEmpty()) return ResultVo.error("店铺商品Sku数据不存在"); + + String goodsNum =""; + if(org.springframework.util.StringUtils.hasText(shopGoods.getOuterProductId())){ + goodsNum = shopGoods.getOuterProductId(); + // 用商家编码查询 + List erpGoodsList = goodsMapper.selectList(new LambdaQueryWrapper() + .eq(OGoods::getGoodsNum, goodsNum)); + if(erpGoodsList!=null && !erpGoodsList.isEmpty()){ + // 存在=======关联 + //更新shopGoods + DouGoods shopGoodsUpdate = new DouGoods(); + shopGoodsUpdate.setId(shopGoods.getId()); + shopGoodsUpdate.setErpGoodsId(erpGoodsList.get(0).getId()); + mapper.updateById(shopGoodsUpdate); + + List oGoodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper() + .eq(OGoodsSku::getGoodsId, erpGoodsList.get(0).getId()) + ); + //更新skus + for (var sku:shopGoodsSkus){ + if(org.springframework.util.StringUtils.hasText(sku.getCode())){ + List oGoodsSkuList = oGoodsSkus.stream().filter(x -> x.getSkuCode().equals(sku.getCode())).collect(Collectors.toList()); + if(oGoodsSkuList!=null && !oGoodsSkuList.isEmpty()){ + //更新ShopGoodsSku + DouGoodsSku shopGoodsSkuUpdate = new DouGoodsSku(); + shopGoodsSkuUpdate.setId(sku.getId()); + shopGoodsSkuUpdate.setErpGoodsId(oGoodsSkuList.get(0).getGoodsId().toString()); + shopGoodsSkuUpdate.setErpGoodsSkuId(oGoodsSkuList.get(0).getId().toString()); + + skuMapper.updateById(shopGoodsSkuUpdate); + } + } + } + + return ResultVo.success("商品已存在,更新关联"); + } + + }else { + goodsNum = shopGoods.getProductId().toString(); + // 用商品ID查询 + List erpGoodsList = goodsMapper.selectList(new LambdaQueryWrapper() + .eq(OGoods::getGoodsNum, goodsNum)); + if(erpGoodsList!=null && !erpGoodsList.isEmpty()){ + return ResultVo.error(ResultVoEnum.DataExist.getIndex(),"商品已存在"); + } + } + + + // 添加商品 + OGoods erpGoods = new OGoods(); + erpGoods.setName(shopGoods.getName()); + erpGoods.setImage(shopGoods.getImg()); + erpGoods.setGoodsNum(goodsNum); + erpGoods.setCategoryId(0L); + erpGoods.setRemark("DOU店铺商品同步"); + erpGoods.setStatus(1); + erpGoods.setDisable(1); + if (shopGoods.getMarketPrice() != null) { + erpGoods.setRetailPrice(BigDecimal.valueOf(shopGoods.getMarketPrice()/100)); + } + erpGoods.setCreateBy("DOU店铺商品同步"); + erpGoods.setCreateTime(new Date()); + goodsMapper.insert(erpGoods); + + //更新shopGoods + DouGoods shopGoodsUpdate = new DouGoods(); + shopGoodsUpdate.setId(shopGoods.getId()); + shopGoodsUpdate.setErpGoodsId(erpGoods.getId()); + mapper.updateById(shopGoodsUpdate); + + // 添加商品SKU + for (var sku:shopGoodsSkus){ + OGoodsSku erpGoodsSku = new OGoodsSku(); + erpGoodsSku.setGoodsId(erpGoods.getId()); + erpGoodsSku.setGoodsName(erpGoods.getName()); + erpGoodsSku.setGoodsNum(erpGoods.getGoodsNum()); + //122216927:77835123:家具结构:框架结构;1627207:25326567650:颜色分类:奶油白【进口荔枝纹头层牛皮+碳素钢木排骨架】;21433:50753444:尺寸:1500mm*2000mm + // 组合规格 + String colorLabel=""; + String colorValue=""; + String sizeLabel=""; + String sizeValue=""; + String styleLabel=""; + String styleValue=""; + //组合属性 + if(org.springframework.util.StringUtils.hasText(sku.getSpecDetailName1())) { + colorValue=sku.getSpecDetailName1(); + colorLabel="颜色分类"; + }else{ + colorValue="默认"; + colorLabel="颜色分类"; + } + if(org.springframework.util.StringUtils.hasText(sku.getSpecDetailName2())) { + sizeValue=sku.getSpecDetailName2(); + sizeLabel="尺寸"; + } + if(org.springframework.util.StringUtils.hasText(sku.getSpecDetailName3())) { + styleValue=sku.getSpecDetailName3(); + styleLabel="款式"; + } + + erpGoodsSku.setColorId(0L); + erpGoodsSku.setColorLabel(colorLabel); + erpGoodsSku.setColorValue(colorValue); + erpGoodsSku.setSizeId(0L); + erpGoodsSku.setSizeLabel(sizeLabel); + erpGoodsSku.setSizeValue(sizeValue); + erpGoodsSku.setStyleId(0L); + erpGoodsSku.setStyleLabel(styleLabel); + erpGoodsSku.setStyleValue(styleValue); + String skuName=""; + if(org.springframework.util.StringUtils.hasText(colorValue)){ + skuName += colorValue+" "; + } + if(org.springframework.util.StringUtils.hasText(sizeValue)){ + skuName += sizeValue+" "; + } + if(org.springframework.util.StringUtils.hasText(styleValue)){ + skuName += styleValue+" "; + } + if(!org.springframework.util.StringUtils.hasText(skuName)){ + skuName = "默认"; + } + erpGoodsSku.setSkuName(skuName); + erpGoodsSku.setSkuCode(sku.getCode()); + erpGoodsSku.setColorImage(erpGoods.getImage()); + + if(sku.getPrice()!=null){ + erpGoodsSku.setRetailPrice(BigDecimal.valueOf(sku.getPrice()/100)); + } + erpGoodsSku.setStatus(1); + goodsSkuMapper.insert(erpGoodsSku); + + // 初始化商品库存 + OGoodsInventory inventory = new OGoodsInventory(); + + inventory.setGoodsId(erpGoods.getId()); + inventory.setGoodsNum(erpGoods.getGoodsNum()); + inventory.setGoodsName(erpGoods.getName()); + inventory.setGoodsImg(erpGoods.getImage()); + inventory.setSkuId(erpGoodsSku.getId()); + inventory.setSkuCode(erpGoodsSku.getSkuCode()); + inventory.setSkuName(erpGoodsSku.getSkuName()); + inventory.setQuantity(0L); + inventory.setIsDelete(0); + inventory.setCreateTime(new Date()); + inventory.setCreateBy("同步店铺商品初始化商品 sku 库存"); + inventoryMapper.insert(inventory); + + //更新ShopGoodsSku + DouGoodsSku shopGoodsSkuUpdate = new DouGoodsSku(); + shopGoodsSkuUpdate.setId(sku.getId()); + shopGoodsSkuUpdate.setErpGoodsId(erpGoods.getId().toString()); + shopGoodsSkuUpdate.setErpGoodsSkuId(erpGoodsSku.getId().toString()); + skuMapper.updateById(shopGoodsSkuUpdate); + + } + return ResultVo.success(); } } diff --git a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsSkuServiceImpl.java b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsSkuServiceImpl.java index a0bedeb3..2e3e0b33 100644 --- a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsSkuServiceImpl.java +++ b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouGoodsSkuServiceImpl.java @@ -2,17 +2,29 @@ package cn.qihangerp.module.open.dou.service.impl; import cn.qihangerp.common.PageQuery; import cn.qihangerp.common.PageResult; +import cn.qihangerp.common.ResultVo; +import cn.qihangerp.domain.bo.LinkErpGoodsSkuBo; +import cn.qihangerp.module.goods.domain.OGoods; +import cn.qihangerp.module.goods.domain.OGoodsSku; +import cn.qihangerp.module.goods.service.OGoodsService; +import cn.qihangerp.module.goods.service.OGoodsSkuService; +import cn.qihangerp.module.open.dou.domain.DouGoods; import cn.qihangerp.module.open.dou.domain.DouGoodsSku; import cn.qihangerp.module.open.dou.domain.bo.DouGoodsBo; import cn.qihangerp.module.open.dou.domain.vo.DouGoodsSkuListVo; +import cn.qihangerp.module.open.dou.mapper.DouGoodsMapper; import cn.qihangerp.module.open.dou.mapper.DouGoodsSkuMapper; import cn.qihangerp.module.open.dou.service.DouGoodsSkuService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import java.util.List; + /** * @author TW * @description 针对表【dou_goods_sku(抖店商品Sku表)】的数据库操作Service实现 @@ -23,6 +35,10 @@ import org.springframework.util.StringUtils; public class DouGoodsSkuServiceImpl extends ServiceImpl implements DouGoodsSkuService { private final DouGoodsSkuMapper mapper; + private final DouGoodsMapper douGoodsMapper; + private final OGoodsSkuService oGoodsSkuService; + private final OGoodsService oGoodsService; + @Override public PageResult queryPageList(DouGoodsBo bo, PageQuery pageQuery) { if(StringUtils.hasText(bo.getCode())){ @@ -31,6 +47,40 @@ public class DouGoodsSkuServiceImpl extends ServiceImpl result = mapper.selectSkuPageList(pageQuery.build(), bo.getShopId(),bo.getProductId(),bo.getSkuId(),bo.getCode(),bo.getHasLink()); return PageResult.build(result); } + + @Transactional(rollbackFor = Exception.class) + @Override + public ResultVo linkErpGoodsSku(LinkErpGoodsSkuBo bo) { + OGoodsSku oGoodsSku = oGoodsSkuService.getById(bo.getErpGoodsSkuId()); + if(oGoodsSku == null) return ResultVo.error("未找到系统商品sku"); + + OGoods oGoods=oGoodsService.getById(oGoodsSku.getGoodsId()); + if(oGoods == null){ + return ResultVo.error("未找到系统商品"); + } + + DouGoodsSku taoGoodsSku = mapper.selectById(bo.getId()); + if(taoGoodsSku == null) { + return ResultVo.error("DOU商品sku数据不存在"); + } + List jdGoods = douGoodsMapper.selectList(new LambdaQueryWrapper().eq(DouGoods::getProductId, taoGoodsSku.getProductId())); + if(jdGoods==null||jdGoods.size()==0){ + return ResultVo.error("DOU商品数据不存在"); + } + + DouGoodsSku sku = new DouGoodsSku(); + sku.setId(bo.getId()); + sku.setErpGoodsId(oGoodsSku.getGoodsId().toString()); + sku.setErpGoodsSkuId(oGoodsSku.getId().toString()); + mapper.updateById(sku); + + DouGoods goodsUp=new DouGoods(); + goodsUp.setId(jdGoods.get(0).getId()); + goodsUp.setErpGoodsId(oGoodsSku.getGoodsId()); + + douGoodsMapper.updateById(goodsUp); + return ResultVo.success(); + } } diff --git a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouOrderServiceImpl.java b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouOrderServiceImpl.java index c7655d61..7b3b758c 100644 --- a/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouOrderServiceImpl.java +++ b/module/dou/src/main/java/cn/qihangerp/module/open/dou/service/impl/DouOrderServiceImpl.java @@ -145,8 +145,8 @@ public class DouOrderServiceImpl extends ServiceImpl // 新增 DouGoodsSku goodsSku = goodsSkuMapper.selectById(item.getSkuId()); if (goodsSku != null) { - item.setOGoodsId(goodsSku.getOGoodsId()); - item.setOGoodsSkuId(goodsSku.getOGoodsSkuId()); + item.setOGoodsId(goodsSku.getErpGoodsId()); + item.setOGoodsSkuId(goodsSku.getErpGoodsSkuId()); } itemMapper.insert(item); } @@ -161,8 +161,8 @@ public class DouOrderServiceImpl extends ServiceImpl for (var item : order.getItems()) { DouGoodsSku goodsSku = goodsSkuMapper.selectById(item.getSkuId()); if (goodsSku != null) { - item.setOGoodsId(goodsSku.getOGoodsId()); - item.setOGoodsSkuId(goodsSku.getOGoodsSkuId()); + item.setOGoodsId(goodsSku.getErpGoodsId()); + item.setOGoodsSkuId(goodsSku.getErpGoodsSkuId()); } itemMapper.insert(item); } diff --git a/module/dou/src/main/resources/mapper/dou/DouGoodsMapper.xml b/module/dou/src/main/resources/mapper/dou/DouGoodsMapper.xml index f4cc3fca..3a566d65 100644 --- a/module/dou/src/main/resources/mapper/dou/DouGoodsMapper.xml +++ b/module/dou/src/main/resources/mapper/dou/DouGoodsMapper.xml @@ -20,7 +20,7 @@ - + @@ -31,6 +31,6 @@ check_status,status,spec_id, create_time,update_time,description, category_detail,outer_product_id,is_package_product, - o_goods_id,pull_time,modify_time + erp_goods_id,pull_time,modify_time diff --git a/module/dou/src/main/resources/mapper/dou/DouGoodsSkuMapper.xml b/module/dou/src/main/resources/mapper/dou/DouGoodsSkuMapper.xml index ba706d59..d1256f3d 100644 --- a/module/dou/src/main/resources/mapper/dou/DouGoodsSkuMapper.xml +++ b/module/dou/src/main/resources/mapper/dou/DouGoodsSkuMapper.xml @@ -29,11 +29,13 @@ - - - + + + + + @@ -45,14 +47,14 @@ 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, - o_goods_id,o_goods_sku_id,shop_id, - name,img + erp_goods_id,erp_goods_sku_id,shop_id, + name,img,pull_time,modify_time diff --git a/module/pdd/src/main/java/cn/qihangerp/module/open/pdd/service/impl/PddGoodsServiceImpl.java b/module/pdd/src/main/java/cn/qihangerp/module/open/pdd/service/impl/PddGoodsServiceImpl.java index f6bbcffd..1279f67e 100644 --- a/module/pdd/src/main/java/cn/qihangerp/module/open/pdd/service/impl/PddGoodsServiceImpl.java +++ b/module/pdd/src/main/java/cn/qihangerp/module/open/pdd/service/impl/PddGoodsServiceImpl.java @@ -101,7 +101,7 @@ public class PddGoodsServiceImpl extends ServiceImpl } item.setCreateTime(new Date()); - List pddGoodsSkus = skuMapper.selectList(new LambdaQueryWrapper().eq(PddGoodsSku::getGoodsId, goods.getGoodsId())); + List pddGoodsSkus = skuMapper.selectList(new LambdaQueryWrapper().eq(PddGoodsSku::getSkuId, item.getSkuId())); if(pddGoodsSkus!=null && !pddGoodsSkus.isEmpty()){ // 存在更新 item.setUpdateTime(new Date()); diff --git a/module/tao/src/main/java/cn/qihangerp/module/open/tao/service/impl/TaoGoodsServiceImpl.java b/module/tao/src/main/java/cn/qihangerp/module/open/tao/service/impl/TaoGoodsServiceImpl.java index efee8c64..75f3e05a 100644 --- a/module/tao/src/main/java/cn/qihangerp/module/open/tao/service/impl/TaoGoodsServiceImpl.java +++ b/module/tao/src/main/java/cn/qihangerp/module/open/tao/service/impl/TaoGoodsServiceImpl.java @@ -100,7 +100,7 @@ public class TaoGoodsServiceImpl extends ServiceImpl sku.setErpGoodsSkuId(oGoodsSkus.get(0).getId()); } } - List taoGoodsSkus = skuMapper.selectList(new LambdaQueryWrapper().eq(TaoGoodsSku::getTaoGoodsId, goods.getId())); + List taoGoodsSkus = skuMapper.selectList(new LambdaQueryWrapper().eq(TaoGoodsSku::getSkuId, sku.getSkuId())); if(taoGoodsSkus!=null && !taoGoodsSkus.isEmpty()){ // 更新 sku.setUpdateTime(new Date()); diff --git a/vue/src/api/dou/goods.js b/vue/src/api/dou/goods.js index 218aa1ba..89f02686 100644 --- a/vue/src/api/dou/goods.js +++ b/vue/src/api/dou/goods.js @@ -1,6 +1,17 @@ import request from '@/utils/request' + // 查询列表 +export function listGoods(query) { + return request({ + url: '/api/open-api/dou/goods/list', + method: 'get', + params: query + }) +} + + +// 查询sku列表 export function listGoodsSku(query) { return request({ url: '/api/open-api/dou/goods/skuList', @@ -26,7 +37,7 @@ export function linkErpGoodsSkuId(data) { }) } -// 接口拉取淘宝商品 +// 接口拉取商品 export function pullGoodsList(data) { return request({ url: '/api/open-api/dou/goods/pull_goods', @@ -34,3 +45,12 @@ export function pullGoodsList(data) { data: data }) } + +//推送商品到商品库 +export function pushToOms(data) { + return request({ + url: '/api/open-api/dou/goods/push_oms', + method: 'post', + data: data + }) +} diff --git a/vue/src/views/dou/goods/goods_list.vue b/vue/src/views/dou/goods/goods_list.vue index dafead98..8aa9e15e 100644 --- a/vue/src/views/dou/goods/goods_list.vue +++ b/vue/src/views/dou/goods/goods_list.vue @@ -52,40 +52,43 @@ @click="handlePull" >API拉取商品数据 + + 推送到商品库 + - + - - - + - - + + + + + - - - - - - - - - - + @@ -113,6 +116,53 @@ @pagination="getList" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -134,7 +184,7 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css' import {listShop} from "@/api/shop/shop"; -import {pullGoodsList, listGoodsSku, getGoodsSku, linkErpGoodsSkuId} from "@/api/dou/goods"; +import {pullGoodsList, listGoods, getGoodsSku, linkErpGoodsSkuId,pushToOms} from "@/api/dou/goods"; import {MessageBox} from "element-ui"; import {isRelogin} from "@/utils/request"; @@ -153,6 +203,8 @@ export default { // 显示搜索条件 showSearch: true, pullLoading: false, + skuList:[], + skuOpen:false, // 总条数 total: 0, // 商品管理表格数据 @@ -196,13 +248,22 @@ export default { this.loading = false; }, methods: { + // 多选框选中数据 + handleSelectionChange(selection) { + this.ids = selection.map(item => item.id) + this.single = selection.length!==1 + this.multiple = !selection.length + }, amountFormatter(row, column, cellValue, index) { + if(!cellValue){ + return ""; + } return '¥' + cellValue.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,'); }, /** 查询商品管理列表 */ getList() { this.loading = true; - listGoodsSku(this.queryParams).then(response => { + listGoods(this.queryParams).then(response => { this.goodsList = response.rows; this.total = response.total; this.loading = false; @@ -282,7 +343,28 @@ export default { } // this.$modal.msgSuccess("请先配置API"); - } + }, + /** 查看SKU List*/ + handleViewSkuList(row){ + this.skuList = row.skuList + this.skuOpen = true; + + }, + handlePushOms(){ + this.$confirm('确认同步所有商品到商品库吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.loading = true + pushToOms( this.ids ).then(response => { + this.$message.success('商品同步成功') + this.getList() + }).finally(() => { + this.loading = false + }) + }) + }, } }; diff --git a/vue/src/views/dou/goods/goods_sku.vue b/vue/src/views/dou/goods/goods_sku.vue index ed9fc848..9698241d 100644 --- a/vue/src/views/dou/goods/goods_sku.vue +++ b/vue/src/views/dou/goods/goods_sku.vue @@ -44,14 +44,23 @@ API拉取商品数据 + @click="handleLinkOms" + >一键关联商品库SKU + + + + + + + + + + diff --git a/vue/src/views/pdd/goods/goods_list.vue b/vue/src/views/pdd/goods/goods_list.vue index 03174384..996c3824 100644 --- a/vue/src/views/pdd/goods/goods_list.vue +++ b/vue/src/views/pdd/goods/goods_list.vue @@ -68,7 +68,7 @@ - +