From bcad3fe1b888ae11d437f6558b7974cfa30cfb2e Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 13 一月 2026 18:24:07 +0800
Subject: [PATCH] 经销商管理

---
 server/dmmall_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java             |   15 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java                      |    3 
 server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java                          |   14 
 server/dmmall_service/src/main/java/com/doumee/service/system/SystemDictDataService.java          |    4 
 server/dmmall_service/src/main/java/com/doumee/dao/system/dto/PlatformConfigDTO.java              |   52 ++
 admin/src/views/business/goodsLabels.vue                                                          |   30 -
 server/dmmall_admin/src/main/java/com/doumee/api/business/CouponController.java                   |    6 
 server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsController.java                    |    5 
 admin/src/views/business/orderSet.vue                                                             |  265 ++++++++++++++
 admin/src/components/common/UploadImage.vue                                                       |   37 +
 admin/src/api/business/goods.js                                                                   |    7 
 admin/src/utils/request.js                                                                        |    5 
 admin/src/views/business/platformGoods.vue                                                        |   94 ++--
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/LabelsServiceImpl.java       |   29 +
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java        |   38 +
 admin/src/components/business/OperaGoodsWindow.vue                                                |  266 +++++++++++---
 server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java |  174 +++++++++
 admin/src/api/system/dictData.js                                                                  |    9 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java       |   15 
 19 files changed, 887 insertions(+), 181 deletions(-)

diff --git a/admin/src/api/business/goods.js b/admin/src/api/business/goods.js
index ff9c116..448ba8b 100644
--- a/admin/src/api/business/goods.js
+++ b/admin/src/api/business/goods.js
@@ -6,7 +6,9 @@
     trim: true
   })
 }
-
+export function detail (id) {
+  return request.get(`/business/goods/${id}`)
+}
 // 鍒涘缓
 export function create (data) {
   return request.post('/business/goods/create', data)
@@ -16,6 +18,9 @@
 export function updateById (data) {
   return request.post('/business/goods/updateById', data)
 }
+export function updateStatus (data) {
+  return request.post('/business/goods/updateStatus', data)
+}
 
 export function findListByParentCategory (data) {
   return request.post('/business/goods/findListByParentCategory', data)
diff --git a/admin/src/api/system/dictData.js b/admin/src/api/system/dictData.js
index 2d9cb31..805bfa4 100644
--- a/admin/src/api/system/dictData.js
+++ b/admin/src/api/system/dictData.js
@@ -33,3 +33,12 @@
     }
   })
 }
+
+export function getPlatformConfig () {
+  return request.get('/system/dictData/getPlatformConfig' ,{})
+}
+// 淇敼
+export function updPlatformConfig (data) {
+  return request.post('/system/dictData/updPlatformConfig', data)
+}
+
diff --git a/admin/src/components/business/OperaGoodsWindow.vue b/admin/src/components/business/OperaGoodsWindow.vue
index a3084a4..cb55733 100644
--- a/admin/src/components/business/OperaGoodsWindow.vue
+++ b/admin/src/components/business/OperaGoodsWindow.vue
@@ -10,69 +10,113 @@
       <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
         <el-input v-model="form.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" v-trim/>
       </el-form-item>
-      <el-form-item v-if="form.type==2" label="鍟嗗搧鏍囩" prop="labels">
-        <el-input v-model="form.labels" placeholder="璇疯緭鍏ユ爣绛撅紝澶氫釜鐢ㄢ��,鈥濋殧寮�锛屼笉瓒呰繃5涓�" v-trim/>
+      <el-form-item label="鍟嗗搧鍒嗙被" prop="categoryId">
+        <el-select  v-model="form.categoryId"    placeholder="璇烽�夋嫨鎵�灞炲垎绫�"  clearable filterable >
+          <el-option
+            v-for="item in labels()"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
       </el-form-item>
-      <template v-else>
-        <el-form-item label="鍟嗗搧鍒嗙被" prop="categoryId">
-          <el-select
-            v-model="form.categoryId"
-            placeholder="璇烽�夋嫨鎵�灞炲垎绫�"
-          >
-            <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">
-          <el-select
-            v-model="form.brandId"
-            placeholder="璇烽�夋嫨鍟嗗搧鍝佺墝"
-          >
-            <el-option
-              v-for="item in brands()"
-              :key="item.id"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </template>
+      <el-form-item label="鍟嗗搧鍝佺墝" prop="brandId">
+        <el-select v-model="form.brandId"   placeholder="璇烽�夋嫨鍟嗗搧鍝佺墝" clearable filterable >
+          <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="imgurl">
-        <UploadAvatarImage
-          :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
-          @uploadSuccess="uploadAvatarSuccess"
-          @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true"
-        />
+        <div  style="display: flex; align-items: center;justify-content: center;  height: 100%; width: 100%">
+          <UploadAvatarImage
+              :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl}"
+              :uploadData="{folder:'goods'}"
+              @uploadSuccess="uploadAvatarSuccess"
+              @uploadEnd="isUploading = false"
+              @uploadBegin="isUploading = true"
+              style=" width: 120px;"
+          />
+          <div class="tip-warn" style=" margin-left: 20px; margin-top: 30px;">
+            寤鸿灏哄锛�100px X 100px
+            鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�
+          </div>
+        </div>
       </el-form-item>
-      <el-form-item v-if="form.type==2" label="鍜栬眴椋庡懗" prop="fileList">
-        <UploadAvatarImage
-          :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
-          @uploadSuccess="uploadAvatarSuccess"
-          @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true"
-        />
-      </el-form-item>
-      <el-form-item v-else label="鍟嗗搧杞挱鍥�" prop="fileList">
+      <el-form-item label="鍟嗗搧杞挱鍥�" prop="fileList">
         <UploadImage
           :fileList="form.fileList"
+          :uploadData="{folder:'goods'}"
           @beginUpload="isUploading=true"
           @endUpload="isUploading=false"/>
+        <p class="tip-warn">
+          寤鸿灏哄锛�750px X 750px锛屼笂闄�6寮�
+          鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�,
+        </p>
       </el-form-item>
-      <el-form-item label="灞曠ず浠锋牸" prop="price">
-        <el-input v-model="form.price" placeholder="璇疯緭鍏ュ睍绀轰环鏍�" v-trim>
-          <template slot="append">{{ form.type != 1 ? '鍏�' : '鍜栬眴' }}</template>
+      <el-form-item label="鍑哄巶浠凤紙鍏冿級" prop="price">
+        <el-input type="number" v-model="form.price" placeholder="璇疯緭鍏ュ嚭鍘備环" v-trim>  <template slot="append"> 鍏�</template>  </el-input>
+      </el-form-item>
+      <el-form-item label="閿�鍞环锛堝厓锛�" prop="skuPrice">
+        <el-input type="number" v-model="form.skuPrice" placeholder="璇疯緭鍏ラ攢鍞环" v-trim>  <template slot="append"> 鍏�</template>  </el-input>
+      </el-form-item>
+      <el-form-item label="鍒掔嚎浠凤紙鍏冿級" prop="showPrice">
+        <el-input type="number" v-model="form.showPrice" placeholder="璇疯緭鍏ョ嚎浠�" v-trim>  <template slot="append"> 鍏�</template>  </el-input>
+      </el-form-item>
+      <el-form-item label="绉垎鎶垫墸棰濆害" prop="deductRata">
+        <el-input type="number" v-model="form.deductRata" placeholder="璇疯緭鍏ョН鍒嗘姷鎵i搴�" v-trim>
+          <template slot="append">%</template>
+        </el-input>
+        <p class="tip-warn" style="margin-bottom: 1px;"><i class="el-icon-warning"></i>鎻愰啋锛氱Н鍒嗗彲鎶垫墸閲戦鍗犲晢鍝侀浂鍞环鐨勭櫨鍒嗘瘮锛�0.1%锝�100%涔嬮棿 </p>
+      </el-form-item>
+      <el-form-item  label="搴撳瓨閲�" prop="stockNum">
+        <el-input type="number" v-model="form.stockNum" placeholder="璇疯緭鍏ュ晢鍝佸簱瀛橀噺" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗗搧鍗曚綅" prop="unitName">
+        <el-input v-model="form.unitName" placeholder="璇疯緭鍏ュ晢鍝佸崟浣�" v-trim/>
+      </el-form-item>
+      <el-form-item  label="鍒濆閿�閲�" prop="salenum">
+        <el-input type="number" v-model="form.salenum" placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" v-trim/>
+      </el-form-item>
+      <el-form-item  label="鍟嗗搧閲嶉噺" prop="weight">
+        <el-input type="number" v-model="form.weight" placeholder="璇疯緭鍏ュ晢鍝侀噸閲�" v-trim>
+        <template slot="append">kg</template>
         </el-input>
       </el-form-item>
-      <el-form-item v-if="form.type!=2" label="鍒濆閿�閲�" prop="salenum">
-        <el-input v-model="form.salenum" placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" v-trim/>
+      <el-form-item label="鏄惁涓婃灦" prop="status">
+        <el-radio-group v-model="form.status">
+          <el-radio :value="1" :label="1" >涓婃灦</el-radio>
+          <el-radio :value="0" :label="0" >涓嬫灦</el-radio>
+        </el-radio-group>
       </el-form-item>
+      <el-form-item label="浣跨敤鍟嗗搧鍝佺墝" prop="brandIdList">
+        <el-select v-model="form.brandIdList"   placeholder="璇烽�夋嫨鍟嗗搧鍝佺墝" clearable multiple @change="changeBrand">
+          <el-option
+              v-for="item in applyBrands"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <div v-if="form.brandIdList && form.brandIdList.length" style="border:1px solid #f2f2f2; margin-left: 150px;width: 700px;padding: 20px 0 0px 0;margin-bottom: 20px;"  class="el-form-item__content">
+<!--
+        <span style="line-height: 32px;font-size: 14px;"><b style="color: #F56C6C;margin-right: 4px;font-size: 11px;">*</b>{{'銆�'+(item.name)+'銆戠郴鍒楋細'}}</span>
+-->
+        <el-form-item  v-for="(item,index) in applyBrands" v-if="item.show" :key="'warning_'+index" style="display: block;width: 100%;"  :label="'銆�'+(item.name)+'銆戠郴鍒�'"  >
+          <el-select v-model="item.childIdList" filterable  multiple   style=" width: 500px;"  clearable  placeholder="璇烽�夋嫨鍝佺墝绯诲垪" >
+            <el-option v-for="item in item.childList"   :label="item.name" :value="item.id" :key="'brand_'+index+item.id">  </el-option>
+          </el-select>
+        </el-form-item>
+<!--
+        <el-button type="danger" style="margin-left: 10px;height: 32px; " @click="delDo(index)" v-if="index>0 || form.detailList.length>1">鍒犻櫎</el-button>
+-->
+      </div>
       <el-form-item label="鍟嗗搧璇︽儏" prop="content">
-        <RichEditor :content="{ content : form.content}"  @edit="form.content=$event" />
+        <RichEditor  :richData="form.content" :styleEditor="'border: 1px solid #ccc;display: inline-block;height:500px;'" @getWangedditor="getWangedditor" :readonly="false"/>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -84,6 +128,7 @@
 import UploadImage from '@/components/common/UploadImage'
 import UploadAvatarImage from '@/components/common/UploadAvatarImage'
 import RichEditor from '@/components/common/RichEditor'
+import { findAll as labelList } from '@/api/business/labels'
 export default {
   name: 'OperaGoodsWindow',
   extends: BaseOpera,
@@ -103,24 +148,30 @@
         imgurlfull: '',
         salenum: '',
         type: 0,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        remark: '',
         info: '',
         content: '',
         sortnum: '',
-        looknum: '',
-        type: '',
-        status: '',
-        isrec: '',
-        styleImg: '',
-        labels: ''
+        skuPrice: null,
+        status: 1,
+        showPrice: null,
+        deductRata: null,
+        weight: null,
+        unitName: '',
+        stockNum: null,
+        brandIdList: [],
+        brandList: []
       },
+      applyBrands: [],
       // 楠岃瘉瑙勫垯
       rules: {
+        name: [{ required: true, message: '璇疯緭鍏ュ晢鍝佸悕绉�', tigger: 'blur' }],
+        categoryId: [{ required: true, message: '璇烽�夋嫨鎵�灞炲垎绫�' }],
+        brandIdList: [{ required: true, message: '璇峰綍鍏ラ�傜敤鍝佺墝鍜岀郴鍒椾俊鎭�' }],
+        weight: [{ required: true, message: '璇疯緭鍏ュ晢鍝侀噸閲�' }],
+        price: [{ required: true, message: '璇疯緭鍏ュ晢鍝佸嚭鍘備环' }],
+        skuPrice: [{ required: true, message: '璇疯緭鍏ュ晢鍝侀浂鍞环' }],
+        deductRata: [{ required: true, message: '璇疯緭鍏ョН鍒嗘姷鎵f瘮渚�' }],
+        status: [{ required: true, message: '璇烽�夋嫨鏄惁涓婃灦' }]
       }
     }
   },
@@ -130,11 +181,48 @@
       api: '/business/goods',
       'field.id': 'id'
     })
+    this.loadBrandList()
   },
   methods: {
+    isSeletedBrand (val) {
+      var r = false
+      if (!this.form.brandIdList || !this.form.brandIdList.length) {
+        return false
+      }
+      this.form.brandIdList.forEach(item => {
+        if (item === val.id) {
+          r = true
+        }
+      })
+      return r
+    },
+    changeBrand () {
+      this.applyBrands.forEach(item => {
+        item.show = this.isSeletedBrand(item)
+      })
+      console.log(this.form.brandIdList, this.applyBrands)
+    },
+    loadBrandList () {
+      labelList({
+        type: 14 // 閫傚簲鍟嗗搧鍝佺墝
+      })
+        .then(res => {
+          this.applyBrands = res
+          this.applyBrands.forEach(item => {
+            item.show = this.isSeletedBrand(item)
+          })
+        })
+    },
+    getWangedditor (val) {
+      this.form.content = val
+    },
     open (title, target, type) {
       this.title = title
       this.visible = true
+      this.form.brandIdList = []
+      this.form.fileList = []
+      this.form.imgurl=''
+      this.form.imgurlfull=''
       // debugger
       // 鏂板缓
       if (target == null) {
@@ -143,21 +231,64 @@
           this.form[this.configData['field.id']] = null
           this.form.type = type
         })
+        this.loadBrandList()
         return
       }
       // 缂栬緫
-      this.$nextTick(() => {
+      this.$nextTick(async () => {
         for (const key in this.form) {
           this.form[key] = target[key]
         }
         this.form.type = type
+        await this.loadInfo(this.form.id)
+        if (this.form.imgurl) {
+          this.form.imgurlfull = target.resourcePath + target.imgurl
+        }
       })
     },
-    uploadAvatarSuccess(file) {
+    loadInfo () {
+      this.form.brandIdList =[]
+      this.form.fileList =[]
+      this.api.detail(this.form.id).then(res => {
+        if (res && res.brandList) {
+          this.form.brandList = res.brandList
+          res.brandList.forEach(item => {
+            this.form.brandIdList.push(item.id)
+          })
+        }
+        if (res.fileList && res.fileList.length) {
+          res.fileList.forEach(item => {
+            this.form.fileList.push(
+              {
+                fileurl: item.fileurl,
+                name: item.fileName,
+                url: res.resourcePath + item.fileurl
+              }
+            )
+          })
+          console.log(this.form.fileList)
+        }
+        this.loadBrandList()
+      })
+    },
+    uploadAvatarSuccess (file) {
       this.form.imgurlfull = file.imgurlfull
       this.form.imgurl = file.imgurl
+    },
+    confirm () {
+      this.form.brandList = []
+      this.applyBrands.forEach(item => {
+        if (item.show) {
+          this.form.brandList.push(item)
+        }
+      })
+      if (this.form.id == null || this.form.id === '') {
+        this.__confirmCreate()
+        return
+      }
+      this.__confirmEdit()
     }
-  },
+  }
 }
 </script>
 
@@ -172,4 +303,7 @@
     width: 100%;
   }
 }
+::v-deep  .el-form-item__label{
+  width: 150px !important;
+}
 </style>
diff --git a/admin/src/components/common/UploadImage.vue b/admin/src/components/common/UploadImage.vue
index 5a6a876..2fc87b3 100644
--- a/admin/src/components/common/UploadImage.vue
+++ b/admin/src/components/common/UploadImage.vue
@@ -33,15 +33,15 @@
         </span>
       </div>
     </el-upload>
-    <el-image-viewer 
-      v-if="showViewer" 
+    <el-image-viewer
+      v-if="showViewer"
       :on-close="closeViewer"
       :initialIndex="tempIndex"
       :url-list="srcList"
       :z-index="3000"
     />
   </div>
-  
+
 </template>
 
 <script>
@@ -55,12 +55,15 @@
       type: Array,
       default: () => []
     },
+    maxNum: {
+      type: Number,
+      default: () => null
+    },
     uploadData: Object,
   },
   data() {
     return {
       uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadPicture',
-      
       realList: [],
       srcList: [],
       tempIndex: 0,
@@ -70,28 +73,34 @@
   watch: {
     fileList: {
       handler(val) {
-        console.log(val);
+        console.log("===================",val);
         if (val.length==0) {
           this.realList = []
           this.srcList = []
+        }else{
+          this.realList=val
+          val.forEach(item =>{
+            this.srcList.push(item.url)
+          })
         }
+
+        console.log("==================srcList=",this.srcList);
       }
-      
+
     }
   },
   methods: {
     beforeUpload(file) {
-      
       this.$emit('beginUpload')
       return true
     },
      // 涓婁紶鍥剧墖鎴愬姛
-     uploadSuccess (res, file, fileList) {     
-      // console.log('this.fileList', this.fileList);
+     uploadSuccess (res, file, fileList) {
+      console.log('this.fileList', this.fileList);
       // console.log('fileList', fileList);
       this.$emit('endUpload')
-      this.realList = fileList
-      this.srcList.push(res.data.url)
+      // this.realList = fileList
+      // this.srcList.push(res.data.url)
       // console.log('file', file);
       if (res.code === 200) {
         this.fileList.push(
@@ -110,7 +119,7 @@
       this.$message.error('涓婁紶澶辫触')
     },
     handlePictureCardPreview(file) {
-      this.tempIndex = this.srcList.findIndex(item => item == file.response.data.url )
+      this.tempIndex = this.srcList.findIndex(item => item == file.url )
       this.showViewer = true
     },
     closeViewer() {
@@ -118,12 +127,12 @@
     },
     handleRemove(file) {
       console.log(this.fileList);
-      let tempIndex = this.realList.findIndex(item => item.fileurl === file.response.data.imgaddr)
+      let tempIndex = this.realList.findIndex(item => item.fileurl === file.fileurl)
       // debugger
       this.realList.splice(tempIndex, 1)
       this.fileList.splice(tempIndex, 1)
       this.srcList.splice(tempIndex, 1)
-      
+
     },
   },
 }
diff --git a/admin/src/utils/request.js b/admin/src/utils/request.js
index e31d758..b991930 100644
--- a/admin/src/utils/request.js
+++ b/admin/src/utils/request.js
@@ -3,6 +3,7 @@
 import pkg from '../../package'
 import { trim } from './util'
 import cache from '../plugins/cache'
+import { Message } from 'element-ui'
 
 axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
 const axiosInstance = axios.create({
@@ -13,7 +14,7 @@
 
 // 鏂板缓璇锋眰鎷︽埅鍣�
 axiosInstance.interceptors.request.use(config => {
-  console.log(config);
+  console.log(config)
   // debugger
   // 鍙傛暟鍘荤┖鏍�
   if (config.trim === true) {
@@ -42,7 +43,6 @@
 
 // 鏂板缓鍝嶅簲鎷︽埅鍣�
 axiosInstance.interceptors.response.use((response) => {
-  // debugger
   // 璇锋眰澶辫触
   if (response.status !== 200) {
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
@@ -64,6 +64,7 @@
   }
   // 涓氬姟澶辫触
   if (!response.data.success) {
+    Message.error(response.data.message)
     return Promise.reject(response.data)
   }
   return response.data.data
diff --git a/admin/src/views/business/goodsLabels.vue b/admin/src/views/business/goodsLabels.vue
index 9f279dd..bc4be98 100644
--- a/admin/src/views/business/goodsLabels.vue
+++ b/admin/src/views/business/goodsLabels.vue
@@ -5,23 +5,6 @@
       <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="鎵�灞炴澘鍧�" prop="module">
-        <el-select
-          v-model="searchForm.module"
-          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>
@@ -30,7 +13,7 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:productlabel:create', 'business:productlabel:delete']">
-        <li><el-button type="primary" @click="$refs.operaProductLabelWindow.open('鏂板缓鍟嗗搧鏍囩淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:productlabel:create']">鏂板缓</el-button></li>
+        <li><el-button type="primary" @click="$refs.operaProductLabelWindow.open('鏂板缓鍟嗗搧鍒嗙被')" icon="el-icon-plus" v-permissions="['business:productlabel:create']">鏂板缓</el-button></li>
         <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:productlabel:delete']">鍒犻櫎</el-button></li>
       </ul>
       <el-table
@@ -41,12 +24,7 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="module" label="鎵�灞炴澘鍧�" min-width="100px">
-          <template slot-scope="{row}">
-            {{ row.module==0?'骞冲彴鍟嗗煄':'鍜栬眴鍟嗗煄' }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="name" label="鍒嗙被鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="鍟嗗搧鍒嗙被" min-width="100px"></el-table-column>
         <el-table-column prop="sortnum" label="鎺掑簭鐮�(鍗囧簭)" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" min-width="100px">
@@ -68,7 +46,7 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaProductLabelWindow.open('缂栬緫鍟嗗搧鏍囩淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:productlabel:update']">缂栬緫</el-button>
+            <el-button type="text" @click="$refs.operaProductLabelWindow.open('缂栬緫鍟嗗搧鍒嗙被', row)" icon="el-icon-edit" v-permissions="['business:productlabel:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:productlabel:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
@@ -107,7 +85,7 @@
   },
   created () {
     this.config({
-      module: '鍟嗗搧鏍囩淇℃伅琛�',
+      module: '鍟嗗搧鍒嗙被淇℃伅琛�',
       api: '/business/labels',
       'field.id': 'id',
       'field.main': 'id'
diff --git a/admin/src/views/business/orderSet.vue b/admin/src/views/business/orderSet.vue
new file mode 100644
index 0000000..b5b537b
--- /dev/null
+++ b/admin/src/views/business/orderSet.vue
@@ -0,0 +1,265 @@
+<template>
+  <div class="box" style="max-height:calc(100% - 60px);margin-bottom:50px;overflow-y: auto" >
+    <el-form :model="form" ref="form">
+      <div class="header">
+        <span style="font-size: 15px; font-weight: bold">銆�1銆戞敞鍐屽鍔�</span>
+      </div>
+      <div class="item-content">
+        <el-form-item label="绉垎濂栧姳" label-width="150px"  prop="regIntegralRewardStatus">
+          <el-switch  v-model="form.regIntegralRewardStatus" :active-value="0" :inactive-value="1"    active-color="#13ce66"   inactive-color="#ff4949"  ></el-switch>
+        </el-form-item>
+        <el-form-item label="鏂颁汉娉ㄥ唽閫�" label-width="250px" prop="regIntegralReward">
+          <el-input  style="width: 200px;margin: 0px 20px" type="number"   v-model="form.regIntegralReward"   placeholder="璇疯緭鍏�"   v-trim>
+            <template slot="append">绉垎</template>
+          </el-input>
+        </el-form-item>
+      </div>
+      <div class="item-content">
+        <el-form-item label="浼樻儬鍒稿鍔�" label-width="150px"  prop="regCouponRewardStatus">
+          <el-switch  v-model="form.regCouponRewardStatus" :active-value="0" :inactive-value="1"    active-color="#13ce66"   inactive-color="#ff4949"  ></el-switch>
+        </el-form-item>
+        <div  >
+          <el-form-item label="鏂颁汉娉ㄥ唽閫佷紭鎯犲埜" label-width="250px" prop="regCouponRewardList">
+          </el-form-item>
+          <div  style="margin-left: 150px;border: 1px solid #f2f2f2">
+            <el-table style="width: 600px;"  :data="form.regCouponRewardList">
+              <el-table-column prop="shopPrice" label="浼樻儬鍒�" min-width="300px" align="center">
+                <template slot-scope="{row}" >
+                  <el-select v-model="row.couponId" style="width: 200px;margin: 0px 20px" clearable filterable   placeholder="璇烽�夋嫨浼樻儬鍒�"  >
+                    <el-option v-for="item in couponList"   :label="item.name"  :value="item.id">  </el-option>
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column prop="num" label="鏁伴噺" min-width="200px" align="center">
+                <template slot-scope="{row}" >
+                  <el-input  style="width: 100px;margin: 0px 20px" type="number"   v-model="row.num"   placeholder="璇疯緭鍏ユ暟閲�"   v-trim/>
+                </template>
+              </el-table-column>
+              <el-table-column  label="鎿嶄綔" min-width="100px" align="center">
+                <template slot-scope="scope" >
+                  <el-button style="color: red;border: none;" @click="delCoupon(0,scope.$index)">鍒犻櫎</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-button s type="primary" icon="el-icon-plus" @click="addCoupon(0)" style="height: 30px;margin: 10px;">娣诲姞</el-button>
+          </div>
+        </div>
+      </div>
+      <div class="header">
+        <span style="font-size: 15px; font-weight: bold">銆�2銆戦個璇峰ソ鍙嬪鍔�</span>
+      </div>
+      <div class="item-content">
+        <el-form-item label="绉垎濂栧姳" label-width="150px"  prop="shareIntegralRewardStatus">
+          <el-switch  v-model="form.shareIntegralRewardStatus" :active-value="0" :inactive-value="1"    active-color="#13ce66"   inactive-color="#ff4949"  ></el-switch>
+        </el-form-item>
+        <el-form-item label="濂藉弸鎴愬姛娉ㄥ唽閫侀個璇蜂汉" label-width="250px" prop="shareIntegralReward">
+          <el-input  style="width: 200px;margin: 0px 20px" type="number"   v-model="form.shareIntegralReward"   placeholder="璇疯緭鍏�"   v-trim>
+            <template slot="append">绉垎</template>
+          </el-input>
+        </el-form-item>
+      </div>
+      <div class="item-content">
+        <el-form-item label="浼樻儬鍒稿鍔�" label-width="150px"  prop="shareCouponRewardStatus">
+          <el-switch  v-model="form.shareCouponRewardStatus" :active-value="0" :inactive-value="1"    active-color="#13ce66"   inactive-color="#ff4949"  ></el-switch>
+        </el-form-item>
+        <div  >
+          <el-form-item label="濂藉弸瀹屾垚棣栧崟閫侀個璇蜂汉浼樻儬鍒�" label-width="250px" prop="shareCouponRewardList">
+          </el-form-item>
+          <div  style="margin-left: 150px;border: 1px solid #f2f2f2">
+            <el-table style="width: 600px;"  :data="form.shareCouponRewardList">
+              <el-table-column prop="couponId" label="浼樻儬鍒�" min-width="300px" align="center">
+                <template slot-scope="{row}" >
+                  <el-select v-model="row.couponId" style="width: 200px;margin: 0px 20px"  clearable filterable   placeholder="璇烽�夋嫨浼樻儬鍒�"  >
+                    <el-option v-for="item in couponList"   :label="item.name"  :value="item.id">  </el-option>
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column prop="num" label="鏁伴噺" min-width="200px" align="center">
+                <template slot-scope="{row}" >
+                  <el-input  style="width: 100px;margin: 0px 20px" type="number"   v-model="row.num"   placeholder="璇疯緭鍏ユ暟閲�"   v-trim/>
+                </template>
+              </el-table-column>
+              <el-table-column  label="鎿嶄綔" min-width="100px" align="center">
+                <template slot-scope="scope" >
+                  <el-button style="color: red;border: none;" @click="delCoupon(1,scope.$index)">鍒犻櫎</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-button s type="primary" icon="el-icon-plus" @click="addCoupon(1)" style="height: 30px;margin: 10px;">娣诲姞</el-button>
+          </div>
+        </div>
+      </div>
+      <div class="header">
+        <span style="font-size: 15px; font-weight: bold">銆�3銆戞秷璐硅繑绉垎</span>
+      </div>
+      <div class="item-content">
+        <el-form-item label="杩旂敤鎴风Н鍒�" label-width="150px"  prop="returnMemberIntegralStatus">
+          <el-switch  v-model="form.returnMemberIntegralStatus" :active-value="0" :inactive-value="1"    active-color="#13ce66"   inactive-color="#ff4949"  ></el-switch>
+        </el-form-item>
+        <el-form-item label="璁㈠崟瀹炰粯閲戦姣忔弧" label-width="250px" prop="returnMemberIntegral">
+          <el-input  style="width: 250px;margin: 0px 20px" type="number"   v-model="form.returnMemberIntegral"   placeholder="璇疯緭鍏�"   v-trim>
+            <template slot="append">鍏冭繑鐢ㄦ埛1绉垎</template>
+          </el-input>
+          <p class="tip-warn" style="margin-bottom: 1px;"><i class="el-icon-warning"></i>鎻愰啋锛氬疄浠橀噾棰濆幓闄よ繍璐�</p>
+        </el-form-item>
+      </div>
+      <div class="item-content">
+        <el-form-item label="杩旂粡閿�鍟嗙Н鍒�" label-width="150px"  prop="returnShopIntegralStatus">
+          <el-switch  v-model="form.returnShopIntegralStatus" :active-value="0" :inactive-value="1"    active-color="#13ce66"   inactive-color="#ff4949"  ></el-switch>
+        </el-form-item>
+        <el-form-item label="璁㈠崟瀹炰粯閲戦姣忔弧" label-width="250px" prop="returnShopIntegral">
+          <el-input  style="width: 250px;margin: 0px 20px" type="number"   v-model="form.returnShopIntegral"   placeholder="璇疯緭鍏�"   v-trim>
+            <template slot="append">鍏冭繑缁忛攢鍟�1绉垎</template>
+          </el-input>
+          <p class="tip-warn" style="margin-bottom: 1px;"><i class="el-icon-warning"></i>鎻愰啋锛氬疄浠橀噾棰濆幓闄よ繍璐�</p>
+        </el-form-item>
+      </div>
+      <div class="header">
+        <span style="font-size: 15px; font-weight: bold">銆�4銆戝悎璁′紭鎯犳壙鎷呮瘮渚�</span>
+      </div>
+      <div class="item-content">
+        <el-form-item label="鎬婚儴鎵挎媴" label-width="150px" prop="totalRate">
+          <el-input  style="width: 200px;margin: 0px 20px" type="number"   v-model="form.totalRate"   placeholder="璇疯緭鍏�"   v-trim>
+            <template slot="append">%</template>
+          </el-input>
+          <p class="tip-warn" style="margin-bottom: 1px;"><i class="el-icon-warning"></i>鎻愰啋锛氳缃�婚儴鍜岀粡閿�鍟嗗湪璁㈠崟鍚堣浼樻儬閲戦涓紙浼樻儬鍒�+绉垎鎶垫墸锛夊悇鑷壙鎷呯殑姣斾緥</p>
+        </el-form-item>
+      </div>
+      <el-form-item style="margin-top: 100px;width: 100%;text-align: center">
+        <el-button type="primary" style="width: 300px"  :loading="working" @click="submit">淇濆瓨閰嶇疆椤�</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import { getPlatformConfig, updPlatformConfig } from '@/api/system/dictData'
+import {allList} from '@/api/business/coupon'
+export default {
+  name: '',
+  data () {
+    return {
+      uploadData: {
+        folder: ''
+      },
+      isUploading: false,
+      working: false,
+      couponList: [],
+      form: {
+        regIntegralRewardStatus: 0,
+        shareIntegralRewardStatus: 0,
+        regCouponRewardStatus: 0,
+        shareCouponRewardStatus: 0,
+        regIntegralReward: 0,
+        shareIntegralReward: 0,
+        regCouponRewardList: [],
+        shareCouponRewardList: [],
+        returnMemberIntegralStatus: 0,
+        returnShopIntegralStatus: 0,
+        returnMemberIntegral: 0,
+        returnShopIntegral: 0,
+        totalRate: 0
+      }
+    }
+  },
+
+  created () {
+    this.getCouponList()
+    this.getData()
+  },
+
+  methods: {
+    getCouponList () {
+      allList({})
+        .then(res => {
+          if (res) {
+            this.couponList = res || []
+          }
+        })
+    },
+    delCoupon(type,index){
+      if(type ===0){
+        this.form.regCouponRewardList.splice(index,1)
+      }else if(type ===1){
+        this.form.shareCouponRewardList.splice(index,1)
+      }
+    },
+    addCoupon(type){
+      if(type ===0){
+        this.form.regCouponRewardList.push({couponId:null,num:null})
+      }else if(type ===1){
+        this.form.shareCouponRewardList.push({couponId:null,num:null})
+      }
+
+    },
+    getData () {
+      getPlatformConfig({})
+        .then(res => {
+          if (res) {
+            this.form = {
+              regIntegralRewardStatus: res.regIntegralRewardStatus || 0,
+              shareIntegralRewardStatus: res.shareIntegralRewardStatus || 0,
+              regCouponRewardStatus: res.regCouponRewardStatus || 0,
+              shareCouponRewardStatus: res.shareCouponRewardStatus || 0,
+              regIntegralReward: res.regIntegralReward || 0,
+              shareIntegralReward: res.shareIntegralReward || 0,
+              regCouponRewardList: res.regCouponRewardList || [],
+              shareCouponRewardList: res.shareCouponRewardList || [],
+              returnMemberIntegralStatus: res.returnMemberIntegralStatus || 0,
+              returnShopIntegralStatus: res.returnShopIntegralStatus || 0,
+              returnMemberIntegral: res.returnMemberIntegral || 0,
+              returnShopIntegral: res.returnShopIntegral || 0,
+              totalRate: res.totalRate || 0
+            }
+          }
+        })
+    },
+    submit () {
+      console.log(this.form)
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        updPlatformConfig(this.form).then(res => {
+          this.$message.success('淇濆瓨鎴愬姛')
+          this.getData()
+        })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.el-container /deep/  .el-main{
+  width: 100%;
+  overflow-y: auto  !important ;
+  height: calc(100% - 94px);
+}
+.item-content{
+  display: flex;
+  width: 100%;
+}
+.header{
+  margin: 20px 0 20px 0;padding:10px;background-color: rgba(140,147,157,0.61);
+}
+/deep/ .el-main{
+  width: 100%;
+  //height: 100%;
+  overflow-y: auto  !important ;
+  height: calc(100% - 94px);
+}
+.box {
+  width: 100%;
+  padding: 30px;
+  box-sizing: border-box;
+  background: #ffffff;
+}
+</style>
diff --git a/admin/src/views/business/platformGoods.vue b/admin/src/views/business/platformGoods.vue
index cad4c97..2c1f3df 100644
--- a/admin/src/views/business/platformGoods.vue
+++ b/admin/src/views/business/platformGoods.vue
@@ -2,11 +2,11 @@
   <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-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-tabs>-->
       <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
         <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
@@ -51,15 +51,14 @@
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
-        <el-button @click="$refs.operaPlatformGoodsSkuWindow.open('骞冲彴SKU')">閲嶇疆</el-button>
       </section>
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:goods:create', 'business:goods:delete']">
-        <li><el-button type="primary" @click="$refs.operaGoodsWindow.open('鏂板缓鍟嗗搧', null, 0)" v-permissions="['business:goods:create']">鏂板缓</el-button></li>
-        <li><el-button type="primary" @click="issued(0)">涓婃灦</el-button></li>
-        <li><el-button type="primary" @click="soldOut(1)">涓嬫灦</el-button></li>
+        <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>
       </ul>
       <el-table
         v-loading="isWorking.search"
@@ -69,10 +68,9 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="imgurl" label="鍟嗗搧淇℃伅" min-width="200px">
+        <el-table-column prop="imgurl" label="鍟嗗搧淇℃伅" min-width="100px">
           <template slot-scope="{row}">
-            <el-image v-if="row.imgurl" :src="row.resourcePath+row.imgurl" :preview-src-list="[row.resourcePath+row.imgurl]"></el-image>
-            {{ row.name }}
+            <el-image style="width: 80px;height: 80px;" v-if="row.imgurl && row.imgurl!=''" :src="row.resourcePath+row.imgurl" :preview-src-list="[row.resourcePath+row.imgurl]"></el-image>
           </template>
         </el-table-column>
         <el-table-column prop="id" label="鍟嗗搧ID" min-width="150px" ></el-table-column>
@@ -83,13 +81,18 @@
         <el-table-column prop="stockNum" label="鍓╀綑搴撳瓨閲�" min-width="100px"></el-table-column>
         <el-table-column prop="salesVolume" label="瀹為檯閿�閲�" min-width="100px"></el-table-column>
         <el-table-column prop="skuPrice" label="闆跺敭浠�(鍏�)" min-width="100px"></el-table-column>
+        <el-table-column prop="shopPrice" label="渚涜揣浠疯缃�" min-width="100px" align="center">
+          <template slot-scope="{row}" >
+          <div @click="goPriceSet(row)" style="cursor:pointer;"><span  class="red"> {{row.shopPriceNum||0}}</span> / <span class="green"> {{row.shopNum||0}}</span>  </div>
+          </template>
+        </el-table-column>
         <el-table-column prop="editDate" label="鏈�杩戞洿鏂版椂闂�" min-width="100px"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+        <el-table-column prop="status" label="涓婁笅鏋剁姸鎬�" min-width="100px" fixed="right" align="center">
           <template slot-scope="{row}">
             <el-switch
               v-model="row.status"
-              :active-value="1"
-              :inactive-value="0"
+              :active-value="0"
+              :inactive-value="1"
               active-color="#13ce66"
               inactive-color="#ff4949"
               @change="statusChange(row)"
@@ -98,13 +101,14 @@
         </el-table-column>
         <el-table-column
           label="鎿嶄綔"
-          min-width="120"
+          min-width="250"
           fixed="right"
         >
           <template slot-scope="{row}">
-              <el-button type="text" @click="$refs.operaGoodsWindow.open('缂栬緫鍟嗗搧', row, 0)" v-permissions="['business:goods:update']">缂栬緫</el-button>
-              <el-button type="text" @click="deleteById(row)" v-permissions="['business:goods:delete']">鍒犻櫎</el-button>
-              <el-button type="text" @click="$refs.operaGoodsDetailWindow.open('鍟嗗搧璇︽儏', row, 0)">鏌ョ湅璇︽儏</el-button>
+             <el-button type="text" @click="$refs.operaGoodsWindow.open('缂栬緫鍟嗗搧', row, 0)" v-permissions="['business:goods:update']">缂栬緫</el-button>
+            <el-button type="text"  @click="goPriceSet(row)">渚涜揣浠�</el-button>
+            <el-button type="text" style="color: red;" @click="deleteById(row)" v-permissions="['business:goods:delete']">鍒犻櫎</el-button>
+            <!--              <el-button type="text" @click="$refs.operaGoodsDetailWindow.open('鍟嗗搧璇︽儏', row, 0)">鏌ョ湅璇︽儏</el-button>-->
           </template>
         </el-table-column>
       </el-table>
@@ -129,8 +133,7 @@
 import OperaGoodsWindow from '@/components/business/OperaGoodsWindow'
 import OperaGoodsDetailWindow from '@/components/business/OperaGoodsDetailWindow'
 import OperaPlatformGoodsSkuWindow from '@/components/business/OperaPlatformGoodsSkuWindow'
-import { fetchList as labelList } from '@/api/business/labels'
-import { updateById } from '@/api/business/goods'
+import { findAll as labelList } from '@/api/business/labels'
 export default {
   name: 'Goods',
   extends: BaseTable,
@@ -165,13 +168,14 @@
         labels: ''
       },
       labels: [],
-      brands: [],
+      serials: [],
+      brands: []
     }
   },
-  provide() {
+  provide () {
     return {
       labels: () => this.labels,
-      brands: () => this.brands,
+      brands: () => this.brands
     }
   },
   created () {
@@ -182,58 +186,50 @@
       'field.main': 'id'
     })
     this.search()
-
     labelList({
-      capacity: 999,
-      model: {
-        type: 0 //鍟嗗搧鍒嗙被
-      }
+      type: 0 // 鍟嗗搧鍒嗙被
+    }).then(res => {
+      this.labels = res
+    })
+    labelList({
+      type: 1 // 鍟嗗搧鍝佺墝
     })
       .then(res => {
-        this.labels = res.records
-      })
-    labelList({
-      capacity: 999,
-      model: {
-        type: 1 //鍟嗗搧鍝佺墝
-      }
-    })
-      .then(res => {
-        this.brands = res.records
+        this.brands = res
       })
   },
   methods: {
-    handleClick(val) {
+    goPriceSet(row){
 
+    },
+    handleClick (val) {
     },
     /**
      *
      * @param {涓婁笅鐘舵�亇 status 0涓婃灦 1涓嬫灦
      */
-    issued(status) {
+    issued (status) {
       if (this.tableData.selectedRows.length === 0) {
         this.$tip.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�')
         return
       }
-      let message = `纭${status==0?'涓婃灦':'涓嬫灦'}閫変腑鐨勫晢鍝佷箞?`
+      const message = `纭${status === 0 ? '涓婃灦' : '涓嬫灦'}閫変腑鐨勫晢鍝佷箞?`
       this.$dialog.messageWaring(message)
         .then(() => {
-
         })
     },
-
-    statusChange(row) {
-      updateById(row)
+    statusChange (row) {
+      this.statusChangeBiz([row])
+    },
+    statusChangeBiz (rows) {
+      this.api.updateStatus(rows)
         .then(() => {
-          this.$message.success('鎿嶄綔鎴愬姛')
+          this.search()
         })
         .catch(e => {
-          this.$message.error('鎿嶄綔鎴愬姛')
-        })
-        .then(() => {
-          this.handlePageChange()
+          this.search()
         })
     }
-  },
+  }
 }
 </script>
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/CouponController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/CouponController.java
index bdbfe85..ffad992 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/business/CouponController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/CouponController.java
@@ -81,6 +81,12 @@
     public ApiResponse<PageData<Coupon>> findPage (@RequestBody PageWrap<Coupon> pageWrap) {
         return ApiResponse.success(couponService.findPage(pageWrap));
     }
+    @ApiOperation("鍒楄〃鏌ヨ")
+    @PostMapping("/list")
+    @RequiresPermissions("business:coupon:query")
+    public ApiResponse<List<Coupon>> findList (@RequestBody Coupon pageWrap) {
+        return ApiResponse.success(couponService.findList(pageWrap));
+    }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsController.java
index ae7cf0c..2d7053c 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsController.java
@@ -26,7 +26,6 @@
 @RestController
 @RequestMapping("/business/goods")
 public class GoodsController extends BaseController {
-
     @Autowired
     private GoodsService goodsService;
 
@@ -70,9 +69,9 @@
 
 
     @ApiOperation("鍟嗗搧涓婁笅鏋剁姸鎬佷慨鏀�")
-    @PostMapping("/updateStatusById")
+    @PostMapping("/updateStatus")
     @RequiresPermissions("business:goods:update")
-    public ApiResponse updateStatusById(@RequestBody List<Goods> list) {
+    public ApiResponse updateStatus(@RequestBody List<Goods> list) {
         goodsService.updateStatusById(list);
         return ApiResponse.success(null);
     }
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java b/server/dmmall_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java
index 5d240d3..d08234f 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java
@@ -8,6 +8,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.system.dto.PlatformConfigDTO;
 import com.doumee.dao.system.dto.QuerySystemDictDataDTO;
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.dao.system.vo.SystemDictDataListVO;
@@ -99,4 +100,18 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鑾峰彇骞冲彴閰嶇疆椤�")
+    @GetMapping("/getPlatformConfig")
+    public ApiResponse<PlatformConfigDTO> getPlatformConfig () {
+        return ApiResponse.success(systemDictDataService.getPlatformConfigDTO());
+    }
+
+
+    @ApiOperation("鏇存柊骞冲彴閰嶇疆椤�")
+    @PostMapping("/updPlatformConfig")
+    public ApiResponse updPlatformConfig (@RequestBody PlatformConfigDTO platformConfigDTO) {
+        systemDictDataService.updPlatformConfig(platformConfigDTO);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
 }
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 a82cd73..c0cceb2 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
@@ -18,6 +18,20 @@
     public static final int THREE = 3 ;
     public static final int FOUR = 4 ;
     public static final String LABELS_IMG ="LABELS_IMG" ;
+    public static final String ORDERSET_REG_INTEGRAL_REWARD_STATUS = "ORDERSET_REG_INTEGRAL_REWARD_STATUS";
+     public static final String ORDERSET_SHARE_INTEGRAL_REWARD_STATUS="ORDERSET_SHARE_INTEGRAL_REWARD_STATUS";
+     public static final String ORDERSET_REG_COUPON_REWARD_STATUS="ORDERSET_REG_COUPON_REWARD_STATUS";
+     public static final String ORDERSET_SHARE_COUPON_REWARD_STATUS="ORDERSET_SHARE_COUPON_REWARD_STATUS";
+     public static final String ORDERSET_REG_INTEGRAL_REWARD="ORDERSET_REG_INTEGRAL_REWARD";
+     public static final String ORDERSET_SHARE_INTEGRAL_REWARD="ORDERSET_SHARE_INTEGRAL_REWARD";
+     public static final String ORDERSET_REG_COUPON_REWARD_LIST="ORDERSET_REG_COUPON_REWARD_LIST";
+     public static final String ORDERSET_SHARE_COUPON_REWARD_LIST="ORDERSET_SHARE_COUPON_REWARD_LIST";
+     public static final String ORDERSET_RETURN_MEMBER_INTEGRAL_STATUS="ORDERSET_RETURN_MEMBER_INTEGRAL_STATUS";
+     public static final String ORDERSET_RETURN_SHOP_INTEGRAL_STATUS="ORDERSET_RETURN_SHOP_INTEGRAL_STATUS";
+     public static final String ORDERSET_RETURN_MEMBER_INTEGRAL="ORDERSET_RETURN_MEMBER_INTEGRAL";
+     public static final String ORDERSET_RETURN_SHOP_INTEGRAL="ORDERSET_RETURN_SHOP_INTEGRAL";
+   public static final String ORDERSET_TOTAL_RATE="ORDERSET_TOTAL_RATE";
+    public static final String ORDER_SET ="ORDER_SET" ;
 
     /**
      * mq tag
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 a8e80dc..e47f226 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
@@ -136,6 +136,9 @@
     @ApiModelProperty(value = "sku閲戦", hidden = true)
     @TableField(exist = false)
     private BigDecimal skuPrice;
+    @ApiModelProperty(value = "sku鏄剧ず浠锋牸", hidden = true)
+    @TableField(exist = false)
+    private BigDecimal showPrice;
 
     @ApiModelProperty(value = "sku鎬婚噾棰�", hidden = true)
     @TableField(exist = false)
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/system/dto/PlatformConfigDTO.java b/server/dmmall_service/src/main/java/com/doumee/dao/system/dto/PlatformConfigDTO.java
new file mode 100644
index 0000000..f92f32b
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/system/dto/PlatformConfigDTO.java
@@ -0,0 +1,52 @@
+package com.doumee.dao.system.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("绯荤粺璁㈠崟閰嶇疆")
+public class PlatformConfigDTO {
+
+    @ApiModelProperty(value = "娉ㄥ唽绉垎濂栧姳鐘舵��  0寮�鍚� 1鍏抽棴")
+    private Integer regIntegralRewardStatus;
+    @ApiModelProperty(value = "閭�璇峰ソ鍙嬬Н鍒嗗鍔辩姸鎬�  0寮�鍚� 1鍏抽棴")
+    private Integer shareIntegralRewardStatus;
+    @ApiModelProperty(value = "娉ㄥ唽浼樻儬鍒稿鍔辩姸鎬�  0寮�鍚� 1鍏抽棴")
+    private Integer regCouponRewardStatus;
+    @ApiModelProperty(value = "閭�璇峰ソ鍙嬩紭鎯犲埜濂栧姳鐘舵��  0寮�鍚� 1鍏抽棴")
+    private Integer shareCouponRewardStatus;
+
+    @ApiModelProperty(value = "娉ㄥ唽绉垎濂栧姳鏁伴噺")
+    private BigDecimal regIntegralReward;
+    @ApiModelProperty(value = "閭�璇峰ソ鍙嬬Н鍒嗗鍔辨暟閲�")
+    private BigDecimal shareIntegralReward;
+
+    @ApiModelProperty(value = "娉ㄥ唽浼樻儬鍒稿鍔遍泦鍚�")
+    private List<JSONObject> regCouponRewardList;
+    @ApiModelProperty(value = "閭�璇峰ソ鍙嬩紭鎯犲埜濂栧姳闆嗗悎")
+    private List<JSONObject> shareCouponRewardList;
+
+    @ApiModelProperty(value = "娑堣垂杩旂Н鍒�-杩旂敤鎴风Н鍒嗙姸鎬� 0寮�鍚� 1鍏抽棴")
+    private Integer returnMemberIntegralStatus;
+    @ApiModelProperty(value = "娑堣垂杩旂Н鍒�-杩旂粡閿�鍟嗙Н鍒嗙姸鎬� 0寮�鍚� 1鍏抽棴")
+    private Integer returnShopIntegralStatus;
+    @ApiModelProperty(value = "娑堣垂杩旂Н鍒�-杩旂敤鎴风Н鍒嗘暟閲�")
+    private BigDecimal returnMemberIntegral;
+    @ApiModelProperty(value = "娑堣垂杩旂Н鍒�-杩旂粡閿�鍟嗙Н鍒嗘暟閲�")
+    private BigDecimal returnShopIntegral;
+    @ApiModelProperty(value = "鍚堣浼樻儬鎵挎媴姣斾緥锛�%锛�")
+    private BigDecimal totalRate;
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
index da2a769..78e2ed2 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
@@ -182,9 +182,18 @@
     }
 
     @Override
-    public List<Coupon> findList(Coupon coupon) {
-        QueryWrapper<Coupon> wrapper = new QueryWrapper<>(coupon);
-        return couponMapper.selectList(wrapper);
+    public List<Coupon> findList(Coupon pageWrap) {
+        MPJLambdaWrapper<Coupon> queryWrapper = new MPJLambdaWrapper<>();
+        Utils.MP.blankToNull(pageWrap );
+        queryWrapper.selectAll(Coupon.class);
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap. getName()),Coupon::getName,pageWrap.getName());
+        queryWrapper.eq(Coupon::getIsdeleted,Constants.ZERO);
+        queryWrapper.orderByDesc(Coupon::getCreateDate);
+        List<Coupon> result =  couponJoinMapper.selectList( queryWrapper);
+        for(Coupon model:result){
+            initCouponStatus(model);
+        }
+        return result;
     }
   
     @Override
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 3559a14..4378754 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
@@ -156,7 +156,7 @@
         goodsSku.setGoodsId(goods.getId());
         goodsSku.setName(goods.getName());
         goodsSku.setPrice(goods.getSkuPrice());
-        goodsSku.setShowPrice(goods.getPrice());
+        goodsSku.setShowPrice(goods.getShowPrice());
         goodsSku.setStock(goods.getStockNum());
         goodsSku.setIntegralRate(goods.getDeductRata());
         goodsSku.setUnitName(goods.getUnitName());
@@ -211,6 +211,7 @@
                     || goods.getBrandList() == null
                     || goods.getBrandList().size() == 0
                     || goods.getWeight() == null
+                    || goods.getDeductRata() == null
                     || goods.getPrice() == null
                     || goods.getSkuPrice() == null
                     || StringUtils.isBlank(goods.getImgurl())
@@ -218,6 +219,10 @@
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
             }
 
+            if(goods.getDeductRata().compareTo(new BigDecimal(0.1)) <Constants.ZERO ||
+                    goods.getDeductRata().compareTo(new BigDecimal(100)) >Constants.ZERO){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绉垎鍙姷鎵i噾棰濇瘮渚嬭璁剧疆[0.1,100]涔嬮棿~");
+            }
             //鏌ヨ鍒嗙被
             Labels cate = labelsMapper.selectById(goods.getCategoryId());
             if(cate == null || Constants.equalsInteger(cate.getIsdeleted(),Constants.ONE)
@@ -225,7 +230,7 @@
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍒嗙被淇℃伅涓嶅瓨鍦�");
             }
             if(goods.getBrandId()!=null){
-                Labels brand = labelsMapper.selectById(goods.getCategoryId());
+                Labels brand = labelsMapper.selectById(goods.getBrandId());
                 if(brand == null || Constants.equalsInteger(brand.getIsdeleted(),Constants.ONE)
                         ||! Constants.equalsInteger(brand.getType(),Constants.LabelsType.GOODSBRAND.getKey())){
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍝佺墝淇℃伅涓嶅瓨鍦�");
@@ -234,7 +239,7 @@
             List<Integer> bIds = new ArrayList<>();
             for(Labels b : goods.getBrandList()){
                 bIds.add(b.getId());
-                if(b.getChildIdList() == null || b.getChildIdList().size() ==0){
+                if(b.getChildIdList() != null && b.getChildIdList().size() >=0){
                     bIds.addAll(b.getChildIdList());
                 }
             }
@@ -251,9 +256,9 @@
                      throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勯�傜敤鍝佺墝");
                  }
                  idsBrand.add("["+b.getId()+"]");
-                if(b.getChildIdList() == null || b.getChildIdList().size() ==0){
+                if(b.getChildIdList()!= null && b.getChildIdList().size() >=0){
                    for(Integer c :b.getChildIdList()){
-                       Labels cb = findLabelFromListByid(allBrands,b.getId(),Constants.LabelsType.SERIES_BRAND.getKey(),b.getId());
+                       Labels cb = findLabelFromListByid(allBrands,c,Constants.LabelsType.SERIES_BRAND.getKey(),b.getId());
                        if(cb == null){
                            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍝佺墝銆�"+tb.getName() +"銆戜笅鎵�灞炵郴鍒椾笉姝g‘");
                        }
@@ -265,7 +270,6 @@
             if(idsSerial.size()>0){
                 goods.setSerialIds(String.join(",",idsSerial));
             }
-
     }
 
     private Labels findLabelFromListByid(List<Labels> allBrands, Integer id, int type,Integer parentId) {
@@ -274,13 +278,13 @@
         }
         for(Labels labels:allBrands){
             if(!Constants.equalsInteger(id,labels.getId())){
-                return null;
+               continue;
             }
             if(!Constants.equalsInteger(type,labels.getType())){
-                return null;
+              continue;
             }
             if(parentId !=null && !Constants.equalsInteger(parentId,labels.getParentId())){
-                return null;
+               continue;
             }
             return labels;
         }
@@ -364,11 +368,11 @@
         skuMapper.update(null,new UpdateWrapper<Sku>().lambda()
                 .set(Sku::getIsdeleted,Constants.ONE)
                 .eq(Sku::getIsdeleted,Constants.ZERO)
-                .eq(Sku::getGoodsId,goods.getSkuId()));
+                .eq(Sku::getGoodsId,goods.getId()));
         goodsSkuMapper.update(null,new UpdateWrapper<GoodsSku>().lambda()
                 .set(GoodsSku::getIsdeleted,Constants.ONE)
                 .eq(GoodsSku::getIsdeleted,Constants.ZERO)
-                .eq(GoodsSku::getGoodsId,goods.getSkuId()));
+                .eq(GoodsSku::getGoodsId,goods.getId()));
         dealDefaultGoodsSku(goods);//鏂板缓sku淇℃伅
         dealBatchMultiFiles(goods, goods.getFileList(), user,true);
     }
@@ -526,7 +530,8 @@
     @Override
     public Goods findById(Integer id) {
         MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
-        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ACTIVITY_FILE).getCode();
+        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
 
         queryWrapper.eq(Goods::getId,id);
         queryWrapper.selectAll(Goods.class);
@@ -554,6 +559,7 @@
             //榛樿sku淇℃伅
             GoodsSku goodsSku = goodsSkuList.get(0);
             goods.setSkuPrice(goodsSku.getPrice());
+            goods.setShowPrice(goodsSku.getShowPrice());
             goods.setWeight(goodsSku.getWeight());
             goods.setStockNum(goodsSku.getStock());
             goods.setUnitName(goodsSku.getUnitName());
@@ -592,6 +598,7 @@
                     }
                 }
             }
+            goods.setBrandList(brandList);
         }
     }
 
@@ -721,7 +728,7 @@
         queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getBrandId);
         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 sum(STOCK) from goods_sku where ISDELETED=0 and GOODS_ID=t.id) as stockNum ");
         //瀹為檯閿�閲�
         queryWrapper.select("(select sum(gd.GOODS_NUM) from  goodsorder_detail gd" +
                 "        inner join  goods_sku gs on gs.id=gd.GOODS_SKU_ID" +
@@ -773,7 +780,8 @@
         if (list == null || list.size() == 0) {
             return;
         }
-        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
+        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
         for (Goods goods : list) {
             goods.setResourcePath(path);
             //鏌ヨsku
@@ -788,9 +796,11 @@
                 //榛樿sku淇℃伅
                 goods.setSkuPrice(goodsSku.getPrice());
                 goods.setWeight(goodsSku.getWeight());
+                goods.setShowPrice(goodsSku.getShowPrice());
                 goods.setStockNum(goodsSku.getStock());
                 goods.setUnitName(goodsSku.getUnitName());
             }
+//            initGoodsApplyBrandAndSerial(goods);
         }
     }
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/LabelsServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/LabelsServiceImpl.java
index 2f72c64..cb752f4 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/LabelsServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/LabelsServiceImpl.java
@@ -232,10 +232,7 @@
 
     @Override
     public List<Labels> findList(Labels labels) {
-
-
         MPJLambdaWrapper<Labels> query = new MPJLambdaWrapper<>();
-
         if(labels!=null&&labels.getParentId()!=null){
             query.eq(Labels::getParentId,labels.getParentId());
         }else{
@@ -248,7 +245,15 @@
         }
         query.eq(Labels::getIsdeleted,Constants.ZERO);
         query.eq(labels.getType()!=null,Labels::getType,labels.getType());
+        query.orderByAsc(Labels::getSortnum);
         List<Labels> list= labelsJoinMapper.selectList(query);
+        List<Labels> childList= null;
+        if(Constants.equalsInteger(labels.getType(),Constants.LabelsType.APPLICABLE_BRAND.getKey())){
+            childList= labelsJoinMapper.selectList(new QueryWrapper<Labels>().lambda()
+                    .eq(Labels::getIsdeleted,Constants.ZERO)
+                    .eq(Labels::getType,Constants.LabelsType.SERIES_BRAND.getKey())
+                    .orderByAsc(Labels::getSortnum));
+        }
         for(Labels model:list){
             if(Constants.equalsInteger(model.getType(),Constants.LabelsType.BIG_AREA.getKey())){
                 //濡傛灉鏄ぇ鍖轰俊鎭紝鏌ヨ鎵�鏈夌粦瀹氶鐪佷唤淇℃伅
@@ -256,6 +261,24 @@
                         .eq(Areas::getIsdeleted,Constants.ZERO)
                         .eq(Areas::getBigAreaId,model.getId())));
             }
+            if(Constants.equalsInteger(labels.getType(),Constants.LabelsType.APPLICABLE_BRAND.getKey())
+                    &&Constants.equalsInteger(model.getType(),Constants.LabelsType.APPLICABLE_BRAND.getKey())){
+                //濡傛灉鏄�傚簲鍝佺墝锛屽垯鏌ヨ涓嬬骇绯诲垪
+                model.setChildList(getChildListbyParentId(childList,model.getId()));
+            }
+        }
+        return list;
+    }
+
+    private List<Labels> getChildListbyParentId(List<Labels> childList, Integer id) {
+        List<Labels> list = new ArrayList<>();
+        if(childList!=null && childList.size()>0){
+            for(Labels labels : childList){
+                if(Constants.equalsInteger(labels.getParentId(),id)){
+                    list.add(labels);
+                }
+            }
+
         }
         return list;
     }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/system/SystemDictDataService.java b/server/dmmall_service/src/main/java/com/doumee/service/system/SystemDictDataService.java
index 6d3fb87..969e240 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/system/SystemDictDataService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/system/SystemDictDataService.java
@@ -2,6 +2,7 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.PlatformConfigDTO;
 import com.doumee.dao.system.dto.QuerySystemDictDataDTO;
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.dao.system.vo.SystemDictDataListVO;
@@ -96,5 +97,8 @@
     List<SystemDictData> findList(Integer dicId,List<String> codes);
 
 
+    PlatformConfigDTO getPlatformConfigDTO();
+
+    void updPlatformConfig(PlatformConfigDTO platformConfigDTO);
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java
index a34d8ba..2d919f1 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java
@@ -1,8 +1,13 @@
 package com.doumee.service.system.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.system.SystemDictMapper;
+import com.doumee.dao.system.dto.PlatformConfigDTO;
 import com.doumee.dao.system.model.SystemDict;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -20,6 +25,8 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -33,6 +40,8 @@
 
     @Autowired
     private SystemDictDataMapper systemDictDataMapper;
+    @Autowired
+    private SystemDictMapper systemDictMapper;
 
     @Override
     public Integer create(SystemDictData systemDictData) {
@@ -112,4 +121,169 @@
                 .in(SystemDictData::getLabel,codes);
         return systemDictDataMapper.selectList(wrapper);
     }
+
+
+
+    @Override
+    public PlatformConfigDTO getPlatformConfigDTO(){
+        PlatformConfigDTO platformConfigDTO = new PlatformConfigDTO();
+        platformConfigDTO.setRegIntegralReward(new BigDecimal(0));
+        platformConfigDTO.setRegCouponRewardStatus(0);
+        platformConfigDTO.setRegCouponRewardList(new ArrayList<>());
+        platformConfigDTO.setRegIntegralRewardStatus(0);
+
+        platformConfigDTO.setShareIntegralReward(new BigDecimal(0));
+        platformConfigDTO.setShareCouponRewardList(new ArrayList<>());
+        platformConfigDTO.setShareIntegralRewardStatus(0);
+        platformConfigDTO.setShareCouponRewardStatus(0);
+
+        platformConfigDTO.setReturnMemberIntegral(new BigDecimal(0));
+        platformConfigDTO.setReturnShopIntegral(new BigDecimal(0));
+        platformConfigDTO.setReturnMemberIntegralStatus(0);
+        platformConfigDTO.setReturnShopIntegralStatus(0);
+
+        platformConfigDTO.setTotalRate(new BigDecimal(0));
+
+        SystemDict  dict = systemDictMapper.selectOne(new QueryWrapper<SystemDict>().lambda()
+                .eq(SystemDict::getCode,Constants.ORDER_SET).last("limit 1"));
+        if(dict == null){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏁版嵁瀛楀吀閰嶇疆鏁版嵁鏈夎锛岃鑱旂郴绯荤粺绠$悊鍛樺鐞嗭紒");
+        }
+
+        List<SystemDictData> systemDictDataList = systemDictDataMapper.selectList(new QueryWrapper<SystemDictData>()
+                .lambda().eq(SystemDictData::getDictId,dict.getId())
+                .in(SystemDictData::getLabel
+                        , Constants.ORDERSET_REG_INTEGRAL_REWARD_STATUS
+                        , Constants.ORDERSET_SHARE_INTEGRAL_REWARD_STATUS
+                        , Constants.ORDERSET_REG_COUPON_REWARD_STATUS
+                        , Constants.ORDERSET_SHARE_COUPON_REWARD_STATUS
+                        , Constants.ORDERSET_REG_INTEGRAL_REWARD
+                        , Constants.ORDERSET_SHARE_INTEGRAL_REWARD
+                        , Constants.ORDERSET_REG_COUPON_REWARD_LIST
+                        , Constants.ORDERSET_SHARE_COUPON_REWARD_LIST
+                        , Constants.ORDERSET_RETURN_MEMBER_INTEGRAL_STATUS
+                        , Constants.ORDERSET_RETURN_SHOP_INTEGRAL_STATUS
+                        , Constants.ORDERSET_RETURN_MEMBER_INTEGRAL
+                        , Constants.ORDERSET_RETURN_SHOP_INTEGRAL
+                        ,Constants.ORDERSET_TOTAL_RATE )
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemDictDataList)){
+            for (SystemDictData systemDictData:systemDictDataList) {
+                if(systemDictData.getLabel().equals(Constants.ORDERSET_REG_INTEGRAL_REWARD)){
+                    platformConfigDTO.setRegIntegralReward(getDecimalValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_REG_COUPON_REWARD_STATUS)){
+                    platformConfigDTO.setRegCouponRewardStatus(getIntegerValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_REG_COUPON_REWARD_LIST)){
+                    platformConfigDTO.setRegCouponRewardList(getListValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_REG_INTEGRAL_REWARD_STATUS)){
+                    platformConfigDTO.setRegIntegralRewardStatus(getIntegerValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_INTEGRAL_REWARD)){
+                    platformConfigDTO.setShareIntegralReward(getDecimalValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_COUPON_REWARD_LIST)){
+                    platformConfigDTO.setShareCouponRewardList(getListValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_INTEGRAL_REWARD_STATUS)){
+                    platformConfigDTO.setShareIntegralRewardStatus(getIntegerValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_COUPON_REWARD_STATUS)){
+                    platformConfigDTO.setShareCouponRewardStatus(getIntegerValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_MEMBER_INTEGRAL)){
+                    platformConfigDTO.setReturnMemberIntegral(getDecimalValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_SHOP_INTEGRAL)){
+                    platformConfigDTO.setReturnShopIntegral(getDecimalValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_MEMBER_INTEGRAL_STATUS)){
+                    platformConfigDTO.setReturnMemberIntegralStatus(getIntegerValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_SHOP_INTEGRAL_STATUS)){
+                    platformConfigDTO.setReturnShopIntegralStatus(getIntegerValByStr(systemDictData.getCode()));
+                }else if(systemDictData.getLabel().equals(Constants.ORDERSET_TOTAL_RATE)) {
+                    platformConfigDTO.setTotalRate(getDecimalValByStr(systemDictData.getCode()));
+                }
+            }
+        }
+        return platformConfigDTO;
+    }
+
+    private Integer getIntegerValByStr(String code) {
+        try {
+            return Integer.parseInt(code);
+        }catch (Exception e){
+        }
+        return  0;
+    }
+    private BigDecimal getDecimalValByStr(String code) {
+        try {
+            return new BigDecimal(code);
+        }catch (Exception e){
+        }
+        return  new BigDecimal(0);
+    }
+    private List<JSONObject> getListValByStr(String code) {
+        try {
+            return JSONObject.parseObject(code,new TypeReference<List<JSONObject>>(){});
+        }catch (Exception e){
+        }
+        return  new ArrayList();
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void updPlatformConfig(PlatformConfigDTO platformConfigDTO) {
+        SystemDict dict = systemDictMapper.selectOne(new QueryWrapper<SystemDict>().lambda()
+                .eq(SystemDict::getCode, Constants.ORDER_SET).last("limit 1"));
+        if (dict == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏁版嵁瀛楀吀閰嶇疆鏁版嵁鏈夎锛岃鑱旂郴绯荤粺绠$悊鍛樺鐞嗭紒");
+        }
+        List<SystemDictData> systemDictDataList = systemDictDataMapper.selectList(new QueryWrapper<SystemDictData>()
+                .lambda()
+                .eq(SystemDictData::getDictId, dict.getId())
+                .in(SystemDictData::getLabel
+                        , Constants.ORDERSET_REG_INTEGRAL_REWARD_STATUS
+                        , Constants.ORDERSET_SHARE_INTEGRAL_REWARD_STATUS
+                        , Constants.ORDERSET_REG_COUPON_REWARD_STATUS
+                        , Constants.ORDERSET_SHARE_COUPON_REWARD_STATUS
+                        , Constants.ORDERSET_REG_INTEGRAL_REWARD
+                        , Constants.ORDERSET_SHARE_INTEGRAL_REWARD
+                        , Constants.ORDERSET_REG_COUPON_REWARD_LIST
+                        , Constants.ORDERSET_SHARE_COUPON_REWARD_LIST
+                        , Constants.ORDERSET_RETURN_MEMBER_INTEGRAL_STATUS
+                        , Constants.ORDERSET_RETURN_SHOP_INTEGRAL_STATUS
+                        , Constants.ORDERSET_RETURN_MEMBER_INTEGRAL
+                        , Constants.ORDERSET_RETURN_SHOP_INTEGRAL
+                        , Constants.ORDERSET_TOTAL_RATE)
+        );
+        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemDictDataList)) {
+            for (SystemDictData systemDictData : systemDictDataList) {
+                if (systemDictData.getLabel().equals(Constants.ORDERSET_REG_INTEGRAL_REWARD_STATUS)) {
+                    systemDictData.setCode(Constants.formatIntegerNum(platformConfigDTO.getRegIntegralRewardStatus()) + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_INTEGRAL_REWARD_STATUS)) {
+                    systemDictData.setCode(Constants.formatIntegerNum(platformConfigDTO.getShareIntegralRewardStatus()) + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_REG_COUPON_REWARD_STATUS)) {
+                    systemDictData.setCode(Constants.formatIntegerNum(platformConfigDTO.getRegCouponRewardStatus()) + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_COUPON_REWARD_STATUS)) {
+                    systemDictData.setCode(Constants.formatIntegerNum(platformConfigDTO.getShareCouponRewardStatus()) + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_REG_INTEGRAL_REWARD)) {
+                    systemDictData.setCode(Constants.formatBigdecimal(platformConfigDTO.getRegIntegralReward()).doubleValue() + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_INTEGRAL_REWARD)) {
+                    systemDictData.setCode(Constants.formatBigdecimal(platformConfigDTO.getShareIntegralReward()).doubleValue() + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_REG_COUPON_REWARD_LIST)) {
+                    systemDictData.setCode(JSONObject.toJSONString(platformConfigDTO.getRegCouponRewardList() == null ? new ArrayList() : platformConfigDTO.getRegCouponRewardList()));
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_SHARE_COUPON_REWARD_LIST)) {
+                    systemDictData.setCode(JSONObject.toJSONString(platformConfigDTO.getShareCouponRewardList() == null ? new ArrayList() : platformConfigDTO.getShareCouponRewardList()));
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_MEMBER_INTEGRAL_STATUS)) {
+                    systemDictData.setCode(Constants.formatIntegerNum(platformConfigDTO.getReturnMemberIntegralStatus()) + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_SHOP_INTEGRAL_STATUS)) {
+                    systemDictData.setCode(Constants.formatIntegerNum(platformConfigDTO.getReturnShopIntegralStatus()) + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_MEMBER_INTEGRAL)) {
+                    systemDictData.setCode(Constants.formatBigdecimal(platformConfigDTO.getReturnMemberIntegral()).doubleValue() + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_RETURN_SHOP_INTEGRAL)) {
+                    systemDictData.setCode(Constants.formatBigdecimal(platformConfigDTO.getReturnShopIntegral()).doubleValue() + "");
+                } else if (systemDictData.getLabel().equals(Constants.ORDERSET_TOTAL_RATE)) {
+                    systemDictData.setCode(Constants.formatBigdecimal(platformConfigDTO.getTotalRate()).doubleValue() + "");
+                }
+                systemDictDataMapper.update(new UpdateWrapper<SystemDictData>().lambda()
+                        .set(SystemDictData::getCode, systemDictData.getCode())
+                        .eq(SystemDictData::getId, systemDictData.getId()));
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.3