Merge branch 'master' of http://47.109.37.87:3000/by2025/SmartParks
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run

# Conflicts:
#	ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java
#	ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java
This commit is contained in:
lxj
2025-08-06 12:39:06 +08:00
77 changed files with 1444 additions and 269 deletions

View File

@@ -62,7 +62,7 @@ public class ApplicationController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("property:application:query")
//@SaCheckPermission("property:application:query")
@GetMapping("/{id}")
public R<ApplicationVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
@@ -90,7 +90,13 @@ public class ApplicationController extends BaseController {
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ApplicationBo bo) {
return toAjax(applicationService.updateByBo(bo));
}
/**
* 审核通过
*/
@PostMapping("/verified")
public R<Void> verified(@Validated(EditGroup.class) @RequestBody ApplicationBo bo) {
return toAjax(applicationService.verifiedByBo(bo));
}
/**
* 删除资产领用
*

View File

@@ -40,7 +40,7 @@ public class DepotLogController extends BaseController {
/**
* 查询仓库记录列表
*/
@SaCheckPermission("property:log:list")
//@SaCheckPermission("property:log:list")
@GetMapping("/list")
public TableDataInfo<DepotLogVo> list(DepotLogBo bo, PageQuery pageQuery) {
return depotLogService.queryPageList(bo, pageQuery);
@@ -62,7 +62,7 @@ public class DepotLogController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("property:log:query")
// @SaCheckPermission("property:log:query")
@GetMapping("/{id}")
public R<DepotLogVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {

View File

@@ -103,4 +103,13 @@ public class ServiceWorkOrdersTypeController extends BaseController {
@PathVariable("ids") Long[] ids) {
return toAjax(serviceWorkOrdersTypeService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 查询【工单类型】树结构
*/
@SaCheckPermission("system:workOrdersType:list")
@GetMapping("/typeTree")
public R<List<ServiceWorkOrdersTypeVo>> typeTree() {
return R.ok(serviceWorkOrdersTypeService.typeTree()) ;
}
}

View File

@@ -70,8 +70,10 @@ public class TbVisitorManagementController extends BaseController {
*/
@PostMapping("/getcode")
public R<String> getcode(QrCodeInfo qrCodeInfo) {
Long string = (Long) StpUtil.getLoginId();
qrCodeInfo.setUserid(string);
String userid =StpUtil.getLoginId().toString();
String[] split = userid.split(":");
Long s1 = Long.valueOf(split[1]);
qrCodeInfo.setUserid(s1);
String s = remoteConfigService.selectQrTimeOut();
int i = Integer.parseInt(s);
UUID value = UUID.randomUUID();
@@ -123,7 +125,7 @@ public class TbVisitorManagementController extends BaseController {
}
/**
* 新增访客管理
* 小程序新增访客管理
*/
@SaCheckPermission("property:visitorManagement:add")
@Log(title = "访客管理", businessType = BusinessType.INSERT)
@@ -137,6 +139,18 @@ public class TbVisitorManagementController extends BaseController {
return toAjax(tbVisitorManagementService.insertByBo(bo));
}
/**
* pc端新增访客管理
*/
@SaCheckPermission("property:visitorManagement::addVisitorManagement")
@Log(title = "访客管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping
public R<Void> addVistorManagement(@Validated(AddGroup.class) @RequestBody TbVisitorManagementBo bo) {
return toAjax(tbVisitorManagementService.insertVistorManagementByBo(bo));
}
/**
* 修改访客管理
*/

View File

@@ -42,12 +42,12 @@ public class Application extends TenantEntity {
/**
* 数量
*/
private Long number;
private Integer number;
/**
* 状态
*/
private Long state;
private Integer state;
/**
* 审批人id

View File

@@ -4,6 +4,8 @@ import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -47,7 +49,7 @@ public class Asset extends TenantEntity {
/**
* 价格
*/
private Long price;
private BigDecimal price;
/**
* 库存

View File

@@ -45,7 +45,7 @@ public class Depot extends TenantEntity {
/**
* 状态
*/
private Long state;
private Integer state;
/**
* 创建人id

View File

@@ -4,6 +4,8 @@ import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -42,7 +44,7 @@ public class DepotLog extends TenantEntity {
/**
* 流转类型
*/
private Long type;
private Integer type;
/**
* 流转时间
@@ -57,7 +59,7 @@ public class DepotLog extends TenantEntity {
/**
* 状态
*/
private Long state;
private Integer state;
/**
* 备注
@@ -67,17 +69,17 @@ public class DepotLog extends TenantEntity {
/**
* 价格
*/
private Long price;
private BigDecimal price;
/**
* 总价
*/
private Long priceSum;
private BigDecimal priceSum;
/**
* 数量
*/
private Long number;
private Integer number;
/**
* 供应商id

View File

@@ -0,0 +1,58 @@
package org.dromara.property.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 巡检点签到记录对象 inspection_point_record
*
* @author mocheng
* @date 2025-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("inspection_point_record")
public class InspectionPointRecord extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 巡检点id
*/
private Long pointId;
/**
* 签到人id
*/
private Long userId;
/**
* 签到时间
*/
private Date signTime;
/**
* 备注
*/
private String remark;
/**
* 搜索值
*/
private String searchValue;
}

View File

@@ -0,0 +1,63 @@
package org.dromara.property.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 巡检路线巡检点关联对象 inspection_route_point
*
* @author mocheng
* @date 2025-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("inspection_route_point")
public class InspectionRoutePoint extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 巡检路线id
*/
private Long routeId;
/**
* 巡检点id
*/
private Long pointId;
/**
* 开始时间
*/
private Date startTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 备注
*/
private String remark;
/**
* 搜索值
*/
private String searchValue;
}

View File

@@ -62,4 +62,9 @@ public class ServiceWorkOrdersType extends TenantEntity {
*/
private String searchValue;
/**
*上级类型id
*/
private Long parentId;
}

View File

@@ -41,12 +41,12 @@ public class ApplicationBo extends BaseEntity {
/**
* 数量
*/
private Long number;
private Integer number;
/**
* 状态
*/
private Long state;
private Integer state;
/**
* 审批人id

View File

@@ -8,6 +8,8 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -46,12 +48,12 @@ public class AssetBo extends BaseEntity {
/**
* 价格
*/
private Long price;
private BigDecimal price;
/**
* 库存
*/
private Long stock;
private Integer stock;
/**
* 计量单位
@@ -81,7 +83,7 @@ public class AssetBo extends BaseEntity {
/**
* 固定资产类型
*/
private Long type;
private Integer type;
}

View File

@@ -34,7 +34,7 @@ public class AssetTypeBo extends BaseEntity {
/**
* 排序
*/
private Long sort;
private Integer sort;
}

View File

@@ -90,6 +90,8 @@ public class CleanOrderBo extends BaseEntity {
@NotBlank(message = "结束时间不能为空", groups = {AddGroup.class, EditGroup.class})
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private String endTime;
/**
* 评价
*/
@@ -102,6 +104,11 @@ public class CleanOrderBo extends BaseEntity {
* 图片
*/
private String imgUrl;
/**
* 单位id
*/
@NotNull(message = "单位id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long unitId;
// /**

View File

@@ -8,6 +8,8 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -66,12 +68,12 @@ public class DepotLogBo extends BaseEntity {
/**
* 价格
*/
private Long price;
private BigDecimal price;
/**
* 总价
*/
private Long priceSum;
private BigDecimal priceSum;
/**
* 数量

View File

@@ -0,0 +1,60 @@
package org.dromara.property.domain.bo;
import org.dromara.property.domain.InspectionPointRecord;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 巡检点签到记录业务对象 inspection_point_record
*
* @author mocheng
* @date 2025-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = InspectionPointRecord.class, reverseConvertGenerate = false)
public class InspectionPointRecordBo extends BaseEntity {
/**
* 主键id
*/
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 巡检点id
*/
@NotNull(message = "巡检点id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long pointId;
/**
* 签到人id
*/
@NotNull(message = "签到人id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 签到时间
*/
@NotNull(message = "签到时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date signTime;
/**
* 备注
*/
private String remark;
/**
* 搜索值
*/
private String searchValue;
}

View File

@@ -9,6 +9,8 @@ import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.property.domain.InspectionRoute;
import java.util.List;
/**
* 巡检路线业务对象 inspection_route
*
@@ -41,4 +43,9 @@ public class InspectionRouteBo extends BaseEntity {
*/
@NotNull(message = "排序不能为空", groups = { EditGroup.class })
private Integer sort;
/**
* 巡检路线巡检点关联
*/
@NotEmpty(message = "巡检点不能为空", groups = { EditGroup.class })
List <InspectionRoutePointBo> inspectionRoutePointBoList;
}

View File

@@ -0,0 +1,66 @@
package org.dromara.property.domain.bo;
import org.dromara.property.domain.InspectionRoutePoint;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 巡检路线巡检点关联业务对象 inspection_route_point
*
* @author mocheng
* @date 2025-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = InspectionRoutePoint.class, reverseConvertGenerate = false)
public class InspectionRoutePointBo extends BaseEntity {
/**
* 主键id
*/
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 巡检路线id
*/
// @NotNull(message = "巡检路线id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long routeId;
/**
* 巡检点id
*/
@NotNull(message = "巡检点id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long pointId;
/**
* 开始时间
*/
@NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date startTime;
/**
* 结束时间
*/
@NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date endTime;
/**
* 备注
*/
private String remark;
/**
* 搜索值
*/
private String searchValue;
}

View File

@@ -60,4 +60,9 @@ public class ServiceWorkOrdersTypeBo extends BaseEntity {
*/
private Integer isTransfers;
/**
*上级类型id
*/
private Long parentId;
}

View File

@@ -25,7 +25,7 @@ public class TbVisitorManagementBo extends BaseEntity {
/**
* qr码id
*/
@NotNull(message = "qr码id不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "qr码id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long qrCodeId;
/**

View File

@@ -64,13 +64,13 @@ public class ApplicationVo implements Serializable {
* 数量
*/
@ExcelProperty(value = "数量")
private Long number;
private Integer number;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private Long state;
private Integer state;
/**
* 审批人id

View File

@@ -44,7 +44,7 @@ public class AssetTypeVo implements Serializable {
* 排序
*/
@ExcelProperty(value = "排序")
private Long sort;
private Integer sort;
/**
* 创建时间

View File

@@ -1,5 +1,6 @@
package org.dromara.property.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.property.domain.Asset;
@@ -64,7 +65,7 @@ public class AssetVo implements Serializable {
* 价格
*/
@ExcelProperty(value = "价格")
private Long price;
private BigDecimal price;
/**
* 库存

View File

@@ -1,5 +1,6 @@
package org.dromara.property.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.property.domain.DepotLog;
@@ -41,18 +42,28 @@ public class DepotLogVo implements Serializable {
*/
@ExcelProperty(value = "仓库id")
private Long depotId;
/**
* 仓库名称
*/
@ExcelProperty(value = "仓库名称")
private String depotName;
/**
* 资产id
*/
@ExcelProperty(value = "资产id")
private Long assetId;
/**
* 资产名称
*/
@ExcelProperty(value = "资产名称")
private String assetName;
/**
* 流转类型
*/
@ExcelProperty(value = "流转类型")
private Long type;
private Integer type;
/**
* 流转时间
@@ -64,13 +75,17 @@ public class DepotLogVo implements Serializable {
* 操作人id
*/
@ExcelProperty(value = "操作人id")
private Long userId;
private Long userId; /**
* 操作人id
*/
@ExcelProperty(value = "操作人名称")
private String userName;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private Long state;
private Integer state;
/**
* 备注
@@ -82,25 +97,30 @@ public class DepotLogVo implements Serializable {
* 价格
*/
@ExcelProperty(value = "价格")
private Long price;
private BigDecimal price;
/**
* 总价
*/
@ExcelProperty(value = "总价")
private Long priceSum;
private BigDecimal priceSum;
/**
* 数量
*/
@ExcelProperty(value = "数量")
private Long number;
private Integer number;
/**
* 供应商id
*/
@ExcelProperty(value = "供应商id")
private Long supplierId;
/**
* 供应商名称
*/
@ExcelProperty(value = "供应商名称")
private String supplierName;
/**
* 创建时间

View File

@@ -56,7 +56,7 @@ public class DepotVo implements Serializable {
* 状态
*/
@ExcelProperty(value = "状态")
private Long state;
private Integer state;
/**
* 创建时间

View File

@@ -0,0 +1,70 @@
package org.dromara.property.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.property.domain.InspectionPointRecord;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 巡检点签到记录视图对象 inspection_point_record
*
* @author mocheng
* @date 2025-08-04
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = InspectionPointRecord.class)
public class InspectionPointRecordVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 巡检点id
*/
@ExcelProperty(value = "巡检点id")
private Long pointId;
/**
* 签到人id
*/
@ExcelProperty(value = "签到人id")
private Long userId;
/**
* 签到时间
*/
@ExcelProperty(value = "签到时间")
private Date signTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 搜索值
*/
@ExcelProperty(value = "搜索值")
private String searchValue;
}

View File

@@ -0,0 +1,76 @@
package org.dromara.property.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.property.domain.InspectionRoutePoint;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 巡检路线巡检点关联视图对象 inspection_route_point
*
* @author mocheng
* @date 2025-08-04
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = InspectionRoutePoint.class)
public class InspectionRoutePointVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 巡检路线id
*/
@ExcelProperty(value = "巡检路线id")
private Long routeId;
/**
* 巡检点id
*/
@ExcelProperty(value = "巡检点id")
private Long pointId;
/**
* 开始时间
*/
@ExcelProperty(value = "开始时间")
private Date startTime;
/**
* 结束时间
*/
@ExcelProperty(value = "结束时间")
private Date endTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 搜索值
*/
@ExcelProperty(value = "搜索值")
private String searchValue;
}

View File

@@ -8,7 +8,8 @@ import org.dromara.property.domain.ServiceWorkOrdersType;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
@@ -75,4 +76,14 @@ public class ServiceWorkOrdersTypeVo implements Serializable {
@ExcelProperty(value = "搜索值")
private String searchValue;
/**
* 上级类型id
*/
private Long parentId;
/**
* 子级类型
*/
private List<ServiceWorkOrdersTypeVo> children = new ArrayList<>();
}

View File

@@ -0,0 +1,17 @@
package org.dromara.property.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.property.domain.InspectionPointRecord;
import org.dromara.property.domain.vo.InspectionPointRecordVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 巡检点签到记录Mapper接口
*
* @author mocheng
* @date 2025-08-04
*/
@Mapper
public interface InspectionPointRecordMapper extends BaseMapperPlus<InspectionPointRecord, InspectionPointRecordVo> {
}

View File

@@ -0,0 +1,17 @@
package org.dromara.property.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.property.domain.InspectionRoutePoint;
import org.dromara.property.domain.vo.InspectionRoutePointVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 巡检路线巡检点关联Mapper接口
*
* @author mocheng
* @date 2025-08-04
*/
@Mapper
public interface InspectionRoutePointMapper extends BaseMapperPlus<InspectionRoutePoint, InspectionRoutePointVo> {
}

View File

@@ -66,4 +66,11 @@ public interface IApplicationService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 审核通过
* @param bo
* @return
*/
Boolean verifiedByBo(ApplicationBo bo);
}

View File

@@ -65,4 +65,10 @@ public interface IServiceWorkOrdersTypeService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 查询【工单类型】树结构
* @return 工单类型树结构
*/
List<ServiceWorkOrdersTypeVo> typeTree();
}

View File

@@ -56,6 +56,9 @@ public interface ITbVisitorManagementService {
*/
Boolean insertByBo(TbVisitorManagementBo bo);
Boolean insertVistorManagementByBo(TbVisitorManagementBo bo);
/**
* 修改访客管理
*

View File

@@ -1,5 +1,7 @@
package org.dromara.property.service.impl;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.dromara.common.core.utils.MapstructUtils;
@@ -11,9 +13,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.property.domain.Asset;
import org.dromara.property.domain.DepotLog;
import org.dromara.property.domain.vo.AssetVo;
import org.dromara.property.mapper.AssetMapper;
import org.dromara.property.mapper.DepotLogMapper;
import org.dromara.system.api.RemoteUserService;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.ApplicationBo;
@@ -21,12 +26,11 @@ import org.dromara.property.domain.vo.ApplicationVo;
import org.dromara.property.domain.Application;
import org.dromara.property.mapper.ApplicationMapper;
import org.dromara.property.service.IApplicationService;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 资产领用Service业务层处理
@@ -42,6 +46,7 @@ public class ApplicationServiceImpl implements IApplicationService {
private final ApplicationMapper baseMapper;
private final AssetMapper assetMapper;
private final RemoteUserService remoteUserService;
private final DepotLogMapper depotLogMapper;
/**
* 查询资产领用
@@ -50,12 +55,14 @@ public class ApplicationServiceImpl implements IApplicationService {
* @return 资产领用
*/
@Override
public ApplicationVo queryById(Long id){
public ApplicationVo queryById(Long id) {
ApplicationVo applicationVo = baseMapper.selectVoById(id);
applicationVo.setUserName(remoteUserService.selectUserNameById(applicationVo.getUserId()));
applicationVo.setAcceptanceUserName(remoteUserService.selectUserNameById(applicationVo.getAcceptanceUserId()));
if (ObjectUtil.isNotEmpty(applicationVo.getAcceptanceUserId())) {
applicationVo.setAcceptanceUserName(remoteUserService.selectUserNameById(applicationVo.getAcceptanceUserId()));
}
AssetVo assetVo = assetMapper.selectVoById(applicationVo.getAssetId());
applicationVo.setAssetName(assetVo==null?"资产不存在" : assetVo.getName());
applicationVo.setAssetName(assetVo == null ? "资产不存在" : assetVo.getName());
return applicationVo;
}
@@ -70,21 +77,41 @@ public class ApplicationServiceImpl implements IApplicationService {
public TableDataInfo<ApplicationVo> queryPageList(ApplicationBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<Application> lqw = buildQueryWrapper(bo);
Page<ApplicationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
ArrayList<Long> ids = new ArrayList<>();
result.getRecords().forEach(r -> ids.add(r.getUserId()));
result.getRecords().forEach(r -> ids.add(r.getAcceptanceUserId()));
Map<Long, String> userNamesByIds = remoteUserService.selectUserNamesByIds(ids);
result.getRecords().forEach(r ->r.setUserName(userNamesByIds.get(r.getUserId())));
result.getRecords().forEach(r ->r.setAcceptanceUserName(userNamesByIds.get(r.getUserId())));
// result.getRecords().forEach(r -> r.setUserName(remoteUserService.selectUserNameById(r.getUserId())));
// result.getRecords().forEach(r -> r.setAcceptanceUserName(remoteUserService.selectUserNameById(r.getAcceptanceUserId())));
// 收集用户ID用于批量查询用户名
Set<Long> userIds = new HashSet<>();
result.getRecords().forEach(r -> {
if (r.getUserId() != null) {
userIds.add(r.getUserId());
}
if (r.getAcceptanceUserId() != null) {
userIds.add(r.getAcceptanceUserId());
}
});
// 批量获取用户名
Map<Long, String> userNamesByIds = remoteUserService.selectUserNamesByIds(new ArrayList<>(userIds));
// 设置用户名(添加空值检查)
result.getRecords().forEach(r -> {
if (r.getUserId() != null) {
r.setUserName(userNamesByIds.get(r.getUserId()));
}
if (r.getAcceptanceUserId() != null) {
r.setAcceptanceUserName(userNamesByIds.get(r.getAcceptanceUserId()));
}
});
// 设置资产名称
result.getRecords().forEach(r -> {
AssetVo assetVo = assetMapper.selectVoById(r.getAssetId());
r.setAssetName(assetVo==null?"资产不存在" : assetVo.getName());
r.setAssetName(assetVo == null ? "资产不存在" : assetVo.getName());
});
return TableDataInfo.build(result);
}
/**
* 查询符合条件的资产领用列表
*
@@ -99,7 +126,7 @@ public class ApplicationServiceImpl implements IApplicationService {
applicationVos.forEach(r -> r.setAcceptanceUserName(remoteUserService.selectUserNameById(r.getAcceptanceUserId())));
applicationVos.forEach(r -> {
AssetVo assetVo = assetMapper.selectVoById(r.getAssetId());
r.setAssetName(assetVo==null?"资产不存在" : assetVo.getName());
r.setAssetName(assetVo == null ? "资产不存在" : assetVo.getName());
});
return applicationVos;
}
@@ -140,20 +167,17 @@ public class ApplicationServiceImpl implements IApplicationService {
*
* @param bo 资产领用
* @return 是否修改成功
*
*
*/
@Override
public Boolean updateByBo(ApplicationBo bo) {
Application update = MapstructUtils.convert(bo, Application.class);
validEntityBeforeSave(update);
boolean b = baseMapper.updateById(update) > 0;
if (b&&bo.getState()==1){
if (b && bo.getState() == 1) {
Asset asset = assetMapper.selectById(bo.getAssetId());
if (asset.getStock()>=update.getNumber()) {
if (asset.getStock() >= update.getNumber()) {
UpdateWrapper<Asset> assetUpdateWrapper = new UpdateWrapper<>();
assetUpdateWrapper.eq("id",bo.getAssetId())
.set("stock",assetMapper.selectVoById(bo.getAssetId()).getStock()-update.getNumber());
assetUpdateWrapper.eq("id", bo.getAssetId())
.set("stock", assetMapper.selectVoById(bo.getAssetId()).getStock() - update.getNumber());
assetMapper.update(assetUpdateWrapper);
}
@@ -164,8 +188,9 @@ public class ApplicationServiceImpl implements IApplicationService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(Application entity){
private void validEntityBeforeSave(Application entity) {
//TODO 做一些数据校验,如唯一约束
entity.setApplicationTime(new Date());
}
/**
@@ -177,9 +202,47 @@ public class ApplicationServiceImpl implements IApplicationService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 审核通过
*
* @param bo
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean verifiedByBo(ApplicationBo bo) {
Application update = MapstructUtils.convert(bo, Application.class);
if (bo.getState().equals(1)) {
//查询领用资产
Asset asset = assetMapper.selectById(bo.getAssetId());
Assert.isTrue(ObjectUtil.isNotNull(asset), "领用资产不存在");
BigDecimal stock = new BigDecimal(asset.getStock());
BigDecimal number = new BigDecimal(bo.getNumber());
BigDecimal remain = stock.subtract(number);
Assert.isTrue(remain.compareTo(BigDecimal.ZERO) >= 0, "库存不足无法领用");
asset.setStock(Long.valueOf(String.valueOf(remain)));
boolean b = assetMapper.updateById(asset) > 0;
if (b) {
DepotLog depotLog = new DepotLog();
depotLog.setDepotId(asset.getDepotId());
depotLog.setAssetId(asset.getId());
depotLog.setType(1);
depotLog.setTime(new Date());
depotLog.setUserId(LoginHelper.getUserId());
depotLog.setPrice(asset.getPrice());
depotLog.setNumber(bo.getNumber());
depotLog.setPriceSum((asset.getPrice().multiply(new BigDecimal(bo.getNumber()))));
depotLog.setSupplierId(asset.getSuppliersId());
depotLogMapper.insert(depotLog);
}
}
boolean flag = baseMapper.updateById(update) > 0;
return flag;
}
}

View File

@@ -119,7 +119,11 @@ public class AssetServiceImpl implements IAssetService {
lqw.eq(StringUtils.isNotBlank(bo.getModel()), Asset::getModel, bo.getModel());
lqw.eq(StringUtils.isNotBlank(bo.getSpecs()), Asset::getSpecs, bo.getSpecs());
lqw.eq(bo.getPrice() != null, Asset::getPrice, bo.getPrice());
lqw.eq(bo.getStock() != null, Asset::getStock, bo.getStock());
if(params.containsKey("stock")){
lqw.gt(Asset::getStock, 0);
}else {
lqw.eq(bo.getStock() != null, Asset::getStock, bo.getStock());
}
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), Asset::getUnit, bo.getUnit());
lqw.eq(bo.getDepotId() != null, Asset::getDepotId, bo.getDepotId());
lqw.eq(StringUtils.isNotBlank(bo.getMsg()), Asset::getMsg, bo.getMsg());

View File

@@ -2,6 +2,7 @@ package org.dromara.property.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
@@ -44,6 +45,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
private final AttendanceGroupMapper attendanceGroupMapper;
// private final AttendanceArrangementGroupMapper arrangementGroupMapper;
private final AttendanceWeekSetMapper weekSetMapper;
@@ -125,7 +127,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
vo.setShift(attendanceShift);
}else if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) {
} else if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) {
//3.2排班制
//将startDate作为第一天endDate作为最后一天循环判断当前日期是第几天取出当前天数的班次信息。
@@ -163,7 +165,6 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
}
//根据cycleDay查询出当前日期的班次信息
AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.<AttendanceScheduleCycle>lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay));
//将cycle存到vo中
@@ -260,84 +261,153 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
public TableDataInfo<AttendanceArrangementVo> queryList(AttendanceArrangementBo bo) {
LocalDate month = bo.getMonth().atEndOfMonth();
// 1. 拿到日历的开始时间和结束时间
LocalDate calendarStartDate = month.withDayOfMonth(1);
LocalDate calendarEndDate = month.withDayOfMonth(calendarStartDate.lengthOfMonth());
// 2. 根据日历的开始时间和结束时间查询出每一天的排班信息
// 2.1 循环日历的开始时间和结束时间,判断 calendarStartDate 在哪些排班中
List<AttendanceArrangementVo> result = new ArrayList<>();
//使用mybatisplus的between查询在calendarStartDate和calendarEndDate之间的排班信息
List<AttendanceArrangementVo> startResult = baseMapper.selectVoList(Wrappers.<AttendanceArrangement>lambdaQuery()
.between(AttendanceArrangement::getStartDate, calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant(),
calendarEndDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1)));
//查询结束时间在calendarStartDate和calendarEndDate之间的排班信息
List<AttendanceArrangement> endResult = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery()
.between(AttendanceArrangement::getEndDate, calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant(),
calendarEndDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1)));
for (LocalDate date = calendarStartDate; date.isBefore(calendarEndDate); date = date.plusDays(1)) {
// 2.2 根据当前日期查询在开始时间和结束时间之间的排班信息
//查询当前日期在哪些排班中,当前日期大于等于排班开始日期,小于等于排班结束日期
// 查询指定日期在哪些排班中
List<AttendanceArrangement> arrangementList = baseMapper.selectList(
Wrappers.<AttendanceArrangement>lambdaQuery()
.between(AttendanceArrangement::getStartDate, date.atStartOfDay(ZoneId.systemDefault()).toInstant(),
date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1)));
//合并两个list并去重
List<AttendanceArrangementVo> result = new ArrayList<>(startResult.stream().distinct().toList());
result.addAll(endResult.stream().map(vo -> {
AttendanceArrangementVo newVo = MapstructUtils.convert(vo, AttendanceArrangementVo.class);
newVo.setStartDate(vo.getStartDate());
newVo.setEndDate(vo.getEndDate());
return newVo;
}).toList());
// //根据arrangementList查询出排班的id
// List<Long> scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).toList();
// //根据排班的id查询出排班的人员详细信息
// List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList));
//去掉result中id重复的排班信息
result = result.stream().distinct().toList();
// 根据排班查询出考勤组id
List<Long> groupIds = arrangementList.stream()
.map(AttendanceArrangement::getGroupId)
.distinct()
.toList();
// 如果当前日期没有排班,则跳过当前日期
if (groupIds.isEmpty()) {
continue;
}
// 循环 groupIds循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据
for (Long groupId : groupIds) {
AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId);
if (attendanceGroup != null) {
// 创建 AttendanceArrangementVo 对象并设置属性
AttendanceArrangementVo vo = new AttendanceArrangementVo();
vo.setStartDate(arrangementList.get(0).getStartDate());
vo.setEndDate(arrangementList.get(0).getEndDate());
//获取到第一个排班的id
Long arrangementId = arrangementList.get(0).getId();
//根据arrangementId查询出人员组的详细信息
AttendanceGroup group = attendanceGroupMapper.selectById(arrangementId);
//将group存到vo中
vo.setAttendanceGroup(group);
//根据arrangementList查询出排班的id
List<Long> scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).distinct().toList();
//根据排班的id查询出排班的人员详细信息
List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList));
//新建attendanceGroup对象将排班信息和考勤组信息添加到vo中
vo.setAttendanceGroup(attendanceGroup);
//将排班人员信息添加到排班信息中
vo.setUserGroupList(userGroupList);
result.add(vo);
//根据排班查询出考勤组id
List<Long> groupIds = result.stream().map(AttendanceArrangementVo::getGroupId).distinct().toList();
// 循环 groupIds循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据
for (Long groupId : groupIds) {
AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId);
if (attendanceGroup != null) {
// 循环排班列表将排班信息和考勤组信息添加到vo中
for (AttendanceArrangementVo vo : result) {
if (vo.getGroupId().equals(groupId)) {
vo.setAttendanceGroup(attendanceGroup);
}
}
}
}
// 循环排班列表,查询排班人员信息
for (AttendanceArrangementVo vo : result) {
// 根据排班查询出人员组的详细信息
List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().eq(AttendanceUserGroup::getScheduleId, vo.getId()));
// 将排班人员信息添加到排班信息中
vo.setUserGroupList(userGroupList);
}
// LocalDate month = bo.getMonth().atEndOfMonth();
// // 1. 拿到日历的开始时间和结束时间
// LocalDate calendarStartDate = month.withDayOfMonth(1);
// LocalDate calendarEndDate = month.withDayOfMonth(calendarStartDate.lengthOfMonth());
//
// // 2. 根据日历的开始时间和结束时间查询出每一天的排班信息
// // 2.1 循环日历的开始时间和结束时间,判断 calendarStartDate 在哪些排班中
// List<AttendanceArrangementVo> result = new ArrayList<>();
//
//
// //查询所有排班信息
// List<AttendanceArrangement> arrangementList1 = baseMapper.selectList();
// //取出排班的开始时间和结束时间
// List<LocalDate> startDateList = arrangementList1.stream().map(AttendanceArrangement::getStartDate).toList();
// List<LocalDate> endDateList = arrangementList1.stream().map(AttendanceArrangement::getEndDate).toList();
//
// int count = 0;
//
// for (LocalDate date = calendarStartDate; date.isBefore(calendarEndDate); date = date.plusDays(1)) {
// // 2.2 根据当前日期查询在开始时间和结束时间之间的排班信息
// //查询当前日期在哪些排班中,当前日期大于等于排班开始日期,小于等于排班结束日期
//
// if (count >= startDateList.size() || count >= endDateList.size()){
// continue;
// }
//
//
//
//// // 查询指定日期在哪些排班中
//// List<AttendanceArrangement> arrangementList = baseMapper.selectList(
//// Wrappers.<AttendanceArrangement>lambdaQuery()
//// .between(AttendanceArrangement::getStartDate, date.atStartOfDay(ZoneId.systemDefault()).toInstant(),
//// date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1)));
//
//
// // 查询指定日期在哪些排班中
// List<AttendanceArrangement> arrangementList = baseMapper.selectList(
// Wrappers.<AttendanceArrangement>lambdaQuery()
// .between(AttendanceArrangement::getStartDate, startDateList.get(count).atStartOfDay(ZoneId.systemDefault()).toInstant(),
// endDateList.get(count).atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1)));
//
//
//
//
//// //根据arrangementList查询出排班的id
//// List<Long> scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).toList();
//// //根据排班的id查询出排班的人员详细信息
//// List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList));
//
//
// // 根据排班查询出考勤组id
// List<Long> groupIds = arrangementList.stream()
// .map(AttendanceArrangement::getGroupId)
// .distinct()
// .toList();
//
// // 如果当前日期没有排班,则跳过当前日期
// if (groupIds.isEmpty()) {
// count++;
// continue;
// }
//
// // 循环 groupIds循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据
// for (Long groupId : groupIds) {
// AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId);
// if (attendanceGroup != null) {
// // 创建 AttendanceArrangementVo 对象并设置属性
// AttendanceArrangementVo vo = new AttendanceArrangementVo();
// vo.setId(arrangementList.get(0).getId());
// vo.setStartDate(arrangementList.get(0).getStartDate());
// vo.setEndDate(arrangementList.get(0).getEndDate());
//
// //获取到第一个排班的id
// Long arrangementId = arrangementList.get(0).getId();
// //根据arrangementId查询出人员组的详细信息
// AttendanceGroup group = attendanceGroupMapper.selectById(arrangementId);
// //将group存到vo中
// vo.setAttendanceGroup(group);
//
// //根据arrangementList查询出排班的id
// List<Long> scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).distinct().toList();
// //根据排班的id查询出排班的人员详细信息
// List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList));
//
//
// //新建attendanceGroup对象将排班信息和考勤组信息添加到vo中
// vo.setAttendanceGroup(attendanceGroup);
// //将排班人员信息添加到排班信息中
// vo.setUserGroupList(userGroupList);
//
// result.add(vo);
// }
// }
//
// count++;
// }
return TableDataInfo.build(result);
// // 计算交集的开始时间(取较晚的开始时间)和结束时间(取较早的结束时间)
// Date overlapStart = calendarStartDate.after(startDate)
// ? calendarStartDate : startDate;
// Date overlapEnd = calendarEndTimeDate.before(endDate)
// ? calendarEndTimeDate : endDate;
//根据交集的时间范围查询排班信息
}

View File

@@ -196,7 +196,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService
asset.setName(capitalInfo.getCapitalName());
asset.setSpecs(capitalInfo.getSpec());
asset.setSpecs(capitalInfo.getSpec());
asset.setPrice(capitalInfo.getBuyUnitPrice().longValue());
asset.setPrice(capitalInfo.getBuyUnitPrice());
asset.setSuppliersId(capitalApplication.getSupplier());
asset.setStorageTime(new Date());
asset.setType(0L);
@@ -221,6 +221,7 @@ public class CapitalApplicationServiceImpl implements ICapitalApplicationService
*/
private void validEntityBeforeSave(CapitalApplication entity) {
entity.setState("0");
entity.setApplicationTime(new Date());
}
/**

View File

@@ -1,5 +1,7 @@
package org.dromara.property.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -9,6 +11,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.Asset;
import org.dromara.property.domain.Depot;
import org.dromara.property.mapper.AssetMapper;
import org.dromara.property.mapper.DepotMapper;
import org.dromara.system.api.RemoteUserService;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.DepotLogBo;
import org.dromara.property.domain.vo.DepotLogVo;
@@ -16,9 +23,8 @@ import org.dromara.property.domain.DepotLog;
import org.dromara.property.mapper.DepotLogMapper;
import org.dromara.property.service.IDepotLogService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
import java.util.stream.Collectors;
/**
* 仓库记录Service业务层处理
@@ -32,6 +38,9 @@ import java.util.Collection;
public class DepotLogServiceImpl implements IDepotLogService {
private final DepotLogMapper baseMapper;
private final AssetMapper assetsMapper;
private final DepotMapper depotMapper;
private final RemoteUserService remoteUserService;
/**
* 查询仓库记录
@@ -40,8 +49,10 @@ public class DepotLogServiceImpl implements IDepotLogService {
* @return 仓库记录
*/
@Override
public DepotLogVo queryById(Long id){
return baseMapper.selectVoById(id);
public DepotLogVo queryById(Long id) {
DepotLogVo depotLogVo = baseMapper.selectVoById(id);
handleData(depotLogVo,null,null,null);
return depotLogVo;
}
/**
@@ -55,6 +66,41 @@ public class DepotLogServiceImpl implements IDepotLogService {
public TableDataInfo<DepotLogVo> queryPageList(DepotLogBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<DepotLog> lqw = buildQueryWrapper(bo);
Page<DepotLogVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 收集用户ID用于批量查询用户名
Set<Long> userIds = new HashSet<>();
Set<Long> assetIds = new HashSet<>();
Set<Long> depotIds = new HashSet<>();
result.getRecords().forEach(r -> {
if (r.getUserId() != null) {
userIds.add(r.getUserId());
}
if (ObjectUtil.isNotEmpty(r.getAssetId())) {
assetIds.add(r.getAssetId());
}
if (ObjectUtil.isNotEmpty(r.getDepotId())) {
depotIds.add(r.getDepotId());
}
});
// 批量获取用户名
Map<Long, String> userNamesByIds = remoteUserService.selectUserNamesByIds(new ArrayList<>(userIds));
//批量获取资产名
Map<Long, String> assetNamesByIds = assetsMapper.selectList(
new LambdaQueryWrapper<Asset>()
.select(Asset::getId, Asset::getName)
.in(Asset::getId, assetIds)
).stream()
.collect(Collectors.toMap(Asset::getId, Asset::getName));
//批量获取厂库名
Map<Long, String> depotNamesByIds = depotMapper.selectList(
new LambdaQueryWrapper<Depot>()
.select(Depot::getId, Depot::getDepotName)
.in(Depot::getId, depotIds)
).stream()
.collect(Collectors.toMap(Depot::getId, Depot::getDepotName));
result.getRecords().stream().forEach(s -> {
handleData(s, userNamesByIds, assetNamesByIds, depotNamesByIds);
});
return TableDataInfo.build(result);
}
@@ -87,6 +133,33 @@ public class DepotLogServiceImpl implements IDepotLogService {
return lqw;
}
/**
* 处理数据
*/
private void handleData(DepotLogVo depotLogVo, Map<Long, String> userNamesByIds, Map<Long, String> assetNamesByIds, Map<Long, String> depotNamesByIds) {
//批量获取资产名
if(CollUtil.isEmpty(assetNamesByIds)){
assetNamesByIds = assetsMapper.selectList(
new LambdaQueryWrapper<Asset>()
.select(Asset::getId, Asset::getName)
).stream()
.collect(Collectors.toMap(Asset::getId, Asset::getName));
}
//批量获取厂库名
if(CollUtil.isEmpty(depotNamesByIds)){
depotNamesByIds = depotMapper.selectList(
new LambdaQueryWrapper<Depot>()
.select(Depot::getId, Depot::getDepotName)
).stream()
.collect(Collectors.toMap(Depot::getId, Depot::getDepotName));
}
depotLogVo.setAssetName(CollUtil.isNotEmpty(assetNamesByIds)?assetNamesByIds.get(depotLogVo.getAssetId()):null);
depotLogVo.setDepotName(CollUtil.isNotEmpty(depotNamesByIds)?depotNamesByIds.get(depotLogVo.getDepotName()):null);
depotLogVo.setUserName(CollUtil.isNotEmpty(userNamesByIds)?userNamesByIds.get(depotLogVo.getUserId()):remoteUserService.selectNicknameById(depotLogVo.getUserId()));
}
/**
* 新增仓库记录
*
@@ -120,7 +193,7 @@ public class DepotLogServiceImpl implements IDepotLogService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(DepotLog entity){
private void validEntityBeforeSave(DepotLog entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -133,7 +206,7 @@ public class DepotLogServiceImpl implements IDepotLogService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;

View File

@@ -10,9 +10,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.InspectionRoute;
import org.dromara.property.domain.InspectionRoutePoint;
import org.dromara.property.domain.bo.InspectionRouteBo;
import org.dromara.property.domain.vo.InspectionRouteVo;
import org.dromara.property.mapper.InspectionRouteMapper;
import org.dromara.property.mapper.InspectionRoutePointMapper;
import org.dromara.property.service.IInspectionRouteService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.stream.Collectors;
/**
* 巡检路线Service业务层处理
@@ -33,6 +36,7 @@ import java.util.Collection;
public class InspectionRouteServiceImpl implements IInspectionRouteService {
private final InspectionRouteMapper baseMapper;
private final InspectionRoutePointMapper routePointMapper;
/**
* 查询巡检路线
@@ -94,6 +98,14 @@ public class InspectionRouteServiceImpl implements IInspectionRouteService {
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
List<InspectionRoutePoint> routePointList = bo.getInspectionRoutePointBoList().stream()
.map(pointBo -> {
InspectionRoutePoint point = MapstructUtils.convert(pointBo, InspectionRoutePoint.class);
point.setRouteId(add.getId());
return point;
})
.collect(Collectors.toList());
routePointMapper.insertBatch(routePointList);
}
return flag;
}

View File

@@ -174,6 +174,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
lqw.eq(bo.getCompleTime() != null, ServiceWorkOrders::getCompleTime, bo.getCompleTime());
lqw.eq(Objects.nonNull(bo.getServiceEvalua()), ServiceWorkOrders::getServiceEvalua, bo.getServiceEvalua());
lqw.eq(Objects.nonNull(bo.getType()), ServiceWorkOrders::getType, bo.getType());
lqw.eq(StringUtils.isNotBlank(bo.getProcessingWeight()), ServiceWorkOrders::getProcessingWeight, bo.getProcessingWeight());
lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), ServiceWorkOrders::getSearchValue, bo.getSearchValue());
return lqw;
}

View File

@@ -18,6 +18,7 @@ import org.dromara.property.service.IServiceWorkOrdersTypeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@@ -138,4 +139,35 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 查询【工单类型】树结构
* @return 工单类型树结构
*/
@Override
public List<ServiceWorkOrdersTypeVo> typeTree() {
List<ServiceWorkOrdersTypeVo> list = baseMapper.selectVoList();
return buildTree(list,null);
}
/**
* 递归构建树结构
* @param types 所有类型列表
* @param parentId 父节点id
* @return 树结构列表
*/
public static List<ServiceWorkOrdersTypeVo> buildTree(List<ServiceWorkOrdersTypeVo> types, Long parentId) {
List<ServiceWorkOrdersTypeVo> tree = new ArrayList<>();
for (ServiceWorkOrdersTypeVo type : types) {
Long currentParentId = type.getParentId();
if ((parentId == null && currentParentId == null) ||
(parentId != null && parentId.equals(currentParentId))) {
List<ServiceWorkOrdersTypeVo> children = buildTree(types, type.getId());
type.getChildren().addAll(children);
tree.add(type);
}
}
return tree;
}
}

View File

@@ -93,7 +93,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
}
/**
* 新增访客管理
* 小程序新增访客管理
*
* @param bo 访客管理
* @return 是否新增成功
@@ -111,6 +111,26 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
return flag;
}
/**
* pc端新增访客管理
*
* @param bo 访客管理
* @return 是否新增成功
*/
@Override
public Boolean insertVistorManagementByBo(TbVisitorManagementBo bo) {
// QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + bo.getQrCodeId());
TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class);
validEntityBeforeSave(add);
// add.setCreateById(info.getUserid());
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改访客管理
*

View File

@@ -118,6 +118,11 @@
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.hik</groupId>
<artifactId>examples</artifactId>

View File

@@ -0,0 +1,60 @@
package org.dromara.sis.consumer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
import org.dromara.sis.sdk.hik.HikApiService;
import org.dromara.sis.service.ISisElevatorFloorRefService;
import org.dromara.sis.service.ISisElevatorInfoService;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Objects;
/**
* @author lsm
* @apiNote CleanLiftAuthRocketConsumer
* @since 2025/8/5
*/
@Slf4j
@Component
@RequiredArgsConstructor
@RocketMQMessageListener(topic = "lift-topic", consumerGroup = "lift-consumer-group")
public class CleanLiftAuthRocketConsumer implements RocketMQListener<MessageExt> {
private final ISisElevatorInfoService sisElevatorInfoService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
@Override
public void onMessage(MessageExt ext) {
log.info("【消费者】接收消息:消息体 => {}", new String(ext.getBody()));
Long deviceId = Long.parseLong(ext.getUserProperty("deviceId"));
Long groupId = Long.parseLong(ext.getUserProperty("groupId"));
Long deviceFloorId = Long.parseLong(ext.getUserProperty("deviceFloorId"));
// 获取当前电梯信息
SisElevatorInfoVo ele = sisElevatorInfoService.queryById(deviceId);
// 获取权限组下电梯⇄楼层关联信息
List<SisElevatorFloorRefVo> groupRef = sisElevatorFloorRefService.queryByAuthGroupId(groupId);
// 取出当前电梯的楼层授权信息
List<SisElevatorFloorRefVo> eleRef = groupRef.stream().filter(o -> Objects.equals(o.getElevatorId(), deviceId)).toList();
for (SisElevatorFloorRefVo ref : eleRef){
if (ref.getOutChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){
HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getOutChannel().intValue(), 3);
}
if (ref.getInChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){
HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getInChannel().intValue(), 3);
}
}
log.info("梯控清除权限完成");
}
}

View File

@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.sis.domain.bo.SisAccessControlBo;
import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
import org.dromara.sis.service.ISisAccessControlService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -126,4 +127,16 @@ public class SisAccessControlController extends BaseController {
return R.ok(sisAccessControlService.syncE8());
}
/**
* 远程开门
*
* @param req 远程开门参数
*/
@PostMapping("/e8/remoteOpenDoor")
public R<Boolean> remoteOpenDoor(@RequestBody RemoteOpenDoorReq req) {
return R.ok(sisAccessControlService.remoteOpenDoor(req));
}
}

View File

@@ -6,9 +6,6 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
import org.dromara.sis.service.ISisElevatorFloorRefService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -40,8 +37,6 @@ public class SisElevatorInfoController extends BaseController {
private final ISisElevatorInfoService sisElevatorInfoService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
/**
* 查询电梯基本信息列表
*/
@@ -108,26 +103,4 @@ public class SisElevatorInfoController extends BaseController {
@PathVariable("elevatorIds") Long[] elevatorIds) {
return toAjax(sisElevatorInfoService.deleteWithValidByIds(List.of(elevatorIds), true));
}
/**
* 新增电梯⇄楼层关联
*
* @param bo 电梯⇄楼层关联
*/
@RepeatSubmit()
@PostMapping("/ref/add")
public R<Void> addRef(@Validated(AddGroup.class) @RequestBody SisElevatorFloorRefBo bo) {
return toAjax(sisElevatorFloorRefService.insertByBo(bo));
}
/**
* 查询电梯⇄楼层关联
*
* @param id 电梯id
*/
@GetMapping("/ref/{id}")
public R<List<SisElevatorFloorRefVo>> queryRef(@NotNull(message = "电梯id不能为空")
@PathVariable("id") Long id) {
return R.ok(sisElevatorFloorRefService.queryByAuthGroupId(id));
}
}

View File

@@ -45,5 +45,9 @@ public class SisDeviceBindRef extends TenantEntity {
*/
private Integer controlType;
/**
* 楼层id
*/
private Long deviceFloorId;
}

View File

@@ -80,4 +80,9 @@ public class SisDeviceManage extends BaseEntity {
private String tenantId;
/**
* 楼层id
*/
private Long floorId;
}

View File

@@ -46,5 +46,8 @@ public class SisDeviceBindRefBo extends BaseEntity {
@NotNull(message = "控制类型(1:门禁2电梯呼梯3:电梯梯控不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer controlType;
/**
* 楼层id
*/
private Long deviceFloorId;
}

View File

@@ -62,6 +62,12 @@ public class SisDeviceManageBo extends BaseEntity {
@NotBlank(message = "设备密码不能为空", groups = {AddGroup.class, EditGroup.class})
private String devicePwd;
/**
* 楼层id
*/
@NotNull(message = "楼层id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long floorId;
/**
* 设备类型
*/

View File

@@ -10,6 +10,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
@@ -18,7 +19,7 @@ import java.util.Date;
* 授权组视图对象 sis_auth_group
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Data
@ExcelIgnoreUnannotated
@@ -52,5 +53,19 @@ public class SisAuthGroupVo implements Serializable {
@ExcelProperty(value = "是否启用(0禁用1启用)")
private Boolean isEnable;
/**
* 门禁id
*/
private Collection<Long> acIds;
/**
* 电梯
*/
private Collection<Long> eleIds;
/**
* 门禁id
*/
private Collection<Long> floorIds;
}

View File

@@ -53,6 +53,9 @@ public class SisDeviceBindRefVo implements Serializable {
@ExcelProperty(value = "控制类型(1:门禁2电梯呼梯3:电梯梯控")
private Integer controlType;
/**
* 楼层id
*/
private Long deviceFloorId;
}

View File

@@ -77,6 +77,11 @@ public class SisDeviceManageVo implements Serializable {
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "deviceType", other = "sis_ipc_device_type")
private Integer deviceTypeName;
/**
* 楼层id
*/
private Long floorId;
/**
* 设备厂商编号
*/
@@ -90,5 +95,4 @@ public class SisDeviceManageVo implements Serializable {
private Long groupId;
private String groupName;
}

View File

@@ -50,5 +50,14 @@ public class SisElevatorFloorRefVo implements Serializable {
@ExcelProperty(value = "授权组id")
private Long authGroupId;
/**
* 内部通道号
*/
private Long inChannel;
/**
* 外部通道号
*/
private Long outChannel;
}

View File

@@ -1,35 +0,0 @@
//package org.dromara.sis.dubbo;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.dubbo.config.annotation.DubboService;
//import org.dromara.sis.api.RemotePrecautionary;
//import org.dromara.sis.api.domain.RemotePrecautionaryVo;
//
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Stream;
//
//@Slf4j
//@DubboService
//@RequiredArgsConstructor
//public class RemotePrecautionaryImpl implements RemotePrecautionary {
// private final PrecautionaryMapper precautionaryMapper;
//
// @Override
// public List<RemotePrecautionaryVo> getList() {
// Page<Precautionary> Page = new Page<>(1, 10);
// QueryWrapper<Precautionary> wrapper = new QueryWrapper<>();
// wrapper.orderByAsc("time");
// return precautionaryMapper.selectVoPage(Page, wrapper);
// }
//
// @Override
// public Map count() {
// List<Precautionary> precautionaries = precautionaryMapper.selectList();
// Stream<Long> longStream = precautionaries.stream().map(Precautionary::getType);
// return Map.of();
// }
//}

View File

@@ -1,5 +1,6 @@
package org.dromara.sis.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.sis.domain.SisAccessControl;
import org.dromara.sis.domain.vo.SisAccessControlVo;
@@ -8,8 +9,9 @@ import org.dromara.sis.domain.vo.SisAccessControlVo;
* 门禁设备Mapper接口
*
* @author lxj
* @date 2025-06-25
* @since 2025-06-25
*/
@Mapper
public interface SisAccessControlMapper extends BaseMapperPlus<SisAccessControl, SisAccessControlVo> {
SisAccessControlVo queryById(Long id);

View File

@@ -0,0 +1,39 @@
package org.dromara.sis.producer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author lsm
* @apiNote CleanLiftAuthRocketProducer
* @since 2025/8/5
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class CleanLiftAuthRocketProducer {
@Resource
private RocketMQTemplate rocketMQTemplate;
public void sendMessage(Long deviceId, Long groupId, Long deviceFloorId, String info, Integer lay) {
// 发送延迟消息
// RocketMQ预定义了一些延迟等级每个等级对应不同的延迟时间范围。这些等级从1到18分别对应1s、5s、10s、30s、1m、2m、3m、4m、5m、6m、7m、8m、9m、10m、20m、30m、1h、2h的延迟时间。
org.apache.rocketmq.common.message.Message msg = new Message("lift-topic", "lift-tag", info.getBytes());
msg.putUserProperty("deviceId", deviceId.toString());
msg.putUserProperty("groupId", groupId.toString());
msg.putUserProperty("deviceFloorId", deviceFloorId.toString());
msg.setDelayTimeLevel(lay);
try {
rocketMQTemplate.getProducer().send(msg);
log.info("发送RocketMQ消息成功");
} catch (Exception e) {
log.error("发送RocketMQ消息失败", e);
}
}
}

View File

@@ -2,6 +2,7 @@ package org.dromara.sis.sdk.e8.domain.accessControl.req;
import lombok.Data;
import java.util.Collection;
import java.util.List;
/**
@@ -27,6 +28,11 @@ public class RemoteOpenDoorReq {
*/
private Long operatorId;
/**
* 门禁IDs
*/
private Collection<Long> acIds;
/**
* 门操作数据
*/

View File

@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.domain.bo.SisAccessControlBo;
import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
import java.util.Collection;
import java.util.List;
@@ -78,7 +79,7 @@ public interface ISisAccessControlService {
/**
* 查询门禁树
*
* @return
* @return
*/
List<TreeNode<Long>> queryAcTree();
@@ -89,4 +90,11 @@ public interface ISisAccessControlService {
*/
Boolean syncE8();
/**
* 远程开门
*
* @param req 远程开门参数
*/
Boolean remoteOpenDoor(RemoteOpenDoorReq req);
}

View File

@@ -79,7 +79,7 @@ public interface ISisAuthGroupRefService {
/**
* 通过权限组id删除授权设备列表
*
* @param groupId 权限id
* @param groupIds 权限id
*/
Boolean deleteByGroupId(Long groupId);
Boolean deleteByGroupId(Collection<Long> groupIds);
}

View File

@@ -109,9 +109,17 @@ public interface ISisAuthRecordService {
/**
* 批量删除授权记录
*
* @param ids 入驻员工ids
* @param ids 入驻员工ids
* @param e8Ids e8id
*/
Boolean deleteByPersonIds(Collection<Long> ids, Collection<Long> e8Ids);
/**
* 根据权限组ID查询授权记录
*
* @param groupIds 权限组ID
*/
Boolean queryByGroupIds(Collection<Long> groupIds);
}

View File

@@ -75,4 +75,12 @@ public interface ISisElevatorFloorChannelRefService {
* @return 是否添加成功
*/
Boolean batchInsert(Long elevatorId, Collection<SisElevatorFloorChannelRef> bo);
/**
* 通过楼层id查询通道信息
*
* @param floorIds 楼层ids
*/
List<SisElevatorFloorChannelRefVo> queryByFloorIds(Collection<Long> floorIds);
}

View File

@@ -74,6 +74,13 @@ public interface ISisElevatorFloorRefService {
*/
List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId);
/**
* 根据权限组id删除电梯⇄楼层关联信息
*
* @param authGroupIds 权限组ids
*/
Boolean deleteByAuthGroupId(Collection<Long> authGroupIds);
/**
* 批量更新电梯⇄楼层通道关联信息
*

View File

@@ -26,6 +26,7 @@ import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.domain.vo.SisDeviceManageVo;
import org.dromara.sis.mapper.SisAccessControlMapper;
import org.dromara.sis.sdk.e8.E8PlatformApi;
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes;
import org.dromara.sis.service.ISisAcDeviceRefService;
import org.dromara.sis.service.ISisAccessControlService;
@@ -149,6 +150,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
SisDeviceBindRef sisDeviceBindRef = new SisDeviceBindRef();
sisDeviceBindRef.setDeviceId(sisDeviceManageVo.getId());
sisDeviceBindRef.setDeviceIp(sisDeviceManageVo.getDeviceIp());
sisDeviceBindRef.setDeviceFloorId(sisDeviceManageVo.getFloorId());
sisDeviceBindRef.setBindId(bo.getId());
sisDeviceBindRef.setControlType(ControlTypeEnum.ACCESS_CONTROL.getCode());
// 删除绑定关系
@@ -281,4 +283,24 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
}
return baseMapper.insertBatch(sisACBos);
}
/**
* 远程开门
*
* @param req 远程开门参数
*/
@Override
public Boolean remoteOpenDoor(RemoteOpenDoorReq req) {
List<SisAccessControlVo> vo = baseMapper.selectVoByIds(req.getAcIds());
List<RemoteOpenDoorReq.ControlData> list = new ArrayList<>();
for (SisAccessControlVo item : vo) {
RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData();
data.setDoorId(Long.parseLong(item.getOutDoorCode()));
data.setDeviceId(Long.parseLong(item.getOutCode()));
list.add(data);
}
req.setControlList(list);
return e8PlatformApi.remoteOpenDoor(req);
}
}

View File

@@ -1,5 +1,6 @@
package org.dromara.sis.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.MapstructUtils;
@@ -32,7 +33,7 @@ import java.util.Collection;
* 权限组⇄设备关联Service业务层处理
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Slf4j
@Service
@@ -107,10 +108,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(Long authGroupId, Collection<Long> acIds, Collection<Long> eleIds, Collection<Long> floorIds) {
// 删除权限组⇄设备关联关系
this.deleteByGroupId(authGroupId);
// 电梯设备
List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(eleIds);
this.deleteByGroupId(List.of(authGroupId));
log.info("开始写入授权组门禁acIds{}", acIds);
boolean check = false;
@@ -124,30 +122,34 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
}
log.info("写入授权组门禁完成");
log.info("开始写入授权组电梯eleIds{}", eleIds);
for (SisElevatorInfoVo ele : eleVoList) {
SisAuthGroupRef groupRef = new SisAuthGroupRef();
groupRef.setAuthGroupId(authGroupId);
groupRef.setDeviceType(2L);
groupRef.setDeviceId(ele.getElevatorId());
check = baseMapper.insert(groupRef) > 0;
Assert.isTrue(check, "写入授权组电梯失败!");
if (CollUtil.isNotEmpty(eleIds)) {
// 电梯设备
List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(eleIds);
log.info("开始写入授权组电梯楼层floorIds{}", floorIds);
// 获取该电梯所在单元的楼层信息
List<RemoteFloorVo> floorVoList = remoteFloorService.queryByBuildingId(ele.getBuildingId());
// 该单元所有楼层id
List<Long> allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList();
// 对比找出授权楼层id
List<Long> authFloors = floorIds.stream().filter(allFloors::contains).toList();
SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo();
refBo.setAuthGroupId(authGroupId);
refBo.setElevatorId(ele.getElevatorId());
refBo.setFloorIds(authFloors);
sisElevatorFloorRefService.insertByBo(refBo);
log.info("开始写入授权组电梯eleIds{}", eleIds);
for (SisElevatorInfoVo ele : eleVoList) {
SisAuthGroupRef groupRef = new SisAuthGroupRef();
groupRef.setAuthGroupId(authGroupId);
groupRef.setDeviceType(2L);
groupRef.setDeviceId(ele.getElevatorId());
check = baseMapper.insert(groupRef) > 0;
Assert.isTrue(check, "写入授权组电梯失败!");
log.info("开始写入授权组电梯楼层floorIds{}", floorIds);
// 获取该电梯所在单元的楼层信息
List<RemoteFloorVo> floorVoList = remoteFloorService.queryByBuildingId(ele.getBuildingId());
// 该单元所有楼层id
List<Long> allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList();
// 对比找出授权楼层id
List<Long> authFloors = floorIds.stream().filter(allFloors::contains).toList();
SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo();
refBo.setAuthGroupId(authGroupId);
refBo.setElevatorId(ele.getElevatorId());
refBo.setFloorIds(authFloors);
sisElevatorFloorRefService.insertByBo(refBo);
}
log.info("写入授权组电梯完成");
}
log.info("写入授权组电梯完成");
return check;
}
@@ -201,12 +203,13 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
/**
* 通过权限组id删除授权设备列表
*
* @param groupId 权限id
* @param groupIds 权限id
*/
@Override
public Boolean deleteByGroupId(Long groupId) {
@Transactional(rollbackFor = Exception.class)
public Boolean deleteByGroupId(Collection<Long> groupIds) {
LambdaQueryWrapper<SisAuthGroupRef> lqw = Wrappers.lambdaQuery();
lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId);
lqw.in(SisAuthGroupRef::getAuthGroupId, groupIds);
return baseMapper.delete(lqw) > 0;
}
}

View File

@@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sis.domain.SisElevatorFloorRef;
import org.dromara.sis.domain.vo.SisAuthGroupRefVo;
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
import org.dromara.sis.service.*;
import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAuthGroupBo;
@@ -35,8 +38,9 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
private final SisAuthGroupMapper baseMapper;
private final ISisAuthRecordService sisAuthRecordService;
private final ISisAuthGroupRefService sisAuthGroupRefService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
/**
@@ -47,7 +51,21 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
*/
@Override
public SisAuthGroupVo queryById(Long id) {
return baseMapper.selectVoById(id);
// 门禁设备
List<SisAuthGroupRefVo> groupRefs = sisAuthGroupRefService.queryListByGroupId(id);
Collection<Long> acIds = groupRefs.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList();
// 楼层
List<SisElevatorFloorRefVo> floorRefs = sisElevatorFloorRefService.queryByAuthGroupId(id);
Collection<Long> floorIds = floorRefs.stream().map(SisElevatorFloorRefVo::getFloorId).toList();
SisAuthGroupVo vo = baseMapper.selectVoById(id);
vo.setAcIds(acIds);
vo.setFloorIds(floorIds);
return vo;
}
/**
@@ -122,6 +140,7 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
Assert.isTrue(flag, "修改授权组失败");
if (flag) {
assert update != null;
flag = sisAuthGroupRefService.insertByBo(update.getId(), bo.getAcIds(), bo.getEleIds(), bo.getFloorIds());
}
@@ -143,10 +162,25 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
boolean auth = sisAuthRecordService.queryByGroupIds(ids);
Assert.isTrue(!auth, "授权组已分配");
}
return baseMapper.deleteByIds(ids) > 0;
boolean flag = baseMapper.deleteByIds(ids) > 0;
Assert.isTrue(flag, "删除授权组失败");
if (flag) {
// 删除授权组⇄授权设备关联表
Boolean ref = sisAuthGroupRefService.deleteByGroupId(ids);
Assert.isTrue(ref, "删除授权组⇄授权设备失败");
// 删除授权组⇄电梯⇄楼层
Boolean floor = sisElevatorFloorRefService.deleteByAuthGroupId(ids);
Assert.isTrue(floor, "删除授权组⇄电梯⇄楼层失败");
}
return flag;
}
}

View File

@@ -320,6 +320,10 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
*/
@Override
public SisAuthRecordVo checkAuth(Long personId) {
List<SisAuthRecordVo> authVoList = baseMapper.checkAuth(personId);
if (CollUtil.isEmpty(authVoList)) {
return null;
}
return baseMapper.checkAuth(personId).get(0);
}
@@ -371,4 +375,17 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
}
return flag;
}
/**
* 根据权限组ID查询授权记录
*
* @param groupIds 权限组IDs
*/
@Override
public Boolean queryByGroupIds(Collection<Long> groupIds){
LambdaQueryWrapper<SisAuthRecord> lqw = Wrappers.lambdaQuery();
lqw.in(SisAuthRecord::getGroupId, groupIds);
List<SisAuthRecordVo> authVoList = baseMapper.selectVoList(lqw);
return CollUtil.isNotEmpty(authVoList);
}
}

View File

@@ -50,7 +50,11 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService {
*/
@Override
public SisDeviceManageVo queryById(Long id) {
return baseMapper.selectVoById(id);
SisDeviceManageVo deviceManageVo = baseMapper.selectVoById(id);
log.info("查询设备管理:{}", deviceManageVo);
return deviceManageVo;
}
/**

View File

@@ -2,7 +2,6 @@ package org.dromara.sis.service.impl;
import cn.hutool.core.lang.Assert;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -26,7 +25,7 @@ import java.util.Collection;
* 电梯⇄楼层⇄通道关联Service业务层处理
*
* @author lsm
* @date 2025-08-04
* @since 2025-08-04
*/
@Slf4j
@RequiredArgsConstructor
@@ -155,4 +154,16 @@ public class SisElevatorFloorChannelRefServiceImpl implements ISisElevatorFloorC
Assert.isTrue(flag, "批量增加电梯⇄楼层⇄通道关联信息失败");
return flag;
}
/**
* 通过楼层id查询通道信息
*
* @param floorIds 楼层ids
*/
@Override
public List<SisElevatorFloorChannelRefVo> queryByFloorIds(Collection<Long> floorIds){
LambdaQueryWrapper<SisElevatorFloorChannelRef> lqw = Wrappers.lambdaQuery();
lqw.in(SisElevatorFloorChannelRef::getFloorId, floorIds);
return baseMapper.selectVoList(lqw);
}
}

View File

@@ -10,6 +10,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sis.domain.SisElevatorFloorChannelRef;
import org.dromara.sis.domain.vo.SisElevatorFloorChannelRefVo;
import org.dromara.sis.service.ISisElevatorFloorChannelRefService;
import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
@@ -18,9 +20,12 @@ import org.dromara.sis.mapper.SisElevatorFloorRefMapper;
import org.dromara.sis.service.ISisElevatorFloorRefService;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 电梯⇄楼层关联Service业务层处理
@@ -34,6 +39,7 @@ import java.util.Collection;
public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefService {
private final SisElevatorFloorRefMapper baseMapper;
private final ISisElevatorFloorChannelRefService sisElevatorFloorChannelRefService;
/**
* 查询电梯⇄楼层关联
@@ -94,15 +100,33 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
Collection<Long> ids = list.stream().map(SisElevatorFloorRefVo::getId).toList();
baseMapper.deleteByIds(ids);
boolean flag = false;
for (Long num : bo.getFloorIds()){
// 通道关系
List<SisElevatorFloorChannelRefVo> channelInfo = sisElevatorFloorChannelRefService.queryByFloorIds(bo.getFloorIds());
// 创建Map提高查找效率避免在循环中重复流操作
Map<Long, SisElevatorFloorChannelRefVo> channelInfoMap = channelInfo.stream()
.collect(Collectors.toMap(SisElevatorFloorChannelRefVo::getFloorId, Function.identity()));
List<SisElevatorFloorRef> refInfo = new ArrayList<>();
for (Long num : bo.getFloorIds()) {
SisElevatorFloorRef add = new SisElevatorFloorRef();
add.setFloorId(num);
add.setAuthGroupId(bo.getAuthGroupId());
add.setElevatorId(bo.getElevatorId());
flag = baseMapper.insert(add) > 0;
Assert.isTrue(flag, "新增电梯⇄楼层关联关系失败");
// 存在通道关系同时写入
SisElevatorFloorChannelRefVo channelRef = channelInfoMap.get(num);
if (channelRef != null) {
add.setOutChannel(channelRef.getOutChannel());
add.setInChannel(channelRef.getInChannel());
}
refInfo.add(add);
}
boolean flag = baseMapper.insertBatch(refInfo);
Assert.isTrue(flag, "电梯楼层关联关系写入失败!");
return flag;
}
@@ -142,34 +166,53 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
}
/**
* 根据电梯id获取电梯⇄楼层关联信息
* 根据权限组id获取电梯⇄楼层关联信息
*
* @param authGroupId 电梯id
*/
@Override
public List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId) {
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
lqw.eq(SisElevatorFloorRef::getElevatorId, authGroupId);
lqw.eq(SisElevatorFloorRef::getAuthGroupId, authGroupId);
return baseMapper.selectVoList(lqw);
}
/**
* 根据权限组id删除电梯⇄楼层关联信息
*
* @param authGroupIds 权限组ids
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteByAuthGroupId(Collection<Long> authGroupIds) {
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
lqw.in(SisElevatorFloorRef::getAuthGroupId, authGroupIds);
return baseMapper.delete(lqw) > 0;
}
/**
* 批量更新电梯⇄楼层通道关联信息
*
* @param info 通道信息
* @param info 通道信息
*/
@Override
public Boolean batchUpdateChannel(Collection<SisElevatorFloorChannelRef> info){
public Boolean batchUpdateChannel(Collection<SisElevatorFloorChannelRef> info) {
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
lqw.in(SisElevatorFloorRef::getFloorId, info.stream().map(SisElevatorFloorChannelRef::getFloorId).toList());
List<SisElevatorFloorRef> list = baseMapper.selectList(lqw);
// 创建Map提高查找效率避免在循环中重复流操作
Map<Long, SisElevatorFloorChannelRef> floorInfoMap = info.stream()
.collect(Collectors.toMap(SisElevatorFloorChannelRef::getFloorId, Function.identity()));
for (SisElevatorFloorRef item : list){
item.setInChannel(info.stream().filter(x -> x.getFloorId().equals(item.getFloorId())).findFirst().get().getInChannel());
for (SisElevatorFloorRef item : list) {
SisElevatorFloorChannelRef floorInfo = floorInfoMap.get(item.getFloorId());
if (floorInfo != null) {
item.setInChannel(floorInfo.getInChannel());
item.setOutChannel(floorInfo.getOutChannel());
}
}
return false;
return baseMapper.updateBatchById(list);
}
}

View File

@@ -20,12 +20,10 @@ import org.dromara.sis.domain.SisElevatorFloorChannelRef;
import org.dromara.sis.domain.SisElevatorInfo;
import org.dromara.sis.domain.bo.SisElevatorInfoBo;
import org.dromara.sis.domain.enums.ControlTypeEnum;
import org.dromara.sis.domain.vo.SisDeviceManageVo;
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
import org.dromara.sis.mapper.SisElevatorInfoMapper;
import org.dromara.sis.service.ISisDeviceBindRefService;
import org.dromara.sis.service.ISisElevatorFloorChannelRefService;
import org.dromara.sis.service.ISisElevatorFloorRefService;
import org.dromara.sis.service.ISisElevatorInfoService;
import org.dromara.sis.service.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -45,6 +43,7 @@ import static org.dromara.common.core.constant.CodePrefixConstants.ELEVATOR_CONT
public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService {
private final SisElevatorInfoMapper baseMapper;
private final ISisDeviceManageService deviceManageService;
private final ISisDeviceBindRefService deviceBindRefService;
private final ISisElevatorFloorRefService elevatorFloorRefService;
private final ISisElevatorFloorChannelRefService elevatorFloorChannelRefService;
@@ -201,20 +200,26 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService {
List<SisDeviceBindRef> ls = new ArrayList<>();
// 梯控
if (bo.getElevatorControlDeviceId() != null) {
SisDeviceManageVo vo = deviceManageService.queryById(bo.getElevatorControlDeviceId().getDeviceId());
SisDeviceBindRef ref = new SisDeviceBindRef();
ref.setDeviceId(bo.getElevatorControlDeviceId().getDeviceId());
ref.setDeviceIp(bo.getElevatorControlDeviceId().getDeviceIp());
ref.setBindId(bo.getElevatorId());
ref.setDeviceFloorId(vo.getFloorId());
ref.setControlType(ControlTypeEnum.ELEVATOR_CONTROL.getCode());
ls.add(ref);
}
// 远程呼叫
if (bo.getRemoteCallElevatorDeviceId() != null && !bo.getRemoteCallElevatorDeviceId().isEmpty()) {
for (SisElevatorInfoBo.DeviceInfo deviceInfo : bo.getRemoteCallElevatorDeviceId()) {
SisDeviceManageVo vo = deviceManageService.queryById(deviceInfo.getDeviceId());
SisDeviceBindRef ref = new SisDeviceBindRef();
ref.setDeviceId(deviceInfo.getDeviceId());
ref.setDeviceIp(deviceInfo.getDeviceIp());
ref.setBindId(bo.getElevatorId());
ref.setDeviceFloorId(vo.getFloorId());
ref.setControlType(ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode());
ls.add(ref);
}

View File

@@ -43,4 +43,9 @@ spring:
- optional:nacos:datasource.yml
- optional:nacos:${spring.application.name}.yml
--- # rocketmq 配置
rocketmq:
name-server: 192.168.24.101:9876
producer:
# 生产者组
group: dist-test

View File

@@ -6,11 +6,13 @@ import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.QueryGroup;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.resource.domain.QrCodeInfo;
import org.dromara.resource.domain.bo.SysOssBo;
import org.dromara.resource.domain.vo.SysOssUploadVo;
import org.dromara.resource.domain.vo.SysOssVo;
@@ -80,6 +82,32 @@ public class SysOssController extends BaseController {
return R.ok(uploadVo);
}
/**
* 上传OSS对象存储
*
* @param file 文件
*/
@SaCheckPermission("system:oss:upload")
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/qrupload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<SysOssUploadVo> codeUpload(@RequestPart("file") MultipartFile file,String code) {
if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空");
}
QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + code);
if (info==null){
return R.fail("二维码已过期");
}
SysOssVo oss = iSysOssService.qrupload(file,info);
SysOssUploadVo uploadVo = new SysOssUploadVo();
uploadVo.setUrl(oss.getUrl());
uploadVo.setFileName(oss.getOriginalName());
uploadVo.setOssId(oss.getOssId().toString());
return R.ok(uploadVo);
}
/**
* 下载OSS对象存储
*

View File

@@ -0,0 +1,10 @@
package org.dromara.resource.domain;
import lombok.Data;
@Data
public class QrCodeInfo {
private String deviceCode; // 对应“设备码”
private String generateTime; // 对应“生成时间”
private String qrCodeId; // 对应“二维码ID”
private Long userid;
}

View File

@@ -3,6 +3,7 @@ package org.dromara.resource.service;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.resource.domain.QrCodeInfo;
import org.dromara.resource.domain.bo.SysOssBo;
import org.dromara.resource.domain.vo.SysOssVo;
import org.springframework.web.multipart.MultipartFile;
@@ -60,6 +61,14 @@ public interface ISysOssService {
*/
SysOssVo upload(MultipartFile file);
/**
* 上传 MultipartFile 到对象存储服务,并保存文件信息到数据库
*
* @param file 要上传的 MultipartFile 对象
* @return 上传成功后的 SysOssVo 对象,包含文件信息
*/
SysOssVo qrupload(MultipartFile file, QrCodeInfo qrCodeInfo);
/**
* 上传文件到对象存储服务,并保存文件信息到数据库
*

View File

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
@@ -20,6 +21,8 @@ import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.enums.AccessPolicyType;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.resource.domain.QrCodeInfo;
import org.dromara.resource.domain.SysOss;
import org.dromara.resource.domain.bo.SysOssBo;
import org.dromara.resource.domain.vo.SysOssVo;
@@ -33,10 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -199,6 +199,21 @@ public class SysOssServiceImpl implements ISysOssService {
return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
}
@Override
public SysOssVo qrupload(MultipartFile file, QrCodeInfo info) {
String originalfileName = file.getOriginalFilename();
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
OssClient storage = OssFactory.instance();
UploadResult uploadResult;
try {
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
} catch (IOException e) {
throw new ServiceException(e.getMessage());
}
// 保存文件信息
return buildResultEntityQr(originalfileName, suffix, storage.getConfigKey(), uploadResult,info);
}
/**
* 上传文件到对象存储服务,并保存文件信息到数据库
*
@@ -227,6 +242,20 @@ public class SysOssServiceImpl implements ISysOssService {
return this.matchingUrl(sysOssVo);
}
private SysOssVo buildResultEntityQr(String originalfileName, String suffix, String configKey, UploadResult uploadResult,QrCodeInfo info) {
SysOss oss = new SysOss();
oss.setUrl(uploadResult.getUrl());
oss.setFileSuffix(suffix);
oss.setFileName(uploadResult.getFilename());
oss.setOriginalName(originalfileName);
oss.setService(configKey);
oss.setCreateBy(info.getUserid());
oss.setCreateTime(new Date());
baseMapper.insert(oss);
SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
return this.matchingUrl(sysOssVo);
}
/**
* 新增OSS对象存储
*