eb82684152ffb0acddf67da92e4533a0190eb258..39fc2d6754953e41a7334a2166347baacfcfb40a
14 小时以前 MrShi
对接口
39fc2d 对比 | 目录
14 小时以前 rk
钥匙柜开发
d53979 对比 | 目录
已添加8个文件
已修改14个文件
923 ■■■■■ 文件已修改
admin/src/api/business/jkCabinet.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/jkCabinetGrid.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/jkKeys.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaJkCabinetWindow.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/alcoholTest.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/cabinetDetails.vue 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/jkCabinet.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkKeysCloudController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/CloseGridDTO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/GetDriverGridDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OptGridDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/AdminCabinetVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetDetailVO.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetGridInfoVO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/jkCabinet.js
@@ -35,9 +35,19 @@
  return request.post('/visitsAdmin/cloudService/business/jkCabinet/updateStatusById', data)
}
// æ›´æ–°é…’精检测配置
export function updateCabinetConfig (data) {
  return request.post('/visitsAdmin/cloudService/business/jkCabinet/updateCabinetConfig', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/business/jkCabinet/delete/${id}`)
  return request.get(`/visitsAdmin/cloudService/business/jkCabinet/delete/${id}`)
}
// èŽ·å–é…’ç²¾æ£€æµ‹é…ç½®
export function getCabinetConfig () {
  return request.get(`/visitsAdmin/cloudService/business/jkCabinet/getCabinetConfig`)
}
// æ‰¹é‡åˆ é™¤
admin/src/api/business/jkCabinetGrid.js
@@ -30,6 +30,11 @@
  return request.post('/visitsAdmin/cloudService/business/jkCabinetGrid/updateStatusById', data)
}
// è§£ç»‘钥匙
export function unBindKeys (data) {
  return request.post('/visitsAdmin/cloudService/business/jkCabinetGrid/unBindKeys', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/business/jkCabinetGrid/delete/${id}`)
admin/src/api/business/jkKeys.js
@@ -20,6 +20,11 @@
  return request.post('/visitsAdmin/cloudService/business/jkKeys/create', data)
}
// åˆ—表查询
export function list (data) {
  return request.post('/visitsAdmin/cloudService/business/jkKeys/list', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/visitsAdmin/cloudService/business/jkKeys/updateById', data)
admin/src/components/business/OperaJkCabinetWindow.vue
@@ -85,11 +85,11 @@
      <h3 style="margin: 20px 0;">柜组信息</h3>
      <el-form-item label="排列" prop="rowNum">
        <div style="width: 100%; display: flex; align-items: center;">
          <el-input v-model="form.rowNum" type="number" placeholder="请输入排数" v-trim>
          <el-input v-model="form.rowNum" :disabled="form.id" type="number" placeholder="请输入排数" v-trim>
            <template slot="append">排</template>
          </el-input>
          <span style="margin: 0 20px;">x</span>
          <el-input v-model="form.columnNum" type="number" placeholder="请输入列数" v-trim>
          <el-input v-model="form.columnNum" :disabled="form.id" type="number" placeholder="请输入列数" v-trim>
            <template slot="append">列</template>
          </el-input>
        </div>
@@ -110,7 +110,7 @@
        </div>
      </el-form-item>
      <el-form-item label="排列顺序" prop="sortType" v-if="form.noType === 1">
        <el-radio-group v-model="form.sortType">
        <el-radio-group v-model="form.sortType" :disabled="form.id">
          <el-radio :label="0">从左往右</el-radio>
          <el-radio :label="1">从上向下</el-radio>
        </el-radio-group>
admin/src/components/business/alcoholTest.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
<template>
    <GlobalWindow
        width="50%"
        :title="title"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form :model="form" ref="form" :rules="rules">
            <el-form-item label="吹气时长" prop="blowTime">
                <el-input v-model="form.blowTime" placeholder="请输入吹气时长(秒)" v-trim/>
            </el-form-item>
            <el-form-item label="压力值" prop="pressure">
                <el-input v-model="form.pressure" placeholder="请输入压力值" v-trim/>
            </el-form-item>
            <el-form-item label="酒精浓度阈值" prop="concentration">
                <div style="width: 100%; display: flex; align-items: center;">
                    <el-input v-model="form.concentration" placeholder="请输入酒精浓度预警值" style="flex: 1;" v-trim/>
                    <el-select v-model="form.threshold" placeholder="请选择" style="flex-shrink: 0; margin-left: 15px;">
                        <el-option label="mg/100ml" value="1"></el-option>
                        <el-option label="mg/L" value="2"></el-option>
                        <el-option label="%BAC" value="3"></el-option>
                    </el-select>
                </div>
            </el-form-item>
        </el-form>
    </GlobalWindow>
</template>
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import { updateCabinetConfig } from '@/api/business/jkCabinet'
  export default {
    name: 'alcoholTest',
    extends: BaseOpera,
    components: { GlobalWindow },
    data () {
      return {
        // è¡¨å•数据
        form: {
          id: null,
          blowTime: '',
          pressure: '',
          concentration: '',
          threshold: ''
        },
        // éªŒè¯è§„则
        rules: {
          blowTime: [
            { required: true, message: '请输入吹气时长', trigger: 'blur' }
          ],
          pressure: [
            { required: true, message: '请输入压力值', trigger: 'blur' }
          ],
          concentration: [
            { required: true, message: '请选择酒精浓度预警值', trigger: 'blur' }
          ],
        }
      }
    },
    created () {
      this.config({
        api: '/business/jkCabinet',
        'field.id': 'id'
      })
    },
    methods: {
      open (title, target) {
        this.title = title
        this.form.threshold = ''
        this.visible = true
        // æ–°å»º
        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]
          }
        })
      },
      // ç¡®è®¤æ–°å»º
      __confirmCreate () {
        this.$refs.form.validate((valid) => {
          if (!valid) {
            return
          }
          // è°ƒç”¨æ–°å»ºæŽ¥å£
          this.isWorking = true
          updateCabinetConfig(this.form)
            .then(() => {
              this.visible = false
              this.$tip.apiSuccess('操作成功')
              this.$emit('success')
            })
            .catch(e => {
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
            })
        })
      },
    }
  }
</script>
admin/src/components/business/cabinetDetails.vue
@@ -6,8 +6,8 @@
        :withFooter="false"
    >
        <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
            <el-form-item label="钥匙" prop="keyId">
                <el-input v-model="searchForm.keyId" placeholder="请输入钥匙编码或名称" @keypress.enter.native="getList"></el-input>
            <el-form-item label="钥匙" prop="keyCode">
                <el-input v-model="searchForm.keyCode" placeholder="请输入钥匙编码或名称" @keypress.enter.native="getList"></el-input>
            </el-form-item>
            <el-form-item label="状态" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择" @change="getList">
@@ -31,7 +31,7 @@
            </el-form-item>
        </el-form>
        <ul class="toolbar">
            <li><el-button type="primary">批量解绑</el-button></li>
            <li><el-button type="primary" @click="bathUnBindKeys">批量解绑</el-button></li>
        </ul>
        <el-table
            v-loading="loading"
@@ -42,24 +42,25 @@
            <el-table-column prop="cabinetName" label="所属钥匙柜" min-width="100px"></el-table-column>
            <el-table-column prop="keyId" label="绑定钥匙" min-width="100px">
                <template slot-scope="{row}">
                    <el-select v-model="row.keyId" placeholder="请选择">
                    <el-select v-model="row.keyId" placeholder="请选择" @change="blurFunc($event, row, 1)">
                        <el-option
                            v-for="item in keysAll"
                            :key="item.id"
                            :label="item.name"
                            :value="item.id">
                            :label="item.code"
                            :value="item.id"
                            :disabled="item.isBinding === 1">
                        </el-option>
                    </el-select>
                </template>
            </el-table-column>
            <el-table-column label="板号" min-width="100px">
                <template slot-scope="{row}">
                    <el-input v-model="row.boardCode" placeholder="请输入板号"></el-input>
                    <el-input v-model="row.boardCode" @blur="blurFunc($event, row, 2)" placeholder="请输入板号"></el-input>
                </template>
            </el-table-column>
            <el-table-column label="通道号" min-width="100px">
                <template slot-scope="{row}">
                    <el-input v-model="row.channelCode" placeholder="请输入通道号"></el-input>
                    <el-input v-model="row.channelCode" @blur="blurFunc($event, row, 3)" placeholder="请输入通道号"></el-input>
                </template>
            </el-table-column>
            <el-table-column label="状态" min-width="100px">
@@ -93,7 +94,8 @@
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import { fetchList, updateStatusById } from '@/api/business/jkCabinetGrid'
  import { fetchList, updateStatusById, unBindKeys, updateById } from '@/api/business/jkCabinetGrid'
  import { list } from '@/api/business/jkKeys'
  export default {
    name: 'cabinetDetails',
    extends: BaseOpera,
@@ -103,7 +105,7 @@
        id: null,
        info: null,
        searchForm: {
          keyId: '',
          keyCode: '',
          status: '',
          bindStatus: ''
        },
@@ -117,8 +119,48 @@
        this.title = title
        this.id = id
        this.getList()
        this.getKeysAll()
        this.visible = true
      },
      getKeysAll() {
        list({  })
            .then(res => {
              this.keysAll = res
            })
      },
      blurFunc(e, row, type) {
        let obj = {
          id: row.id
        }
        if (type === 1) {
          obj.keyId = row.keyId
        } else if (type === 2) {
          obj.boardCode = row.boardCode
        } else if (type === 3) {
          obj.channelCode = row.channelCode
        }
        updateById(obj)
            .then(res => {
              this.getList()
              if (type === 1) {
                this.getKeysAll()
              }
            })
      },
      bathUnBindKeys() {
        this.$confirm('确认批量解绑吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          unBindKeys(this.list.map(item => item.id))
            .then(res => {
              this.getList()
            })
        }).catch(() => {
        });
      },
      changeStatus(status, id) {
        updateStatusById({ id, status })
          .then(res => {
admin/src/views/business/jkCabinet.vue
@@ -31,7 +31,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:jkcabinet:create', 'business:jkcabinet:delete']">
        <li><el-button type="primary" @click="$refs.operaJkCabinetWindow.open('新建设备')" icon="el-icon-plus" v-permissions="['business:jkcabinet:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkcabinet:delete']">删除</el-button></li>
        <li><el-button type="warning" @click="$refs.alcoholTest.open('新建酒精检测配置', form)">酒精检测配置</el-button></li>
      </ul>
      <el-table
        :height="tableHeightNew"
@@ -52,8 +52,8 @@
        </el-table-column>
        <el-table-column label="运行状态" min-width="100px">
          <template slot-scope="{row}">
            <el-link type="success" v-if="row.runStatus === 0">在线</el-link>
            <el-link type="danger" v-if="row.runStatus === 1">离线</el-link>
            <el-link type="success" :underline="false" v-if="row.runStatus === 0">在线</el-link>
            <el-link type="danger" :underline="false" v-if="row.runStatus === 1">离线</el-link>
          </template>
        </el-table-column>
        <el-table-column label="状态" min-width="100px">
@@ -75,8 +75,7 @@
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text">日志</el-button>
            <el-button type="text">绑定钥匙</el-button>
            <el-button type="text" @click="$refs.cabinetDetails.open(row.name + '-柜格信息', row.id)">绑定钥匙</el-button>
            <el-button type="text" @click="$refs.operaJkCabinetWindow.open('编辑钥匙柜基本信息表', row)" v-permissions="['business:jkcabinet:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" v-permissions="['business:jkcabinet:delete']">删除</el-button>
          </template>
@@ -93,6 +92,8 @@
    <OperaJkCabinetWindow ref="operaJkCabinetWindow" @success="handlePageChange"/>
    <!-- æŸœå­è¯¦æƒ… -->
    <CabinetDetails ref="cabinetDetails" />
    <!-- æ–°å¢žé…’精检测 -->
    <AlcoholTest ref="alcoholTest" @success="GetCabinetConfig" />
  </TableLayout>
</template>
@@ -102,11 +103,12 @@
import Pagination from '@/components/common/Pagination'
import OperaJkCabinetWindow from '@/components/business/OperaJkCabinetWindow'
import CabinetDetails from '@/components/business/cabinetDetails'
import { updateStatusById } from '@/api/business/jkCabinet'
import AlcoholTest from '@/components/business/alcoholTest'
import { updateStatusById, getCabinetConfig } from '@/api/business/jkCabinet'
export default {
  name: 'JkCabinet',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaJkCabinetWindow, CabinetDetails },
  components: { TableLayout, Pagination, OperaJkCabinetWindow, CabinetDetails, AlcoholTest},
  data () {
    return {
      // æœç´¢
@@ -115,7 +117,8 @@
        name: '',
        status: '',
        rumStatus: ''
      }
      },
      form: null
    }
  },
  created () {
@@ -126,6 +129,7 @@
      'field.main': 'id'
    })
    this.search()
    this.GetCabinetConfig()
  },
  methods: {
    changeStatus(status, id) {
@@ -133,6 +137,12 @@
        .then(res => {
          this.search()
        })
    },
    GetCabinetConfig() {
      getCabinetConfig()
        .then(res => {
          this.form = res
        })
    }
  }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkKeysCloudController.java
@@ -5,6 +5,7 @@
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.JkCabinet;
import com.doumee.dao.business.model.JkKeys;
import com.doumee.service.business.JkKeysService;
import com.doumee.service.business.third.model.ApiResponse;
@@ -77,6 +78,14 @@
        return ApiResponse.success(jkKeysService.findPage(pageWrap));
    }
    @ApiOperation("列表查询")
    @PostMapping("/list")
    @CloudRequiredPermission("business:jkkeys:query")
    public ApiResponse<List<JkKeys>> findList (@RequestBody JkKeys jkKeys, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(jkKeysService.findList(jkKeys));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:jkkeys:exportExcel")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/CloseGridDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.doumee.dao.business.dto;
import com.doumee.service.business.third.model.LoginUserModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/10/11 16:01
 */
@Data
public class CloseGridDTO{
    @ApiModelProperty(value = "钥匙柜主键")
    private Integer cabinetId;
    @ApiModelProperty(value = "验证方式 0刷脸 1刷卡 2管理员操作")
    private Integer authType;
    @ApiModelProperty(value = "柜格主键")
    private Integer gridId;
    @ApiModelProperty(value = "用户主键")
    private Integer memberId;
    @ApiModelProperty(value = "钥匙状态:1在位 2借出")
    private Integer keyStatus;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/GetDriverGridDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.dao.business.dto;
import com.doumee.service.business.third.model.LoginUserModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/10/11 16:01
 */
@Data
public class GetDriverGridDTO{
    @ApiModelProperty(value = "钥匙柜主键")
    private Integer cabinetId;
    @ApiModelProperty(value = "0=取 1=还")
    private Integer type;
    @ApiModelProperty(value = "用户主键")
    private Integer memberId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.doumee.dao.business.dto;
import com.doumee.service.business.third.model.LoginUserModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/10/11 16:01
 */
@Data
public class OpenGridDriverDTO extends LoginUserModel {
    @ApiModelProperty(value = "钥匙柜主键")
    private Integer cabinetId;
    @ApiModelProperty(value = "验证方式 0刷脸 1刷卡")
    private Integer authType;
    @ApiModelProperty(value = "柜格主键")
    private Integer gridId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OptGridDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.dao.business.dto;
import com.doumee.service.business.third.model.LoginUserModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/10/11 16:01
 */
@Data
public class OptGridDTO extends LoginUserModel {
    @ApiModelProperty(value = "钥匙柜主键")
    private Integer cabinetId;
    @ApiModelProperty(value = "柜格主键列表")
    private List<Integer> gridIdList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
@@ -86,8 +86,6 @@
    private String channelCode;
    @ApiModelProperty(value = "绑定状态 0未绑定;1已绑定", example = "1")
    @TableField(exist = false)
    private Integer bindStatus;
@@ -99,4 +97,17 @@
    @ApiModelProperty(value = "钥匙编码", example = "1")
    @TableField(exist = false)
    private String keyCode;
    @ApiModelProperty(value = "车牌号", example = "1")
    @TableField(exist = false)
    private String carCode;
    @ApiModelProperty(value = "车辆主键", example = "1")
    @TableField(exist = false)
    private Integer carId;
    @ApiModelProperty(value = "钥匙状态 0未绑定 1在位 2借出 3维修保养", example = "1")
    @TableField(exist = false)
    private Integer keyStatus;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
@@ -77,6 +77,9 @@
    @ExcelColumn(name="状态",index = 6,width = 10,valueMapping = "0=成功;1=失败;")
    private Integer status;
    @ApiModelProperty(value = "操作类型:0=开门;1=关门;", example = "1")
    private Integer type;
    @ApiModelProperty(value = "操作人部门", example = "1",hidden = true)
    @TableField(exist = false)
    private String companyName;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/AdminCabinetVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.doumee.dao.business.vo;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/23 14:56
 */
@Data
public class AdminCabinetVO {
    @ApiModelProperty(value = "设备主键(系统内)")
    private Integer id;
    @ApiModelProperty(value = "设备编号")
    private String code;
    @ApiModelProperty(value = "设备名称")
    private String name;
    @ApiModelProperty(value = "设备ID")
    private String devId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetDetailVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.doumee.dao.business.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/23 14:56
 */
@Data
public class CabinetDetailVO {
    @ApiModelProperty(value = "设备主键(系统内)")
    private Integer id;
    @ApiModelProperty(value = "设备编号")
    private String code;
    @ApiModelProperty(value = "设备名称")
    private String name;
    @ApiModelProperty(value = "设备ID")
    private String devId;
    @ApiModelProperty(value = "柜格总数")
    private Integer gridNum;
    @ApiModelProperty(value = "在位钥匙数")
    private Integer onlineKeyNum;
    @ApiModelProperty(value = "借出钥匙数")
    private Integer outKeyNum;
    @ApiModelProperty(value = "维修保养钥匙数")
    private Integer serviceKeyNum;
    @ApiModelProperty(value = "故障柜体数量")
    private Integer errGridNum;
    @ApiModelProperty(value = "未绑定柜体数量")
    private Integer unBindGridNum;
    @ApiModelProperty(value = "柜格信息")
    private List<CabinetGridInfoVO> cabinetGridInfoVOList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetGridInfoVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.doumee.dao.business.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/23 14:56
 */
@Data
public class CabinetGridInfoVO {
    @ApiModelProperty(value = "主键", example = "1")
    private Integer id;
    @ApiModelProperty(value = "编码")
    private String code;
    @ApiModelProperty(value = "钥匙编码(关联jk_keys)", example = "1")
    private Integer keyId;
    @ApiModelProperty(value = "柜体运行状态 0正常 1故障 ", example = "1")
    private Integer workingStatus;
    @ApiModelProperty(value = "绑定状态 0未绑定;1已绑定", example = "1")
    private Integer bindStatus;
    @ApiModelProperty(value = "钥匙状态 0未绑定 1在位 2借出 3维修保养", example = "1")
    private Integer keyStatus;
    @ApiModelProperty(value = "板号")
    private String boardCode;
    @ApiModelProperty(value = "通道号")
    private String channelCode;
    @ApiModelProperty(value = "车牌号", example = "1")
    private String carCode;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java
@@ -1,6 +1,11 @@
package com.doumee.service.business;
import com.doumee.dao.business.dto.OptGridDTO;
import com.doumee.dao.business.dto.CloseGridDTO;
import com.doumee.dao.business.dto.GetDriverGridDTO;
import com.doumee.dao.business.dto.OpenGridDriverDTO;
import com.doumee.dao.business.model.JkCabinetGrid;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -99,4 +104,39 @@
    void updateStatusById(JkCabinetGrid jkCabinetGrid);
    void unBindKeys(List<Integer> idList);
    /**
     * æ ‡è®°æŸœæ ¼æ•…éšœ
     * @param loginUserInfo
     * @param cabinetId
     * @param gridIdList
     */
    void markFault(OptGridDTO dto);
    /**
     * æ ‡è®°æŸœæ ¼æ­£å¸¸
     * @param loginUserInfo
     * @param cabinetId
     * @param gridIdList
     */
    void cancelFault(OptGridDTO dto);
    /**
     * æ‰¹é‡å¼€é—¨ - ç®¡ç†å‘˜
     */
    void batchOpenGridAdmin(OptGridDTO dto);
    /**
     * æ ‡è®°ç»´ä¿®ä¿å…» - ç®¡ç†å‘˜
     * @param loginUserInfo
     * @param cabinetId
     * @param gridIdList
     */
    void markRepair(OptGridDTO dto);
    void closeGrid(CloseGridDTO dto);
    List<JkCabinetGrid> getDriverGrid(GetDriverGridDTO getDriverGridDTO);
    void openGridDriver(OpenGridDriverDTO openGridDriverDTO);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetService.java
@@ -1,6 +1,9 @@
package com.doumee.service.business;
import com.doumee.dao.business.vo.AdminCabinetVO;
import com.doumee.dao.business.vo.CabinetConfigDataVO;
import com.doumee.dao.business.vo.CabinetDetailVO;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.dao.business.model.JkCabinet;
@@ -102,4 +105,19 @@
    CabinetConfigDataVO getCabinetConfigDataVO();
    void updCabinetConfig(CabinetConfigDataVO cabinetConfigDataVO);
    /**
     * é’¥åŒ™æŸœç®¡ç†å‘˜ èŽ·å–å¯ç®¡ç†çš„é’¥åŒ™æŸœåˆ—è¡¨
     * @param loginUserInfo
     * @return
     */
    List<AdminCabinetVO> getAdminCabinetInfo(LoginUserInfo loginUserInfo);
    /**
     * èŽ·å–é’¥åŒ™æŸœè¯¦æƒ…
     * @param cabinetId
     * @return
     */
    CabinetDetailVO getCabinetDetail(Integer cabinetId);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -1,26 +1,24 @@
package com.doumee.service.business.impl;
import com.alibaba.druid.sql.visitor.functions.Concat;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.JkKeysMapper;
import com.doumee.dao.business.model.Cars;
import com.doumee.dao.business.model.JkCabinet;
import com.doumee.dao.business.model.JkKeys;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.OptGridDTO;
import com.doumee.dao.business.dto.CloseGridDTO;
import com.doumee.dao.business.dto.GetDriverGridDTO;
import com.doumee.dao.business.dto.OpenGridDriverDTO;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.JkCabinetGridMapper;
import com.doumee.dao.business.model.JkCabinetGrid;
import com.doumee.service.business.JkCabinetGridService;
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.doumee.service.business.third.model.PageWrap;
import com.github.yulichang.toolkit.MPJWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,8 +26,7 @@
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -45,6 +42,13 @@
    @Autowired
    private JkKeysMapper jkKeysMapper;
    @Autowired
    private JkCabinetMapper jkCabinetMapper;
    @Autowired
    private JkCabinetLogMapper jkCabinetLogMapper;
    @Override
    public Integer create(JkCabinetGrid jkCabinetGrid) {
@@ -237,7 +241,267 @@
    }
    /**
     * æ ‡è®°æ•…éšœ
     */
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void markFault(OptGridDTO dto){
        if(Objects.isNull(dto)
                || Objects.isNull(dto.getCabinetId())
                || CollectionUtils.isEmpty(dto.getGridIdList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridMapper.selectList(new QueryWrapper<JkCabinetGrid>().lambda().eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                .in(JkCabinetGrid::getId,dto.getGridIdList())
        );
        if(CollectionUtils.isEmpty(jkCabinetGridList)){
            return;
        }
        LoginUserInfo loginUserInfo = dto.getLoginUserInfo();
        for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
            jkCabinetGrid.setEditor(loginUserInfo.getId());
            jkCabinetGrid.setEditDate(new Date());
            jkCabinetGrid.setWorkingStatus(Constants.ONE);
            jkCabinetGridMapper.updateById(jkCabinetGrid);
        }
    }
    /**
     * æ ‡è®°ç»´ä¿®ä¿å…»
     */
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void markRepair(OptGridDTO dto){
        if(Objects.isNull(dto)
                || Objects.isNull(dto.getCabinetId())
                || CollectionUtils.isEmpty(dto.getGridIdList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
                new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
                        .selectAs(JkKeys::getCode,JkCabinetGrid::getKeyCode)
                        .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                        .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .eq(JkKeys::getStatus,Constants.ONE)
                .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                .isNotNull(JkCabinetGrid::getKeyId)
                .in(JkCabinetGrid::getId,dto.getGridIdList())
        );
        if(CollectionUtils.isEmpty(jkCabinetGridList)){
            return;
        }
        for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
            jkKeysMapper.update(null,new UpdateWrapper<JkKeys>().lambda()
                    .set(JkKeys::getEditDate,DateUtil.getCurrDateTime())
                    .set(JkKeys::getStatus,Constants.TWO)
                    .eq(JkKeys::getId,jkCabinetGrid.getKeyId())
            );
        }
    }
    /**
     * å–消故障
     */
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void cancelFault(OptGridDTO dto){
        if(Objects.isNull(dto)
                || Objects.isNull(dto.getCabinetId())
                || CollectionUtils.isEmpty(dto.getGridIdList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridMapper.selectList(new QueryWrapper<JkCabinetGrid>().lambda().eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .eq(JkCabinetGrid::getWorkingStatus,Constants.ONE)
                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                .in(JkCabinetGrid::getId,dto.getGridIdList())
        );
        if(CollectionUtils.isEmpty(jkCabinetGridList)){
            return;
        }
        LoginUserInfo loginUserInfo = dto.getLoginUserInfo();
        for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
            jkCabinetGrid.setEditor(loginUserInfo.getId());
            jkCabinetGrid.setEditDate(new Date());
            jkCabinetGrid.setWorkingStatus(Constants.ZERO);
            jkCabinetGridMapper.updateById(jkCabinetGrid);
        }
    }
    /**
     * è®¾å¤‡ç®¡ç†å‘˜æ‰¹é‡å¼€é”
     */
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void batchOpenGridAdmin(OptGridDTO dto){
        if(Objects.isNull(dto)
        || Objects.isNull(dto.getCabinetId())
        || CollectionUtils.isEmpty(dto.getGridIdList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridMapper.selectList(new QueryWrapper<JkCabinetGrid>().lambda().eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                .in(JkCabinetGrid::getId,dto.getGridIdList())
        );
        if(CollectionUtils.isEmpty(jkCabinetGridList)){
            return;
        }
        LoginUserInfo loginUserInfo = dto.getLoginUserInfo();
        if(org.apache.commons.collections.CollectionUtils.isNotEmpty(jkCabinetGridList)){
            List<JkCabinetLog> jkCabinetLogs = new ArrayList<>();
            for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
                JkCabinetLog jkCabinetLog = new JkCabinetLog();
                jkCabinetLog.setCreateDate(new Date());
                jkCabinetLog.setCreator(loginUserInfo.getId());
                jkCabinetLog.setIsdeleted(Constants.ZERO);
                jkCabinetLog.setCabinetId(dto.getCabinetId());
                jkCabinetLog.setGridId(jkCabinetGrid.getId());
                jkCabinetLog.setAuthType(Constants.TWO);
                jkCabinetLog.setMemberId(loginUserInfo.getMemberId());
                if(Objects.nonNull(jkCabinetGrid.getKeyId())){
                    JkKeys jkKeys = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
                    if(Objects.nonNull(jkKeys)){
                        if(!Constants.equalsInteger(jkKeys.getStatus(),Constants.ZERO)){
                            jkCabinetLog.setCarId(jkKeys.getCarId());
                            jkCabinetLog.setKeyInfo(jkKeys.getCarCode() + "_" + jkKeys.getCode() );
                        }
                        jkCabinetLog.setRoleType(jkKeys.getRoleType());
                    }
                }
                jkCabinetLog.setType(Constants.ZERO);
                jkCabinetLogs.add(jkCabinetLog);
            }
            jkCabinetLogMapper.insert(jkCabinetLogs);
        }
    }
    /**
     * é’¥åŒ™æŸœå…³é—¨
     */
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void closeGrid(CloseGridDTO dto){
        if(Objects.isNull(dto)
            || Objects.isNull(dto.getGridId())
            || Objects.isNull(dto.getCabinetId())
            || Objects.isNull(dto.getKeyStatus())
            || Objects.isNull(dto.getAuthType())
            || Objects.isNull(dto.getMemberId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        JkCabinetGrid jkCabinetGrid = jkCabinetGridMapper.selectOne(new QueryWrapper<JkCabinetGrid>().lambda().eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                .eq(JkCabinetGrid::getId,dto.getGridId())
                .last(" limit 1 ")
        );
        if(Objects.isNull(jkCabinetGrid)){
            return;
        }
        JkCabinetLog jkCabinetLog = new JkCabinetLog();
        jkCabinetLog.setCreateDate(new Date());
        jkCabinetLog.setIsdeleted(Constants.ZERO);
        jkCabinetLog.setCabinetId(dto.getCabinetId());
        jkCabinetLog.setGridId(jkCabinetGrid.getId());
        jkCabinetLog.setAuthType(dto.getAuthType());
        jkCabinetLog.setMemberId(dto.getMemberId());
        if(Objects.nonNull(jkCabinetGrid.getKeyId())){
            //只有钥匙柜绑定了钥匙信息 æ‰ä¼šæ›´æ–°é’¥åŒ™çš„信息
            JkKeys jkKeys = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
            if(Objects.nonNull(jkKeys)){
                if(!Constants.equalsInteger(jkKeys.getStatus(),Constants.ZERO)){
                    jkCabinetLog.setCarId(jkKeys.getCarId());
                    jkCabinetLog.setKeyInfo(jkKeys.getCarCode() + "_" + jkKeys.getCode() );
                }
                jkCabinetLog.setRoleType(jkKeys.getRoleType());
                //钥匙状态与当前操作状态不一致,则进行更新钥匙状态
                if(!Constants.equalsInteger(jkKeys.getStatus(),dto.getKeyStatus())){
                    jkKeysMapper.update(null,new UpdateWrapper<JkKeys>().lambda()
                            .set(JkKeys::getEditDate,DateUtil.getCurrDateTime())
                            .set(JkKeys::getStatus,dto.getKeyStatus())
                            .eq(JkKeys::getId,jkKeys.getId())
                    );
                }
            }
        }
        jkCabinetLog.setType(Constants.ONE);
        jkCabinetLogMapper.insert(jkCabinetLog);
    }
    /**
     * å¸æœºèŽ·å–å¯æ“ä½œçš„é’¥åŒ™æŸœæŸœæ ¼
     */
    @Override
    public List<JkCabinetGrid> getDriverGrid(GetDriverGridDTO dto){
        if(Objects.isNull(dto.getCabinetId())
            || Objects.isNull(dto.getCabinetId())
            || Objects.isNull(dto.getMemberId())
            || Objects.isNull(dto.getType())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
                new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
                        .selectAs(JkKeys::getCode,JkCabinetGrid::getKeyCode)
                        .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                        .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                        .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                        .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                        .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
                        .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                        .in(Constants.equalsInteger(dto.getType(),Constants.ONE),JkKeys::getStatus,Constants.TWO,Constants.THREE)
                        .in(Constants.equalsInteger(dto.getType(),Constants.ZERO),JkKeys::getStatus,Constants.ONE)
                        .isNotNull(JkCabinetGrid::getKeyId)
                        .apply(" t1.car_id in ( select c.CAR_ID from car_driver c left join cars c1 on c.car_id = c1.id  where c.ISDELETED = 0 and c.TYPE != 0 and   c.MEMBER_ID = "+dto.getMemberId()+" ) ")
        );
        return jkCabinetGridList;
    }
    /**
     * å¸æœºå¼€å¯æŸœæ ¼
     * @param openGridDriverDTO
     */
    @Override
    public void openGridDriver(OpenGridDriverDTO openGridDriverDTO){
        JkCabinetGrid jkCabinetGrid = jkCabinetGridMapper.selectOne(new QueryWrapper<JkCabinetGrid>().lambda().eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .eq(JkCabinetGrid::getCabinetId,openGridDriverDTO.getCabinetId())
                .eq(JkCabinetGrid::getId,openGridDriverDTO.getGridId())
                .last(" limit 1 ")
        );
        if(Objects.isNull(jkCabinetGrid)){
            return;
        }
        LoginUserInfo loginUserInfo = openGridDriverDTO.getLoginUserInfo();
        List<JkCabinetLog> jkCabinetLogs = new ArrayList<>();
        JkCabinetLog jkCabinetLog = new JkCabinetLog();
        jkCabinetLog.setCreateDate(new Date());
        jkCabinetLog.setCreator(loginUserInfo.getId());
        jkCabinetLog.setIsdeleted(Constants.ZERO);
        jkCabinetLog.setCabinetId(openGridDriverDTO.getCabinetId());
        jkCabinetLog.setGridId(jkCabinetGrid.getId());
        jkCabinetLog.setAuthType(openGridDriverDTO.getAuthType());
        jkCabinetLog.setMemberId(loginUserInfo.getMemberId());
        jkCabinetLog.setType(Constants.ZERO);
        if(Objects.nonNull(jkCabinetGrid.getKeyId())){
            JkKeys jkKeys = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
            if(Objects.nonNull(jkKeys)){
                if(!Constants.equalsInteger(jkKeys.getStatus(),Constants.ZERO)){
                    jkCabinetLog.setCarId(jkKeys.getCarId());
                    jkCabinetLog.setKeyInfo(jkKeys.getCarCode() + "_" + jkKeys.getCode() );
                }
                jkCabinetLog.setRoleType(jkKeys.getRoleType());
            }
        }
        jkCabinetLogMapper.insert(jkCabinetLogs);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import cn.hutool.core.bean.BeanUtil;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -9,7 +10,10 @@
import com.doumee.dao.business.JkKeysMapper;
import com.doumee.dao.business.model.JkCabinetGrid;
import com.doumee.dao.business.model.JkKeys;
import com.doumee.dao.business.vo.AdminCabinetVO;
import com.doumee.dao.business.vo.CabinetConfigDataVO;
import com.doumee.dao.business.vo.CabinetDetailVO;
import com.doumee.dao.business.vo.CabinetGridInfoVO;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
@@ -22,11 +26,14 @@
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 lombok.extern.java.Log;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
@@ -340,8 +347,89 @@
            systemDictData.setCode(cabinetConfigDataVO.getThreshold());
            systemDictDataBiz.updateByIdNew(systemDictData);
        }
    }
    @Override
    public List<AdminCabinetVO> getAdminCabinetInfo(LoginUserInfo loginUserInfo){
        List<AdminCabinetVO> adminCabinetVOList = new ArrayList<>();
        List<JkCabinet> jkCabinetList = jkCabinetMapper.selectList(new QueryWrapper<JkCabinet>()
                .lambda()
                .eq(JkCabinet::getIsdeleted,Constants.ZERO)
                .apply(" FIND_IN_SET("+loginUserInfo.getId()+",MANAGER_ID) ")
                .orderByAsc(JkCabinet::getCreateDate)
        );
        if(CollectionUtils.isNotEmpty(jkCabinetList)){
            for (JkCabinet jkCabinet:jkCabinetList) {
                AdminCabinetVO adminCabinetVO = new AdminCabinetVO();
                BeanUtil.copyProperties(jkCabinet,adminCabinetVO);
                adminCabinetVOList.add(adminCabinetVO);
            }
        }
        return adminCabinetVOList;
    }
    @Override
    public CabinetDetailVO getCabinetDetail(Integer cabinetId){
        CabinetDetailVO cabinetDetailVO = new CabinetDetailVO();
        JkCabinet cabinet = jkCabinetMapper.selectOne(new QueryWrapper<JkCabinet>()
                .lambda()
                .eq(JkCabinet::getIsdeleted,Constants.ZERO)
                .eq(JkCabinet::getId,cabinetId)
                .last(" limit 1")
        );
        if(Objects.isNull(cabinet)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,未查询到钥匙柜信息");
        }
        BeanUtil.copyProperties(cabinet,cabinetDetailVO);
        cabinetDetailVO.setGridNum(Constants.ZERO);
        cabinetDetailVO.setErrGridNum(Constants.ZERO);
        cabinetDetailVO.setOnlineKeyNum(Constants.ZERO);
        cabinetDetailVO.setServiceKeyNum(Constants.ZERO);
        cabinetDetailVO.setOutKeyNum(Constants.ZERO);
        cabinetDetailVO.setUnBindGridNum(Constants.ZERO);
        //所有柜格信息
        List<JkCabinetGrid> jkCabinetGridList =
                jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class, new MPJLambdaWrapper<JkCabinetGrid>()
                .selectAll(JkCabinetGrid.class)
                .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
                .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .eq(JkCabinetGrid::getCabinetId,cabinet.getId())
                .orderByDesc(JkCabinetGrid::getCode)
        );
        List<CabinetGridInfoVO> cabinetGridInfoVOList = new ArrayList<>();
        if(CollectionUtils.isNotEmpty(jkCabinetGridList)){
            cabinetDetailVO.setGridNum(jkCabinetGridList.size());
            for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
                CabinetGridInfoVO cabinetGridInfoVO = new CabinetGridInfoVO();
                BeanUtil.copyProperties(jkCabinetGrid,cabinetGridInfoVO);
                cabinetGridInfoVO.setBindStatus(Objects.isNull(jkCabinetGrid.getKeyId())?Constants.ZERO:Constants.ONE);
                cabinetGridInfoVOList.add(cabinetGridInfoVO);
            }
            cabinetDetailVO.setErrGridNum(
                    cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getWorkingStatus(),Constants.ONE)).collect(Collectors.toList()).size()
            );
            cabinetDetailVO.setOnlineKeyNum(
                    cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getKeyStatus(),Constants.ONE)).collect(Collectors.toList()).size()
            );
            cabinetDetailVO.setOutKeyNum(
                    cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getKeyStatus(),Constants.TWO)).collect(Collectors.toList()).size()
            );
            cabinetDetailVO.setServiceKeyNum(
                    cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getKeyStatus(),Constants.THREE)).collect(Collectors.toList()).size()
            );
            cabinetDetailVO.setUnBindGridNum(
                    cabinetGridInfoVOList.stream().filter(i->Constants.equalsInteger(i.getBindStatus(),Constants.ZERO)).collect(Collectors.toList()).size()
            );
        }
        return cabinetDetailVO;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java
@@ -164,6 +164,8 @@
    @Override
    public List<JkKeys> findList(JkKeys jkKeys) {
        jkKeys.setIsdeleted(Constants.ZERO);
        jkKeys.setStatus(Constants.ZERO);
        QueryWrapper<JkKeys> wrapper = new QueryWrapper<>(jkKeys);
        return jkKeysMapper.selectList(wrapper);
    }