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
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
This commit is contained in:
commit
15531ae029
@ -34,4 +34,6 @@ public class RemoteResidentPersonVo implements Serializable {
|
||||
private Date authBegDate;
|
||||
|
||||
private Date authEndDate;
|
||||
|
||||
private Integer rosterType;
|
||||
}
|
||||
|
@ -38,12 +38,12 @@ public interface RemoteSisAuthService {
|
||||
Boolean queryPersonAuth(Long authGroupId, Long personId);
|
||||
|
||||
/**
|
||||
* 通过MD5,查询图片id
|
||||
* 通过MD5,查询华为盒子id
|
||||
*
|
||||
* @param imgMd5 图片MD5
|
||||
* @return Long
|
||||
*/
|
||||
Long queryImgIdByImgMd5(String imgMd5);
|
||||
Long queryHuaweiBoxIdByImgMd5(String imgMd5);
|
||||
|
||||
/**
|
||||
* 图片写入华为盒子
|
||||
|
@ -43,4 +43,6 @@ public class RemotePersonAuth implements Serializable {
|
||||
|
||||
private Date authEndDate;
|
||||
|
||||
private Integer rosterType;
|
||||
|
||||
}
|
||||
|
@ -107,7 +107,6 @@ public class ServiceWorkOrdersTypeController extends BaseController {
|
||||
/**
|
||||
* 查询【工单类型】树结构
|
||||
*/
|
||||
@SaCheckPermission("system:workOrdersType:list")
|
||||
@GetMapping("/typeTree")
|
||||
public R<List<ServiceWorkOrdersTypeVo>> typeTree() {
|
||||
return R.ok(serviceWorkOrdersTypeService.typeTree());
|
||||
@ -119,7 +118,6 @@ public class ServiceWorkOrdersTypeController extends BaseController {
|
||||
* @param bo 工单类型
|
||||
* @return 工单类型列表
|
||||
*/
|
||||
@SaCheckPermission("system:workOrdersType:list")
|
||||
@GetMapping("/queryList")
|
||||
public R<List<ServiceWorkOrdersTypeVo>> queryList(ServiceWorkOrdersTypeBo bo) {
|
||||
return R.ok(serviceWorkOrdersTypeService.queryList(bo));
|
||||
|
@ -60,6 +60,14 @@ public class CleanOrder extends TenantEntity {
|
||||
* 保洁类型
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 签到方式(1现场拍照2摄像头签到)
|
||||
*/
|
||||
private String signType;
|
||||
/**
|
||||
* 签到图片
|
||||
*/
|
||||
private String signImgUrl;
|
||||
/**
|
||||
* 评价
|
||||
*/
|
||||
@ -69,7 +77,7 @@ public class CleanOrder extends TenantEntity {
|
||||
*/
|
||||
private String serviceEvaluaText;
|
||||
/**
|
||||
* 图片
|
||||
* 评价图片
|
||||
*/
|
||||
private String imgUrl;
|
||||
/**
|
||||
|
@ -1,5 +1,7 @@
|
||||
package org.dromara.property.domain;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.tenant.core.TenantEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
@ -55,9 +57,10 @@ public class InspectionRoutePoint extends TenantEntity {
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 搜索值
|
||||
* 排序
|
||||
*/
|
||||
private String searchValue;
|
||||
@NotNull(message = "排序不能为空", groups = { EditGroup.class })
|
||||
private Integer sort;
|
||||
|
||||
|
||||
}
|
||||
|
@ -108,6 +108,12 @@ public class ResidentPerson extends TenantEntity {
|
||||
* e8平台id
|
||||
*/
|
||||
private Long eEightId;
|
||||
|
||||
/**
|
||||
* 人员标签类型
|
||||
*/
|
||||
private Integer rosterType;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
|
@ -40,7 +40,7 @@ public class ServiceWorkOrders extends TenantEntity {
|
||||
*/
|
||||
private String orderName;
|
||||
/**
|
||||
* 权重
|
||||
* 权重(1一般2紧急3危急)
|
||||
*/
|
||||
private String processingWeight;
|
||||
/**
|
||||
@ -67,11 +67,11 @@ public class ServiceWorkOrders extends TenantEntity {
|
||||
/**
|
||||
* 处理人姓名
|
||||
*/
|
||||
private long handler;
|
||||
private Long handler;
|
||||
/**
|
||||
* 抄送人
|
||||
*/
|
||||
private long ccPeople;
|
||||
private Long ccPeople;
|
||||
|
||||
/**
|
||||
* 地址
|
||||
|
@ -43,6 +43,10 @@ public class TbVisitorManagement extends TenantEntity {
|
||||
* 访客电话
|
||||
*/
|
||||
private String visitorPhone;
|
||||
/**
|
||||
* 身份证/军
|
||||
*/
|
||||
private String idCard;
|
||||
|
||||
/**
|
||||
* 拜访事由
|
||||
|
@ -49,6 +49,14 @@ public class CleanOrderBo extends BaseEntity {
|
||||
*/
|
||||
@NotBlank(message = "保洁类型不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String type;
|
||||
/**
|
||||
* 签到方式(1现场拍照2摄像头签到)
|
||||
*/
|
||||
private String signType;
|
||||
/**
|
||||
* 签到图片
|
||||
*/
|
||||
private String signImgUrl;
|
||||
/**
|
||||
* 保洁id
|
||||
*/
|
||||
|
@ -33,6 +33,11 @@ public class InspectionRoutePointBo extends BaseEntity {
|
||||
*/
|
||||
// @NotNull(message = "巡检路线id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long routeId;
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
@NotNull(message = "排序不能为空", groups = { EditGroup.class })
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 巡检点id
|
||||
|
@ -121,5 +121,10 @@ public class ResidentPersonBo extends BaseEntity {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 人员标签类型
|
||||
*/
|
||||
private Integer rosterType = 2;
|
||||
|
||||
|
||||
}
|
||||
|
@ -51,7 +51,10 @@ public class TbVisitorManagementBo extends BaseEntity {
|
||||
*/
|
||||
@NotBlank(message = "访客电话不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String visitorPhone;
|
||||
|
||||
/**
|
||||
* 身份证/军
|
||||
*/
|
||||
private String idCard;
|
||||
/**
|
||||
* 拜访事由
|
||||
*/
|
||||
|
@ -55,6 +55,14 @@ public class CleanOrderVo implements Serializable {
|
||||
* 保洁类型
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 签到方式(1现场拍照2摄像头签到)
|
||||
*/
|
||||
private String signType;
|
||||
/**
|
||||
* 签到图片
|
||||
*/
|
||||
private String signImgUrl;
|
||||
/**
|
||||
* 评价
|
||||
*/
|
||||
|
@ -2,6 +2,8 @@ package org.dromara.property.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.property.domain.InspectionRoutePoint;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
@ -76,10 +78,10 @@ public class InspectionRoutePointVo implements Serializable {
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 搜索值
|
||||
* 排序
|
||||
*/
|
||||
@ExcelProperty(value = "搜索值")
|
||||
private String searchValue;
|
||||
@NotNull(message = "排序不能为空", groups = { EditGroup.class })
|
||||
private Integer sort;
|
||||
|
||||
|
||||
}
|
||||
|
@ -138,5 +138,10 @@ public class ResidentPersonVo implements Serializable {
|
||||
*/
|
||||
private String idCard;
|
||||
|
||||
/**
|
||||
* 人员标签类型
|
||||
*/
|
||||
private Integer rosterType;
|
||||
|
||||
|
||||
}
|
||||
|
@ -56,7 +56,10 @@ public class TbVisitorManagementVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "访客电话")
|
||||
private String visitorPhone;
|
||||
|
||||
/**
|
||||
* 身份证/军
|
||||
*/
|
||||
private String idCard;
|
||||
/**
|
||||
* 拜访事由
|
||||
*/
|
||||
|
@ -35,6 +35,7 @@ public class RemoteResidentPersonServiceImpl implements RemoteResidentPersonServ
|
||||
remoteResidentPersonVo.setName(vo.getUserName());
|
||||
remoteResidentPersonVo.setIdCard(vo.getIdCard());
|
||||
remoteResidentPersonVo.setGender(vo.getGender());
|
||||
remoteResidentPersonVo.setRosterType(vo.getRosterType());
|
||||
remoteResidentPersonVo.setAuthGroupId(vo.getAuthGroupId());
|
||||
remoteResidentPersonVo.setAuthBegDate(vo.getAuthBegDate());
|
||||
remoteResidentPersonVo.setAuthEndDate(vo.getAuthEndDate());
|
||||
|
@ -62,10 +62,16 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
||||
*/
|
||||
@Override
|
||||
public AttendanceArrangementVo queryById(Long id) {
|
||||
AttendanceArrangementVo vo = baseMapper.selectVoById(id);
|
||||
//根据id查询出groupId
|
||||
Long groupId = baseMapper.selectById(id).getGroupId();
|
||||
//根据groupId查询出考勤组信息
|
||||
AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId);
|
||||
vo.setAttendanceGroup(attendanceGroup);
|
||||
|
||||
//根据id查询排班人员信息
|
||||
List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().eq(AttendanceUserGroup::getScheduleId, id));
|
||||
//将排班人员信息添加到排班信息中
|
||||
AttendanceArrangementVo vo = baseMapper.selectVoById(id);
|
||||
vo.setUserGroupList(userGroupList);
|
||||
return vo;
|
||||
}
|
||||
@ -91,7 +97,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
||||
Page<AttendanceArrangementVo> attendanceArrangementVoPage = result.setRecords(result.getRecords().stream().map(vo -> {
|
||||
//根据当前日期查询在开始时间和结束时间之间的排班信息
|
||||
//从前端查询出来的当前日期,判断是否在排班时间内
|
||||
if (bo.getCurrentDate().isAfter(vo.getStartDate()) && bo.getCurrentDate().isBefore(vo.getEndDate())) {
|
||||
if ((bo.getCurrentDate().isAfter(vo.getStartDate()) || bo.getCurrentDate().isEqual(vo.getStartDate())) && (bo.getCurrentDate().isBefore(vo.getEndDate()) || bo.getCurrentDate().isEqual(vo.getEndDate()))) {
|
||||
//1.查询人员表信息
|
||||
//根据查询出来的result取出shceduleId
|
||||
Long scheduleId = vo.getId();
|
||||
@ -431,11 +437,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
||||
|
||||
judgeDate(bo, add);
|
||||
|
||||
// AttendanceArrangementGroup attendanceArrangementGroup = new AttendanceArrangementGroup();
|
||||
// //向排班和考勤组中间表中插入数据
|
||||
// attendanceArrangementGroup.setGroupId(add.getGroupId());
|
||||
// attendanceArrangementGroup.setArrangementId(bo.getId());
|
||||
// arrangementGroupMapper.insert(attendanceArrangementGroup);
|
||||
|
||||
|
||||
|
||||
//取出当前新增的排班的id
|
||||
Long ArrangementId = add.getId();
|
||||
@ -473,21 +476,28 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
||||
* @param bo 排班
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public Boolean updateByBo(AttendanceArrangementBo bo) {
|
||||
AttendanceArrangement update = MapstructUtils.convert(bo, AttendanceArrangement.class);
|
||||
validEntityBeforeSave(update);
|
||||
|
||||
judgeDate(bo, update);
|
||||
// judgeDate(bo, update);
|
||||
|
||||
//取出当前排班的id
|
||||
assert update != null;
|
||||
Long ArrangementId = update.getId();
|
||||
//用获取到的排班id向attendanceUserGroup表中更新数据
|
||||
//根据arrangementId查询出人员组的所有employeeId
|
||||
List<Long> employeeIdList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().eq(AttendanceUserGroup::getScheduleId, ArrangementId))
|
||||
.stream().map(AttendanceUserGroup::getEmployeeId).toList();
|
||||
//根据employeeId和ArrangementId删除attendanceUserGroup表中的数据
|
||||
userGroupMapper.delete(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getEmployeeId, employeeIdList)
|
||||
.eq(AttendanceUserGroup::getScheduleId, ArrangementId));
|
||||
|
||||
|
||||
//用获取到的排班id向attendanceUserGroup表中批量插入数据
|
||||
List<AttendanceUserGroup> userGroupList = bo.getUserGroupList();
|
||||
for (AttendanceUserGroup userGroup : userGroupList) {
|
||||
userGroup.setScheduleId(ArrangementId);
|
||||
userGroupMapper.updateById(userGroup);
|
||||
}
|
||||
userGroupMapper.insertBatch(userGroupList);
|
||||
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
@ -497,8 +507,39 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
||||
*/
|
||||
private void validEntityBeforeSave(AttendanceArrangement entity) {
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
//新增时判断在该时间段内是否有排班
|
||||
|
||||
// //新增时判断在该时间段内是否有排班
|
||||
// //1.查询所有的排班信息
|
||||
// List<AttendanceArrangement> arrangementList = baseMapper.selectList();
|
||||
//
|
||||
// //使用between查询排班的开始时间在新增的开始时间和结束时间的排班信息
|
||||
// List<AttendanceArrangementVo> startResult = baseMapper.selectVoList(Wrappers.<AttendanceArrangement>lambdaQuery()
|
||||
// .between(AttendanceArrangement::getStartDate, entity.getStartDate(), entity.getStartDate().plusDays(1))
|
||||
// .eq(AttendanceArrangement::getGroupId, entity.getGroupId()));
|
||||
// //查询排班的结束时间在新增的开始时间和结束时间的排班信息
|
||||
// List<AttendanceArrangement> endResult = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery()
|
||||
// .between(AttendanceArrangement::getEndDate, entity.getStartDate(), entity.getStartDate().plusDays(1))
|
||||
// .eq(AttendanceArrangement::getGroupId, entity.getGroupId()));
|
||||
//
|
||||
// //将两个集合进行合并
|
||||
// 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());
|
||||
//
|
||||
// //去重
|
||||
// result = result.stream().distinct().toList();
|
||||
//
|
||||
//
|
||||
//
|
||||
// //2.遍历排班信息,判断是否有时间冲突
|
||||
// for (AttendanceArrangement arrangement : arrangementList) {
|
||||
// //如果时间
|
||||
// if ()
|
||||
// }
|
||||
//
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
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;
|
||||
@ -14,7 +13,6 @@ 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.bo.InspectionRoutePointBo;
|
||||
import org.dromara.property.domain.vo.InspectionPointVo;
|
||||
import org.dromara.property.domain.vo.InspectionRoutePointVo;
|
||||
import org.dromara.property.domain.vo.InspectionRouteVo;
|
||||
@ -47,7 +45,7 @@ public class InspectionRouteServiceImpl implements IInspectionRouteService {
|
||||
|
||||
/**
|
||||
* 查询巡检路线
|
||||
*
|
||||
*-
|
||||
* @param id 主键
|
||||
* @return 巡检路线
|
||||
*/
|
||||
|
@ -140,31 +140,26 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
|
||||
ResidentPerson update = MapstructUtils.convert(bo, ResidentPerson.class);
|
||||
assert update != null;
|
||||
|
||||
boolean flag;
|
||||
// 人脸照片存在时,才同步修改授权
|
||||
if (update.getAuthGroupId() != null && update.getAuthEndDate() != null && update.getImg() != null) {
|
||||
ResidentPersonVo vo = queryById(update.getId());
|
||||
Long e8Id = vo.getEEightId();
|
||||
baseMapper.updateById(update);
|
||||
|
||||
// 显式移除e8id
|
||||
LambdaUpdateWrapper<ResidentPerson> lqw = new LambdaUpdateWrapper<>();
|
||||
lqw.eq(ResidentPerson::getId, update.getId())
|
||||
.set(ResidentPerson::getEEightId, null);
|
||||
flag = baseMapper.update(lqw) > 0;
|
||||
boolean check = baseMapper.update(lqw) > 0;
|
||||
|
||||
|
||||
if (flag && e8Id != null) {
|
||||
if (check && e8Id != null) {
|
||||
log.info("开始修改授权记录, {}", bo.getUserName());
|
||||
// 先删除,定时任务增加
|
||||
Boolean auth = remoteSisAuthService.deletePersonAuth(List.of(update.getId()), List.of(e8Id));
|
||||
Assert.isTrue(auth, "修改授权记录失败!");
|
||||
}
|
||||
|
||||
} else {
|
||||
flag = baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
boolean flag = baseMapper.updateById(update) > 0;
|
||||
Assert.isTrue(flag, "修改入驻员工失败!");
|
||||
return flag;
|
||||
}
|
||||
|
@ -51,7 +51,6 @@ import java.util.stream.Collectors;
|
||||
public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
|
||||
private final ServiceWorkOrdersMapper baseMapper;
|
||||
private final ServiceWorkOrdersTypeMapper serviceWorkOrdersTypeMapper;
|
||||
private final ServiceWorkOrdersTypeMapper typesMapper;
|
||||
private final ResidentPersonMapper residentPersonMapper;
|
||||
private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper;
|
||||
@ -160,11 +159,19 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ServiceWorkOrders> buildQueryWrapper(ServiceWorkOrdersBo bo) {
|
||||
//查询类型下子类型id
|
||||
LambdaQueryWrapper<ServiceWorkOrdersType> OrdersTypeWrapper = new LambdaQueryWrapper<>();
|
||||
OrdersTypeWrapper.eq(ServiceWorkOrdersType::getParentId,bo.getType());
|
||||
List<ServiceWorkOrdersType> serviceWorkOrdersTypes = typesMapper.selectList(OrdersTypeWrapper);
|
||||
List<Long> typeIds = serviceWorkOrdersTypes.stream()
|
||||
.map(ServiceWorkOrdersType::getId)
|
||||
.collect(Collectors.toList());
|
||||
typeIds.add(bo.getType());
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<ServiceWorkOrders> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(ServiceWorkOrders::getId);
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), ServiceWorkOrders::getOrderNo, bo.getOrderNo());
|
||||
lqw.eq(ObjectUtil.isNotEmpty(bo.getStatus()), ServiceWorkOrders::getStatus, bo.getStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), ServiceWorkOrders::getStatus, bo.getStatus());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getOrderName()), ServiceWorkOrders::getOrderName, bo.getOrderName());
|
||||
lqw.eq(bo.getDispatchTime() != null, ServiceWorkOrders::getDispatchTime, bo.getDispatchTime());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getInitiatorName()), ServiceWorkOrders::getInitiatorPeople, bo.getInitiatorName());
|
||||
@ -173,7 +180,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
lqw.eq(bo.getPlanCompleTime() != null, ServiceWorkOrders::getPlanCompleTime, bo.getPlanCompleTime());
|
||||
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.in(Objects.nonNull(bo.getType()), ServiceWorkOrders::getType, typeIds);
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getProcessingWeight()), ServiceWorkOrders::getProcessingWeight, bo.getProcessingWeight());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), ServiceWorkOrders::getSearchValue, bo.getSearchValue());
|
||||
return lqw;
|
||||
@ -459,7 +466,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
Integer count = entry.getValue().intValue();
|
||||
|
||||
// 查询类型名称
|
||||
ServiceWorkOrdersType serviceWorkOrdersType = serviceWorkOrdersTypeMapper.selectById(typeId);
|
||||
ServiceWorkOrdersType serviceWorkOrdersType = typesMapper.selectById(typeId);
|
||||
String type = serviceWorkOrdersType != null ? serviceWorkOrdersType.getOrderTypeName() : "未知类型";
|
||||
|
||||
// 添加到结果中
|
||||
|
@ -1,6 +1,7 @@
|
||||
package org.dromara.property.service.impl;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
@ -80,9 +81,11 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS
|
||||
LambdaQueryWrapper<ServiceWorkOrdersType> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(ServiceWorkOrdersType::getSort);
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getOrderTypeNo()), ServiceWorkOrdersType::getOrderTypeNo, bo.getOrderTypeNo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getOrderTypeNo()), ServiceWorkOrdersType::getOrderTypeNo, bo.getOrderTypeNo());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getOrderTypeName()), ServiceWorkOrdersType::getOrderTypeName, bo.getOrderTypeName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getOperationMode()), ServiceWorkOrdersType::getOperationMode, bo.getOperationMode());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), ServiceWorkOrdersType::getSearchValue, bo.getSearchValue());
|
||||
lqw.eq(ObjectUtil.isNotEmpty(bo.getParentId()), ServiceWorkOrdersType::getParentId, bo.getParentId());
|
||||
lqw.isNull(bo.getFilterSubNodes() != null && bo.getFilterSubNodes(), ServiceWorkOrdersType::getParentId);
|
||||
lqw.ne(bo.getExcludeId()!=null,ServiceWorkOrdersType::getId,bo.getExcludeId());
|
||||
return lqw;
|
||||
|
@ -18,6 +18,9 @@ import org.dromara.property.mapper.MachineMaintainPlanStaffMapper;
|
||||
import org.dromara.property.mapper.MachineMaintainTaskMapper;
|
||||
import org.dromara.property.mapper.ResidentPersonMapper;
|
||||
import org.dromara.property.service.IMachineMaintainPlanService;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@ -39,17 +42,21 @@ import static org.dromara.common.mybatis.core.mapper.BaseMapperPlus.log;
|
||||
* @Date:2025/7/17 09:25
|
||||
* @Description:
|
||||
**/
|
||||
@Validated
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/machineTask")
|
||||
//@Validated
|
||||
//@RequiredArgsConstructor
|
||||
//@RestController
|
||||
//@RequestMapping("/machineTask")
|
||||
public class MachineTasks {
|
||||
private final IMachineMaintainPlanService machineMaintainPlanService;
|
||||
private final MachineMaintainTaskMapper machineMaintainTaskMapper;
|
||||
private final MachineMaintainPlanStaffMapper machineMaintainPlanStaffMapper;
|
||||
private final ResidentPersonMapper residentPersonMapper;
|
||||
|
||||
@GetMapping("/taskId")
|
||||
//@GetMapping("/taskId")
|
||||
@Scheduled(cron = "0 0 3 * * ?")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doMachineMaintainPianTask() {
|
||||
// 查询所有启用状态的巡检计划
|
||||
MachineMaintainPlanBo machineMaintainPlanBo= new MachineMaintainPlanBo();
|
||||
|
@ -0,0 +1,42 @@
|
||||
package org.dromara.property.tasks;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.property.domain.ServiceWorkOrders;
|
||||
import org.dromara.property.mapper.ServiceWorkOrdersMapper;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
|
||||
/**
|
||||
* @Author:yuyongle
|
||||
* @Date:2025/8/7 14:21
|
||||
* @Description:自动派单
|
||||
**/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class ServiceWorkOrderTasks {
|
||||
private ServiceWorkOrdersMapper workOrdersMapper;
|
||||
|
||||
//查询状态为创建工单的工单
|
||||
private void handleServiceWorkOrder() {
|
||||
List<ServiceWorkOrders> serviceWorkOrderList = workOrdersMapper.selectList(
|
||||
new LambdaQueryWrapper<ServiceWorkOrders>()
|
||||
.eq(ServiceWorkOrders::getStatus, "0"));
|
||||
if(CollUtil.isNotEmpty(serviceWorkOrderList)){
|
||||
serviceWorkOrderList.stream().forEach(s->{
|
||||
|
||||
});
|
||||
}else {
|
||||
log.info("派单工单为:{}",serviceWorkOrderList.size());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package org.dromara.sis.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.sis.domain.bo.SisAuthRecordBo;
|
||||
import org.dromara.sis.service.ISisDataSyncService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
||||
/**
|
||||
* 主动推送的同步数据
|
||||
* 前端访问路由地址为:/sis/dataSync
|
||||
*
|
||||
* @author lsm
|
||||
* @since 2025-07-14
|
||||
*/
|
||||
@Validated
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/dataSync")
|
||||
public class SisDataSyncController extends BaseController {
|
||||
|
||||
private final ISisDataSyncService sisDataSyncService;
|
||||
|
||||
|
||||
@SaCheckPermission("sis:dataSync:add")
|
||||
@Log(title = "人员库授权", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/add")
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody SisAuthRecordBo bo, HttpServletRequest request) {
|
||||
log.info("开始同步报警记录数据...");
|
||||
// return toAjax();
|
||||
return R.ok();
|
||||
}
|
||||
}
|
@ -83,4 +83,9 @@ public class SisPersonLibImg extends TenantEntity {
|
||||
*/
|
||||
private String imgMd5Value;
|
||||
|
||||
/**
|
||||
* 人员标签
|
||||
*/
|
||||
private Integer rosterType;
|
||||
|
||||
}
|
||||
|
@ -91,4 +91,9 @@ public class SisPersonLibImgBo extends BaseEntity {
|
||||
*/
|
||||
private String imgMd5Value;
|
||||
|
||||
/**
|
||||
* 人员标签
|
||||
*/
|
||||
private Integer rosterType;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
package org.dromara.sis.domain.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author lsm
|
||||
* @apiNote RosterTypeEnum
|
||||
* @since 2025/8/7
|
||||
*/
|
||||
@Getter
|
||||
public enum RosterTypeEnum {
|
||||
/**
|
||||
* 红名单
|
||||
*/
|
||||
RED_LIST(1),
|
||||
|
||||
/**
|
||||
* 白名单
|
||||
*/
|
||||
WHITE_LIST(2),
|
||||
|
||||
/**
|
||||
* 黑名单名单
|
||||
*/
|
||||
BLACK_LIST(3);
|
||||
|
||||
private final Integer code;
|
||||
|
||||
RosterTypeEnum(Integer code) {
|
||||
this.code = code;
|
||||
}
|
||||
}
|
@ -62,5 +62,9 @@ public class SisAuthRecordVo implements Serializable {
|
||||
@ExcelProperty(value = "结束时间")
|
||||
private Date endDate;
|
||||
|
||||
/**
|
||||
* 人员标签
|
||||
*/
|
||||
private Integer rosterType;
|
||||
|
||||
}
|
||||
|
@ -102,4 +102,10 @@ public class SisPersonLibImgVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "图片MD5")
|
||||
private String imgMd5Value;
|
||||
|
||||
/**
|
||||
* 人员标签
|
||||
*/
|
||||
@ExcelProperty(value = "人员标签")
|
||||
private Integer rosterType;
|
||||
}
|
||||
|
@ -85,15 +85,15 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过MD5,查询图片id
|
||||
* 通过MD5,查询华为盒子id
|
||||
*
|
||||
* @param imgMd5 图片MD5
|
||||
* @return Long
|
||||
*/
|
||||
@Override
|
||||
public Long queryImgIdByImgMd5(String imgMd5) {
|
||||
public Long queryHuaweiBoxIdByImgMd5(String imgMd5) {
|
||||
SisPersonLibImgVo vo = sisPersonLibImgService.queryByImgMd5(imgMd5);
|
||||
return vo != null ? vo.getId() : null;
|
||||
return vo != null ? vo.getRemoteImgId() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -118,6 +118,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
|
||||
|
||||
pId = huaWeiBoxApi.addPerson(List.of(req));
|
||||
} catch (Exception e) {
|
||||
log.error("同步华为盒子失败:{}----{}", person.getName(), person.getId());
|
||||
return null;
|
||||
}
|
||||
return pId;
|
||||
@ -152,7 +153,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
|
||||
try {
|
||||
log.info("e8平台上传照片");
|
||||
String e8ImgUrl = e8PlatformApi.uploadFace(imgByte);
|
||||
Assert.notNull(e8ImgUrl, "图片上传E8平台失败");
|
||||
Assert.notNull(e8ImgUrl, "图片上传E8平台失败:" + person.getName() + "----" + person.getId());
|
||||
log.info("e8平台上传照片完成");
|
||||
count++; // 图片上传完成步进器+1
|
||||
|
||||
@ -161,7 +162,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
|
||||
req.setName(person.getName());
|
||||
req.setGender(person.getSex() != 1 ? 0 : 1);
|
||||
e8Id = e8PlatformApi.addCustomer(req).getId();
|
||||
Assert.notNull(e8Id, "e8同步新建人员失败");
|
||||
Assert.notNull(e8Id, "e8同步新建人员失败:" + person.getName() + "----" + person.getId());
|
||||
log.info("e8同步新建人员完成");
|
||||
count++; // 新增人员完成步进器+1
|
||||
|
||||
@ -172,7 +173,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
|
||||
voucherReq.setTxtData(e8ImgUrl);
|
||||
voucherReq.setCardType(34);
|
||||
Long voucherId = e8PlatformApi.issueVoucher(voucherReq);
|
||||
Assert.notNull(voucherId, "e8平台发行凭证失败");
|
||||
Assert.notNull(voucherId, "e8平台发行凭证失败:" + person.getName() + "----" + person.getId());
|
||||
log.info("e8平台发行凭证成功");
|
||||
count++; // 发行凭证完成步进器+1
|
||||
|
||||
@ -199,11 +200,12 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService {
|
||||
|
||||
log.info("e8平台开始授权");
|
||||
Boolean flag = e8PlatformApi.addCustomerAuth(authReq);
|
||||
Assert.isTrue(flag, "E8平台授权失败!");
|
||||
Assert.isTrue(flag, "E8平台授权失败:" + person.getName() + "----" + person.getId());
|
||||
log.info("E8平台授权完成!");
|
||||
count++; // 授权完成步进器+1
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info(e.getMessage());
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,7 @@
|
||||
package org.dromara.sis.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.dromara.sis.domain.SisAlarmEvents;
|
||||
|
||||
public interface SisDataSyncMapper extends BaseMapper<SisAlarmEvents> {
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package org.dromara.sis.sdk.hik.service;
|
||||
|
||||
import com.sun.jna.Memory;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||
@ -18,7 +20,7 @@ public class CamearService extends SdkBaseServer {
|
||||
/**
|
||||
* 获取设备通道信息
|
||||
*
|
||||
* @return
|
||||
* @return DeviceInfo
|
||||
*/
|
||||
public static DeviceInfo getDeviceChannelInfo(int lUserID) {
|
||||
HCNetSDK.NET_DVR_IPPARACFG_V40 lpOutBuffer = new HCNetSDK.NET_DVR_IPPARACFG_V40();
|
||||
@ -77,4 +79,78 @@ public class CamearService extends SdkBaseServer {
|
||||
return deviceInfo;
|
||||
}
|
||||
|
||||
public static void isAPI(int lUserID, String url) {
|
||||
// 输入参数
|
||||
HCNetSDK.NET_DVR_XML_CONFIG_INPUT strInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
|
||||
strInput.dwSize = strInput.size(); // 初始化结构体内存
|
||||
|
||||
// 2. 构造URL - 必须包含 \r\n 结束符
|
||||
// String url = "GET /ISAPI/Intelligent/capabilities\r\n";
|
||||
byte[] urlBytes = url.getBytes();
|
||||
Memory urlMemory = new Memory(urlBytes.length + 1); // +1 for null terminator
|
||||
urlMemory.write(0, urlBytes, 0, urlBytes.length);
|
||||
urlMemory.setByte(urlBytes.length, (byte) 0); // 添加NUL终止符
|
||||
|
||||
strInput.lpRequestUrl = urlMemory;
|
||||
strInput.dwRequestUrlLen = urlBytes.length; // 不包括NUL终止符
|
||||
|
||||
// 3. 输入缓冲区设为空指针
|
||||
strInput.lpInBuffer = Pointer.NULL;
|
||||
strInput.dwInBufferSize = 0;
|
||||
|
||||
|
||||
// 输出参数
|
||||
HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT strOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
|
||||
strOutput.dwSize = strOutput.size();
|
||||
|
||||
// 5. 分配输出缓冲区 (8KB)
|
||||
int outBufSize = 8 * 1024;
|
||||
Memory outBuffer = new Memory(outBufSize);
|
||||
outBuffer.clear(); // 清零缓冲区
|
||||
|
||||
// 6. 分配状态缓冲区 (1KB)
|
||||
int statusSize = 1024;
|
||||
Memory statusBuffer = new Memory(statusSize);
|
||||
statusBuffer.clear(); // 清零缓冲区
|
||||
|
||||
strOutput.lpOutBuffer = outBuffer;
|
||||
strOutput.dwOutBufferSize = outBufSize;
|
||||
strOutput.lpStatusBuffer = statusBuffer;
|
||||
strOutput.dwStatusSize = statusSize;
|
||||
|
||||
// 7. 调用前写入结构体
|
||||
strOutput.write(); // 将Java结构体写入本地内存
|
||||
strOutput.write(); // 将Java结构体写入本地内存
|
||||
|
||||
// 调用SDK方法
|
||||
boolean success = hcNetSDK.NET_DVR_STDXMLConfig(lUserID, strInput, strOutput);
|
||||
|
||||
if (!success) {
|
||||
int errorCode = hcNetSDK.NET_DVR_GetLastError();
|
||||
System.err.println("NET_DVR_STDXMLConfig failed, error code: " + errorCode);
|
||||
|
||||
// 打印状态信息帮助调试
|
||||
if (strOutput.dwReturnedXMLSize > 0) {
|
||||
String status = statusBuffer.getString(0);
|
||||
System.err.println("Status: " + status);
|
||||
}
|
||||
} else {
|
||||
System.out.println("NET_DVR_STDXMLConfig successfully!");
|
||||
|
||||
// 9. 读取前同步结构体字段
|
||||
strOutput.read(); // 从本地内存读取更新后的结构体
|
||||
|
||||
// 检查实际返回的数据大小
|
||||
int returnedSize = strOutput.dwReturnedXMLSize;
|
||||
if (returnedSize > 0) {
|
||||
// 使用正确的长度读取字符串
|
||||
String xmlResponse = outBuffer.getString(0);
|
||||
System.out.println("Response size: " + returnedSize);
|
||||
System.out.println(xmlResponse);
|
||||
} else {
|
||||
System.out.println("No data returned");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,7 @@
|
||||
package org.dromara.sis.service;
|
||||
|
||||
/**
|
||||
* 告警数据同步Service接口
|
||||
*/
|
||||
public interface ISisDataSyncService {
|
||||
}
|
@ -18,6 +18,7 @@ import org.dromara.sis.api.domain.RemotePersonAuth;
|
||||
import org.dromara.sis.domain.bo.SisAccessControlBo;
|
||||
import org.dromara.sis.domain.bo.SisElevatorInfoBo;
|
||||
import org.dromara.sis.domain.bo.SisPersonLibImgBo;
|
||||
import org.dromara.sis.domain.enums.RosterTypeEnum;
|
||||
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
|
||||
import org.dromara.sis.domain.vo.SisPersonLibImgVo;
|
||||
@ -115,30 +116,34 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByPerson(RemotePersonAuth bo) {
|
||||
SisAuthRecord add = new SisAuthRecord();
|
||||
add.setTargetType(1L);
|
||||
add.setTargetId(bo.getId());
|
||||
add.setGroupId(bo.getAuthGroupId());
|
||||
add.setBegDate(bo.getAuthBegDate());
|
||||
add.setEndDate(bo.getAuthEndDate());
|
||||
add.setTenantId("000000");
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
Assert.isTrue(flag, "新增授权记录失败");
|
||||
// 黑名单不加授权记录
|
||||
if (!Objects.equals(bo.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) {
|
||||
SisAuthRecord add = new SisAuthRecord();
|
||||
add.setTargetType(1L);
|
||||
add.setTargetId(bo.getId());
|
||||
add.setGroupId(bo.getAuthGroupId());
|
||||
add.setBegDate(bo.getAuthBegDate());
|
||||
add.setEndDate(bo.getAuthEndDate());
|
||||
add.setTenantId("000000");
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
Assert.isTrue(flag, "新增授权记录失败");
|
||||
}
|
||||
|
||||
try {
|
||||
// 记录图片md5值
|
||||
byte[] imgByte = remoteFileService.downloadToByteArray(Long.parseLong(bo.getOssId()));
|
||||
String md5 = calculateMD5(imgByte);
|
||||
// 写入安防人像信息
|
||||
this.syncPersonImg(bo, md5);
|
||||
Boolean sync = this.syncPersonImg(bo, md5);
|
||||
Assert.isTrue(sync, "写入安防人像信息失败");
|
||||
} catch (Exception e) {
|
||||
log.info("下载图片失败");
|
||||
log.info(e.getMessage());
|
||||
}
|
||||
|
||||
return flag;
|
||||
return true;
|
||||
}
|
||||
|
||||
private void syncPersonImg(RemotePersonAuth bo, String md5) {
|
||||
private Boolean syncPersonImg(RemotePersonAuth bo, String md5) {
|
||||
log.info("开始写入安防人像信息");
|
||||
SisPersonLibImgBo personLibImg = new SisPersonLibImgBo();
|
||||
personLibImg.setImgOssId(Long.parseLong(bo.getOssId()));
|
||||
@ -149,8 +154,10 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
|
||||
personLibImg.setCertificateNo(bo.getIdCardNumber());
|
||||
personLibImg.setResidentPersonId(bo.getId());
|
||||
personLibImg.setImgMd5Value(md5);
|
||||
sisPersonLibImgService.insertByBo(personLibImg);
|
||||
log.info("写入安防人像信息完成");
|
||||
personLibImg.setRosterType(bo.getRosterType());
|
||||
Boolean flag = sisPersonLibImgService.insertByBo(personLibImg);
|
||||
if (flag) log.info("写入安防人像信息完成");
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -352,28 +359,26 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
|
||||
public Boolean deleteByPersonIds(Collection<Long> ids, Collection<Long> e8Ids) {
|
||||
LambdaQueryWrapper<SisAuthRecord> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.in(SisAuthRecord::getTargetId, ids);
|
||||
boolean flag = baseMapper.delete(lqw) > 0;
|
||||
Assert.isTrue(flag, "删除授权记录失败");
|
||||
baseMapper.delete(lqw);
|
||||
|
||||
if (flag) {
|
||||
List<SisPersonLibImgVo> list = new ArrayList<>();
|
||||
ids.forEach(id -> {
|
||||
SisPersonLibImgVo imgVo = sisPersonLibImgService.queryByPersonId(id);
|
||||
if (imgVo != null) {
|
||||
list.add(imgVo);
|
||||
}
|
||||
});
|
||||
Collection<Long> imgIds = list.stream().map(SisPersonLibImgVo::getId).toList();
|
||||
if (CollUtil.isNotEmpty(imgIds)){
|
||||
flag = sisPersonLibImgService.deleteWithValidByIds(imgIds, false);
|
||||
Assert.isTrue(flag, "删除人像库图片失败");
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(e8Ids)){
|
||||
e8Ids.forEach(e8PlatformApi::deleteCustomer);
|
||||
List<SisPersonLibImgVo> list = new ArrayList<>();
|
||||
ids.forEach(id -> {
|
||||
SisPersonLibImgVo imgVo = sisPersonLibImgService.queryByPersonId(id);
|
||||
if (imgVo != null) {
|
||||
list.add(imgVo);
|
||||
}
|
||||
});
|
||||
Collection<Long> imgIds = list.stream().map(SisPersonLibImgVo::getId).toList();
|
||||
if (CollUtil.isNotEmpty(imgIds)) {
|
||||
Boolean flag = sisPersonLibImgService.deleteWithValidByIds(imgIds, false);
|
||||
Assert.isTrue(flag, "删除人像库图片失败");
|
||||
}
|
||||
return flag;
|
||||
|
||||
if (CollUtil.isNotEmpty(e8Ids)) {
|
||||
e8Ids.forEach(e8PlatformApi::deleteCustomer);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -382,7 +387,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
|
||||
* @param groupIds 权限组IDs
|
||||
*/
|
||||
@Override
|
||||
public Boolean queryByGroupIds(Collection<Long> groupIds){
|
||||
public Boolean queryByGroupIds(Collection<Long> groupIds) {
|
||||
LambdaQueryWrapper<SisAuthRecord> lqw = Wrappers.lambdaQuery();
|
||||
lqw.in(SisAuthRecord::getGroupId, groupIds);
|
||||
List<SisAuthRecordVo> authVoList = baseMapper.selectVoList(lqw);
|
||||
|
@ -0,0 +1,15 @@
|
||||
package org.dromara.sis.service.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.service.ISisDataSyncService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 告警数据同步Service业务层处理
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class SisDataSyncServiceImpl implements ISisDataSyncService {
|
||||
}
|
@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.dromara.property.api.RemoteFloorService;
|
||||
import org.dromara.sis.domain.enums.RosterTypeEnum;
|
||||
import org.dromara.sis.domain.vo.*;
|
||||
import org.dromara.sis.producer.CleanLiftAuthRocketProducer;
|
||||
import org.dromara.sis.sdk.e8.E8PlatformApi;
|
||||
@ -70,6 +71,12 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
|
||||
// 不是内部人员 产生紧急的告警信息
|
||||
alarmEventsService.createAlarmRecord(deviceIp, 1, 1, "陌生人员入内", smallImg, bigImg);
|
||||
return;
|
||||
}else {
|
||||
if (Objects.equals(authRecord.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) {
|
||||
log.info("人员[{}]在黑名单中,暂不处理。", person);
|
||||
alarmEventsService.createAlarmRecord(deviceIp, 3, 1, "黑名单人员入内", smallImg, bigImg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Date now = new Date();
|
||||
|
@ -5,8 +5,11 @@ import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.dromara.property.api.RemoteFloorService;
|
||||
import org.dromara.property.api.domain.vo.RemoteFloorVo;
|
||||
import org.dromara.sis.domain.AlarmRecord;
|
||||
import org.dromara.sis.domain.SisAlarmEvents;
|
||||
import org.dromara.sis.domain.bo.SisAlarmEventsBo;
|
||||
import org.dromara.sis.service.AlarmRecordService;
|
||||
import org.dromara.sis.service.ApiService;
|
||||
import org.dromara.sis.service.ISisAlarmEventsService;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -24,13 +27,15 @@ public class DataSyncTask {
|
||||
|
||||
private final ApiService apiService;
|
||||
private final AlarmRecordService alarmRecordService;
|
||||
private final ISisAlarmEventsService sisAlarmEventsService;
|
||||
|
||||
@Value("${sync.pageSize:100}")
|
||||
private int pageSize;
|
||||
|
||||
public DataSyncTask(ApiService apiService, AlarmRecordService alarmRecordService) {
|
||||
public DataSyncTask(ApiService apiService, AlarmRecordService alarmRecordService, ISisAlarmEventsService sisAlarmEventsService) {
|
||||
this.apiService = apiService;
|
||||
this.alarmRecordService = alarmRecordService;
|
||||
this.sisAlarmEventsService = sisAlarmEventsService;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,11 +77,29 @@ public class DataSyncTask {
|
||||
// 提取操作记录数据
|
||||
Map<Long, List<Map<String, Object>>> operatorMap = new HashMap<>();
|
||||
for (Map<String, Object> recordMap : recordList) {
|
||||
Long recordId = Long.valueOf((Integer)recordMap.get("Id"));
|
||||
Long recordId = Long.valueOf((Integer) recordMap.get("Id"));
|
||||
List<Map<String, Object>> operators = (List<Map<String, Object>>) recordMap.get("TaskOperators");
|
||||
if (operators != null && !operators.isEmpty()) {
|
||||
operatorMap.put(recordId, operators);
|
||||
}
|
||||
|
||||
//同步成功后,将两张表的数据合并到alarmEvents表中
|
||||
SisAlarmEventsBo sisAlarmEvents = new SisAlarmEventsBo();
|
||||
sisAlarmEvents.setId(recordId);
|
||||
sisAlarmEvents.setType(Long.valueOf((Integer) recordMap.get("Type")));
|
||||
sisAlarmEvents.setLevel(Long.valueOf((Integer) recordMap.get("Level")));
|
||||
sisAlarmEvents.setDeviceIp((String) recordMap.get("DeviceSipNum"));
|
||||
sisAlarmEvents.setDeviceName(recordMap.get("DeviceName").toString());
|
||||
sisAlarmEvents.setDeviceGroupId(Long.valueOf((Integer) recordMap.get("GroupId")));
|
||||
sisAlarmEvents.setDeviceGroupName(recordMap.get("GroupName").toString());
|
||||
sisAlarmEvents.setReportTime((Date) recordMap.get("StartTime"));
|
||||
sisAlarmEvents.setState((Integer) recordMap.get("State"));
|
||||
if ((Integer) recordMap.get("State") == 3) {
|
||||
sisAlarmEvents.setWorkOrderId(Long.valueOf((Integer) recordMap.get("WorkOrderId")));
|
||||
}
|
||||
//保存报警事件
|
||||
sisAlarmEventsService.insertByBo(sisAlarmEvents);
|
||||
|
||||
}
|
||||
|
||||
// 保存数据(包含操作记录)
|
||||
|
@ -5,7 +5,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<mapper namespace="org.dromara.sis.mapper.SisAuthRecordMapper">
|
||||
|
||||
<select id="checkAuth" resultType="org.dromara.sis.domain.vo.SisAuthRecordVo">
|
||||
SELECT c.target_id, c.group_id, c.beg_date, c.end_date
|
||||
SELECT c.target_id, c.group_id, c.beg_date, c.end_date, a.roster_type
|
||||
FROM sis_person_lib_img a
|
||||
LEFT JOIN resident_person b ON a.resident_person_id = b.id and b.state = 1
|
||||
LEFT JOIN sis_auth_record c
|
||||
|
@ -0,0 +1,32 @@
|
||||
package org.dromara.job.entity.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author lsm
|
||||
* @apiNote RosterTypeEnum
|
||||
* @since 2025/8/7
|
||||
*/
|
||||
@Getter
|
||||
public enum RosterTypeEnum {
|
||||
/**
|
||||
* 红名单
|
||||
*/
|
||||
RED_LIST(1),
|
||||
|
||||
/**
|
||||
* 白名单
|
||||
*/
|
||||
WHITE_LIST(2),
|
||||
|
||||
/**
|
||||
* 黑名单名单
|
||||
*/
|
||||
BLACK_LIST(3);
|
||||
|
||||
private final Integer code;
|
||||
|
||||
RosterTypeEnum(Integer code) {
|
||||
this.code = code;
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@ import com.aizuda.snailjob.client.job.core.dto.JobArgs;
|
||||
import com.aizuda.snailjob.client.model.ExecuteResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.dromara.job.entity.enums.RosterTypeEnum;
|
||||
import org.dromara.property.api.RemoteResidentPersonService;
|
||||
import org.dromara.property.api.domain.vo.RemoteResidentPersonVo;
|
||||
import org.dromara.resource.api.RemoteFileService;
|
||||
@ -18,6 +19,7 @@ import org.springframework.stereotype.Component;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
@ -53,20 +55,9 @@ public class SyncGrantAuthTask {
|
||||
try {
|
||||
if (CollUtil.isNotEmpty(unAuthPerson)) {
|
||||
for (RemoteResidentPersonVo person : unAuthPerson) {
|
||||
log.info("开始定时授权:{}----{}", person.getName(), person.getId());
|
||||
|
||||
// 判断是否存在授权
|
||||
Boolean auth = remoteSisAuthService.queryPersonAuth(person.getAuthGroupId(), person.getId());
|
||||
if (!auth) {
|
||||
log.info("无授权记录:{}----{}", person.getName(), person.getId());
|
||||
|
||||
// 补录授权记录、人像信息
|
||||
Boolean flag = syncAuthRecord(person);
|
||||
if (!flag) {
|
||||
log.info("补录授权记录、人像信息失败:{}----{}", person.getName(), person.getId());
|
||||
continue;
|
||||
}
|
||||
|
||||
// 下载人像
|
||||
byte[] imgByte;
|
||||
try {
|
||||
@ -78,10 +69,30 @@ public class SyncGrantAuthTask {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 当前人员是黑名单
|
||||
if (Objects.equals(person.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) {
|
||||
// 计算图片MD5
|
||||
String nowMd5 = calculateMD5(imgByte);
|
||||
// 通过MD5、入驻员工id查询相同图片
|
||||
Long remoteId = remoteSisAuthService.queryHuaweiBoxIdByImgMd5(nowMd5);
|
||||
// 人像信息已上传,跳过
|
||||
if (remoteId != null) continue;
|
||||
}
|
||||
|
||||
log.info("开始定时授权:{}----{}", person.getName(), person.getId());
|
||||
|
||||
// 补录授权记录、人像信息
|
||||
Boolean flag = syncAuthRecord(person);
|
||||
if (!flag) {
|
||||
log.info("录入授权记录、人像信息失败:{}----{}", person.getName(), person.getId());
|
||||
remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>());
|
||||
continue;
|
||||
}
|
||||
|
||||
// // 计算图片MD5
|
||||
// String nowMd5 = calculateMD5(imgByte);
|
||||
// // 通过MD5查询相同图片
|
||||
// Long remoteId = remoteSisAuthService.queryImgIdByImgMd5(nowMd5);
|
||||
// Long remoteId = remoteSisAuthService.queryHuaweiBoxIdByImgMd5(nowMd5);
|
||||
//
|
||||
// Long huaweiId;
|
||||
// if (remoteId == null) {
|
||||
@ -102,6 +113,7 @@ public class SyncGrantAuthTask {
|
||||
// update = remoteSisAuthService.updateImgByPersonId(person.getId(), huaweiId, nowMd5);
|
||||
// } catch (Exception e) {
|
||||
// remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>());
|
||||
// continue;
|
||||
// }
|
||||
//
|
||||
// if (!update) {
|
||||
@ -110,18 +122,20 @@ public class SyncGrantAuthTask {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// 同步人像到E8平台
|
||||
Long e8Id = syncE8Plat(person, imgByte);
|
||||
if (e8Id == null) {
|
||||
log.info("同步人像到E8平台失败:{}-----{}", person.getName(), person.getId());
|
||||
remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>());
|
||||
continue;
|
||||
// 黑名单不授权到E8
|
||||
if (!Objects.equals(person.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) {
|
||||
// 同步人像到E8平台
|
||||
Long e8Id = syncE8Plat(person, imgByte);
|
||||
if (e8Id == null) {
|
||||
log.info("同步人像到E8平台失败:{}-----{}", person.getName(), person.getId());
|
||||
remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>());
|
||||
continue;
|
||||
}
|
||||
// 更新入驻员工E8平台id
|
||||
remoteResidentPersonService.updateE8Id(person.getId(), e8Id);
|
||||
}
|
||||
|
||||
// 更新入驻员工E8平台id
|
||||
remoteResidentPersonService.updateE8Id(person.getId(), e8Id);
|
||||
} else {
|
||||
// 存在授权记录,为了避免重复授权,删除授权记录
|
||||
// 存在授权记录,为了避免重复授权,删除授权记录,等待下次定时任务
|
||||
remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>());
|
||||
}
|
||||
}
|
||||
@ -144,14 +158,14 @@ public class SyncGrantAuthTask {
|
||||
* @param person bean
|
||||
*/
|
||||
private Boolean syncAuthRecord(RemoteResidentPersonVo person) {
|
||||
log.info("开始补录授权记录、人像信息:{}----{}", person.getName(), person.getId());
|
||||
log.info("开始录入授权记录、人像信息:{}----{}", person.getName(), person.getId());
|
||||
RemotePersonAuth personAuth = getRemotePersonAuth(person);
|
||||
|
||||
Boolean flag;
|
||||
try {
|
||||
flag = remoteSisAuthService.personAuth(personAuth);
|
||||
if (flag) {
|
||||
log.info("补录授权记录、人像信息完成:{}----{}", person.getName(), person.getId());
|
||||
log.info("录入授权记录、人像信息完成:{}----{}", person.getName(), person.getId());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
@ -168,11 +182,12 @@ public class SyncGrantAuthTask {
|
||||
personAuth.setOssId(person.getOssId());
|
||||
personAuth.setName(person.getName());
|
||||
personAuth.setPhone(person.getPhone());
|
||||
personAuth.setSex(person.getGender().intValue());
|
||||
personAuth.setIdCardNumber(person.getIdCard());
|
||||
personAuth.setSex(person.getGender().intValue());
|
||||
personAuth.setAuthGroupId(person.getAuthGroupId());
|
||||
personAuth.setAuthBegDate(person.getAuthBegDate());
|
||||
personAuth.setAuthEndDate(person.getAuthEndDate());
|
||||
personAuth.setRosterType(person.getRosterType());
|
||||
return personAuth;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user