feat:人员角色搜索
This commit is contained in:
1 parent
1e4028babe
commit
cbfb174a12
19 files changed
+373
-40
No files matched your search
@@ -52,5 +52,11 @@
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bsd</groupId>
|
||||
<artifactId>pjcloud-thirdparty-api</artifactId>
|
||||
<version>5.7.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.bsd.pjcloud.hard.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class HardAuthAppDto {
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
package com.bsd.pjcloud.hard.api.feign;
|
||||
|
||||
|
||||
import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.feign.annotation.NoToken;
|
||||
import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@FeignClient(contextId = "remoteHardDoorService", value = ServiceNameConstants.HARDWARE_SERVICE)
|
||||
public interface RemoteHardDoorService {
|
||||
|
||||
/**
|
||||
* 处理柜子开门回调
|
||||
*/
|
||||
@NoToken
|
||||
@PostMapping("/hard-door-flow/dispose-locak-callback")
|
||||
R<List<HardOrderEntity>> disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto);
|
||||
|
||||
/**
|
||||
* 处理柜子视频回调
|
||||
*/
|
||||
@NoToken
|
||||
@PostMapping("/hard-door-flow/dispose-video-callback")
|
||||
R<List<HardOrderEntity>> disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto);
|
||||
|
||||
/**
|
||||
* 处理柜子视频回调
|
||||
*/
|
||||
@NoToken
|
||||
@PostMapping("/hard-door-flow/dispose-status-callback")
|
||||
R<List<HardOrderEntity>> disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto);
|
||||
}
|
||||
+1
@@ -1,2 +1,3 @@
|
||||
com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService
|
||||
com.bsd.pjcloud.hard.api.feign.RemoteHardOrderService
|
||||
com.bsd.pjcloud.hard.api.feign.RemoteHardThirdSelfZyService
|
||||
+12
-2
@@ -2,12 +2,12 @@ package com.bsd.pjcloud.hard.controller;
|
||||
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.data.datascope.DataScope;
|
||||
import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
import com.bsd.pjcloud.hard.api.dto.HardAuthAppDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
|
||||
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
|
||||
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
|
||||
@@ -23,7 +23,6 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 硬件授权
|
||||
@@ -37,6 +36,17 @@ public class HardAuthController {
|
||||
|
||||
private final HardAuthService hardAuthService;
|
||||
|
||||
/* ************************************* start app start ************************************* */
|
||||
|
||||
@Operation(summary = "app智能柜授权", description = "app智能柜授权")
|
||||
@PostMapping("/app/auth-hard-door")
|
||||
@PreAuthorize("@pms.hasPermission('hard_hardAuth_view')")
|
||||
public R appAuthHardDoor(@RequestBody HardAuthAppDto dto) {
|
||||
return R.ok(hardAuthService.appAuthHardDoor(dto));
|
||||
}
|
||||
|
||||
/* ************************************* end app end ************************************* */
|
||||
|
||||
@Operation(summary = "分页查询", description = "分页查询")
|
||||
@GetMapping("/page-join")
|
||||
@PreAuthorize("@pms.hasPermission('hard_hardAuth_view')")
|
||||
|
||||
+32
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
import com.bsd.pjcloud.common.security.annotation.Inner;
|
||||
import com.bsd.pjcloud.common.security.service.PjcloudUser;
|
||||
import com.bsd.pjcloud.common.security.util.SecurityUtils;
|
||||
import com.bsd.pjcloud.hard.api.constant.HardDoorFlowEnum;
|
||||
@@ -14,6 +15,9 @@ import com.bsd.pjcloud.hard.api.constant.HardDoorOpenTypeEnum;
|
||||
import com.bsd.pjcloud.hard.api.dto.HardDoorFlowOpenDto;
|
||||
import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity;
|
||||
import com.bsd.pjcloud.hard.service.HardDoorFlowService;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -42,7 +46,35 @@ public class HardDoorFlowController {
|
||||
|
||||
/* ************************************* start 远程调用 start ************************************* */
|
||||
|
||||
/**
|
||||
* 处理柜子开门回调
|
||||
*/
|
||||
@Inner()
|
||||
@PostMapping("/dispose-locak-callback")
|
||||
public R disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto) {
|
||||
hardDoorFlowService.disposeLocakCallback(dto);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理柜子视频回调
|
||||
*/
|
||||
@Inner()
|
||||
@PostMapping("/dispose-video-callback")
|
||||
public R disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto) {
|
||||
hardDoorFlowService.disposeVideoCallback(dto);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理柜子状态回调
|
||||
*/
|
||||
@Inner()
|
||||
@PostMapping("/dispose-status-callback")
|
||||
public R disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto) {
|
||||
hardDoorFlowService.disposeStatusCallback(dto);
|
||||
return R.ok();
|
||||
}
|
||||
/* ************************************* end 远程调用 end ************************************* */
|
||||
|
||||
/* ************************************* start app start ************************************* */
|
||||
|
||||
+6
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.common.data.datascope.DataScope;
|
||||
import com.bsd.pjcloud.hard.api.dto.HardAuthAppDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
|
||||
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
|
||||
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
|
||||
@@ -10,4 +11,9 @@ import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
|
||||
public interface HardAuthService extends IService<HardAuthEntity> {
|
||||
|
||||
Page<HardAuthVo> scopePageJoin(Page page, HardAuthDto dto, DataScope dataScope);
|
||||
|
||||
/**
|
||||
* app智能柜授权
|
||||
*/
|
||||
Long appAuthHardDoor(HardAuthAppDto dto);
|
||||
}
|
||||
+7
@@ -5,6 +5,8 @@ import com.bsd.pjcloud.hard.api.dto.HardDoorFlowOpenDto;
|
||||
import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity;
|
||||
import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
|
||||
|
||||
public interface HardDoorFlowService extends IService<HardDoorFlowEntity> {
|
||||
@@ -39,4 +41,9 @@ public interface HardDoorFlowService extends IService<HardDoorFlowEntity> {
|
||||
* 处理视频回调
|
||||
*/
|
||||
void disposeVideoCallback(DoorVideoCallbackDto dto);
|
||||
|
||||
/**
|
||||
* 处理柜子状态回调
|
||||
*/
|
||||
void disposeStatusCallback(DoorStatusCallbackDto dto);
|
||||
}
|
||||
+9
@@ -9,6 +9,7 @@ import com.bsd.pjcloud.admin.api.vo.UserVO;
|
||||
import com.bsd.pjcloud.common.core.util.CollectionUtils;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.data.datascope.DataScope;
|
||||
import com.bsd.pjcloud.hard.api.dto.HardAuthAppDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto;
|
||||
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
|
||||
@@ -46,6 +47,14 @@ public class HardAuthServiceImpl extends ServiceImpl<HardAuthMapper, HardAuthEnt
|
||||
return pageList;
|
||||
}
|
||||
|
||||
/**
|
||||
* app智能柜授权
|
||||
*/
|
||||
@Override
|
||||
public Long appAuthHardDoor(HardAuthAppDto dto) {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
private void disposeList(List<HardAuthVo> list, HardAuthDto dto) {
|
||||
if (ObjectUtil.isEmpty(list)) return;
|
||||
// 设备
|
||||
|
||||
+11
-3
@@ -15,9 +15,7 @@ import com.bsd.pjcloud.hard.mapper.HardDoorFlowMapper;
|
||||
import com.bsd.pjcloud.hard.service.HardDoorFlowService;
|
||||
import com.bsd.pjcloud.hard.service.HardDoorManagerService;
|
||||
import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdDoorApiService;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.*;
|
||||
import com.bsd.pjcloud.thirdparty.vo.door.DoorOpenVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -172,6 +170,16 @@ public class HardDoorFlowServiceImpl extends ServiceImpl<HardDoorFlowMapper, Har
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理柜子状态回调
|
||||
*/
|
||||
@Override
|
||||
public void disposeStatusCallback(DoorStatusCallbackDto dto) {
|
||||
if (ObjectUtil.isEmpty(dto)) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验设备和货柜编号
|
||||
*/
|
||||
|
||||
+1
@@ -36,6 +36,7 @@ public class HardSpuJoinServiceImpl extends ServiceImpl<HardSpuJoinMapper, HardS
|
||||
.eq(HardSpuJoinEntity::getHardDoorNumber, dto.getHardDoorNumber())
|
||||
.eq(HardSpuJoinEntity::getHardDoorId, dto.getHardDoorId())
|
||||
.eq(HardSpuJoinEntity::getCabinetNo, dto.getCabinetNo())
|
||||
.orderByDesc(HardSpuJoinEntity::getSpuId)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(list)) return List.of();
|
||||
List<HardSpuJoinVo> joinList = BeanUtils.toBean(list, HardSpuJoinVo.class);
|
||||
|
||||
+21
-1
@@ -153,8 +153,16 @@ public class HardSpuServiceImpl extends ServiceImpl<HardSpuMapper, HardSpuEntity
|
||||
.eq(HardSpuJoinEntity::getId, dto.getId())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(spuJoinDetail)) throw new RuntimeException("货柜不存在");
|
||||
// 校验商品
|
||||
HardSpuEntity spuDetail = validateSpu(dto.getHardSpuId());
|
||||
// 判断这一层是否重复
|
||||
long doorCount = hardSpuJoinService.count(new LambdaUpdateWrapper<HardSpuJoinEntity>()
|
||||
.eq(HardSpuJoinEntity::getHardDoorNumber, spuJoinDetail.getHardDoorNumber())
|
||||
.eq(HardSpuJoinEntity::getSpuId, spuDetail.getId())
|
||||
);
|
||||
if (doorCount > 0) throw new RuntimeException("该层已有相同商品");
|
||||
LambdaUpdateWrapper<HardSpuJoinEntity> updateObj = new LambdaUpdateWrapper<HardSpuJoinEntity>()
|
||||
.set(HardSpuJoinEntity::getSpuId, dto.getHardSpuId())
|
||||
.set(HardSpuJoinEntity::getSpuId, spuDetail.getId())
|
||||
.eq(HardSpuJoinEntity::getId, dto.getId());
|
||||
hardSpuJoinService.update(updateObj);
|
||||
}
|
||||
@@ -283,6 +291,18 @@ public class HardSpuServiceImpl extends ServiceImpl<HardSpuMapper, HardSpuEntity
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验商品
|
||||
*/
|
||||
private HardSpuEntity validateSpu(Long hardSpuId) {
|
||||
HardSpuEntity spuDetail = baseMapper.selectById(hardSpuId);
|
||||
if (ObjectUtil.isEmpty(spuDetail)) throw new RuntimeException("商品不存在");
|
||||
if (ObjectUtil.equals(spuDetail.getPrice(), 0)) {
|
||||
throw new RuntimeException("商品价格不能为0");
|
||||
}
|
||||
return spuDetail;
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品是否重复
|
||||
*/
|
||||
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
package com.bsd.pjcloud.thirdparty.dto.door;
|
||||
|
||||
import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DoorStatusCallbackDto {
|
||||
/**
|
||||
* 设备编号
|
||||
*/
|
||||
private String deviceCode;
|
||||
|
||||
/**
|
||||
* 1:通电;2:断电
|
||||
*/
|
||||
private Integer powerStatus;
|
||||
|
||||
/**
|
||||
* 在线状态,1:在线;2:离线
|
||||
*/
|
||||
private Integer netStatus;
|
||||
|
||||
/**
|
||||
* 售卖状态。1:在售;2:停售
|
||||
*/
|
||||
private Integer saleStatus;
|
||||
|
||||
/**
|
||||
* sim卡号设备有上报会返回,若一次上报都没有,则返回null。
|
||||
*/
|
||||
private String simSn;
|
||||
|
||||
/**
|
||||
* sim 信号强度
|
||||
* 大于-95 表示信号强度好
|
||||
* -95 到-105 表示信号强度中等
|
||||
* 小于-105 表示信号差
|
||||
*/
|
||||
private Integer signalIntensity;
|
||||
|
||||
/**
|
||||
* 信噪比,体现信道传输质量的参数
|
||||
* 大于 15 表示质量好
|
||||
* 15 到 0 表示质量中等
|
||||
* 小于等于 0 表示质量差
|
||||
*/
|
||||
private Integer signalRatio;
|
||||
|
||||
/**
|
||||
* sim 信号值更新时间。yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
private LocalDateTime signalTime;
|
||||
|
||||
/**
|
||||
* 货柜列表
|
||||
*/
|
||||
private List<DoorStatusVo.Cabinet> cabinetList;
|
||||
|
||||
@Data
|
||||
public static class Cabinet {
|
||||
|
||||
/**
|
||||
* 货柜号(1,2)
|
||||
*/
|
||||
private Integer cabinetNo;
|
||||
|
||||
/**
|
||||
* 锁在线1:在线;2:离线
|
||||
*/
|
||||
private String isLockOnline;
|
||||
|
||||
/**
|
||||
* 锁状态1:锁关;2:锁开
|
||||
*/
|
||||
private Integer lockStatus;
|
||||
|
||||
/**
|
||||
* 门状态1:门关;2:门开
|
||||
*/
|
||||
private Integer doorStatus;
|
||||
|
||||
/**
|
||||
* 货柜售卖状态1:在售;2:停售
|
||||
*/
|
||||
private Integer saleStatus;
|
||||
|
||||
}
|
||||
}
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
package com.bsd.pjcloud.thirdparty.vo.door;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DoorOpenCallbackVo {
|
||||
}
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
package com.bsd.pjcloud.thirdparty.vo.door;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DoorVideoCallbackVo {
|
||||
}
|
||||
+19
-10
@@ -1,6 +1,7 @@
|
||||
package com.bsd.pjcloud.thirdparty.controller.door;
|
||||
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.security.annotation.Inner;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.*;
|
||||
@@ -10,11 +11,16 @@ import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.http.server.ServletServerHttpRequest;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@@ -84,22 +90,25 @@ public class ThirdDoorApiController {
|
||||
@Inner(value = false)
|
||||
@Operation(summary = "门锁开关通知回调")
|
||||
@PostMapping("/callback/open")
|
||||
public R<DoorOpenCallbackVo> callbackOpen(@RequestBody DoorOpenCallbackDto dto) {
|
||||
return R.ok(thirdDoorApiService.callbackOpen(dto));
|
||||
public void callbackOpen(HttpEntity<String> httpEntity, @RequestHeader Map<String, String> headers) {
|
||||
String body = httpEntity.getBody();
|
||||
thirdDoorApiService.callbackOpen(body, headers);
|
||||
}
|
||||
|
||||
@Inner(value = false)
|
||||
@Operation(summary = "视频地址通知回调")
|
||||
@PostMapping("/callback/video")
|
||||
public R<DoorVideoCallbackVo> callbackVideo(@RequestBody DoorVideoCallbackDto dto) {
|
||||
return R.ok(thirdDoorApiService.callbackVideo(dto));
|
||||
public void callbackVideo(HttpEntity<String> httpEntity, @RequestHeader Map<String, String> headers) {
|
||||
String body = httpEntity.getBody();
|
||||
thirdDoorApiService.callbackVideo(body, headers);
|
||||
}
|
||||
|
||||
@Inner(value = false)
|
||||
@Operation(summary = "设备状态通知回调")
|
||||
@PostMapping("/callback/status")
|
||||
public R<DoorStatusVo> callbackStatus(@RequestBody DoorStatusDto dto) {
|
||||
return R.ok(thirdDoorApiService.callbackStatus(dto));
|
||||
public void callbackStatus(HttpEntity<String> httpEntity, @RequestHeader Map<String, String> headers) {
|
||||
String body = httpEntity.getBody();
|
||||
thirdDoorApiService.callbackStatus(body, headers);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+5
-3
@@ -4,6 +4,8 @@ package com.bsd.pjcloud.thirdparty.service;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.*;
|
||||
import com.bsd.pjcloud.thirdparty.vo.door.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ThirdDoorApiService {
|
||||
|
||||
/**
|
||||
@@ -44,15 +46,15 @@ public interface ThirdDoorApiService {
|
||||
/**
|
||||
* 门锁开关通知回调
|
||||
*/
|
||||
DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto);
|
||||
void callbackOpen(String json, Map<String, String> headers);
|
||||
|
||||
/**
|
||||
* 视频地址通知回调
|
||||
*/
|
||||
DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto);
|
||||
void callbackVideo(String json, Map<String, String> headers);
|
||||
|
||||
/**
|
||||
* 设备状态通知回调
|
||||
*/
|
||||
DoorStatusVo callbackStatus(DoorStatusDto dto);
|
||||
void callbackStatus(String json, Map<String, String> headers);
|
||||
}
|
||||
+97
-7
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.thirdparty.service.impl.door;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService;
|
||||
import com.bsd.pjcloud.thirdparty.config.DoorConfig;
|
||||
import com.bsd.pjcloud.thirdparty.dto.door.*;
|
||||
import com.bsd.pjcloud.thirdparty.entity.door.ThirdDoorLogEntity;
|
||||
@@ -31,6 +32,8 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
|
||||
|
||||
private final ThirdDoorLogService doorLogService;
|
||||
|
||||
private final RemoteHardDoorService remoteHardDoorService;
|
||||
|
||||
/**
|
||||
* 设备注册
|
||||
*/
|
||||
@@ -275,25 +278,81 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
|
||||
* 门锁开关通知回调
|
||||
*/
|
||||
@Override
|
||||
public DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto) {
|
||||
return null;
|
||||
public void callbackOpen(String json, Map<String, String> headers) {
|
||||
DoorOpenCallbackDto dto = JSONUtil.toBean(json, DoorOpenCallbackDto.class);
|
||||
boolean isSign = apiParseSign(json, headers);
|
||||
if (!isSign) {
|
||||
log.error("|{}| callbackOpen 签名错误", TAG);
|
||||
return;
|
||||
}
|
||||
long startTime = System.currentTimeMillis();
|
||||
DoorApi.Api api = DoorApi.OPEN_CALLBACK.setBaseUrl(doorConfig.getBaseUrl());
|
||||
ThirdDoorLogEntity logEntity = api.getInitLogEntity();
|
||||
logEntity.setReq(json);
|
||||
try {
|
||||
remoteHardDoorService.disposeLocakCallback(dto);
|
||||
} catch (Exception e) {
|
||||
String error = String.format("|%s||callbackOpen|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace()));
|
||||
log.error(error);
|
||||
logEntity.setError(error);
|
||||
} finally {
|
||||
logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
|
||||
doorLogService.save(logEntity);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 视频地址通知回调
|
||||
*/
|
||||
@Override
|
||||
public DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto) {
|
||||
return null;
|
||||
public void callbackVideo(String json, Map<String, String> headers) {
|
||||
DoorVideoCallbackDto dto = JSONUtil.toBean(json, DoorVideoCallbackDto.class);
|
||||
boolean isSign = apiParseSign(json, headers);
|
||||
if (!isSign) {
|
||||
log.error("|{}| callbackVideo 签名错误", TAG);
|
||||
return;
|
||||
}
|
||||
long startTime = System.currentTimeMillis();
|
||||
DoorApi.Api api = DoorApi.OPEN_CALLBACK.setBaseUrl(doorConfig.getBaseUrl());
|
||||
ThirdDoorLogEntity logEntity = api.getInitLogEntity();
|
||||
logEntity.setReq(json);
|
||||
try {
|
||||
remoteHardDoorService.disposeVideoCallback(dto);
|
||||
} catch (Exception e) {
|
||||
String error = String.format("|%s||callbackVideo|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace()));
|
||||
log.error(error);
|
||||
logEntity.setError(error);
|
||||
} finally {
|
||||
logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
|
||||
doorLogService.save(logEntity);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设备状态通知回调
|
||||
*/
|
||||
@Override
|
||||
public DoorStatusVo callbackStatus(DoorStatusDto dto) {
|
||||
|
||||
return null;
|
||||
public void callbackStatus(String json, Map<String, String> headers) {
|
||||
DoorStatusCallbackDto dto = JSONUtil.toBean(json, DoorStatusCallbackDto.class);
|
||||
boolean isSign = apiParseSign(json, headers);
|
||||
if (!isSign) {
|
||||
log.error("|{}| callbackStatus 签名错误", TAG);
|
||||
return;
|
||||
}
|
||||
long startTime = System.currentTimeMillis();
|
||||
DoorApi.Api api = DoorApi.OPEN_CALLBACK.setBaseUrl(doorConfig.getBaseUrl());
|
||||
ThirdDoorLogEntity logEntity = api.getInitLogEntity();
|
||||
logEntity.setReq(json);
|
||||
try {
|
||||
remoteHardDoorService.disposeStatusCallback(dto);
|
||||
} catch (Exception e) {
|
||||
String error = String.format("|%s||callbackStatus|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace()));
|
||||
log.error(error);
|
||||
logEntity.setError(error);
|
||||
} finally {
|
||||
logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
|
||||
doorLogService.save(logEntity);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -319,4 +378,35 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
|
||||
header.put("sign", List.of(map.get("sign")));
|
||||
return header;
|
||||
}
|
||||
|
||||
/**
|
||||
* 接口解签
|
||||
*/
|
||||
private boolean apiParseSign(String json, Map<String, String> headers) {
|
||||
if (ObjectUtil.isEmpty(headers)) {
|
||||
log.error("|{}|apiParseSign 接口解签错误headers为空dto|{}|headers|{}|", TAG, json, JSONUtil.toJsonStr(headers));
|
||||
return false;
|
||||
}
|
||||
String appid = headers.get("Appid");
|
||||
String noncestr = headers.get("Noncestr");
|
||||
String timestamp = headers.get("Timestamp");
|
||||
String sign = headers.get("Sign");
|
||||
if (ObjectUtil.notEqual(doorConfig.getAppId(), appid)) {
|
||||
log.error("|{}|apiParseSign 接口解签错误appId错误dto|{}|headers|{}|", TAG, json, JSONUtil.toJsonStr(headers));
|
||||
return false;
|
||||
}
|
||||
// 计算正确的sign
|
||||
String successSign = "";
|
||||
successSign += doorConfig.getAppId() + "&";
|
||||
successSign += doorConfig.getAppKey() + "&";
|
||||
successSign += noncestr + "&";
|
||||
successSign += timestamp + "&";
|
||||
successSign += json;
|
||||
String successSignMd5 = DigestUtils.md5Hex(successSign);
|
||||
if (ObjectUtil.notEqual(successSignMd5.toLowerCase(), sign.toLowerCase())) {
|
||||
log.error("|{}|apiParseSign 接口解签错误sign错误dto|{}|headers|{}|", TAG, json, JSONUtil.toJsonStr(headers));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -174,6 +174,7 @@
|
||||
FROM
|
||||
sys_user u
|
||||
LEFT JOIN sys_dept d ON d.dept_id = u.dept_id
|
||||
LEFT JOIN sys_user_role urole ON urole.user_id = u.user_id
|
||||
<where>
|
||||
u.del_flag = '0'
|
||||
<if test="query.userId != null">
|
||||
@@ -193,6 +194,12 @@
|
||||
<if test="query.deptId != null">
|
||||
AND u.dept_id = #{query.deptId}
|
||||
</if>
|
||||
<if test="query.role != null and query.role.size() != 0">
|
||||
and urole.role_id IN
|
||||
<foreach collection="query.role" item="v" open="(" close=")" separator=",">
|
||||
#{v}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="query.deptIds != null and query.deptIds.size() != 0">
|
||||
<choose>
|
||||
<when test="query.isInclude != null and query.isInclude == true">
|
||||
|
||||
Reference in new issue
Block a user