4 Commits

Author SHA1 Message Date
b33ee00dbd APP文件上传 2025-12-01 10:34:41 +08:00
c8f9cc4f31 Merge branch 'dyf-device' into 6170 2025-11-28 10:17:42 +08:00
d57d17dc50 登录提示去掉 2025-11-28 09:15:35 +08:00
20ddbf6e05 app注销删除相关联数据2 2025-11-27 11:16:07 +08:00
14 changed files with 73 additions and 20 deletions

View File

@ -11,6 +11,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -39,7 +40,7 @@ public class AppFileController extends BaseController {
* 上传文件 * 上传文件
*/ */
@PostMapping("/upload") @PostMapping("/upload")
public R<Void> upload(@Validated @ModelAttribute AppFileDto bo) { public R<Void> upload(@Validated @ModelAttribute AppFileDto bo) throws IOException {
return toAjax(appFileService.add(bo)); return toAjax(appFileService.add(bo));
} }

View File

@ -8,6 +8,7 @@ import com.fuyuanshen.common.core.exception.ServiceException;
import com.fuyuanshen.common.oss.core.OssClient; import com.fuyuanshen.common.oss.core.OssClient;
import com.fuyuanshen.common.oss.factory.OssFactory; import com.fuyuanshen.common.oss.factory.OssFactory;
import com.fuyuanshen.common.satoken.utils.AppLoginHelper; import com.fuyuanshen.common.satoken.utils.AppLoginHelper;
import com.fuyuanshen.equipment.utils.FileHashUtil;
import com.fuyuanshen.system.domain.vo.SysOssVo; import com.fuyuanshen.system.domain.vo.SysOssVo;
import com.fuyuanshen.system.service.ISysOssService; import com.fuyuanshen.system.service.ISysOssService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -15,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -31,24 +33,38 @@ public class AppFileService {
private final IAppBusinessFileService appBusinessFileService; private final IAppBusinessFileService appBusinessFileService;
private final FileHashUtil fileHashUtil;
private final ISysOssService ossService;
public List<AppFileVo> list(AppBusinessFileBo bo) { public List<AppFileVo> list(AppBusinessFileBo bo) {
// bo.setCreateBy(AppLoginHelper.getUserId()); // bo.setCreateBy(AppLoginHelper.getUserId());
return appBusinessFileService.queryAppFileList(bo); return appBusinessFileService.queryAppFileList(bo);
} }
public Boolean add(AppFileDto bo) {
/**
* APP文件上传
*/
public Boolean add(AppFileDto bo) throws IOException {
MultipartFile[] files = bo.getFiles(); MultipartFile[] files = bo.getFiles();
if(files == null || files.length == 0){ if (files == null || files.length == 0) {
throw new ServiceException("请选择要上传的文件"); throw new ServiceException("请选择要上传的文件");
} }
if(files.length > 5){ if (files.length > 5) {
throw new ServiceException("最多只能上传5个文件"); throw new ServiceException("最多只能上传5个文件");
} }
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
MultipartFile file = files[i]; MultipartFile file = files[i];
// 上传文件 // 上传文件
SysOssVo upload = sysOssService.upload(file); // SysOssVo upload = sysOssService.upload(file);
String fileHash = fileHashUtil.hash(file);
SysOssVo upload = ossService.updateHash(file, fileHash);
// 强制将HTTP替换为HTTPS
if (upload.getUrl() != null && upload.getUrl().startsWith("http://")) {
upload.setUrl(upload.getUrl().replaceFirst("^http://", "https://"));
}
if (upload == null) { if (upload == null) {
return false; return false;
@ -66,6 +82,7 @@ public class AppFileService {
return true; return true;
} }
public Boolean delete(Long[] ids) { public Boolean delete(Long[] ids) {
AppBusinessFileBo bo = new AppBusinessFileBo(); AppBusinessFileBo bo = new AppBusinessFileBo();
// bo.setCreateBy(AppLoginHelper.getUserId()); // bo.setCreateBy(AppLoginHelper.getUserId());
@ -79,4 +96,5 @@ public class AppFileService {
} }
return appBusinessFileService.deleteWithValidByIds(List.of(ids), true); return appBusinessFileService.deleteWithValidByIds(List.of(ids), true);
} }
} }

View File

@ -4,6 +4,7 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.fuyuanshen.app.domain.bo.AppDeviceBindRecordBo; import com.fuyuanshen.app.domain.bo.AppDeviceBindRecordBo;
import com.fuyuanshen.app.domain.bo.AppDeviceShareBo; import com.fuyuanshen.app.domain.bo.AppDeviceShareBo;
import com.fuyuanshen.app.domain.vo.AppDeviceBindRecordVo; import com.fuyuanshen.app.domain.vo.AppDeviceBindRecordVo;
@ -27,6 +28,8 @@ import com.fuyuanshen.common.satoken.utils.AppLoginHelper;
import com.fuyuanshen.common.satoken.utils.LoginHelper; import com.fuyuanshen.common.satoken.utils.LoginHelper;
import com.fuyuanshen.common.tenant.exception.TenantException; import com.fuyuanshen.common.tenant.exception.TenantException;
import com.fuyuanshen.common.tenant.helper.TenantHelper; import com.fuyuanshen.common.tenant.helper.TenantHelper;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.service.DeviceService;
import com.fuyuanshen.system.domain.vo.SysTenantVo; import com.fuyuanshen.system.domain.vo.SysTenantVo;
import com.fuyuanshen.system.service.ISysTenantService; import com.fuyuanshen.system.service.ISysTenantService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -59,6 +62,7 @@ public class AppLoginService {
private final IAppUserService appUserService; private final IAppUserService appUserService;
private final IAppDeviceShareService appDeviceShareService; private final IAppDeviceShareService appDeviceShareService;
private final IAppDeviceBindRecordService appDeviceBindRecordService; private final IAppDeviceBindRecordService appDeviceBindRecordService;
private final DeviceService deviceService;
/** /**
@ -209,8 +213,7 @@ public class AppLoginService {
if(ObjectUtil.length(appDeviceBindRecordVos)>0){ if(ObjectUtil.length(appDeviceBindRecordVos)>0){
// 根据设备id批量删除 Set<Long> deviceIds = appDeviceBindRecordVos.stream().map(AppDeviceBindRecordVo::getDeviceId).collect(Collectors.toSet());
List<Long> deviceIds = appDeviceBindRecordVos.stream().map(AppDeviceBindRecordVo::getDeviceId).toList();
appDeviceShareService.deleteByDeviceIds(deviceIds); appDeviceShareService.deleteByDeviceIds(deviceIds);
@ -219,6 +222,21 @@ public class AppLoginService {
.collect(Collectors.toList()); .collect(Collectors.toList());
appDeviceBindRecordService.deleteWithValidByIds(ids, true); appDeviceBindRecordService.deleteWithValidByIds(ids, true);
log.info("删除绑定关系表数据ids={}",ids); log.info("删除绑定关系表数据ids={}",ids);
// 检查设备id是否存在绑定关系
for (Long deviceId : deviceIds){
// 根据设备id查询是否存在绑定关系
Long count = appDeviceBindRecordService.checkDeviceExistBindRecord(deviceId);
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id",deviceId);
if(count>0){
updateWrapper.set("binding_status",1);
}else{
updateWrapper.set("binding_status",0);
}
deviceService.update(updateWrapper);
}
} }
if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) { if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) {

View File

@ -101,13 +101,13 @@ public class AuthController {
// 登录 // 登录
LoginVo loginVo = IAuthStrategy.login(body, client, grantType); LoginVo loginVo = IAuthStrategy.login(body, client, grantType);
Long userId = LoginHelper.getUserId(); // Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> { // scheduledExecutorService.schedule(() -> {
SseMessageDto dto = new SseMessageDto(); // SseMessageDto dto = new SseMessageDto();
dto.setMessage("欢迎登录fys-Vue-Plus后台管理系统"); // dto.setMessage("欢迎登录fys-Vue-Plus后台管理系统");
dto.setUserIds(List.of(userId)); // dto.setUserIds(List.of(userId));
SseMessageUtils.publishMessage(dto); // SseMessageUtils.publishMessage(dto);
}, 5, TimeUnit.SECONDS); // }, 5, TimeUnit.SECONDS);
return R.ok(loginVo); return R.ok(loginVo);
} }

View File

@ -3,6 +3,7 @@ package com.fuyuanshen.app.mapper;
import com.fuyuanshen.app.domain.AppDeviceBindRecord; import com.fuyuanshen.app.domain.AppDeviceBindRecord;
import com.fuyuanshen.app.domain.vo.AppDeviceBindRecordVo; import com.fuyuanshen.app.domain.vo.AppDeviceBindRecordVo;
import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus; import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/** /**
* 设备绑定关系Mapper接口 * 设备绑定关系Mapper接口
@ -12,4 +13,5 @@ import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus;
*/ */
public interface AppDeviceBindRecordMapper extends BaseMapperPlus<AppDeviceBindRecord, AppDeviceBindRecordVo> { public interface AppDeviceBindRecordMapper extends BaseMapperPlus<AppDeviceBindRecord, AppDeviceBindRecordVo> {
Long checkDeviceExistBindRecord(@Param("deviceId") Long deviceId);
} }

View File

@ -10,6 +10,7 @@ import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 设备分享Mapper接口 * 设备分享Mapper接口
@ -30,5 +31,5 @@ public interface AppDeviceShareMapper extends BaseMapperPlus<AppDeviceShare, App
*/ */
Page<AppDeviceShareVo> selectWebDeviceShareList(@Param("bo") AppDeviceShareBo bo, Page<AppDeviceShareVo> page); Page<AppDeviceShareVo> selectWebDeviceShareList(@Param("bo") AppDeviceShareBo bo, Page<AppDeviceShareVo> page);
void deleteByDeviceIds(@Param("deviceIds") List<Long> deviceIds); void deleteByDeviceIds(@Param("deviceIds") Set<Long> deviceIds);
} }

View File

@ -4,6 +4,7 @@ import com.fuyuanshen.app.domain.vo.AppDeviceBindRecordVo;
import com.fuyuanshen.app.domain.bo.AppDeviceBindRecordBo; import com.fuyuanshen.app.domain.bo.AppDeviceBindRecordBo;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.common.mybatis.core.page.PageQuery; import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import org.apache.ibatis.annotations.Param;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -65,4 +66,6 @@ public interface IAppDeviceBindRecordService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Long checkDeviceExistBindRecord(Long deviceId);
} }

View File

@ -7,6 +7,7 @@ import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 设备分享Service接口 * 设备分享Service接口
@ -68,5 +69,5 @@ public interface IAppDeviceShareService {
TableDataInfo<AppDeviceShareVo> otherDeviceShareList(AppDeviceShareBo bo, PageQuery pageQuery); TableDataInfo<AppDeviceShareVo> otherDeviceShareList(AppDeviceShareBo bo, PageQuery pageQuery);
void deleteByDeviceIds(List<Long> deviceIds); void deleteByDeviceIds(Set<Long> deviceIds);
} }

View File

@ -130,4 +130,9 @@ public class AppDeviceBindRecordServiceImpl implements IAppDeviceBindRecordServi
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
@Override
public Long checkDeviceExistBindRecord(Long deviceId) {
return baseMapper.checkDeviceExistBindRecord(deviceId);
}
} }

View File

@ -23,6 +23,7 @@ import com.fuyuanshen.app.service.IAppDeviceShareService;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.Set;
/** /**
* 设备分享Service业务层处理 * 设备分享Service业务层处理
@ -168,7 +169,7 @@ public class AppDeviceShareServiceImpl implements IAppDeviceShareService {
} }
@Override @Override
public void deleteByDeviceIds(List<Long> deviceIds) { public void deleteByDeviceIds(Set<Long> deviceIds) {
baseMapper.deleteByDeviceIds(deviceIds); baseMapper.deleteByDeviceIds(deviceIds);
} }
} }

View File

@ -4,4 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuyuanshen.app.mapper.AppDeviceBindRecordMapper"> <mapper namespace="com.fuyuanshen.app.mapper.AppDeviceBindRecordMapper">
<select id="checkDeviceExistBindRecord" resultType="java.lang.Long">
select count(1) from app_device_bind_record where device_id = #{deviceId}
</select>
</mapper> </mapper>

View File

@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuyuanshen.app.mapper.AppDeviceShareMapper"> <mapper namespace="com.fuyuanshen.app.mapper.AppDeviceShareMapper">
<delete id="deleteByDeviceIds"> <delete id="deleteByDeviceIds">
delete from app_device_share where device_id in delete from app_device_share where device_id in
<foreach item="item" collection="deviceIds" separator="," open="(" close=")"> <foreach item="item" collection="deviceIds" separator="," open="(" close=")">
#{item} #{item}
</foreach> </foreach>

View File

@ -308,7 +308,7 @@
<select id="getLocationHistory" resultType="com.fuyuanshen.equipment.domain.vo.LocationHistoryVo"> <select id="getLocationHistory" resultType="com.fuyuanshen.equipment.domain.vo.LocationHistoryVo">
select a.id,a.device_name,a.device_type,b.type_name deviceTypeName,a.device_imei,a.device_mac from device a select a.id,a.device_name,a.device_type,b.type_name deviceTypeName,a.device_imei,a.device_mac from device a
inner join device_type b on a.device_type = b.id inner join device_type b on a.device_type = b.id
where b.communication_mode in (0, 2)
<if test="bo.deviceType != null"> <if test="bo.deviceType != null">
AND b.id = #{bo.deviceType} AND b.id = #{bo.deviceType}
</if> </if>

View File

@ -72,10 +72,10 @@ public class SysOssVo implements Serializable {
* 服务商 * 服务商
*/ */
private String service; private String service;
/** /**
* 内容哈希 * 内容哈希
*/ */
private String fileHash; private String fileHash;
} }