完善wei商品

This commit is contained in:
启航 2026-01-25 10:04:49 +08:00
parent d556221932
commit f03338513c
20 changed files with 162 additions and 70 deletions

View File

@ -2,6 +2,8 @@ package cn.qihangerp.oms.wei.controller;
import cn.qihangerp.common.*;
import cn.qihangerp.model.bo.LinkErpGoodsSkuBo;
import cn.qihangerp.model.bo.WeiGoodsBo;
import cn.qihangerp.model.bo.WeiGoodsSkuBo;
import cn.qihangerp.module.service.OGoodsSkuService;
import cn.qihangerp.model.entity.WeiGoods;
import cn.qihangerp.model.entity.WeiGoodsSku;
@ -24,14 +26,14 @@ public class WeiGoodsController extends BaseController {
private final OGoodsSkuService oGoodsSkuService;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public TableDataInfo list(WeiGoods bo, PageQuery pageQuery) {
public TableDataInfo list(WeiGoodsBo bo, PageQuery pageQuery) {
PageResult<WeiGoods> result = goodsService.queryPageList(bo, pageQuery);
return getDataTable(result);
}
@RequestMapping(value = "/skuList", method = RequestMethod.GET)
public TableDataInfo skuList(WeiGoodsSku bo, PageQuery pageQuery) {
public TableDataInfo skuList(WeiGoodsSkuBo bo, PageQuery pageQuery) {
PageResult<WeiGoodsSku> result = skuService.queryPageList(bo, pageQuery);
return getDataTable(result);

View File

@ -3,16 +3,14 @@ package cn.qihangerp.model.bo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class DouGoodsBo implements Serializable {
/**
* 商品数字id
*/
private Long productId;
private Long skuId;
private String productId;
private String outerProductId;
private String title;
private String code;
private Integer shopId;
private Integer hasLink;//是否关联
private Long shopId;
}

View File

@ -13,6 +13,6 @@ public class DouGoodsSkuBo implements Serializable {
private Long id;
private String title;
private String code;
private Integer shopId;
private Integer hasLink;//是否关联
private Long shopId;
private Long erpSkuId;
}

View File

@ -0,0 +1,15 @@
package cn.qihangerp.model.bo;
import lombok.Data;
import java.io.Serializable;
@Data
public class WeiGoodsBo implements Serializable {
private String productId;
private String outProductId;
private String title;
private Long shopId;
private Integer status;
}

View File

@ -0,0 +1,17 @@
package cn.qihangerp.model.bo;
import lombok.Data;
import java.io.Serializable;
@Data
public class WeiGoodsSkuBo implements Serializable {
private String productId;
private String skuId;
private String title;
private String skuCode;
private Long shopId;
private Long erpSkuId;
private Integer status;
}

View File

@ -3,6 +3,7 @@ package cn.qihangerp.module.service;
import cn.qihangerp.common.PageQuery;
import cn.qihangerp.common.PageResult;
import cn.qihangerp.common.ResultVo;
import cn.qihangerp.model.bo.WeiGoodsBo;
import cn.qihangerp.model.entity.WeiGoods;
import com.baomidou.mybatisplus.extension.service.IService;
@ -12,7 +13,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @createDate 2025-05-20 16:31:43
*/
public interface WeiGoodsService extends IService<WeiGoods> {
PageResult<WeiGoods> queryPageList(WeiGoods bo, PageQuery pageQuery);
PageResult<WeiGoods> queryPageList(WeiGoodsBo bo, PageQuery pageQuery);
int saveAndUpdateGoods(Long shopId, WeiGoods goods);
ResultVo pushToOms(Long taoGoodsId);
}

View File

@ -4,6 +4,7 @@ import cn.qihangerp.common.PageQuery;
import cn.qihangerp.common.PageResult;
import cn.qihangerp.common.ResultVo;
import cn.qihangerp.model.bo.LinkErpGoodsSkuBo;
import cn.qihangerp.model.bo.WeiGoodsSkuBo;
import cn.qihangerp.model.entity.WeiGoodsSku;
import com.baomidou.mybatisplus.extension.service.IService;
@ -13,6 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @createDate 2025-05-20 16:30:57
*/
public interface WeiGoodsSkuService extends IService<WeiGoodsSku> {
PageResult<WeiGoodsSku> queryPageList(WeiGoodsSku bo, PageQuery pageQuery);
PageResult<WeiGoodsSku> queryPageList(WeiGoodsSkuBo bo, PageQuery pageQuery);
ResultVo linkErpGoodsSku(LinkErpGoodsSkuBo bo);
}

View File

@ -48,7 +48,8 @@ public class DouGoodsServiceImpl extends ServiceImpl<DouGoodsMapper, DouGoods>
public PageResult<DouGoods> queryPageList(DouGoodsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<DouGoods> queryWrapper = new LambdaQueryWrapper<DouGoods>()
.eq(bo.getShopId()!=null,DouGoods::getShopId,bo.getShopId())
.eq(bo.getProductId()!=null,DouGoods::getProductId,bo.getProductId())
.eq(org.springframework.util.StringUtils.hasText(bo.getProductId()),DouGoods::getProductId,bo.getProductId())
.eq(org.springframework.util.StringUtils.hasText(bo.getOuterProductId()),DouGoods::getOuterProductId,bo.getOuterProductId())
;
Page<DouGoods> goodsPage = mapper.selectPage(pageQuery.build(), queryWrapper);

View File

@ -50,6 +50,7 @@ public class DouGoodsSkuServiceImpl extends ServiceImpl<DouGoodsSkuMapper, DouGo
.eq(bo.getId()!=null, DouGoodsSku::getId, bo.getId())
.eq(bo.getShopId()!=null,DouGoodsSku::getShopId,bo.getShopId())
.eq(bo.getProductId()!=null,DouGoodsSku::getProductId,bo.getProductId())
.eq(bo.getErpSkuId()!=null,DouGoodsSku::getErpGoodsSkuId,bo.getErpSkuId())
.eq(StringUtils.hasText(bo.getCode()),DouGoodsSku::getOutSkuId,bo.getCode())
;
Page<DouGoodsSku> goodsPage = mapper.selectPage(pageQuery.build(), queryWrapper);

View File

@ -50,6 +50,7 @@ public class OGoodsServiceImpl extends ServiceImpl<OGoodsMapper, OGoods>
public PageResult<OGoodsSku> querySkuPageList(OGoodsSku bo, PageQuery pageQuery) {
LambdaQueryWrapper<OGoodsSku> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(bo.getStatus()!=null, OGoodsSku::getStatus,bo.getStatus());
queryWrapper.eq(bo.getGoodsId()!=null, OGoodsSku::getGoodsId,bo.getGoodsId());
queryWrapper.eq(bo.getOuterErpSkuId()!=null,OGoodsSku::getOuterErpSkuId,bo.getOuterErpSkuId());
queryWrapper.eq(bo.getOuterErpGoodsId()!=null,OGoodsSku::getOuterErpGoodsId,bo.getOuterErpGoodsId());
queryWrapper.eq(StringUtils.hasText(bo.getSkuCode()),OGoodsSku::getSkuCode,bo.getSkuCode());

View File

@ -5,14 +5,11 @@ import cn.qihangerp.common.PageResult;
import cn.qihangerp.common.ResultVo;
import cn.qihangerp.common.ResultVoEnum;
import cn.qihangerp.common.utils.StringUtils;
import cn.qihangerp.model.entity.OGoods;
import cn.qihangerp.model.entity.OGoodsInventory;
import cn.qihangerp.model.entity.OGoodsSku;
import cn.qihangerp.model.bo.WeiGoodsBo;
import cn.qihangerp.model.entity.*;
import cn.qihangerp.mapper.OGoodsInventoryMapper;
import cn.qihangerp.mapper.OGoodsMapper;
import cn.qihangerp.mapper.OGoodsSkuMapper;
import cn.qihangerp.model.entity.WeiGoods;
import cn.qihangerp.model.entity.WeiGoodsSku;
import cn.qihangerp.mapper.WeiGoodsMapper;
import cn.qihangerp.mapper.WeiGoodsSkuMapper;
import cn.qihangerp.module.service.WeiGoodsService;
@ -45,9 +42,11 @@ public class WeiGoodsServiceImpl extends ServiceImpl<WeiGoodsMapper, WeiGoods>
private final OGoodsInventoryMapper inventoryMapper;
@Override
public PageResult<WeiGoods> queryPageList(WeiGoods bo, PageQuery pageQuery) {
public PageResult<WeiGoods> queryPageList(WeiGoodsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WeiGoods> queryWrapper = new LambdaQueryWrapper<WeiGoods>()
.eq(bo.getShopId()!=null,WeiGoods::getShopId,bo.getShopId())
.eq(org.springframework.util.StringUtils.hasText(bo.getProductId()), WeiGoods::getProductId,bo.getProductId())
.eq(org.springframework.util.StringUtils.hasText(bo.getOutProductId()),WeiGoods::getOutProductId,bo.getOutProductId())
;
Page<WeiGoods> page = mapper.selectPage(pageQuery.build(), queryWrapper);

View File

@ -4,10 +4,8 @@ import cn.qihangerp.common.PageQuery;
import cn.qihangerp.common.PageResult;
import cn.qihangerp.common.ResultVo;
import cn.qihangerp.model.bo.LinkErpGoodsSkuBo;
import cn.qihangerp.model.entity.OGoods;
import cn.qihangerp.model.entity.OGoodsSku;
import cn.qihangerp.model.entity.WeiGoods;
import cn.qihangerp.model.entity.WeiGoodsSku;
import cn.qihangerp.model.bo.WeiGoodsSkuBo;
import cn.qihangerp.model.entity.*;
import cn.qihangerp.mapper.WeiGoodsMapper;
import cn.qihangerp.mapper.WeiGoodsSkuMapper;
import cn.qihangerp.module.service.OGoodsService;
@ -20,6 +18,7 @@ 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;
@ -38,9 +37,13 @@ public class WeiGoodsSkuServiceImpl extends ServiceImpl<WeiGoodsSkuMapper, WeiGo
private final OGoodsService oGoodsService;
@Override
public PageResult<WeiGoodsSku> queryPageList(WeiGoodsSku bo, PageQuery pageQuery) {
public PageResult<WeiGoodsSku> queryPageList(WeiGoodsSkuBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WeiGoodsSku> queryWrapper = new LambdaQueryWrapper<WeiGoodsSku>()
.eq(bo.getShopId()!=null,WeiGoodsSku::getShopId,bo.getShopId())
.eq(StringUtils.hasText(bo.getProductId()), WeiGoodsSku::getProductId,bo.getProductId())
.eq(StringUtils.hasText(bo.getSkuId()), WeiGoodsSku::getSkuId,bo.getSkuId())
.like(StringUtils.hasText(bo.getSkuCode()), WeiGoodsSku::getSkuCode,bo.getSkuCode())
.eq(bo.getErpSkuId()!=null, WeiGoodsSku::getErpGoodsSkuId,bo.getErpSkuId())
;
Page<WeiGoodsSku> page = mapper.selectPage(pageQuery.build(), queryWrapper);

View File

@ -17,6 +17,14 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="平台商品ID" prop="productId">
<el-input
v-model="queryParams.productId"
placeholder="请输入平台商品ID"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="ERP skuId" prop="erpSkuId">
<el-input
v-model="queryParams.erpSkuId"
@ -254,9 +262,13 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
linkErpGoodsSkuId(this.form).then(response => {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
if(response.code === 200) {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
}else{
this.$modal.msgError(response.msg)
}
});
}
});

View File

@ -2,10 +2,11 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px">
<el-form-item label="ERP商品SKUID" prop="outerErpSkuId">
<el-form-item label="商品ID" prop="goodsId">
<el-input
v-model="queryParams.outerErpSkuId"
placeholder="请输入ERP商品SKUID"
v-model="queryParams.goodsId"
placeholder="请输入商品ID"
clearable
@keyup.enter.native="handleQuery"
/>
@ -18,6 +19,14 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="外部SkuId" prop="outerErpSkuId">
<el-input
v-model="queryParams.outerErpSkuId"
placeholder="请输入外部SkuId"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="disable">
<el-select v-model="queryParams.status" filterable placeholder="状态">
<el-option label="销售中" value="1"></el-option>

View File

@ -119,7 +119,7 @@
/>
<el-dialog title="Sku List" :visible.sync="skuOpen" width="1200px" append-to-body>
<el-table v-loading="loading" :data="skuList">
<el-table v-loading="loading" :data="skuList" :row-class-name="rowIndex">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="SKU编码" align="left" prop="outerId" />
@ -180,7 +180,7 @@ import {listGoods,getGoodsSku,linkErpGoodsSkuId,pullGoodsList,pushToOms} from "@
import {listShop} from "@/api/shop/shop";
import {MessageBox} from "element-ui";
import {isRelogin} from "@/utils/request";
import {amountFormatter} from "@/utils/zhijian";
import {amountFormatter, rowIndex} from "@/utils/zhijian";
export default {
@ -245,6 +245,7 @@ export default {
// this.getList();
},
methods: {
rowIndex,
amountFormatter,
//
handleSelectionChange(selection) {

View File

@ -325,9 +325,13 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
linkErpGoodsSkuId(this.form).then(response => {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
if(response.code === 200) {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
}else{
this.$modal.msgError(response.msg)
}
});
}
});

View File

@ -9,6 +9,14 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="平台商品ID" prop="goodsId">
<el-input
v-model="queryParams.goodsId"
placeholder="请输入平台商品ID"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商家sku编码" prop="outerId">
<el-input
v-model="queryParams.outerId"
@ -241,9 +249,13 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
linkErpGoodsSkuId(this.form).then(response => {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
if(response.code === 200) {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
}else{
this.$modal.msgError(response.msg)
}
});
}
});

View File

@ -111,7 +111,7 @@
/>
<el-dialog title="Sku List" :visible.sync="skuOpen" width="1200px" append-to-body>
<el-table v-loading="loading" :data="skuList">
<el-table v-loading="loading" :data="skuList" :row-class-name="rowIndex">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="SKU编码" align="left" prop="outerId" />
@ -179,7 +179,7 @@ import { listShop } from "@/api/shop/shop";
import { searchSku } from "@/api/goods/goods";
import {MessageBox} from "element-ui";
import {getGoodsSku, linkErpGoodsSkuId, listGoods, pullGoodsList,pushToOms} from "@/api/tao/goods";
import {amountFormatter, parseTime} from "@/utils/zhijian";
import {amountFormatter, parseTime, rowIndex} from "@/utils/zhijian";
export default {
name: "GoodsListTao",
@ -247,6 +247,7 @@ export default {
}
},
methods: {
rowIndex,
parseTime,
amountFormatter,
getSkuProper(proper){

View File

@ -1,30 +1,23 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="108px">
<el-form-item label="平台SkuId" prop="skuId">
<el-form-item label="平台商品ID" prop="productId">
<el-input
v-model="queryParams.skuId"
placeholder="请输入平台SkuId"
v-model="queryParams.productId"
placeholder="请输入平台商品ID"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商家sku编码" prop="outerId">
<el-form-item label="商家商品编码" prop="outProductId">
<el-input
v-model="queryParams.outerId"
placeholder="请输入商家sku编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="ERP skuId" prop="erpSkuId">
<el-input
v-model="queryParams.erpSkuId"
placeholder="请输入ERP skuId"
v-model="queryParams.outProductId"
placeholder="请输入商家商品编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" placeholder="请选择店铺" clearable @change="handleQuery">
<el-option
@ -57,13 +50,14 @@
<el-table v-loading="loading" :data="goodsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="ID" align="center" prop="id" />-->
<el-table-column label="平台商品ID" align="center" prop="productId" />
<el-table-column label="图片" align="center" prop="thumbImg" width="100">
<el-table-column label="平台商品ID" align="center" prop="productId" width="180"/>
<el-table-column label="图片" align="center" prop="thumbImg" width="70">
<template slot-scope="scope">
<image-preview :src="scope.row.headImg" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="标题" align="left" prop="title" />
<el-table-column label="商家编码" align="center" prop="outProductId" />
<el-table-column label="SKU" align="center" >
<template slot-scope="scope">
<el-button
@ -74,7 +68,7 @@
>{{scope.row.skuList.length +' 个SKU'}}</el-button>
</template>
</el-table-column>
<el-table-column label="商家编码" align="center" prop="outProductId" />
<el-table-column label="销售价" align="center" prop="salePrice" >
<template slot-scope="scope">{{scope.row.minPrice / 100}}</template>
</el-table-column>
@ -107,7 +101,7 @@
/>
<el-dialog title="Sku List" :visible.sync="skuOpen" width="1200px" append-to-body>
<el-table v-loading="loading" :data="skuList">
<el-table v-loading="loading" :data="skuList" :row-class-name="rowIndex">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="SKU编码" align="left" prop="outerId" />
@ -168,7 +162,7 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {listShop} from "@/api/shop/shop";
import {pullGoodsList,listGoods,getGoodsSku,linkErpGoodsSkuId} from "@/api/wei/goods";
import {MessageBox} from "element-ui";
import { amountFormatter } from '@/utils/zhijian'
import {amountFormatter, rowIndex} from '@/utils/zhijian'
export default {
name: "GoodsListWei",
@ -199,7 +193,8 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
name: null
name: null,
outProductId: null,
},
//
form: {},
@ -229,6 +224,7 @@ export default {
this.loading = false;
},
methods: {
rowIndex,
amountFormatter,
/** 查看SKU List*/
handleViewSkuList(row){
@ -288,9 +284,13 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
linkErpGoodsSkuId(this.form).then(response => {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
if(response.code === 200) {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
}else{
this.$modal.msgError(response.msg)
}
});
}
});

View File

@ -17,6 +17,14 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="平台商品ID" prop="productId">
<el-input
v-model="queryParams.productId"
placeholder="请输入平台商品ID"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="ERP skuId" prop="erpSkuId">
<el-input
v-model="queryParams.erpSkuId"
@ -74,7 +82,7 @@
<!-- </el-table-column>-->
<el-table-column label="商家编码" align="center" prop="skuCode" />
<el-table-column label="销售价" align="center" prop="salePrice" >
<template slot-scope="scope">{{scope.row.salePrice / 100}}</template>
<template slot-scope="scope">{{amountFormatter(null,null,scope.row.salePrice / 100)}}</template>
</el-table-column>
<el-table-column label="ERP SKU ID" align="center" prop="erpGoodsSkuId" />
<el-table-column label="状态" align="center" prop="status" >
@ -127,6 +135,7 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {listShop} from "@/api/shop/shop";
import {pullGoodsList,listGoodsSku,getGoodsSku,linkErpGoodsSkuId} from "@/api/wei/goods";
import {MessageBox} from "element-ui";
import {amountFormatter} from "../../../utils/zhijian";
export default {
name: "GoodsSkuWei",
@ -185,6 +194,7 @@ export default {
this.loading = false;
},
methods: {
amountFormatter,
/** 查询商品管理列表 */
getList() {
this.loading = true;
@ -231,9 +241,13 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
linkErpGoodsSkuId(this.form).then(response => {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
if(response.code === 200) {
this.$modal.msgSuccess("关联成功");
this.open = false;
this.getList();
}else{
this.$modal.msgError(response.msg)
}
});
}
});