From 437d7c45481176d4766152cae26cf841a8bd458f Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 21 一月 2026 14:57:56 +0800
Subject: [PATCH] 经销商管理
---
admin/src/views/business/shop.vue | 19 +
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java | 6
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java | 14
admin/src/views/business/platformGoods.vue | 35 +--
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java | 120 ++++++++++---
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java | 6
admin/src/components/business/OperaGoodsShopWindow.vue | 292 ++++++++++++++++++++++++++++++++
7 files changed, 428 insertions(+), 64 deletions(-)
diff --git a/admin/src/components/business/OperaGoodsShopWindow.vue b/admin/src/components/business/OperaGoodsShopWindow.vue
new file mode 100644
index 0000000..a050866
--- /dev/null
+++ b/admin/src/components/business/OperaGoodsShopWindow.vue
@@ -0,0 +1,292 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="100%"
+ :visible.sync="visible"
+ >
+ <TableLayout >
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="10px" style="display: block;" >
+ <el-form-item label="" prop="name" style="display: inline-block;margin-right: 30px;width: 180px">
+ <el-input v-model="searchForm.name" placeholder="鍟嗗搧鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="" prop="id" style="display: inline-block;margin-right: 30px;;width: 180px">
+ <el-input v-model="searchForm.id" placeholder="鍟嗗搧ID" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="" prop="categoryId" style="display: inline-block;margin-right: 30px;">
+ <!-- 0姝e父 1绂佺敤 -->
+ <el-select
+ v-model="searchForm.categoryId"
+ style="width: 120px"
+ placeholder="鎵�灞炲垎绫�"
+ clearable
+ @change="search"
+ >
+ <el-option
+ v-for="item in labels"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="" prop="brandId" style="display: inline-block;margin-right: 30px;">
+ <!-- 0姝e父 1绂佺敤 -->
+ <el-select
+ v-model="searchForm.brandId"
+ style="width: 120px"
+ placeholder="鎵�灞炲搧鐗�"
+ clearable
+ @change="search"
+ >
+ <el-option
+ v-for="item in brands"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="" prop="status" style="display: inline-block;margin-right: 30px;">
+ <!-- 0姝e父 1绂佺敤 -->
+ <el-select
+ v-model="searchForm.status"
+ style="width: 120px"
+ @change="search"
+ clearable
+ placeholder="涓婁笅鏋剁姸鎬�"
+ >
+ <el-option :key="0" :value="0" label="涓婃灦"></el-option>
+ <el-option :key="1" :value="1" label="涓嬫灦"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+<!-- <ul class="toolbar" >
+ <li><el-button type="primary" icon="el-icon-plus" @click="setPriceBatch" >鎵归噺瀹氫环</el-button></li>
+ </ul>-->
+ <div :style="'display: flex;height:'+tabelHeight+'px;'">
+ <el-table
+ :height="tabelHeight"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ border
+ @selection-change="handleSelectionChange"
+ >
+<!--
+ <el-table-column type="selection" width="55"></el-table-column>
+-->
+ <el-table-column prop="imgurl" label="鍟嗗搧淇℃伅" min-width="80px">
+ <template slot-scope="{row}">
+ <el-image style="width: 50px;height: 50px;" v-if="row.imgurl && row.imgurl!=''" :src="row.resourcePath+row.imgurl" :preview-src-list="[row.resourcePath+row.imgurl]"></el-image>
+ </template>
+ </el-table-column>
+ <el-table-column prop="id" label="鍟嗗搧ID" min-width="120px" ></el-table-column>
+ <el-table-column prop="name" label="鍟嗗搧鍚嶇О" min-width="180px" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="categoryName" label="鎵�灞炲垎绫�" min-width="120px"></el-table-column>
+ <el-table-column prop="brandName" label="鎵�灞炲搧鐗�" min-width="120px"></el-table-column>
+ <el-table-column prop="stockNum" label="鍓╀綑搴撳瓨閲�" min-width="100px"></el-table-column>
+ <el-table-column prop="status" label="涓婁笅鏋剁姸鎬�" min-width="100px" align="center">
+ <template slot-scope="{row}">
+ <span v-if="row.status ==1" class="red">宸蹭笅鏋�</span>
+ <span v-else class="green">宸蹭笂鏋�</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="price" label="灞曠ず浠锋牸" min-width="100px" align="center"></el-table-column>
+ <el-table-column prop="skuPrice" label="閿�鍞环(鍏�)" fixed="right" min-width="100px" align="center">
+ <template slot-scope="{row}">
+ <span class="orange">{{ row.skuPrice }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="shopPrice" label="渚涜揣浠�(鍏�)" align="center" min-width="100px" fixed="right">
+ <template slot-scope="scope">
+ <el-input v-if="scope.row.isPriceSelected" v-model="scope.row.shopPrice"
+ @focus="focusEvent(scope.row,scope.$index,scope.column)"
+ @blur="blurEvent(scope.row,scope.$index,scope.column)" v-focus></el-input>
+ <p style="cursor: pointer" class="blue" title="鐐瑰嚮缂栬緫" @click="cellClick(scope.row, scope.column)" v-else>{{scope.row.shopPrice || '鏈缃�' }}</p>
+ </template>
+ </el-table-column>
+<!-- <el-table-column
+ label="鎿嶄綔"
+ min-width="160"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" v-permissions="['business:goods:update']" @click="setPrice(row)">璁剧疆浠锋牸</el-button>
+ </template>
+ </el-table-column>-->
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </div>
+ </template>
+ </TableLayout>
+ <template v-slot:footer>
+ <el-button @click="visible=false">杩斿洖</el-button>
+ </template>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { findAll as labelList } from '@/api/business/labels'
+import { setGoodsPrice } from '@/api/business/shop'
+export default {
+ name: 'OperaShopGoodsWindow',
+ extends: BaseTable,
+ components: { GlobalWindow, TableLayout, Pagination },
+ data () {
+ return {
+ title: '',
+ price: null,
+ visible: false,
+ tabelHeight: null,
+ // 鎼滅储
+ searchForm: {
+ id: '',
+ name: '',
+ shopId: null,
+ categoryId: '',
+ brandId: '',
+ // 绫诲瀷 0骞冲彴鍟嗗煄 1鍜栬眴鍟嗗煄 2鍜栧暋璁″垝鍟嗗搧
+ type: '0', // 骞冲彴鍟嗗搧
+ status: '',
+ labels: ''
+ },
+ labels: [],
+ brands: []
+ }
+ },
+ mounted () {
+ window.addEventListener('resize', this.handleResize)
+ },
+ beforeDestroy () {
+ window.removeEventListener('resize', this.handleResize)
+ },
+ created: function () {
+ this.config({
+ module: '鍟嗗搧淇℃伅琛�',
+ api: '/business/goods',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.handleResize()
+ labelList({
+ type: 0 // 鍟嗗搧鍒嗙被
+ }).then(res => {
+ this.labels = res
+ })
+ labelList({
+ type: 1 // 鍟嗗搧鍝佺墝
+ })
+ .then(res => {
+ this.brands = res
+ })
+ },
+ directives: {
+ focus: {
+ inserted: function (el) {
+ el.querySelector('input').focus()
+ }
+ }
+ },
+ methods: {
+ setPrice (row) {
+ if (row.skuPrice == null) {
+ this.$tip.warning('璇峰厛璁剧疆鍟嗗搧閿�鍞环锛�')
+ return
+ }
+ console.log(row)
+ },
+ setPriceBatch () {
+ },
+ handleResize () {
+ this.tabelHeight = window.innerHeight - 400
+ },
+ open (title, info) {
+ this.title = title
+ this.visible = true
+ this.searchForm.shopId = info.id
+ this.search()
+ this.handleResize()
+ },
+ handlePageChange: function (pageIndex) {
+ this.__checkApi()
+ this.tableData.pagination.pageIndex = pageIndex || this.tableData.pagination.pageIndex
+ this.isWorking.search = true
+ this.api.fetchList({
+ page: this.tableData.pagination.pageIndex,
+ capacity: this.tableData.pagination.pageSize,
+ model: this.searchForm,
+ sorts: this.tableData.sorts
+ })
+ .then(data => {
+ (data.records || []).forEach((item) => {
+ item.isPriceSelected = false
+ })
+ this.tableData.list = data.records || []
+ this.tableData.pagination.total = data.total
+ console.log(this.tableData.list)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking.search = false
+ })
+ },
+ cellClick (row, column) {
+ row.isPriceSelected = !row.isPriceSelected
+ },
+ focusEvent (row, index, column) {
+ row.oldShopsPrice = row.shopPrice
+ },
+ blurEvent (row, curIndex, column) {
+ if ( !this.skuPrice || this.skuPrice <= row.shopPrice) {
+ this.$tip.error('渚涜揣浠蜂笉鑳戒綆浜庨攢鍞环')
+ row.isPriceSelected = !row.isPriceSelected
+ row.shopPrice = row.oldShopsPrice// 浠锋牸杩樺師
+ return
+ }
+ if (row.shopPrice == row.oldShopsPrice) {
+ row.isPriceSelected = !row.isPriceSelected
+ return
+ }
+ setGoodsPrice({
+ id: this.searchForm.shopId,
+ goodsId: row.id,
+ goodsPrice: row.shopPrice
+ }).then(res => {
+ row.oldShopsPrice = row.shopPrice
+ this.$tip.success('淇敼鎴愬姛')
+ this.$emit('success')
+ }).catch(e => {
+ row.shopPrice = row.oldShopsPrice// 浠锋牸杩樺師
+ }).finally(() => {
+ row.isPriceSelected = !row.isPriceSelected
+ })
+ },
+ handleClick (val) {
+ }
+ }
+}
+</script>
+<style scoped>
+.table-pagination{
+ position: fixed !important;
+ bottom: 50px;
+}
+</style>
diff --git a/admin/src/views/business/platformGoods.vue b/admin/src/views/business/platformGoods.vue
index 6739063..b4d7273 100644
--- a/admin/src/views/business/platformGoods.vue
+++ b/admin/src/views/business/platformGoods.vue
@@ -2,11 +2,6 @@
<TableLayout :permissions="['business:goods:query']">
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-<!-- <el-tabs v-model="activeName" @tab-click="handleClick">
- <el-tab-pane label="鍏ㄩ儴鍟嗗搧" name="first"></el-tab-pane>
- <el-tab-pane label="宸插敭缃勫晢鍝�" name="second"></el-tab-pane>
- <el-tab-pane label="鍥炴敹绔欏晢鍝�" name="third"></el-tab-pane>
- </el-tabs>-->
<el-form-item label="鍟嗗搧鍚嶇О" prop="name">
<el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" @keypress.enter.native="search"></el-input>
</el-form-item>
@@ -49,6 +44,8 @@
<el-select
v-model="searchForm.status"
placeholder="璇烽�夋嫨涓婃灦鐘舵��"
+ clearable
+ @change="search"
>
<el-option :key="0" :value="0" label="涓婃灦"></el-option>
<el-option :key="1" :value="1" label="涓嬫灦"></el-option>
@@ -61,10 +58,11 @@
</el-form>
<!-- 琛ㄦ牸鍜屽垎椤� -->
<template v-slot:table-wrap>
- <ul class="toolbar" v-permissions="['business:goods:create', 'business:goods:delete']">
+ <ul class="toolbar" >
<li><el-button type="primary" icon="el-icon-plus" @click="$refs.operaGoodsWindow.open('鏂板缓鍟嗗搧', null, 0)" v-permissions="['business:goods:create']">鏂板缓</el-button></li>
<li><el-button type="primary" icon="el-icon-edit" @click="issued(0)">涓婃灦</el-button></li>
<li><el-button type="danger" icon="el-icon-edit" @click="issued(1)">涓嬫灦</el-button></li>
+ <li><p class="tip-warn" style="width: 100%;margin-left: 20px;"><i class="el-icon-warning"></i>鎻愮ず锛氥�愪緵璐т环璁剧疆銆戝彧缁熻鍚敤鐘舵�佺殑渚涢攢鍟嗚缃暟鎹�</p></li>
</ul>
<el-table
v-loading="isWorking.search"
@@ -87,7 +85,7 @@
<el-table-column prop="skuPrice" label="閿�鍞环(鍏�)" min-width="100px"></el-table-column>
<el-table-column prop="shopPrice" label="渚涜揣浠疯缃�" min-width="100px" align="center">
<template slot-scope="{row}" >
- <div @click="goPriceSet(row)" style="cursor:pointer;"><span class="red"> {{row.pricedShopNum||0}}</span> / <span class="green"> {{row.shopNum||0}}</span> </div>
+ <div title="閽堝鍚敤渚涢攢鍟嗕环鏍艰缃粺璁�" @click="goPriceSet(row)" style="cursor:pointer;"><span class="red"> {{row.pricedShopNum||0}}</span> / <span class="green"> {{row.shopNum||0}}</span> </div>
</template>
</el-table-column>
<el-table-column prop="stockNum" label="鍓╀綑搴撳瓨閲�" min-width="100px"></el-table-column>
@@ -107,12 +105,12 @@
</el-table-column>
<el-table-column
label="鎿嶄綔"
- min-width="250"
+ min-width="160"
fixed="right"
>
<template slot-scope="{row}">
<el-button type="text" v-if="row.status == 1" @click="$refs.operaGoodsWindow.open('缂栬緫鍟嗗搧', row, 0)" v-permissions="['business:goods:update']">缂栬緫</el-button>
- <el-button type="text" @click="goPriceSet(row)">渚涜揣浠�</el-button>
+ <el-button type="text" v-permissions="['business:goods:update']" @click="goPriceSet(row)">渚涜揣浠�</el-button>
<el-button type="text" style="color: red;" @click="deleteById(row)" v-permissions="['business:goods:delete']">鍒犻櫎</el-button>
<!-- <el-button type="text" @click="$refs.operaGoodsDetailWindow.open('鍟嗗搧璇︽儏', row, 0)">鏌ョ湅璇︽儏</el-button>-->
</template>
@@ -152,32 +150,17 @@
// 鎼滅储
searchForm: {
id: '',
- creator: '',
- createDate: '',
- editor: '',
- editDate: '',
- isdeleted: '',
- remark: '',
- imgurl: '',
name: '',
- info: '',
categoryId: '',
brandId: '',
- price: '',
- salenum: '',
- content: '',
- sortnum: '',
- looknum: '',
// 绫诲瀷 0骞冲彴鍟嗗煄 1鍜栬眴鍟嗗煄 2鍜栧暋璁″垝鍟嗗搧
type: '0', // 骞冲彴鍟嗗搧
status: '',
- isrec: '',
- styleImg: '',
labels: ''
},
labels: [],
- serials: [],
- brands: []
+ brands: [],
+ serials: []
}
},
provide () {
diff --git a/admin/src/views/business/shop.vue b/admin/src/views/business/shop.vue
index 301effe..1f91fc3 100644
--- a/admin/src/views/business/shop.vue
+++ b/admin/src/views/business/shop.vue
@@ -29,9 +29,10 @@
</el-form>
<!-- 琛ㄦ牸鍜屽垎椤� -->
<template v-slot:table-wrap>
- <ul class="toolbar" v-permissions="['business:shop:create', 'business:shop:delete']">
+ <ul class="toolbar" >
<li><el-button type="primary" @click="$refs.operaShopWindow.open('鏂板缓缁忛攢鍟�')" icon="el-icon-plus" v-permissions="['business:shop:create']">鏂板缓</el-button></li>
<!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:shop:delete']">鍒犻櫎</el-button></li> -->
+ <li><p class="tip-warn" style="width: 100%;margin-left: 20px;"><i class="el-icon-warning"></i>鎻愮ず锛氥�愪緵璐т环璁剧疆銆戝彧缁熻涓婃灦鐘舵�佺殑鍟嗗搧浠锋牸璁剧疆鏁版嵁</p></li>
</ul>
<el-table
v-loading="isWorking.search"
@@ -77,6 +78,11 @@
{{ row.saleType == 1?'鑷富閲囪喘':'骞冲彴閾鸿揣'}}
</template>
</el-table-column>
+ <el-table-column prop="shopPrice" label="渚涜揣浠疯缃�" min-width="100px" align="center">
+ <template slot-scope="{row}" >
+ <div title="閽堝涓婃灦鍟嗗搧浠锋牸璁剧疆缁熻" @click="goPriceSet(row)" style="cursor:pointer;"><span class="red"> {{row.pricedGoodsNum||0}}</span> / <span class="green"> {{row.goodsNum||0}}</span> </div>
+ </template>
+ </el-table-column>
<el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center" min-width="140px"></el-table-column>
<el-table-column prop="status" label="鐘舵��" align="center" min-width="100px" fixed="right">
<template slot-scope="{row}">
@@ -93,15 +99,15 @@
<el-table-column
v-if="containPermissions(['business:shop:update', 'business:shop:delete'])"
label="鎿嶄綔"
- min-width="200"
+ min-width="280"
fixed="right"
align="center"
>
<template slot-scope="{row}">
<el-button type="text" @click="$refs.operaShopWindow.open('缂栬緫缁忛攢鍟�', row)" icon="el-icon-edit" v-permissions="['business:shop:update']">缂栬緫</el-button>
+ <el-button type="text" v-permissions="['business:shop:update']" icon="el-icon-edit" @click="goPriceSet(row)">渚涜揣浠�</el-button>
<el-button type="text" @click="resetPwd(row)" icon="el-icon-edit" v-permissions="['business:shop:update']">閲嶇疆瀵嗙爜</el-button>
<el-button type="text" style="color: red" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:shop:delete']">鍒犻櫎</el-button>
-
</template>
</el-table-column>
</el-table>
@@ -116,6 +122,7 @@
<OperaShopWindow ref="operaShopWindow" @success="handlePageChange"/>
<OperaShopInfoWindow ref="OperaShopInfoWindow" />
<ResetPwdShopWindow ref="resetPwdWindow"/>
+ <OperaGoodsShopWindow ref="OperaGoodsShopWindow" @success="handlePageChange"/>
</TableLayout>
</template>
@@ -125,12 +132,13 @@
import Pagination from '@/components/common/Pagination'
import OperaShopWindow from '@/components/business/OperaShopWindow'
import OperaShopInfoWindow from '@/components/business/OperaShopInfoWindow'
+import OperaGoodsShopWindow from '@/components/business/OperaGoodsShopWindow'
import { resetPwd, updateIsRecById } from '@/api/business/shop'
import ResetPwdShopWindow from '@/components/business/ResetPwdShopWindow'
export default {
name: 'Shop',
extends: BaseTable,
- components: { TableLayout, Pagination, OperaShopWindow, OperaShopInfoWindow, ResetPwdShopWindow },
+ components: { TableLayout, Pagination, OperaShopWindow, OperaShopInfoWindow, ResetPwdShopWindow,OperaGoodsShopWindow },
data () {
return {
@@ -154,6 +162,9 @@
this.search()
},
methods: {
+ goPriceSet(row){
+ this.$refs.OperaGoodsShopWindow.open('璁剧疆渚涜揣浠� - '+row.name, row )
+ },
resetPwd (row) {
this.$dialog.messageWaring('纭閲嶇疆璇ョ粡閿�鍟嗐��' + row.name + '銆戠殑鐧诲綍瀵嗙爜鍚楋紵')
.then(() => {
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java
index ef29758..1335c8a 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java
@@ -209,5 +209,11 @@
@TableField(exist = false)
private Long pricedShopNum;
+ @ApiModelProperty(value = "shopId" )
+ @TableField(exist = false)
+ private Integer shopId;
+ @ApiModelProperty(value = "鍟嗗渚涜揣浠�" )
+ @TableField(exist = false)
+ private BigDecimal shopPrice;
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java
index 91eaecf..3b14490 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java
@@ -271,6 +271,12 @@
@ApiModelProperty(value = "鍟嗗搧缂栫爜")
@TableField(exist = false)
private Integer goodsId;
+ @ApiModelProperty(value = "宸茶缃环鏍间骇鍝佹暟閲�")
+ @TableField(exist = false)
+ private Long pricedGoodsNum;
+ @ApiModelProperty(value = "鍟嗗搧鎬婚噺")
+ @TableField(exist = false)
+ private Long goodsNum;
@ApiModelProperty(value = "浼樻儬鍒革細浼樻儬鍒镐娇鐢ㄦ�绘暟(寮�)")
@TableField(exist = false)
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
index f275e49..43968bc 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -29,6 +29,7 @@
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
+import org.bouncycastle.jcajce.provider.asymmetric.GOST;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -56,6 +57,8 @@
@Autowired
private GoodsMapper goodsMapper;
+ @Autowired
+ private ShopGoodsRelationMapper shopGoodsRelationMapper;
@@ -311,6 +314,8 @@
goods.setEditor(user.getId());
goods.setId(id);
goodsMapper.updateById(goods);
+ //鍒犻櫎渚涜揣浠�
+ shopGoodsRelationMapper.delete(new UpdateWrapper<ShopGoodsRelation>().lambda().eq(ShopGoodsRelation::getGoodsId,id));
}
@Override
@@ -329,29 +334,79 @@
@Override
public void updateStatusById(List<Goods> list) {
- LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-
-
-
- for(Goods model:list){
- if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
- MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
- queryWrapper.selectAll(Goods.class);
- queryWrapper.innerJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId);
- queryWrapper.eq(GoodsSku::getIsdeleted,Constants.ZERO);
- queryWrapper.eq(Goods::getId,model.getId());
- List<Goods> query= goodsAdminJoinMapper.selectJoinList(Goods.class,queryWrapper);
- if(query==null||query.size()<=0){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), model.getName()+":鍟嗗搧鏈厤缃甋KU锛屾棤娉曚笂鏋�");
- }
- }
- Goods update=new Goods();
- update.setEditor(user.getId());
- update.setEditDate(new Date());
- update.setStatus(model.getStatus());
- update.setId(model.getId());
- goodsMapper.updateById(model);
+ if(list == null || list.size()==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
+ List<Integer> idList = new ArrayList<>();
+ for(Goods model:list){
+ idList.add(model.getId() );
+ }
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ if(Constants.formatIntegerNum(list.get(0).getStatus()) == Constants.ONE){
+ //濡傛灉鏄壒閲忎笅鏋�
+ goodsMapper.update(null,new UpdateWrapper<Goods>().lambda()
+ .set(Goods::getEditDate,new Date() )
+ .set(Goods::getEditor,user.getId())
+ .set(Goods::getStatus,Constants.ONE )
+ .in(Goods::getId,idList));
+ return;
+ }
+ long shopNum = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
+ .eq(Shop::getIsdeleted,Constants.ZERO)
+ .eq(Shop::getStatus,Constants.ZERO));
+ MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.selectAll(Goods.class);
+ queryWrapper.select("(select count(s.id) from shop_goods_relation s " +
+ "left join shop g on s.SHOP_ID =g.id " +
+ "where g.status=0 and s.ISDELETED=0 and s.GOODS_ID=t.id) as pricedShopNum ");
+ queryWrapper.eq(GoodsSku::getIsdeleted,Constants.ZERO);
+ queryWrapper.in(Goods::getId,idList);
+ List<Goods> goodsList= goodsAdminJoinMapper.selectJoinList(Goods.class,queryWrapper);
+ if(goodsList==null || goodsList.size() == 0){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍟嗗搧淇℃伅鏌ヨ鏃犳晥 ");
+ }
+ //鏌ヨ鍏ㄩ儴sku淇℃伅
+ List<GoodsSku> goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<GoodsSku>().lambda()
+ .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+ .in(GoodsSku::getGoodsId,idList) );
+ if(goodsSkuList==null || goodsSkuList.size() == 0){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍟嗗搧灏氭湭璁剧疆闆跺敭浠凤紝璇峰厛璁剧疆浠锋牸锛� ");
+ }
+ for(Goods param: list){
+ Goods goods = getGoodsFromListById(param.getId(),goodsList,goodsSkuList);
+ if(goods ==null ){
+ continue;
+ }
+ //濡傛灉鏄笂鏋�
+ goods.setGoodsSkuList(goodsSkuList);
+ if(goods.getSkuPrice() == null || goods.getSkuPrice().compareTo(new BigDecimal(0)) <=0){
+ //榛樿sku淇℃伅
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":鍟嗗搧鍟嗗搧灏氭湭璁剧疆闆跺敭浠凤紝鏃犳硶涓婃灦");
+ }
+ if(Constants.formatLongNum(goods.getPricedShopNum()) <= shopNum){
+ //榛樿sku淇℃伅
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":鏈夋湭璁剧疆渚涜揣浠风殑缁忛攢鍟嗭紝鏃犳硶涓婃灦");
+ }
+ }
+ goodsMapper.update(null,new UpdateWrapper<Goods>().lambda()
+ .set(Goods::getEditDate,new Date() )
+ .set(Goods::getEditor,user.getId())
+ .set(Goods::getStatus,Constants.ZERO )
+ .in(Goods::getId,idList));
+ }
+
+ private Goods getGoodsFromListById(Integer id, List<Goods> goodsList, List<GoodsSku> skuList) {
+ for(Goods model: goodsList){
+ if(Constants.equalsObject(model.getIdList(),id)){
+ for(GoodsSku sku :skuList){
+ if(Constants.equalsInteger(sku.getGoodsId(),id)){
+ model.setSkuPrice(sku.getPrice());
+ }
+ }
+ return model;
+ }
+ }
+ return null;
}
@@ -736,7 +791,11 @@
queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getParentCategoryId);
//搴撳瓨閲�
queryWrapper.select("(select sum(STOCK) from goods_sku where ISDELETED=0 and GOODS_ID=t.id) as stockNum ");
- queryWrapper.select("(select count(id) from shop_goods_relation s where s.ISDELETED=0 and s.GOODS_ID=t.id) as pricedShopNum ");
+ if(pageWrap.getModel().getShopId() !=null){
+ queryWrapper.select("(select s.price from shop_goods_relation s where s.ISDELETED=0 and s.GOODS_ID=t.id and s.shop_id="+pageWrap.getModel().getShopId()+" limit 1) as shopPrice");//鍟嗗渚涜揣浠�
+ }else{
+ queryWrapper.select("(select count(s.id) from shop_goods_relation s left join shop g on s.SHOP_ID =g.id where g.status=0 and s.ISDELETED=0 and s.GOODS_ID=t.id) as pricedShopNum ");
+ }
//瀹為檯閿�閲�
queryWrapper.select("(select sum(gd.GOODS_NUM) from goodsorder_detail gd" +
" inner join goods_sku gs on gs.id=gd.GOODS_SKU_ID" +
@@ -759,9 +818,12 @@
queryWrapper.eq(pageWrap.getModel().getBrandId() != null, Goods::getBrandId, pageWrap.getModel().getBrandId());
queryWrapper.eq(pageWrap.getModel().getStatus() != null, Goods::getStatus, pageWrap.getModel().getStatus());
queryWrapper.in(pageWrap.getModel().getIdList() != null && pageWrap.getModel().getIdList().size()>0, Goods::getId, pageWrap.getModel().getIdList());
+ if(pageWrap.getModel().getShopId() !=null){
+ queryWrapper.orderByAsc("shopPrice");
+ }
queryWrapper.orderByDesc(Goods::getId);
IPage<Goods> result = goodsAdminJoinMapper.selectJoinPage(page, Goods.class, queryWrapper);
- initResult(result.getRecords());
+ initResult(result.getRecords(),pageWrap.getModel().getShopId()==null);
return PageData.from(result);
}
@@ -784,12 +846,16 @@
- private void initResult(List<Goods> list) {
+ private void initResult(List<Goods> list,boolean shopId) {
if (list == null || list.size() == 0) {
return;
}
- long shopNum = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
- .eq(Shop::getIsdeleted,Constants.ZERO));
+ long shopNum = 0;
+ if(shopId){//涓嶉拡瀵瑰晢瀹舵悳绱㈢殑璇濓紝
+ shopNum = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
+ .eq(Shop::getIsdeleted,Constants.ZERO)
+ .eq(Shop::getStatus,Constants.ZERO));
+ }
String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
for (Goods goods : list) {
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
index 45362a4..0a5ea0a 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -206,6 +206,7 @@
shop.setEditDate(new Date());
shop.setIsdeleted(Constants.ONE);
shopMapper.updateById(shop);
+ shopGoodsRelationMapper.delete(new UpdateWrapper<ShopGoodsRelation>().lambda().eq(ShopGoodsRelation::getShopId,id));
}
@Override
@@ -378,8 +379,9 @@
queryWrapper.selectAll(Shop.class);
if(pageWrap.getModel().getGoodsId()!=null){
//鏌ヨ鏌愬晢鍝佺殑渚涜揣浠�
- queryWrapper.select("(select s.price from shop_goods_relation s where s.ISDELETED=0 and s.shop_id = t.id and s.GOODS_ID="+pageWrap.getModel().getGoodsId()+") as goodsPrice ");
+ queryWrapper.select("(select s.price from shop_goods_relation s where s.ISDELETED=0 and s.shop_id = t.id and s.GOODS_ID="+pageWrap.getModel().getGoodsId()+" limit 1) as goodsPrice ");
}
+ queryWrapper.select("(select count(s.id) from shop_goods_relation s left join goods g on s.goods_id =g.id where g.status=0 and s.ISDELETED=0 and s.shop_id=t.id) as pricedGoodsNum ");
queryWrapper.selectAs(Labels::getName,Shop::getBigAreaName);
queryWrapper.selectAs(Member::getNickname,Shop::getNickName);
queryWrapper.selectAs(Member::getImgurl,Shop::getMemberImgurl);
@@ -402,9 +404,13 @@
IPage<Shop> result = shopJoinMapper.selectJoinPage(page, Shop.class, queryWrapper);
String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
+ long goodsNum = goodsMapper.selectCount(new QueryWrapper<Goods>().lambda()
+ .eq(Goods::getIsdeleted,Constants.ZERO)
+ .eq(Goods::getStatus,Constants.ZERO));
for(Shop model:result.getRecords()){
model.setImgFullUrl(path);
model.setAreas( AreasServiceImpl.getAddressByAreaId(model.getAreaId()));
+ model.setGoodsNum(goodsNum);
if(model.getLatitude()!=null && model.getLongitude()!=null){
model.setLocationInfo(model.getLatitude().doubleValue()+","+model.getLongitude().doubleValue());
}
@@ -876,12 +882,6 @@
}
return saleReportResponse;
}
-
-
-
-
-
-
@Override
@Transactional
--
Gitblit v1.9.3