doum
10 小时以前 c261cb7ff2e4cfce233d02c6aca9e8f85e8ba1ba
经销商管理
已添加2个文件
已修改10个文件
669 ■■■■■ 文件已修改
admin/src/api/business/activity.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaInformationWindow.vue 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaLabelKnowledgeWindow.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaShopInfoWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/information.vue 175 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/labelsKnowledge.vue 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/platformGoods.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/ActivityController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Activity.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/ActivityService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/activity.js
@@ -16,6 +16,10 @@
export function updateById (data) {
  return request.post('/business/activity/updateById', data)
}
// ä¿®æ”¹
export function updateStatusById (data) {
  return request.post('/business/activity/updateStatusById', data)
}
// åˆ é™¤
export function deleteById (id) {
admin/src/components/business/OperaInformationWindow.vue
@@ -7,48 +7,47 @@
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" label-width="130px" label-suffix=":" :rules="rules" inline>
      <el-form-item label="资讯标题" prop="name">
        <el-input v-model="form.name" placeholder="请输入资讯标题" v-trim/>
      </el-form-item>
      <el-form-item label="资讯分类" prop="labelId">
        <el-select
          v-model="form.labelId"
          placeholder="请选择资讯分类"
          filterable
          clearable
        >
          <el-option v-for="item in labels" :key="item.id" :value="item.id" :label="item.name" />
        </el-select>
        <!-- <el-input v-model="form.labelId" placeholder="请输入选择" v-trim/> -->
      <el-form-item label="标题" prop="name">
        <el-input v-model="form.name" placeholder="请输入标题" v-trim/>
      </el-form-item>
      <el-form-item label="资讯封面图" prop="imgurlfull">
        <UploadAvatarImage
          :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
          @uploadSuccess="uploadAvatarSuccess"
          @uploadEnd="isUploading=false"
          @uploadBegin="isUploading = true"
            :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
            @uploadSuccess="uploadAvatarSuccess"
            :uploadData="{folder:'activity'}"
            @uploadEnd="isUploading=false"
            @uploadBegin="isUploading = true"
        />
      </el-form-item>
      <el-form-item label="关联店铺" prop="shopId">
      <el-form-item label="所属分类" prop="labelId">
        <el-select
          v-model="form.shopId"
          placeholder="请输入店铺名称,再选择"
          v-model="form.labelId"
          placeholder="请选择所属分类"
          filterable
          remote
          reserve-keyword
          :remote-method="remoteMethod"
          :loading="searchLoading"
          clearable
        >
          <el-option
            v-for="item in shops"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
          <el-option v-for="item in labels()" :key="item.id" :value="item.id" :label="item.name" />
        </el-select>
      </el-form-item>
      <el-form-item label="详情" prop="content">
        <RichEditor :content="{ content : form.content}"  @edit="form.content=$event" />
      <el-form-item label="所属品牌" prop="brandId">
        <el-select
          v-model="form.brandId"
          placeholder="请选择所属品牌"
          filterable
          clearable
        >
          <el-option v-for="item in brands()" :key="item.id" :value="item.id" :label="item.name" />
        </el-select>
      </el-form-item>
      <el-form-item label="内容类型" prop="contentType" >
        <el-radio-group v-model="form.contentType">
          <el-radio :label="0" value="0">富文本</el-radio>
          <el-radio :label="1" value="1">外链</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="详情" prop="content" required>
        <el-input v-if="form.contentType == 1"  v-model="form.content" placeholder="请输入外链地址" v-trim/>
        <RichEditor v-else  :richData="form.content" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
@@ -60,7 +59,7 @@
import RichEditor from '@/components/common/RichEditor'
import UploadAvatarImage from '@/components/common/UploadAvatarImage'
import { fetchList as shopList } from '@/api/business/shop'
import { fetchList as shopList } from '@/api/business/shop'
export default {
  name: 'OperaActivityWindow',
@@ -68,6 +67,7 @@
  components: { GlobalWindow, RichEditor, UploadAvatarImage },
  data () {
    return {
      styleEditor: 'border: 1px solid #ccc;display: inline-block;height:500px;',
      isUploading: false,
      searchLoading: false,
      shops: [],
@@ -78,29 +78,35 @@
        labelId: '',
        imgurlfull: null,
        imgurl: null,
        shopId: '',
        brandId: '',
        content: '',
        contentType: 0,
        type: 3 //资讯
      },
      labels: [
        { name: 'a', id: 1 },
        { name: 'b', id: 2 },
        { name: 'c', id: 3 },
      ],
      // éªŒè¯è§„则
      rules: {
        name: [
          { required: true, message: '请输入资讯标题', tigger: 'blur' }
          { required: true, message: '请输入标题', tigger: 'blur' }
        ],
        content: [
          { required: true, message: '请输入内容', tigger: 'blur' }
        ],
        contentType: [
          { required: true, message: '请选择内容类型' }
        ],
        labelId: [
          { required: true, message: '请选择资讯分类', tigger: 'change' }
          { required: true, message: '请选择所属分类' }
        ],
        brandId: [
          { required: true, message: '请选择所属品牌' }
        ],
        imgurlfull: [
          { required: true, message: '请上传资讯主图', tigger: 'change' }
          { required: true, message: '请上传资讯主图'  }
        ],
      }
    }
  },
  inject: ['labels', 'brands'],
  created () {
    this.config({
      api: '/business/activity',
@@ -113,24 +119,10 @@
      this.form.imgurl = file.imgurl;
      this.form.imgurlfull = file.imgurlfull;
    },
    remoteMethod(query) {
      if (query !== '') {
        this.searchLoading = true
        shopList({
          capacity: 999,
          model: {
            name: query
          }
        })
          .then(res => {
            this.shops = res.records
          })
          .finally(() => {
            this.searchLoading = false
          })
      }
    getWangedditor(val){
      this.form.content =val
    }
  },
  }
}
</script>
admin/src/components/business/OperaLabelKnowledgeWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
<template>
  <GlobalAlertWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules" label-width="110px" label-suffix=":" inline>
      <el-form-item label="名称" prop="name">
        <el-input v-model="form.name" placeholder="请输入名称" v-trim/>
      </el-form-item>
      <el-form-item label="色值" prop="param"  >
        <div style="display: flex" class="paperview-input-text">
          <span   v-if="form.name" :title="form.param"   :style="'padding:0px 10px; cursor:pointer;height:28px;line-height: 28px;display: inline-block;width:auto;border:1px solid '+form.param+'; color:'+form.param+';border-radius:5px;'">{{form.name}}</span>
          <el-input style="width: 50px;border: none;outline:none; "  type="color" v-model="form.param" placeholder="请输入色值" v-trim/>
        </div>
      </el-form-item>
      <el-form-item label="排序码(升序)" prop="sortnum">
        <el-input v-model="form.sortnum" type="number" placeholder="请输入排序码" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalAlertWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
export default {
  name: 'OperaLabelKnowledgeWindow',
  extends: BaseOpera,
  components: { GlobalAlertWindow },
  data () {
    return {
      // è¡¨å•数据
      form: {
        id: null,
        name: '',
        module: 0,
        type: 9,
        sortnum: '',
        param: '#000000'
      },
      // éªŒè¯è§„则
      rules: {
        name: [
          { required: true, message: '请输入名称', tigger: 'blur' }
        ]
      }
    }
  },
  created () {
    this.config({
      api: '/business/labels',
      'field.id': 'id'
    })
  }
}
</script>
<style lang="scss" scoped>
@import "@/assets/style/alertstyle.scss";
::v-deep .el-select {
  width: 100%;
  .el-input__inner {
    width: 100%;
  }
}
::v-deep .paperview-input-text .el-input__inner {
  -webkit-appearance: none;
  border: 0px !important;//改成0,边框就消失了!
}
</style>
admin/src/components/business/OperaShopInfoWindow.vue
@@ -239,7 +239,7 @@
                </div>
              </div>
              <div style="float: right; margin-bottom: 20px;">
                <el-select  v-model="searchForm2.type"  placeholder="全部"  clearable @change="search" style="width: 120px;" >
                <el-select  v-model="searchForm2.type"  placeholder="全部"  clearable @change="handlePageChange2(1)" style="width: 120px;" >
                  <el-option  :key="0" :value="0"  label="获得"  ></el-option>
                  <el-option   :key="1" :value="1" label="扣除"  ></el-option>
                </el-select>
admin/src/views/business/information.vue
@@ -2,23 +2,41 @@
  <TableLayout :permissions="['business:activity: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 label="标题" prop="name">
        <el-input v-model="searchForm.name" placeholder="请输入标题" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="发布人" prop="realName">
        <el-input v-model="searchForm.realName" placeholder="请输入发布人" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="用户类型" prop="userType">
      <el-form-item label="所属分类" prop="labelId">
        <el-select
          v-model="searchForm.userType"
          placeholder="请选择用户类型"
            v-model="searchForm.labelId"
            placeholder="请选择所属分类"
            style="width: 150px"
            clearable
            @change="search"
        >
        <!-- 0系统管理员 1机构管理员 2创作中心管理员 -->
          <el-option
            v-for="item in userType"
            :key="item.id"
            :value="item.id"
            :label="item.label"
              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="searchForm.brandId"
            style="width: 150px"
            placeholder="请选择所属品牌"
            clearable
            @change="search"
        >
          <el-option
              v-for="item in brands"
              :key="item.id"
              :value="item.id"
              :label="item.name"
          ></el-option>
        </el-select>
      </el-form-item>
@@ -42,28 +60,40 @@
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55" ></el-table-column>
        <el-table-column prop="imgurlfull" label="资讯主图" align="center" min-width="100px">
        <el-table-column prop="imgurlfull" label="主图" align="center" min-width="100px">
          <template slot-scope="{row}">
            <el-image :scr="row.imgurlfull" :preview-src-list="[row.imgurlfull]"></el-image>
            <el-image style="width: 50px;height: 50px;" v-if="row.imgurl && row.imgurl!=''" :src="row.imgurlfull" :preview-src-list="[row.imgurlfull]"></el-image>
          </template>
        </el-table-column>
        <el-table-column prop="name" label="资讯标题" align="center" min-width="100px">
        <el-table-column prop="name" label="标题" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="lablesName" label="所属分类" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="brandName" label="所属品牌" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="content" label="数据值" min-width="100px">
          <template slot-scope="{row}">
            <el-button type="text" @click="shopDetail(row)">{{ row.name }}</el-button>
            <div v-if="row.content">
              <el-button v-if="row.contentType == 1" title="点击跳转外链查看" type="text" @click="openUrl(row)" >点击跳转</el-button>
              <el-button v-else title="点击查看详情" type="text" @click="showCode(row)" >点击查看</el-button>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="lablesName" label="资讯分类" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="realName" label="发布用户" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="name" label="用户类型" align="center" min-width="100px">
          <template slot-scope="{row}">
            {{ userTypeToStr(row.userType) }}
          </template>
        </el-table-column>
        <el-table-column prop="looknum" label="浏览数" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="looknum" label="浏览量" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="zanCount" label="点赞数" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="commentCount" label="评论数" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="collectCount" label="收藏数" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="createDate" label="发布时间" align="center" min-width="140px"></el-table-column>
        <el-table-column prop="realName" label="发布人" align="center" min-width="140px"></el-table-column>
        <el-table-column prop="editDate" label="发布时间" align="center" min-width="140px"></el-table-column>
        <el-table-column prop="status" label="状态" min-width="80px" align="center">
          <template slot-scope="{row}">
            <el-switch
                v-model="row.status"
                :active-value="1"
                :inactive-value="0"
                active-color="#13ce66"
                fixed="right"
                inactive-color="#ff4949"
                @change="statusChange(row)"
            ></el-switch>
          </template>
        </el-table-column>
        <el-table-column
          v-if="containPermissions(['business:activity:update', 'business:activity:delete'])"
          label="操作"
@@ -85,6 +115,21 @@
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaInformationWindow ref="operaInformationWindow" @success="handlePageChange"/>
    <el-dialog
        class="center-title"
        :title="'内容详情【'+curTitle+'】'"
        width="70%"
        height="70%"
        text="字典值"
        :visible.sync="visible1"
        append-to-body
    >
      <div class="agree-list"  v-html="agreement">
      </div>
      <template  v-slot:footer>
        <el-button @click="visible1=false">返回</el-button>
      </template>
    </el-dialog>
  </TableLayout>
</template>
@@ -93,6 +138,7 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaInformationWindow from '@/components/business/OperaInformationWindow'
import { findAll as labelList } from '@/api/business/labels'
export default {
  name: 'Information',
  extends: BaseTable,
@@ -103,18 +149,25 @@
      searchForm: {
        name: '',
        realName: '',
        userType: '',
        type: 3 //类型0商家活动 1平台活动 2探店 3资讯
        brandId: null,
        labelId: null,
        contentType: '',
        type: 3 // ç±»åž‹0商家活动 1平台活动 2探店 3资讯
      },
      // 0系统管理员 1机构管理员 2创作中心管理员
      userType: [
        { label: '平台', id: 0 },
        { label: '机构', id: 1 },
        { label: '创作者', id: 2 }
      ]
      agreement: null,
      curTitle:'',
      visible1: false,
      labels: [],
      brands: []
    }
  },
  created () {
  provide () {
    return {
      labels: () => this.labels,
      brands: () => this.brands
    }
  },
  created: function () {
    this.config({
      module: '资讯信息表',
      api: '/business/activity',
@@ -122,15 +175,59 @@
      'field.main': 'id'
    })
    this.search()
    labelList({
      type: 0 // å•†å“åˆ†ç±»
    }).then(res => {
      this.labels = res
    })
    labelList({
      type: 1 // å•†å“å“ç‰Œ
    })
      .then(res => {
        this.brands = res
      })
  },
  methods: {
    userTypeToStr(type) {
      const temp = this.userType.find(item => item.id = type)
      return temp ? temp.label : '-'
    showCode(row){
      this.curTitle =row.name
      this.agreement=row.content
      this.visible1=true
    },
    shopDetail(row) {
    openUrl(row){
      window.open(row.content)
    },
    statusChange (row) {
      this.api.updateStatusById({ id: row.id, status: row.status })
        .then(() => {
          this.$message.success('操作成功')
        })
        .catch(e => {
          this.$message.error('操作成功')
        })
        .then(() => {
          this.handlePageChange()
        })
    }
  },
  }
}
</script>
<style scoped lang="scss">
.agree-list{
  height: 550px;
  //max-height: 50%;
  overflow: auto;
}
.no-scroll {
  overflow: hidden !important;
}
/deep/ .window__body {
  .table-content {
    padding: 0;
    .table-wrap {
      padding-top: 0;
    }
  }
}
</style>
admin/src/views/business/labelsKnowledge.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
<template>
  <TableLayout :permissions="['business:labels: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>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:labels:create', 'business:labels:delete']">
        <li><el-button type="primary" @click="$refs.operaLabelsWindow.open('新建知识库分类')" icon="el-icon-plus" v-permissions="['business:labels:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:labels:delete']">删除</el-button></li>
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        border
        stripe
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="name" label="分类名称" min-width="100px"></el-table-column>
        <el-table-column prop="param" label="色值" min-width="100px" align="center">
          <template slot-scope="{row}">
            <div  v-if="row.param" >
              <span :title="row.param"   :style="'cursor:pointer;display: inline-block;width:auto;border:1px solid '+row.param+';padding: 2px 10px;color:'+row.param+';border-radius:5px;'">{{row.name}}</span>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="status" label="状态" min-width="100px">
          <template slot-scope="{row}">
            <el-switch
                v-model="row.status"
                :active-value="1"
                :inactive-value="0"
                active-color="#13ce66"
                inactive-color="#ff4949"
                @change="statusChange(row)"
            ></el-switch>
          </template>
        </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
          v-if="containPermissions(['business:labels:update', 'business:labels:delete'])"
          label="操作"
          min-width="120"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaLabelsWindow.open('编辑知识库分类', row)" icon="el-icon-edit" v-permissions="['business:labels:update']">编辑</el-button>
            <el-button type="text"  style="color: red;" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:labels:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaLabelKnowledgeWindow ref="operaLabelsWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaLabelKnowledgeWindow from '@/components/business/OperaLabelKnowledgeWindow'
export default {
  name: 'Labels',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaLabelKnowledgeWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        name: '',
        type: 9
      }
    }
  },
  provide () {
    return {
      types: () => this.type
    }
  },
  created () {
    this.config({
      module: '知识库分类',
      api: '/business/labels',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    statusChange (row) {
      this.api.updateStatusById({ id: row.id, status: row.status })
        .then(() => {
          this.$message.success('操作成功')
        })
        .catch(e => {
          this.$message.error('操作成功')
        })
        .then(() => {
          this.handlePageChange()
        })
    }
  }
}
</script>
admin/src/views/business/platformGoods.vue
@@ -16,7 +16,10 @@
      <el-form-item label="所属分类" prop="categoryId">
        <el-select
          v-model="searchForm.categoryId"
          style="width: 150px"
          placeholder="请选择所属分类"
          clearable
          @change="search"
        >
          <el-option
            v-for="item in labels"
@@ -29,7 +32,10 @@
      <el-form-item label="所属品牌" prop="brandId">
        <el-select
          v-model="searchForm.brandId"
          style="width: 150px"
          placeholder="请选择所属品牌"
          clearable
          @change="search"
        >
          <el-option
            v-for="item in brands"
server/dmmall_admin/src/main/java/com/doumee/api/business/ActivityController.java
@@ -66,6 +66,13 @@
        activityService.updateById(activity);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateStatusById")
    @RequiresPermissions("business:activity:update")
    public ApiResponse updateStatusById(@RequestBody Activity activity) {
        activityService.updateStatusById(activity);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Activity.java
@@ -129,13 +129,16 @@
    @ApiModelProperty(value = "所属分类编码(关联labels)", example = "1")
    @ExcelColumn(name="所属分类编码(关联labels)")
    private Integer labelId;
    @ApiModelProperty(value = "所属品牌编码(关联labels)", example = "1")
    @ExcelColumn(name="所属品牌编码(关联labels)")
    private Integer brandId;
    @ApiModelProperty(value = "用户编码(关联member表)", example = "1")
    @ExcelColumn(name="用户编码(关联member表)")
    private Integer memberId;
    @ApiModelProperty(value = "内容类型 0图片 1视频", example = "1")
    @ExcelColumn(name="内容类型 0图片 1视频")
    @ApiModelProperty(value = "内容类型 0富文本 1外链", example = "1")
    @ExcelColumn(name="内容类型 0富文本 1外链")
    private Integer contentType;
    @ApiModelProperty(value = "内容富文本")
@@ -153,6 +156,9 @@
    @ApiModelProperty(value = "资讯分类名称")
    @TableField(exist = false)
    private String lablesName;
    @ApiModelProperty(value = "所属品牌名称")
    @TableField(exist = false)
    private String brandName;
    @ApiModelProperty(value = "点赞数量")
    @TableField(exist = false)
server/dmmall_service/src/main/java/com/doumee/service/business/ActivityService.java
@@ -50,6 +50,7 @@
     * @param activity å®žä½“对象
     */
    void updateById(Activity activity);
    void updateStatusById(Activity activity);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
@@ -113,12 +113,11 @@
        isCreateParamValid(activity, user);
        activity.setCreateDate(new Date());
        activity.setCreator(user.getId());
        activity.setEditDate(new Date());
        activity.setEditor(user.getId());
        activity.setIsdeleted(Constants.ZERO);
        activity.setStatus(Constants.Status.ENABLE.getValue());
        activity.setMemberId(user.getMemberId());
        activityMapper.insert(activity);
        dealBatchMultiFiles(activity, user);
        return activity.getId();
    }
@@ -162,90 +161,31 @@
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        isCreateParamValid(activity, user);
        activity.setEditDate(new Date());
        activity.setEditor(user.getId());
        activityMapper.updateById(activity);
        dealBatchMultiFiles(activity, user);
    }
    @Override
    public void updateStatusById(Activity labels) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        activityMapper.update(null,new UpdateWrapper<Activity>().lambda()
                .set(Activity::getEditDate,new  Date())
                .set(Activity::getEditor,user.getId())
                .set(Activity::getStatus,labels.getStatus())
                .eq(Activity::getId,labels.getId()));
    }
    public void isCreateParamValid(Activity activity, LoginUserInfo user) {
        if (activity.getType() == null) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
        }
        if (Constants.equalsInteger(activity.getType(), Constants.ActivityType.TANDIAN.getKey()) ||
                Constants.equalsInteger(activity.getType(), Constants.ActivityType.CONSULT.getKey())) {
            //资讯,探店
            if (activity.getShopId() == null
                    || StringUtils.isBlank(activity.getName())
                    || StringUtils.isBlank(activity.getImgurl())
                    || activity.getLabelId()==null
                    || activity.getContent()==null
            ) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
            }
            if(Constants.equalsInteger(activity.getType(), Constants.ActivityType.TANDIAN.getKey())){
                if(activity.getContentType()==null
                   || org.apache.commons.collections.CollectionUtils.isEmpty(activity.getFileList())
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
                }
            }
            Shop queryShop = new Shop();
            queryShop.setId(activity.getShopId());
            Shop shop = shopMapper.selectOne(new QueryWrapper<>(queryShop)
                    .lambda().eq(Shop::getIsdeleted, Constants.ZERO)
            );
            if (Objects.isNull(shop)) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商铺不存在,禁止添加");
            }
        } else if (Constants.equalsInteger(activity.getType(),  Constants.ActivityType.PLATACTIVITY.getKey())) {
            //平台活动
            if (activity.getShopId() != null) {
                Shop queryShop = new Shop();
                queryShop.setId(activity.getShopId());
                Shop shop = shopMapper.selectOne(new QueryWrapper<>(queryShop)
                        .lambda().eq(Shop::getIsdeleted, Constants.ZERO)
                );
                if (Objects.isNull(shop)) {
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商铺不存在,禁止添加");
                }
            } else if (activity.getOrgId() != null) {
                SystemUser sysQuery = new SystemUser();
                sysQuery.setId(activity.getOrgId());
                SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<>(sysQuery)
                        .lambda().eq(SystemUser::getDeleted, Constants.ZERO)
                );
                if (Objects.isNull(systemUser)) {
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "机构不存在,禁止添加");
                }
            } else {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
            }
            if(StringUtils.isBlank(activity.getName())
                    ||activity.getLabelId()==null
                    ||activity.getStarttime()==null
                    ||activity.getEndtime()==null
                    ||activity.getSignStarttime()==null
                    ||activity.getSignEndtime()==null
                    ||StringUtils.isBlank(activity.getAddr())
                    ||activity.getLongitude()==null
                    ||activity.getLatitude()==null
                    ||activity.getLimitnum()==null
                    ||StringUtils.isBlank(activity.getImgurl())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
            }
        if ( StringUtils.isBlank(activity.getName())
                || StringUtils.isBlank(activity.getImgurl())
                || StringUtils.isBlank(activity.getContent())
                || activity.getLabelId()==null
                || activity.getBrandId()==null
                || activity.getContent()==null  ) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
        }
        if (Objects.isNull(user.getMemberId())) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "先关联前端用户再发布!");
        }
    }
    public void dealBatchMultiFiles(Activity activity, LoginUserInfo user) {
@@ -323,29 +263,30 @@
        queryWrapper.selectAll(Activity.class);
        queryWrapper.selectAs(SystemUser::getRealname, Activity::getRealName);
        queryWrapper.selectAs(SystemUser::getType, Activity::getUserType);
        queryWrapper.selectAs(Labels::getName, Activity::getLablesName);
        queryWrapper.selectAs(Shop::getName, Activity::getShopName);
        queryWrapper.selectAs(Shop::getImgurl, Activity::getShopImg);
        queryWrapper.selectAs(Shop::getName, Activity::getShopName);
        queryWrapper.selectAs(Orgs::getName, Activity::getOrgName);
        queryWrapper.select("t1.name", Activity::getLablesName);
        queryWrapper.select("t2.name", Activity::getBrandName);
//        queryWrapper.selectAs(Shop::getName, Activity::getShopName);
//        queryWrapper.selectAs(Shop::getImgurl, Activity::getShopImg);
//        queryWrapper.selectAs(Shop::getName, Activity::getShopName);
//        queryWrapper.selectAs(Orgs::getName, Activity::getOrgName);
        queryWrapper.select("(select count(id) from zan s1 where s1.ISDELETED=0 and s1.OBJ_ID=t.id ) as zanCount");
        queryWrapper.select("(select count(id) from collect s1 where s1.ISDELETED=0 and s1.OBJ_ID=t.id ) as collectCount");
        queryWrapper.select("(select count(id) from comment s1 where s1.ISDELETED=0 and s1.OBJ_ID=t.id ) as commentCount");
        queryWrapper.select("(select count(id) from shares s1 where s1.ISDELETED=0 and s1.OBJ_ID=t.id  ) as sharesCount");
        queryWrapper.select("(select count(id)  from activity_sign s1 where s1.ISDELETED=0 and ACTIVITY_ID=t.id and s1.STATUS!=2 ) as activityCount");
        queryWrapper.select("(select REALNAME  from system_user s1 where s1.ID=t.ORG_ID ) as serviceName");
//        queryWrapper.select("(select name from shop where ISDELETED=0 and ACTIVITY_ID=t.SHOP_ID ) as shopName");
//        queryWrapper.select("(select count(id)  from activity_sign s1 where s1.ISDELETED=0 and ACTIVITY_ID=t.id and s1.STATUS!=2 ) as activityCount");
//        queryWrapper.select("(select REALNAME  from system_user s1 where s1.ID=t.ORG_ID ) as serviceName");
        queryWrapper.leftJoin(Shop.class, Shop::getId, Activity::getShopId);
        queryWrapper.leftJoin(Orgs.class, Orgs::getId, Activity::getOrgId);
        queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Activity::getCreator);
//        queryWrapper.leftJoin(Shop.class, Shop::getId, Activity::getShopId);
//        queryWrapper.leftJoin(Orgs.class, Orgs::getId, Activity::getOrgId);
        queryWrapper.leftJoin(Labels.class, Labels::getId, Activity::getLabelId);
        queryWrapper.leftJoin(Labels.class, Labels::getId, Activity::getBrandId);
        queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Activity::getEditor);
        queryWrapper.eq(Activity::getId,id);
        Activity result = activityJoinMapper.selectJoinOne(Activity.class, queryWrapper);
        if (Objects.nonNull(result)) {
            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ACTIVITY_FILE).getCode();
            Multifile queryfile = new Multifile();
          /*  Multifile queryfile = new Multifile();
            queryfile.setObjId(result.getId());
            List<Multifile> filelist = multifileMapper.selectList(new QueryWrapper<>(queryfile));
            if(filelist!=null){
@@ -355,7 +296,7 @@
                   }
               });
               result.setFileList(filelist);
            }
            }*/
            if(StringUtils.isNotBlank(result.getImgurl())){
                result.setImgurlfull(path+result.getImgurl());
            }
@@ -368,7 +309,8 @@
        queryWrapper.selectAll(Activity.class);
        queryWrapper.selectAs(SystemUser::getRealname, Activity::getRealName);
        queryWrapper.selectAs(SystemUser::getType, Activity::getUserType);
        queryWrapper.selectAs(Labels::getName, Activity::getLablesName);
        queryWrapper.select("t5.name", Activity::getLablesName);
        queryWrapper.select("t6.name", Activity::getBrandName);
        queryWrapper.selectAs(Shop::getName, Activity::getShopName);
        queryWrapper.selectAs(Shop::getImgurl, Activity::getShopImg);
        queryWrapper.selectAs(Shop::getName, Activity::getShopName);
@@ -385,8 +327,9 @@
        queryWrapper.leftJoin(Shop.class, Shop::getId, Activity::getShopId);
        queryWrapper.leftJoin(Orgs.class, Orgs::getId, Activity::getOrgId);
        queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Activity::getCreator);
        queryWrapper.leftJoin(Labels.class, Labels::getId, Activity::getLabelId);
        queryWrapper.leftJoin(Member.class, Member::getId, Activity::getMemberId);
        queryWrapper.leftJoin(Labels.class, Labels::getId, Activity::getLabelId);
        queryWrapper.leftJoin(Labels.class, Labels::getId, Activity::getBrandId);
        queryWrapper.eq(Activity::getId,id);
        Activity result = activityJoinMapper.selectJoinOne(Activity.class, queryWrapper);
@@ -416,16 +359,18 @@
        queryWrapper.selectAll(Activity.class);
        queryWrapper.selectAs(SystemUser::getRealname, Activity::getRealName);
        queryWrapper.selectAs(SystemUser::getType, Activity::getUserType);
        queryWrapper.selectAs(Labels::getName, Activity::getLablesName);
        queryWrapper.select("t2.name", Activity::getLablesName);
        queryWrapper.select("t3.name", Activity::getBrandName);
        queryWrapper.select("(select count(id) from zan     where ISDELETED=0 and OBJ_ID=t.id  ) as zanCount");
        queryWrapper.select("(select count(id) from collect where ISDELETED=0 and OBJ_ID=t.id  ) as collectCount");
        queryWrapper.select("(select count(id) from comment where ISDELETED=0 and OBJ_ID=t.id  ) as commentCount");
        queryWrapper.select("(select count(id) from shares  where ISDELETED=0 and OBJ_ID=t.id  ) as sharesCount");
        queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Activity::getCreator);
        queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Activity::getEditor);
        queryWrapper.leftJoin(Labels.class, Labels::getId, Activity::getLabelId);
        queryWrapper.leftJoin(Labels.class, Labels::getId, Activity::getBrandId);
        if (Constants.equalsInteger(pageWrap.getModel().getType(), Constants.ONE)) {
       /* if (Constants.equalsInteger(pageWrap.getModel().getType(), Constants.ONE)) {
            //查询活动报名数据
            queryWrapper.select("(select count(id)  from activity_sign where ISDELETED=0 and ACTIVITY_ID=t.id ) as activityCount");
            queryWrapper.select("su.REALNAME as serviceName");
@@ -468,20 +413,21 @@
                }
            }
        }
        }*/
        /**创作者/机构:查看自己发布的数据;平台:查看所有数据; */
        if (!Constants.equalsInteger(user.getType(), Constants.UserType.SYSTEM.getKey())) {
     /*   if (!Constants.equalsInteger(user.getType(), Constants.UserType.SYSTEM.getKey())) {
            queryWrapper.eq(Activity::getCreator, user.getId());
        }
        }*/
        queryWrapper.eq(Activity::getIsdeleted, Constants.ZERO);
        queryWrapper.eq(pageWrap.getModel().getLabelId() !=null, Activity::getLabelId, pageWrap.getModel().getLabelId());
        queryWrapper.eq(pageWrap.getModel().getBrandId() !=null, Activity::getBrandId, pageWrap.getModel().getBrandId());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()), Activity::getName, pageWrap.getModel().getName());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getRealName()), SystemUser::getRealname, pageWrap.getModel().getRealName());
        queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getUserType()), SystemUser::getType, pageWrap.getModel().getUserType());
//        queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getUserType()), SystemUser::getType, pageWrap.getModel().getUserType());
        queryWrapper.orderByDesc(Activity::getCreateDate);
        IPage<Activity> result = activityJoinMapper.selectJoinPage(page, Activity.class, queryWrapper);
        initActivityListStatus(result.getRecords());
        return PageData.from(result);
    }
@@ -500,8 +446,11 @@
        if (model == null) {
            return;
        }
        model.setImgurlfull(path);
        model.setActivityStatus(Constants.ZERO);
        if(StringUtils.isNotBlank(model.getImgurl())){
            model.setImgurlfull(path + model.getImgurl());
        }
        /*model.setActivityStatus(Constants.ZERO);
        long now = System.currentTimeMillis();
        if (model.getStarttime() != null && model.getSignStarttime() != null && model.getSignStarttime().getTime() <= now && model.getStarttime().getTime() < now) {
            model.setActivityStatus(Constants.ONE);//报名中
@@ -514,7 +463,7 @@
        }
        if (model.getEndtime() != null && model.getEndtime().getTime() < now) {
            model.setActivityStatus(4);//活动已结束
        }
        }*/
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -316,7 +316,7 @@
        queryWrapper.selectAll(Shop.class);
        queryWrapper.eq(Shop::getId,id);
        queryWrapper.select("(select AVG(SCORE) from shop_comment where ISDELETED=0 and OBJ_ID=t.id) as score");//门店评分
//        queryWrapper.select("(select AVG(SCORE) from shop_comment where ISDELETED=0 and OBJ_ID=t.id) as score");//门店评分
        /** ----------------start店铺访问数据----------------*/
//        queryWrapper.select("(select count(id) from shop_scan where ISDELETED=0 and SHOP_ID=t.id) as shopTotalVisits");//主页总访问量
//        queryWrapper.select("(select count(id) from shop_scan where ISDELETED=0 and SHOP_ID=t.id and to_days(CREATE_DATE)=to_days(now()) ) as shopNowVisits");//今日访问量
@@ -336,7 +336,7 @@
//        queryWrapper.select("(select sum(LIMIT_PRICE) from member_coupon where ISDELETED=0 and SHOP_ID=t.id and type=0 and STATUS=1 ) as couponUserMoney");//优惠券使用金额(元)
        /** ----------------end店铺优惠券数据----------------*/
        queryWrapper.select("(select count(g.id) from goodsorder where g.ISDELETED=0 and  g.DISTRIBUTION_SHOP_ID=t.id ) as totalOrderNUm");//优惠券使用金额(元)
        queryWrapper.select("(select count(g.id) from goodsorder g where g.ISDELETED=0 and  g.DISTRIBUTION_SHOP_ID=t.id ) as totalOrderNUm");//优惠券使用金额(元)
       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();