新增jd商品同步到商品库功能
This commit is contained in:
parent
a35f7933bc
commit
f65e05f725
|
|
@ -16,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("/jd/goods")
|
||||
@RestController
|
||||
@AllArgsConstructor
|
||||
|
|
@ -60,4 +63,30 @@ public class JdGoodsController extends BaseController {
|
|||
else return AjaxResult.error(resultVo.getMsg());
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送商品到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<String, Object> map = new HashMap<>();
|
||||
map.put("success", success);
|
||||
map.put("isExist", isExist);
|
||||
map.put("fail", fail);
|
||||
map.put("total", success + isExist+fail);
|
||||
return success(map);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,4 +19,5 @@ public interface JdGoodsService extends IService<JdGoods> {
|
|||
PageResult<JdGoods> queryPageList(JdGoodsBo bo, PageQuery pageQuery);
|
||||
ResultVo<Integer> saveGoods(Long shopId, JdGoods goods);
|
||||
ResultVo<Integer> saveGoodsSku(Long shopId, JdGoodsSku goodsSku);
|
||||
ResultVo pushToOms(Long taoGoodsId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,15 @@
|
|||
package cn.qihangerp.module.open.jd.service.impl;
|
||||
|
||||
|
||||
import cn.qihangerp.common.ResultVoEnum;
|
||||
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 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;
|
||||
|
|
@ -22,7 +29,12 @@ import lombok.AllArgsConstructor;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author qilip
|
||||
|
|
@ -36,6 +48,8 @@ public class JdGoodsServiceImpl extends ServiceImpl<JdGoodsMapper, JdGoods>
|
|||
private final JdGoodsMapper mapper;
|
||||
private final JdGoodsSkuMapper skuMapper;
|
||||
private final OGoodsSkuMapper goodsSkuMapper;
|
||||
private final OGoodsMapper goodsMapper;
|
||||
private final OGoodsInventoryMapper inventoryMapper;
|
||||
|
||||
@Override
|
||||
public PageResult<JdGoods> queryPageList(JdGoodsBo bo, PageQuery pageQuery) {
|
||||
|
|
@ -118,6 +132,195 @@ public class JdGoodsServiceImpl extends ServiceImpl<JdGoodsMapper, JdGoods>
|
|||
}
|
||||
return ResultVo.success();
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public ResultVo pushToOms(Long taoGoodsId) {
|
||||
JdGoods shopGoods = mapper.selectById(taoGoodsId);
|
||||
if(shopGoods==null) return ResultVo.error("店铺商品数据不存在");
|
||||
|
||||
List<JdGoodsSku> shopGoodsSkus = skuMapper.selectList(new LambdaQueryWrapper<JdGoodsSku>().eq(JdGoodsSku::getWareId, shopGoods.getWareId()));
|
||||
if(shopGoodsSkus==null || shopGoodsSkus.isEmpty()) return ResultVo.error("店铺商品Sku数据不存在");
|
||||
|
||||
String goodsNum ="";
|
||||
if(org.springframework.util.StringUtils.hasText(shopGoods.getItemNum())){
|
||||
goodsNum = shopGoods.getItemNum();
|
||||
// 用商家编码查询
|
||||
List<OGoods> erpGoodsList = goodsMapper.selectList(new LambdaQueryWrapper<OGoods>()
|
||||
.eq(OGoods::getGoodsNum, goodsNum));
|
||||
if(erpGoodsList!=null && !erpGoodsList.isEmpty()){
|
||||
// 存在=======关联
|
||||
//更新shopGoods
|
||||
JdGoods shopGoodsUpdate = new JdGoods();
|
||||
shopGoodsUpdate.setId(shopGoods.getId());
|
||||
shopGoodsUpdate.setLogo(erpGoodsList.get(0).getImage());
|
||||
shopGoodsUpdate.setErpGoodsId(erpGoodsList.get(0).getId());
|
||||
mapper.updateById(shopGoodsUpdate);
|
||||
|
||||
List<OGoodsSku> oGoodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper<OGoodsSku>()
|
||||
.eq(OGoodsSku::getGoodsId, erpGoodsList.get(0).getId())
|
||||
);
|
||||
//更新skus
|
||||
for (var sku:shopGoodsSkus){
|
||||
if(org.springframework.util.StringUtils.hasText(sku.getOuterId())){
|
||||
List<OGoodsSku> oGoodsSkuList = oGoodsSkus.stream().filter(x -> x.getSkuCode().equals(sku.getOuterId())).collect(Collectors.toList());
|
||||
if(oGoodsSkuList!=null && !oGoodsSkuList.isEmpty()){
|
||||
//更新ShopGoodsSku
|
||||
JdGoodsSku shopGoodsSkuUpdate = new JdGoodsSku();
|
||||
shopGoodsSkuUpdate.setId(sku.getId());
|
||||
shopGoodsSkuUpdate.setErpGoodsId(oGoodsSkuList.get(0).getGoodsId());
|
||||
shopGoodsSkuUpdate.setErpGoodsSkuId(oGoodsSkuList.get(0).getId());
|
||||
shopGoodsSkuUpdate.setLogo(oGoodsSkuList.get(0).getColorImage());
|
||||
skuMapper.updateById(shopGoodsSkuUpdate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ResultVo.success("商品已存在,更新关联");
|
||||
}
|
||||
|
||||
}else {
|
||||
goodsNum = shopGoods.getWareId().toString();
|
||||
// 用商品ID查询
|
||||
List<OGoods> erpGoodsList = goodsMapper.selectList(new LambdaQueryWrapper<OGoods>()
|
||||
.eq(OGoods::getGoodsNum, goodsNum));
|
||||
if(erpGoodsList!=null && !erpGoodsList.isEmpty()){
|
||||
return ResultVo.error(ResultVoEnum.DataExist.getIndex(),"商品已存在");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 添加商品
|
||||
OGoods erpGoods = new OGoods();
|
||||
erpGoods.setName(shopGoods.getTitle());
|
||||
erpGoods.setImage(shopGoods.getLogo());
|
||||
erpGoods.setGoodsNum(goodsNum);
|
||||
erpGoods.setCategoryId(0L);
|
||||
erpGoods.setRemark("JD店铺商品同步");
|
||||
erpGoods.setStatus(1);
|
||||
erpGoods.setDisable(1);
|
||||
if (shopGoods.getJdPrice() != null) {
|
||||
erpGoods.setRetailPrice(shopGoods.getJdPrice());
|
||||
}
|
||||
erpGoods.setCreateBy("JD店铺商品同步");
|
||||
erpGoods.setCreateTime(new Date());
|
||||
goodsMapper.insert(erpGoods);
|
||||
|
||||
//更新shopGoods
|
||||
JdGoods shopGoodsUpdate = new JdGoods();
|
||||
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.getSaleAttrs())) {
|
||||
// 解析 JSON 字符串
|
||||
JSONArray jsonArray = JSONArray.parseArray(sku.getSaleAttrs());
|
||||
// 提取 attrValueAlias
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
JSONObject item = jsonArray.getJSONObject(i);
|
||||
JSONArray attrValueAlias = item.getJSONArray("attrValueAlias");
|
||||
String val="";
|
||||
try {
|
||||
JSONArray jarr =JSONArray.parseArray(attrValueAlias.getString(0));
|
||||
for (int j = 0; j < jarr.size(); j++) {
|
||||
val += jarr.getJSONObject(j).getString("value");
|
||||
if(jarr.getJSONObject(j).containsKey("unit")){
|
||||
val+= jarr.getJSONObject(j).getString("unit");
|
||||
}
|
||||
}
|
||||
}catch (Exception e){
|
||||
val = attrValueAlias.getString(0);
|
||||
}
|
||||
if (item.getInteger("index") == 1) {
|
||||
colorLabel = "颜色分类";
|
||||
colorValue = val;
|
||||
} else if (item.getInteger("index") == 2) {
|
||||
sizeLabel = "尺寸";
|
||||
sizeValue =val;
|
||||
}else if (item.getInteger("index") == 3) {
|
||||
styleLabel = "款式";
|
||||
styleValue = val;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
colorValue="默认";
|
||||
colorLabel="颜色分类";
|
||||
}
|
||||
|
||||
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.getOuterId());
|
||||
erpGoodsSku.setColorImage(erpGoods.getImage());
|
||||
|
||||
if(sku.getJdPrice()!=null){
|
||||
erpGoodsSku.setRetailPrice(sku.getJdPrice());
|
||||
}
|
||||
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
|
||||
JdGoodsSku shopGoodsSkuUpdate = new JdGoodsSku();
|
||||
shopGoodsSkuUpdate.setId(sku.getId());
|
||||
shopGoodsSkuUpdate.setErpGoodsId(erpGoods.getId());
|
||||
shopGoodsSkuUpdate.setErpGoodsSkuId(erpGoodsSku.getId());
|
||||
skuMapper.updateById(shopGoodsSkuUpdate);
|
||||
|
||||
}
|
||||
|
||||
return ResultVo.success();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -134,16 +134,44 @@ public class TaoGoodsServiceImpl extends ServiceImpl<TaoGoodsMapper, TaoGoods>
|
|||
String goodsNum ="";
|
||||
if(org.springframework.util.StringUtils.hasText(shopGoods.getOuterId())){
|
||||
goodsNum = shopGoods.getOuterId();
|
||||
// 用商家编码查询
|
||||
List<OGoods> erpGoodsList = goodsMapper.selectList(new LambdaQueryWrapper<OGoods>()
|
||||
.eq(OGoods::getGoodsNum, goodsNum));
|
||||
if(erpGoodsList!=null && !erpGoodsList.isEmpty()){
|
||||
// 存在=======关联
|
||||
//更新shopGoods
|
||||
TaoGoods shopGoodsUpdate = new TaoGoods();
|
||||
shopGoodsUpdate.setId(shopGoods.getId());
|
||||
shopGoodsUpdate.setErpGoodsId(erpGoodsList.get(0).getId());
|
||||
mapper.updateById(shopGoodsUpdate);
|
||||
|
||||
|
||||
List<OGoodsSku> oGoodsSkus = goodsSkuMapper.selectList(new LambdaQueryWrapper<OGoodsSku>()
|
||||
.eq(OGoodsSku::getGoodsId, erpGoodsList.get(0).getId())
|
||||
);
|
||||
//更新skus
|
||||
for (var sku:shopGoodsSkus){
|
||||
//更新ShopGoodsSku
|
||||
TaoGoodsSku shopGoodsSkuUpdate = new TaoGoodsSku();
|
||||
shopGoodsSkuUpdate.setId(sku.getId());
|
||||
shopGoodsSkuUpdate.setErpGoodsId(oGoodsSkus.get(0).getGoodsId());
|
||||
shopGoodsSkuUpdate.setErpGoodsSkuId(oGoodsSkus.get(0).getId());
|
||||
skuMapper.updateById(shopGoodsSkuUpdate);
|
||||
}
|
||||
return ResultVo.success("商家编码已存在!更新成功");
|
||||
}
|
||||
|
||||
}else {
|
||||
goodsNum = shopGoods.getNumIid().toString();
|
||||
// 用商品ID查询
|
||||
List<OGoods> erpGoodsList = goodsMapper.selectList(new LambdaQueryWrapper<OGoods>()
|
||||
.eq(OGoods::getGoodsNum, goodsNum));
|
||||
if(erpGoodsList!=null && !erpGoodsList.isEmpty()){
|
||||
return ResultVo.error(ResultVoEnum.DataExist.getIndex(),"商家编码已存在");
|
||||
}
|
||||
}
|
||||
|
||||
// 用商家编码查询
|
||||
List<OGoods> erpGoodsList = goodsMapper.selectList(new LambdaQueryWrapper<OGoods>()
|
||||
.eq(OGoods::getGoodsNum, goodsNum));
|
||||
if(erpGoodsList!=null && !erpGoodsList.isEmpty()){
|
||||
return ResultVo.error(ResultVoEnum.DataExist.getIndex(),"商家编码已存在");
|
||||
}
|
||||
|
||||
|
||||
// 添加商品
|
||||
OGoods erpGoods = new OGoods();
|
||||
|
|
@ -152,13 +180,13 @@ public class TaoGoodsServiceImpl extends ServiceImpl<TaoGoodsMapper, TaoGoods>
|
|||
erpGoods.setImage(shopGoods.getPicUrl());
|
||||
erpGoods.setGoodsNum(goodsNum);
|
||||
erpGoods.setCategoryId(0L);
|
||||
erpGoods.setRemark("店铺商品同步");
|
||||
erpGoods.setRemark("TAO店铺商品同步");
|
||||
erpGoods.setStatus(1);
|
||||
erpGoods.setDisable(1);
|
||||
if (StringUtils.isNotEmpty(shopGoods.getPrice() )) {
|
||||
erpGoods.setRetailPrice(new BigDecimal(shopGoods.getPrice()));
|
||||
}
|
||||
erpGoods.setCreateBy("店铺商品同步");
|
||||
erpGoods.setCreateBy("TAO店铺商品同步");
|
||||
erpGoods.setCreateTime(new Date());
|
||||
goodsMapper.insert(erpGoods);
|
||||
|
||||
|
|
@ -258,7 +286,7 @@ public class TaoGoodsServiceImpl extends ServiceImpl<TaoGoodsMapper, TaoGoods>
|
|||
inventory.setQuantity(0L);
|
||||
inventory.setIsDelete(0);
|
||||
inventory.setCreateTime(new Date());
|
||||
inventory.setCreateBy("同步店铺商品初始化商品 sku 库存");
|
||||
inventory.setCreateBy("同步TAO店铺商品初始化商品 sku 库存");
|
||||
inventoryMapper.insert(inventory);
|
||||
|
||||
//更新ShopGoodsSku
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ export function linkErpGoodsSkuId(data) {
|
|||
})
|
||||
}
|
||||
|
||||
// 接口拉取淘宝商品
|
||||
// 接口拉取商品
|
||||
export function pullGoodsList(data) {
|
||||
return request({
|
||||
url: '/api/open-api/jd/goods/pull_goods',
|
||||
|
|
@ -44,3 +44,11 @@ export function pullGoodsList(data) {
|
|||
data: data
|
||||
})
|
||||
}
|
||||
//推送商品到商品库
|
||||
export function pushToOms(data) {
|
||||
return request({
|
||||
url: '/api/open-api/jd/goods/push_oms',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@
|
|||
<!-- <el-tag size="small">{{scope.row.wareStatus}}</el-tag>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="最后修改时间" align="center" prop="modified" />
|
||||
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- <el-button-->
|
||||
|
|
@ -175,12 +176,13 @@
|
|||
import Treeselect from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
import {getToken} from "@/utils/auth";
|
||||
import {listGoods,getGoodsSku,linkErpGoodsSkuId,pullGoodsList} from "@/api/jd/goods";
|
||||
import {listGoods,getGoodsSku,linkErpGoodsSkuId,pullGoodsList,pushToOms} from "@/api/jd/goods";
|
||||
import {listShop} from "@/api/shop/shop";
|
||||
import {MessageBox} from "element-ui";
|
||||
import {isRelogin} from "@/utils/request";
|
||||
import {amountFormatter} from "@/utils/zhijian";
|
||||
|
||||
|
||||
export default {
|
||||
name: "GoodsListJd",
|
||||
components: { Treeselect },
|
||||
|
|
@ -339,6 +341,21 @@ export default {
|
|||
|
||||
// this.$modal.msgSuccess("请先配置API");
|
||||
},
|
||||
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
|
||||
})
|
||||
})
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -89,6 +89,8 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="ERP商品Id" align="center" prop="erpGoodsId" />
|
||||
<el-table-column label="库存" align="center" prop="num" />
|
||||
<el-table-column label="销量" align="center" prop="soldQuantity" />
|
||||
|
||||
<el-table-column label="最后修改时间" align="center" prop="modified" >
|
||||
<template slot-scope="scope">
|
||||
|
|
|
|||
Loading…
Reference in New Issue