liukangdong
2024-05-31 bc2cda03481cd62a1b04959d2653678053e60b18
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
已添加11个文件
已修改38个文件
已重命名1个文件
867 ■■■■ 文件已修改
admin/src/api/other/other.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_grey.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarUseBookWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerWindow.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/Menu.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/tagsview.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/menu/OperaMenuWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/store/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/hk/copas.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/hk/dfeform.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/hk/frs.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/hk/hkservice.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/record.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/system/menu.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/BookingsCloudController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/RoomsApi.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/ProjectsMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingDetailResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/SystemUserMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/SystemMenu.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuListVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuNodeVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/vo/UserResponse.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/SystemUserService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/resources/mappers/SystemMenuMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ApplyCTGTRequest.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ApplySTequest.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/HKGetServiceLoginUrlRequest.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ApplyCTGTResponse.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ApplySTResponse.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/other/other.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function getServiceUrl (data) {
  return request.post('/visitsAdmin/cloudService//business/hksync/getServiceUrl', data, {
    trim: true
  })
}
admin/src/assets/icons/ic_grey.png

admin/src/components/business/OperaCarUseBookWindow.vue
@@ -12,7 +12,7 @@
            <div class="time">提交时间:{{model.createDate}}</div>
          </div>
          <span class="right"  v-if="model.status === 0">申请中</span>
          <span class="right"  v-if="model.status === 1">待审批</span>
          <span class="right"  v-if="model.status === 1">审批中</span>
          <span class="right" style="background:#53b76f " v-if="model.status === 2">审批通过</span>
          <span class="right" style="background:#dc362e " v-if="model.status === 3">审批不通过</span>
          <span class="right" style="background:#dc362e " v-if="model.status === 4">已取消</span>
@@ -67,41 +67,41 @@
          <div class="item" v-for="(item,index) in model.approveDateVO.approveList" :key="item.id">
            <div class="separate" v-if=" (index < model.approveDateVO.approveList.length-1)"></div>
            <div class="info">
              <img src="@/assets/icons/ic_tongguo.png"   class="iconnew" v-if="(item.status ==2)"/>
              <img src="@/assets/icons/ic_dangqian.png"   class="iconnew"  v-if="(item.status==1)"/>
              <img src="@/assets/icons/ic_jujue.png"  class="iconnew"  v-if="(item.status==3)"></i>
              <img src="@/assets/icons/ic_grep.png"  class="iconnew" v-if="(item.status==null || item.status==0 )"></i>
              <div style="display: inline" v-if="item.approveType ===0">
              <img src="@/assets/icons/ic_tongguo.png"   class="iconnew" v-if="(item.type !=1 &&item.status ==2)"/>
              <img src="@/assets/icons/ic_dangqian.png"   class="iconnew"  v-if="(item.type !=1 &&item.status==1)"/>
              <img src="@/assets/icons/ic_jujue.png"  class="iconnew"  v-if="(item.type !=1 &&item.status==3)"/>
              <img src="@/assets/icons/ic_grey.png"  class="iconnew" v-if="item.type ==1 || (item.status==null || item.status==0 )"/>
              <div style="display: inline" v-if="item.approveType !=1">
                <img v-if="item.faceImg!=null && item.faceImg !=''" :src="item.faceImg" class="avatar" alt="" />
                <img v-if="item.faceImg ==null ||item.faceImg ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" />
              </div>
              <div style="display: inline" v-if="item.approveType ===1">
                <img v-if="item.status === 1"  src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" />
              <div style="display: inline" v-if="item.approveType  ==1">
                <img v-if="item.status == 1"  src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" />
                <img  v-if="item.status != 1"  src="@/assets/icons/ic_duoren.png" class="avatar" alt="" />
              </div>
              <div class="content">
                <div class="line">
                  <div class="name">{{ item.title}}</div>
                  <div class="time">{{ item.createDate }}</div>
                  <div class="time">{{ item.checkDate }}</div>
                </div>
                <div class="line">
                  <div class="company">
                    {{ item.createUserName }} {{ item.companyName }}
                    {{ item.memberName }}
                    <div style="display: inline" v-if="item.statusInfo!=null && item.statusInfo!=''">
                       <span class="status-green">{{item.statusInfo||''}}</span>)
                       ï¼ˆ<span class="status-green">{{item.statusInfo ||''}}</span>)
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <div v-if="item.approveType != 1 " class="remark">
              {{ item.checkInfo ||'水电费反反复复反反复复方法方法方法方法方法方法方法方法方法方法方法方法发发发' }}
            <div v-if="item.approveType != 1 && item.checkInfo !=null && item.checkInfo !=''" class="remark">
              {{ item.checkInfo || '' }}
            </div>
            <div v-if="item.approveType == 1 "  class="childList">
              <div style="display: inline" v-for="item1 in item.approveList" :key="item1.id">
              <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id">
                <img v-if="item1.faceImg!=null && item1.faceImg !=''" :src="item1.faceImg" class="avatar" alt="" />
                <img v-if="item1.faceImg ==null ||item1.faceImg ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" />
                <span style="display: inline-block"> {{item1.memberName}}</span>
                <span > {{item1.memberName}}</span>
              </div>
            </div>
          </div>
@@ -117,6 +117,7 @@
    <el-dialog
        append-to-body
        title="同意申请"
        style="text-align: center"
        class="dialogCl"
        :visible.sync="isShowProblem"
        width="480px"
@@ -149,6 +150,7 @@
    <el-dialog
        append-to-body
        title="拒绝申请"
        style="text-align: center"
        class="dialogCl"
        :visible.sync="isBackProblem"
        width="600px"
@@ -438,8 +440,34 @@
          position: absolute;
          border-left: 2px dashed #cccccc;
          left: 31px;
          height: calc(100% - 24px);
          top: 34px;
          height: calc(100% - 36px);
          top: 49px;
        }
        .avatar {
          width: 40px;
          height: 40px;
          border-radius: 50%;
          margin: 0 12px 0 16px;
          //border: 1px solid;
        }
        .childList{
          display: flex;
          flex-wrap: wrap;
          margin-left: 100px;
        }
        .company {
          font-size: 13px;
          color: #888888;
          .status {
            color: #00ba67;
          }
        }
        .m_content{
          display: flex;
          flex-direction: column;
          align-items: center;
          justify-content: center;
          margin-bottom: 4px;
        }
        .info {
          display: flex;
@@ -473,13 +501,6 @@
            color:gray;
            font-size: 24px;
          }
          .avatar {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            margin: 0 12px 0 16px;
            border: 1px solid;
          }
          .content {
            flex: 1;
            .line {
@@ -495,13 +516,6 @@
              .time {
                color: #888888;
              }
              .company {
                font-size: 13px;
                color: #888888;
                .status {
                  color: #00ba67;
                }
              }
            }
          }
        }
@@ -510,11 +524,9 @@
          border-radius: 4px;
          padding: 13px 15px;
          color: #666666;
          margin-left: 120px;
          margin-left: 100px;
        }
        .childList {
          margin-left: 120px;
        }
      }
    }
  }
admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -116,9 +116,9 @@
          <div class="item" v-for="(item,index) in logList" :key="item.id">
            <div class="separate" v-if="index < logList.length-1"></div>
            <div class="info">
              <i class="el-icon-success icon" v-if="(model.status ==1) || index < logList.length-1"></i>
              <i class="el-icon-question icon1" v-if="(model.status==0)  && index == logList.length-1"></i>
              <i class="el-icon-error icon2" v-if="(model.status==2)  && index == logList.length-1"></i>
              <img src="@/assets/icons/ic_tongguo.png"   class="iconnew" v-if="(model.status ==1) || index < logList.length-1"/>
              <img src="@/assets/icons/ic_dangqian.png"   class="iconnew"   v-if="(model.status==0)  && index == logList.length-1"/>
              <img src="@/assets/icons/ic_jujue.png"  class="iconnew"   v-if="(model.status==2)  && index == logList.length-1"/>
              <img v-if="item.avatar!=null && item.avatar !=''" :src="item.avatar" class="avatar" alt="" />
              <img v-if="item.avatar ==null ||item.avatar ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" />
              <div class="content">
@@ -683,6 +683,11 @@
            color: #53b76f;
            font-size: 24px;
          }
          .iconnew{
            width: 24px;
            height: 24px;
          }
          .icon1 {
            position: relative;
            z-index: 11;
@@ -700,7 +705,7 @@
            height: 40px;
            border-radius: 50%;
            margin: 0 12px 0 16px;
            border: 1px solid;
            //border: 1px solid;
          }
          .content {
            flex: 1;
admin/src/components/common/Menu.vue
@@ -33,11 +33,11 @@
      if (path.endsWith('/')) {
        path = path.substring(0, path.length - 1)
      }
      const menuConfig = this.__getMenuConfig(path, 'url', this.menuData.list)
      const menuConfig = this.__getMenuConfig(path, 'index', this.menuData.list)
      if (menuConfig == null) {
        return null
      } else {
        this.$store.commit("pushtags", menuConfig)
        this.$store.commit('pushtags', menuConfig)
      }
      // console.log(menuConfig.index);
      return menuConfig.index
@@ -45,7 +45,7 @@
    // é»˜è®¤å±•开的菜单index
    defaultOpeneds () {
      // return this.menuData.list.map(menu => menu.index)
      return [this.menuData.list[0].index]
    }
  },
@@ -55,20 +55,24 @@
      const menuConfig = this.__getMenuConfig(menuIndex, 'index', this.menuData.list)
      // æ‰¾ä¸åˆ°é¡µé¢
      try {
        require('@/views' + menuConfig.url)
          require('@/views' + menuConfig.url)
      } catch (e) {
        this.$tip.error('未找到页面文件@/views' + menuConfig.url + '.vue,请检查菜单路径是否正确')
        return
      }
      // ç‚¹å‡»å½“前菜单不做处理
      if (menuConfig.url === this.$route.path) {
      if (menuConfig.url === this.$route.path && menuConfig.params === this.$route.query.param) {
        return
      }
      if (menuConfig.url == null || menuConfig.url.trim().length === 0) {
        return
      }
      this.$router.push(menuConfig.url)
      this.$store.commit("pushtags", menuConfig)
      if(menuConfig.params!=null && menuConfig.params!=''){
        this.$router.push({path:menuConfig.url,query:{index:menuConfig.index,param:menuConfig.params}})
      }else{
        this.$router.push(menuConfig.url)
      }
      this.$store.commit('pushtags', menuConfig)
    },
    // èŽ·å–èœå•é…ç½®
    __getMenuConfig (value, key, menus) {
admin/src/components/common/tagsview.vue
@@ -12,7 +12,7 @@
        :key="index"
        :id="'tags-box-' + index"
        @contextmenu.prevent="openMenu(item, $event)"
        :class="isActive(item.url, index) ? 'active' : ''"
        :class="isActive(item.url, item.params,index) ? 'active' : ''"
        class="tagsview"
        @click="tagsmenu(item, index)"
      >
@@ -68,7 +68,7 @@
    },
    $route(to, from) {
      this.tags.forEach((item, index) => {
        if (item.url === to.path) {
        if (item.url === to.path && item.index === to.query.index) {
          const tagsDiv = document.getElementById('tags-box')
          if (index) {
            tagsDiv.scrollTo(index * 110, 0)
@@ -129,11 +129,11 @@
          }
        } else {
          // é‚£ä¹ˆï¼Œå¦‚果上面的条件都不成立,没有length=0.也就是说你还有好几个标签,并且你删除的是最后一位标签,那么就往左边挪一位跳转路由
          this.$router.push({ path: this.tags[index - 1].url })
          this.$router.push({ path: this.tags[index - 1].url,query:{param: this.tags[index - 1].params} })
        }
      } else {
        // å¦‚果你点击不是最后一位标签,点的前面的,那就往右边跳转
        this.$router.push({ path: this.tags[index].url })
        this.$router.push({ path: this.tags[index].url ,query:{param: this.tags[index].params}})
      }
    },
    // ç‚¹å‡»è·³è½¬è·¯ç”±
@@ -142,7 +142,7 @@
      // åˆ¤æ–­ï¼šå½“前路由不等于当前选中项的url,也就代表你点击的不是现在选中的标签,是另一个标签就跳转过去,如果你点击的是现在已经选中的标签就不用跳转了,因为你已经在这个路由了还跳什么呢。
      if (this.$route.path !== item.url) {
        // ç”¨path的跳转方法把当前项的url当作地址跳转。
        this.$router.push({ path: item.url })
        this.$router.push({ path: item.url ,query:{param: this.tags[index].params}})
        const tagsDiv = document.getElementById('tags-box')
        if (index) {
          tagsDiv.scrollTo(index * 110, 0)
@@ -150,8 +150,8 @@
      }
    },
    // é€šè¿‡åˆ¤æ–­è·¯ç”±ä¸€è‡´è¿”回布尔值添加class,添加高亮效果
    isActive(route, index) {
      const res = route === this.$route.path
    isActive(route,params, index) {
      const res =(route === this.$route.path && params== this.$route.query.param)
      return res
    },
    scrollToStart() {
admin/src/components/system/menu/OperaMenuWindow.vue
@@ -17,6 +17,9 @@
      <el-form-item label="访问路径" prop="path">
        <el-input v-model="form.path" placeholder="请输入访问路径" v-trim maxlength="200"/>
      </el-form-item>
      <el-form-item label="携带参数" prop="params">
        <el-input v-model="form.params" placeholder="请输入携带参数" v-trim maxlength="200"/>
      </el-form-item>
      <el-form-item label="图标" prop="icon" class="form-item-icon">
        <el-radio-group v-model="form.icon">
          <el-radio :label="icon" v-for="icon in icons" :key="icon">
@@ -52,6 +55,7 @@
        id: null,
        parentId: null,
        name: '',
        params:'',
        path: '',
        icon: '',
        remark: ''
admin/src/store/index.js
@@ -54,7 +54,7 @@
  pushtags(state,val){
    //如果等于-1说明tabs不存在那么插入,否则什么都不做
    //findindex找角标,循环判断一下,如果等于那么就代表有相同的,就不必添加,如果找不到那就是-1.就添加
    let result = state.tags.findIndex(item => item.label === val.label)
    let result = state.tags.findIndex(item => item.index === val.index)
    if (result === -1) {
      state.tags.push({...val, keepAlive: false})
    } else {
@@ -65,7 +65,7 @@
  //关闭标签
  closeTab(state, val) {
    //同上,找角标,然后用角标的位置对应删除一位。splice:这是数组的删除方法
    let result = state.tags.findIndex(item => item.label === val.label)
    let result = state.tags.findIndex(item => item.index === val.index)
    state.tags.splice(result, 1)
  },
  //关闭所有tagsview标签
admin/src/views/hk/copas.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
<template>
  <div   style="text-align: center;background: white;width: 100%;height: 100%;">
    <div v-if="url!=null"  >
      <iframe :src="url" width="100%"  style="border:none"  height="600"></iframe>
    </div>
    <div  v-else >
      <div style="padding-top: 200px;font-size: 28px;color: #3C77DA">{{message}}</div>
    </div>
    <template v-if="1===2">
      <div style="bottom: 20px;position: fixed;text-align: center;width: 90%;height: 60px">
        {{url}}<br>
        <el-button type="primary" :loading="loading" @click="getUrl()">重新加载页面</el-button>
      </div>
    </template>
  </div>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
export default {
  name: 'otherLoginService',
  extends: BaseTable,
  data () {
    return {
      url: null,
      loading: false,
      message: '正在努力登录组件服务...'
    }
  },
  created () {
    this.config({
      module: '设备管otherLoginService理信息表',
      api: '/other/other',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.getUrl()
  },
  methods: {
    getUrl () {
      this.loading = true
      this.api.getServiceUrl({ label: 'HK_SERVICE_COPAS_URL' })
        .then(res => {
          this.message = '正在做努力加载组件!'
          this.url = res
        })
        .catch(e => {
          this.message = '登录组件服务失败,请联系系统管理员检查!'
        })
        .finally(() => {
          this.loading = false
        })
    }
  }
}
</script>
<style>
</style>
admin/src/views/hk/dfeform.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
<template>
  <div   style="text-align: center;background: white;width: 100%;height: 100%;">
    <div v-if="url!=null"  >
      <iframe :src="url" width="100%" style="border:none" height="600"></iframe>
    </div>
    <div  v-else >
      <div style="padding-top: 200px;font-size: 28px;color: #3C77DA">{{message}}</div>
    </div>
    <template v-if="1==2">
      <div style="bottom: 20px;position: fixed;text-align: center;width: 90%;height: 60px">
        {{url}}<br>
        <el-button type="primary" :loading="loading" @click="getUrl()">重新加载页面</el-button>
      </div>
    </template>
  </div>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
export default {
  name: 'otherLoginService',
  extends: BaseTable,
  data () {
    return {
      url: null,
      loading: false,
      message: '正在努力登录组件服务...'
    }
  },
  created () {
    this.config({
      module: '设备管otherLoginService理信息表',
      api: '/other/other',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.getUrl()
  },
  methods: {
    getUrl () {
      this.loading = true
      this.api.getServiceUrl({ label: 'HK_SERVICE_DFEFORM_URL' })
        .then(res => {
          this.message = '正在做努力加载组件!'
        this.url = res
        })
        .catch(e => {
          this.message = '登录组件服务失败,请联系系统管理员检查!'
        })
        .finally(() => {
          this.loading = false
        })
    }
  }
}
</script>
<style>
</style>
admin/src/views/hk/frs.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
<template>
  <div   style="text-align: center;background: white;width: 100%;height: 100%;">
    <div v-if="url!=null"  >
      <iframe :src="url" width="100%" style="border:none"  height="600"></iframe>
    </div>
    <div  v-else >
      <div style="padding-top: 200px;font-size: 28px;color: #3C77DA">{{message}}</div>
    </div>
    <template v-if="1==2">
      <div style="bottom: 20px;position: fixed;text-align: center;width: 90%;height: 60px">
        {{url}}<br>
        <el-button type="primary" :loading="loading" @click="getUrl()">重新加载页面</el-button>
      </div>
    </template>
  </div>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
export default {
  name: 'otherLoginService',
  extends: BaseTable,
  data () {
    return {
      url: null,
      loading: false,
      message: '正在努力登录组件服务...'
    }
  },
  created () {
    this.config({
      module: '设备管otherLoginService理信息表',
      api: '/other/other',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.getUrl()
  },
  methods: {
    getUrl () {
      this.loading = true
      this.api.getServiceUrl({ label: 'HK_SERVICE_FRS_URL' })
        .then(res => {
          this.message = '正在做努力加载组件!'
          this.url = res
        })
        .catch(e => {
          this.message = '登录组件服务失败,请联系系统管理员检查!'
        })
        .finally(() => {
          this.loading = false
        })
    }
  }
}
</script>
<style>
</style>
admin/src/views/hk/hkservice.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <div   style="text-align: center;background: white;width: 100%;height: 100%;">
    <div v-if="url!=null"  >
      <iframe :src="url" width="100%"  style="border:none"  height="600"></iframe>
    </div>
    <div  v-else >
      <div style="padding-top: 200px;font-size: 28px;color: #3C77DA">{{message}}</div>
    </div>
    <template v-if="1===2">
      <div style="bottom: 20px;position: fixed;text-align: center;width: 90%;height: 60px">
        {{url}}<br>
        <el-button type="primary" :loading="loading" @click="getUrl()">重新加载页面</el-button>
      </div>
    </template>
  </div>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
export default {
  name: 'otherLoginService',
  extends: BaseTable,
  data () {
    return {
      url: null,
      loading: false,
      paramUrl:'',
      message: '正在努力登录组件服务...'
    }
  },
  created () {
    this.config({
      module: '设备管otherLoginService理信息表',
      api: '/other/other',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.paramUrl = this.$route.query.param
    this.getUrl()
  },
  methods: {
    getUrl () {
      this.loading = true
      this.api.getServiceUrl({ label: this.paramUrl})
        .then(res => {
          this.message = '正在做努力加载组件!'
          this.url = res
        })
        .catch(e => {
          this.message = '登录组件服务失败,请联系系统管理员检查!'
        })
        .finally(() => {
          this.loading = false
        })
    }
  }
}
</script>
<style>
</style>
admin/src/views/operation/danger/record.vue
@@ -32,7 +32,7 @@
        <el-select v-model="searchForm.status"  @change="search" clearable placeholder="状态">
          <el-option label="待处理" value="0"></el-option>
          <el-option label="已处理" value="1"></el-option>
          <el-option label="已退出" value="2"></el-option>
          <el-option label="已退回" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="提报时间" prop="startTime">
admin/src/views/system/menu.vue
@@ -27,6 +27,7 @@
          </template>
        </el-table-column>
        <el-table-column prop="path" label="访问路径" min-width="140px"></el-table-column>
        <el-table-column prop="params" label="参数" min-width="120px"></el-table-column>
        <el-table-column prop="remark" label="备注" min-width="120px"></el-table-column>
        <el-table-column prop="createUser" label="创建人" min-width="100px">
          <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template>
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/BookingsCloudController.java
@@ -115,6 +115,12 @@
        return ApiResponse.success(bookingsService.getMeetingDetail(id));
    }
    @ApiOperation("根据日期和会议室主键查询占用信息")
    @PostMapping("/getMeetingDetailByDate")
    @CloudRequiredPermission("business:bookings:query")
    public ApiResponse<MeetingDetailResponse> getMeetingDetailByDate(@RequestBody Bookings bookings,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(bookingsService.getMeetingDetailByDate(bookings));
    }
    @ApiOperation("取消")
    @PostMapping("/cancelById")
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java
@@ -2,17 +2,17 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.doumee.api.BaseController;
import com.doumee.config.Jwt.JwtTokenUtil;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.QrCodeUtils;
import com.doumee.dao.business.model.Bookings;
import com.doumee.dao.system.vo.UserResponse;
import com.doumee.dao.web.request.BookingsRequest;
import com.doumee.dao.web.request.MeetingPageRequest;
import com.doumee.dao.web.request.UserPageRequest;
import com.doumee.dao.web.response.MeetingDetailResponse;
import com.doumee.dao.web.response.MeetingListResponse;
import com.doumee.dao.web.response.MonthDataResponse;
@@ -26,7 +26,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -50,6 +49,7 @@
    @Autowired
    private SystemUserService systemUserService;
    @ApiOperation(value = "当月会议表", notes = "当月会议表")
@@ -120,18 +120,16 @@
        QrCodeUtils.encode(content,null, response.getOutputStream(), true);
    }*/
/*
    @LoginRequired
    @ApiOperation("参会人员分页")
    @PostMapping("/userPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<IPage<UserResponse>> userPage(@RequestBody PageWrap<UserPageRequest> pageWrap) {
        IPage<UserResponse> page = systemUserService.getUserPage(pageWrap);
        IPage<UserResponse> page = bookingsService.getUserPage(pageWrap);
        return ApiResponse.success("查询成功", page);
    }
*/
    @ApiOperation("会议预约")
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/RoomsApi.java
@@ -87,7 +87,7 @@
    @PostMapping("/myRoomsPage")
    public ApiResponse<IPage<RoomsResponse>> myRoomsPage(@RequestBody PageWrap<RoomsRequest> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        LoginUserInfo user = getLoginUser(token);
        pageWrap.getModel().setUserId(user.getId());
        pageWrap.getModel().setUserId(user.getMemberId());
        IPage<RoomsResponse> page = roomsService.getRoomsPage(pageWrap);
        return ApiResponse.success("查询成功",page);
    }
server/meeting/meeting_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -65,7 +65,7 @@
                .apiInfo(this.getApiInfo()).groupName("default")
                .host(host)
                .select()
                .apis( basePackage("com.doumee.api.cloud"))
                .apis( basePackage("com.doumee.cloud;com.doumee.api.common"))
                // è®¾ç½®éœ€è¦è¢«æ‰«æçš„类,这里设置为添加了@Api注解的类
//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.any())
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/ProjectsMapper.java
@@ -5,7 +5,6 @@
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.doumee.dao.business.model.Projects;
import com.doumee.dao.web.response.ProjectsResponse;
import com.doumee.dao.web.response.UserResponse;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java
@@ -1,6 +1,7 @@
package com.doumee.dao.web.response;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.UserResponse;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingDetailResponse.java
@@ -3,6 +3,7 @@
import com.doumee.dao.business.model.BookingTime;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.UserResponse;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -38,8 +39,7 @@
    private String meetingTime;
    @ApiModelProperty(value = "参会人员")
//    private List<UserResponse> userResponseList;
    private List<SystemUser> userResponseList;
    private List<UserResponse> userResponseList;
    @ApiModelProperty(value = "会议内容")
    private String meetingContent;
server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java
@@ -8,9 +8,11 @@
import com.doumee.dao.business.model.Bookings;
import com.doumee.dao.business.vo.RoomStatisticsVo;
import com.doumee.dao.system.dto.UserStatisticsDTO;
import com.doumee.dao.system.vo.UserResponse;
import com.doumee.dao.system.vo.UserStatisticsVo;
import com.doumee.dao.web.request.BookingsRequest;
import com.doumee.dao.web.request.MeetingPageRequest;
import com.doumee.dao.web.request.UserPageRequest;
import com.doumee.dao.web.response.DateTimeResourceDate;
import com.doumee.dao.web.response.MeetingDetailResponse;
import com.doumee.dao.web.response.MeetingListResponse;
@@ -142,6 +144,12 @@
    MeetingDetailResponse getMeetingDetail(Integer id);
    /**
     * æ ¹æ®æ—¥æœŸå’Œä¼šè®®å®¤ä¸»é”®æŸ¥è¯¢å ç”¨ä¿¡æ¯
     * @param bean
     * @return
     */
    MeetingDetailResponse getMeetingDetailByDate(Bookings bean);
    /**
     * èŽ·å–ä¼šè®®äºŒç»´ç 
     * @param id
     * @param userId
@@ -197,4 +205,6 @@
    PageData<UserStatisticsVo> getUserStatistics(PageWrap<UserStatisticsDTO> pageWrap);
    void sendBookingsNotice();
    IPage<UserResponse> getUserPage(PageWrap<UserPageRequest> pageWrap);
}
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -27,9 +27,11 @@
import com.doumee.dao.system.dto.UserStatisticsDTO;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.*;
import com.doumee.dao.system.vo.UserResponse;
import com.doumee.dao.system.vo.UserStatisticsVo;
import com.doumee.dao.web.request.BookingsRequest;
import com.doumee.dao.web.request.MeetingPageRequest;
import com.doumee.dao.web.request.UserPageRequest;
import com.doumee.dao.web.response.*;
import com.doumee.service.business.BookingsService;
import com.doumee.service.business.DevicesService;
@@ -46,6 +48,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.awt.print.Book;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -71,6 +74,7 @@
    private SystemUserMapper systemUserMapper;
    @Autowired
    private RoomRecordMapper roomRecordMapper;
    @Autowired
    private BookingsJoinMapper bookingsJoinMapper;
@@ -794,6 +798,34 @@
        return page;
    }
    @Override
    public MeetingDetailResponse getMeetingDetailByDate(Bookings bean){
        try {
            if(Objects.isNull(bean)
            || Objects.isNull(bean.getRoomId())
                    || Objects.isNull(bean.getStartTime())
                    || Objects.isNull(bean.getEndTime())){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
            Bookings bookings = bookingsMapper.selectOne(new QueryWrapper<Bookings>().lambda()
                    .eq(Bookings::getRoomId,bean.getRoomId())
                    .ge(Bookings::getEndTime,DateUtil.getPlusTime(bean.getEndTime()))
                    .le(Bookings::getStartTime,DateUtil.getPlusTime(bean.getStartTime()))
            );
            if(Objects.isNull(bookings)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            return getMeetingDetail(bookings.getId());
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    /**
     * ä¼šè®®è¯¦æƒ…
     *
@@ -815,9 +847,10 @@
        ));
        //参会人员列表
        SystemUser param = new SystemUser();
        List<SystemUser> userResponseList = systemUserService.findList(param);
        String avatarPath = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.MEMBER_IMG).getCode();
        List<UserResponse> userResponseList = systemUserService.getUserList(id);
        String avatarPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
        userResponseList.forEach(i -> {
            if(StringUtils.isNotBlank(i.getAvatar())){
                i.setAvatar(avatarPath+i.getAvatar());
@@ -825,7 +858,8 @@
        });
        meetingDetailResponse.setUserResponseList(userResponseList);
        //服务项
        String projectsPath = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
        String projectsPath = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
        List<ProjectsResponse> projectsResponseList = projectsService.getProjectsList(id, MeetConstants.ONE);
        projectsResponseList.forEach(i -> {
            i.setPrefixUrl(projectsPath);
@@ -1090,5 +1124,40 @@
        return PageData.from(userStatistics);
    }
    /**
     * æŸ¥è¯¢å‚会人员分页
     * @param pageWrap
     * @return
     */
    @Override
    public IPage<UserResponse> getUserPage(PageWrap<UserPageRequest> pageWrap) {
        IPage<UserResponse> page = systemUserMapper.getUserPage(pageWrap.toPage(),new QueryWrapper<UserResponse>()
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyword()), i -> i.like("c.realName", pageWrap.getModel().getKeyword())
                        .or().like("e.name", pageWrap.getModel().getKeyword())
                )
                .eq("c.DELETED",0)
                .eq("c.status",0)
                .orderByAsc("c.id")
        );
        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
        //查询是否处于会议中
        page.getRecords().forEach(j->{
            j.setPrefixUrl(path);
            if(bookingsMapper.selectCount(new QueryWrapper<Bookings>()
                    .exists(" select 1 from meeting_user_rel u where u.OBJ_ID = bookings.id and  u.USER_ID = '"+j.getId()+"' and u.OBJ_TYPE = 1    ")
                    .and(i -> i.between("START_TIME", pageWrap.getModel().getStartTime()+":00",pageWrap.getModel().getEndTime()+":00")
                            .or().between("END_TIME", pageWrap.getModel().getStartTime()+":00",pageWrap.getModel().getEndTime()+":00")
                    )
            )>Constants.ZERO){
                j.setStatus(Constants.ONE);
            }else{
                j.setStatus(Constants.ZERO);
            }
        });
        return page;
    }
}
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java
@@ -3,13 +3,11 @@
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.core.wx.MeetConstants;
import com.doumee.dao.business.ProjectsMapper;
import com.doumee.dao.business.model.Projects;
import com.doumee.dao.web.response.ProjectsResponse;
import com.doumee.dao.web.response.UserResponse;
import com.doumee.service.business.ProjectsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -76,7 +76,8 @@
    public Boolean isTokenExpired(String token) {
        try {
            LoginUserInfo claims = getClaimsFromToken(token);
            Date expiration = claims.getLoginDate();
            Date expiration = //claims.getLoginDate();
            new Date(claims.getLoginDate().getTime() + jwtProperties.getExpiration());
            return expiration.before(new Date());
        } catch (Exception e) {
            //验证JWT签名失败等同于令牌过期
server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
@@ -46,6 +46,7 @@
    @CloudRequiredPermission("system:dict:update")
    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemDictData systemDictData,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        systemDictData.setLoginUserInfo(this.getLoginUser(token));
        systemDictData.setCreateUser(systemDictData.getLoginUserInfo().getId());
        return ApiResponse.success(systemDictDataBiz.create(systemDictData));
    }
@@ -75,6 +76,7 @@
    @CloudRequiredPermission("system:dict:update")
    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemDictData systemDictData,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        systemDictData.setLoginUserInfo(this.getLoginUser(token));
        systemDictData.setUpdateUser(systemDictData.getLoginUserInfo().getId());
        systemDictDataBiz.updateById(systemDictData);
        return ApiResponse.success(null);
    }
@@ -84,15 +86,6 @@
    @CloudRequiredPermission("system:dict:update")
    public ApiResponse<PageData<SystemDictDataListVO>> findPage (@RequestBody PageWrap<QuerySystemDictDataDTO> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(systemDictDataService.findPage(pageWrap));
    }
    @ApiOperation("查询咖豆任务规则")
    @PostMapping("/findAllList")
    @CloudRequiredPermission("system:dict:update")
    public ApiResponse findAllList (@RequestBody PageWrap<QuerySystemDictDataDTO> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        List<SystemDictData> list= systemDictDataBiz.queryListByCode(Constants.COFFEE_BEAN_TASK,null);
        return ApiResponse.success(list);
    }
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java
@@ -126,6 +126,7 @@
                nodeVO.setIndex("menu_" + menu.getId());
                nodeVO.setLabel(menu.getName());
                nodeVO.setUrl(menu.getPath());
                nodeVO.setParams(menu.getParams());
                nodeVO.setIcon(menu.getIcon());
                nodeVO.setChildren(new ArrayList<>());
                rootNodes.add(nodeVO);
@@ -210,6 +211,7 @@
                child.setId(menu.getId());
                child.setLabel(menu.getName());
                child.setUrl(menu.getPath());
                child.setParams(menu.getParams());
                child.setIcon(menu.getIcon());
                child.setIndex("menu_" + menu.getId());
                child.setChildren(new ArrayList<>());
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -25,6 +25,7 @@
public class Constants {
    public static final String HEADER_USER_TOKEN = "dm_user_token";
    public static final String REDIS_TOKEN_KEY = "token_";
    public static final String REDIS_HK_TOKEN_KEY = "hk_token_";
    public static final String[]  ALL_SPELL_LIST_FIRST = new String[]{"A", "B", "C", "D", "E", "F", "G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    public static final int ZERO = 0 ;
    public static final int ONE = 1 ;
@@ -102,7 +103,7 @@
    public static final String HIDDEN_DANGER_FILE = "HIDDEN_DANGER_FILE";
    public static final String LOG_DEL_DAYS_LIMIT ="LOG_DEL_DAYS_LIMIT" ;
    public static final String HK_LOG_DEL_DAYS_LIMIT ="HK_LOG_DEL_DAYS_LIMIT" ;
    public static final String HK_NGINX_URL = "HK_NGINX_URL";
    public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
    public static  boolean DEALING_HK_SYNCDEVICE = false;
    public static  boolean DEALING_HK_SYNCDEVICE_STATUS = false;
server/system_service/src/main/java/com/doumee/dao/system/SystemUserMapper.java
@@ -7,6 +7,7 @@
import com.doumee.dao.system.dto.QuerySystemUserDTO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.SystemUserListVO;
import com.doumee.dao.system.vo.UserResponse;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@@ -26,4 +27,28 @@
    void insertBatchSomeColumn(List<SystemUser> userList);
    @Select(" select c.id , c.type , c.REALNAME as realName , c.userName as userName , c.avatar ," +
            " c.wechat_name as wechatName , c.mobile , c.sex , c.birthday  , c.avatar   ,  d.COMPANY_NAME_PATH as departmentName  " +
            " from system_user c   " +
            " INNER JOIN company d on c.COMPANY_ID = d.id  " +
            " ${ew.customSqlSegment} ")
    IPage<UserResponse> getUserPage(IPage<UserResponse> page, @Param(Constants.WRAPPER) Wrapper wrapper);
    @Select(" select c.id , c.type , c.REALNAME as realName , c.userName as userName , c.avatar ," +
            " c.wechat_name as wechatName , c.mobile , c.sex , c.birthday  , c.avatar   ,  d.COMPANY_NAME_PATH as departmentName  " +
            " from system_user c   " +
            " INNER JOIN company d on c.COMPANY_ID = d.id  " +
            " ${ew.customSqlSegment} ")
    List<UserResponse> getUserList(@Param(Constants.WRAPPER) Wrapper wrapper);
    @Select(" select c.id , c.type , c.REALNAME as realName , c.userName as userName , c.avatar ," +
            " c.wechat_name as wechatName , c.mobile , c.sex , c.birthday  , c.avatar   ,  d.COMPANY_NAME_PATH as departmentName  " +
            " from system_user c   " +
            " INNER JOIN company d on c.COMPANY_ID = d.id  " +
            "  where c.id = #{id} ")
    UserResponse getUserInfo(@Param("id") Integer id);
}
server/system_service/src/main/java/com/doumee/dao/system/model/SystemMenu.java
@@ -70,5 +70,7 @@
    @ApiModelProperty(value = "是否已删除", hidden = true)
    private Boolean deleted;
    @ApiModelProperty(value = "参数" )
    private String params;
}
server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuListVO.java
@@ -27,4 +27,6 @@
    @ApiModelProperty(value = "更新人信息")
    private SystemUser updateUserInfo;
    @ApiModelProperty(value = "参数" )
    private String params;
}
server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuNodeVO.java
@@ -32,4 +32,6 @@
    @ApiModelProperty(value = "子菜单")
    private List<SystemMenuNodeVO> children;
    @ApiModelProperty(value = "参数" )
    private String params;
}
server/system_service/src/main/java/com/doumee/dao/system/vo/UserResponse.java
ÎļþÃû´Ó server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/UserResponse.java ÐÞ¸Ä
@@ -1,12 +1,8 @@
package com.doumee.dao.web.response;
package com.doumee.dao.system.vo;
import com.doumee.core.utils.Date;
import com.doumee.dao.system.model.SystemUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * Created by IntelliJ IDEA.
server/system_service/src/main/java/com/doumee/service/system/SystemUserService.java
@@ -5,6 +5,7 @@
import com.doumee.dao.system.dto.QuerySystemUserDTO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.SystemUserListVO;
import com.doumee.dao.system.vo.UserResponse;
import java.util.List;
@@ -70,7 +71,8 @@
     * @date 2023/03/21 14:49
     */
    List<SystemUser> findList(SystemUser systemUser);
    List<UserResponse> getUserList(Integer bookingsId);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @author Eva.Caesar Liu
server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -14,6 +14,7 @@
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.SystemDepartmentListVO;
import com.doumee.dao.system.vo.SystemUserListVO;
import com.doumee.dao.system.vo.UserResponse;
import com.doumee.service.aware.DepartmentDataPermissionAware;
import com.doumee.service.system.SystemDepartmentService;
import com.doumee.service.system.SystemPositionService;
@@ -120,6 +121,13 @@
        Wrapper<SystemUser> wrapper = new QueryWrapper<>(systemUser);
        return systemUserMapper.selectList(wrapper);
    }
    @Override
    public List<UserResponse> getUserList(Integer bookingsId) {
        return systemUserMapper.getUserList(new QueryWrapper<UserResponse>()
                .exists(" select 1 from meeting_user_rel u where u.USER_ID = c.id and u.ISDELETED = 0  and u.OBJ_ID = "+bookingsId+" and u.OBJ_TYPE = 1  ")
        );
    }
  
    @Override
    public PageData<SystemUserListVO> findPage(PageWrap<QuerySystemUserDTO> pageWrap) {
@@ -209,8 +217,6 @@
                .or().like(SystemUser::getRealname,pageWrap.getUsername())
        );
        queryWrapper.orderByDesc(SystemUser::getCreateTime);
        List<SystemUser> result = systemUserJoinMapper.selectJoinList( SystemUser.class, queryWrapper);
server/system_service/src/main/resources/mappers/SystemMenuMapper.xml
@@ -16,7 +16,7 @@
  </resultMap>
  <select id="selectManageList" resultMap="SystemMenuListVO">
    SELECT
      menu.`ID`, menu.`PARENT_ID`, menu.`NAME`, menu.`PATH`, menu.`FIXED`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`,
      menu.`ID`, menu.`PARENT_ID`,menu.params, menu.`NAME`, menu.`PATH`, menu.`FIXED`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`,
      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_MENU menu
@@ -31,7 +31,7 @@
  <!-- æŸ¥è¯¢èœå•æ ‘ -->
  <select id="selectByUserId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemMenu">
    SELECT
      DISTINCT menu.`ID`, menu.`PARENT_ID`, menu.`NAME`, menu.`PATH`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`
      DISTINCT menu.`ID`, menu.`PARENT_ID`,menu.params, menu.`NAME`, menu.`PATH`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`
    FROM `SYSTEM_MENU` menu
    INNER JOIN SYSTEM_ROLE_MENU role_menu ON role_menu.MENU_ID = menu.ID AND role_menu.DELETED = 0
    INNER JOIN SYSTEM_USER_ROLE user_role ON user_role.ROLE_ID = role_menu.ROLE_ID AND user_role.DELETED = 0
@@ -46,7 +46,7 @@
  <!-- æ ¹æ®è§’色ID查询菜单列表 -->
  <select id="selectByRoleId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemMenu">
    SELECT
      menu.`ID`, menu.`PARENT_ID`, menu.`NAME`, menu.`PATH`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`
      menu.`ID`, menu.`PARENT_ID`, menu.`NAME`,menu.params, menu.`PATH`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`
    FROM `SYSTEM_MENU` menu
    INNER JOIN `SYSTEM_ROLE_MENU` role_menu ON role_menu.MENU_ID = menu.ID AND role_menu.DELETED = 0
    <where>
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -3,19 +3,13 @@
import com.doumee.api.BaseController;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
import com.doumee.core.haikang.model.param.request.EventSubRequest;
import com.doumee.core.haikang.model.param.request.ParkListRequest;
import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncPrivilegeServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
import com.doumee.service.business.impl.hksync.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -40,6 +34,8 @@
    private HkSyncPrivilegeServiceImpl hkSyncPrivilegeService;
    @Autowired
    private HkSyncPushServiceImpl hkSyncPushService;
    @Autowired
    private HkSyncLoginAuthServiceImpl hkSyncLoginAuthService;
    @PreventRepeat
    @ApiOperation("【海康】全量同步门禁设备接口")
@@ -50,6 +46,14 @@
        return ApiResponse.success(result);
    }
    @PreventRepeat
    @ApiOperation("【海康】获取组件授权登录地址接口")
    @PostMapping("/getServiceUrl")
    public ApiResponse getServiceUrl(@RequestBody HKGetServiceLoginUrlRequest param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        param.setUsername(this.getLoginUser(token).getUsername());
        String result = hkSyncLoginAuthService.getServiceUrl(param);
        return ApiResponse.success(result);
    }
    @PreventRepeat
    @ApiOperation("【海康】全量同步停车库接口")
    @PostMapping("/syncParks")
    @CloudRequiredPermission("business:hksync:park")
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -88,6 +88,9 @@
        String facePictureCheck= "/api/frs/v1/face/picture/check";//人脸评分
        String acsDeviceStatus= "/api/nms/v1/online/acs_device/get";//获取门禁设备在线状态
        String tempCarInRecords= "/api/pms/v1/tempCarInRecords/page";//查询场内车停车信息
        String applyCTGT= "/api/lsm/ssoService/v1/applyCTGT";//根据用户标识获取客户端TGC接口
        String applyST= "/api/lsm/ssoService/v1/applyST";//根据登录标识TGC申请登录凭证ST接口
        String tokenLoginUrl= "/lsm/ssoService/v1/tokenLogin?token=${st}&service=${service}";//组件授权登录拼接地址
    }
    /**
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -593,4 +593,21 @@
        return startDoPostStringArtemis(HKConstants.InterfacePath.tempCarInRecords,body);
    }
    /**
     * æ ¹æ®ç”¨æˆ·æ ‡è¯†èŽ·å–å®¢æˆ·ç«¯TGC接口
     * @param body
     * @return
     */
    public static String applyCTGT(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.applyCTGT,body);
    }
    /**
     * æ ¹æ®ç™»å½•标识TGC申请登录凭证ST接口
     * @param body
     * @return
     */
    public static String applyST(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.applyST,body);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ApplyCTGTRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class ApplyCTGTRequest {
    private String loginType;//    string    False    ç™»å½•类型
    private String userCode;//    string    False登录用户名
    private String language;//    string    False    è¯­è¨€æ ‡è¯†
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ApplySTequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class ApplySTequest {
    private String ctgt;//    string    ctgt凭证
    private String service;//    string    æœåŠ¡åœ°å€
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/HKGetServiceLoginUrlRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class HKGetServiceLoginUrlRequest {
   private String   label; //获取地址字典label
   private String username; //获取地址字典label
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ApplyCTGTResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class ApplyCTGTResponse {
private String   CTGT    ;//string    False
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ApplySTResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class ApplySTResponse {
private String   ST    ;//string    ST凭证
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -1035,6 +1035,42 @@
        }
        return  null;
    }
    /**
     *根据用户标识获取客户端TGC接口
     * @return
     */
    public  static  BaseResponse<ApplyCTGTResponse>   applyCTGT(ApplyCTGTRequest param){
        log.info("【海康根据用户标识获取客户端TGC接口】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.applyCTGT(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse<ApplyCTGTResponse>>(){};
            BaseResponse<ApplyCTGTResponse>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康根据用户标识获取客户端TGC接口");
            return  result;
        }catch (Exception e){
            log.error("【海康根据用户标识获取客户端TGC接口息】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *根据登录标识TGC申请登录凭证ST接口
     * @return
     */
    public  static  BaseResponse<ApplySTResponse>   applyST(ApplySTequest param){
        log.info("【海康根据登录标识TGC申请登录凭证ST接口】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.applyST(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse<ApplySTResponse>>(){};
            BaseResponse<ApplySTResponse>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康根据登录标识TGC申请登录凭证ST接口口");
            return  result;
        }catch (Exception e){
            log.error("【海康根据登录标识TGC申请登录凭证ST接口息】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    private static void logResult(BaseResponse res,String name) {
        if(StringUtils.equals(res.getCode(),HKConstants.RESPONSE_SUCCEE)){
            log.info("【"+name+"】================成功====\n"+res);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -1,9 +1,6 @@
package com.doumee.service.business.ext;
import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
import com.doumee.core.haikang.model.param.request.DoorsListRequest;
import com.doumee.core.haikang.model.param.request.ParkListRequest;
import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
@@ -83,4 +80,5 @@
    void syncMemberFailData();
    void syncMemberDelData();
    String getServiceUrl(HKGetServiceLoginUrlRequest param);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -550,6 +550,7 @@
                        .leftJoin(Member.class,Member::getId,Approve::getChekorId)
                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                        .eq(Approve::getIsdeleted,Constants.ZERO)
                        .ne(Approve::getStatus,Constants.approveStatus.cancel)
                        .eq(Approve::getObjId,businessId)
                        .eq(Approve::getObjType,businessType)
                        .orderByAsc(Approve::getLevel)
@@ -573,8 +574,8 @@
        if (CollectionUtils.isNotEmpty(copyList)) {
            Approve waitModel = new Approve();
            waitModel.setApproveType(Constants.ONE);
            waitModel.setStatusInfo("抄送");
            waitModel.setStatus(Constants.ONE);
            waitModel.setTitle("抄送人");
            waitModel.setStatus(copyList.get(Constants.ZERO).getStatus());
            waitModel.setType(Constants.ONE);
            waitModel.setApproveList(copyList);
            approveDateVO.getApproveList().add(waitModel);
@@ -594,6 +595,7 @@
    private List<Approve> getLevelInfoFromList(Approve level,List<Approve> approveGroupList) {
        List<Approve> list = new ArrayList<>();
        if(Constants.equalsInteger(level.getApproveType(),Constants.TWO)){
            level.setApproveType(Constants.ZERO);
            //如果是单人审批
            list.add(level);
            return list;
@@ -603,36 +605,56 @@
        Approve  refuseModel = new Approve();//已拒绝的记录
        List<Approve> waitList = new ArrayList<>();  //查询全部未处理的集合
        List<Approve> otherPassList = new ArrayList<>();//他人已处理的记录集
        List<Approve> levelApprove = approveGroupList.stream().filter(i->Constants.equalsInteger(i.getLevel(),level.getLevel())).collect(Collectors.toList());
        dealGroupListBiz(level,levelApprove,approveGroupList,passList,refuseModel,waitList,otherPassList);
        int appType = Constants.formatIntegerNum(level.getApproveType());//当前审批类型
        dealGroupListBiz(level,approveGroupList,passList,refuseModel,waitList,otherPassList);
        if(Objects.nonNull(refuseModel) && Objects.nonNull(refuseModel.getId())){
            //存在拒绝的,只需要返回一条处理数据,后续不需要回显
            refuseModel.setApproveType(Constants.ZERO);
            list.add(refuseModel);
            return list;
        }
        list.addAll(sortByCreateTime(passList));
        if(Constants.equalsInteger(level.getApproveType(),Constants.ONE)){
        if(Constants.equalsInteger(appType,Constants.ONE)){
            //如果是会签
            if(waitList.size()>0){
            if(waitList.size()>1){
                Approve waitModel = new Approve();
                waitModel.setApproveType(Constants.ONE);
                waitModel.setStatusInfo(StringUtils.defaultString(level.getTitle(),"审批人")+"处理中");
                waitModel.setType(Constants.ZERO);
                waitModel.setTitle(StringUtils.defaultString(level.getTitle(),"审批人"));
                waitModel.setStatus(Constants.equalsInteger(waitList.get(Constants.ZERO).getStatus(),Constants.ONE)?Constants.ONE:Constants.ZERO);
                waitModel.setStatusInfo("处理中");
                if(Constants.equalsInteger(level.getStatus(),Constants.approveStatus.auditIng)
                        ||Constants.equalsInteger(level.getStatus(),Constants.approveStatus.pass)){
                    waitModel.setMemberName(waitList.size() +"人会签");
                }
                waitModel.setApproveList(waitList);
                list.add(waitModel);
            }else if(waitList.size()>0){
                Approve approve = waitList.get(Constants.ZERO);
                approve.setApproveType(Constants.ZERO);
                approve.setType(Constants.ZERO);
                list.add(approve);
            }
        }else {
            if((waitList.size()> 0 || otherPassList.size()>0)){
                Approve waitModel = new Approve();
                waitModel.setApproveType(Constants.ONE);
                waitModel.setStatusInfo(passList.size()<=0?StringUtils.defaultString(level.getTitle(),"审批人"):"抄送或签审批人");
                waitModel.setStatus(passList.size()>0?Constants.ONE:Constants.ZERO);
                if(Constants.equalsInteger(level.getStatus(),Constants.approveStatus.pass)){
                    waitModel.setStatus(Constants.approveStatus.pass);
                    waitModel.setType(Constants.ONE);
                    waitModel.setTitle("审批人(抄送或签审批人)");
                }else{
                    waitModel.setType(Constants.ZERO);
                    waitModel.setStatusInfo(passList.size()<=0?StringUtils.defaultString(level.getTitle(),"审批人"):"抄送或签审批人");
                    waitModel.setStatus(passList.size()>0?Constants.ONE:Constants.ZERO);
                }
                List<Approve> approveList = new ArrayList<>();
                approveList.addAll(waitList);
                //如果是或签
                if(passList.size()>0){
                    approveList.addAll(otherPassList);
                }
                waitModel.setMemberName("已抄送"+ approveList.size() +"人");
                waitModel.setApproveList(approveList);
                list.add(waitModel);
            }
@@ -652,10 +674,15 @@
    }
    private void dealGroupListBiz(Approve level, List<Approve> levelApprove,List<Approve> approveGroupList, List<Approve> passList, Approve refuseModel, List<Approve> waitList, List<Approve> otherPassList) {
    private void dealGroupListBiz(Approve level, List<Approve> approveGroupList,  List<Approve> passList, Approve refuseModel, List<Approve> waitList, List<Approve> otherPassList) {
        //查询是否存在拒绝数据
        List<Approve> levelApprove = approveGroupList.stream().filter(i->Constants.equalsInteger(i.getLevel(),level.getLevel())).collect(Collectors.toList());
        for (Approve approve:levelApprove) {
            if(!Constants.equalsInteger(level.getLevel(),approve.getLevel())){
                continue;
            }
            if(Constants.equalsInteger(Constants.approveStatus.pass,approve.getStatus())){
                approve.setApproveType(Constants.ZERO);
                passList.add(approve);
            }else if(Constants.equalsInteger(Constants.approveStatus.otherDeal,approve.getStatus())){
                otherPassList.add(approve);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1098,11 +1098,11 @@
        }
        queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
        List<Member> list =  memberJoinMapper.selectJoinList(Member.class,queryWrapper);
        if(list!=null){
            for(Member m : list){
                m.setName(StringUtils.defaultString(m.getName(),"")+"-"+StringUtils.defaultString(m.getCompanyName(),""));
            }
        }
//        if(list!=null){
//            for(Member m : list){
//                m.setName(StringUtils.defaultString(m.getName(),"")+"-"+StringUtils.defaultString(m.getCompanyName(),""));
//            }
//        }
        return  list;
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -42,6 +42,11 @@
    }
    @Override
//    @Async
    public   String getServiceUrl(HKGetServiceLoginUrlRequest param){
        return null;
    }
    @Override
//    @Async
    public  void syncParkRecords(Date date){
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
package com.doumee.service.business.impl.hksync;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseListPageResponse;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.respose.*;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.DeviceMapper;
import com.doumee.dao.business.model.Device;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * è®¾å¤‡ä¿¡æ¯è¡¨Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Service
public class HkSyncLoginAuthServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    /**
     * åŒæ­¥æµ·åº·é—¨ç¦è®¾å¤‡æ•°æ®
     * @param param
     * @return
     */
    @Override
    public   String getServiceUrl(HKGetServiceLoginUrlRequest param){
        if(StringUtils.isBlank(param.getLabel())||StringUtils.isBlank(param.getUsername())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,登录组件失败,请稍后重试!");
        }
        //优先从缓存取数据,如果有缓存,直接返回缓存地址
        /*String cacheUrl = (String) redisTemplate.opsForValue().get(Constants.REDIS_HK_TOKEN_KEY+param.getUsername()+param.getLabel());
        if(StringUtils.isNotBlank(cacheUrl)){
            return cacheUrl;
        }*/
        String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,param.getLabel()).getCode();
        if(StringUtils.isBlank(url)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        ApplyCTGTRequest ctgtParam = new ApplyCTGTRequest();
        ctgtParam.setLanguage("zh_CN");
        ctgtParam.setUserCode(param.getUsername());
        ctgtParam.setLoginType("2");
        BaseResponse<ApplyCTGTResponse> response = HKService.applyCTGT(ctgtParam);
        if(response !=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) &&response.getData()!=null &&StringUtils.isNotBlank(response.getData().getCTGT())){
            //处理新增成功的数据,修改海康同步状态
            String ctgt = response.getData().getCTGT();
            ApplySTequest stParam = new ApplySTequest();
            stParam.setCtgt(ctgt);
            stParam.setService(url);
            BaseResponse<ApplySTResponse> result = HKService.applyST(stParam);
            if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)
                    &&result.getData()!=null &&StringUtils.isNotBlank(result.getData().getST())){
                //处理新增成功的数据,修改海康同步状态
                String st = result.getData().getST();
                try {
                    String serviceUrl =   systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_NGINX_URL).getCode()
                            +(HKConstants.InterfacePath.tokenLoginUrl.replace("${st}", st).replace("${service}", URLEncoder.encode(url, "UTF-8")));
//                    redisTemplate.opsForValue().set(Constants.REDIS_HK_TOKEN_KEY+param.getUsername()+param.getLabel(),serviceUrl,1, TimeUnit.HOURS);
                    return serviceUrl;
                }catch (Exception e){
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,登录组件失败,请稍后重试!");
                }
            }else{
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,登录组件失败,请稍后重试!");
            }
        }else{
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,登录组件失败,请稍后重试!");
        }
    }
}