jiangping
2024-07-11 2cd540b6b6e0455155d5457cbe1dcf50c0cd975c
提交
已添加1个文件
已删除2个文件
已修改44个文件
1262 ■■■■■ 文件已修改
admin/.env.development 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/multifile.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaNewsDzWindow.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaNewsWindow.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/RichEditor.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/upload.vue 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/dict/DictDataManagerWindow.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/dict/OperaDictDataWindow.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/categorySeg.vue 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/news.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/newsDz.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/vue.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/src/main/java/com/doumee/api/business/PushController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/target/classes/com/doumee/config/shiro/ShiroConfig.class 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/target/classes/com/doumee/timer/ZbomIAMSyncJobBiz.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/QrCodeUtils.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/tyyun/TyyZosUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Multifile.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/News.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Users.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java 222 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/resources/mappers/SystemDictDataMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/biz/system/SystemDictDataBiz.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/biz/system/impl/SystemDictDataBizImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/core/utils/Constants$RedisKeys.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/core/utils/Constants$Status.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/core/utils/Constants$VehiclePlateNoEnum.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/core/utils/Constants.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/core/utils/QrCodeUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/core/utils/tyyun/TyyZosUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/dao/business/model/IamInterfaceLog.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/dao/business/model/Multifile.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/dao/business/model/News.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/dao/business/model/Shop.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/dao/business/model/Users.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/service/business/InitService.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/service/business/impl/IamInterfaceLogServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/service/business/impl/NewsServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/service/business/impl/ShopServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/service/business/impl/UsersServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/service/zbom/ZbomIAMService.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/com/doumee/service/zbom/ZbomZhongTaiService.class 补丁 | 查看 | 原始文档 | blame | 历史
server/service/target/classes/mappers/SystemDictDataMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -1,2 +1,3 @@
# å¼€å‘环境配置
NODE_ENV = 'development'
VUE_APP_BASE_API = 'http://localhost:10028'
admin/src/api/business/multifile.js
@@ -15,6 +15,11 @@
  })
}
export function uploadFile (data) {
  return request.post('/public/upload', data, {
    trim: true
  })
}
// åˆ›å»º
export function create (data) {
  return request.post('/business/multifile/create', data)
admin/src/components/business/OperaNewsDzWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
<template>
  <GlobalWindow
    :title="title"
    width="60%"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="标题" prop="title" required>
        <el-input v-model="form.title" placeholder="请输入标题" v-trim/>
      </el-form-item>
      <el-form-item label="副标题" prop="subTitle">
        <el-input type="textarea" v-model="form.subTitle" placeholder="请输入副标题" v-trim maxLength="200" />
      </el-form-item>
      <el-form-item label="状态" prop="status" required>
        <el-radio-group v-model="form.status"  >
          <el-radio :label="0" >展示</el-radio>
          <el-radio :label="1">不展示</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="列表图/视频"   prop="files" >
        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="form.fileList" accept=".png,.jpg,.jpeg,.mp4" folder="news" @loading="loading = true" @success="fileResult($event)" />
      </el-form-item>
      <el-form-item label="跳转类型" prop="linkType" required>
        <el-radio-group v-model="form.linkType"  >
          <el-radio :label="0" >富文本</el-radio>
          <el-radio :label="1">外链</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item :label="form.linkType == 1?'外联地址':'内容'" prop="content">
        <RichEditor v-if="form.linkType != 1"   :richData="form.content" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor" :readonly="false"/>
        <el-input  v-else v-model="form.content" type="tex" placeholder="请输入备注" v-trim/>
      </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-item label="备注" prop="remark">
        <el-input v-model="form.remark" type="tex" placeholder="请输入备注" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import RichEditor from '@/components/common/RichEditor'
import upload from '@/components/common/upload'
export default {
  name: 'OperaNewsWindow',
  extends: BaseOpera,
  components: { GlobalWindow, RichEditor, upload },
  data () {
    return {
      // è¡¨å•数据
      form: {
        id: null,
        remark: '',
        title: '',
        subTitle: '',
        sortnum: '',
        content: '',
        linkType: 0,
        status: 0,
        fileList: [],
        type: 1
      },
      // éªŒè¯è§„则
      rules: {
        title: [{ required: true, message: '请输入标题' }],
        status: [{ required: true, message: '请选择状态' }],
        linkType: [{ required: true, message: '请选择跳转类型' }]
      }
    }
  },
  created () {
    this.config({
      api: '/business/news',
      'field.id': 'id'
    })
  },
  methods: {
    getWangedditor (val) {
      this.form.content = val
    },
    open (title, target) {
      this.title = title
      this.visible = true
      this.form.fileList = []
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.fileType = target.fileType || 0
        const files = target.fileList || []
        if (files.length > 0) {
          this.form.fileList.push(files[0])
        }
      })
    },
    delFile (index) {
      this.form.fileList.splice(index, 1)
    },
    fileResult (e) {
      this.form.fileList = this.form.fileList || []
      this.form.fileList.push({
        fileurlFull: e.url,
        fileurl: e.imgaddr,
        name: e.originname,
        type: e.type
      })
    }
  }
}
</script>
admin/src/components/business/OperaNewsWindow.vue
@@ -1,102 +1,82 @@
<template>
  <GlobalWindow
    :title="title"
    width="60%"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="创建人编码" prop="creator">
        <el-input v-model="form.creator" placeholder="请输入创建人编码" v-trim/>
      <el-form-item label="文案" prop="title" required>
        <el-input type="textarea" v-model="form.title" placeholder="请输入标题" v-trim maxlength="200"/>
      </el-form-item>
      <el-form-item label="创建时间" prop="createDate">
        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="请输入创建时间"></el-date-picker>
      <el-form-item label="发布时间" prop="publishDate" required>
        <el-date-picker
            v-model="form.publishDate"
            type="datetime"
            value-format="yyyy-MM-dd HH:mm:ss"
            format="yyyy-MM-dd HH:mm:ss"
            placeholder="选择时间">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="更新人编码" prop="editor">
        <el-input v-model="form.editor" placeholder="请输入更新人编码" v-trim/>
      <el-form-item label="状态" prop="status" required>
        <el-radio-group v-model="form.status"  >
          <el-radio :label="0" >展示</el-radio>
          <el-radio :label="1">不展示</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="更新时间" prop="editDate">
        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="请输入更新时间"></el-date-picker>
      <el-form-item label="附件类型" prop="fileType" required>
        <el-radio-group v-model="form.fileType"  >
          <el-radio :label="0" >图片</el-radio>
          <el-radio :label="1">视频</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="是否删除0否 1是" prop="isdeleted">
        <el-input v-model="form.isdeleted" placeholder="请输入是否删除0否 1是" v-trim/>
      <el-form-item label="图集上传 ï¼ˆæœ€å¤š9张)"    v-if="form.fileType !=1">
        <upload width="100px" height="100px" :max-length="9" @dele="delFile" :list="fileImgList" accept=".png,.jpg,.jpeg" folder="news" @loading="loading = true" @success="fileResult($event)" />
      </el-form-item>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="form.remark" placeholder="请输入备注" v-trim/>
      <el-form-item label="视频上传(单个)"    v-if="form.fileType === 1">
        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="fileVideoList" accept=".mp4" folder="news" @loading="loading = true" @success="fileResult($event)" />
      </el-form-item>
      <el-form-item label="标题" prop="title">
        <el-input v-model="form.title" placeholder="请输入标题" v-trim/>
      <el-form-item label="排序码(升序)" prop="sortnum">
        <el-input   v-model="form.sortnum"   type="number"  placeholder="请输入排序码" v-trim/>
      </el-form-item>
      <el-form-item label="副标题" prop="subTitle">
        <el-input v-model="form.subTitle" placeholder="请输入副标题" v-trim/>
      </el-form-item>
      <el-form-item label="排序码" prop="sortnum">
        <el-input v-model="form.sortnum" placeholder="请输入排序码" v-trim/>
      </el-form-item>
      <el-form-item label="内容" prop="content">
        <el-input v-model="form.content" placeholder="请输入内容" v-trim/>
      </el-form-item>
      <el-form-item label="跳转类型 0富文本 1外链" prop="linkType">
        <el-input v-model="form.linkType" placeholder="请输入跳转类型 0富文本 1外链" v-trim/>
      </el-form-item>
      <el-form-item label="状态 0展示 1不展示" prop="status">
        <el-input v-model="form.status" placeholder="请输入状态 0展示 1不展示" v-trim/>
      </el-form-item>
      <el-form-item label="浏览量" prop="lookNum">
        <el-input v-model="form.lookNum" placeholder="请输入浏览量" v-trim/>
      </el-form-item>
      <el-form-item label="下载量" prop="donwloadNum">
        <el-input v-model="form.donwloadNum" placeholder="请输入下载量" v-trim/>
      </el-form-item>
      <el-form-item label="最近发布时间" prop="publishDate">
        <el-date-picker v-model="form.publishDate" value-format="yyyy-MM-dd" placeholder="请输入最近发布时间"></el-date-picker>
      </el-form-item>
      <el-form-item label="最近发布人人编码(关联system_user)" prop="publishUserid">
        <el-input v-model="form.publishUserid" placeholder="请输入最近发布人人编码(关联system_user)" v-trim/>
      </el-form-item>
      <el-form-item label="最近发布备注" prop="publishInfo">
        <el-input v-model="form.publishInfo" placeholder="请输入最近发布备注" v-trim/>
      </el-form-item>
      <el-form-item label="素材类型 0推广资讯 1定制服务" prop="type">
        <el-input v-model="form.type" placeholder="请输入素材类型 0推广资讯 1定制服务" v-trim/>
      <el-form-item label="备注" prop="publishInfo">
        <el-input  type="textarea" v-model="form.publishInfo" placeholder="请输入发布备注" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import upload from '@/components/common/upload'
export default {
  name: 'OperaNewsWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  components: { GlobalWindow, upload },
  data () {
    return {
      // è¡¨å•数据
      loading: false,
      form: {
        id: null,
        creator: '',
        createDate: '',
        editor: '',
        editDate: '',
        isdeleted: '',
        remark: '',
        title: '',
        subTitle: '',
        sortnum: '',
        content: '',
        linkType: '',
        status: '',
        lookNum: '',
        donwloadNum: '',
        status: 0,
        publishDate: '',
        publishUserid: '',
        publishInfo: '',
        type: ''
        fileList: [],
        fileType: 0,
        type: 0
      },
      fileImgList: [],
      fileVideoList: [],
      // éªŒè¯è§„则
      rules: {
        title: [{ required: true, message: '请输入文案' }],
        publishDate: [{ required: true, message: '请选择发布时间' }],
        status: [{ required: true, message: '请选择状态' }],
        fileType: [{ required: true, message: '请选择附件类型' }]
      }
    }
  },
@@ -105,6 +85,74 @@
      api: '/business/news',
      'field.id': 'id'
    })
  },
  methods: {
    open (title, target) {
      this.title = title
      this.visible = true
      this.form.fileList = []
      this.fileImgList= []
      this.fileVideoList = []
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.fileType = target.fileType || 0
        const files = target.fileList || []
        if(target.fileType === 1){
          if(files.length>0){
            this.fileVideoList.push(files[0])
          }
        }else {
          files.forEach(item => {
            this.fileImgList.push(item)
          })
        }
      })
    },
    getWangedditor (val) {
      this.form.content = val
    },
    delFile (index) {
      if(this.form.fileType === 1){
        this.fileVideoList.splice(index, 1)
        this.form.fileList =this.fileVideoList
      }else{
        this.fileImgList.splice(index, 1)
        this.form.fileList =this.fileImgList
      }
    },
    fileResult (e) {
      if(this.form.fileType === 1){
        this.fileVideoList = this.fileVideoList||[]
        this.fileVideoList.push({
          fileurlFull: e.url,
          fileurl: e.imgaddr,
          name: e.originname,
          type: e.type
        })
        this.form.fileList =this.fileVideoList
      }else{
        this.fileImgList = this.fileImgList||[]
        this.fileImgList.push({
          fileurlFull: e.url,
          fileurl: e.imgaddr,
          name: e.originname,
          type: e.type
        })
        this.form.fileList =this.fileImgList
      }
      console.log(this.form.fileList)
    }
  }
}
</script>
admin/src/components/common/RichEditor.vue
@@ -85,7 +85,7 @@
            ] // ä¸‹çº§èœå• key ï¼Œå¿…å¡«
          },*/
          // ä¸Šä¼ å›¾ç‰‡åˆ†ç»„
         /* {
          {
            key: 'img-style', // å¿…填,要以 group å¼€å¤´
            title: '图片', // å¿…å¡«
            // iconSvg: '<svg>....</svg>', // å¯é€‰
@@ -98,9 +98,9 @@
              "imageWidth50", // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比50
              "imageWidth100", // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比100
            ] // ä¸‹çº§èœå• key ï¼Œå¿…å¡«
          },*/
          },
          // è§†é¢‘分组
         /* {
          {
            key: 'video-style', // å¿…填,要以 group å¼€å¤´
            title: '视频', // å¿…å¡«
            // iconSvg: '<svg>....</svg>', // å¯é€‰
@@ -109,7 +109,7 @@
              "uploadVideo", // ä¸Šä¼ è§†é¢‘
              "editVideoSize", // ä¿®æ”¹è§†é¢‘尺寸
            ] // ä¸‹çº§èœå• key ï¼Œå¿…å¡«
          },*/
          },
          "fullScreen", // å…¨å±
        ],
        excludeKeys: [ // éšè—æŒ‡å®šçš„菜单项
@@ -128,7 +128,7 @@
        MENU_CONF: {
          // å›¾ç‰‡ä¸Šä¼ 
          uploadImage: {
            server: process.env.VUE_APP_BASE_API + "/common/upload",
            server: process.env.VUE_APP_API_PREFIX + '/public/upload?folder=richeditor',
            fieldName: 'file',
            // å•个文件的最大体积限制,默认为 2M
            maxFileSize: 10 * 1024 * 1024, // 10M
@@ -177,7 +177,7 @@
                //     message: `${res.data.originalName} ä¸Šä¼ å¤±è´¥ï¼Œè¯·é‡æ–°å°è¯•`
                // });
              }
              insertFn(res.url, res.originalFilename, res.newFileName);
              insertFn(res.data.url, res.data.originname, res.data.imgname);
            },
            // å•个文件上传成功之后
@@ -201,7 +201,7 @@
          // è§†é¢‘上传
          uploadVideo: {
            fieldName: 'file',
            server: process.env.VUE_APP_BASE_API + "/common/upload",
            server: process.env.VUE_APP_API_PREFIX + '/public/upload?folder=richeditor',
            // å•个文件的最大体积限制,默认为 10M
            maxFileSize: 50 * 1024 * 1024, // 50M
            // æœ€å¤šå¯ä¸Šä¼ å‡ ä¸ªæ–‡ä»¶ï¼Œé»˜è®¤ä¸º 5
@@ -243,7 +243,7 @@
                //     message: `${res.data.originalName} ä¸Šä¼ å¤±è´¥ï¼Œè¯·é‡æ–°å°è¯•`
                // });
              }
              insertFn(res.data.link, res.data.link);
              insertFn(res.data.url, res.data.url);
            },
            // ä¸Šä¼ è¿›åº¦çš„回调函数
            onProgress(progress) {
admin/src/components/common/upload.vue
@@ -5,79 +5,82 @@
                <div class="dele" @click="deleItem(index)">
                    <i class="el-icon-close"></i>
                </div>
                <img :src="item.url" v-if="fileType(item.url) === 'img'" />
                <video controls autoplay :src="item.url" v-else></video>
                <img :src="item.fileurlFull" v-if="fileType(item.fileurlFull) === 'img'" />
                <video controls autoplay :src="item.fileurlFull" v-else></video>
            </div>
            <div class="file_list_item" :style="{width: width, height: height, cursor: 'pointer'}" @click="$refs.file.click()">
            <div v-if="list ==null || list.length == 0 || list.length < maxLength" class="file_list_item" :style="{width: width, height: height, cursor: 'pointer'}" @click="$refs.file.click()">
                <i class="el-icon-plus"></i>
            </div>
        </div>
        <input type="file" ref="file" :accept="accept" @change="getFile" />
        <input   type="file" ref="file" :accept="accept" @change="getFile" />
    </div>
</template>
<script>
    import axios from 'axios';
    export default {
        props: {
            width: {
                type: String,
                default: '90px'
            },
            height: {
                type: String,
                default: '90px'
            },
            list: {
                type: Array,
                default: []
            },
            accept: {
                type: String,
                default: ''
            },
            folder: {
                type: String,
                default: ''
            }
        },
        data() {
            return {
                uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
            }
        },
        methods: {
            fileType(url) {
                if (url.indexOf('.mp4') !== -1) {
                    return 'video'
                } else {
                    return 'img'
                }
            },
            getFile(e) {
                if (e.target && e.target.files.length > 0) {
                    this.$emit('loading')
                    const formdate = new FormData()
                    formdate.append('file', e.target.files[0])
                    formdate.append('folder', this.folder)
                    axios.post(this.uploadImgUrl, formdate)
                        .then(res => {
                            this.$emit('success', res.data.data)
                        })
                        .catch(e => {
                            this.$message.error(e)
                        })
                        .finally(() => {
                            this.$refs.file.value = null
                        })
                }
            },
            deleItem(index) {
                this.$emit('dele', index)
            }
        }
import axios from 'axios'
export default {
  props: {
    width: {
      type: String,
      default: '90px'
    },
    height: {
      type: String,
      default: '90px'
    },
    list: {
      type: Array,
      default: []
    },
    accept: {
      type: String,
      default: ''
    },
    folder: {
      type: String,
      default: ''
    },
    maxLength: {
      type: Number,
      default: 9999
    }
  },
  data () {
    return {
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
    }
  },
  methods: {
    fileType (url) {
      if (url && url.indexOf('.mp4') !== -1) {
        return 'video'
      } else {
        return 'img'
      }
    },
    getFile (e) {
      if (e.target && e.target.files.length > 0) {
        this.$emit('loading')
        const formdate = new FormData()
        formdate.append('file', e.target.files[0])
        formdate.append('folder', this.folder)
        axios.post(this.uploadImgUrl, formdate)
          .then(res => {
            this.$emit('success', res.data.data)
          })
          .catch(e => {
            this.$message.error(e)
          })
          .finally(() => {
            this.$refs.file.value = null
          })
      }
    },
    deleItem (index) {
      this.$emit('dele', index)
    }
  }
}
</script>
<style lang="scss" scoped>
@@ -108,6 +111,7 @@
                    margin: 0 !important;
                }
                .dele {
                  z-index: 10000;
                    position: absolute;
                    right: 0;
                    top: 0;
@@ -138,4 +142,3 @@
        }
    }
</style>
admin/src/components/system/dict/DictDataManagerWindow.vue
@@ -1,7 +1,7 @@
<template>
  <GlobalWindow
    :title="dictName + '数据管理'"
    width="78%"
    width="100%"
    :visible.sync="visible"
    :with-footer="false"
  >
@@ -19,7 +19,7 @@
          @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="55"></el-table-column>
          <el-table-column prop="label" label="数据标签" min-width="100px"></el-table-column>
          <el-table-column prop="label" label="数据标签" min-width="200px"></el-table-column>
          <el-table-column prop="code" label="数据值" min-width="100px">
            <template slot-scope="{row}">
              <div v-if="row.code || row.code.length>500" >
@@ -37,6 +37,7 @@
          <el-table-column prop="updateUser" label="更新人" min-width="100px">
            <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template>
          </el-table-column>
          <el-table-column prop="remark" label="说明" min-width="150px"></el-table-column>
          <el-table-column prop="createTime" label="创建时间" min-width="100px"></el-table-column>
          <el-table-column prop="updateTime" label="更新时间" min-width="100px"></el-table-column>
          <el-table-column
admin/src/components/system/dict/OperaDictDataWindow.vue
@@ -21,6 +21,9 @@
        <el-switch v-model="form.disabled" :active-value="false" :inactive-value="true"/>
        <span class="status-text">{{form.disabled | disabledText}}</span>
      </el-form-item>
      <el-form-item label="说明" prop="remark">
        <el-input v-model="form.remark" placeholder="请输入数据说明" v-trim />
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
@@ -43,6 +46,7 @@
        code: '',
        label: '',
        disabled: false,
        remark: '',
        istext: false
      },
      // éªŒè¯è§„则
@@ -68,6 +72,7 @@
    open (title, dictId, target) {
      this.title = title
      this.visible = true
      this.form.remark=''
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
admin/src/views/business/categorySeg.vue
@@ -2,38 +2,16 @@
  <TableLayout :permissions="['business:categoryseg:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="主键" prop="id">
        <el-input v-model="searchForm.id" placeholder="请输入主键" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="创建人编码" prop="creator">
        <el-input v-model="searchForm.creator" placeholder="请输入创建人编码" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="创建时间" prop="createDate">
        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="请输入创建时间" @change="search"/>
      </el-form-item>
      <el-form-item label="更新人编码" prop="editor">
        <el-input v-model="searchForm.editor" placeholder="请输入更新人编码" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="更新时间" prop="editDate">
        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="请输入更新时间" @change="search"/>
      </el-form-item>
      <el-form-item label="是否删除0否 1是" prop="isdeleted">
        <el-input v-model="searchForm.isdeleted" placeholder="请输入是否删除0否 1是" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="searchForm.remark" placeholder="请输入备注" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="品类编码" prop="unitCode">
        <el-input v-model="searchForm.unitCode" placeholder="请输入品类编码" @keypress.enter.native="search"></el-input>
        <el-select v-model="searchForm.unitCode" @change="search" clearable placeholder="所属品牌">
          <el-option v-for="(item) in unitList " :key="item.code" :label="item.name" :value="item.code"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="战区编码" prop="segId">
        <el-input v-model="searchForm.segId" placeholder="请输入战区编码" @keypress.enter.native="search"></el-input>
      <el-form-item label="F码" prop="orgId">
        <el-input v-model="searchForm.orgId" placeholder="请输入F码" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="省区编码" prop="segId2">
        <el-input v-model="searchForm.segId2" placeholder="请输入省区编码" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="市区编码" prop="segId3">
        <el-input v-model="searchForm.segId3" placeholder="请输入市区编码" @keypress.enter.native="search"></el-input>
      <el-form-item label="S码" prop="scode">
        <el-input v-model="searchForm.scode" placeholder="请输入S码" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="战区名称" prop="segName">
        <el-input v-model="searchForm.segName" placeholder="请输入战区名称" @keypress.enter.native="search"></el-input>
@@ -43,15 +21,6 @@
      </el-form-item>
      <el-form-item label="市区名称" prop="segName3">
        <el-input v-model="searchForm.segName3" placeholder="请输入市区名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="最近同步时间" prop="syncDate">
        <el-date-picker v-model="searchForm.syncDate" value-format="yyyy-MM-dd" placeholder="请输入最近同步时间" @change="search"/>
      </el-form-item>
      <el-form-item label="最近同步备注" prop="syncInfo">
        <el-input v-model="searchForm.syncInfo" placeholder="请输入最近同步备注" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="收货地址" prop="shipToAddress">
        <el-input v-model="searchForm.shipToAddress" placeholder="请输入收货地址" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="收货人" prop="shipToPerson">
        <el-input v-model="searchForm.shipToPerson" placeholder="请输入收货人" @keypress.enter.native="search"></el-input>
@@ -67,47 +36,33 @@
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:categoryseg:create', 'business:categoryseg:delete']">
        <li><el-button type="primary" @click="$refs.operaCategorySegWindow.open('新建志邦营销区域品类信息表')" icon="el-icon-plus" v-permissions="['business:categoryseg:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:categoryseg:delete']">删除</el-button></li>
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="id" label="主键" min-width="100px"></el-table-column>
        <el-table-column prop="creator" label="创建人编码" min-width="100px"></el-table-column>
        <el-table-column prop="createDate" label="创建时间" min-width="100px"></el-table-column>
        <el-table-column prop="editor" label="更新人编码" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="更新时间" min-width="100px"></el-table-column>
        <el-table-column prop="isdeleted" label="是否删除0否 1是" min-width="100px"></el-table-column>
        <el-table-column prop="remark" label="备注" min-width="100px"></el-table-column>
        <el-table-column prop="unitCode" label="品类编码" min-width="100px"></el-table-column>
        <el-table-column prop="segId" label="战区编码" min-width="100px"></el-table-column>
        <el-table-column prop="segId2" label="省区编码" min-width="100px"></el-table-column>
        <el-table-column prop="segId3" label="市区编码" min-width="100px"></el-table-column>
        <el-table-column prop="segName" label="战区名称" min-width="100px"></el-table-column>
        <el-table-column prop="segName2" label="省区名称" min-width="100px"></el-table-column>
        <el-table-column prop="segName3" label="市区名称" min-width="100px"></el-table-column>
        <el-table-column prop="syncDate" label="最近同步时间" min-width="100px"></el-table-column>
        <el-table-column prop="syncInfo" label="最近同步备注" min-width="100px"></el-table-column>
        <el-table-column prop="shipToAddress" label="收货地址" min-width="100px"></el-table-column>
        <el-table-column prop="shipToPerson" label="收货人" min-width="100px"></el-table-column>
        <el-table-column prop="shipToPhone" label="收货人电话" min-width="100px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:categoryseg:update', 'business:categoryseg:delete'])"
          label="操作"
          min-width="120"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaCategorySegWindow.open('编辑志邦营销区域品类信息表', row)" icon="el-icon-edit" v-permissions="['business:categoryseg:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:categoryseg:delete']">删除</el-button>
          </template>
        <el-table-column type="selection" width="55" fixed></el-table-column>
        <el-table-column label="S码" prop="scode" fixed min-width="80px"></el-table-column>
        <el-table-column label="一体商" prop="sname" fixed min-width="180px"></el-table-column>
        <el-table-column label="F码" prop="orgId" fixed min-width="80px"></el-table-column>
        <el-table-column label="加盟商" prop="orgName" fixed  min-width="180px"></el-table-column>
        <el-table-column prop="unitCode" label="品类" min-width="150px">
          <template slot-scope="{row}"> {{row.unitCode}} / {{row.unitName}}</template>
        </el-table-column>
        <el-table-column prop="segId" label="战区" min-width="150px">
            <template slot-scope="{row}"> {{row.segId}} / {{row.segName}}</template>
        </el-table-column>
        <el-table-column prop="segId2" label="省区" min-width="150px">
          <template slot-scope="{row}"> {{row.segId2}} / {{row.segName2}}</template>
        </el-table-column>
        <el-table-column prop="segId3" label="片区" min-width="150px">
          <template slot-scope="{row}"> {{row.segId3}} / {{row.segName3}}</template>
        </el-table-column>
        <el-table-column prop="shipToPerson" label="收货人" min-width="100px"></el-table-column>
        <el-table-column prop="shipToPhone" label="收货人电话" min-width="120px"></el-table-column>
        <el-table-column prop="shipToAddress" label="收货地址" min-width="250px"></el-table-column>
        <el-table-column prop="editDate" label="更新时间" min-width="150px"></el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
@@ -126,33 +81,22 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaCategorySegWindow from '@/components/business/OperaCategorySegWindow'
import { getUnitList } from '@/api/business/segments'
export default {
  name: 'CategorySeg',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaCategorySegWindow },
  data () {
    return {
      unitList:[],
      // æœç´¢
      searchForm: {
        id: '',
        creator: '',
        createDate: '',
        editor: '',
        editDate: '',
        isdeleted: '',
        remark: '',
        unitCode: '',
        segId: '',
        segId2: '',
        segId3: '',
        segName: '',
        segName2: '',
        segName3: '',
        syncDate: '',
        syncInfo: '',
        shipToAddress: '',
        shipToPerson: '',
        shipToPhone: ''
        scode: '',
        orgId: ''
      }
    }
  },
@@ -163,7 +107,16 @@
      'field.id': 'id',
      'field.main': 'id'
    })
    this.loadUnitList()
    this.search()
  },
  methods: {
    loadUnitList () {
      getUnitList()
        .then(data => {
          this.unitList = data
        })
    }
  }
}
</script>
admin/src/views/business/news.vue
@@ -20,7 +20,7 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:news:create', 'business:news:delete']">
        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('新建资讯和定制服务信息表')" icon="el-icon-plus" v-permissions="['business:news:create']">新建</el-button></li>
        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('新建推广资讯')" icon="el-icon-plus" v-permissions="['business:news:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:news:delete']">删除</el-button></li>
      </ul>
      <el-table
@@ -30,29 +30,38 @@
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="title" label="标题" min-width="100px"></el-table-column>
        <el-table-column prop="subTitle" label="副标题" min-width="100px"></el-table-column>
        <el-table-column prop="linkType" label="跳转类型" min-width="100px">
        <el-table-column prop="title" label="文案" fixed min-width="300px"></el-table-column>
        <el-table-column prop="fileList" label="附件"  align="center" fixed min-width="250px">>
          <template slot-scope="{row}">
            <span v-if="row.linkType ==0">富文本</span>
            <span v-if="row.linkType ==1">外链</span>
            <div v-if="row.fileType!=1 && row.fileList!=null && row.fileList.length" class="image-container">
              <div v-for="(item) in row.fileList" :key="item.id" >
                <el-image
                    v-if="item.fileurlFull && item.type !=1"
                    class="image-item"
                    :src="item.fileurlFull"
                    fit="fill"
                    :preview-src-list="[item.fileurlFull]">
                </el-image>
              </div>
            </div>
            <div v-if="row.fileType == 1 && row.fileList!=null && row.fileList.length" class="image-container">
              <video v-if="row.fileList[0].fileurlFull"  style="width: 60px;height: 60px"  controls autoplay :src="row.fileList[0].fileurlFull"></video>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="status" label="状态" min-width="100px">
        <el-table-column prop="publishDate" label="发布时间"   min-width="150px"></el-table-column>
        <el-table-column prop="status" label="状态"   min-width="80px">
          <template slot-scope="{row}">
            <span v-if="row.status ==1">不展示</span>
            <span v-if="row.status ==0">展示</span>
            <span v-if="row.status ==1" style="color:red;">不展示</span>
            <span v-if="row.status ==0" style="color:green;">展示</span>
          </template>
        </el-table-column>
        <el-table-column prop="publishInfo" label="发布备注" min-width="150px"></el-table-column>
        <el-table-column prop="lookNum" label="浏览量" min-width="80px"></el-table-column>
        <el-table-column prop="donwloadNum" label="下载量" min-width="80px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码" min-width="100px"></el-table-column>
        <el-table-column prop="remark" label="备注" min-width="100px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码" min-width="80px"></el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="100px"></el-table-column>
        <el-table-column prop="publishDate" label="最近发布时间" min-width="100px"></el-table-column>
        <el-table-column prop="publishUserName" label="最近发布人" min-width="100px"></el-table-column>
        <el-table-column prop="publishInfo" label="最近发布备注" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="150px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:news:update', 'business:news:delete'])"
          label="操作"
@@ -60,7 +69,7 @@
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaNewsWindow.open('编辑资讯和定制服务信息表', row)" icon="el-icon-edit" v-permissions="['business:news:update']">编辑</el-button>
            <el-button type="text" @click="$refs.operaNewsWindow.open('编辑推广资讯', row)" icon="el-icon-edit" v-permissions="['business:news:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:news:delete']">删除</el-button>
          </template>
        </el-table-column>
@@ -107,3 +116,19 @@
  }
}
</script>
<style scoped>
.image-container {
  display: flex; /* è®¾å®šä¸º Flexbox å¸ƒå±€ */
  flex-wrap: wrap; /* å…è®¸æ¢è¡Œ */
  justify-content: center; /* æ°´å¹³æ–¹å‘上的间隔分布 */
  align-items: flex-start; /* åž‚直方向上的项目对齐 */
}
.image-item {
  height: 60px;
  width: 60px;
  margin-right: 10px; /* å³è¾¹è·ï¼Œä½¿å¾—图片之间有间隔 */
  margin-bottom: 10px; /* åº•部边距,使得图片能够换行 */
}
</style>
admin/src/views/business/newsDz.vue
@@ -20,7 +20,7 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:news:create', 'business:news:delete']">
        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('新建资讯和定制服务信息表')" icon="el-icon-plus" v-permissions="['business:news:create']">新建</el-button></li>
        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('新建定制服务信息')" icon="el-icon-plus" v-permissions="['business:news:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:news:delete']">删除</el-button></li>
      </ul>
      <el-table
@@ -30,8 +30,22 @@
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="title" label="标题" min-width="100px"></el-table-column>
        <el-table-column prop="subTitle" label="副标题" min-width="100px"></el-table-column>
        <el-table-column prop="title" label="标题" fixed min-width="100px"></el-table-column>
        <el-table-column prop="subTitle" label="副标题" fixed min-width="100px"></el-table-column>
        <el-table-column prop="fileList" label="附件"  align="center" fixed min-width="100px">>
          <template slot-scope="{row}">
            <div v-if="row.fileList!=null && row.fileList.length" class="image-container">
              <el-image
                  v-if="row.fileList[0].type !=1 && row.fileList[0].fileurlFull"
                  class="image-item"
                  :src="row.fileList[0].fileurlFull"
                  fit="fill"
                  :preview-src-list="[row.fileList[0].fileurlFull]">
              </el-image>
              <video v-if="row.fileList[0].type ==1 && row.fileList[0].fileurlFull"  style="width: 60px;height: 60px"  controls autoplay :src="row.fileList[0].fileurlFull"></video>
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="linkType" label="跳转类型" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.linkType ==0">富文本</span>
@@ -45,14 +59,10 @@
          </template>
        </el-table-column>
        <el-table-column prop="lookNum" label="浏览量" min-width="80px"></el-table-column>
        <el-table-column prop="donwloadNum" label="下载量" min-width="80px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码" min-width="100px"></el-table-column>
        <el-table-column prop="remark" label="备注" min-width="100px"></el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="100px"></el-table-column>
        <el-table-column prop="publishDate" label="最近发布时间" min-width="100px"></el-table-column>
        <el-table-column prop="publishUserName" label="最近发布人" min-width="100px"></el-table-column>
        <el-table-column prop="publishInfo" label="最近发布备注" min-width="100px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:news:update', 'business:news:delete'])"
          label="操作"
@@ -60,7 +70,7 @@
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaNewsWindow.open('编辑资讯和定制服务信息表', row)" icon="el-icon-edit" v-permissions="['business:news:update']">编辑</el-button>
            <el-button type="text" @click="$refs.operaNewsWindow.open('编辑定制服务信息', row)" icon="el-icon-edit" v-permissions="['business:news:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:news:delete']">删除</el-button>
          </template>
        </el-table-column>
@@ -73,7 +83,7 @@
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaNewsWindow ref="operaNewsWindow" @success="handlePageChange"/>
    <OperaNewsDzWindow ref="operaNewsWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
@@ -81,11 +91,11 @@
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaNewsWindow from '@/components/business/OperaNewsWindow'
import OperaNewsDzWindow from '@/components/business/OperaNewsDzWindow'
export default {
  name: 'News',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaNewsWindow },
  components: { TableLayout, Pagination, OperaNewsDzWindow },
  data () {
    return {
      // æœç´¢
admin/vue.config.js
@@ -11,7 +11,7 @@
    port: 10012,
    proxy: {
      [process.env.VUE_APP_API_PREFIX]: {
        target: 'http://localhost:10028',
        target: process.env.VUE_APP_BASE_API,
        changeOrigin: true,
        pathRewrite: {
          [`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
server/admin/src/main/java/com/doumee/api/business/PushController.java
@@ -43,6 +43,7 @@
            success = Constants.ONE;
            r = ApiResponse.failed(StringUtils.defaultString(e.getMessage(),"操作失败"));
        }catch (Exception e){
            e.printStackTrace();
            success = Constants.ONE;
            r = ApiResponse.failed("操作失败");
        }finally {
@@ -67,6 +68,7 @@
            r = ApiResponse.failed(StringUtils.defaultString(e.getMessage(),"操作失败"));
        }catch (Exception e){
            success = Constants.ONE;
            e.getMessage();
            r = ApiResponse.failed("操作失败");
        }finally {
            zbomIAMService.saveInterfaceLog("/push/iam/updateUserInfo","IAM推送人员账号信息", token, uuid, timestamp, upateUserModel,success, JSONObject.toJSONString(r));
server/admin/target/classes/com/doumee/config/shiro/ShiroConfig.class
Binary files differ
server/admin/target/classes/com/doumee/timer/ZbomIAMSyncJobBiz.class
Binary files differ
server/service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
@@ -33,11 +33,11 @@
    public Integer create(SystemDictData systemDictData) {
        SystemDictData queryDto = new SystemDictData();
        queryDto.setDictId(systemDictData.getDictId());
        queryDto.setCode(systemDictData.getCode());
        queryDto.setLabel(systemDictData.getLabel());
        queryDto.setDeleted(Boolean.FALSE);
        SystemDictData dictData = systemDictDataService.findOne(queryDto);
        if (dictData != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据值已存在");
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据标签已存在");
        }
        return systemDictDataService.create(systemDictData);
    }
@@ -46,11 +46,11 @@
    public void updateById(SystemDictData systemDictData) {
        SystemDictData queryDto = new SystemDictData();
        queryDto.setDictId(systemDictData.getDictId());
        queryDto.setCode(systemDictData.getLabel());
        queryDto.setLabel(systemDictData.getLabel());
        queryDto.setDeleted(Boolean.FALSE);
        SystemDictData dictData = systemDictDataService.findOne(queryDto);
        if (dictData != null && !dictData.getId().equals(systemDictData.getId())) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据值已存在");
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "数据标签已存在");
        }
        systemDictDataService.updateById(systemDictData);
    }
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java
@@ -15,6 +15,7 @@
import com.doumee.dao.business.model.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@@ -43,6 +44,12 @@
    private IamInterfaceLogMapper iamInterfaceLogMapper;
    @Autowired
    private SegmentsMapper segmentsMapper;
    /**
     * æ˜¯å¦å¼€å‘者
     */
    @Value("${debug_model}")
    private Boolean isDebug;
    /**
     * åˆå§‹åŒ–同步用户
@@ -76,10 +83,12 @@
                    .eq(Shop::getOrgId,model.getIdtOrgId())
                    .last("limit 1"));
            if(shop == null){
                shop = new Shop();
                shop.setCreateDate(date);
                addShops.add(initShopInfo(shop,model,date));
            }else {
                segDelOrgIds.add(shop.getOrgId());
                updateShops.add(shop);
                updateShops.add(initShopInfo(shop,model,date));
            }
            //处理品类数据逻辑
            dealCategorySegData(date,shop,model.getCategory(),categorySegList,segmentsList);
@@ -207,15 +216,13 @@
    }
    private Shop initShopInfo(Shop shop, IamUpateShopModel model, Date date) {
        if(shop == null) {
            shop = new Shop();
            shop.setCreateDate(date);
        }
        shop.setEditDate(date);
        shop.setOrgId(model.getIdtOrgId());
        shop.setName(model.getIdtOrgName());
        shop.setCode(model.getIdtOrgCode());
        shop.setType(model.getIdtOrgFirstLevelType());
        shop.setStatus(Constants.parseIntByStr(model.getIdtOrgStatus()));
        shop.setSecondType(model.getIdtOrgSecondLevelType());
        shop.setAttribute(model.getIdtOrgAttribute());
        if(model.getScode()!=null){
@@ -261,6 +268,9 @@
    }
    private void isValidToken(String uuid, String timestamp, String token) {
        if(isDebug){
            return;
        }
        if (!StringUtils.equalsIgnoreCase( getToken( uuid, timestamp), token)) {
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,token错误~");
        }
@@ -294,6 +304,7 @@
        users.setEditDate(new Date());
        users.setSex(upateUserModel.getIdtUserGender());
        users.setIamUsername(upateUserModel.getAppAccountNo());
        users.setCode(upateUserModel.getIdtUserWorkNo());
        users.setName(upateUserModel.getIdtUserName());
        users.setPassword(upateUserModel.getAppAccountPwd());
        users.setPhone(upateUserModel.getIdtUserMobile());
@@ -301,24 +312,27 @@
        users.setStatus(upateUserModel.getAppAccountStatus());
        users.setIsdeleted(Constants.ZERO);
        users.setRemark(JSONObject.toJSONString(upateUserModel));
        users.setRoleNames(null);
        users.setRoleIds(null);
        users.setUserTypes(null);
        if( upateUserModel.getUserTypes() !=null){
            for(IamUserTypeModel type : upateUserModel.getUserTypes()){
                if(StringUtils.isNotBlank(users.getUserTypes())){
                if(StringUtils.isBlank(users.getUserTypes())){
                    users.setUserTypes("");
                }
                users.setUserTypes("["+users.getUserTypes()+type.getIdtUserTypeCode()+"];");
                users.setUserTypes(users.getUserTypes()+"["+type.getIdtUserTypeCode()+"];");
            }
        }
        if( upateUserModel.getRoles() !=null){
            for(IamUserRoleModel t : upateUserModel.getRoles()){
                if(StringUtils.isNotBlank(users.getRoleIds())){
                if(StringUtils.isBlank(users.getRoleIds())){
                    users.setRoleIds("");
                }
                if(StringUtils.isNotBlank(users.getRoleNames())){
                if(StringUtils.isBlank(users.getRoleNames())){
                    users.setRoleNames("");
                }
                users.setRoleIds("["+users.getRoleIds()+t.getId()+"];");
                users.setRoleNames("["+users.getRoleNames()+t.getName()+"];");
                users.setRoleIds(users.getRoleIds()+t.getId()+"["+t.getId()+"];");
                users.setRoleNames(users.getRoleNames()+"["+t.getName()+"];");
            }
        }
        if(upateUserModel.getJobs()!=null){
@@ -334,7 +348,7 @@
                Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda()
                        .eq(Shop::getOrgId,orgId)
                        .last("limit 1"));
                users.setDepartmentId(shop.getId());
                users.setDepartmentId(shop ==null?null:shop.getId());
            }
        }
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -7,6 +7,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
@@ -73,11 +74,6 @@
    public static final String FTP_USERNAME ="FTP_USERNAME" ;
    public static final String FTP_PWD ="FTP_PWD" ;
    public static final String FTP_RESOURCE_PATH ="FTP_RESOURCE_PATH" ;
    public static final String ERP_ORGLIST_URL ="ERP_ORGLIST_URL" ;
    public static final String ERP_USERLIST_URL ="ERP_USERLIST_URL" ;
    public static final String ERP_APPROVE_URL ="ERP_APPROVE_URL" ;
    public static final String ERP_USERSTATUS_RL ="ERP_USERSTATUS_RL" ;
    public static final String ERP ="ERP" ;
    public static final Integer THREE =3 ;
    public static final Integer FOUR =4 ;
    public static final String ORG_USER_ORIGIN = "ORG_USER_ORIGIN";
@@ -87,34 +83,80 @@
    public static final String ZBOM = "ZBOM" ;
    public static final String ZBOM_IAM_APPKEY = "ZBOM_IAM_APPKEY";
    public static final String ZBOM_IAM_APPID = "ZBOM_IAM_APPID";
    public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
    public static  boolean DEALING_HK_SYNCDEVICE = false;
    public static  boolean DEALING_HK_SYNCDEVICE_STATUS = false;
    public static  boolean DEALING_HK_SYNCPARK = false;
    public static  boolean DEALING_HK_IMG = false;
    public static  boolean DEALING_HK_ORG = false;
    public static  boolean DEALING_HK_USER = false;
    public static  boolean DEALING_HK_DEL_USER = false;
    public static  boolean DEALING_HK_VISIT = false;
    public static  boolean DEALING_HK_VISIT_EXPIRE = false;
    public static  boolean DEALING_FROM_HK_VISIT = false;
    public static  boolean DEALING_HK_EMPOWER = false;
    public static  boolean DEALING_HK_EMPOWER_DETAIL = false;
    public static  boolean DEALING_HK_EMPOWER_RESULT = false;
    public static  boolean DEALING_HK_PARKBOOK = false;
    // ERP接口配置
    public static final String ERP_CONFIG = "ERP_CONFIG";
    // ERP ACCESS_KEY
    public static final String ERP_ACCESS_KEY = "ERP_ACCESS_KEY";
    // ERP ACCESS_SECRET
    public static final String ERP_ACCESS_SECRET = "ERP_ACCESS_SECRET";
    // å†…部人员冻结配置时间
    public static final String TIMEOUT_FREEZE = "TIMEOUT_FREEZE";
    public static Integer parseIntByStr(String idtOrgStatus) {
        try {
            return  Integer.parseInt(idtOrgStatus);
        }catch (Exception e){
            return null;
        }
    }
    // è¶…时预警配置
    public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING";
    // FTP文件服务器资源访问地址
    /**
     * é™„件对象类型 0news多图 1news视频
     */
    public  enum MultiFile{
        NEWS_FILE(0, "推广资讯附件", "NEWS")
        ;
        // æˆå‘˜å˜é‡
        private String name;
        private int key;
        private String info;// æè¿°
        // æž„造方法
        MultiFile(int key, String name, String info) {
            this.name = name;
            this.key = key;
            this.info = info;
        }
        // æ™®é€šæ–¹æ³•
        public static String getName(int index) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        // æ™®é€šæ–¹æ³•
        public static String getInfo(int index) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.info;
                }
            }
            return null;
        }
        public String getInfo() {
            return info;
        }
        public void setInfo(String info) {
            this.info = info;
        }
        // get set æ–¹æ³•
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
    }
    public static  Date  getBirthdyByCardNo(String idCard){
    if(idCard ==null || idCard.length()<14){
@@ -257,6 +299,8 @@
    public static final String ACCESS_KEY = "ACCESS_KEY";
    public static final String ENDPOINT = "ENDPOINT";
    public static final String RESOURCE_PATH = "RESOURCE_PATH";
    public static final String USERS_FILE = "USERS_FILE";
    public static final String NEWS_FILE = "NEWS_FILE";
    //发送会议开始  å®šæ—¶æå‰å¤šå°‘分钟发送
    public static final String SYSTEM ="SYSTEM";
@@ -327,6 +371,12 @@
    }
    public static boolean equalsLong(Long a, Long b) {
        if (a == null || b==null) {
            return false;
        }
        return a.equals(b);
    }
    public static boolean equalsInteger(Integer a, Integer b) {
        if (formatIntegerNum(a) == formatIntegerNum(b)) {
            return true;
server/service/src/main/java/com/doumee/core/utils/QrCodeUtils.java
@@ -1,8 +1,9 @@
package com.doumee.core.utils;
import com.google.zxing.*;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import javax.imageio.ImageIO;
server/service/src/main/java/com/doumee/core/utils/tyyun/TyyZosUtil.java
@@ -172,11 +172,15 @@
            if (inputStream != null) {
                ObjectMetadata metadata = new ObjectMetadata();
                metadata.setContentLength(inputStream.available());
                PutObjectRequest request = new PutObjectRequest(bucketName, key, inputStream,metadata);
                request.setCannedAcl(CannedAccessControlList.PublicRead);
                PutObjectResult result = client.putObject(request);
                return true;
            }
        }catch (Exception e){
            log.error("对象存储==================== ç½‘络文件上传失败"+e.getMessage());
            log.error("对象存储==================== æ–‡ä»¶ä¸Šä¼ å¤±è´¥"+e.getMessage());
        }finally {
            shutDown();
        }
server/service/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.dao.business.dto.BaseQueryDto;
import io.swagger.annotations.ApiModel;
@@ -62,13 +63,16 @@
    @ExcelColumn(name="类型0图片 1视频 2其他")
    private Integer type;
    @ApiModelProperty(value = "关联对象类型 0推广资讯多图 1推广资讯视频 2定制服务多图 3定制服务视频", example = "1")
    @ExcelColumn(name="关联对象类型 0推广资讯多图 1推广资讯视频 2定制服务多图 3定制服务视频")
    @ApiModelProperty(value = "附件对象类型 0news多图 1news视频", example = "1")
    @ExcelColumn(name="附件对象类型 0news多图 1news视频")
    private Integer objType;
    @ApiModelProperty(value = "文件地址")
    @ExcelColumn(name="文件地址")
    private String fileurl;
    @ApiModelProperty(value = "文件地址完整")
    @TableField(exist = false)
    private String fileurlFull;
    @ApiModelProperty(value = "排序码", example = "1")
    @ExcelColumn(name="排序码")
server/service/src/main/java/com/doumee/dao/business/model/News.java
@@ -11,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * èµ„讯和定制服务信息表
@@ -70,6 +71,9 @@
    @ApiModelProperty(value = "跳转类型 0富文本 1外链", example = "1")
    @ExcelColumn(name="跳转类型 0富文本 1外链")
    private Integer linkType;
    @ApiModelProperty(value = "附件类型 0图片 1视频", example = "1")
    @ExcelColumn(name="附件类型 0图片 1视频")
    private Integer fileType;
    @ApiModelProperty(value = "状态 0展示 1不展示", example = "1")
    @ExcelColumn(name="状态 0展示 1不展示")
@@ -102,6 +106,9 @@
    @ExcelColumn(name="最近发布人")
    @TableField(exist = false)
    private String publishUserName;
    @ApiModelProperty(value = "附件集合")
    @TableField(exist = false)
    private List<Multifile> fileList;
    @ApiModelProperty(value = "素材类型 0推广资讯 1定制服务", example = "1")
    @ExcelColumn(name="素材类型 0推广资讯 1定制服务")
server/service/src/main/java/com/doumee/dao/business/model/Users.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.dao.business.dto.BaseQueryDto;
import io.swagger.annotations.ApiModel;
@@ -160,5 +161,22 @@
    @ApiModelProperty(value = "用户角色名称集合,多个用英语逗号隔开")
    @ExcelColumn(name="用户角色名称集合,多个用英语逗号隔开")
    private String roleNames;
    @ApiModelProperty(value = "是否包含下级")
    @TableField(exist = false)
    private Boolean includeChild;
    @ApiModelProperty(value = "所属组织名称")
    @TableField(exist = false)
    private String shopName;
    @ApiModelProperty(value = "组织类型")
    @TableField(exist = false)
    private Integer shopType;
    @ApiModelProperty(value = "组织类型二级")
    @TableField(exist = false)
    private Integer shopSecType;
    @ApiModelProperty(value = "完整头像录")
    @TableField(exist = false)
    private String imgurlFull;
    @ApiModelProperty(value = "个人二维码图片地址")
    @TableField(exist = false)
    private String qrcodeImgFull;
}
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
@@ -1,19 +1,32 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.MultifileMapper;
import com.doumee.dao.business.NewsMapper;
import com.doumee.dao.business.model.BjParam;
import com.doumee.dao.business.model.Multifile;
import com.doumee.dao.business.model.News;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.NewsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -26,16 +39,60 @@
    @Autowired
    private NewsMapper newsMapper;
    @Autowired
    private MultifileMapper multifileMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    public Long create(News news) {
        newsMapper.insert(news);
        return news.getId();
    @Transactional
    public Long create(News param) {
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        param.setIsdeleted(Constants.ZERO);
        param.setEditor(userInfo.getId());
        param.setCreator(userInfo.getId());
        param.setStatus(Constants.formatIntegerNum(param.getStatus()));
        param.setCreateDate(new Date());
        param.setEditDate(param.getCreateDate());
        param.setPublishUserid(param.getCreator());
        param.setFileType(Constants.formatIntegerNum(param.getFileType()));
        newsMapper.insert(param);
        if(param.getFileList()!=null && param.getFileList().size()>0){
            List<Multifile> multifiles = new ArrayList<>();
            int index =1;
            for(Multifile f : param.getFileList()){
                if(StringUtils.isNotBlank(f.getFileurl())){
                    f.setId(null);
                    f.setIsdeleted(Constants.ZERO);
                    f.setObjId(param.getId());
                    f.setType(StringUtils.endsWith(f.getFileurl(),".mp4")?Constants.ONE:Constants.ZERO);
                    f.setObjType(Constants.MultiFile.NEWS_FILE.getKey());
                    f.setCreator(param.getCreator());
                    f.setCreateDate(param.getCreateDate());
                    f.setSortnum(index++);
                    multifiles.add(f);
                }
            }
            if(multifiles.size()>0){
                multifileMapper.insert(multifiles);
            }
        }
        return param.getId();
    }
    @Override
    public void deleteById(Long id) {
        newsMapper.deleteById(id);
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        newsMapper.update(null,new UpdateWrapper<News>().lambda()
                .set(News::getIsdeleted,Constants.ONE )
                .set(News::getEditor,userInfo.getId() )
                .set(News::getEditDate,new Date() )
                .eq(News::getId,id));
        multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
                .set(Multifile::getIsdeleted,Constants.ONE )
                .eq(Multifile::getIsdeleted,Constants.ZERO )
                .eq(Multifile::getObjType,Constants.MultiFile.NEWS_FILE.getKey())
                .eq(Multifile::getObjId,id));
    }
    @Override
@@ -49,12 +106,44 @@
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        newsMapper.deleteBatchIds(ids);
        for(Long id : ids){
            deleteById(id);
        }
    }
    @Override
    @Transactional
    public void updateById(News news) {
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        news.setEditor(userInfo.getId());
        news.setEditDate(new Date());
        news.setPublishUserid(news.getEditor());
        newsMapper.updateById(news);
        if(news.getFileList()!=null && news.getFileList().size()>0){
            List<Multifile> multifiles = new ArrayList<>();
            int index =1;
            for(Multifile f : news.getFileList()){
                if(StringUtils.isNotBlank(f.getFileurl())){
                    f.setId(null);
                    f.setIsdeleted(Constants.ZERO);
                    f.setType(StringUtils.endsWith(f.getFileurl(),".mp4")?Constants.ONE:Constants.ZERO);
                    f.setObjId(news.getId());
                    f.setObjType(Constants.MultiFile.NEWS_FILE.getKey());
                    f.setCreator(news.getCreator());
                    f.setCreateDate(news.getCreateDate());
                    f.setSortnum(index++);
                    multifiles.add(f);
                }
            }
            if(multifiles.size()>0){
                multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
                        .set(Multifile::getIsdeleted,Constants.ONE )
                        .eq(Multifile::getIsdeleted,Constants.ZERO )
                        .eq(Multifile::getObjType,Constants.MultiFile.NEWS_FILE.getKey())
                        .eq(Multifile::getObjId,news.getId() ));
                multifileMapper.insert(multifiles);
            }
        }
    }
    @Override
@@ -87,76 +176,141 @@
    @Override
    public PageData<News> findPage(PageWrap<News> pageWrap) {
        IPage<News> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<News> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<News> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,News::getEditor)
                .selectAll(News.class)
                .selectAs(SystemUser::getRealname,News::getEditorName);
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(News::getId, pageWrap.getModel().getId());
            queryWrapper.eq(News::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(News::getCreator, pageWrap.getModel().getCreator());
            queryWrapper.eq(News::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(News::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(News::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
            queryWrapper.ge(News::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(News::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(News::getEditor, pageWrap.getModel().getEditor());
            queryWrapper.eq(News::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(News::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(News::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
            queryWrapper.ge(News::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.le(News::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(News::getIsdeleted, pageWrap.getModel().getIsdeleted());
            queryWrapper.eq(News::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(News::getRemark, pageWrap.getModel().getRemark());
            queryWrapper.eq(News::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getTitle() != null) {
            queryWrapper.lambda().like(News::getTitle, pageWrap.getModel().getTitle());
            queryWrapper.like(News::getTitle, pageWrap.getModel().getTitle());
        }
        if (pageWrap.getModel().getSubTitle() != null) {
            queryWrapper.lambda().eq(News::getSubTitle, pageWrap.getModel().getSubTitle());
            queryWrapper.eq(News::getSubTitle, pageWrap.getModel().getSubTitle());
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.lambda().eq(News::getSortnum, pageWrap.getModel().getSortnum());
            queryWrapper.eq(News::getSortnum, pageWrap.getModel().getSortnum());
        }
        if (pageWrap.getModel().getContent() != null) {
            queryWrapper.lambda().eq(News::getContent, pageWrap.getModel().getContent());
            queryWrapper.eq(News::getContent, pageWrap.getModel().getContent());
        }
        if (pageWrap.getModel().getLinkType() != null) {
            queryWrapper.lambda().eq(News::getLinkType, pageWrap.getModel().getLinkType());
            queryWrapper.eq(News::getLinkType, pageWrap.getModel().getLinkType());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(News::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(News::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getLookNum() != null) {
            queryWrapper.lambda().eq(News::getLookNum, pageWrap.getModel().getLookNum());
            queryWrapper.eq(News::getLookNum, pageWrap.getModel().getLookNum());
        }
        if (pageWrap.getModel().getDonwloadNum() != null) {
            queryWrapper.lambda().eq(News::getDonwloadNum, pageWrap.getModel().getDonwloadNum());
            queryWrapper.eq(News::getDonwloadNum, pageWrap.getModel().getDonwloadNum());
        }
        if (pageWrap.getModel().getPublishDate() != null) {
            queryWrapper.lambda().ge(News::getPublishDate, Utils.Date.getStart(pageWrap.getModel().getPublishDate()));
            queryWrapper.lambda().le(News::getPublishDate, Utils.Date.getEnd(pageWrap.getModel().getPublishDate()));
            queryWrapper.ge(News::getPublishDate, Utils.Date.getStart(pageWrap.getModel().getPublishDate()));
            queryWrapper.le(News::getPublishDate, Utils.Date.getEnd(pageWrap.getModel().getPublishDate()));
        }
        if (pageWrap.getModel().getPublishUserid() != null) {
            queryWrapper.lambda().eq(News::getPublishUserid, pageWrap.getModel().getPublishUserid());
            queryWrapper.eq(News::getPublishUserid, pageWrap.getModel().getPublishUserid());
        }
        if (pageWrap.getModel().getPublishInfo() != null) {
            queryWrapper.lambda().eq(News::getPublishInfo, pageWrap.getModel().getPublishInfo());
            queryWrapper.eq(News::getPublishInfo, pageWrap.getModel().getPublishInfo());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(News::getType, pageWrap.getModel().getType());
            queryWrapper.eq(News::getType, pageWrap.getModel().getType());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
        PageData<News> pageData =  PageData.from(newsMapper.selectJoinPage(page, News.class,queryWrapper));
        if(pageData!=null && pageData.getRecords()!=null && pageData.getRecords().size()>0){
            List<Long> idList = new ArrayList<>();
            for(News model : pageData.getRecords()){
                idList.add(model.getId());
            }
            queryWrapper.orderByAsc(sortData.getProperty());
            List<Multifile> files = dealMultifileList(idList);
            for(News model : pageData.getRecords()){
                setFilelistById(model,files);
            }
        }
        return PageData.from(newsMapper.selectPage(page, queryWrapper));
        return pageData;
    }
    private void setFilelistById(News model, List<Multifile> multifiles) {
        if(multifiles!=null && multifiles.size()>0){
            for(Multifile f : multifiles){
                if(Constants.equalsLong(f.getObjId(),model.getId())){
                    if(Constants.equalsInteger(model.getType(),Constants.ZERO) &&Constants.equalsInteger(model.getFileType(),Constants.ONE) && Constants.equalsInteger(f.getType(),Constants.ONE)){
                        //如果是视频
                        if(model.getFileList() == null){
                            model.setFileList(new ArrayList<>());
                        }
                        model.getFileList().add(f);
                        break;
                    }
                    if(Constants.equalsInteger(model.getType(),Constants.ZERO) && Constants.equalsInteger(model.getFileType(),Constants.ZERO) && Constants.equalsInteger(f.getType(),Constants.ZERO)){
                        //如果是视频
                        if(model.getFileList() == null){
                            model.setFileList(new ArrayList<>());
                        }
                        model.getFileList().add(f);
                    }
                    if(Constants.equalsInteger(model.getType(),Constants.ONE)){
                        //如果是视频
                        if(model.getFileList() == null){
                            model.setFileList(new ArrayList<>());
                        }
                        model.getFileList().add(f);
                        break;
                    }
                }
            }
        }
    }
    private List<Multifile> dealMultifileList(List<Long> idList) {
        List<Integer> types = new ArrayList<>();
        types.add(Constants.MultiFile.NEWS_FILE.getKey());
        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getIsdeleted,Constants.ZERO )
                .in(Multifile::getObjType,types)
                .in(Multifile::getObjId,idList )
                .orderByAsc(Multifile::getSortnum)
        );
        if(multifiles!=null && multifiles.size()>0){
            String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH ).getCode() +
                    systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.NEWS_FILE ).getCode();
            for(Multifile f : multifiles){
                if(StringUtils.isNotBlank(f.getFileurl())){
                    f.setFileurlFull(path + f.getFileurl());
                }
            }
        }
        return multifiles;
    }
    @Override
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -1,19 +1,30 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.ShopMapper;
import com.doumee.dao.business.UsersMapper;
import com.doumee.dao.business.model.Multifile;
import com.doumee.dao.business.model.News;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.business.model.Users;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.UsersService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.catalina.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
@@ -26,6 +37,10 @@
    @Autowired
    private UsersMapper usersMapper;
    @Autowired
    private ShopMapper shopMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    public Long create(Users users) {
@@ -87,123 +102,159 @@
    @Override
    public PageData<Users> findPage(PageWrap<Users> pageWrap) {
        IPage<Users> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Users> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<Users> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.leftJoin(Shop.class,Shop::getId,Users::getDepartmentId)
                .selectAs(Shop::getNamePath,Users::getShopName)
                .selectAs(Shop::getType,Users::getShopType)
                .selectAs(Shop::getSecondType,Users::getShopSecType)
                .selectAll(Users.class);
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Users::getId, pageWrap.getModel().getId());
            queryWrapper.eq(Users::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(Users::getCreator, pageWrap.getModel().getCreator());
            queryWrapper.eq(Users::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(Users::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(Users::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
            queryWrapper.ge(Users::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(Users::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(Users::getEditor, pageWrap.getModel().getEditor());
            queryWrapper.eq(Users::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(Users::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(Users::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
            queryWrapper.ge(Users::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.le(Users::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(Users::getIsdeleted, pageWrap.getModel().getIsdeleted());
            queryWrapper.eq(Users::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(Users::getRemark, pageWrap.getModel().getRemark());
            queryWrapper.eq(Users::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getDepartmentId() != null) {
            queryWrapper.lambda().eq(Users::getDepartmentId, pageWrap.getModel().getDepartmentId());
            queryWrapper.eq(Users::getDepartmentId, pageWrap.getModel().getDepartmentId());
        }
        if (pageWrap.getModel().getImgurl() != null) {
            queryWrapper.lambda().eq(Users::getImgurl, pageWrap.getModel().getImgurl());
            queryWrapper.eq(Users::getImgurl, pageWrap.getModel().getImgurl());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Users::getType, pageWrap.getModel().getType());
            queryWrapper.eq(Users::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().eq(Users::getName, pageWrap.getModel().getName());
            queryWrapper.eq(Users::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getBirthday() != null) {
            queryWrapper.lambda().ge(Users::getBirthday, Utils.Date.getStart(pageWrap.getModel().getBirthday()));
            queryWrapper.lambda().le(Users::getBirthday, Utils.Date.getEnd(pageWrap.getModel().getBirthday()));
            queryWrapper.ge(Users::getBirthday, Utils.Date.getStart(pageWrap.getModel().getBirthday()));
            queryWrapper.le(Users::getBirthday, Utils.Date.getEnd(pageWrap.getModel().getBirthday()));
        }
        if (pageWrap.getModel().getPhone() != null) {
            queryWrapper.lambda().eq(Users::getPhone, pageWrap.getModel().getPhone());
            queryWrapper.eq(Users::getPhone, pageWrap.getModel().getPhone());
        }
        if (pageWrap.getModel().getIdcardNo() != null) {
            queryWrapper.lambda().eq(Users::getIdcardNo, pageWrap.getModel().getIdcardNo());
            queryWrapper.eq(Users::getIdcardNo, pageWrap.getModel().getIdcardNo());
        }
        if (pageWrap.getModel().getCode() != null) {
            queryWrapper.lambda().eq(Users::getCode, pageWrap.getModel().getCode());
            queryWrapper.eq(Users::getCode, pageWrap.getModel().getCode());
        }
        if (pageWrap.getModel().getOpenid() != null) {
            queryWrapper.lambda().eq(Users::getOpenid, pageWrap.getModel().getOpenid());
            queryWrapper.eq(Users::getOpenid, pageWrap.getModel().getOpenid());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(Users::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(Users::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getIamStatus() != null) {
            queryWrapper.lambda().eq(Users::getIamStatus, pageWrap.getModel().getIamStatus());
            queryWrapper.eq(Users::getIamStatus, pageWrap.getModel().getIamStatus());
        }
        if (pageWrap.getModel().getIamDate() != null) {
            queryWrapper.lambda().ge(Users::getIamDate, Utils.Date.getStart(pageWrap.getModel().getIamDate()));
            queryWrapper.lambda().le(Users::getIamDate, Utils.Date.getEnd(pageWrap.getModel().getIamDate()));
            queryWrapper.ge(Users::getIamDate, Utils.Date.getStart(pageWrap.getModel().getIamDate()));
            queryWrapper.le(Users::getIamDate, Utils.Date.getEnd(pageWrap.getModel().getIamDate()));
        }
        if (pageWrap.getModel().getIamId() != null) {
            queryWrapper.lambda().eq(Users::getIamId, pageWrap.getModel().getIamId());
            queryWrapper.eq(Users::getIamId, pageWrap.getModel().getIamId());
        }
        if (pageWrap.getModel().getIamUsername() != null) {
            queryWrapper.lambda().eq(Users::getIamUsername, pageWrap.getModel().getIamUsername());
            queryWrapper.like(Users::getIamUsername, pageWrap.getModel().getIamUsername());
        }
        if (pageWrap.getModel().getPassword() != null) {
            queryWrapper.lambda().eq(Users::getPassword, pageWrap.getModel().getPassword());
            queryWrapper.eq(Users::getPassword, pageWrap.getModel().getPassword());
        }
        if (pageWrap.getModel().getSex() != null) {
            queryWrapper.lambda().eq(Users::getSex, pageWrap.getModel().getSex());
            queryWrapper.eq(Users::getSex, pageWrap.getModel().getSex());
        }
        if (pageWrap.getModel().getLastLoginDate() != null) {
            queryWrapper.lambda().ge(Users::getLastLoginDate, Utils.Date.getStart(pageWrap.getModel().getLastLoginDate()));
            queryWrapper.lambda().le(Users::getLastLoginDate, Utils.Date.getEnd(pageWrap.getModel().getLastLoginDate()));
            queryWrapper.ge(Users::getLastLoginDate, Utils.Date.getStart(pageWrap.getModel().getLastLoginDate()));
            queryWrapper.le(Users::getLastLoginDate, Utils.Date.getEnd(pageWrap.getModel().getLastLoginDate()));
        }
        if (pageWrap.getModel().getLoginNum() != null) {
            queryWrapper.lambda().eq(Users::getLoginNum, pageWrap.getModel().getLoginNum());
            queryWrapper.eq(Users::getLoginNum, pageWrap.getModel().getLoginNum());
        }
        if (pageWrap.getModel().getLastLoginPlat() != null) {
            queryWrapper.lambda().eq(Users::getLastLoginPlat, pageWrap.getModel().getLastLoginPlat());
            queryWrapper.eq(Users::getLastLoginPlat, pageWrap.getModel().getLastLoginPlat());
        }
        if (pageWrap.getModel().getCostomerNum() != null) {
            queryWrapper.lambda().eq(Users::getCostomerNum, pageWrap.getModel().getCostomerNum());
            queryWrapper.eq(Users::getCostomerNum, pageWrap.getModel().getCostomerNum());
        }
        if (pageWrap.getModel().getJobDate() != null) {
            queryWrapper.lambda().eq(Users::getJobDate, pageWrap.getModel().getJobDate());
            queryWrapper.eq(Users::getJobDate, pageWrap.getModel().getJobDate());
        }
        if (pageWrap.getModel().getSlogans() != null) {
            queryWrapper.lambda().eq(Users::getSlogans, pageWrap.getModel().getSlogans());
            queryWrapper.eq(Users::getSlogans, pageWrap.getModel().getSlogans());
        }
        if (pageWrap.getModel().getQrcodeImg() != null) {
            queryWrapper.lambda().eq(Users::getQrcodeImg, pageWrap.getModel().getQrcodeImg());
            queryWrapper.eq(Users::getQrcodeImg, pageWrap.getModel().getQrcodeImg());
        }
        if (pageWrap.getModel().getEmail() != null) {
            queryWrapper.lambda().eq(Users::getEmail, pageWrap.getModel().getEmail());
            queryWrapper.eq(Users::getEmail, pageWrap.getModel().getEmail());
        }
        if (pageWrap.getModel().getUserTypes() != null) {
            queryWrapper.lambda().eq(Users::getUserTypes, pageWrap.getModel().getUserTypes());
            queryWrapper.eq(Users::getUserTypes, pageWrap.getModel().getUserTypes());
        }
        if (pageWrap.getModel().getRoleIds() != null) {
            queryWrapper.lambda().eq(Users::getRoleIds, pageWrap.getModel().getRoleIds());
            queryWrapper.eq(Users::getRoleIds, pageWrap.getModel().getRoleIds());
        }
        if (pageWrap.getModel().getRoleNames() != null) {
            queryWrapper.lambda().eq(Users::getRoleNames, pageWrap.getModel().getRoleNames());
        if (StringUtils.isNotBlank(pageWrap.getModel().getRoleNames() )) {
            queryWrapper.eq(Users::getRoleNames, pageWrap.getModel().getRoleNames());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
        if (StringUtils.isNotBlank(pageWrap.getModel().getShopName() )) {
            queryWrapper.eq(Shop::getName, pageWrap.getModel().getShopName());
        }
        queryWrapper.eq(pageWrap.getModel().getShopType()!=null,Shop::getType,pageWrap.getModel().getShopType());
        queryWrapper.eq(pageWrap.getModel().getShopSecType()!=null,Shop::getSecondType,pageWrap.getModel().getShopSecType());
        if(StringUtils.isNotBlank(pageWrap.getModel().getQueryKeyword())){
            queryWrapper.and(w ->{
                w.eq(Users::getName,pageWrap.getModel().getQueryKeyword())
                        .or().eq(Users::getPhone,pageWrap.getModel().getQueryKeyword())
                        .or().eq(Users::getCode,pageWrap.getModel().getQueryKeyword())
                ;
            } );
        }
        if(pageWrap.getModel().getIamOrgId()!=null){
            if(pageWrap.getModel().getIncludeChild()!=null &&pageWrap.getModel().getIncludeChild() ){
                //如果包含下级组织
                Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOrgId,pageWrap.getModel().getIamOrgId()).last("limit 1"));//查询组织信息
                queryWrapper.likeRight(Shop::getIdPath,shop.getIdPath());
            }else{
                //不包含下级组织
                queryWrapper.eq(Shop::getOrgId,pageWrap.getModel().getIamOrgId());
            }
        }
        return PageData.from(usersMapper.selectPage(page, queryWrapper));
        PageData<Users> pageData =   PageData.from(usersMapper.selectJoinPage(page,Users.class, queryWrapper));
        if(pageData!=null && pageData.getRecords()!=null && pageData.getRecords().size()>0){
                String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH ).getCode() +
                        systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE ).getCode();
                for(Users f : pageData.getRecords()){
                    if(StringUtils.isNotBlank(f.getImgurl())){
                        f.setImgurlFull(path + f.getImgurl());
                    }
                    if(StringUtils.isNotBlank(f.getQrcodeImg())){
                        f.setQrcodeImgFull(path + f.getQrcodeImg());
                    }
                }
        }
        return pageData;
    }
    @Override
server/service/src/main/resources/mappers/SystemDictDataMapper.xml
@@ -16,7 +16,7 @@
  </resultMap>
  <select id="selectManageList" parameterType="com.doumee.dao.system.dto.QuerySystemDictDataDTO" resultMap="SystemDictDataListVO">
    SELECT
      dict_data.`ID`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`, dict_data.`SORT`, dict_data.`DISABLED`, dict_data.`CREATE_TIME`, dict_data.`UPDATE_TIME`, dict_data.`CREATE_USER`, dict_data.`UPDATE_USER`,
      dict_data.*,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_DICT_DATA dict_data
@@ -31,7 +31,7 @@
  </select>
  <select id="list" resultType="com.doumee.dao.system.vo.SystemDictDataListVO">
    SELECT
      dict_data.`ID`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`
      dict_data.*
    FROM SYSTEM_DICT_DATA dict_data
    <where>
      dict_data.DELETED = 0
server/service/target/classes/com/doumee/biz/system/SystemDictDataBiz.class
Binary files differ
server/service/target/classes/com/doumee/biz/system/impl/SystemDictDataBizImpl.class
Binary files differ
server/service/target/classes/com/doumee/core/utils/Constants$RedisKeys.class
Binary files differ
server/service/target/classes/com/doumee/core/utils/Constants$Status.class
Binary files differ
server/service/target/classes/com/doumee/core/utils/Constants$VehiclePlateNoEnum.class
Binary files differ
server/service/target/classes/com/doumee/core/utils/Constants.class
Binary files differ
server/service/target/classes/com/doumee/core/utils/QrCodeUtils.class
Binary files differ
server/service/target/classes/com/doumee/core/utils/tyyun/TyyZosUtil.class
Binary files differ
server/service/target/classes/com/doumee/dao/business/model/IamInterfaceLog.class
Binary files differ
server/service/target/classes/com/doumee/dao/business/model/Multifile.class
Binary files differ
server/service/target/classes/com/doumee/dao/business/model/News.class
Binary files differ
server/service/target/classes/com/doumee/dao/business/model/Shop.class
Binary files differ
server/service/target/classes/com/doumee/dao/business/model/Users.class
Binary files differ
server/service/target/classes/com/doumee/service/business/InitService.class
Binary files differ
server/service/target/classes/com/doumee/service/business/impl/IamInterfaceLogServiceImpl.class
Binary files differ
server/service/target/classes/com/doumee/service/business/impl/NewsServiceImpl.class
Binary files differ
server/service/target/classes/com/doumee/service/business/impl/ShopServiceImpl.class
Binary files differ
server/service/target/classes/com/doumee/service/business/impl/UsersServiceImpl.class
Binary files differ
server/service/target/classes/com/doumee/service/zbom/ZbomIAMService.class
Binary files differ
server/service/target/classes/com/doumee/service/zbom/ZbomZhongTaiService.class
Binary files differ
server/service/target/classes/mappers/SystemDictDataMapper.xml
@@ -16,7 +16,7 @@
  </resultMap>
  <select id="selectManageList" parameterType="com.doumee.dao.system.dto.QuerySystemDictDataDTO" resultMap="SystemDictDataListVO">
    SELECT
      dict_data.`ID`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`, dict_data.`SORT`, dict_data.`DISABLED`, dict_data.`CREATE_TIME`, dict_data.`UPDATE_TIME`, dict_data.`CREATE_USER`, dict_data.`UPDATE_USER`,
      dict_data.*,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_DICT_DATA dict_data
@@ -31,7 +31,7 @@
  </select>
  <select id="list" resultType="com.doumee.dao.system.vo.SystemDictDataListVO">
    SELECT
      dict_data.`ID`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`
      dict_data.*
    FROM SYSTEM_DICT_DATA dict_data
    <where>
      dict_data.DELETED = 0