From 4d2dda710968035fa52e69dea47525985674422b Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 21 一月 2026 17:18:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java          |   92 +++++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java     |    2 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java                      |    6 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/InviteRecord.java               |   28 +
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java         |   14 
 admin/src/api/business/inviteRecord.js                                                            |   14 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java                       |    6 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java |  123 +++++++
 admin/src/views/business/inviteRecord.vue                                                         |   88 +++++
 admin/src/components/business/OperaGoodsShopWindow.vue                                            |  292 ++++++++++++++++++
 admin/src/views/business/shop.vue                                                                 |   19 
 admin/src/views/business/platformGoods.vue                                                        |   35 -
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java        |  120 +++++-
 server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java             |   85 +++++
 14 files changed, 852 insertions(+), 72 deletions(-)

diff --git a/admin/src/api/business/inviteRecord.js b/admin/src/api/business/inviteRecord.js
new file mode 100644
index 0000000..2fa32e9
--- /dev/null
+++ b/admin/src/api/business/inviteRecord.js
@@ -0,0 +1,14 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/inviteRecord/page', data, {
+    trim: true
+  })
+}
+export function exportExcel (data) {
+  return request.post('/business/inviteRecord/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
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/inviteRecord.vue b/admin/src/views/business/inviteRecord.vue
new file mode 100644
index 0000000..008fa4a
--- /dev/null
+++ b/admin/src/views/business/inviteRecord.vue
@@ -0,0 +1,88 @@
+<template>
+  <TableLayout :permissions="['business:inviterecord:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="閭�璇蜂汉淇℃伅" prop="recName" >
+        <el-input v-model="searchForm.recName" placeholder="璇烽個璇蜂汉鏄电О/濮撳悕/鎵嬫満鍙� " clearable @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="琚個璇蜂汉淇℃伅" prop="memberName" >
+        <el-input v-model="searchForm.memberName" placeholder="琚個璇蜂汉鏄电О/濮撳悕/鎵嬫満鍙� " clearable @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瀹屾垚闃舵" prop="firstOrderStatus">
+        <el-select  v-model="searchForm.firstOrderStatus"  placeholder="璇烽�夋嫨瀹屾垚闃舵"   clearable @change="search" >
+          <el-option  :value="0" label="宸叉敞鍐�"></el-option>
+          <el-option  :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" v-permissions="['business:inviterecord:exportExcel']">
+        <li> <el-button type="primary" :loading="isWorking.export" v-permissions="['business:inviterecord:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="openid" label="琚個璇蜂汉寰俊ID" min-width="200px"></el-table-column>
+        <el-table-column prop="memberName" label="琚個璇蜂汉(鏄电О/濮撳悕/鎵嬫満)" min-width="200px"></el-table-column>
+        <el-table-column prop="recName" label="閭�璇蜂汉(鏄电О/濮撳悕/鎵嬫満)" min-width="200px"></el-table-column>
+        <el-table-column prop="firstOrderStatus" label="瀹屾垚闃舵" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.firstOrderStatus ===1" class="green">瀹屾垚棣栧崟</span>
+            <span v-else class="orange">宸叉敞鍐�</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="rewardIntegral" label="绉垎濂栧姳" min-width="100px">
+          <template slot-scope="{row}">
+           <span class="orange">{{ row.rewardIntegral || ''}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="couponNames" label="浼樻儬鍒稿鍔�" min-width="150px"></el-table-column>
+        <el-table-column prop="firstFinishDate" label="棣栧崟瀹屾垚鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="createDate" label="娉ㄥ唽鏃堕棿" min-width="150px"></el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+  name: 'inviteRecord',
+  extends: BaseTable,
+  components: { TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        recName: '',
+        memberName: '',
+        firstOrderStatus: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '鎺ㄨ崘璁板綍琛�',
+      api: '/business/inviteRecord',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
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_admin/src/main/java/com/doumee/api/business/InviteRecordController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java
new file mode 100644
index 0000000..333e524
--- /dev/null
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java
@@ -0,0 +1,85 @@
+package com.doumee.api.business;
+
+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.InviteRecord;
+import com.doumee.core.utils.Utils;
+import com.doumee.service.business.InviteRecordService;
+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  com.doumee.api.BaseController;
+/**
+ * 鐢ㄦ埛閭�璇疯褰旵ontroller瀹氫箟
+ * @author doumee
+ * @date 2026-01-20 15:51:22
+ */
+@Api(tags = "tableName鎺ュ彛")
+@RestController
+@RequestMapping("/business/inviteRecord")
+public class InviteRecordController extends BaseController {
+
+    @Autowired
+    private InviteRecordService inviteRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:inviterecord:create")
+    public ApiResponse create(@RequestBody InviteRecord inviteRecord) {
+        return ApiResponse.success(inviteRecordService.create(inviteRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:inviterecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        inviteRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:inviterecord:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        inviteRecordService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:inviterecord:update")
+    public ApiResponse updateById(@RequestBody InviteRecord inviteRecord) {
+        inviteRecordService.updateById(inviteRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:inviterecord:query")
+    public ApiResponse<PageData<InviteRecord>> findPage (@RequestBody PageWrap<InviteRecord> pageWrap) {
+        return ApiResponse.success(inviteRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:inviterecord:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<InviteRecord> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(InviteRecord.class).export(inviteRecordService.findPage(pageWrap).getRecords(), "浼氬憳閭�璇疯褰曡〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:inviterecord:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(inviteRecordService.findById(id));
+    }
+}
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/InviteRecord.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/InviteRecord.java
index 403c0f0..7bf1095 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/InviteRecord.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/InviteRecord.java
@@ -30,7 +30,7 @@
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="浜ゆ槗鏃堕棿" ,index =1,width = 10)
+    @ExcelColumn(name="娉ㄥ唽鏃堕棿" ,index =8,width = 10 ,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
@@ -55,18 +55,22 @@
     private String phone;
 
     @ApiModelProperty(value = "鏄惁瀹屾垚棣栧崟锛�0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="瀹屾垚鏋佺" ,index =4,width = 10,valueMapping = "0=宸叉敞鍐�;1=瀹屾垚棣栧崟;")
     private Integer firstOrderStatus;
 
     @ApiModelProperty(value = "瀹屾垚棣栧崟鏃堕棿")
+    @ExcelColumn(name="瀹屾垚棣栧崟鏃堕棿" ,index =7,width = 10 ,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date firstFinishDate;
 
     @ApiModelProperty(value = "閭�璇峰鍔辩Н鍒�")
+    @ExcelColumn(name="濂栧姳閭�璇蜂汉绉垎" ,index =5,width = 10 )
     private BigDecimal rewardIntegral;
 
     @ApiModelProperty(value = "閭�璇峰畬鎴愰鍗曞鍔变紭鎯犲埜涓婚敭 澶氫釜浠�,鍒嗗壊")
     private String couponIds;
 
     @ApiModelProperty(value = "閭�璇峰畬鎴愰鍗曞鍔变紭鎯犲埜鍚嶇О 澶氫釜浠�,鍒嗗壊")
+    @ExcelColumn(name="濂栧姳閭�璇蜂汉浼樻儬鍒�" ,index =6,width = 10 )
     private String couponNames;
 
     @ApiModelProperty(value = "琚個璇蜂汉澶村儚")
@@ -75,6 +79,28 @@
 
     @ApiModelProperty(value = "琚個璇蜂汉鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="琚個璇蜂汉锛堟樀绉�/濮撳悕/鎵嬫満鍙凤級" ,index =2,width = 20)
     private String memberName;
 
+    @ApiModelProperty(value = "琚個璇蜂汉鍚嶇О")
+    @TableField(exist = false)
+    private String memberNickname;
+    @ApiModelProperty(value = "琚個璇蜂汉鎵嬫満鍙�")
+    @TableField(exist = false)
+    private String memberPhone;
+    @ApiModelProperty(value = "閭�璇蜂汉鏄电О")
+    @TableField(exist = false)
+    private String recNickname;
+    @ApiModelProperty(value = "閭�璇蜂汉鎵嬫満鍙�")
+    @TableField(exist = false)
+    private String recPhone;
+    @ApiModelProperty(value = "琚個璇蜂汉鍚嶇О")
+    @TableField(exist = false)
+    @ExcelColumn(name="閭�璇蜂汉锛堟樀绉�/濮撳悕/鎵嬫満鍙凤級" ,index =3,width = 20)
+    private String recName;
+    @ApiModelProperty(value = "琚個璇蜂汉鍚嶇О")
+    @TableField(exist = false)
+    @ExcelColumn(name="琚個璇蜂汉openid" ,index =1,width = 15)
+    private String openid;
+
 }
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/InviteRecordService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
index 1b7ae55..2d82218 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
@@ -2,14 +2,9 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
-import com.doumee.dao.business.model.Integral;
-import com.doumee.dao.web.dto.IntegralDTO;
-import com.doumee.dao.web.dto.IntegralRecordDTO;
-import com.doumee.dao.web.request.DealIntegralRequest;
-import com.doumee.dao.web.response.IntegralDataResponse;
+import com.doumee.dao.business.model.InviteRecord;
 import com.doumee.dao.web.response.InviteInfoResponse;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -22,5 +17,90 @@
     InviteInfoResponse getInviteInfo(Integer memberId);
 
     String createShareImg(Integer memberId) throws Exception;
+
+
+    /**
+     * 鍒涘缓
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(InviteRecord model);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param model 瀹炰綋瀵硅薄
+     */
+    void delete(InviteRecord model);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param model 瀹炰綋瀵硅薄
+     */
+    void updateById(InviteRecord model);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param model 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<InviteRecord> model);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return model
+     */
+    InviteRecord findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return InviteRecord
+     */
+    InviteRecord findOne(InviteRecord model);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return List<InviteRecord>
+     */
+    List<InviteRecord> findList(InviteRecord model);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<InviteRecord>
+     */
+    PageData<InviteRecord> findPage(PageWrap<InviteRecord> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(InviteRecord model);
+
 }
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
index b084838..42bd9de 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
@@ -132,7 +132,7 @@
     @Override
     public void deleteById(Integer id) {
         Activity activity = new Activity();
-        activity.setIsdeleted(Constants.ZERO);
+        activity.setIsdeleted(Constants.ONE);
         activity.setId(id);
         activityMapper.updateById(activity);
     }
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/InviteRecordServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
index 2494de0..83a47a4 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
@@ -34,6 +34,7 @@
 import com.doumee.service.business.InviteRecordService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.util.TextUtils;
 import org.apache.shiro.SecurityUtils;
@@ -131,10 +132,132 @@
 
     }
 
+    @Override
+    public Integer create(InviteRecord inviteRecord) {
+        inviteRecordMapper.insert(inviteRecord);
+        return inviteRecord.getId();
+    }
 
+    @Override
+    public void deleteById(Integer id) {
+        inviteRecordMapper.deleteById(id);
+    }
 
+    @Override
+    public void delete(InviteRecord inviteRecord) {
+        UpdateWrapper<InviteRecord> deleteWrapper = new UpdateWrapper<>(inviteRecord);
+        inviteRecordMapper.delete(deleteWrapper);
+    }
 
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        inviteRecordMapper.deleteBatchIds(ids);
+    }
 
+    @Override
+    public void updateById(InviteRecord inviteRecord) {
+        inviteRecordMapper.updateById(inviteRecord);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<InviteRecord> inviteRecords) {
+        if (CollectionUtils.isEmpty(inviteRecords)) {
+            return;
+        }
+        for (InviteRecord inviteRecord: inviteRecords) {
+            this.updateById(inviteRecord);
+        }
+    }
+
+    @Override
+    public InviteRecord findById(Integer id) {
+        return inviteRecordMapper.selectById(id);
+    }
+
+    @Override
+    public InviteRecord findOne(InviteRecord inviteRecord) {
+        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord).last("limit 1");
+        return inviteRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<InviteRecord> findList(InviteRecord inviteRecord) {
+        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord);
+        return inviteRecordMapper.selectList(wrapper);
+    }
+
+    @Override
+    public PageData<InviteRecord> findPage(PageWrap<InviteRecord> pageWrap) {
+        IPage<InviteRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<InviteRecord> queryWrapper = new MPJLambdaWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.selectAll(InviteRecord.class )
+                .select("t1.name",InviteRecord::getRecName)
+                .select("t1.nickname",InviteRecord::getRecNickname)
+                .select("t1.phone",InviteRecord::getRecPhone)
+                .select("t2.name",InviteRecord::getMemberName)
+                .select("t2.nickname",InviteRecord::getMemberNickname)
+                .select("t2.open_id",InviteRecord::getOpenid)
+                .select("t2.phone",InviteRecord::getMemberPhone)
+                .leftJoin(Member.class,Member::getId,InviteRecord::getInviteId)
+                .leftJoin(Member.class,Member::getId,InviteRecord::getMemberId) ;
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
+        queryWrapper.eq(pageWrap.getModel().getId() != null,InviteRecord::getId, pageWrap.getModel().getId());
+        queryWrapper.eq(pageWrap.getModel().getCreator() != null,InviteRecord::getCreator, pageWrap.getModel().getCreator());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.ge(InviteRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(InviteRecord::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        queryWrapper.eq(pageWrap.getModel().getEditor() != null,InviteRecord::getEditor, pageWrap.getModel().getEditor());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.ge(InviteRecord::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(InviteRecord::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getRecName()),w->{
+            w.like("t1.name",pageWrap.getModel().getRecName()).or()
+                    .like("t1.phone",pageWrap.getModel().getRecName()).or()
+                    .like("t1.nickname",pageWrap.getModel().getRecName());
+        });
+        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()),w->{
+            w.like("t2.name",pageWrap.getModel().getMemberName()).or()
+                    .like("t2.phone",pageWrap.getModel().getMemberName()).or()
+                    .like("t2.nickname",pageWrap.getModel().getMemberName());
+        });
+        queryWrapper.eq(pageWrap.getModel().getIsdeleted() != null,InviteRecord::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        queryWrapper.eq(pageWrap.getModel().getRemark() != null,InviteRecord::getRemark, pageWrap.getModel().getRemark());
+        queryWrapper.eq(pageWrap.getModel().getInviteId() != null,InviteRecord::getInviteId, pageWrap.getModel().getInviteId());
+        queryWrapper.eq(pageWrap.getModel().getMemberId() != null,InviteRecord::getMemberId, pageWrap.getModel().getMemberId());
+        queryWrapper.eq(pageWrap.getModel().getPhone() != null,InviteRecord::getPhone, pageWrap.getModel().getPhone());
+        queryWrapper.eq(pageWrap.getModel().getFirstOrderStatus() != null,InviteRecord::getFirstOrderStatus, pageWrap.getModel().getFirstOrderStatus());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.ge(InviteRecord::getFirstFinishDate, Utils.Date.getStart(pageWrap.getModel().getFirstFinishDate()));
+            queryWrapper.le(InviteRecord::getFirstFinishDate, Utils.Date.getEnd(pageWrap.getModel().getFirstFinishDate()));
+        }
+        queryWrapper.eq(pageWrap.getModel().getRewardIntegral() != null,InviteRecord::getRewardIntegral, pageWrap.getModel().getRewardIntegral());
+
+        queryWrapper.orderByDesc(InviteRecord::getCreateDate);
+        IPage<InviteRecord> result =inviteRecordMapper.selectPage(page, queryWrapper);
+        if(result!=null && result.getRecords()!=null){
+            for(InviteRecord model : result.getRecords()){
+               model.setMemberName(StringUtils.defaultString(model.getMemberNickname(),"")+" / "
+                       +StringUtils.defaultString(model.getMemberName(),"-")+" / "
+                       +StringUtils.defaultString(model.getMemberPhone(),"-"));
+               model.setRecName(StringUtils.defaultString(model.getRecNickname(),"")+" / "
+                       +StringUtils.defaultString(model.getRecName(),"-")+" / "
+                       +StringUtils.defaultString(model.getRecPhone(),"-"));
+            }
+        }
+        return PageData.from(result);
+    }
+
+    @Override
+    public long count(InviteRecord inviteRecord) {
+        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord);
+        return inviteRecordMapper.selectCount(wrapper);
+    }
 
 
 
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