16 Commits

Author SHA1 Message Date
92b65ce6df Merge branch 'dyf-device' into prod 2025-11-27 11:01:58 +08:00
82399cffed Merge branch 'dyf-device' into prod 2025-08-25 14:33:52 +08:00
5538ac96e5 晶全日志配置 2025-08-06 09:48:00 +08:00
b703f80355 晶全日志配置 2025-08-06 09:44:52 +08:00
b3b249ea07 日志配置 2025-08-06 09:20:41 +08:00
aff424e73b Merge branch 'main' into prod 2025-08-06 09:18:43 +08:00
dc513a858a Merge branch 'main' into prod 2025-08-04 09:08:34 +08:00
df5ce7ddd9 Merge branch 'main' into prod 2025-07-31 09:21:10 +08:00
2174dfdb4d Merge branch 'main' into prod 2025-07-23 19:24:27 +08:00
2800b89e06 Merge branch 'main' into prod 2025-07-23 10:55:30 +08:00
637e46c510 Merge branch 'main' into prod 2025-07-21 08:40:34 +08:00
31c2158c8e Merge branch 'main' into prod 2025-07-19 10:22:33 +08:00
c7c21dc358 Merge branch 'main' into prod 2025-07-18 15:17:54 +08:00
a7e0803b00 Merge branch 'main' into prod 2025-07-17 16:42:14 +08:00
55cacbd322 Merge branch 'main' into prod 2025-07-17 09:24:45 +08:00
99ec6eaff0 prod 2025-07-15 08:40:20 +08:00
19 changed files with 37 additions and 98 deletions

View File

@ -11,7 +11,6 @@ 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;
/** /**
@ -40,7 +39,7 @@ public class AppFileController extends BaseController {
* 上传文件 * 上传文件
*/ */
@PostMapping("/upload") @PostMapping("/upload")
public R<Void> upload(@Validated @ModelAttribute AppFileDto bo) throws IOException { public R<Void> upload(@Validated @ModelAttribute AppFileDto bo) {
return toAjax(appFileService.add(bo)); return toAjax(appFileService.add(bo));
} }

View File

@ -8,7 +8,6 @@ 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;
@ -16,7 +15,6 @@ 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;
/** /**
@ -33,38 +31,24 @@ 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;
@ -82,7 +66,6 @@ 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());
@ -96,5 +79,4 @@ public class AppFileService {
} }
return appBusinessFileService.deleteWithValidByIds(List.of(ids), true); return appBusinessFileService.deleteWithValidByIds(List.of(ids), true);
} }
} }

View File

@ -4,7 +4,6 @@ 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;
@ -28,8 +27,6 @@ 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;
@ -62,7 +59,6 @@ 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;
/** /**
@ -213,7 +209,8 @@ public class AppLoginService {
if(ObjectUtil.length(appDeviceBindRecordVos)>0){ if(ObjectUtil.length(appDeviceBindRecordVos)>0){
Set<Long> deviceIds = appDeviceBindRecordVos.stream().map(AppDeviceBindRecordVo::getDeviceId).collect(Collectors.toSet()); // 根据设备id批量删除
List<Long> deviceIds = appDeviceBindRecordVos.stream().map(AppDeviceBindRecordVo::getDeviceId).toList();
appDeviceShareService.deleteByDeviceIds(deviceIds); appDeviceShareService.deleteByDeviceIds(deviceIds);
@ -222,21 +219,6 @@ 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

@ -8,8 +8,8 @@ spring.boot.admin.client:
metadata: metadata:
username: ${spring.boot.admin.client.username} username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password} userpassword: ${spring.boot.admin.client.password}
username: @monitor.username@ username: ${monitor.username}
password: @monitor.password@ password: ${monitor.password}
--- # snail-job 配置 --- # snail-job 配置
snail-job: snail-job:

View File

@ -11,8 +11,8 @@ spring.boot.admin.client:
metadata: metadata:
username: ${spring.boot.admin.client.username} username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password} userpassword: ${spring.boot.admin.client.password}
username: @monitor.username@ username: ${monitor.username}
password: @monitor.password@ password: ${monitor.password}
--- # snail-job 配置 --- # snail-job 配置
snail-job: snail-job:

View File

@ -3,7 +3,6 @@ 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接口
@ -13,5 +12,4 @@ import org.apache.ibatis.annotations.Param;
*/ */
public interface AppDeviceBindRecordMapper extends BaseMapperPlus<AppDeviceBindRecord, AppDeviceBindRecordVo> { public interface AppDeviceBindRecordMapper extends BaseMapperPlus<AppDeviceBindRecord, AppDeviceBindRecordVo> {
Long checkDeviceExistBindRecord(@Param("deviceId") Long deviceId);
} }

View File

@ -10,7 +10,6 @@ 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接口
@ -31,5 +30,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") Set<Long> deviceIds); void deleteByDeviceIds(@Param("deviceIds") List<Long> deviceIds);
} }

View File

@ -4,7 +4,6 @@ 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;
@ -66,6 +65,4 @@ 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,7 +7,6 @@ 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接口
@ -69,5 +68,5 @@ public interface IAppDeviceShareService {
TableDataInfo<AppDeviceShareVo> otherDeviceShareList(AppDeviceShareBo bo, PageQuery pageQuery); TableDataInfo<AppDeviceShareVo> otherDeviceShareList(AppDeviceShareBo bo, PageQuery pageQuery);
void deleteByDeviceIds(Set<Long> deviceIds); void deleteByDeviceIds(List<Long> deviceIds);
} }

View File

@ -130,9 +130,4 @@ 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,7 +23,6 @@ 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业务层处理
@ -169,7 +168,7 @@ public class AppDeviceShareServiceImpl implements IAppDeviceShareService {
} }
@Override @Override
public void deleteByDeviceIds(Set<Long> deviceIds) { public void deleteByDeviceIds(List<Long> deviceIds) {
baseMapper.deleteByDeviceIds(deviceIds); baseMapper.deleteByDeviceIds(deviceIds);
} }
} }

View File

@ -4,7 +4,4 @@ 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

@ -123,12 +123,4 @@ public class DeviceQueryCriteria extends BaseEntity {
*/ */
private Integer onlineStatus; private Integer onlineStatus;
/**
* 绑定状态
* 0 未绑定
* 1 已绑定
*/
@Schema(title = "绑定状态")
private Integer bindingStatus;
} }

View File

@ -1,10 +1,13 @@
package com.fuyuanshen.equipment.service; package com.fuyuanshen.equipment.service;
import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.fuyuanshen.common.core.domain.PageResult;
import com.fuyuanshen.common.mybatis.core.page.PageQuery; import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.DeviceType;
import com.fuyuanshen.equipment.domain.dto.AppDeviceBo; import com.fuyuanshen.equipment.domain.dto.AppDeviceBo;
import com.fuyuanshen.equipment.domain.form.DeviceForm; import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;

View File

@ -74,9 +74,6 @@
<if test="criteria.onlineStatus != null"> <if test="criteria.onlineStatus != null">
and d.online_status = #{criteria.onlineStatus} and d.online_status = #{criteria.onlineStatus}
</if> </if>
<if test="criteria.bindingStatus != null">
and d.binding_status = #{criteria.bindingStatus}
</if>
<if test="criteria.groupId != null"> <if test="criteria.groupId != null">
and d.group_id = #{criteria.groupId} and d.group_id = #{criteria.groupId}
</if> </if>
@ -308,7 +305,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;
} }

16
pom.xml
View File

@ -85,10 +85,10 @@
<monitor.username>fys</monitor.username> <monitor.username>fys</monitor.username>
<monitor.password>123456</monitor.password> <monitor.password>123456</monitor.password>
</properties> </properties>
<activation> <!-- <activation> -->
<!-- 默认环境 --> <!-- &lt;!&ndash; 默认环境 &ndash;&gt; -->
<activeByDefault>true</activeByDefault> <!-- <activeByDefault>true</activeByDefault> -->
</activation> <!-- </activation> -->
</profile> </profile>
<profile> <profile>
<id>prod</id> <id>prod</id>
@ -98,10 +98,10 @@
<monitor.username>fys</monitor.username> <monitor.username>fys</monitor.username>
<monitor.password>123456</monitor.password> <monitor.password>123456</monitor.password>
</properties> </properties>
<!-- <activation> --> <activation>
<!-- &lt;!&ndash; 默认环境 &ndash;&gt; --> <!-- 默认环境 -->
<!-- <activeByDefault>true</activeByDefault> --> <activeByDefault>true</activeByDefault>
<!-- </activation> --> </activation>
</profile> </profile>
<profile> <profile>
<id>jingquan</id> <id>jingquan</id>