feat:人员角色搜索

This commit is contained in:
dzc committed 2025-04-15 16:57:48 +08:00
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>
@@ -0,0 +1,7 @@
package com.bsd.pjcloud.hard.api.dto;
import lombok.Data;
@Data
public class HardAuthAppDto {
}
@@ -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,2 +1,3 @@
com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService
com.bsd.pjcloud.hard.api.feign.RemoteHardOrderService
com.bsd.pjcloud.hard.api.feign.RemoteHardThirdSelfZyService
@@ -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')")
@@ -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 ************************************* */
@@ -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);
}
@@ -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,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;
// 设备
@@ -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)) {
}
}
/**
* 校验设备和货柜编号
*/
@@ -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);
@@ -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;
}
/**
* 商品是否重复
*/
@@ -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;
}
}
@@ -1,7 +0,0 @@
package com.bsd.pjcloud.thirdparty.vo.door;
import lombok.Data;
@Data
public class DoorOpenCallbackVo {
}
@@ -1,7 +0,0 @@
package com.bsd.pjcloud.thirdparty.vo.door;
import lombok.Data;
@Data
public class DoorVideoCallbackVo {
}
@@ -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);
}
@@ -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);
}
@@ -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">