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.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
/**
@ -40,7 +39,7 @@ public class AppFileController extends BaseController {
* 上传文件
*/
@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));
}

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.factory.OssFactory;
import com.fuyuanshen.common.satoken.utils.AppLoginHelper;
import com.fuyuanshen.equipment.utils.FileHashUtil;
import com.fuyuanshen.system.domain.vo.SysOssVo;
import com.fuyuanshen.system.service.ISysOssService;
import lombok.RequiredArgsConstructor;
@ -16,7 +15,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
/**
@ -33,38 +31,24 @@ public class AppFileService {
private final IAppBusinessFileService appBusinessFileService;
private final FileHashUtil fileHashUtil;
private final ISysOssService ossService;
public List<AppFileVo> list(AppBusinessFileBo bo) {
// bo.setCreateBy(AppLoginHelper.getUserId());
return appBusinessFileService.queryAppFileList(bo);
}
/**
* APP文件上传
*/
public Boolean add(AppFileDto bo) throws IOException {
public Boolean add(AppFileDto bo) {
MultipartFile[] files = bo.getFiles();
if (files == null || files.length == 0) {
if(files == null || files.length == 0){
throw new ServiceException("请选择要上传的文件");
}
if (files.length > 5) {
if(files.length > 5){
throw new ServiceException("最多只能上传5个文件");
}
for (int i = 0; i < files.length; i++) {
MultipartFile file = files[i];
// 上传文件
// 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://"));
}
SysOssVo upload = sysOssService.upload(file);
if (upload == null) {
return false;
@ -82,7 +66,6 @@ public class AppFileService {
return true;
}
public Boolean delete(Long[] ids) {
AppBusinessFileBo bo = new AppBusinessFileBo();
// bo.setCreateBy(AppLoginHelper.getUserId());
@ -96,5 +79,4 @@ public class AppFileService {
}
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.hutool.core.bean.BeanUtil;
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.AppDeviceShareBo;
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.tenant.exception.TenantException;
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.service.ISysTenantService;
import lombok.RequiredArgsConstructor;
@ -62,7 +59,6 @@ public class AppLoginService {
private final IAppUserService appUserService;
private final IAppDeviceShareService appDeviceShareService;
private final IAppDeviceBindRecordService appDeviceBindRecordService;
private final DeviceService deviceService;
/**
@ -213,7 +209,8 @@ public class AppLoginService {
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);
@ -222,21 +219,6 @@ public class AppLoginService {
.collect(Collectors.toList());
appDeviceBindRecordService.deleteWithValidByIds(ids, true);
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()) {

View File

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

View File

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

View File

@ -11,8 +11,8 @@ spring.boot.admin.client:
metadata:
username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password}
username: @monitor.username@
password: @monitor.password@
username: ${monitor.username}
password: ${monitor.password}
--- # 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.vo.AppDeviceBindRecordVo;
import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 设备绑定关系Mapper接口
@ -13,5 +12,4 @@ import org.apache.ibatis.annotations.Param;
*/
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 java.util.List;
import java.util.Set;
/**
* 设备分享Mapper接口
@ -31,5 +30,5 @@ public interface AppDeviceShareMapper extends BaseMapperPlus<AppDeviceShare, App
*/
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.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
@ -66,6 +65,4 @@ public interface IAppDeviceBindRecordService {
* @return 是否删除成功
*/
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.List;
import java.util.Set;
/**
* 设备分享Service接口
@ -69,5 +68,5 @@ public interface IAppDeviceShareService {
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;
}
@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.Map;
import java.util.Collection;
import java.util.Set;
/**
* 设备分享Service业务层处理
@ -169,7 +168,7 @@ public class AppDeviceShareServiceImpl implements IAppDeviceShareService {
}
@Override
public void deleteByDeviceIds(Set<Long> deviceIds) {
public void deleteByDeviceIds(List<Long> 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">
<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>

View File

@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuyuanshen.app.mapper.AppDeviceShareMapper">
<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=")">
#{item}
</foreach>

View File

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

View File

@ -1,10 +1,13 @@
package com.fuyuanshen.equipment.service;
import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.TableDataInfo;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.DeviceType;
import com.fuyuanshen.equipment.domain.dto.AppDeviceBo;
import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
@ -143,7 +146,7 @@ public interface DeviceService extends IService<Device> {
* @return
*/
List<Map<String, Object>> getEquipmentUsageData(Long deviceTypeId, Integer range);
/**
* 根据设备IMEI查询设备
*
@ -188,7 +191,7 @@ public interface DeviceService extends IService<Device> {
/**
* 根据条件查询设备位置信息
*
* @param groupId 设备分组ID
* @param groupId 设备分组ID
* @param deviceType 设备类型
* @param deviceImei 设备IMEI
* @return 设备位置信息列表

View File

@ -74,9 +74,6 @@
<if test="criteria.onlineStatus != null">
and d.online_status = #{criteria.onlineStatus}
</if>
<if test="criteria.bindingStatus != null">
and d.binding_status = #{criteria.bindingStatus}
</if>
<if test="criteria.groupId != null">
and d.group_id = #{criteria.groupId}
</if>
@ -308,7 +305,7 @@
<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
inner join device_type b on a.device_type = b.id
where b.communication_mode in (0, 2)
<if test="bo.deviceType != null">
AND b.id = #{bo.deviceType}
</if>

View File

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

16
pom.xml
View File

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