From 666a942f5f2b59209cf422bb202f6548fbbe212e Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 19 一月 2026 15:58:32 +0800
Subject: [PATCH] 经销商管理

---
 server/dmmall_service/src/main/java/com/doumee/dao/system/vo/ShopMoneyVO.java                 |   40 ++
 admin/src/components/business/OperaMemberDetail.vue                                           |   10 
 server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java                      |    1 
 admin/src/components/business/OperaShopInfoWindow.vue                                         |  416 ++++++++++++++++++++++++++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java     |   54 ++
 admin/src/api/business/shopMoney.js                                                           |   14 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java |   26 
 server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java             |   10 
 server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java                 |   14 
 admin/src/components/business/OperaChangeIntegralWindow.vue                                   |    4 
 admin/src/views/business/shopMoney.vue                                                        |   93 +++++
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java               |   19 
 admin/src/views/business/integral.vue                                                         |   10 
 admin/src/views/business/shop.vue                                                             |   12 
 server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java              |    2 
 admin/src/components/business/OperaShopGoodsWindow.vue                                        |    2 
 admin/src/components/business/OperaIntegralShopMoneyWindow.vue                                |  181 +++++++++++
 17 files changed, 849 insertions(+), 59 deletions(-)

diff --git a/admin/src/api/business/shopMoney.js b/admin/src/api/business/shopMoney.js
new file mode 100644
index 0000000..cd37508
--- /dev/null
+++ b/admin/src/api/business/shopMoney.js
@@ -0,0 +1,14 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/shop/pageMoney', data, {
+    trim: true
+  })
+}
+export function exportExcel (data) {
+  return request.post('/business/shop/exportExcelMoney', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/admin/src/components/business/OperaChangeIntegralWindow.vue b/admin/src/components/business/OperaChangeIntegralWindow.vue
index ec60a63..8a86c23 100644
--- a/admin/src/components/business/OperaChangeIntegralWindow.vue
+++ b/admin/src/components/business/OperaChangeIntegralWindow.vue
@@ -76,7 +76,7 @@
             this.$emit('success')
           })
           .catch(e => {
-            this.$tip.apiFailed(e)
+            // this.$tip.apiFailed(e)
           })
           .finally(() => {
             this.isWorking = false
@@ -88,7 +88,7 @@
       this.visible = true
       this.info = target
       this.form.type = 0
-      this.form.userType = 0
+      this.form.userType = userType || 0
       this.form.memberId = target.id
       this.form.num = null
       this.form.remark = null
diff --git a/admin/src/components/business/OperaIntegralShopMoneyWindow.vue b/admin/src/components/business/OperaIntegralShopMoneyWindow.vue
new file mode 100644
index 0000000..1a0024d
--- /dev/null
+++ b/admin/src/components/business/OperaIntegralShopMoneyWindow.vue
@@ -0,0 +1,181 @@
+<template>
+  <GlobalWindow
+      :title="title"
+      width="80%"
+      :visible.sync="visible"
+  >
+    <TableLayout :permissions="['business:integral:query']">
+      <!-- 鎼滅储琛ㄥ崟 -->
+      <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+        <el-form-item label="" prop="type">
+          <el-select v-model="searchForm.type"    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="orderCode">
+          <el-input v-model="searchForm.orderCode" placeholder="璇疯緭鍏ヨ鍗曞彿" @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <el-form-item label="" prop="objType">
+          <el-select v-model="searchForm.objType"    placeholder="璇烽�夋嫨娑堣垂绫诲瀷"   @change="search" >
+            <el-option :key="16" :value="16" label="璁㈠崟缁撶畻"></el-option>
+            <el-option :key="17" :value="17" label="浣欓鎻愮幇"></el-option>
+            <el-option :key="19" :value="19" label="鎻愮幇閫�鍥�"></el-option>
+            <el-option :key="20" :value="20" label="璁㈠崟缁撶畻閫�鍥�"></el-option>
+          </el-select>
+        </el-form-item>
+        <div class="date-style" style="display: inline">
+          <el-form-item label="浜ゆ槗鏃堕棿" prop="starttime" >
+            <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="endtime" >
+            <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 type="primary" :loading="isWorking.export" v-permissions="['business:integral:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+          <el-button @click="reset">閲嶇疆</el-button>
+        </section>
+      </el-form>
+      <!-- 琛ㄦ牸鍜屽垎椤� -->
+      <template v-slot:table-wrap>
+        <el-table
+            v-loading="isWorking.search"
+            :data="tableData.list"
+            stripe
+            border
+        >
+          <el-table-column prop="createDate" align="center" label="浜ゆ槗鏃堕棿" min-width="100px"></el-table-column>
+          <el-table-column prop="type" align="center" label="鏀舵敮绫诲瀷" min-width="100px">
+            <template slot-scope="{row}">
+              <span v-if="row.type==0" class="green">鏀跺叆</span>
+              <span v-else class="red">鏀嚭</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="num" align="center" label="閲戦锛堝厓锛�" min-width="100px"></el-table-column>
+          <el-table-column prop="totalNum" align="center" label="褰撳墠浣欓锛堝厓锛�" min-width="100px"></el-table-column>
+          <el-table-column prop="strObjType" align="center" label="浜ゆ槗绫诲瀷" min-width="100px"></el-table-column>
+          <el-table-column prop="orderCode" align="center" label="浜ゆ槗鍗曞彿" min-width="100px"></el-table-column>
+          <el-table-column prop="content" align="center" label="浜ゆ槗璇存槑" min-width="150px" show-overflow-tooltip></el-table-column>
+        </el-table>
+        <pagination
+            @size-change="handleSizeChange"
+            @current-change="handlePageChange"
+            :pagination="tableData.pagination"
+        >
+        </pagination>
+      </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: 'OperaIntegralShopMoneyWindow',
+  extends: BaseTable,
+  components: { GlobalWindow, TableLayout, Pagination},
+  data () {
+    return {
+      title: '',
+      visible: false,
+      tabelHeight: null,
+      info: {},
+      // 鎼滅储
+      searchForm: {
+        memberId: null,
+        userType: 2,
+        type: '',
+        starttime: '',
+        objType: null,
+        endtime: '',
+        orderCode: ''
+      }
+    }
+  },
+
+  created () {
+    this.config({
+      module: '鐢ㄦ埛淇℃伅琛�',
+      api: '/business/integral',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+  },
+  methods: {
+    open (title, info) {
+      this.title = title
+      this.visible = true
+      this.info = info
+      this.searchForm.memberId = info.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/OperaMemberDetail.vue b/admin/src/components/business/OperaMemberDetail.vue
index f7ac9a6..33dbd37 100644
--- a/admin/src/components/business/OperaMemberDetail.vue
+++ b/admin/src/components/business/OperaMemberDetail.vue
@@ -21,10 +21,10 @@
       </div>
       <div class="info-item"></div>
     </div>
-    <div style="display: block">
+    <div style="display: block;margin-bottom: 50px;">
       <div class="header">
         <div  class="header-b">绉垎鏄庣粏</div>
-        <div v-if="info.phone!=null && info.phone!=''" class="header-btn">
+        <div   class="header-btn">
           <el-button style="display: inline" type="primary" @click="changeIntegral">绉垎璋冩暣</el-button>
         </div>
       </div>
@@ -55,10 +55,12 @@
             >
               <el-table-column prop="type"  label="鑾峰緱/鎵i櫎" align="center" min-width="150px">
                 <template slot-scope="{row}">
-                  {{ row.saleType == 1?'鎵i櫎':'鑾峰緱'}}
-                </template>
+                    <span v-if="row.type==0" class="green">鑾峰緱</span>
+                    <span v-else class="red">鎵i櫎</span>
+                  </template>
               </el-table-column>
               <el-table-column prop="num" label="鏁伴噺" fixed align="center" min-width="100px">  </el-table-column>
+              <el-table-column prop="totalNum" 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="content" label="娑堣垂鍐呭" align="center" min-width="150px" show-overflow-tooltip></el-table-column>
               <el-table-column prop="orderCode" label="鍏宠仈璁㈠崟" align="center" min-width="150px"></el-table-column>
diff --git a/admin/src/components/business/OperaShopGoodsWindow.vue b/admin/src/components/business/OperaShopGoodsWindow.vue
index 736be16..121181f 100644
--- a/admin/src/components/business/OperaShopGoodsWindow.vue
+++ b/admin/src/components/business/OperaShopGoodsWindow.vue
@@ -180,7 +180,7 @@
       row.oldGoodsPrice = row.goodsPrice
     },
     blurEvent (row, curIndex, column) {
-      if(this.price >= row.goodsPrice) {
+      if(this.price <= row.goodsPrice) {
         this.$tip.error('渚涜揣浠蜂笉鑳戒綆浜庨攢鍞环')
         row.isPriceSelected = !row.isPriceSelected
         row.goodsPrice = row.oldGoodsPrice// 浠锋牸杩樺師
diff --git a/admin/src/components/business/OperaShopInfoWindow.vue b/admin/src/components/business/OperaShopInfoWindow.vue
new file mode 100644
index 0000000..4cee567
--- /dev/null
+++ b/admin/src/components/business/OperaShopInfoWindow.vue
@@ -0,0 +1,416 @@
+<template>
+  <GlobalWindow
+      :title="title"
+      width="100%"
+      :visible.sync="visible"
+  >
+    <div style="display: block;">
+      <div class="platgroup_tabs">
+        <div class="tab" :class="{ active: activeGroup === item.id }" @click="groupClick(item)"
+             v-for="(item, i) in groupList" :key="i">
+          {{ item.name }}
+        </div>
+      </div>
+    </div>
+    <template v-if="activeGroup ==0">
+      <div style="display: block;">
+        <div class="header">
+          <div  class="header-b">鍩烘湰淇℃伅</div>
+          <div v-if="info.status !=1" class="header-green">姝e父</div>
+          <div v-if="info.status ==1" class="header-red">绂佺敤</div>
+        </div>
+        <div class="info-item">
+          <div class="info-item-a">缁忛攢鍟嗗悕绉帮細<span>{{info.name || ''}}</span><span class="blue header-blue">{{ info.saleType == 1?'鑷敱閲囪喘':'骞冲彴閾鸿揣'}}</span></div>
+          <div class="info-item-a">闂ㄥ簵ID锛�<span>{{info.code || ''}}</span></div>
+          <div class="info-item-a">鐧诲綍璐﹀彿锛�<span>{{info.username || ''}}</span></div>
+        </div>
+        <div class="info-item">
+          <div class="info-item-a">鎵�灞炲湴鍖猴細<span>{{info.bigAreaName || ''}}</span></div>
+          <div class="info-item-a">鐪佸競鍖猴細<span v-if="info.areas">{{(info.areas.provinceName||'') + (info.areas.cityName||'') + (info.areas.name||'')}}</span></div>
+          <div class="info-item-a">璇︾粏鍦板潃锛�<span>{{info.addr || ''}}</span></div>
+        </div>
+        <div class="info-item">
+          <div class="info-item-a">鑱旂郴浜猴細<span>{{info.realname || ''}}</span></div>
+          <div class="info-item-a">鎵嬫満鍙凤細<span>{{info.phone || ''}}</span></div>
+          <div class="info-item-a">鍒涘缓鏃堕棿锛�<span>{{info.createDate || ''}}</span></div>
+        </div>
+        <div class="info-item">
+          <div class="info-item-a">瀹氫綅淇℃伅锛�<span>缁忓害锛歿{info.longitude  || '-'}} 缁村害锛歿{info.latitude|| '-'}}</span></div>
+          <div class="info-item-a">钀ヤ笟鏃堕棿锛�<span>{{info.startTime || ''}}</span></div>
+          <div class="info-item-a"></div>
+        </div>
+        <div class="info-item">
+          <div class="info-item-a">闂ㄥご鍥撅細
+            <div> <el-image v-if="info.imgurlfull" style="margin-left: 100px; width: 100px; height: 100px; border-radius: 2px;" :src="info.imgurlfull" :preview-src-list="[info.imgurlfull]"></el-image></div>
+          </div>
+          <div class="info-item-a"></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>
+        <div class="info-item">
+          <div class="info-item-a">娉曚汉濮撳悕锛�<span>{{info.legalPersonName || ''}}</span></div>
+          <div class="info-item-a">鑱旂郴鐢佃瘽锛�<span>{{info.legalPersonPhone || ''}}</span></div>
+          <div class="info-item-a"></div>
+        </div>
+        <div class="info-item">
+          <div class="info-item-a"> 韬唤璇侊細
+            <div style="display: inline-block;width: 300px;margin-left: 100px;">
+              <el-image v-if="info.idcardImg" style="width: 100px; height: 100px; border-radius: 2px;display: inline-block;"
+                        :src="info.imgFullUrl +info.idcardImg"
+                        :preview-src-list="[info.imgFullUrl +info.idcardImg]"></el-image>
+              <el-image v-if="info.idcardImgBack" style="margin-left:10px;width: 100px; height: 100px; border-radius: 2px;display: inline-block;"
+                        :src="info.imgFullUrl +info.idcardImgBack"
+                        :preview-src-list="[info.imgFullUrl +info.idcardImgBack]"></el-image>
+            </div>
+          </div>
+          <div class="info-item-a">钀ヤ笟鎵х収锛�
+            <div  style="display: inline-block;width: 300px;margin-left: 100px;">
+              <el-image v-if="info.businessImg" style="width: 100px; height: 100px; border-radius: 2px;"
+                        :src="info.imgFullUrl +info.businessImg"
+                        :preview-src-list="[info.imgFullUrl +info.businessImg]"></el-image>
+            </div>
+          </div>
+          <div class="info-item-a"></div>
+        </div>
+        <div class="info-item"></div>
+      </div>
+      <div style="display: block;margin-bottom: 50px;">
+        <div class="header">
+          <div  class="header-b">閿�鍞ā寮忓彉鏇磋褰�</div>
+        </div>
+        <TableLayout >
+          <!-- 琛ㄦ牸鍜屽垎椤� -->
+          <template v-slot:table-wrap>
+            <el-table
+                v-loading="isWorking.search0"
+                :data="tableData0.list"
+                stripe
+                border
+            >
+              <el-table-column prop="type" label="鍙樻洿绫诲瀷" fixed align="center" min-width="150px">閿�鍞ā寮�</el-table-column>
+              <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="handleSizeChange0"
+                @current-change="handlePageChange0"
+                :pagination="tableData0.pagination"
+            >
+            </pagination>
+          </template>
+        </TableLayout>
+      </div>
+    </template>
+    <template v-else-if="activeGroup == 2">
+      <div style="display: block;margin-bottom: 50px;">
+        <div class="header">
+          <div  class="header-b">绉垎鏄庣粏</div>
+          <div  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="searchForm2.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="handlePageChange2(1)" type="鐐瑰嚮鍒锋柊"  icon="el-icon-refresh"  style="margin-left: 10px;" ></el-button>
+              </div>
+            </div>
+            <el-table
+                v-loading="isWorking.search2"
+                :data="tableData2.list"
+                stripe
+                border
+            >
+              <el-table-column prop="type"  label="鑾峰緱/鎵i櫎" align="center" min-width="150px">
+                <template slot-scope="{row}">
+                  <span v-if="row.type==0" class="green">鑾峰緱</span>
+                  <span v-else class="red">鎵i櫎</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="num" label="鏁伴噺" fixed align="center" min-width="100px">  </el-table-column>
+              <el-table-column prop="totalNum" 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="content" label="鏉ユ簮" align="center" min-width="150px" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="remark" label="澶囨敞" align="center" min-width="200px"></el-table-column>
+              <el-table-column prop="orderCode" label="鍏宠仈璁㈠崟" align="center" min-width="150px"></el-table-column>
+              <el-table-column prop="createDate" label="鍙樺姩鏃堕棿" align="center" min-width="200px"></el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange2"
+                @current-change="handlePageChange2"
+                :pagination="tableData2.pagination"
+            >
+            </pagination>
+          </template>
+        </TableLayout>
+      </div>
+    </template>
+    <template  v-slot:footer>
+      <el-button @click="visible=false">杩斿洖</el-button>
+    </template>
+    <OperaChangeShopRecordWindow ref="OperaChangeShopRecordWindow"/>
+    <OperaChangeIntegralWindow ref="OperaChangeIntegralWindow" @success="successBiz"/>
+  </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 OperaChangeShopRecordWindow from '@/components/business/OperaChangeShopRecordWindow'
+import OperaChangeIntegralWindow from '@/components/business/OperaChangeIntegralWindow'
+import { shopDetail as detail } from '@/api/business/shop'
+import { fetchList as actionList } from '@/api/business/userAction'
+import { fetchList as integralList } from '@/api/business/integral'
+export default {
+  name: 'OperaShopInfoWindow',
+  extends: BaseTable,
+  components: { GlobalWindow, TableLayout, Pagination, OperaChangeShopRecordWindow, OperaChangeIntegralWindow },
+  data () {
+    return {
+      title: '',
+      visible: false,
+      tabelHeight: null,
+      activeGroup: -1,
+      groupList: [{ id: 0, name: '鍩烘湰淇℃伅' }, { id: 1, name: '閿�鍞俊鎭�' }, { id: 2, name: '绉垎淇℃伅' }],
+      info: {},
+      // 鎼滅储
+      searchForm2: {
+        memberId: '',
+        userType: 1,
+        type: null
+      },
+      isWorking: {
+        search0: false,
+        search1: false,
+        search2: false
+      },
+      tableData0: {
+        // 宸查�変腑鐨勬暟鎹�
+        selectedRows: [],
+        // 鎺掑簭鐨勫瓧娈�
+        sorts: [],
+        // 褰撳墠椤垫暟鎹�
+        list: [],
+        // 鍒嗛〉
+        pagination: {
+          pageIndex: 1,
+          pageSize: 10,
+          total: 0
+        }
+      },
+      tableData2: {
+        // 宸查�変腑鐨勬暟鎹�
+        selectedRows: [],
+        // 鎺掑簭鐨勫瓧娈�
+        sorts: [],
+        // 褰撳墠椤垫暟鎹�
+        list: [],
+        // 鍒嗛〉
+        pagination: {
+          pageIndex: 1,
+          pageSize: 10,
+          total: 0
+        }
+      }
+    }
+  },
+
+  created () {
+    this.config({
+      module: '鐢ㄦ埛淇℃伅琛�',
+      api: '/business/integral',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+  },
+  methods: {
+    groupClick(item){
+      this.activeGroup = item.id
+    },
+    successBiz () {
+      this.handlePageChange2(1)
+      this.loadInfo()
+      this.$emit('success')
+    },
+    loadInfo () {
+      detail(this.info.id).then(res => {
+        this.info = res || this.info
+      })
+    },
+    showChangeRecord () {
+      if (this.info) {
+        this.$refs.OperaChangeShopRecordWindow.open('瀹㈡埛缁忛攢鍟嗗彉鏇磋褰�', this.info)
+      }
+    },
+    changeIntegral () {
+      if (this.info) {
+        this.$refs.OperaChangeIntegralWindow.open('缁忛攢鍟嗙Н鍒嗚皟鏁�', this.info, 1)
+      }
+    },
+    open (title, info) {
+      this.title = title
+      this.visible = true
+      this.info = info
+      this.activeGroup = 0
+      this.searchForm2.memberId = info.id
+      if (this.info.imgurl) {
+        this.info.imgurlfull = this.info.imgFullUrl + this.info.imgurl
+      }
+      this.handlePageChange0(1)
+      this.handlePageChange2(1)
+    },
+    handleSizeChange0 (pageSize) {
+      this.tableData0.pagination.pageSize = pageSize
+      this.search0()
+    },
+    // 椤电爜鍙樻洿澶勭悊
+    handlePageChange0 (pageIndex) {
+      this.tableData0.pagination.pageIndex = pageIndex || this.tableData0.pagination.pageIndex
+      this.isWorking.search0 = true
+      actionList({
+        page: this.tableData0.pagination.pageIndex,
+        capacity: this.tableData0.pagination.pageSize,
+        model: { type: 1, memberId: this.info.id }, // 閿�鍞ā寮忓彉鏇�
+        sorts: this.tableData0.sorts
+      })
+        .then(data => {
+          this.tableData0.list = data.records
+          this.tableData0.pagination.total = data.total
+        })
+        .catch(e => {
+          this.$tip.apiFailed(e)
+        })
+        .finally(() => {
+          this.isWorking.search0 = false
+        })
+    },
+    handleSizeChange2 (pageSize) {
+      this.tableData0.pagination.pageSize = pageSize
+      this.search0()
+    },
+    // 椤电爜鍙樻洿澶勭悊
+    handlePageChange2 (pageIndex) {
+      this.tableData2.pagination.pageIndex = pageIndex || this.tableData2.pagination.pageIndex
+      this.isWorking.search2 = true
+      integralList({
+        page: this.tableData0.pagination.pageIndex,
+        capacity: this.tableData0.pagination.pageSize,
+        model: this.searchForm2, // 閿�鍞ā寮忓彉鏇�
+        sorts: this.tableData2.sorts
+      })
+        .then(data => {
+          this.tableData2.list = data.records
+          this.tableData2.pagination.total = data.total
+        })
+        .catch(e => {
+          this.$tip.apiFailed(e)
+        })
+        .finally(() => {
+          this.isWorking.search2 = false
+        })
+    }
+  }
+}
+</script>
+<style lang="scss"  scoped>
+.platgroup_tabs {
+  flex: 1;
+  display: flex;
+  border-bottom: 1px solid #dfe2e8;
+  margin-bottom: 30px;
+  .tab {
+    color: #666666;
+    margin-right: 40px;
+    cursor: pointer;
+    padding-bottom: 10px;
+    border-bottom: 2px solid #fff;
+  }
+
+  .active {
+    font-weight: 500;
+    font-size: 15px;
+    color: #216EEE;
+    border-bottom: 2px solid #216EEE;
+  }
+}
+.table-pagination{
+  position: fixed !important;
+  bottom: 50px;
+}
+.header-b{
+  display: inline-block;
+  font-size: 16px;
+  font-weight: bold;
+}
+.header-green{
+  display: inline-block;
+  font-size: 12px;
+  border: 1px solid green;
+  padding: 2px 10px;
+  margin-left: 20px;
+  color: green;
+  border-radius: 5px ;
+}
+.header-red{
+  display: inline-block;
+  font-size: 12px;
+  border: 1px solid red;
+  padding: 2px 10px;
+  margin-left: 20px;
+  color: red;
+  border-radius: 5px ;
+}
+.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/views/business/integral.vue b/admin/src/views/business/integral.vue
index 012a1a3..090e6cd 100644
--- a/admin/src/views/business/integral.vue
+++ b/admin/src/views/business/integral.vue
@@ -52,7 +52,9 @@
       </div>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
+<!--
         <el-button type="primary" :loading="isWorking.export" v-permissions="['business:integral:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+-->
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -64,19 +66,20 @@
         stripe
         border
       >
-      <el-table-column prop="remark" label="娴佹按鍙�" align="center" min-width="100px"></el-table-column>
+<!--         <el-table-column prop="remark" label="娴佹按鍙�" 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="phone" align="center" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
         <el-table-column prop="type" align="center" label="鏀舵敮绫诲瀷" min-width="100px">
           <template slot-scope="{row}">
-            {{ row.type==0?'鏀跺叆':'鏀嚭' }}
+           <span v-if="row.type==0" class="green">鑾峰緱</span>
+           <span v-else class="red">鎵i櫎</span>
           </template>
         </el-table-column>
         <el-table-column prop="num" align="center" label="鏁伴噺" min-width="100px"></el-table-column>
         <el-table-column prop="totalNum" align="center" label="褰撳墠浣欓" min-width="100px"></el-table-column>
         <el-table-column prop="strObjType" align="center" label="娑堣垂绫诲瀷" min-width="100px"></el-table-column>
+        <el-table-column prop="content" align="center" label="鍙樺姩鍐呭" min-width="150px" show-overflow-tooltip></el-table-column>
         <el-table-column prop="orderCode" align="center" label="浜ゆ槗鍗曞彿" min-width="100px"></el-table-column>
-        <el-table-column prop="content" align="center" label="鏀舵敮璇存槑" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" align="center" label="鍙樺姩鏃堕棿" min-width="100px"></el-table-column>
       </el-table>
       <pagination
@@ -106,6 +109,7 @@
         userType: 0,
         type: '',
         starttime: '',
+        objType: null,
         endtime: '',
         orderCode: ''
       }
diff --git a/admin/src/views/business/shop.vue b/admin/src/views/business/shop.vue
index 6dc4b7e..3f77ae9 100644
--- a/admin/src/views/business/shop.vue
+++ b/admin/src/views/business/shop.vue
@@ -30,7 +30,7 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:shop:create', 'business:shop:delete']">
-        <li><el-button type="primary" @click="$refs.operaShopWindow.open('鏂板缓搴楅摵')" icon="el-icon-plus" v-permissions="['business:shop:create']">鏂板缓</el-button></li>
+        <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> -->
       </ul>
       <el-table
@@ -114,7 +114,7 @@
     </template>
     <!-- 鏂板缓/淇敼 -->
     <OperaShopWindow ref="operaShopWindow" @success="handlePageChange"/>
-    <OperaShopDetailWindow ref="operaShopDetailWindow" />
+    <OperaShopInfoWindow ref="OperaShopInfoWindow" />
     <ResetPwdShopWindow ref="resetPwdWindow"/>
   </TableLayout>
 </template>
@@ -124,13 +124,13 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaShopWindow from '@/components/business/OperaShopWindow'
-import OperaShopDetailWindow from '@/components/business/OperaShopDetailWindow'
+import OperaShopInfoWindow from '@/components/business/OperaShopInfoWindow'
 import { resetPwd, updateIsRecById } from '@/api/business/shop'
 import ResetPwdShopWindow from '@/components/business/ResetPwdShopWindow'
 export default {
   name: 'Shop',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaShopWindow, OperaShopDetailWindow, ResetPwdShopWindow },
+  components: { TableLayout, Pagination, OperaShopWindow, OperaShopInfoWindow, ResetPwdShopWindow },
   data () {
     return {
 
@@ -146,7 +146,7 @@
   },
   created () {
     this.config({
-      module: '搴楅摵鍩烘湰淇℃伅琛�',
+      module: '缁忛攢鍟嗗熀鏈俊鎭〃',
       api: '/business/shop',
       'field.id': 'id',
       'field.main': 'id'
@@ -184,7 +184,7 @@
         })
     },
     showDetail (row) {
-      this.$refs.operaShopDetailWindow.open('搴楅摵璇︽儏', row)
+      this.$refs.OperaShopInfoWindow.open('缁忛攢鍟嗚鎯�', row)
     }
   }
 }
diff --git a/admin/src/views/business/shopMoney.vue b/admin/src/views/business/shopMoney.vue
new file mode 100644
index 0000000..d755f8b
--- /dev/null
+++ b/admin/src/views/business/shopMoney.vue
@@ -0,0 +1,93 @@
+<template>
+  <TableLayout :permissions="['business:integral:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缁忛攢鍟嗗悕绉�" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ョ粡閿�鍟嗗悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="闂ㄥ簵ID" prop="code">
+        <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ラ棬搴桰D" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:shop:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        border
+      >
+        <el-table-column prop="name" label="缁忛攢鍟嗗悕绉�" align="center" min-width="150px"> </el-table-column>
+        <el-table-column prop="code" label="闂ㄥ簵ID" align="center" min-width="150px"> </el-table-column>
+        <el-table-column prop="amount" align="center" label="璐︽埛浣欓锛堝厓锛�" min-width="150px">
+          <template slot-scope="{row}">{{row.amount || 0}}</template>
+        </el-table-column>
+        <el-table-column prop="jiesuanIng" align="center" label="寰呯粨绠楋紙鍏冿級" min-width="150px">
+          <template slot-scope="{row}">{{row.jiesuanIng || 0}}</template>
+        </el-table-column>
+        <el-table-column prop="withdrawIng" align="center" label="鎻愮幇涓紙鍏冿級" min-width="150px">
+          <template slot-scope="{row}">{{row.withdrawIng || 0}}</template>
+        </el-table-column>
+        <el-table-column prop="withdrawTotal" align="center" label="绱鎻愮幇锛堝厓锛�" min-width="150px">
+          <template slot-scope="{row}">{{row.withdrawTotal || 0}}</template>
+        </el-table-column>
+        <el-table-column prop="withdrawDate" align="center" label="鏈�杩戞彁鐜版椂闂�" min-width="150px"></el-table-column>
+        <el-table-column
+            label="鎿嶄綔"
+            min-width="100"
+            fixed="right"
+            align="center"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.OperaIntegralShopMoneyWindow.open('鏌ヨ缁忛攢鍟嗕綑棰濇槑缁�', row)" icon="el-icon-edit" >鏌ヨ鏄庣粏</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <OperaIntegralShopMoneyWindow ref="OperaIntegralShopMoneyWindow"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaIntegralShopMoneyWindow from '@/components/business/OperaIntegralShopMoneyWindow'
+export default {
+  name: 'Integral',
+  extends: BaseTable,
+  components: { TableLayout, Pagination ,OperaIntegralShopMoneyWindow},
+  data () {
+    return {
+      createDate: [],
+      // 鎼滅储
+      searchForm: {
+        code: '',
+        name: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '缁忛攢鍟嗚处鎴锋槑缁�',
+      api: '/business/shopMoney',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+  }
+}
+</script>
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 3d8ebd4..aef8815 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
@@ -88,15 +88,7 @@
     @RequiresPermissions("business:integral:exportExcel")
     public void exportExcel (@RequestBody PageWrap<Integral> pageWrap, HttpServletResponse response) throws Exception {
        List<Integral>  list=integralService.findPage(pageWrap).getRecords();
-        for(Integral model:list){
-            if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
-                model.setStrType("鏀跺叆");
-            }else  if(Constants.equalsInteger(model.getType(),Constants.ONE)){
-                model.setStrType("鏀嚭");
-            }
-            model.setStrObjType(Constants.IntegralObjType.getName(model.getObjType()));
-        }
-        ExcelExporter.build(Integral.class).export(list, "鐢ㄦ埛绉垎鏄庣粏"+ DateUtil.getNowLongTime(), response);
+        ExcelExporter.build(Integral.class).export(list, "缁忛攢鍟嗕綑棰濇槑缁�"+ DateUtil.getNowLongTime(), response);
     }
 
     @ApiOperation("鏍规嵁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 758da45..90d1978 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
@@ -8,6 +8,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.dao.business.model.Shop;
+import com.doumee.dao.system.vo.ShopMoneyVO;
 import com.doumee.dao.web.dto.ResetSystemUserPwdDTO;
 import com.doumee.service.business.ShopService;
 import io.swagger.annotations.Api;
@@ -94,6 +95,13 @@
         return ApiResponse.success(shopService.findPage(pageWrap));
     }
 
+    @ApiOperation("鍒嗛〉鏌ヨ璐﹀彿鏄庣粏")
+    @PostMapping("/pageMoney")
+    @RequiresPermissions("business:shop:query")
+    public ApiResponse<PageData<ShopMoneyVO>> findPageMoney (@RequestBody PageWrap<Shop> pageWrap) {
+        return ApiResponse.success(shopService.findPageMoney(pageWrap));
+    }
+
     @ApiOperation("鏌ヨ鎵�鏈夋暟鎹�")
     @PostMapping("/findAll")
     @RequiresPermissions("business:shop:query")
@@ -108,6 +116,12 @@
     public void exportExcel (@RequestBody PageWrap<Shop> pageWrap, HttpServletResponse response) {
         ExcelExporter.build(Shop.class).export(shopService.findPage(pageWrap).getRecords(), "搴楅摵鍩烘湰淇℃伅琛�", response);
     }
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcelMoney")
+    @RequiresPermissions("business:shop:exportExcel")
+    public void exportExcelMoney (@RequestBody PageWrap<Shop> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(ShopMoneyVO.class).export(shopService.findPageMoney(pageWrap).getRecords(), "缁忛攢鍟嗚处鍙锋槑缁�", response);
+    }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{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 d7b26b3..844909d 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
@@ -1176,6 +1176,7 @@
 
     public  enum UserActionType {
         CHANGE_SHOP(0, "缁忛攢鍟嗘洿鎹�","鐢便��${param1}銆戜簬銆�${param2}銆戯紝杩涜銆愮粡閿�鍟嗘洿鎹€��" ),
+        CHANGE_SALETYPE(1, "缁忛攢鍟嗘洿鎹㈤攢鍞ā寮�","鐢便��${param1}銆戜簬銆�${param2}銆戯紝杩涜銆愰攢鍞ā寮忓彉鏇淬��" ),
         ;
 
         // 鎴愬憳鍙橀噺
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
index 868c4b0..91b9fc5 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
@@ -31,7 +31,7 @@
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿" ,index = 8,width = 10)
+    @ExcelColumn(name="浜ゆ槗鏃堕棿" ,index =1,width = 10)
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
@@ -54,7 +54,7 @@
     private String title;
 
     @ApiModelProperty(value = "鍐呭")
-    @ExcelColumn(name="鏀舵敮璇存槑",index =7,width = 10)
+    @ExcelColumn(name="浜ゆ槗璇存槑",index =7,width = 10)
     private String content;
 
     @ApiModelProperty(value = "瀵硅薄缂栫爜 0骞冲彴娉ㄥ唽 1绛惧埌 2鍒嗕韩閭�璇� 3閭�璇锋柊鐢ㄦ埛 4鍏戞崲鍟嗗搧", example = "1")
@@ -64,24 +64,25 @@
     private Integer objType;
 
     @ApiModelProperty(value = "鏀舵敮绫诲瀷 0鏀跺叆 1鏀嚭", example = "1")
+    @ExcelColumn(name="鏀舵敮绫诲瀷",index =2,width = 10,valueMapping = "0=鏀跺叆;1=鏀嚭;")
     private Integer type;
 
     @ApiModelProperty(value = "鏁伴噺", example = "1")
-    @ExcelColumn(name="鏀舵敮閲戦",index =4,width = 10)
+    @ExcelColumn(name="鏀舵敮閲戦(鍏�)",index =3,width = 10)
     private BigDecimal num;
 
     @ApiModelProperty(value = "褰撳墠浣欓", example = "1")
-    @ExcelColumn(name="褰撳墠浣欓",index =5,width = 10)
+    @ExcelColumn(name="褰撳墠浣欓(鍏�)",index =4,width = 10)
     private BigDecimal totalNum;
 
     @ApiModelProperty(value = "浜ゆ槗鍗曞彿")
+    @ExcelColumn(name="鍏宠仈璁㈠崟鍙�",index =6,width = 10)
     private String orderCode;
 
     @ApiModelProperty(value = "鐢ㄦ埛鏁版嵁绫诲瀷锛�0=娑堣垂鑰呯Н鍒嗭紱1=缁忛攢鍟嗙Н鍒嗭紱2=缁忛攢鍟嗙粨绠楅噾棰濓紱")
     private Integer userType;
 
     @ApiModelProperty(value = "鐢ㄦ埛鏄电О")
-    @ExcelColumn(name="鐢ㄦ埛",index =1,width = 10)
     @TableField(exist = false)
     private String nickName;
 
@@ -91,13 +92,7 @@
 
     @ApiModelProperty(value = "鐢ㄦ埛鎵嬫満鍙�")
     @TableField(exist = false)
-    @ExcelColumn(name="鎵嬫満鍙�",index =2,width = 10)
     private String phone;
-
-    @TableField(exist = false)
-    @ExcelColumn(name="鏀舵敮绫诲瀷",index =3,width = 10)
-    private String strType;
-
 
     @ApiModelProperty(value = "寮�濮嬫椂闂� ")
     @TableField(exist = false)
@@ -108,7 +103,7 @@
     private Date endtime;
 
     @TableField(exist = false)
-    @ExcelColumn(name="绫诲瀷",index =6,width = 10)
+    @ExcelColumn(name="浜ゆ槗绫诲瀷",index =5,width = 10)
     private String strObjType;
 
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/system/vo/ShopMoneyVO.java b/server/dmmall_service/src/main/java/com/doumee/dao/system/vo/ShopMoneyVO.java
new file mode 100644
index 0000000..5eee4ba
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/system/vo/ShopMoneyVO.java
@@ -0,0 +1,40 @@
+package com.doumee.dao.system.vo;
+
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel("缁忛攢鍟嗚处鎴锋槑缁嗗璞�")
+public class ShopMoneyVO {
+
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "搴楅摵鍚嶇О")
+    @ExcelColumn(name="缁忛攢鍟嗗悕绉�",width = 10,index = 1)
+    private String name;
+    @ApiModelProperty(value = "闂ㄥ簵ID")
+    @ExcelColumn(name="闂ㄥ簵ID",width = 10,index = 2)
+    private String code;
+    @ApiModelProperty(value = "鍙彁鐜伴噾棰�")
+    @ExcelColumn(name="璐﹀彿浣欓锛堝厓锛�",width = 10,index = 3)
+    private BigDecimal amount;
+    @ApiModelProperty(value = "缁撶畻涓�")
+    @ExcelColumn(name="缁撶畻涓紙鍏冿級",width = 10,index = 4)
+    private BigDecimal jiesuanIng;
+    @ApiModelProperty(value = "鎻愮幇涓噾棰�")
+    @ExcelColumn(name="鎻愮幇涓紙鍏冿級",width = 10,index = 5)
+    private BigDecimal withdrawIng;
+    @ApiModelProperty(value = "绱鎻愮幇閲戦")
+    @ExcelColumn(name="绱鎻愮幇锛堝厓锛�",width = 10,index =6 )
+    private BigDecimal withdrawTotal;
+    @ApiModelProperty(value = "鏈�杩戞彁鐜版椂闂�")
+    @ExcelColumn(name="鏈�杩戞彁鐜版椂闂�",width = 10,index =7,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date withdrawDate;
+}
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 9aa503c..21c700c 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
@@ -5,6 +5,7 @@
 import com.doumee.dao.business.model.Integral;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Shop;
+import com.doumee.dao.system.vo.ShopMoneyVO;
 import com.doumee.dao.web.dto.MemberDTO;
 import com.doumee.dao.web.dto.ResetSystemUserPwdDTO;
 import com.doumee.dao.web.dto.ShopLoginDTO;
@@ -214,4 +215,5 @@
 
     String setGoodsPrice(Shop shop);
 
+    PageData<ShopMoneyVO>  findPageMoney(PageWrap<Shop> pageWrap);
 }
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 0ba089a..a235dde 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
@@ -317,14 +317,14 @@
         Utils.MP.blankToNull(pageWrap.getModel());
 
         queryWrapper.selectAll(Integral.class);
-        queryWrapper.selectAs(Member::getNickname, Fund::getNickName);
-        queryWrapper.selectAs(Member::getImgurl, Fund::getImgurl);
-        queryWrapper.selectAs(Member::getPhone, Fund::getPhone);
-
+        queryWrapper.selectAs(Member::getNickname, Integral::getNickName);
+        queryWrapper.selectAs(Member::getImgurl, Integral::getImgurl);
+        queryWrapper.selectAs(Member::getPhone, Integral::getPhone);
         queryWrapper.leftJoin(Member.class, Member::getId, Integral::getMemberId);
-
         queryWrapper.eq(pageWrap.getModel().getMemberId() != null, Integral::getMemberId, pageWrap.getModel().getMemberId());
         queryWrapper.eq(pageWrap.getModel().getType() != null, Integral::getType, pageWrap.getModel().getType());
+        queryWrapper.eq(pageWrap.getModel().getUserType() != null, Integral::getUserType, pageWrap.getModel().getUserType());
+        queryWrapper.eq(  pageWrap.getModel().getObjType() !=null, Integral::getObjType, pageWrap.getModel().getObjType());
         queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getNickName()), ms -> ms.like(Member::getNickname, pageWrap.getModel().getNickName())
                 .or().like(Member::getPhone, pageWrap.getModel().getNickName())
         );
@@ -416,7 +416,7 @@
 
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
             for (Integral integral:result.getRecords()) {
-                integral.setStrType(Constants.IntegralObjType.getName(integral.getObjType()));
+                integral.setStrObjType(Constants.IntegralObjType.getName(integral.getObjType()));
             }
         }
         return PageData.from(result);
@@ -436,7 +436,7 @@
         Date date = new Date();
         Integral integral = new Integral();
         Constants.IntegralObjType integralObjType =null;
-        if(Constants.equalsInteger(param.getUserType(), Constants.ZERO)){
+        if(Constants.equalsInteger(param.getUserType(), Constants.ZERO)){//鐢ㄦ埛璐﹀彿
             MPJLambdaWrapper<Member> queryWrapper =new MPJLambdaWrapper<>();
             queryWrapper.selectAll(Member.class);
             queryWrapper.selectAs(Shop::getName,Member::getShopName);
@@ -463,8 +463,9 @@
                     .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum()));
 
             integralObjType = param.getType()==0?Constants.IntegralObjType.SYSTEM_RECHARGE:Constants.IntegralObjType.SYSTEM_DEDUCT;
-            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(integral.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(integral.getNum()));
-        }else{
+            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum()));
+            integral.setUserType(Constants.ZERO);
+        }else{//缁忛攢鍟嗚处鎴�
             Shop model = shopMapper.selectById(param.getMemberId());
             if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"缁忛攢鍟嗕俊鎭煡璇㈡棤鏁堬紒");
@@ -483,9 +484,9 @@
                     .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()));
-
-             integralObjType = param.getType()==0?Constants.IntegralObjType.SHOP_SYSTEM_RECHARGE:Constants.IntegralObjType.SHOP_SYSTEM_DEDUCT;
-            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(integral.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(integral.getNum()));
+            integralObjType = param.getType()==0?Constants.IntegralObjType.SHOP_SYSTEM_RECHARGE:Constants.IntegralObjType.SHOP_SYSTEM_DEDUCT;
+            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum()));
+            integral.setUserType(Constants.ONE);
         }
         integral.setCreateDate(new Date());
         integral.setCreator(user.getId());
@@ -499,7 +500,6 @@
         integral.setType(param.getType());
         integral.setRemark(param.getRemark());
         integral.setOrderCode(null);
-        integral.setUserType(Constants.ZERO);
         integralMapper.insert(integral);
     }
     @Override
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 895268e..d468a1c 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
@@ -1,6 +1,6 @@
 package com.doumee.service.business.impl;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.Jwt.JwtPayLoad;
 import com.doumee.config.Jwt.JwtTokenUtil;
@@ -11,11 +11,11 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.GoodsorderJoinMapper;
 import com.doumee.dao.business.join.MemberJoinMapper;
-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;
@@ -24,6 +24,7 @@
 import com.doumee.dao.business.model.ShopScan;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.system.vo.ShopMoneyVO;
 import com.doumee.dao.web.dto.*;
 import com.doumee.dao.web.dto.shop.*;
 import com.doumee.dao.web.request.MyCustomerRequest;
@@ -39,12 +40,9 @@
 import org.apache.shiro.SecurityUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.xpath.operations.Bool;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -64,6 +62,9 @@
 
     @Autowired
     private ShopMapper shopMapper;
+    @Autowired
+    private UserActionMapper userActionMapper;
+
     @Autowired
     private GoodsMapper goodsMapper;
     @Autowired
@@ -222,15 +223,33 @@
     }
 
     @Override
+    @Transactional
     public void updateById(Shop shop) {
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(shop.getId()==null ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
         }
         isCreateParamValid(shop,user);
+        Shop model = shopMapper.selectById(shop.getId());
+        if(model.getId()==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE) ){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
         shop.setEditor(user.getId());
         shop.setEditDate(new Date());
+
         shopMapper.updateById(shop);
+        if(shop.getSaleType() !=null && !Constants.equalsInteger(shop.getSaleType(),model.getSaleType())){
+            //濡傛灉閿�鍞ā寮忓彂鐢熺紪鐮侊紝璁板綍鍙樻洿璁板綍
+            //鏇存崲鏃ュ織璁板綍
+            UserActionServiceImpl.saveUserActionBiz(user,shop.getId(),
+                    Constants.UserActionType.CHANGE_SALETYPE,
+                    userActionMapper,
+                    shop.getEditDate(),
+                    new String[]{user.getUsername(), DateUtil.getPlusTime2(shop.getEditDate())},
+                    JSONObject.toJSONString(shop) ,
+                    Constants.equalsInteger(model.getSaleType(),Constants.ONE)?"鑷敱閲囪喘":"骞冲彴閾鸿揣",
+                    Constants.equalsInteger(shop.getSaleType(),Constants.ONE)?"鑷敱閲囪喘":"骞冲彴閾鸿揣");
+        }
     }
 
 
@@ -320,9 +339,7 @@
        Shop shop= shopJoinMapper.selectJoinOne(Shop.class,queryWrapper);
         String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                 + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
-        if(Objects.nonNull(shop)&&StringUtils.isNotBlank(shop.getImgurl())){
-            shop.setImgFullUrl(path+shop.getImgurl());
-        }
+        shop.setImgFullUrl(path);
         shop.setAreas(AreasServiceImpl.getAddressByAreaId(shop.getAreaId()));
         if(shop.getLatitude()!=null && shop.getLongitude()!=null){
             shop.setLocationInfo(shop.getLatitude().doubleValue()+","+shop.getLongitude().doubleValue());
@@ -392,6 +409,25 @@
             }
 
         }
+        return PageData.from(result );
+    }
+    @Override
+    public   PageData<ShopMoneyVO>  findPageMoney(PageWrap<Shop> pageWrap){
+        IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper
+                .selectAll(Shop.class)
+                .select("(select sum(price) from goodsorder g where  g.DISTRIBUTION_SHOP_ID=t.id and g.status in (1,2) and g.isdeleted=0) as jiesuanIng" )
+                .select("(select g.create_date from withdraw_record g where  g.MEMBER_ID=t.id  and g.isdeleted=0 order by g.id desc limit 1 ) as withdrawDate" )
+                .select("(select sum(g.amount)  from withdraw_record g where  g.MEMBER_ID=t.id and g.status=1  and g.isdeleted=0 ) as withdrawTotal"  )
+                .select("(select sum(g.amount)  from withdraw_record g where  g.MEMBER_ID=t.id and g.status=0 and g.isdeleted=0 ) as withdrawIng" );
+        queryWrapper.eq(Shop::getIsdeleted, Constants.ZERO);
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCode()) ,Shop::getCode,pageWrap.getModel().getCode());
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getUsername()) ,Shop::getName,pageWrap.getModel().getUsername());
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()) ,Shop::getName,pageWrap.getModel().getName());
+        queryWrapper.orderByDesc(Shop::getId);
+        IPage<ShopMoneyVO> result = shopJoinMapper.selectJoinPage(page, ShopMoneyVO.class, queryWrapper);
         return PageData.from(result );
     }
 
@@ -864,7 +900,7 @@
         }
         //榛樿sku淇℃伅
         GoodsSku goodsSku = goodsSkuList.get(0);
-        if(Constants.formatBigdecimal(goodsSku.getPrice()).compareTo(Constants.formatBigdecimal(dto.getGoodsPrice())) >=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();

--
Gitblit v1.9.3