From 22aaacd9e51da58ed10221639b6bd2fd9a13c6e5 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 16 一月 2026 18:49:23 +0800
Subject: [PATCH] 经销商管理
---
admin/src/components/base/BaseOpera.vue | 6
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java | 61 +
admin/src/api/business/userAction.js | 16
server/dmmall_service/src/main/java/com/doumee/dao/business/UserActionMapper.java | 12
admin/src/components/business/OperaMemberCouponWindow.vue | 1
server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java | 11
admin/src/views/business/platformGoods.vue | 34
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 131 +++
admin/src/components/business/OperaCouponGoodsWindow.vue | 24
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java | 5
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java | 11
server/dmmall_service/src/main/java/com/doumee/service/business/impl/UserActionServiceImpl.java | 158 +++++
admin/src/components/business/OperaShopGoodsWindow.vue | 217 +++++++
admin/src/views/business/memberCoupon.vue | 4
admin/src/api/business/member.js | 13
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java | 6
admin/src/components/business/OperaMemberDetail.vue | 212 +++++-
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java | 49 +
admin/src/components/business/OperaChangeShopWindow.vue | 109 +++
server/dmmall_service/src/main/java/com/doumee/dao/business/MemberMapper.java | 3
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java | 1
server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java | 1
server/dmmall_admin/src/main/java/com/doumee/api/business/MemberController.java | 21
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java | 6
admin/src/components/business/OperaChangeIntegralWindow.vue | 104 +++
admin/src/components/business/OperaChangeShopRecordWindow.vue | 120 ++++
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java | 69 +-
server/dmmall_service/src/main/java/com/doumee/dao/business/model/UserAction.java | 97 +++
admin/src/views/business/member.vue | 79 ++
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java | 2
server/dmmall_admin/src/main/java/com/doumee/api/business/UserActionController.java | 90 +++
server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java | 3
admin/src/api/business/shop.js | 9
server/dmmall_service/src/main/java/com/doumee/service/business/UserActionService.java | 98 +++
34 files changed, 1,626 insertions(+), 157 deletions(-)
diff --git a/admin/src/api/business/member.js b/admin/src/api/business/member.js
index b871d19..26ed30c 100644
--- a/admin/src/api/business/member.js
+++ b/admin/src/api/business/member.js
@@ -11,8 +11,19 @@
export function findAll (data) {
return request.post('/business/member/findAll', data)
}
-
+export function updateShop (data) {
+ return request.post('/business/member/updateShop', data)
+}
+export function updateIntegral (data) {
+ return request.post('/business/member/updateIntegral', data)
+}
export function updateById (data) {
return request.post('/business/member/updateById', data)
}
+export function exportExcel (data) {
+ return request.post('/business/member/exportExcelList', data, {
+ trim: true,
+ download: true
+ })
+}
diff --git a/admin/src/api/business/shop.js b/admin/src/api/business/shop.js
index 75c541a..6ee04e1 100644
--- a/admin/src/api/business/shop.js
+++ b/admin/src/api/business/shop.js
@@ -6,6 +6,11 @@
trim: true
})
}
+export function allList (data) {
+ return request.post('/business/shop/findAll', data, {
+ trim: true
+ })
+}
// 鍒涘缓
export function create (data) {
@@ -16,10 +21,14 @@
export function updateById (data) {
return request.post('/business/shop/updateById', data)
}
+
// 淇敼
export function updateIsRecById (data) {
return request.post('/business/shop/updateIsRecById', data)
}
+export function setGoodsPrice (data) {
+ return request.post('/business/shop/setGoodsPrice', data)
+}
// 鍒犻櫎
export function deleteById (id) {
diff --git a/admin/src/api/business/userAction.js b/admin/src/api/business/userAction.js
new file mode 100644
index 0000000..cc8ca79
--- /dev/null
+++ b/admin/src/api/business/userAction.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/userAction/page', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/userAction/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
diff --git a/admin/src/components/base/BaseOpera.vue b/admin/src/components/base/BaseOpera.vue
index d05c144..e086d09 100644
--- a/admin/src/components/base/BaseOpera.vue
+++ b/admin/src/components/base/BaseOpera.vue
@@ -68,7 +68,11 @@
this.api.create(this.form)
.then((res) => {
this.visible = false
- this.$tip.apiSuccess(res || '鏂板缓鎴愬姛')
+ if (res && res.length > 8) {
+ this.$tip.apiSuccess(res)
+ } else {
+ this.$tip.apiSuccess('鏂板缓鎴愬姛')
+ }
this.$emit('success')
})
.catch(e => {
diff --git a/admin/src/components/business/OperaChangeIntegralWindow.vue b/admin/src/components/business/OperaChangeIntegralWindow.vue
new file mode 100644
index 0000000..97f1cd9
--- /dev/null
+++ b/admin/src/components/business/OperaChangeIntegralWindow.vue
@@ -0,0 +1,104 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="60%"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <p class="tip-warn" style="margin: 30px;"><i class="el-icon-warning"></i>鎿嶄綔璇存槑锛氱Н鍒嗗鍔犳垨鍑忓皯鍚庝細鍦ㄦ秷璐硅�呯灞曠ず锛岃璋ㄦ厧鎿嶄綔锛�</p>
+ <el-form :model="form" ref="form" :rules="rules" label-width="100px" label-suffix="锛�" inline>
+ <el-form-item label="褰撳墠浣欓" >
+ <span class="green" ><b>{{info.integral}}</b></span>
+ </el-form-item>
+ <el-form-item label="璋冩暣鏂瑰紡" prop="type" >
+ <el-radio-group v-model="form.type">
+ <el-radio :value="0" :label="0">澧炲姞</el-radio>
+ <el-radio :value="1" :label="1">鍑忓皯</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鏁伴噺" prop="num" >
+ <el-input v-model="form.num" type="number" placeholder="璇疯緭鍏ユ暟閲�" ></el-input>
+ </el-form-item>
+ <el-form-item label="澶囨敞" prop="remark" >
+ <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�" ></el-input>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList as shopList } from '@/api/business/shop'
+export default {
+ name: 'OperaChangeShopWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ searchLoading: false,
+ info:{},
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ memberId: null,
+ remark: null,
+ num: null,
+ type: 0
+ },
+ rules: {
+ type: [
+ { required: true, message: '璇烽�夋嫨璋冩暣鏂瑰紡' }
+ ],
+ num: [
+ { required: true, message: '璇疯緭鍏ヨ皟鏁存暟閲�' }
+ ]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/member',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ confirm () {
+ this.$refs.form.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ this.isWorking = true
+ this.api.updateIntegral(this.form)
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+ this.$emit('success')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ })
+ },
+ open (title, target) {
+ this.title = title
+ this.visible = true
+ this.info = target
+ this.form.type = 0
+ this.form.memberId = target.id
+ this.form.num = null
+ this.form.remark = null
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/style/alertstyle.scss";
+::v-deep .el-form-item__content {
+ flex: 0.6;
+}
+</style>
diff --git a/admin/src/components/business/OperaChangeShopRecordWindow.vue b/admin/src/components/business/OperaChangeShopRecordWindow.vue
new file mode 100644
index 0000000..8432c33
--- /dev/null
+++ b/admin/src/components/business/OperaChangeShopRecordWindow.vue
@@ -0,0 +1,120 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="80%"
+ :visible.sync="visible"
+ >
+ <div style="display: block;">
+ <TableLayout >
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ border
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column prop="beforeInfo" label="鍙樻洿鍓�" fixed align="center" min-width="150px"> </el-table-column>
+ <el-table-column prop="afterInfo" label="鍙樻洿鍚�" fixed align="center" min-width="150px"> </el-table-column>
+ <el-table-column prop="remark" label="澶囨敞" align="center" min-width="300px"></el-table-column>
+ <el-table-column prop="createName" label="鎿嶄綔浜�" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" align="center" min-width="150px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+ </div>
+ <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'
+export default {
+ name: 'OperaChangeShopRecordWindow',
+ extends: BaseTable,
+ components: { GlobalWindow, TableLayout, Pagination },
+ data () {
+ return {
+ title: '',
+ visible: false,
+ // 鎼滅储
+ searchForm: {
+ memberId: '',
+ type: 0
+ }
+ }
+ },
+
+ created () {
+ this.config({
+ module: '鐢ㄦ埛鎿嶄綔璁板綍琛ㄤ俊鎭〃',
+ api: '/business/userAction',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ },
+ methods: {
+ open (title, goods) {
+ this.title = title
+ this.visible = true
+ this.searchForm.memberId = goods.id
+ this.search()
+ }
+ }
+}
+</script>
+<style scoped>
+.table-pagination{
+ position: fixed !important;
+ bottom: 50px;
+}
+.header-b{
+ display: inline-block;
+ font-size: 16px;
+ font-weight: bold;
+}
+.header-blue{
+ display: inline-block;
+ font-size: 12px;
+ border: 1px solid #216EEE;
+ padding: 2px 10px;
+ margin-left: 20px;
+ color: #216EEE;
+ border-radius: 5px ;
+}
+.header-btn{
+ display: inline-block;
+ border: none;
+ padding: 2px 10px;
+ margin-left: 20px;
+}
+.info-item{
+ display: flex;
+ width: 100%;
+ margin: 15px;
+}
+.info-item-a{
+ flex: 1;
+ font-size: 14px;
+
+}
+.info-item-a span{
+ font-weight: 600;
+}
+.info-item-a .btn{
+ font-size: 12px !important;
+ cursor: pointer !important;
+}
+</style>
diff --git a/admin/src/components/business/OperaChangeShopWindow.vue b/admin/src/components/business/OperaChangeShopWindow.vue
new file mode 100644
index 0000000..a966340
--- /dev/null
+++ b/admin/src/components/business/OperaChangeShopWindow.vue
@@ -0,0 +1,109 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="60%"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <p class="tip-warn" style="margin: 30px;"><i class="el-icon-warning"></i>鎿嶄綔璇存槑锛氳鎿嶄綔鍙拡瀵瑰凡缁戝畾缁忛攢鍟嗙殑瀹㈡埛鏈夋晥锛�</p>
+ <el-form :model="form" ref="form" :rules="rules" label-suffix="锛�" inline>
+ <el-form-item label="褰撳墠宸茬粦瀹氱殑缁忛攢鍟�" label-width="200px" >
+ <span>{{form.shopName}}</span>
+ </el-form-item>
+ <el-form-item label="閫夋嫨鏂扮殑缁忛攢鍟�" label-width="200px" prop="bindShopId" >
+ <el-select v-model="form.bindShopId" clearable filterable placeholder="璇烽�夋嫨浼樻儬鍒�" >
+ <el-option v-for="item in shops" :key="item.id" :label="item.name" :value="item.id"> </el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList as shopList } from '@/api/business/shop'
+export default {
+ name: 'OperaChangeShopWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ searchLoading: false,
+ users: [],
+ // 琛ㄥ崟鏁版嵁
+ oldId:null,
+ form: {
+ id: null,
+ shopName: null,
+ bindShopId: null
+ },
+ shops: [],
+ rules: {
+ bindShopId: [
+ { required: true, message: '璇烽�夋嫨鏂扮殑缁忛攢鍟�' }
+ ]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/member',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ confirm () {
+ this.$refs.form.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ this.isWorking = true
+ this.api.updateShop(this.form)
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+ this.$emit('success')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ })
+ },
+ getShopList () {
+ shopList({ status: 0 })
+ .then(res => {
+ if (res) {
+ this.shops = res || []
+ }
+ })
+ },
+ open (title, target) {
+ this.title = title
+ this.visible = true
+ this.oldId=target.bindShopId
+ this.form.id = target.id
+ this.form.shopName = target.shopName
+ this.form.bindShopId = null
+ this.getShopList()
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/style/alertstyle.scss";
+::v-deep .el-form-item__content {
+ flex: 0.6;
+}
+::v-deep .el-select {
+ width: 100%;
+ .el-input__inner {
+ width: 100%;
+ }
+}
+</style>
diff --git a/admin/src/components/business/OperaCouponGoodsWindow.vue b/admin/src/components/business/OperaCouponGoodsWindow.vue
index 3bfdb05..fefba70 100644
--- a/admin/src/components/business/OperaCouponGoodsWindow.vue
+++ b/admin/src/components/business/OperaCouponGoodsWindow.vue
@@ -5,7 +5,7 @@
:visible.sync="visible"
@confirm="confirm"
>
- <TableLayout :permissions="['business:goods:query']">
+ <TableLayout>
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" style="display: block;" >
<el-form-item label="" prop="name" label-width="5px" style="display: inline-block;margin-right: 30px;">
@@ -100,31 +100,15 @@
components: { GlobalWindow, TableLayout, Pagination },
data () {
return {
- activeName: 'first',
title: '',
visible: false,
- tabelHeight: null,
// 鎼滅储
searchForm: {
- name: '',
- categoryId: '',
- brandId: '',
- type: '0', // 骞冲彴鍟嗗搧
- status: '',
- isrec: '',
- labels: ''
+ id: '',
+ bindShopId: ''
},
- labels: [],
- serials: [],
- brands: [],
- selectGoods: []
+ shops: []
}
- },
- mounted() {
- window.addEventListener('resize', this.handleResize);
- },
- beforeDestroy() {
- window.removeEventListener('resize', this.handleResize);
},
created () {
this.config({
diff --git a/admin/src/components/business/OperaMemberCouponWindow.vue b/admin/src/components/business/OperaMemberCouponWindow.vue
index 3999607..f1d5f3e 100644
--- a/admin/src/components/business/OperaMemberCouponWindow.vue
+++ b/admin/src/components/business/OperaMemberCouponWindow.vue
@@ -6,6 +6,7 @@
:confirm-working="isWorking"
@confirm="confirm"
>
+ <p class="tip-warn" style="margin: 30px;"><i class="el-icon-warning"></i>鎿嶄綔璇存槑锛氬畾鍚戝彂鏀句笉鍙楀彂鏀炬�绘暟闄愬埗锛屽畾鍚戝彂鏀句紭鎯犲埜涓嶈鍏ヤ紭鎯犲埜宸插彂鏀剧粺璁�</p>
<el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="锛�" inline>
<el-form-item label="鍙戞斁瀵硅薄" prop="addType" >
<el-radio-group v-model="form.addType" @change="changeType">
diff --git a/admin/src/components/business/OperaMemberDetail.vue b/admin/src/components/business/OperaMemberDetail.vue
index a20e0f9..8734a5f 100644
--- a/admin/src/components/business/OperaMemberDetail.vue
+++ b/admin/src/components/business/OperaMemberDetail.vue
@@ -1,65 +1,187 @@
<template>
- <GlobalAlertWindow
- :title="title"
- :visible.sync="visible"
- :confirm-working="isWorking"
- @confirm="confirm"
+ <GlobalWindow
+ :title="title"
+ width="100%"
+ :visible.sync="visible"
>
- <el-descriptions direction="horizontal" labelClassName="descriptions-label" :column="1">
- <el-descriptions-item label="浼氬憳鏄电О">{{ form.nickName }}</el-descriptions-item>
- <el-descriptions-item label="鐪熷疄濮撳悕">{{ form.name }}</el-descriptions-item>
- <el-descriptions-item label="鎵嬫満鍙�">{{ form.phone }}</el-descriptions-item>
- <el-descriptions-item label="韬唤璇佸彿">{{ form.idcard }}</el-descriptions-item>
- <el-descriptions-item label="鎬у埆">{{ form.sex==0?'鐢�':form.sex==1?'濂�':'鏈煡' }}</el-descriptions-item>
- <el-descriptions-item label="鍦板尯">{{ form.addr }}</el-descriptions-item>
- <el-descriptions-item label="涓�鍙ヨ瘽浠嬬粛">{{ form.info }}</el-descriptions-item>
- </el-descriptions>
- <div slot="footer"></div>
- </GlobalAlertWindow>
+ <div style="display: block">
+ <div class="header">
+ <div class="header-b">鐢ㄦ埛淇℃伅</div>
+ <div v-if="info.phone!=null && info.phone!=''" class="header-blue">宸叉巿鏉冩墜鏈哄彿</div>
+ </div>
+ <div class="info-item">
+ <div class="info-item-a">寰俊openid锛�<span>{{info.openId}}</span></div>
+ <div class="info-item-a">鏄电О锛�<span>{{info.nickname}}</span></div>
+ <div class="info-item-a">瀹㈡埛濮撳悕锛�<span>{{info.name}}</span></div>
+ </div>
+ <div class="info-item">
+ <div class="info-item-a">鎺堟潈鎵嬫満鍙凤細<span>{{info.phone}}</span></div>
+ <div class="info-item-a">鍏宠仈缁忛攢鍟嗭細<span>{{info.shopName}}</span> <span class="blue btn" @click="showChangeRecord">鍙樻洿璁板綍</span></div>
+ <div class="info-item-a"></div>
+ </div>
+ <div class="info-item"></div>
+ </div>
+ <div style="display: block">
+ <div class="header">
+ <div class="header-b">绉垎鏄庣粏</div>
+ <div v-if="info.phone!=null && info.phone!=''" class="header-btn">
+ <el-button style="display: inline" type="primary" @click="changeIntegral">绉垎璋冩暣</el-button>
+ </div>
+ </div>
+ <TableLayout >
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <div >
+ <div style="float: left; margin-bottom: 20px;width:50%;">
+ <div class="info-item">
+ <div class="info-item-a">鐜版湁绉垎锛�<span>{{info.integral || 0}}</span></div>
+ <div class="info-item-a">绱绉垎锛�<span>{{info.totalIntegral||0}}</span></div>
+ </div>
+ </div>
+ <div style="float: right; margin-bottom: 20px;">
+ <el-select v-model="searchForm.type" placeholder="鍏ㄩ儴" clearable @change="search" style="width: 120px;" >
+ <el-option :key="0" :value="0" label="鑾峰緱" ></el-option>
+ <el-option :key="1" :value="1" label="鎵i櫎" ></el-option>
+ </el-select>
+ <el-button @click="search" type="鐐瑰嚮鍒锋柊" icon="el-icon-refresh" style="margin-left: 10px;" ></el-button>
+ </div>
+ </div>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ border
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column prop="type" label="鑾峰緱/鎵i櫎" align="center" min-width="150px">
+ <template slot-scope="{row}">
+ {{ row.saleType == 1?'鎵i櫎':'鑾峰緱'}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="num" label="鏁伴噺" fixed align="center" min-width="100px"> </el-table-column>
+ <el-table-column prop="strObjType" label="娑堣垂绫诲瀷" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="orderCode" label="鍏宠仈璁㈠崟" align="center" min-width="150px"></el-table-column>
+ <el-table-column prop="remark" label="澶囨敞" align="center" min-width="200px"></el-table-column>
+ <el-table-column prop="createDate" label="鍙樺姩鏃堕棿" align="center" min-width="200px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+ </div>
+ <template v-slot:footer>
+ <el-button @click="visible=false">杩斿洖</el-button>
+ </template>
+ <OperaChangeShopRecordWindow ref="OperaChangeShopRecordWindow"/>
+ <OperaChangeIntegralWindow ref="OperaChangeIntegralWindow" @success="successBiz"/>
+ </GlobalWindow>
</template>
<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaChangeShopRecordWindow from '@/components/business/OperaChangeShopRecordWindow'
+import OperaChangeIntegralWindow from '@/components/business/OperaChangeIntegralWindow'
export default {
- name: 'OperaCouponWindow',
- extends: BaseOpera,
- components: { GlobalAlertWindow },
+ name: 'OperaShopGoodsWindow',
+ extends: BaseTable,
+ components: { GlobalWindow, TableLayout, Pagination, OperaChangeShopRecordWindow,OperaChangeIntegralWindow },
data () {
-
return {
- getDate: [],
- // 琛ㄥ崟鏁版嵁
- form: {
- id: null,
- name: '',
- nickName: '',
- sex: '',
- addr: '',
- phone: '',
- idcard: '',
- info: ''
- },
-
+ title: '',
+ visible: false,
+ tabelHeight: null,
+ info: {},
+ // 鎼滅储
+ searchForm: {
+ memberId: '',
+ userType: 0,
+ type: null
+ }
}
},
+
created () {
this.config({
- api: '/business/coupon',
- 'field.id': 'id'
+ module: '鐢ㄦ埛淇℃伅琛�',
+ api: '/business/integral',
+ 'field.id': 'id',
+ 'field.main': 'id'
})
},
methods: {
-
- },
+ successBiz(){
+ this.handlePageChange()
+ this.$emit('success')
+ },
+ showChangeRecord () {
+ if (this.info) {
+ this.$refs.OperaChangeShopRecordWindow.open('瀹㈡埛缁忛攢鍟嗗彉鏇磋褰�', this.info)
+ }
+ },
+ changeIntegral () {
+ if (this.info) {
+ this.$refs.OperaChangeIntegralWindow.open('瀹㈡埛绉垎璋冩暣', this.info)
+ }
+ },
+ open (title, goods) {
+ this.title = title
+ this.visible = true
+ this.info = goods
+ this.searchForm.memberId = goods.id
+ this.search()
+ },
+ handleClick (val) {
+ }
+ }
}
</script>
+<style scoped>
+.table-pagination{
+ position: fixed !important;
+ bottom: 50px;
+}
+.header-b{
+ display: inline-block;
+ font-size: 16px;
+ font-weight: bold;
+}
+.header-blue{
+ display: inline-block;
+ font-size: 12px;
+ border: 1px solid #216EEE;
+ padding: 2px 10px;
+ margin-left: 20px;
+ color: #216EEE;
+ border-radius: 5px ;
+}
+.header-btn{
+ display: inline-block;
+ border: none;
+ padding: 2px 10px;
+ margin-left: 20px;
+}
+.info-item{
+ display: flex;
+ width: 100%;
+ margin: 15px;
+}
+.info-item-a{
+ flex: 1;
+ font-size: 14px;
-<style lang="scss">
-.descriptions-label {
- width: 80px;
- text-align: right !important;
- display: block !important;;
+}
+.info-item-a span{
+ font-weight: 600;
+}
+.info-item-a .btn{
+ font-size: 12px !important;
+ cursor: pointer !important;
}
</style>
-
diff --git a/admin/src/components/business/OperaShopGoodsWindow.vue b/admin/src/components/business/OperaShopGoodsWindow.vue
new file mode 100644
index 0000000..736be16
--- /dev/null
+++ b/admin/src/components/business/OperaShopGoodsWindow.vue
@@ -0,0 +1,217 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="80%"
+ :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;">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="" prop="code" style="display: inline-block;margin-right: 30px;">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ラ棬搴桰D" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="" prop="saleType" style="display: inline-block;margin-right: 30px;">
+ <!-- 0姝e父 1绂佺敤 -->
+ <el-select v-model="searchForm.saleType" placeholder="閿�鍞ā寮�" @change="search" >
+ <el-option :key="0" :value="0" label="骞冲彴閾鸿揣" ></el-option>
+ <el-option :key="1" :value="1" label="鑷富閲囪喘" ></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" placeholder="璇烽�夋嫨鐘舵��" @change="search" >
+ <el-option :key="0" :value="0" label="姝e父" ></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>
+ <div :style="'display: flex;height:'+tabelHeight+'px;'">
+ <el-table
+ 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="name" label="鍚嶇О" fixed align="center" min-width="100px"> </el-table-column>
+ <el-table-column prop="code" label="闂ㄥ簵ID" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="bigAreaName" label="鎵�灞炲尯鍩�" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="areaFullName" label="鐪佸競鍖�" align="center" min-width="150px" show-overflow-tooltip>
+ <template slot-scope="{row}">
+ <span v-if="row.areas!=null">{{(row.areas.provinceName||'') + (row.areas.cityName||'') + (row.areas.name||'')}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="saleType" label="閿�鍞ā寮�" align="center" min-width="150px">
+ <template slot-scope="{row}">
+ {{ row.saleType == 1?'鑷富閲囪喘':'骞冲彴閾鸿揣'}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="status" label="鐘舵��" align="center" min-width="100px" fixed="right">
+ <template slot-scope="{row}">
+ {{ row.status == 1?'绂佺敤':'姝e父'}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="price" label="閿�鍞环" align="center" min-width="100px" fixed="right">
+ {{ price}}
+ </el-table-column>
+ <el-table-column prop="goodsPrice" label="渚涜揣浠�" align="center" min-width="100px" fixed="right">
+ <template slot-scope="scope">
+ <el-input v-if="scope.row.isPriceSelected" v-model="scope.row.goodsPrice"
+ @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.goodsPrice || '鏈缃�' }}</p>
+ </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'
+export default {
+ name: 'OperaShopGoodsWindow',
+ extends: BaseTable,
+ components: { GlobalWindow, TableLayout, Pagination },
+ data () {
+ return {
+ activeName: 'first',
+ title: '',
+ price : null,
+ visible: false,
+ tabelHeight: null,
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ goodsId: null,
+ username: '',
+ status: '',
+ saleType: '',
+ isrec: ''
+ }
+ }
+ },
+ mounted () {
+ window.addEventListener('resize', this.handleResize)
+ },
+ beforeDestroy () {
+ window.removeEventListener('resize', this.handleResize)
+ },
+ created () {
+ this.config({
+ module: '鍟嗗搧淇℃伅琛�',
+ api: '/business/shop',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.handleResize()
+ },
+ directives: {
+ focus: {
+ inserted: function (el) {
+ el.querySelector('input').focus()
+ }
+ }
+ },
+ methods: {
+ handleResize () {
+ this.tabelHeight = window.innerHeight - 300
+ },
+ open (title, goods) {
+ this.title = title
+ this.visible = true
+ this.price = goods.skuPrice
+ this.searchForm.goodsId = goods.id
+ this.search()
+ },
+ 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.oldGoodsPrice = row.goodsPrice
+ },
+ blurEvent (row, curIndex, column) {
+ if(this.price >= row.goodsPrice) {
+ this.$tip.error('渚涜揣浠蜂笉鑳戒綆浜庨攢鍞环')
+ row.isPriceSelected = !row.isPriceSelected
+ row.goodsPrice = row.oldGoodsPrice// 浠锋牸杩樺師
+ return
+ }
+ if( row.goodsPrice == row.oldGoodsPrice){
+ row.isPriceSelected = !row.isPriceSelected
+ return;
+ }
+ this.api.setGoodsPrice({
+ id: row.id,
+ goodsId: this.searchForm.goodsId,
+ goodsPrice: row.goodsPrice
+ }).then(res => {
+ row.oldGoodsPrice = row.goodsPrice
+ this.$tip.success('淇敼鎴愬姛')
+ this.$emit('success')
+ }).catch(e => {
+ row.goodsPrice = row.oldGoodsPrice// 浠锋牸杩樺師
+ }).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/member.vue b/admin/src/views/business/member.vue
index 1440ee6..5e28235 100644
--- a/admin/src/views/business/member.vue
+++ b/admin/src/views/business/member.vue
@@ -2,9 +2,43 @@
<TableLayout :permissions="['business:member:query']">
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
- <el-form-item label="鐢ㄦ埛" prop="nickname">
- <el-input v-model="searchForm.nickname" placeholder="璇疯緭鍏ユ樀绉�/鎵嬫満鍙�/鐪熷疄濮撳悕" @keypress.enter.native="search"></el-input>
+ <el-form-item label="鐢ㄦ埛" prop="nickname ">
+ <el-input v-model="searchForm.nickname" style="width: 160px" placeholder="鏄电О/鎵嬫満鍙�/鐪熷疄濮撳悕" @keypress.enter.native="search"></el-input>
</el-form-item>
+ <el-form-item label="鐘舵��" prop="status" >
+ <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>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍏宠仈缁忛攢鍟�" prop="shopName ">
+ <el-input v-model="searchForm.shopName" style="width: 160px" placeholder="缁忛攢鍟嗗悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <div class="date-style" style="display: inline">
+ <el-form-item label="鍒涘缓鏃堕棿" prop="queryStartDate" >
+ <el-date-picker
+ style="width: 160px"
+ v-model="searchForm.starttime"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ format="yyyy-MM-dd HH:mm:ss"
+ range-separator="鑷�"
+ placeholder="寮�濮嬫椂闂�"
+ ></el-date-picker>
+ </el-form-item>
+ <el-form-item label="-" label-width="10px" prop="queryEndDate" >
+ <el-date-picker
+ style="width: 160px"
+ v-model="searchForm.endtime"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ format="yyyy-MM-dd HH:mm:ss"
+ range-separator="鑷�"
+ placeholder="鎴鏃堕棿"
+ ></el-date-picker>
+ </el-form-item>
+ </div>
+
<section>
<el-button type="primary" @click="search">鎼滅储</el-button>
<el-button @click="reset">閲嶇疆</el-button>
@@ -12,23 +46,24 @@
</el-form>
<!-- 琛ㄦ牸鍜屽垎椤� -->
<template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:exportExcel' ]">
+ <li> <el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+ </ul>
<el-table
v-loading="isWorking.search"
:data="tableData.list"
stripe
border
>
- <el-table-column prop="creator" label="鐢ㄦ埛" align="center" min-width="100px">
- <template slot-scope="{row}">
- <el-image style="width: 60px; height: 60px; border-radius: 50%;" :src="row.imgFullUrl"></el-image>
- {{ row.nickName }}
- </template>
- </el-table-column>
+ <el-table-column prop="openid" label="寰俊openid" align="center" min-width="100px"></el-table-column>
<el-table-column prop="nickname" label="鏄电О" align="center" min-width="100px"></el-table-column>
- <el-table-column prop="name" label="鐪熷疄濮撳悕" align="center" min-width="100px"></el-table-column>
- <el-table-column prop="phone" label="鎵嬫満鍙�" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="name" label="瀹㈡埛濮撳悕" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎺堟潈鎵嬫満鍙�" align="center" min-width="100px"></el-table-column>
<el-table-column prop="idcard" label="韬唤璇佸彿" align="center" min-width="100px"></el-table-column>
- <el-table-column prop="integral" label="绉垎鏁伴噺" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="integral" label="鐜版湁绉垎" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="totalIntegral" label="绱绉垎" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="totalIntegral" label="绱鎵i櫎" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="shopName" label="鍏宠仈缁忛攢鍟�" align="center" min-width="100px"></el-table-column>
<el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center" min-width="140px"></el-table-column>
<el-table-column label="鐘舵��" align="center" min-width="100px">
<template slot-scope="{row}">
@@ -42,9 +77,10 @@
></el-switch>
</template>
</el-table-column>
- <el-table-column label="鎿嶄綔" align="center" min-width="100px">
+ <el-table-column label="鎿嶄綔" align="center" min-width="200px">
<template slot-scope="{row}">
<el-button type="text" @click="showMemberDetail(row)">璇︽儏</el-button>
+ <el-button type="text" v-if="row.bindShopId !=null" @click="changeShop(row)">鏇存崲缁忛攢鍟�</el-button>
</template>
</el-table-column>
</el-table>
@@ -54,7 +90,8 @@
:pagination="tableData.pagination"
>
</pagination>
- <OperaMemberDetail ref="operaMemberDetail" />
+ <OperaChangeShopWindow ref="OperaChangeShopWindow" @success="handlePageChange" />
+ <OperaMemberDetail ref="operaMemberDetail" @success="handlePageChange"/>
</template>
</TableLayout>
</template>
@@ -64,16 +101,21 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaMemberDetail from '@/components/business/OperaMemberDetail'
+import OperaChangeShopWindow from '@/components/business/OperaChangeShopWindow'
import { updateById } from '@/api/business/member'
export default {
name: 'Member',
extends: BaseTable,
- components: { TableLayout, Pagination, OperaMemberDetail },
+ components: { TableLayout, Pagination, OperaMemberDetail ,OperaChangeShopWindow},
data () {
return {
// 鎼滅储
searchForm: {
- nickname: ''
+ starttime: null,
+ endtime: null,
+ status: null,
+ nickname: '',
+ shopName: ''
}
}
},
@@ -87,6 +129,9 @@
this.search()
},
methods: {
+ changeShop(row){
+ this.$refs.OperaChangeShopWindow.open('鏇存崲缁忛攢鍟�',row)
+ },
statusChange(row) {
console.log(row);
updateById(row)
@@ -108,7 +153,7 @@
</script>
<style scoped>
-::v-deep .el-input{
+/*::v-deep .el-input{
width: 200px;
-}
+}*/
</style>
diff --git a/admin/src/views/business/memberCoupon.vue b/admin/src/views/business/memberCoupon.vue
index 7875ad1..18a6639 100644
--- a/admin/src/views/business/memberCoupon.vue
+++ b/admin/src/views/business/memberCoupon.vue
@@ -2,7 +2,7 @@
<TableLayout :permissions="['business:membercoupon:query']">
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
- <el-form-item label="鐢ㄦ埛" prop="nikeName">
+ <el-form-item label="鐢ㄦ埛" prop="nikeName" >
<el-input v-model="searchForm.nikeName" placeholder="璇疯緭鍏ョ敤鎴锋樀绉�/鎵嬫満鍙� " clearable @keypress.enter.native="search"></el-input>
</el-form-item>
<el-form-item label="浼樻儬鍒稿悕绉�" prop="name">
@@ -47,7 +47,7 @@
:data="tableData.list"
stripe
>
- <el-table-column prop="nikeName" label="鐢ㄦ埛" min-width="100px"></el-table-column>
+ <el-table-column prop="nikeName" label="鐢ㄦ埛" min-width="180px"></el-table-column>
<el-table-column prop="name" label="浼樻儬鍒稿悕绉�" min-width="100px"></el-table-column>
<el-table-column prop="couponType" label="浼樻儬鍒哥被鍨�" min-width="100px">
<template slot-scope="{row}">
diff --git a/admin/src/views/business/platformGoods.vue b/admin/src/views/business/platformGoods.vue
index 8add1f5..b37bda1 100644
--- a/admin/src/views/business/platformGoods.vue
+++ b/admin/src/views/business/platformGoods.vue
@@ -68,9 +68,9 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
- <el-table-column prop="imgurl" label="鍟嗗搧淇℃伅" min-width="100px">
+ <el-table-column prop="imgurl" label="鍟嗗搧淇℃伅" min-width="80px">
<template slot-scope="{row}">
- <el-image style="width: 80px;height: 80px;" v-if="row.imgurl && row.imgurl!=''" :src="row.resourcePath+row.imgurl" :preview-src-list="[row.resourcePath+row.imgurl]"></el-image>
+ <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="150px" ></el-table-column>
@@ -78,14 +78,14 @@
<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="price" label="灞曠ず浠锋牸" min-width="100px"></el-table-column>
- <el-table-column prop="stockNum" label="鍓╀綑搴撳瓨閲�" min-width="100px"></el-table-column>
- <el-table-column prop="salesVolume" label="瀹為檯閿�閲�" min-width="100px"></el-table-column>
- <el-table-column prop="skuPrice" label="闆跺敭浠�(鍏�)" min-width="100px"></el-table-column>
+ <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.shopPriceNum||0}}</span> / <span class="green"> {{row.shopNum||0}}</span> </div>
+ <div @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>
+ <el-table-column prop="salesVolume" label="瀹為檯閿�閲�" min-width="100px"></el-table-column>
<el-table-column prop="editDate" label="鏈�杩戞洿鏂版椂闂�" min-width="100px"></el-table-column>
<el-table-column prop="status" label="涓婁笅鏋剁姸鎬�" min-width="100px" fixed="right" align="center">
<template slot-scope="{row}">
@@ -105,10 +105,10 @@
fixed="right"
>
<template slot-scope="{row}">
- <el-button type="text" @click="$refs.operaGoodsWindow.open('缂栬緫鍟嗗搧', row, 0)" v-permissions="['business:goods:update']">缂栬緫</el-button>
+ <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" 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>-->
+ <!-- <el-button type="text" @click="$refs.operaGoodsDetailWindow.open('鍟嗗搧璇︽儏', row, 0)">鏌ョ湅璇︽儏</el-button>-->
</template>
</el-table-column>
</el-table>
@@ -123,6 +123,7 @@
<OperaGoodsWindow ref="operaGoodsWindow" @success="handlePageChange"/>
<OperaGoodsDetailWindow ref="operaGoodsDetailWindow"/>
<OperaPlatformGoodsSkuWindow ref="operaPlatformGoodsSkuWindow"/>
+ <OperaShopGoodsWindow ref="OperaShopGoodsWindow" @success="priceSuccess"/>
</TableLayout>
</template>
@@ -133,11 +134,12 @@
import OperaGoodsWindow from '@/components/business/OperaGoodsWindow'
import OperaGoodsDetailWindow from '@/components/business/OperaGoodsDetailWindow'
import OperaPlatformGoodsSkuWindow from '@/components/business/OperaPlatformGoodsSkuWindow'
+import OperaShopGoodsWindow from '@/components/business/OperaShopGoodsWindow'
import { findAll as labelList } from '@/api/business/labels'
export default {
name: 'Goods',
extends: BaseTable,
- components: { TableLayout, Pagination, OperaGoodsWindow, OperaGoodsDetailWindow, OperaPlatformGoodsSkuWindow },
+ components: { TableLayout, Pagination, OperaGoodsWindow, OperaGoodsDetailWindow, OperaPlatformGoodsSkuWindow ,OperaShopGoodsWindow},
data () {
return {
activeName: 'first',
@@ -199,10 +201,18 @@
})
},
methods: {
+ priceSuccess(){
+ this.handlePageChange()
+ },
goPriceSet(row){
-
+ if(row.skuPrice == null){
+ this.$tip.warning('璇峰厛璁剧疆鍟嗗搧閿�鍞环锛�')
+ return
+ }
+ this.$refs.OperaShopGoodsWindow.open('璁剧疆渚涜揣浠� - '+row.name, row )
},
handleClick (val) {
+
},
/**
*
@@ -224,10 +234,10 @@
statusChangeBiz (rows) {
this.api.updateStatus(rows)
.then(() => {
- this.search()
+ this.handlePageChange()
})
.catch(e => {
- this.search()
+ this.handlePageChange()
})
}
}
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java
index 001cc11..4cfcad6 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java
@@ -89,7 +89,6 @@
model.setStrType("鏀嚭");
}
model.setStrObjType(Constants.IntegralObjType.getName(model.getObjType()));
-
}
ExcelExporter.build(Integral.class).export(list, "鐢ㄦ埛绉垎鏄庣粏"+ DateUtil.getNowLongTime(), response);
}
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberController.java
index 24a5071..2d732a7 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -7,6 +7,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.Integral;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.system.dto.MemberRechargeDTO;
import com.doumee.service.business.MemberService;
@@ -72,6 +73,20 @@
memberService.updateById(member);
return ApiResponse.success(null);
}
+ @ApiOperation("鏇存崲缁忛攢鍟�")
+ @PostMapping("/updateShop")
+ @RequiresPermissions("business:member:update")
+ public ApiResponse updateShop(@RequestBody Member member) {
+ memberService.updateShop(member);
+ return ApiResponse.success(null);
+ }
+ @ApiOperation("璋冩暣绉垎")
+ @PostMapping("/updateIntegral")
+ @RequiresPermissions("business:member:update")
+ public ApiResponse updateIntegral(@RequestBody Integral param) {
+ memberService.updateIntegral(param);
+ return ApiResponse.success(null);
+ }
@ApiOperation("鍒嗛〉鏌ヨ")
@PostMapping("/page")
@@ -104,6 +119,12 @@
ExcelExporter.build(MemberRechargeDTO.class).export(collect, "鐢ㄦ埛淇℃伅琛�", response);
}
}
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcelList")
+ @RequiresPermissions("business:member:exportExcel")
+ public void exportExcelList (@RequestBody PageWrap<Member> pageWrap, HttpServletResponse response) {
+ ExcelExporter.build(Member.class).export( memberService.findPage(pageWrap).getRecords(), "鐢ㄦ埛淇℃伅琛�", response);
+ }
@ApiOperation("鏍规嵁ID鏌ヨ")
@GetMapping("/{id}")
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java
index 66a9497..758da45 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java
@@ -40,6 +40,13 @@
public ApiResponse create(@RequestBody Shop shop) {
return ApiResponse.success(shopService.create(shop));
}
+ @PreventRepeat
+ @ApiOperation("璁剧疆渚涜揣浠�")
+ @PostMapping("/setGoodsPrice")
+ @RequiresPermissions("business:shop:update")
+ public ApiResponse setGoodsPrice(@RequestBody Shop shop) {
+ return ApiResponse.success(shopService.setGoodsPrice(shop));
+ }
@ApiOperation("鏍规嵁ID鍒犻櫎")
@GetMapping("/delete/{id}")
@@ -90,8 +97,8 @@
@ApiOperation("鏌ヨ鎵�鏈夋暟鎹�")
@PostMapping("/findAll")
@RequiresPermissions("business:shop:query")
- public ApiResponse<List<Shop>> findAll (@RequestBody PageWrap<Shop> pageWrap) {
- return ApiResponse.success(shopService.findAll(pageWrap));
+ public ApiResponse<List<Shop>> findAll (@RequestBody Shop pageWrap) {
+ return ApiResponse.success(shopService.findList(pageWrap));
}
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/UserActionController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/UserActionController.java
new file mode 100644
index 0000000..3725cca
--- /dev/null
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/UserActionController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.UserAction;
+import com.doumee.service.business.UserActionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/12/14 13:57
+ */
+@Api(tags = "浜哄憳鎿嶄綔璁板綍鏃ュ織")
+@RestController
+@RequestMapping("/business/userAction")
+public class UserActionController extends BaseController {
+
+ @Autowired
+ private UserActionService userActionService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:useraction:create")
+ public ApiResponse create(@RequestBody UserAction userAction) {
+ return ApiResponse.success(userActionService.create(userAction));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:useraction:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ userActionService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:useraction:delete")
+ public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+ String [] idArray = ids.split(",");
+ List<Integer> idList = new ArrayList<>();
+ for (String id : idArray) {
+ idList.add(Integer.valueOf(id));
+ }
+ userActionService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:useraction:update")
+ public ApiResponse updateById(@RequestBody UserAction userAction) {
+ userActionService.updateById(userAction);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:useraction:query")
+ public ApiResponse<PageData<UserAction>> findPage (@RequestBody PageWrap<UserAction> pageWrap) {
+ return ApiResponse.success(userActionService.findPage(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:useraction:exportExcel")
+ public void exportExcel (@RequestBody PageWrap<UserAction> pageWrap, HttpServletResponse response) {
+ ExcelExporter.build(UserAction.class).export(userActionService.findPage(pageWrap).getRecords(), "浜哄憳鎿嶄綔璁板綍鏃ュ織", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:useraction:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(userActionService.findById(id));
+ }
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java b/server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
index 9a78203..b2cb97c 100644
--- a/server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -864,8 +864,6 @@
SYSTEM_RECHARGE(12,"骞冲彴鍏呭��","骞冲彴鍏呭��",0),
SYSTEM_DEDUCT(13,"骞冲彴鎵f","骞冲彴鎵f",0),
SHOP_ORDER_CANCEL(14,"绉垎鎶垫墸鍟嗗搧閫�杩�","绉垎鎶垫墸鍟嗗搧閫�杩�",0),
-
-
ORDER_DONATE(15,"璁㈠崟璧犻�佺Н鍒�","璁㈠崟璧犻�佺Н鍒�",0),
ORDER_DONE_AMOUNT(16,"璁㈠崟缁撶畻閲戦","璁㈠崟缁撶畻閲戦",0),
@@ -1147,5 +1145,52 @@
}
}
+ public enum UserActionType {
+ CHANGE_SHOP(0, "缁忛攢鍟嗘洿鎹�","鐢便��${param1}銆戜簬銆�${param2}銆戯紝杩涜銆愮粡閿�鍟嗘洿鎹€��" ),
+ ;
+ // 鎴愬憳鍙橀噺
+ private int key;
+ private String name;
+ private String info;
+
+ // 鏋勯�犳柟娉�
+ UserActionType(int key, String name,String info ) {
+ this.key = key;
+ this.info = info;
+ this.name = name;
+ }
+ public static String getName(int index) {
+ for (UserActionType c : UserActionType.values()) {
+ if (c.getKey() == index) {
+ return c.name;
+ }
+ }
+ return null;
+ }
+
+ public int getKey() {
+ return key;
+ }
+
+ public void setKey(int key) {
+ this.key = key;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+ public void setInfo(String info) {
+ this.info = info;
+ }
+ }
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberMapper.java
index ff16de5..2d166c9 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberMapper.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Member;
+import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@@ -11,7 +12,7 @@
* @author 姹熻箘韫�
* @date 2023/03/21 15:48
*/
-public interface MemberMapper extends BaseMapper<Member> {
+public interface MemberMapper extends MPJBaseMapper<Member> {
/**
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/UserActionMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/UserActionMapper.java
new file mode 100644
index 0000000..1f8abd8
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/UserActionMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.UserAction;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface UserActionMapper extends MPJBaseMapper<UserAction> {
+
+}
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 f836338..ef29758 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
@@ -202,6 +202,12 @@
@ApiModelProperty(value = "鍟嗗搧SKU瑙勬牸缁�")
@TableField(exist = false)
private List<GoodsSku> goodsSkuList;
+ @ApiModelProperty(value = "渚涢姺鍟嗘暟閲�")
+ @TableField(exist = false)
+ private Long shopNum;
+ @ApiModelProperty(value = "宸茶缃緵閵峰晢鏁伴噺")
+ @TableField(exist = false)
+ private Long pricedShopNum;
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java
index a9e72fa..4a5c6f2 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -23,130 +23,129 @@
public class Member {
@ApiModelProperty(value = "涓婚敭", example = "1")
- @ExcelColumn(name="涓婚敭")
+ // @ExcelColumn(name="涓婚敭")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
- @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ // @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
private Integer creator;
@ApiModelProperty(value = "鍒涘缓鏃堕棿")
- @ExcelColumn(name="鍒涘缓鏃堕棿")
-
+ @ExcelColumn(name="鍒涘缓鏃堕棿",width = 10,index = 8,dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createDate;
@ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
- @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ // @ExcelColumn(name="鏇存柊浜虹紪鐮�")
private Integer editor;
@ApiModelProperty(value = "鏇存柊鏃堕棿")
- @ExcelColumn(name="鏇存柊鏃堕棿")
+ // @ExcelColumn(name="鏇存柊鏃堕棿")
private Date editDate;
@ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
- @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ // @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
private Integer isdeleted;
@ApiModelProperty(value = "澶囨敞")
- @ExcelColumn(name="澶囨敞")
+ // @ExcelColumn(name="澶囨敞")
private String remark;
@ApiModelProperty(value = "鏄电О")
- @ExcelColumn(name="鏄电О")
+ @ExcelColumn(name="鏄电О",width = 10,index = 2)
private String nickname;
@ApiModelProperty(value = "澶村儚")
- @ExcelColumn(name="澶村儚")
+ // @ExcelColumn(name="澶村儚")
private String imgurl;
@ApiModelProperty(value = "鐪熷疄濮撳悕")
- @ExcelColumn(name="鐪熷疄濮撳悕")
+ @ExcelColumn(name="瀹㈡埛濮撳悕",width = 10,index = 3)
private String name;
@ApiModelProperty(value = "鎵嬫満鍙�")
- @ExcelColumn(name="鎵嬫満鍙�")
+ @ExcelColumn(name="鎺堟潈鎵嬫満鍙�",width = 10,index = 4)
private String phone;
@ApiModelProperty(value = "韬唤璇佸彿")
- @ExcelColumn(name="韬唤璇佸彿")
+ // @ExcelColumn(name="韬唤璇佸彿")
private String idcard;
@ApiModelProperty(value = "韬唤璇佹闈㈢収")
- @ExcelColumn(name="韬唤璇佹闈㈢収")
+ // @ExcelColumn(name="韬唤璇佹闈㈢収")
private String idcardImg;
@ApiModelProperty(value = "韬唤璇佸弽闈㈢収")
- @ExcelColumn(name="韬唤璇佸弽闈㈢収")
+ // @ExcelColumn(name="韬唤璇佸弽闈㈢収")
private String idcardImgBack;
@ApiModelProperty(value = "绉垎浣欓", example = "1")
- @ExcelColumn(name="绉垎浣欓")
+ @ExcelColumn(name="绉垎浣欓",width = 10,index = 5)
private BigDecimal integral;
@ApiModelProperty(value = "绉垎绱", example = "1")
- @ExcelColumn(name="绉垎绱")
+ @ExcelColumn(name="绉垎绱鑾峰緱",width = 10,index = 6)
private BigDecimal totalIntegral;
@ApiModelProperty(value = "鐘舵��0姝e父 1寮傚父", example = "1")
- @ExcelColumn(name="鐘舵��0姝e父 1寮傚父")
+ @ExcelColumn(name="鐘舵��",width = 10,index =9,valueMapping = "0=鍚敤;1=绂佺敤")
private Integer status;
@ApiModelProperty(value = "鎬у埆 0鐢� 1濂� 2鏈煡", example = "1")
- @ExcelColumn(name="鎬у埆 0鐢� 1濂� 2鏈煡")
+ // @ExcelColumn(name="鎬у埆 0鐢� 1濂� 2鏈煡")
private Integer sex;
@ApiModelProperty(value = "瀹氫綅缁忓害", example = "1")
- @ExcelColumn(name="瀹氫綅缁忓害")
+ // @ExcelColumn(name="瀹氫綅缁忓害")
private BigDecimal longitude;
@ApiModelProperty(value = "瀹氫綅缁村害", example = "1")
- @ExcelColumn(name="瀹氫綅缁村害")
+ // @ExcelColumn(name="瀹氫綅缁村害")
private BigDecimal latitude;
@ApiModelProperty(value = "褰撳墠鎵�鍦ㄥ煄甯傜紪鐮侊紙鍏宠仈areas琛級", example = "1")
- @ExcelColumn(name="褰撳墠鎵�鍦ㄥ煄甯傜紪鐮侊紙鍏宠仈areas琛級")
+ // @ExcelColumn(name="褰撳墠鎵�鍦ㄥ煄甯傜紪鐮侊紙鍏宠仈areas琛級")
private Integer cityId;
@ApiModelProperty(value = "鍦板潃")
- @ExcelColumn(name="鍦板潃")
+ // @ExcelColumn(name="鍦板潃")
private String addr;
@ApiModelProperty(value = "绫诲瀷 0鏅�氱敤鎴�", example = "1")
- @ExcelColumn(name="绫诲瀷 0鏅�氱敤鎴�")
+ // @ExcelColumn(name="绫诲瀷 0鏅�氱敤鎴�")
private Integer type;
@ApiModelProperty(value = "涓�鍙ヨ瘽浠嬬粛")
- @ExcelColumn(name="涓�鍙ヨ瘽浠嬬粛")
+ // @ExcelColumn(name="涓�鍙ヨ瘽浠嬬粛")
private String info;
@ApiModelProperty(value = "鏁版嵁鏉ユ簮 0灏忕▼搴忔敞鍐� 1鍚庡彴褰曞叆", example = "1")
- @ExcelColumn(name="鏁版嵁鏉ユ簮 0灏忕▼搴忔敞鍐� 1鍚庡彴褰曞叆")
+ // @ExcelColumn(name="鏁版嵁鏉ユ簮 0灏忕▼搴忔敞鍐� 1鍚庡彴褰曞叆")
private Integer origin;
@ApiModelProperty(value = "閭�璇蜂汉缂栫爜锛堝叧鑱攎ember琛級", example = "1")
- @ExcelColumn(name="閭�璇蜂汉缂栫爜锛堝叧鑱攎ember琛級")
+ // @ExcelColumn(name="閭�璇蜂汉缂栫爜锛堝叧鑱攎ember琛級")
private Integer recId;
@ApiModelProperty(value = "閭�璇峰鍔卞挅璞�", example = "1")
- @ExcelColumn(name="閭�璇峰鍔卞挅璞�")
+ // @ExcelColumn(name="閭�璇峰鍔卞挅璞�")
private BigDecimal recIntegral;
@ApiModelProperty(value = "娉ㄥ唽濂栧姳鍜栬眴", example = "1")
- @ExcelColumn(name="娉ㄥ唽濂栧姳鍜栬眴")
+ // @ExcelColumn(name="娉ㄥ唽濂栧姳鍜栬眴")
private BigDecimal registerIntegral;
@ApiModelProperty(value = "寰俊openId")
- @ExcelColumn(name="寰俊openId")
+ @ExcelColumn(name="寰俊openId",width = 10,index = 1)
private String openId;
@ApiModelProperty(value = "鐢熸棩")
- @ExcelColumn(name="birthday")
+ // @ExcelColumn(name="birthday")
private Date birthday;
@ApiModelProperty(value = "寰俊鍒嗕韩鐮�")
- @ExcelColumn(name="sharingCode")
+ // @ExcelColumn(name="sharingCode")
private String sharingCode;
@ApiModelProperty(value = "缁戝畾鍟嗛摵涓婚敭 shop:id 鍒嗛攢浜�")
@@ -159,8 +158,10 @@
@ApiModelProperty(value = "鐢ㄦ埛鎵�鍦ㄥ煄甯�")
@TableField(exist = false)
private String cityName;
-
-
+ @ApiModelProperty(value = "缁忛攢鍟嗗悕绉�")
+ @TableField(exist = false)
+ @ExcelColumn(name = "鍏宠仈缁忛攢鍟�",width = 10,index = 7)
+ private String shopName;
@ApiModelProperty(value = "寮�濮嬫椂闂� ")
@TableField(exist = false)
private Date starttime;
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 0530b95..ee9dd3f 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
@@ -265,6 +265,9 @@
@ApiModelProperty(value = "浼樻儬鍒革細浼樻儬鍒搁鍙栨�绘暟")
@TableField(exist = false)
private BigDecimal couponDrawCount;
+ @ApiModelProperty(value = "鍟嗗搧缂栫爜")
+ @TableField(exist = false)
+ private Integer goodsId;
@ApiModelProperty(value = "浼樻儬鍒革細浼樻儬鍒镐娇鐢ㄦ�绘暟(寮�)")
@TableField(exist = false)
@@ -273,6 +276,9 @@
@ApiModelProperty(value = "浼樻儬鍒革細浼樻儬鍒镐娇鐢ㄩ噾棰�(鍏�)")
@TableField(exist = false)
private BigDecimal couponUserMoney;
+ @ApiModelProperty(value = "鏌愬晢鍝佷緵璐т环(鍏�)")
+ @TableField(exist = false)
+ private BigDecimal goodsPrice;
@ApiModelProperty(value = "搴楅摵鏍囩")
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java
index 593640d..a513aa9 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java
@@ -55,6 +55,9 @@
@ApiModelProperty(value = "鍟嗘埛涓婚敭锛坰hop涓婚敭锛�", example = "1")
@ExcelColumn(name="鍟嗘埛涓婚敭锛坰hop涓婚敭锛�")
private Integer shopId;
+ @ApiModelProperty(value = "鍟嗗搧缂栫爜锛坓oods涓婚敭锛�", example = "1")
+ @ExcelColumn(name="鍟嗗搧缂栫爜锛坓oods涓婚敭锛�")
+ private Integer goodsId;
@ApiModelProperty(value = "鍟嗗搧SKU ID锛坓oods_sku涓婚敭锛�", example = "1")
@ExcelColumn(name="鍟嗗搧SKU ID锛坓oods_sku涓婚敭锛�")
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/UserAction.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/UserAction.java
new file mode 100644
index 0000000..5eecd04
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/UserAction.java
@@ -0,0 +1,97 @@
+package com.doumee.dao.business.model;
+
+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.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 浜哄憳淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+@ApiModel("浜哄憳淇℃伅琛�")
+@TableName("`user_action`")
+public class UserAction {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+ @ApiModelProperty(value = "淇敼璇︾粏鍐呭")
+ @ExcelColumn(name="淇敼璇︾粏鍐呭")
+ private String content;
+
+ @ApiModelProperty(value = "鏇存敼鍓嶅唴瀹�", example = "1")
+ private String beforeInfo;
+
+ @ApiModelProperty(value = "鏇存敼鍚庡唴瀹�", example = "1")
+ private String afterInfo;
+
+ @ApiModelProperty(value = "绫诲瀷 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎浜哄憳 10鏇存柊浜哄憳", example = "1")
+ @ExcelColumn(name="绫诲瀷 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎浜哄憳 10鏇存柊浜哄憳")
+ private Integer type;
+
+ @ApiModelProperty(value = "浜哄憳鎿嶄綔璁板綍鏃ュ織")
+ @ExcelColumn(name="浜哄憳鎿嶄綔璁板綍鏃ュ織")
+ private String memberId;
+
+ @ApiModelProperty(value = "鎿嶄綔鍓嶇姸鎬� 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎", example = "1")
+ @ExcelColumn(name="鎿嶄綔鍓嶇姸鎬� 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎")
+ private Integer beforeStatus;
+
+ @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
+ @TableField(exist = false)
+ private String createName;
+
+ @ApiModelProperty(value = "浜哄憳绫诲瀷锛�0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳", example = "1")
+ @TableField(exist = false)
+ private String memberType;
+
+ @ApiModelProperty(value = "鎿嶄綔瀵硅薄", example = "1")
+ @TableField(exist = false)
+ private String memberName;
+
+ @ApiModelProperty(value = "绫诲瀷鍚嶇О", example = "1")
+ @TableField(exist = false)
+ private String typeName;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�", example = "1")
+ @TableField(exist = false)
+ private String mobile;
+ @ApiModelProperty(value = "鏌ヨ瀵硅薄绫诲瀷 0浜哄憳鎿嶄綔 1鍏朵粬涓氬姟鎿嶄綔", example = "1")
+ @TableField(exist = false)
+ private Integer objType;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
index 74b10eb..cb33f25 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -3,6 +3,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Areas;
+import com.doumee.dao.business.model.Integral;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.system.dto.MemberRechargeDTO;
import com.doumee.dao.web.dto.MemberOwnDTO;
@@ -193,4 +194,8 @@
* @return
*/
Integer changeMemberRechargeBatch(MemberRechargeDTO memberRechargeDTO);
+
+ void updateShop(Member member);
+
+ void updateIntegral(Integral param);
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
index d2e7d19..a1414f0 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
@@ -160,4 +160,6 @@
ShopDataStatisticsDTO getShopDataStatisticsDTO(Integer shopId);
void resetPwd(Shop dto);
+
+ String setGoodsPrice(Shop shop);
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/UserActionService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/UserActionService.java
new file mode 100644
index 0000000..df101c2
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/UserActionService.java
@@ -0,0 +1,98 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.UserAction;
+
+import java.util.List;
+
+/**
+ * 浜哄憳鎿嶄綔璁板綍鏃ュ織Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/12/14 13:57
+ */
+public interface UserActionService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param userAction 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(UserAction userAction);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param userAction 瀹炰綋瀵硅薄
+ */
+ void delete(UserAction userAction);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param userAction 瀹炰綋瀵硅薄
+ */
+ void updateById(UserAction userAction);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param userActions 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<UserAction> userActions);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return UserAction
+ */
+ UserAction findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param userAction 瀹炰綋瀵硅薄
+ * @return UserAction
+ */
+ UserAction findOne(UserAction userAction);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param userAction 瀹炰綋瀵硅薄
+ * @return List<UserAction>
+ */
+ List<UserAction> findList(UserAction userAction);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<UserAction>
+ */
+ PageData<UserAction> findPage(PageWrap<UserAction> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param userAction 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(UserAction userAction);
+}
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 741055a..2d8af53 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
@@ -89,6 +89,8 @@
@Autowired
private SystemDictDataBiz systemDictDataBiz;
+ @Autowired
+ private ShopMapper shopMapper;
@Autowired
private GoodsSkuAttrJoinMapper goodsSkuAttrJoinMapper;
@@ -214,8 +216,9 @@
|| goods.getDeductRata() == null
|| goods.getPrice() == null
|| goods.getSkuPrice() == null
- || StringUtils.isBlank(goods.getImgurl())
- || org.apache.commons.collections.CollectionUtils.isEmpty(goods.getFileList())) {
+// || StringUtils.isBlank(goods.getImgurl())
+// || org.apache.commons.collections.CollectionUtils.isEmpty(goods.getFileList())
+ ) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
}
@@ -730,6 +733,7 @@
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 ");
//瀹為檯閿�閲�
queryWrapper.select("(select sum(gd.GOODS_NUM) from goodsorder_detail gd" +
" inner join goods_sku gs on gs.id=gd.GOODS_SKU_ID" +
@@ -781,9 +785,12 @@
if (list == null || list.size() == 0) {
return;
}
+ long shopNum = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
+ .eq(Shop::getIsdeleted,Constants.ZERO));
String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
for (Goods goods : list) {
+ goods.setShopNum(shopNum);
goods.setResourcePath(path);
//鏌ヨsku
MPJLambdaWrapper<GoodsSku> queryWrapper = new MPJLambdaWrapper<GoodsSku>()
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
index bd8aeb3..16cf274 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -339,6 +339,7 @@
String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
for (Integral model : result.getRecords()) {
+ model.setStrObjType(Constants.IntegralObjType.getName(model.getObjType()));
if (StringUtils.isNotBlank(model.getImgurl())) {
model.setImgurl(path + model.getImgurl());
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 1dfd46f..017cbe5 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -19,13 +19,9 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.core.wx.WxMiniConfig;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.SmsrecordMapper;
+import com.doumee.dao.business.*;
import com.doumee.dao.business.join.MemberJoinMapper;
-import com.doumee.dao.business.model.Areas;
-import com.doumee.dao.business.model.Goodsorder;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.Smsrecord;
+import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.MemberRechargeDTO;
import com.doumee.dao.web.dto.MemberOwnDTO;
@@ -67,7 +63,7 @@
import java.util.stream.Collectors;
/**
- * 鐢ㄦ埛淇℃伅琛⊿ervice瀹炵幇
+ * 瀹㈡埛淇℃伅琛⊿ervice瀹炵幇
* @author 姹熻箘韫�
* @date 2023/03/21 15:48
*/
@@ -77,6 +73,12 @@
@Autowired
private MemberMapper memberMapper;
+ @Autowired
+ private IntegralMapper integralMapper;
+ @Autowired
+ private ShopMapper shopMapper;
+ @Autowired
+ private UserActionMapper userActionMapper;
@Autowired
private SmsrecordMapper smsrecordMapper;
@@ -136,6 +138,109 @@
member.setEditor(user.getId());
memberMapper.updateById(member);
}
+ @Override
+ @Transactional
+ public void updateShop(Member member) {
+ if(member.getBindShopId()==null || member.getId()==null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ MPJLambdaWrapper<Member> queryWrapper =new MPJLambdaWrapper<>();
+ queryWrapper.selectAll(Member.class);
+ queryWrapper.selectAs(Shop::getName,Member::getShopName);
+ queryWrapper.leftJoin(Shop.class, Shop::getId,Member::getBindShopId);
+ queryWrapper.eq(Member::getId,member.getId());
+ Member model = memberMapper.selectJoinOne(Member.class,queryWrapper);
+ if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀹㈡埛淇℃伅鏌ヨ鏃犳晥锛�");
+ }
+ if(model.getBindShopId() == null){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀹㈡埛灏氭湭缁戝畾缁忛攢鍟嗕俊鎭紝鏃犳硶鏇存崲锛�");
+ }
+ if(Constants.equalsInteger(model.getBindShopId() ,member.getBindShopId())){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨鏂扮殑缁忛攢鍟嗭紒");
+ }
+
+ Shop shop = shopMapper.selectById(member.getBindShopId());
+ if(shop == null ||Constants.equalsObject(shop.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"缁忛攢鍟嗕俊鎭煡璇㈡棤鏁堬紒");
+ }
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+
+ Date date = new Date();
+ memberMapper.update(null,new UpdateWrapper<Member>().lambda()
+ .eq(Member::getId,member.getId())
+ .set(Member::getEditDate,date)
+ .set(Member::getEditor,user.getId())
+ .set(Member::getBindShopId,member.getBindShopId())
+ );
+ //鏇存崲鏃ュ織璁板綍
+ UserActionServiceImpl.saveUserActionBiz(user,member.getId(),
+ Constants.UserActionType.CHANGE_SHOP,
+ userActionMapper,
+ date,
+ new String[]{user.getUsername(),DateUtil.getPlusTime2(date)},
+ JSONObject.toJSONString(member) ,
+ model.getShopName(), shop.getName());
+ }
+ @Override
+ @Transactional
+ public void updateIntegral(Integral param) {
+ if(param.getMemberId()==null || param.getType()==null
+ || param.getType()<0
+ || param.getType()>2
+ || Constants.formatBigdecimal(param.getNum()).compareTo(new BigDecimal(0))<=0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+
+ MPJLambdaWrapper<Member> queryWrapper =new MPJLambdaWrapper<>();
+ queryWrapper.selectAll(Member.class);
+ queryWrapper.selectAs(Shop::getName,Member::getShopName);
+ queryWrapper.leftJoin(Shop.class, Shop::getId,Member::getBindShopId);
+ queryWrapper.eq(Member::getId,param.getMemberId());
+ Member model = memberMapper.selectJoinOne(Member.class,queryWrapper);
+ if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀹㈡埛淇℃伅鏌ヨ鏃犳晥锛�");
+ }
+
+ BigDecimal num = param.getNum();
+ if(param.getType() == 1 &&Constants.formatBigdecimal(model.getIntegral()).compareTo(param.getNum())<0){
+ //濡傛灉鏄噺灏戯紝鍒ゆ柇鐢ㄦ埛浣欓鏄惁婊¤冻
+ num = num.multiply(new BigDecimal(-1));//鍑忓皯
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄦ埛璐︽埛浣欓涓嶈冻锛�");
+ }
+
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+
+ Date date = new Date();
+ //璐︽埛浣欓
+ memberMapper.update(null,new UpdateWrapper<Member>().lambda()
+ .eq(Member::getId,model.getId())
+ .set(Member::getEditDate,date)
+ .set(Member::getEditor,user.getId())
+ .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//绱澧炲姞
+ .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum())
+ .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum()));
+
+ Constants.IntegralObjType integralObjType = param.getType()==0?Constants.IntegralObjType.SYSTEM_RECHARGE:Constants.IntegralObjType.SYSTEM_DEDUCT;
+
+ Integral integral = new Integral();
+ integral.setMemberId(model.getId());
+ integral.setCreateDate(new Date());
+ integral.setCreator(user.getId());
+ integral.setIsdeleted(Constants.ZERO);
+ integral.setTitle(integralObjType.getName());
+ integral.setContent(integralObjType.getNoteinfo());
+ integral.setObjId(model.getId());
+ integral.setObjType(integralObjType.getKey());
+ integral.setType(param.getType());
+ integral.setRemark(param.getRemark());
+ integral.setNum(param.getNum());
+ integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(integral.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(integral.getNum()));
+ integral.setOrderCode(null);
+ integral.setUserType(Constants.ZERO);
+ integralMapper.insert(integral);
+
+ }
@Override
public void updateByIdInBatch(List<Member> members) {
@@ -179,13 +284,15 @@
MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
Utils.MP.blankToNull(pageWrap.getModel());
queryWrapper.selectAll(Member.class);
+ queryWrapper.selectAs(Shop::getName,Member::getShopName);
+ queryWrapper.leftJoin(Shop.class, Shop::getId,Member::getBindShopId);
queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getNickname()),ms->ms.like(Member::getNickname,pageWrap.getModel().getNickname())
.or().like(Member::getName,pageWrap.getModel().getNickname())
.or().like(Member::getPhone,pageWrap.getModel().getNickname())
);
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getShopName()),Shop::getStatus,pageWrap.getModel().getShopName());
queryWrapper.eq(pageWrap.getModel().getStatus()!=null,Member::getStatus,pageWrap.getModel().getStatus());
queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
-
queryWrapper.ge(pageWrap.getModel().getStarttime()!=null, Member::getCreateDate,pageWrap.getModel().getStarttime());
queryWrapper.le(pageWrap.getModel().getEndtime()!=null,Member::getCreateDate, pageWrap.getModel().getEndtime());
@@ -245,7 +352,7 @@
if (member == null) {
member = new Member();
member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png");
- member.setNickname("寰俊鐢ㄦ埛"+ CodeVerifyUtils.createVerificationCode(4));
+ member.setNickname("寰俊瀹㈡埛"+ CodeVerifyUtils.createVerificationCode(4));
member.setCreateDate(new Date());
member.setIsdeleted(Constants.ZERO);
member.setType(Constants.ZERO);
@@ -373,7 +480,7 @@
Integer mId = Optional.ofNullable(userInfo)
.map(s -> s.getMemberId())
- .orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢ㄦ埛ID缂哄け"));
+ .orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀹㈡埛ID缂哄け"));
Member member = new Member();
member.setId(mId);
member.setEditor(userInfo.getId());
@@ -505,7 +612,7 @@
if(phoneNums.size() != members.size()){
List<String> collect = members.stream().map(s -> s.getPhone()).collect(Collectors.toList());
List<String> unFindMember = phoneNums.stream().filter(s -> !collect.contains(s)).collect(Collectors.toList());
- throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),unFindMember.toString()+"涓嶅瓨鍦ㄨ鎵嬫満鍙风爜鐢ㄦ埛");
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),unFindMember.toString()+"涓嶅瓨鍦ㄨ鎵嬫満鍙风爜瀹㈡埛");
}
Map<String, MemberRechargeDTO> collect = dataList.stream().collect(Collectors.toMap(s -> s.getPhone(), s -> s));
members.forEach(s->{
@@ -550,7 +657,7 @@
Member member = memberMapper.selectById(memberRechargeDTO.getMemberId());
- //濡傛灉鎵i櫎閲戦澶т簬鐢ㄦ埛鎷ラ噾棰� 鍙栫敤鎴峰墿浣欓噾棰�
+ //濡傛灉鎵i櫎閲戦澶т簬瀹㈡埛鎷ラ噾棰� 鍙栧鎴峰墿浣欓噾棰�
BigDecimal integralNum = new BigDecimal(memberRechargeDTO.getNum());
if (Constants.equalsInteger(memberRechargeDTO.getIntegralType(),Constants.ONE)
&& (member.getIntegral().compareTo(integralNum) == -1)
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 bf94f58..28eff80 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
@@ -10,10 +10,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.LabelsMapper;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.ShopJoinMapper;
-import com.doumee.dao.business.ShopMapper;
+import com.doumee.dao.business.*;
import com.doumee.dao.business.join.ProductLabelJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.Labels;
@@ -61,6 +58,12 @@
@Autowired
private ShopMapper shopMapper;
+ @Autowired
+ private GoodsMapper goodsMapper;
+ @Autowired
+ private GoodsSkuMapper goodsSkuMapper;
+ @Autowired
+ private ShopGoodsRelationMapper shopGoodsRelationMapper;
@Autowired
private ShopCommentService shopCommentService;
@@ -330,6 +333,7 @@
@Override
public List<Shop> findList(Shop shop) {
+ shop.setIsdeleted(Constants.ZERO);
QueryWrapper<Shop> wrapper = new QueryWrapper<>(shop);
return shopMapper.selectList(wrapper);
}
@@ -341,6 +345,10 @@
Utils.MP.blankToNull(pageWrap.getModel());
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.selectAs(Labels::getName,Shop::getBigAreaName);
queryWrapper.selectAs(Member::getNickname,Shop::getNickName);
queryWrapper.selectAs(Member::getImgurl,Shop::getMemberImgurl);
@@ -356,7 +364,10 @@
queryWrapper.eq(pageWrap.getModel().getSaleType()!=null, Shop::getSaleType, pageWrap.getModel().getSaleType());
queryWrapper.eq(pageWrap.getModel().getStatus()!=null, Shop::getStatus, pageWrap.getModel().getStatus());
queryWrapper.eq(pageWrap.getModel().getIsrec()!=null, Shop::getIsrec, pageWrap.getModel().getIsrec());
- queryWrapper.orderByDesc(Shop::getCreateDate);
+ if(pageWrap.getModel().getGoodsId()!=null){
+ queryWrapper.orderByAsc("goodsPrice");
+ }
+ queryWrapper.orderByDesc(Shop::getId);
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();
@@ -585,4 +596,44 @@
updateUserDto.setPassword(Utils.Secure.encryptPassword( shop.getCode()+"@123456", shop.getSalt()));
shopMapper.updateById(updateUserDto);
}
+ @Override
+ @Transactional
+ public String setGoodsPrice(Shop dto){
+ // 鏌ヨ鐢ㄦ埛
+ Shop shop = shopMapper.selectById(dto.getId());
+ if (shop == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝渚涢攢鍟嗕俊鎭煡璇㈡棤鏁堬紒");
+ }
+ GoodsSku queryGoodsSku=new GoodsSku();
+ queryGoodsSku.setGoodsId(dto.getGoodsId());
+ queryGoodsSku.setIsdeleted(Constants.ZERO);
+ List<GoodsSku> goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<>(queryGoodsSku));
+ if(goodsSkuList==null || goodsSkuList.size() ==0){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇风‘璁ゅ晢鍝佷俊鎭湁鏁堜笖銆愰攢鍞环銆戝凡璁剧疆锛�");
+ }
+ //榛樿sku淇℃伅
+ GoodsSku goodsSku = goodsSkuList.get(0);
+ if(Constants.formatBigdecimal(goodsSku.getPrice()).compareTo(Constants.formatBigdecimal(dto.getGoodsPrice())) >=0){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝渚涜揣浠蜂笉鍏佽澶т簬鍟嗗搧閿�鍞环锛�");
+ }
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ //鍏堝垹闄ゅ師鏉ョ殑鏁版嵁
+ shopGoodsRelationMapper.delete(new QueryWrapper<ShopGoodsRelation>().lambda()
+ .eq(ShopGoodsRelation::getGoodsId,dto.getGoodsId())
+ .eq(ShopGoodsRelation::getShopId,shop.getId())
+ );
+ ShopGoodsRelation add =new ShopGoodsRelation();
+ add.setCreator(user.getId());
+ add.setCreateDate(new Date());
+ add.setIsdeleted(Constants.ZERO);
+ add.setEditor(add.getCreator());
+ add.setEditDate(add.getCreateDate());
+ add.setShopId(dto.getId());
+ add.setGoodsId(dto.getGoodsId());
+ add.setGoodsSkuId(goodsSku.getId());
+ add.setPrice(dto.getGoodsPrice());
+ add.setStatus(Constants.ZERO);
+ shopGoodsRelationMapper.insert(add);
+ return "鎿嶄綔鎴愬姛";
+ }
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/UserActionServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/UserActionServiceImpl.java
new file mode 100644
index 0000000..61d1d72
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/UserActionServiceImpl.java
@@ -0,0 +1,158 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.UserActionMapper;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.UserAction;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.UserActionService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 浜哄憳鎿嶄綔璁板綍鏃ュ織Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/12/14 13:57
+ */
+@Service
+public class UserActionServiceImpl implements UserActionService {
+
+ @Autowired
+ private UserActionMapper userActionMapper;
+
+
+ @Override
+ public Integer create(UserAction userAction) {
+ userActionMapper.insert(userAction);
+ return userAction.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ userActionMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(UserAction userAction) {
+ UpdateWrapper<UserAction> deleteWrapper = new UpdateWrapper<>(userAction);
+ userActionMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ userActionMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(UserAction userAction) {
+ userActionMapper.updateById(userAction);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<UserAction> userActions) {
+ if (CollectionUtils.isEmpty(userActions)) {
+ return;
+ }
+ for (UserAction userAction: userActions) {
+ this.updateById(userAction);
+ }
+ }
+ public static void saveUserActionBiz(LoginUserInfo user,
+ Integer bizId,
+ Constants.UserActionType type,
+ UserActionMapper userActionMapper,
+ Date date,
+ String[] params,
+ String modelInfo,
+ String before,
+ String after) {
+ String info = type.getInfo();
+ if(params!=null){
+ for (int i = 0; i < params.length; i++) {
+ info = info.replace("${param"+(i+1)+"}",params[i]);
+ }
+ }
+ UserAction userAction=new UserAction();
+ userAction.setIsdeleted(Constants.ZERO);
+ userAction.setCreateDate(date);
+ userAction.setCreator(user.getId());
+ userAction.setBeforeStatus(Constants.ZERO);
+ userAction.setType(type.getKey());
+ userAction.setContent(modelInfo);
+ userAction.setRemark(info);
+ userAction.setBeforeInfo(before);
+ userAction.setAfterInfo(after);
+ userAction.setMemberId(bizId+"");
+ userActionMapper.insert(userAction);
+ }
+ @Override
+ public UserAction findById(Integer id) {
+ return userActionMapper.selectById(id);
+ }
+
+ @Override
+ public UserAction findOne(UserAction userAction) {
+ QueryWrapper<UserAction> wrapper = new QueryWrapper<>(userAction);
+ return userActionMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<UserAction> findList(UserAction userAction) {
+ QueryWrapper<UserAction> wrapper = new QueryWrapper<>(userAction);
+ return userActionMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<UserAction> findPage(PageWrap<UserAction> pageWrap) {
+ IPage<UserAction> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<UserAction> queryWrapper = new MPJLambdaWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ UserAction queryModel = pageWrap.getModel();
+ queryWrapper.selectAll(UserAction.class)
+ .leftJoin(Member.class,Member::getId,UserAction::getMemberId)
+ .leftJoin(SystemUser.class,SystemUser::getId,UserAction::getCreator)
+ .selectAs(SystemUser::getRealname,UserAction::getCreateName)
+ .selectAs(Member::getName,UserAction::getMemberName)
+ .selectAs(Member::getPhone,UserAction::getMobile)
+ .like(StringUtils.isNotBlank(queryModel.getCreateName()),SystemUser::getRealname,queryModel.getCreateName())
+ .like(StringUtils.isNotBlank(queryModel.getMemberName()),Member::getName,queryModel.getMemberName())
+ .like(StringUtils.isNotBlank(queryModel.getMobile()),Member::getPhone,queryModel.getMobile())
+ .like(StringUtils.isNotBlank(queryModel.getRemark()),Member::getPhone,queryModel.getRemark())
+ .eq(!Objects.isNull(queryModel.getMemberType()),Member::getType,queryModel.getMemberType())
+ .eq(!Objects.isNull(queryModel.getBeforeStatus()),UserAction::getBeforeStatus,queryModel.getBeforeStatus())
+ .eq(!Objects.isNull(queryModel.getType()),UserAction::getType,queryModel.getType())
+ .orderByDesc(UserAction::getCreateDate)
+ ;
+ IPage<UserAction> result = userActionMapper.selectJoinPage(page,UserAction.class,queryWrapper);
+ if(result!=null &&result.getRecords()!=null){
+ for(UserAction model :result.getRecords()){
+ model.setTypeName(Constants.UserActionType.getName(model.getType()));
+ }
+ }
+ return PageData.from(result);
+ }
+
+ @Override
+ public long count(UserAction userAction) {
+ QueryWrapper<UserAction> wrapper = new QueryWrapper<>(userAction);
+ return userActionMapper.selectCount(wrapper);
+ }
+}
--
Gitblit v1.9.3