feat:充值审核通过排序

This commit is contained in:
dzc committed 2025-04-09 12:40:04 +08:00
1 parent 9d168f802d
commit 281c05e2c4
15 files changed
+390 -35

No files matched your search

@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.controller.manager;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,6 +11,7 @@ import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.hard.api.dto.manager.HardDoorManagerDto;
import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity;
import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo;
import com.bsd.pjcloud.hard.service.HardDoorManagerService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
@@ -35,6 +37,15 @@ public class HardDoorManagerController {
private final HardDoorManagerService hardDoorManagerService;
@Operation(summary = "绑定设备", description = "绑定设备")
@PostMapping("/bind")
@PreAuthorize("@pms.hasPermission('hard_hardDoorManager_add')")
public R bind(@RequestBody HardDoorManagerEntity dto) {
if (ObjectUtil.isEmpty(dto.getImei())) throw new RuntimeException("设备IMEI卡号不能为空");
hardDoorManagerService.bind(dto);
return R.ok();
}
@Operation(summary = "分页查询", description = "分页查询")
@GetMapping("/page")
@PreAuthorize("@pms.hasPermission('hard_hardDoorManager_view')")
@@ -58,20 +69,11 @@ public class HardDoorManagerController {
return R.ok(hardDoorManagerService.getById(id));
}
@Operation(summary = "新增智能柜设置", description = "新增智能柜设置")
@SysLog("新增智能柜设置")
@PostMapping
@PreAuthorize("@pms.hasPermission('hard_hardDoorManager_add')")
public R save(@RequestBody HardDoorManagerEntity hardDoorManager) {
return R.ok(hardDoorManagerService.save(hardDoorManager));
}
@Operation(summary = "修改智能柜设置", description = "修改智能柜设置")
@SysLog("修改智能柜设置")
@PutMapping
@PreAuthorize("@pms.hasPermission('hard_hardDoorManager_edit')")
public R updateById(@RequestBody HardDoorManagerEntity hardDoorManager) {
return R.ok(hardDoorManagerService.updateById(hardDoorManager));
@Operation(summary = "根据硬件id查询详情", description = "根据硬件id查询详情")
@GetMapping("/get-by-hard-id")
@PreAuthorize("@pms.hasPermission('hard_hardDoorManager_view')")
public R<HardDoorManagerVo> getByHardId(@RequestParam Long hardId) {
return R.ok(hardDoorManagerService.getByHardId(hardId));
}
@Operation(summary = "通过id删除智能柜设置", description = "通过id删除智能柜设置")
@@ -14,4 +14,5 @@ public interface HardDoorManagerMapper extends PjcloudBaseMapper<HardDoorManager
Page<HardDoorManagerVo> scopePageJoin(Page page, @Param("dto") HardDoorManagerDto dto, DataScope dataScope);
HardDoorManagerVo pageJoin(@Param("hardId") Long hardId);
}
@@ -11,4 +11,13 @@ public interface HardDoorManagerService extends IService<HardDoorManagerEntity>
Page<HardDoorManagerVo> scopePageJoin(Page page, HardDoorManagerDto dto, DataScope dataScope);
/**
* 根据硬件id查询详情
*/
HardDoorManagerVo getByHardId(Long hardId);
/**
* 绑定设备
*/
void bind(HardDoorManagerEntity dto);
}
@@ -20,4 +20,24 @@ public class HardDoorManagerServiceImpl extends ServiceImpl<HardDoorManagerMappe
public Page<HardDoorManagerVo> scopePageJoin(Page page, HardDoorManagerDto dto, DataScope dataScope) {
return baseMapper.scopePageJoin(page, dto, dataScope);
}
/**
* 根据硬件id查询详情
*/
@Override
public HardDoorManagerVo getByHardId(Long hardId) {
return baseMapper.pageJoin(hardId);
}
/**
* 绑定设备
*/
@Override
public void bind(HardDoorManagerEntity dto) {
HardDoorManagerEntity saveOrUpdate = new HardDoorManagerEntity();
saveOrUpdate.setId(dto.getId());
saveOrUpdate.setHardId(dto.getHardId());
saveOrUpdate.setImei(dto.getImei());
baseMapper.insertOrUpdate(saveOrUpdate);
}
}
@@ -16,16 +16,19 @@ import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.hard.api.constant.HardTypeEnum;
import com.bsd.pjcloud.hard.api.dto.HardGroupDto;
import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto;
import com.bsd.pjcloud.hard.api.dto.hard.CurrentUserHardTypeInfoDto;
import com.bsd.pjcloud.hard.api.dto.hard.HardBindDto;
import com.bsd.pjcloud.hard.api.entity.HardGroupEntity;
import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity;
import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity;
import com.bsd.pjcloud.hard.api.utils.HardUtil;
import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo;
import com.bsd.pjcloud.hard.mapper.HardGroupMapper;
import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper;
import com.bsd.pjcloud.hard.service.HardDoorManagerService;
import com.bsd.pjcloud.hard.service.HardManagerService;
import com.bsd.pjcloud.hard.mqtt.config.MqttConfig;
import com.bsd.pjcloud.hard.utils.MqTopicUtil;
@@ -54,6 +57,8 @@ public class HardManagerServiceImpl extends ServiceImpl<HardManagerMapper, HardM
private final MqttConfig mqttConfig;
private final HardDoorManagerService hardDoorManagerService;
private final HardGroupMapper hardGroupMapper;
private final RemoteUserService userService;
@@ -264,7 +269,6 @@ public class HardManagerServiceImpl extends ServiceImpl<HardManagerMapper, HardM
return count > 0;
}
private String createMqConfigByAction(Long groupId, Long deptId, Long hardId, Integer action) {
MqTopicUtil eventDto = MqTopicUtil.builder().groupId(groupId).deptId(deptId).hardId(hardId).build();
if (ObjectUtil.equals(action, 1)) {
@@ -67,15 +67,26 @@
</if>
</sql>
<select id="scopePageJoin" resultType="com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo">
<sql id="selectPage">
<include refid="selectA"/>
m.name as hardName,
m.type as hardType
from hard_door_manager a
left join hard_manager m on m.id = a.hard_id
</sql>
<select id="scopePageJoin" resultType="com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo">
<include refid="selectPage"/>
<where>
<include refid="whereA"/>
</where>
order by a.create_time desc , a.id desc
</select>
<select id="pageJoin" resultType="com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo">
<include refid="selectPage"/>
<where>
a.hard_id = #{hardId}
</where>
</select>
</mapper>
@@ -0,0 +1,65 @@
package com.bsd.pjcloud.thirdparty.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.thirdparty.dto.door.*;
import com.bsd.pjcloud.thirdparty.vo.door.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(contextId = "remoterThirdDoorApiService", value = ServiceNameConstants.THIRDPARTY_SERVICE)
public interface RemoterThirdDoorApiService {
/**
* 设备注册
*/
@NoToken
@PostMapping("/third-door/register")
R<DoorRegisterVo> register(@RequestBody DoorRegisterDto dto);
/**
* 设备信息绑定
*/
@NoToken
@PostMapping("/third-door/bind")
R<DoorBindVo> bind(@RequestBody DoorBindDto dto);
/**
* 查询设备状态
*/
@NoToken
@PostMapping("/third-door/status")
R<DoorStatusVo> status(@RequestBody DoorStatusDto dto);
/**
* 设备重启
*/
@NoToken
@PostMapping("/third-door/restart")
R<DoorRestartVo> restart(@RequestBody DoorRestartDto dto);
/**
* 音量设置
*/
@NoToken
@PostMapping("/third-door/volume")
R<DoorVolumeVo> volume(@RequestBody DoorVolumeDto dto);
/**
* 音量设置
*/
@NoToken
@PostMapping("/third-door/open")
R<DoorOpenVo> open(@RequestBody DoorOpenDto dto);
/**
* 音量设置
*/
@NoToken
@PostMapping("/third-door/video")
R<DoorVideoVo> video(@RequestBody DoorVideoDto dto);
}
@@ -12,6 +12,8 @@ public class DoorBaseVo {
private String message;
private Object data;
public boolean isSuccess() {
return ObjectUtil.equal(code, DoorBaseVo.successCode);
}
@@ -0,0 +1,7 @@
package com.bsd.pjcloud.thirdparty.vo.door;
import lombok.Data;
@Data
public class DoorVideoCallbackVo {
}
@@ -1,2 +1,3 @@
com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdDoorApiService
com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdPartyAuthService
com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdZyService
@@ -3,9 +3,9 @@ package com.bsd.pjcloud.thirdparty.controller.door;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto;
import com.bsd.pjcloud.thirdparty.dto.door.*;
import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService;
import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo;
import com.bsd.pjcloud.thirdparty.vo.door.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -25,13 +25,84 @@ public class ThirdDoorApiController {
private final ThirdDoorApiService thirdDoorApiService;
/* ************************************* start 原创调用 start ************************************* */
/* ************************************* start 远程调用 start ************************************* */
@Inner
@Operation(summary = "本地一卡通交易数据同步")
@Operation(summary = "设备注册")
@PostMapping("/register")
public R<DoorRegisterVo> register(@RequestBody DoorRegisterDto dto) {
return R.ok(thirdDoorApiService.register(dto));
}
/* ************************************* end 原创调用 end ************************************* */
@Inner
@Operation(summary = "设备信息绑定")
@PostMapping("/bind")
public R<DoorBindVo> bind(@RequestBody DoorBindDto dto) {
return R.ok(thirdDoorApiService.bind(dto));
}
@Inner
@Operation(summary = "查询设备状态")
@PostMapping("/status")
public R<DoorStatusVo> status(@RequestBody DoorStatusDto dto) {
return R.ok(thirdDoorApiService.status(dto));
}
@Inner
@Operation(summary = "设备重启")
@PostMapping("/restart")
public R<DoorRestartVo> restart(@RequestBody DoorRestartDto dto) {
return R.ok(thirdDoorApiService.restart(dto));
}
@Inner
@Operation(summary = "音量设置")
@PostMapping("/volume")
public R<DoorVolumeVo> volume(@RequestBody DoorVolumeDto dto) {
return R.ok(thirdDoorApiService.volume(dto));
}
@Inner
@Operation(summary = "请求开锁")
@PostMapping("/open")
public R<DoorOpenVo> open(@RequestBody DoorOpenDto dto) {
return R.ok(thirdDoorApiService.open(dto));
}
@Inner
@Operation(summary = "调取另一个摄像头视频")
@PostMapping("/video")
public R<DoorVideoVo> video(@RequestBody DoorVideoDto dto) {
return R.ok(thirdDoorApiService.video(dto));
}
/* ************************************* end 远程调用 end ************************************* */
/* ************************************* start 回调 start ************************************* */
@Inner(value = false)
@Operation(summary = "门锁开关通知回调")
@PostMapping("/callback/open")
public R<DoorOpenCallbackVo> callbackOpen(@RequestBody DoorOpenCallbackDto dto) {
return R.ok(thirdDoorApiService.callbackOpen(dto));
}
@Inner(value = false)
@Operation(summary = "视频地址通知回调")
@PostMapping("/callback/open")
public R<DoorVideoCallbackVo> callbackVideo(@RequestBody DoorVideoCallbackDto dto) {
return R.ok(thirdDoorApiService.callbackVideo(dto));
}
@Inner(value = false)
@Operation(summary = "设备状态通知回调")
@PostMapping("/callback/open")
public R<DoorStatusVo> callbackStatus(@RequestBody DoorStatusDto dto) {
return R.ok(thirdDoorApiService.callbackStatus(dto));
}
/* ************************************* start 回调 start ************************************* */
}
@@ -1,8 +1,8 @@
package com.bsd.pjcloud.thirdparty.service;
import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto;
import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo;
import com.bsd.pjcloud.thirdparty.dto.door.*;
import com.bsd.pjcloud.thirdparty.vo.door.*;
public interface ThirdDoorApiService {
@@ -11,5 +11,48 @@ public interface ThirdDoorApiService {
*/
DoorRegisterVo register(DoorRegisterDto dto);
/**
* 设备信息绑定
*/
DoorBindVo bind(DoorBindDto dto);
/**
* 查询设备状态
*/
DoorStatusVo status(DoorStatusDto dto);
/**
* 设备重启
*/
DoorRestartVo restart(DoorRestartDto dto);
/**
* 音量设置
*/
DoorVolumeVo volume(DoorVolumeDto dto);
/**
* 请求开锁
*/
DoorOpenVo open(DoorOpenDto dto);
/**
* 调取另一个摄像头视频
*/
DoorVideoVo video(DoorVideoDto dto);
/**
* 门锁开关通知回调
*/
DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto);
/**
* 视频地址通知回调
*/
DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto);
/**
* 设备状态通知回调
*/
DoorStatusVo callbackStatus(DoorStatusDto dto);
}
@@ -1,22 +1,30 @@
package com.bsd.pjcloud.thirdparty.service.impl.door;
import cn.hutool.http.HttpRequest;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto;
import com.bsd.pjcloud.thirdparty.dto.door.*;
import com.bsd.pjcloud.thirdparty.entity.door.ThirdDoorLogEntity;
import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService;
import com.bsd.pjcloud.thirdparty.service.ThirdDoorLogService;
import com.bsd.pjcloud.thirdparty.utils.door.api.DoorApi;
import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo;
import com.bsd.pjcloud.thirdparty.vo.door.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.Arrays;
@Service
@Validated
@Slf4j
@RequiredArgsConstructor
public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
private final String TAG = "智能柜api";
private final ThirdDoorLogService doorLogService;
/**
* 设备注册
*/
@@ -24,13 +32,120 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
public DoorRegisterVo register(DoorRegisterDto dto) {
long startTime = System.currentTimeMillis();
DoorApi.Api registerApi = DoorApi.REGISTER;
ThirdDoorLogEntity logEntity = registerApi.getInitLogEntity();
logEntity.setReq(JSONUtil.toJsonStr(dto));
try {
String res = registerApi.getHttpRequest().body(JSONUtil.toJsonStr(dto)).execute().body();
String body = JSONUtil.toJsonStr(dto);
String res = registerApi.getHttpRequest().body(body).execute().body();
if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空");
logEntity.setRes(res);
DoorBaseVo doorBaseVo = JSONUtil.toBean(res, DoorBaseVo.class);
if (!doorBaseVo.isSuccess()) {
throw new RuntimeException(String.format("请求错误res|%s|url|%s|body|%s|", res, registerApi, body));
}
return JSONUtil.toBean(res, DoorRegisterVo.class);
} catch (Exception e) {
String error = String.format("|%s||register|意外的错误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);
}
return null;
}
/**
* 设备信息绑定
*/
@Override
public DoorBindVo bind(DoorBindDto dto) {
long startTime = System.currentTimeMillis();
DoorApi.Api registerApi = DoorApi.REGISTER;
ThirdDoorLogEntity logEntity = registerApi.getInitLogEntity();
logEntity.setReq(JSONUtil.toJsonStr(dto));
try {
String body = JSONUtil.toJsonStr(dto);
String res = registerApi.getHttpRequest().body(body).execute().body();
if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空");
logEntity.setRes(res);
DoorBaseVo doorBaseVo = JSONUtil.toBean(res, DoorBaseVo.class);
if (!doorBaseVo.isSuccess()) {
throw new RuntimeException(String.format("请求错误res|%s|url|%s|body|%s|", res, registerApi, body));
}
return JSONUtil.toBean(res, DoorBindVo.class);
} catch (Exception e) {
String error = String.format("|%s||bind|意外的错误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);
}
return null;
}
/**
* 查询设备状态
*/
@Override
public DoorStatusVo status(DoorStatusDto dto) {
return null;
}
/**
* 设备重启
*/
@Override
public DoorRestartVo restart(DoorRestartDto dto) {
return null;
}
/**
* 音量设置
*/
@Override
public DoorVolumeVo volume(DoorVolumeDto dto) {
return null;
}
/**
* 请求开锁
*/
@Override
public DoorOpenVo open(DoorOpenDto dto) {
return null;
}
/**
* 调取另一个摄像头视频
*/
@Override
public DoorVideoVo video(DoorVideoDto dto) {
return null;
}
/**
* 门锁开关通知回调
*/
@Override
public DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto) {
return null;
}
/**
* 视频地址通知回调
*/
@Override
public DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto) {
return null;
}
/**
* 设备状态通知回调
*/
@Override
public DoorStatusVo callbackStatus(DoorStatusDto dto) {
return null;
}
}
@@ -12,9 +12,6 @@ import org.springframework.stereotype.Service;
/**
* 智能柜日志
*
* @author dzc
* @date 2025-04-08 14:26:47
*/
@Service
public class ThirdDoorLogServiceImpl extends ServiceImpl<ThirdDoorLogMapper, ThirdDoorLogEntity> implements ThirdDoorLogService {
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum;
import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeApplyDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.entity.recharge.WalletRechargeApplyEntity;
@@ -65,9 +66,15 @@ public interface WalletRechargeApplyMapper extends PjcloudBaseMapper<WalletRecha
WalletRechargeApplyEntity::getProcessTime,
ObjectUtil.isNotEmpty(dto.getProcessTimeList()) ? dto.getProcessTimeList()[0] : null,
ObjectUtil.isNotEmpty(dto.getProcessTimeList()) ? dto.getProcessTimeList()[1] : null
)
.orderByDesc(WalletRechargeApplyEntity::getCreateTime)
.orderByDesc(WalletRechargeApplyEntity::getId);
);
if (ObjectUtil.equals(dto.getProcessStatus(), TaskCheckStatusEnum.RESULT.getCode())) {
wrapper.orderByDesc(WalletRechargeApplyEntity::getProcessTime)
.orderByDesc(WalletRechargeApplyEntity::getId);
} else {
wrapper.orderByDesc(WalletRechargeApplyEntity::getCreateTime)
.orderByDesc(WalletRechargeApplyEntity::getId);
}
Page list = selectPageByScope(page, wrapper, DataScope.of());
list.setRecords(BeanUtils.toBean(list.getRecords(), WalletRechargeApplyVo.class));
return list;