rk
6 小时以前 7666113e060747cce6be99e0deb68485b4283161
钥匙柜 电信大屏  配置文件
已添加8个文件
已修改35个文件
1167 ■■■■ 文件已修改
server/meeting/meeting_admin/src/main/resources/bootstrap-test.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/application-test.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/dto/LoginCabinetDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/application-test.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/bootstrap-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/resources/bootstrap-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/openapi/TelecomApiController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/cabinet/CabinetController.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/GetDriverGridDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/TelecomCabinetLogDTO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetFaceInfoVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetFaceVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetInfoVO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/TelecomJkCabinetLogVO.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetLogService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkVersionService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkVersionServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/resources/application-test.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_admin/src/main/resources/bootstrap-test.yml
@@ -15,7 +15,7 @@
      password: nacos
      config:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
        namespace: dmvisit_test
        namespace: wuhu_visit_test
        username: nacos
        password: nacos
#        file-extension: yaml
@@ -23,7 +23,7 @@
#        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
        namespace: dmvisit_test
        namespace: wuhu_visit_test
        username: nacos
        password: nacos
      # å®‰å…¨é…ç½®
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -6,6 +6,7 @@
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.system.dto.LoginCabinetDTO;
import com.doumee.dao.system.dto.LoginH5DTO;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.LoginUserInfo;
@@ -285,4 +286,23 @@
        return ApiResponse.failed( "登录已失效");
    }
    @PreventRepeat(limit = 10, lockTime = 10000)
    @ApiOperation("登录 - é’¥åŒ™æŸœ")
    @PostMapping("/loginCabinet")
    @LoginNoRequired
    public ApiResponse<String> loginCabinet (@Validated @RequestBody LoginCabinetDTO dto, ServerWebExchange serverWebExchange) {
        try {
            ServerHttpRequest request = serverWebExchange.getRequest();
            LoginUserInfo user = systemLoginService.loginByPasswordForCabinet(dto,request);
            String token = jwtTokenUtil.generateToken(user);
            return ApiResponse.success(token);
        }catch (BusinessException e){
            return ApiResponse.failed(e.getCode(),e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
        }
    }
}
server/system_gateway/src/main/resources/application-test.yml
@@ -1,9 +1,9 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: doumee
    password: rtjgfEr@&0c0m
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
#knife4j:
server/system_gateway/src/main/resources/bootstrap-dev.yml
@@ -7,7 +7,7 @@
      discovery:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
#        namespace: dmvisit
        namespace: wuhu_visit_dev
        namespace: wuhu_visit_dev1
        username: nacos
        password: nacos
    gateway:
server/system_gateway/src/main/resources/bootstrap-test.yml
@@ -6,7 +6,7 @@
      password: nacos
      discovery:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
        namespace: dmvisit_test
        namespace: wuhu_visit_test
#        namespace: dev_renkang
        username: nacos
        password: nacos
server/system_gateway/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: test
  application:
    name: system_gateway
  # å®‰å…¨é…ç½®
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -1,6 +1,7 @@
package com.doumee.core.utils;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -1461,8 +1462,12 @@
        public String getNoteinfo() {
            return noteinfo;
        }
    }
    public static String strToJson(String key,String val){
        Map<String,Object> map = new HashMap<>();
        map.put(key,val);
        return JSONObject.toJSONString(map);
    }
}
server/system_service/src/main/java/com/doumee/dao/system/dto/LoginCabinetDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
 * @author Eva.Caesar Liu
 * @date 2023/05/04 18:21
 */
@Data
@ApiModel("钥匙柜登录参数")
public class LoginCabinetDTO implements Serializable {
    @NotBlank(message = "用户名不能为空")
    @ApiModelProperty(value = "用户名")
    private String username;
    @NotBlank(message = "密码不能为空")
    @ApiModelProperty(value = "密码")
    private String password;
}
server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -1,5 +1,6 @@
package com.doumee.service.system;
import com.doumee.dao.system.dto.LoginCabinetDTO;
import com.doumee.dao.system.dto.LoginH5DTO;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.dao.system.dto.LoginDTO;
@@ -23,6 +24,9 @@
    String loginByPassword (LoginDTO dto, HttpServletRequest request);
    LoginUserInfo loginByPasswordNew (LoginDTO dto, ServerHttpRequest request);
    LoginUserInfo loginByPasswordForCabinet(LoginCabinetDTO dto, ServerHttpRequest request);
    LoginUserInfo loginH5 (LoginH5DTO dto, ServerHttpRequest request);
    LoginUserInfo loginByPasswordForPda(LoginDTO dto, ServerHttpRequest request);
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -5,6 +5,7 @@
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.jwt.JwtTokenUtil;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.system.dto.LoginCabinetDTO;
import com.doumee.dao.system.dto.LoginH5DTO;
import com.doumee.service.business.third.TmsService;
import com.doumee.service.business.third.model.LoginUserInfo;
@@ -170,6 +171,27 @@
            throw e;
        }
    }
    @Override
    public LoginUserInfo loginByPasswordForCabinet(LoginCabinetDTO dto, ServerHttpRequest request) {
        SystemLoginLog loginLog = getInitLoginlog(dto.getUsername(),request);
        try {
            LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,null,null,request);
            systemLoginLogService.create(loginLog);
            return  user;
        }catch (BusinessException e){
            loginLog.setSuccess(Boolean.FALSE);
            systemLoginLogService.create(loginLog);
            throw e;
        }catch (Exception e){
            loginLog.setSuccess(Boolean.FALSE);
            systemLoginLogService.create(loginLog);
            throw e;
        }
    }
    @Override
    public LoginUserInfo loginH5 (LoginH5DTO dto, ServerHttpRequest request) {
        SystemLoginLog loginLog = getInitLoginlog(dto.getUsername(),request);
server/system_timer/src/main/resources/application-test.yml
@@ -1,9 +1,9 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: doumee
    password: rtjgfEr@&0c0m
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  redis:
server/system_timer/src/main/resources/bootstrap-test.yml
@@ -23,6 +23,6 @@
      #        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
        namespace: dmvisit_test
        namespace: wuhu_visit_test
        username: nacos
        password: nacos
server/system_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: test
  application:
    name: systemTimer
    # å®‰å…¨é…ç½®
server/visits/admin_timer/src/main/resources/bootstrap-test.yml
@@ -23,7 +23,7 @@
#        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
        namespace: dmvisit_test
        namespace: wuhu_visit_test
        username: nacos
        password: nacos
server/visits/admin_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: test
  application:
    name: visitsTimer
    # å®‰å…¨é…ç½®
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/openapi/TelecomApiController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.doumee.cloud.openapi;
import com.alibaba.fastjson.JSONObject;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
import com.doumee.dao.business.JkLineMapper;
import com.doumee.dao.business.dto.TelecomCabinetLogDTO;
import com.doumee.dao.business.vo.TelecomJkCabinetLogVO;
import com.doumee.dao.openapi.request.*;
import com.doumee.dao.openapi.response.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.*;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.system.SystemUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Api(tags = "提供电信对接接口(数据大屏基础数据等)")
@RestController
@Slf4j
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/telecom/api")
public class TelecomApiController extends BaseController {
    @Autowired
    private JkCabinetLogService jkCabinetLogService;
    @Autowired
    private JkLineService jkLineService;
    @LoginNoRequired
    @PreventRepeat
    @ApiOperation("电信-钥匙出入日志查询")
    @PostMapping("/getLogListForTelecom")
    public ApiResponse<List<TelecomJkCabinetLogVO>> getLogListForTelecom (@RequestBody TelecomCabinetLogDTO dto) {
        return ApiResponse.success(jkCabinetLogService.getLogListForTelecom(dto));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/cabinet/CabinetController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,203 @@
package com.doumee.cloud.web.cabinet;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.JkVersionMapper;
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.dto.OptGridDTO;
import com.doumee.dao.business.model.InterfaceLog;
import com.doumee.dao.business.model.JkCabinetGrid;
import com.doumee.dao.business.model.JkVersion;
import com.doumee.dao.business.vo.AdminCabinetVO;
import com.doumee.dao.business.vo.CabinetDetailVO;
import com.doumee.dao.business.vo.CabinetFaceVO;
import com.doumee.dao.business.vo.CabinetInfoVO;
import com.doumee.dao.web.response.DriverHomeVO;
import com.doumee.service.business.*;
import com.doumee.service.business.third.model.ApiResponse;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/10/15 9:10
 */
@Api(tags = "【钥匙柜】钥匙柜业务")
@Trace(exclude = true)
@RestController
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/cabinet")
@Slf4j
public class CabinetController extends BaseController {
    @Autowired
    private JkCabinetService jkCabinetService;
    @Autowired
    private JkCabinetGridService jkCabinetGridService;
    @Autowired
    private InterfaceLogService interfaceLogService;
    @Autowired
    private JkIccardService jkIccardService;
    @Autowired
    private JkVersionService jkVersionService;
    @LoginNoRequired
    @ApiOperation("获取钥匙柜APK最新版本")
    @GetMapping("/getLastVersion")
    public ApiResponse<JkVersion> getLastVersion () {
        JkVersion jkVersion = jkVersionService.getLastVersion();
        this.saveInterfaceLog(null, JSONObject.toJSONString(jkVersion),"getLastVersion","获取钥匙柜APK最新版本");
        return ApiResponse.success(jkVersion);
    }
    @LoginNoRequired
    @ApiOperation("获取钥匙柜基本信息 - å¸æœº")
    @GetMapping("/getCabinetInfoForDriver")
    public ApiResponse<CabinetInfoVO> getCabinetInfoForDriver (@RequestParam String code) {
        CabinetInfoVO cabinetInfoVO = jkCabinetService.getCabinetInfoForDriver(code);
        this.saveInterfaceLog(Constants.strToJson("code",code), JSONObject.toJSONString(cabinetInfoVO),"getCabinetInfoForDriver","获取钥匙柜基本信息 - å¸æœº");
        return ApiResponse.success(cabinetInfoVO);
    }
    @LoginNoRequired
    @ApiOperation("更新钥匙柜在线状态")
    @GetMapping("/updateRunStatusById")
    public ApiResponse updateRunStatusById (@RequestParam Integer id) {
        jkCabinetService.updateRunStatusById(id);
        this.saveInterfaceLog(Constants.strToJson("id",id.toString()), null,"updateRunStatusById","更新钥匙柜在线状态");
        return ApiResponse.success("更新成功");
    }
    @ApiOperation("获取可管理的钥匙柜列表 - ç®¡ç†å‘˜")
    @GetMapping("/getAdminCabinetInfo")
    public ApiResponse<List<AdminCabinetVO>> getAdminCabinetInfo (@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        List<AdminCabinetVO> list = jkCabinetService.getAdminCabinetInfo(getLoginUser(token));
        this.saveInterfaceLog(null, JSONArray.toJSONString(list),"getAdminCabinetInfo","获取可管理的钥匙柜列表 - ç®¡ç†å‘˜");
        return ApiResponse.success(list);
    }
    @ApiOperation("获取钥匙柜详情 - ç®¡ç†å‘˜")
    @GetMapping("/getCabinetDetail")
    public ApiResponse<CabinetDetailVO> getCabinetDetail (@RequestParam Integer cabinetId, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        CabinetDetailVO cabinetDetailVO = jkCabinetService.getCabinetDetail(cabinetId,getLoginUser(token));
        this.saveInterfaceLog(Constants.strToJson("cabinetId",cabinetId.toString()), JSONObject.toJSONString(cabinetDetailVO),"getCabinetDetail","获取钥匙柜详情 - ç®¡ç†å‘˜");
        return ApiResponse.success(cabinetDetailVO);
    }
    @ApiOperation("标记柜格故障 - ç®¡ç†å‘˜")
    @PostMapping("/markFault")
    public ApiResponse markFault(@RequestBody OptGridDTO dto, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        dto.setLoginUserInfo(getLoginUser(token));
        jkCabinetGridService.markFault(dto);
        this.saveInterfaceLog(JSONObject.toJSONString(dto), null,"markFault","标记柜格故障 - ç®¡ç†å‘˜");
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("标记柜格正常 - ç®¡ç†å‘˜")
    @PostMapping("/cancelFault")
    public ApiResponse cancelFault(@RequestBody OptGridDTO dto, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        dto.setLoginUserInfo(getLoginUser(token));
        jkCabinetGridService.cancelFault(dto);
        this.saveInterfaceLog(JSONObject.toJSONString(dto), null,"cancelFault","标记柜格正常 - ç®¡ç†å‘˜");
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("标记维修保养 - ç®¡ç†å‘˜")
    @PostMapping("/markRepair")
    public ApiResponse markRepair(@RequestBody OptGridDTO dto, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        dto.setLoginUserInfo(getLoginUser(token));
        jkCabinetGridService.markRepair(dto);
        this.saveInterfaceLog(JSONObject.toJSONString(dto), null,"markRepair","标记维修保养 - ç®¡ç†å‘˜");
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("关闭柜门")
    @PostMapping("/closeGrid")
    public ApiResponse closeGrid(@RequestBody CloseGridDTO dto) {
        jkCabinetGridService.closeGrid(dto);
        this.saveInterfaceLog(JSONObject.toJSONString(dto), null,"closeGrid","关闭柜门");
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("批量开门 - ç®¡ç†å‘˜")
    @PostMapping("/batchOpenGridAdmin")
    public ApiResponse batchOpenGridAdmin(@RequestBody OptGridDTO dto, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        dto.setLoginUserInfo(getLoginUser(token));
        jkCabinetGridService.batchOpenGridAdmin(dto);
        this.saveInterfaceLog(JSONObject.toJSONString(dto), null,"batchOpenGridAdmin","批量开门 - ç®¡ç†å‘˜");
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("获取钥匙柜人脸数据")
    @GetMapping("/getCabinetFaceVO")
    public ApiResponse<CabinetFaceVO> getCabinetFaceVO(@RequestParam String code) {
        CabinetFaceVO cabinetFaceVO = jkCabinetService.getCabinetFaceVO(code);
        this.saveInterfaceLog(Constants.strToJson("code",code), JSONObject.toJSONString(cabinetFaceVO),"getCabinetFaceVO","获取钥匙柜人脸数据");
        return ApiResponse.success(cabinetFaceVO);
    }
    @ApiOperation("获取可操作柜格 - å¸æœº")
    @PostMapping("/getDriverGrid")
    public ApiResponse<List<JkCabinetGrid>> getDriverGrid(@RequestBody GetDriverGridDTO dto) {
        List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridService.getDriverGrid(dto);
        this.saveInterfaceLog(JSONObject.toJSONString(dto), JSONObject.toJSONString(jkCabinetGridList),"getDriverGrid","获取可操作柜格 - å¸æœº");
        return ApiResponse.success(jkCabinetGridList);
    }
    @ApiOperation("开启柜格 - å¸æœº")
    @PostMapping("/openGridDriver")
    public ApiResponse openGridDriver(@RequestBody OpenGridDriverDTO dto) {
        jkCabinetGridService.openGridDriver(dto);
        this.saveInterfaceLog(JSONObject.toJSONString(dto), null,"openGridDriver","开启柜格 - å¸æœº");
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("获取IC卡用户主键 - å¸æœº")
    @PostMapping("/getMemberIdByCode")
    public ApiResponse<Integer> getMemberIdByCode(@RequestParam String code) {
        this.saveInterfaceLog(Constants.strToJson("code",code), null,"getMemberIdByCode","获取IC卡用户主键 - å¸æœº");
        return ApiResponse.success(jkIccardService.getMemberIdByCode(code));
    }
    private void saveInterfaceLog(String s, String result,String url,String name) {
        InterfaceLog hkMonitoryLogDO=new InterfaceLog();
        hkMonitoryLogDO.setType(0);
        hkMonitoryLogDO.setCreateDate(new Date());
        hkMonitoryLogDO.setIsdeleted(0);
        hkMonitoryLogDO.setRequest(s);
        hkMonitoryLogDO.setRepose(result);
        hkMonitoryLogDO.setName("【钥匙柜】"+name);
        hkMonitoryLogDO.setUrl(url);
        interfaceLogService.create(hkMonitoryLogDO);
    }
}
server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
@@ -16,7 +16,7 @@
      discovery:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
#        namespace: dmvisit
        namespace: wuhu_visit_dev
        namespace: wuhu_visit_dev1
        username: nacos
        password: nacos
knife4j:
server/visits/dmvisit_admin/src/main/resources/bootstrap-test.yml
@@ -23,7 +23,7 @@
#        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://192.168.0.212:8848 #配置Nacos地址
        namespace: dmvisit_test
        namespace: wuhu_visit_test
        username: nacos
        password: nacos
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: test
  application:
    name: visitsAdmin
    # å®‰å…¨é…ç½®
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/GetDriverGridDTO.java
@@ -21,4 +21,7 @@
    @ApiModelProperty(value = "用户主键")
    private Integer memberId;
    @ApiModelProperty(value = "验证人主键")
    private Integer autoMemberId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java
@@ -22,4 +22,7 @@
    @ApiModelProperty(value = "柜格主键")
    private Integer gridId;
    @ApiModelProperty(value = "用户主键")
    private Integer memberId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/TelecomCabinetLogDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.doumee.dao.business.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.service.business.third.model.LoginUserModel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/10/11 16:01
 */
@Data
public class TelecomCabinetLogDTO{
    @ApiModelProperty(value = "查询开始时间 yyyy-MM-dd ")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date startDate;
    @ApiModelProperty(value = "查询结束时间 yyyy-MM-dd ")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endDate;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java
@@ -35,7 +35,6 @@
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
@@ -44,7 +43,6 @@
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
@@ -119,7 +117,6 @@
    @ApiModelProperty(value = "最后通讯时间")
    @ExcelColumn(name="最后通讯时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date haertTime;
    @ApiModelProperty(value = "所在位置")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
@@ -80,6 +80,20 @@
    @ApiModelProperty(value = "操作类型:0=开门;1=关门;", example = "1")
    private Integer type;
    @ApiModelProperty(value = "车牌号")
    private String carCode;
    @ApiModelProperty(value = "关门记录主键(借出记录使用)", example = "1")
    private Integer closeLogId;
    @ApiModelProperty(value = "操作后钥匙状态:0未变化;1已归还;2已借出;", example = "1")
    private Integer keyStatus;
    @ApiModelProperty(value = "归还时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date returnDate;
    @ApiModelProperty(value = "操作人部门", example = "1",hidden = true)
    @TableField(exist = false)
    private String companyName;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java
@@ -55,8 +55,8 @@
    @ExcelColumn(name="备注")
    private String info;
    @ApiModelProperty(value = "版本号")
    @ExcelColumn(name="版本号")
    @ApiModelProperty(value = "版本号名称")
    @ExcelColumn(name="版本号名称")
    private String versionInfo;
    @ApiModelProperty(value = "安装包路径")
@@ -91,6 +91,10 @@
    @ExcelColumn(name="文件大小 å•位(KB)")
    private Integer fileSize;
    @ApiModelProperty(value = "版本号", example = "1")
    @ExcelColumn(name="版本号")
    private Integer versionNum;
    @ApiModelProperty(value = "文件大小 å•位(MB)", example = "1")
    @TableField(exist = false)
    private double fileSizeMb;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetFaceInfoVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.dao.business.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/23 14:56
 */
@Data
public class CabinetFaceInfoVO {
    @ApiModelProperty(value = "用户主键")
    private Integer memberId;
    @ApiModelProperty(value = "用户名称")
    private String memberName;
    @ApiModelProperty(value = "人脸照片")
    private String faceImg;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetFaceVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
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 CabinetFaceVO {
    @ApiModelProperty(value = "司机人脸列表")
    private List<CabinetFaceInfoVO> driverFaceList;
    @ApiModelProperty(value = "验证人人脸列表")
    private List<CabinetFaceInfoVO> autoFaceList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CabinetInfoVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
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.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.service.business.third.model.LoginUserModel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * é’¥åŒ™æŸœåŸºæœ¬ä¿¡æ¯è¡¨
 * @author æ±Ÿè¹„蹄
 * @date 2025/09/28 09:01
 */
@Data
@ApiModel("钥匙柜基本信息表返回类")
public class CabinetInfoVO {
    @ApiModelProperty(value = "主键", example = "1")
    private Integer id;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
    private String info;
    @ApiModelProperty(value = "设备编号")
    @ExcelColumn(name="设备编号")
    private String code;
    @ApiModelProperty(value = "设备名称")
    @ExcelColumn(name="设备名称")
    private String name;
    @ApiModelProperty(value = "设备ID")
    @ExcelColumn(name="设备ID")
    private String devId;
    @ApiModelProperty(value = "验证人编码(关联member)", example = "1")
    private String authMemberId;
    @ApiModelProperty(value = "是否双重验证 0否 1是", example = "1")
    private Integer doubleAuth;
    @ApiModelProperty(value = "轮播图地址", example = "1")
    private List<String> bannerList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/TelecomJkCabinetLogVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
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.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.service.business.third.model.LoginUserModel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * é’¥åŒ™æŸœå¼€å…³é—¨è®°å½•
 * @author æ±Ÿè¹„蹄
 * @date 2025/09/28 09:01
 */
@Data
@ApiModel("钥匙柜开关门记录")
public class TelecomJkCabinetLogVO{
    @ApiModelProperty(value = "主键", example = "1")
    private Integer id;
    @ApiModelProperty(value = "领取时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "归还时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date returnDate;
    @ApiModelProperty(value = "状态:0=未归还;1=已归还;")
    private Integer status;
    @ApiModelProperty(value = "验证方式 0刷脸 1刷卡", example = "1")
    private Integer authType;
    @ApiModelProperty(value = "钥匙信息(车牌号-钥匙编码)")
    private String keyInfo;
    @ApiModelProperty(value = "车牌号")
    private String carCode;
    @ApiModelProperty(value = "领取规则 0随车 1随派车单", example = "1")
    private Integer roleType;
    @ApiModelProperty(value = "操作类型:0=开门;1=关门;", example = "1")
    private Integer type;
    @ApiModelProperty(value = "操作人部门", example = "1",hidden = true)
    private String companyName;
    @ApiModelProperty(value = "操作人名称", example = "1")
    private String memberName;
    @ApiModelProperty(value = "钥匙柜名称", example = "1")
    private String cabinetName;
    @ApiModelProperty(value = "柜格编号", example = "1")
    private String gridCode;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java
@@ -107,17 +107,11 @@
    /**
     * æ ‡è®°æŸœæ ¼æ•…éšœ
     * @param loginUserInfo
     * @param cabinetId
     * @param gridIdList
     */
    void markFault(OptGridDTO dto);
    /**
     * æ ‡è®°æŸœæ ¼æ­£å¸¸
     * @param loginUserInfo
     * @param cabinetId
     * @param gridIdList
     */
    void cancelFault(OptGridDTO dto);
@@ -127,14 +121,17 @@
    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/JkCabinetLogService.java
@@ -1,5 +1,7 @@
package com.doumee.service.business;
import com.doumee.dao.business.dto.TelecomCabinetLogDTO;
import com.doumee.dao.business.vo.TelecomJkCabinetLogVO;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.dao.business.model.JkCabinetLog;
@@ -94,4 +96,11 @@
     * @return long
     */
    long count(JkCabinetLog jkCabinetLog);
    /**
     * ç”µä¿¡ é’¥åŒ™å‡ºå…¥æ—¥å¿—查询
     * @param model
     * @return
     */
    List<TelecomJkCabinetLogVO> getLogListForTelecom(TelecomCabinetLogDTO model);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetService.java
@@ -1,8 +1,6 @@
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.dao.business.vo.*;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -119,5 +117,19 @@
     * @param cabinetId
     * @return
     */
    CabinetDetailVO getCabinetDetail(Integer cabinetId);
    CabinetDetailVO getCabinetDetail(Integer cabinetId,LoginUserInfo loginUserInfo);
    /**
     * èŽ·å–é’¥åŒ™æŸœä¸‹çš„äººè„¸ä¿¡æ¯
     * @param code
     * @return
     */
    CabinetFaceVO getCabinetFaceVO(String code);
    CabinetInfoVO getCabinetInfoForDriver(String code);
    void updateRunStatusById(Integer id);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java
@@ -96,4 +96,6 @@
    long count(JkIccard jkIccard);
    void updateStatusById(JkIccard jkIccard);
    Integer getMemberIdByCode(String code);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkVersionService.java
@@ -94,4 +94,6 @@
     * @return long
     */
    long count(JkVersion jkVersion);
    JkVersion getLastVersion();
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -1,7 +1,9 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.*;
@@ -20,6 +22,8 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.third.model.PageWrap;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -35,6 +39,7 @@
 * @date 2025/09/28 09:01
 */
@Service
@Slf4j
public class JkCabinetGridServiceImpl implements JkCabinetGridService {
    @Autowired
@@ -250,23 +255,24 @@
        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;
        }else{
            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.isNotEmpty(jkCabinetGridList)){
                LoginUserInfo loginUserInfo = dto.getLoginUserInfo();
                for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
                    jkCabinetGrid.setEditor(loginUserInfo.getId());
                    jkCabinetGrid.setEditDate(new Date());
                    jkCabinetGrid.setWorkingStatus(Constants.ONE);
                    jkCabinetGridMapper.updateById(jkCabinetGrid);
                }
            }
        }
        LoginUserInfo loginUserInfo = dto.getLoginUserInfo();
        for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
            jkCabinetGrid.setEditor(loginUserInfo.getId());
            jkCabinetGrid.setEditDate(new Date());
            jkCabinetGrid.setWorkingStatus(Constants.ONE);
            jkCabinetGridMapper.updateById(jkCabinetGrid);
        }
    }
    /**
@@ -293,16 +299,16 @@
                .isNotNull(JkCabinetGrid::getKeyId)
                .in(JkCabinetGrid::getId,dto.getGridIdList())
        );
        if(CollectionUtils.isEmpty(jkCabinetGridList)){
            return;
        if(CollectionUtils.isNotEmpty(jkCabinetGridList)){
            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())
                );
            }
        }
        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())
            );
        }
    }
@@ -315,23 +321,23 @@
        if(Objects.isNull(dto)
                || Objects.isNull(dto.getCabinetId())
                || CollectionUtils.isEmpty(dto.getGridIdList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
            return;
        }
        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;
        if(CollectionUtils.isNotEmpty(jkCabinetGridList)){
            LoginUserInfo loginUserInfo = dto.getLoginUserInfo();
            for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
                jkCabinetGrid.setEditor(loginUserInfo.getId());
                jkCabinetGrid.setEditDate(new Date());
                jkCabinetGrid.setWorkingStatus(Constants.ZERO);
                jkCabinetGridMapper.updateById(jkCabinetGrid);
            }
        }
        LoginUserInfo loginUserInfo = dto.getLoginUserInfo();
        for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
            jkCabinetGrid.setEditor(loginUserInfo.getId());
            jkCabinetGrid.setEditDate(new Date());
            jkCabinetGrid.setWorkingStatus(Constants.ZERO);
            jkCabinetGridMapper.updateById(jkCabinetGrid);
        }
    }
@@ -344,42 +350,42 @@
        if(Objects.isNull(dto)
        || Objects.isNull(dto.getCabinetId())
        || CollectionUtils.isEmpty(dto.getGridIdList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
           return;
        }
        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() );
        if(CollectionUtils.isNotEmpty(jkCabinetGridList)){
            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.setRoleType(jkKeys.getRoleType());
                    }
                    jkCabinetLog.setType(Constants.ZERO);
                    jkCabinetLogs.add(jkCabinetLog);
                }
                jkCabinetLog.setType(Constants.ZERO);
                jkCabinetLogs.add(jkCabinetLog);
                jkCabinetLogMapper.insert(jkCabinetLogs);
            }
            jkCabinetLogMapper.insert(jkCabinetLogs);
        }
    }
@@ -403,38 +409,53 @@
                .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())
                    );
        if(Objects.nonNull(jkCabinetGrid)){
            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());
            jkCabinetLog.setKeyStatus(Constants.ZERO);
            Boolean isChange = false;
            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.setKeyStatus(dto.getKeyStatus());
                    //钥匙状态与当前操作状态不一致,则进行更新钥匙状态
                    if(!Constants.equalsInteger(jkKeys.getStatus(),dto.getKeyStatus())
                    && (Constants.equalsInteger(dto.getKeyStatus(),Constants.ONE)||Constants.equalsInteger(dto.getKeyStatus(),Constants.TWO))){
                        jkKeysMapper.update(null,new UpdateWrapper<JkKeys>().lambda()
                                .set(JkKeys::getEditDate,DateUtil.getCurrDateTime())
                                .set(JkKeys::getStatus,dto.getKeyStatus())
                                .eq(JkKeys::getId,jkKeys.getId())
                        );
                        isChange = true;
                    }
                }
            }
            jkCabinetLog.setType(Constants.ONE);
            jkCabinetLogMapper.insert(jkCabinetLog);
            //查询钥匙对应的借出了钥匙的开门记录 è¿›è¡Œæ·»åŠ å…³é—¨è®°å½•ä¸»é”®
            if(isChange && Constants.equalsInteger(dto.getKeyStatus(),Constants.ONE)){
                jkCabinetLogMapper.update(null,new UpdateWrapper<JkCabinetLog>().lambda()
                        .set(JkCabinetLog::getCloseLogId,jkCabinetLog.getId())
                        .eq(JkCabinetLog::getKeyId,jkCabinetLog.getKeyId())
                        .eq(JkCabinetLog::getType,Constants.ZERO)
                        .eq(JkCabinetLog::getKeyStatus,Constants.TWO)
                        .isNotNull(JkCabinetLog::getCloseLogId));
            }
        }
        jkCabinetLog.setType(Constants.ONE);
        jkCabinetLogMapper.insert(jkCabinetLog);
    }
    /**
@@ -442,26 +463,48 @@
     */
    @Override
    public List<JkCabinetGrid> getDriverGrid(GetDriverGridDTO dto){
        List<JkCabinetGrid> jkCabinetGridList = new ArrayList<>();
        if(Objects.isNull(dto.getCabinetId())
            || Objects.isNull(dto.getCabinetId())
            || Objects.isNull(dto.getMemberId())
            || Objects.isNull(dto.getType())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
            return jkCabinetGridList;
        }else{
            JkCabinet jkCabinet = jkCabinetMapper.selectById(dto.getCabinetId());
            if(Objects.isNull(jkCabinet)){
                return jkCabinetGridList;
            }
            if(Constants.equalsInteger(jkCabinet.getDoubleAuth(),Constants.ONE)){
                if(StringUtils.isBlank(jkCabinet.getAuthMemberId())){
                    return jkCabinetGridList;
                }
                List<String> authMemberList =  Arrays.asList(jkCabinet.getAuthMemberId().split(","));
                Boolean flag = true;
                for (String id:authMemberList) {
                    if(id.equals(jkCabinet.getAuthMemberId())){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    return jkCabinetGridList;
                }
            }
            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()+" ) ")
            );
        }
        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;
    }
@@ -478,10 +521,9 @@
                .last(" limit 1 ")
        );
        if(Objects.isNull(jkCabinetGrid)){
            return;
            return ;
        }
        LoginUserInfo loginUserInfo = openGridDriverDTO.getLoginUserInfo();
        List<JkCabinetLog> jkCabinetLogs = new ArrayList<>();
        JkCabinetLog jkCabinetLog = new JkCabinetLog();
        jkCabinetLog.setCreateDate(new Date());
        jkCabinetLog.setCreator(loginUserInfo.getId());
@@ -501,7 +543,10 @@
                jkCabinetLog.setRoleType(jkKeys.getRoleType());
            }
        }
        jkCabinetLogMapper.insert(jkCabinetLogs);
        jkCabinetLogMapper.insert(jkCabinetLog);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java
@@ -1,7 +1,10 @@
package com.doumee.service.business.impl;
import cn.hutool.core.bean.BeanUtil;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.dto.TelecomCabinetLogDTO;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.TelecomJkCabinetLogVO;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.Utils;
@@ -17,6 +20,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -126,4 +130,44 @@
        QueryWrapper<JkCabinetLog> wrapper = new QueryWrapper<>(jkCabinetLog);
        return jkCabinetLogMapper.selectCount(wrapper);
    }
    @Override
    public List<TelecomJkCabinetLogVO> getLogListForTelecom(TelecomCabinetLogDTO model){
        MPJLambdaWrapper<JkCabinetLog> wrapper = new MPJLambdaWrapper<JkCabinetLog>()
                .selectAll(JkCabinetLog.class)
                .selectAs(Member::getName,JkCabinetLog::getMemberName)
                .selectAs(Company::getName,JkCabinetLog::getCompanyName)
                .selectAs(JkCabinet::getName,JkCabinetLog::getCabinetName)
                .selectAs(JkCabinetGrid::getCode,JkCabinetLog::getGridCode)
                .selectAs(JkKeys::getCarCode,JkCabinetLog::getCarCode)
                .select("j.CREATE_DATE",JkCabinetLog::getReturnDate)
                .leftJoin(JkCabinet.class,JkCabinet::getId,JkCabinetLog::getCabinetId)
                .leftJoin(JkCabinetGrid.class,JkCabinetGrid::getId,JkCabinetLog::getGridId)
                .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                .leftJoin(Member.class,Member::getId,JkCabinetLog::getMemberId)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .leftJoin(" jk_cabinet_log j on j.id=t.CLOSE_LOG_ID ")
                .ge(Objects.nonNull(model.getStartDate()),JkCabinetLog::getCreateDate, Utils.Date.getStart(model.getStartDate()))
                .le(Objects.nonNull(model.getEndDate()),JkCabinetLog::getCreateDate, Utils.Date.getEnd(model.getEndDate()))
                .eq(JkCabinetLog::getIsdeleted, Constants.ZERO)
                .eq(JkCabinetLog::getKeyStatus,Constants.TWO)
                .orderByDesc(JkCabinetLog::getCreateDate);
        List<JkCabinetLog> jkCabinetLogs = jkCabinetLogMapper.selectJoinList(JkCabinetLog.class,wrapper);
        List<TelecomJkCabinetLogVO> telecomJkCabinetLogVOList = new ArrayList<TelecomJkCabinetLogVO>();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jkCabinetLogs)){
            for (JkCabinetLog jkCabinetLog:jkCabinetLogs) {
                TelecomJkCabinetLogVO telecomJkCabinetLogVO = new TelecomJkCabinetLogVO();
                BeanUtil.copyProperties(jkCabinetLog,telecomJkCabinetLogVO);
                telecomJkCabinetLogVO.setStatus(Objects.nonNull(jkCabinetLog.getReturnDate())?Constants.ZERO:Constants.ONE);
                telecomJkCabinetLogVOList.add(telecomJkCabinetLogVO);
            }
        }
        return telecomJkCabinetLogVOList;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
@@ -6,21 +6,18 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.CategoryMapper;
import com.doumee.dao.business.JkCabinetGridMapper;
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.business.dao.MemberMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.*;
import com.doumee.dao.system.model.SystemDictData;
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.core.utils.Utils;
import com.doumee.dao.business.JkCabinetMapper;
import com.doumee.dao.business.model.JkCabinet;
import com.doumee.service.business.JkCabinetService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -51,6 +48,9 @@
    private JkCabinetMapper jkCabinetMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private JkCabinetGridMapper jkCabinetGridMapper;
    @Autowired
@@ -58,6 +58,9 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MemberMapper memberMapper;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
@@ -261,6 +264,16 @@
            jkCabinet.setJwd(jkCabinet.getLongitude() + "," + jkCabinet.getLatitude());
        }
        jkCabinet.setGridNum(jkCabinet.getColumnNum()*jkCabinet.getRowNum());
        if(StringUtils.isNotBlank(jkCabinet.getManagerId())){
            jkCabinet.setManagerIdList(Arrays.asList(
                    jkCabinet.getManagerId().split(",")
            ));
        }
        if(StringUtils.isNotBlank(jkCabinet.getAuthMemberId())){
            jkCabinet.setAuthMemberIdList(Arrays.asList(
                    jkCabinet.getAuthMemberId().split(",")
            ));
        }
        return jkCabinet;
    }
@@ -277,7 +290,7 @@
        QueryWrapper<JkCabinet> wrapper = new QueryWrapper<>(jkCabinet);
        return jkCabinetMapper.selectList(wrapper);
    }
    @Override
    public PageData<JkCabinet> findPage(PageWrap<JkCabinet> pageWrap) {
        IPage<JkCabinet> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
@@ -373,11 +386,12 @@
    @Override
    public CabinetDetailVO getCabinetDetail(Integer cabinetId){
    public CabinetDetailVO getCabinetDetail(Integer cabinetId,LoginUserInfo loginUserInfo){
        CabinetDetailVO cabinetDetailVO = new CabinetDetailVO();
        JkCabinet cabinet = jkCabinetMapper.selectOne(new QueryWrapper<JkCabinet>()
                .lambda()
                .eq(JkCabinet::getIsdeleted,Constants.ZERO)
                .apply(" FIND_IN_SET("+loginUserInfo.getId()+",MANAGER_ID) ")
                .eq(JkCabinet::getId,cabinetId)
                .last(" limit 1")
        );
@@ -433,4 +447,119 @@
    }
    @Override
    public CabinetFaceVO getCabinetFaceVO(String code){
        CabinetFaceVO cabinetFaceVO = new CabinetFaceVO();
        List<CabinetFaceInfoVO> driverFaceList = new ArrayList<>();
        List<CabinetFaceInfoVO> autoFaceList = new ArrayList<>();
        JkCabinet jkCabinet = jkCabinetMapper.selectOne(new QueryWrapper<JkCabinet>().lambda()
                .eq(JkCabinet::getCode,code)
                .eq(JkCabinet::getIsdeleted,Constants.ZERO)
                .last("limit 1")
        );
        if(Objects.nonNull(jkCabinet)){
            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
            //查询司机信息
            List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,new MPJLambdaWrapper<JkCabinetGrid>()
                    .selectAll(JkCabinetGrid.class)
                    .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                    .innerJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                    .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                    .eq(JkKeys::getIsdeleted,Constants.ZERO)
                    .isNotNull(JkKeys::getCarId)
                    .eq(JkCabinetGrid::getCabinetId,jkCabinet.getId())
            );
            if(CollectionUtils.isNotEmpty(jkCabinetGridList)){
                List<Integer> carIdList = jkCabinetGridList.stream().map(i->i.getKeyId()).collect(Collectors.toList());
                //查询车辆所有人员信息
                List<Member> memberList = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                        .selectAll(Member.class)
                        .leftJoin(CarDriver.class,CarDriver::getMemberId,Member::getId)
                        .eq(Member::getIsdeleted,Constants.ZERO)
                        .eq(CarDriver::getIsdeleted,Constants.ZERO)
                        .eq(CarDriver::getStatus,Constants.ZERO)
                        .isNotNull(Member::getFaceImg)
                        .in(CarDriver::getCarId,carIdList)
                );
                if(CollectionUtils.isNotEmpty(memberList)){
                    Set<Member> memberSet = new HashSet<>(memberList);
                    for (Member member:memberSet) {
                        CabinetFaceInfoVO cabinetFaceInfoVO = new CabinetFaceInfoVO();
                        cabinetFaceInfoVO.setMemberId(member.getId());
                        cabinetFaceInfoVO.setMemberName(member.getName());
                        cabinetFaceInfoVO.setFaceImg(prefixUrl + member.getFaceImg());
                        driverFaceList.add(cabinetFaceInfoVO);
                    }
                }
            }
            //查询设备验证人员
            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .isNotNull(Member::getFaceImg)
                    .apply(" FIND_IN_SET( id ,'"+jkCabinet.getManagerId()+"') ")
            );
            if(CollectionUtils.isNotEmpty(memberList)){
                for (Member member:memberList) {
                    CabinetFaceInfoVO cabinetFaceInfoVO = new CabinetFaceInfoVO();
                    cabinetFaceInfoVO.setMemberId(member.getId());
                    cabinetFaceInfoVO.setMemberName(member.getName());
                    cabinetFaceInfoVO.setFaceImg(prefixUrl + member.getFaceImg());
                    autoFaceList.add(cabinetFaceInfoVO);
                }
            }
        }
        cabinetFaceVO.setAutoFaceList(autoFaceList);
        cabinetFaceVO.setDriverFaceList(driverFaceList);
        return cabinetFaceVO;
    }
    @Override
    public CabinetInfoVO getCabinetInfoForDriver(String code){
        JkCabinet jkCabinet = jkCabinetMapper.selectOne(new QueryWrapper<JkCabinet>()
                .lambda()
                .eq(JkCabinet::getIsdeleted,Constants.ZERO)
                .eq(JkCabinet::getCode,code)
                .orderByAsc(JkCabinet::getCreateDate)
                .last(" limit 1 ")
        );
        CabinetInfoVO cabinetInfoVO = new CabinetInfoVO();
        if(Objects.nonNull(jkCabinet)){
            BeanUtil.copyProperties(jkCabinet,cabinetInfoVO);
        }
        List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
                .eq(Category::getIsdeleted,Constants.ZERO)
                .eq(Category::getStatus,Constants.ZERO)
                .eq(Category::getType,Constants.THREE)
                .orderByAsc(Category::getSortnum)
        );
        if(CollectionUtils.isNotEmpty(categoryList)){
            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.BANNER_IMG).getCode();
            for (Category category:categoryList) {
                category.setImgurlFull(prefixUrl + category.getImgurl());
            }
            cabinetInfoVO.setBannerList(
                    categoryList.stream().map(i->i.getImgurlFull()).collect(Collectors.toList())
            );
        }
        return cabinetInfoVO;
    }
    @Override
    public void updateRunStatusById(Integer id) {
        jkCabinetMapper.update(null,new UpdateWrapper<JkCabinet>()
                .lambda().set(JkCabinet::getRunStatus,Constants.ZERO)
                .set(JkCabinet::getEditDate, DateUtil.getCurrDateTime())
                .set(JkCabinet::getHaertTime, DateUtil.getCurrDateTime())
                .eq(JkCabinet::getId,id));
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java
@@ -179,4 +179,20 @@
    }
    @Override
    public Integer getMemberIdByCode(String code){
        JkIccard jkIccard = jkIccardMapper.selectOne(new QueryWrapper<JkIccard>().lambda()
                .eq(JkIccard::getIsdeleted,Constants.ZERO)
                .eq(JkIccard::getStatus,Constants.ZERO)
                .eq(JkIccard::getCode,code)
                .last(" limit 1 ")
        );
        if(Objects.isNull(jkIccard)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        return jkIccard.getMemberId();
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java
@@ -164,10 +164,16 @@
    @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);
        return jkKeysMapper.selectList(new QueryWrapper<JkKeys>()
                .lambda().eq(JkKeys::getIsdeleted,Constants.ZERO)
        );
    }
  
    @Override
@@ -184,6 +190,7 @@
                .leftJoin(JkCabinetGrid.class,JkCabinetGrid::getKeyId,JkKeys::getId)
                .leftJoin(JkCabinet.class,JkCabinet::getId,JkCabinetGrid::getCabinetId)
                .eq(JkKeys::getIsdeleted,Constants.ZERO)
                .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                .like(StringUtils.isNotBlank(model.getCode()),JkKeys::getCode,model.getCode())
                .like(StringUtils.isNotBlank(model.getCarCode()),JkKeys::getCarCode,model.getCode());
        IPage<JkKeys> iPage = jkKeysMapper.selectJoinPage(page,JkKeys.class,wrapper);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkVersionServiceImpl.java
@@ -176,4 +176,25 @@
        QueryWrapper<JkVersion> wrapper = new QueryWrapper<>(jkVersion);
        return jkVersionMapper.selectCount(wrapper);
    }
    @Override
    public JkVersion getLastVersion(){
        JkVersion jkVersion = jkVersionMapper.selectOne(new QueryWrapper<JkVersion>().lambda()
                .eq(JkVersion::getIsdeleted,Constants.ZERO)
                .eq(JkVersion::getType,Constants.ZERO)
                .orderByDesc(JkVersion::getVersionNum)
                .last("limit 1")
        );
        if(Objects.nonNull(jkVersion)){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.APP_FILE).getCode();
            jkVersion.setFullFileUrl(path + jkVersion.getFileUrl());
        }
        return jkVersion;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1917,15 +1917,15 @@
                .eq(SystemUser::getDeleted,Constants.ZERO)
                .last(" limit 1 "));
        //非访客用户 è¿›è¡Œåˆ¤æ–­æ˜¯å¦å­˜åœ¨ç”¨æˆ·
        if(!Objects.isNull(user)){
        if(Objects.isNull(user)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"您的账号暂未绑定系统,请联系管理员");
        }else{
            Member member = memberMapper.selectById(user.getMemberId());
            if(member == null || member.getIsdeleted() == Constants.ONE){
                return;
//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"账号绑定异常,请联系管理员");
            }
            if(member.getStatus() != Constants.ZERO){
                return;
//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员");
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"您的账号已禁用,请联系管理员");
            }
            if(StringUtils.isNotBlank(member.getIdcardNo())){
                member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()));
server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -1,9 +1,9 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: doumee
    password: rtjgfEr@&0c0m
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  redis: