Ver código fonte

1, graphql更新返回类型

2,新增访客操作日志记录
tags/B.2.6.7_20240112_base
yk 1 ano atrás
pai
commit
0469460cf3
16 arquivos alterados com 319 adições e 103 exclusões
  1. +1
    -1
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/po/DmRecognizedRecordsPo.java
  2. +0
    -4
      xueyi-auth/src/main/java/com/xueyi/auth/controller/TokenController.java
  3. +92
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/DmVisitorSmsConfigController.java
  4. +25
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/dto/DmVisitorOperateLogDto.java
  5. +64
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/po/DmVisitorOperateLogPo.java
  6. +21
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/query/DmVisitorOperateLogQuery.java
  7. +3
    -3
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitRecordGraphQLMutationResolver.java
  8. +3
    -3
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLMutationResolver.java
  9. +58
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorLogsGraphQLQueryResolver.java
  10. +0
    -89
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/config/GraphQLConfig.java
  11. +12
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/mapper/DmVisitorOperateLogMapper.java
  12. +2
    -1
      xueyi-modules/xueyi-system/src/main/resources/graphql/passRecords.graphqls
  13. +1
    -0
      xueyi-modules/xueyi-system/src/main/resources/graphql/root.graphqls
  14. +6
    -1
      xueyi-modules/xueyi-system/src/main/resources/graphql/visitRecords.graphqls
  15. +6
    -1
      xueyi-modules/xueyi-system/src/main/resources/graphql/visitor.graphqls
  16. +25
    -0
      xueyi-modules/xueyi-system/src/main/resources/graphql/visitorOperateLog.graphqls

+ 1
- 1
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/po/DmRecognizedRecordsPo.java Ver arquivo

@@ -70,7 +70,7 @@ public class DmRecognizedRecordsPo extends TBaseEntity {

/** 识别时间 */
@Excel(name = "识别时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
protected LocalDateTime recognizedTime;


+ 0
- 4
xueyi-auth/src/main/java/com/xueyi/auth/controller/TokenController.java Ver arquivo

@@ -54,10 +54,6 @@ public class TokenController {
@Autowired
private SysLoginService sysLoginService;


@Autowired
private RemoteSmsService smsService;

@Autowired
private RemoteSmsService remoteSmsService;



+ 92
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/DmVisitorSmsConfigController.java Ver arquivo

@@ -1,15 +1,37 @@
package com.xueyi.system.staff.controller;

import cn.hutool.core.date.LocalDateTimeUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xueyi.common.core.constant.basic.SqlConstants;
import com.xueyi.common.core.web.result.AjaxResult;
import com.xueyi.common.core.web.validate.V_A;
import com.xueyi.common.core.web.validate.V_E;
import com.xueyi.common.log.annotation.Log;
import com.xueyi.common.log.enums.BusinessType;
import com.xueyi.common.security.annotation.RequiresPermissions;
import com.xueyi.common.sms.configure.SmsProperties;
import com.xueyi.common.web.entity.controller.BaseController;
import com.xueyi.common.web.utils.MyDateUtils;
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanExtPo;
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanPo;
import com.xueyi.system.api.digitalmans.domain.po.DmVisitRecordsPo;
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo;
import com.xueyi.system.api.sms.domain.vo.SmsReqEntity;
import com.xueyi.system.api.sms.feign.RemoteSmsService;
import com.xueyi.system.api.staff.domain.po.DmStaffPo;
import com.xueyi.system.digitalmans.mapper.DmDigitalmanExtMapper;
import com.xueyi.system.digitalmans.mapper.DmDigitalmanMapper;
import com.xueyi.system.staff.domain.dto.DmVisitorSmsConfigDto;
import com.xueyi.system.staff.domain.po.DmVisitorSmsConfigPo;
import com.xueyi.system.staff.domain.query.DmVisitorSmsConfigQuery;
import com.xueyi.system.staff.mapper.DmStaffMapper;
import com.xueyi.system.staff.mapper.DmVisitRecordsMapper;
import com.xueyi.system.staff.mapper.DmVisitorSmsConfigMapper;
import com.xueyi.system.staff.mapper.DmVisitorsMapper;
import com.xueyi.system.staff.service.IDmVisitorSmsConfigService;
import com.xueyi.system.staff.service.impl.DmVisitRecordsServiceImpl;
import com.xueyi.system.staff.service.impl.DmVisitorSmsConfigServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -20,6 +42,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.io.Serializable;
@@ -37,6 +60,32 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon
@Autowired
private DmVisitorSmsConfigServiceImpl visitorSmsConfigService;

@Autowired
private RemoteSmsService smsService;

@Autowired
private DmVisitRecordsServiceImpl visitRecordsService;

@Autowired
private DmVisitRecordsMapper visitRecordsMapper;

@Autowired
private DmVisitorsMapper visitorsMapper;

@Autowired
private SmsProperties smsProperties;

@Autowired
private DmVisitorSmsConfigMapper visitorSmsConfigMapper;

@Autowired
private DmDigitalmanExtMapper digitalmanExtMapper;
@Autowired
private DmDigitalmanMapper digitalmanMapper;

@Autowired
private DmStaffMapper staffMapper;

/** 定义节点名称 */
@Override
protected String getNodeName() {
@@ -105,6 +154,49 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon
return super.batchRemove(idList);
}


@GetMapping("/send-sms")
public AjaxResult sendVisitorSms(@RequestParam("visitRecordId") Long visitRecordId) {
if (null != visitRecordId) {
DmVisitRecordsPo po = visitRecordsMapper.selectById(visitRecordId);
if (null != po && null != po.getVisitorId()) {
DmVisitorsPo visitorsPo = visitorsMapper.selectById(po.getVisitorId());
SmsReqEntity send = new SmsReqEntity();
try {
if (null != visitorsPo && StringUtils.isNotEmpty(visitorsPo.getPhone())) {
DmVisitorSmsConfigPo dmVisitorSmsConfigPo = visitorSmsConfigMapper.selectOne(Wrappers.<DmVisitorSmsConfigPo>query().lambda().last(SqlConstants.LIMIT_ONE));

DmDigitalmanPo dmDigitalmanPo = digitalmanMapper.selectByCode(digitalmanExtMapper.selectOne(Wrappers.<DmDigitalmanExtPo>query().lambda().last(SqlConstants.LIMIT_ONE)).getManCode());

DmStaffPo staffPo = staffMapper.selectById(po.getUserId());

JSONObject json = new JSONObject();
String code = visitRecordsService.genVisitorCode();

json.put("code", code);
json.put("nickName", visitorsPo.getName());
json.put("robotName", dmDigitalmanPo.getName());
json.put("dateTime", LocalDateTimeUtil.format(po.getVisitDate(), MyDateUtils.DEFAULT_DATE_PATTERN));
json.put("companyName", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyName():"");
json.put("companyAddr", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyAddress():"");
json.put("receiverName", staffPo!=null?staffPo.getUserName():"");
json.put("receiverPhone", staffPo!=null?staffPo.getPhone():"");
json.put("parkInfo", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getParkPrompt():"");
//给访客发送短信

send.setPhone(visitorsPo.getPhone());
send.setTemplate(smsProperties.getVisitorTemplate());
send.setDataMap(json.toJSONString());
smsService.sendSms(send);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return AjaxResult.success();
}

/**
* 获取租户访客接待短信模板配置选择框列表
*/


+ 25
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/dto/DmVisitorOperateLogDto.java Ver arquivo

@@ -0,0 +1,25 @@
package com.xueyi.system.staff.domain.dto;

import com.xueyi.system.staff.domain.po.DmVisitorOperateLogPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

/**
* 租户访客接待短信模板配置 数据传输对象
*
* @author xueyi
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DmVisitorOperateLogDto extends DmVisitorOperateLogPo {

@Serial
private static final long serialVersionUID = 1L;

public static final Integer BUSINESS_TYPE_CREATE = 1;
public static final Integer BUSINESS_TYPE_UPDATE = 2;
public static final Integer BUSINESS_TYPE_DELETE = 3;
public static final Integer BUSINESS_TYPE_OTHER = 0;
}

+ 64
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/po/DmVisitorOperateLogPo.java Ver arquivo

@@ -0,0 +1,64 @@
package com.xueyi.system.staff.domain.po;

import com.baomidou.mybatisplus.annotation.OrderBy;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xueyi.common.core.annotation.Excel;
import com.xueyi.common.core.web.tenant.base.TBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.time.LocalDateTime;

/**
* 操作日志 持久化对象
*
* @author xueyi
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "dm_visitor_operate_log",excludeProperty = {"name","sort","createBy","createTime","updateBy","updateTime","remark"})
public class DmVisitorOperateLogPo extends TBaseEntity {

@Serial
private static final long serialVersionUID = 1L;

/** 操作模块 */
protected String title;

/** 业务类型(0其它 1新增 2修改 3删除) */
protected Integer businessType;

/** 请求方法 */
protected String method;

/** 请求方式 */
protected String requestMethod;


protected Long visitorId;

/** 操作Id */
protected Long userId;

/** 操作人员账号 */
protected String userName;

/** 操作人员名称 */
protected String userNick;

/** 请求参数 */
protected String param;
/** 返回参数 */
protected String jsonResult;


/** 操作时间 */
@OrderBy(sort = 10)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
protected LocalDateTime operateTime;

}

+ 21
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/query/DmVisitorOperateLogQuery.java Ver arquivo

@@ -0,0 +1,21 @@
package com.xueyi.system.staff.domain.query;

import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo;
import com.xueyi.system.staff.domain.po.DmVisitorOperateLogPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

/**
* 访客 数据查询对象
*
* @author xueyi
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DmVisitorOperateLogQuery extends DmVisitorOperateLogPo {

@Serial
private static final long serialVersionUID = 1L;
}

+ 3
- 3
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitRecordGraphQLMutationResolver.java Ver arquivo

@@ -26,15 +26,15 @@ class VisitRecordGraphQLMutationResolver implements GraphQLMutationResolver {
private DmVisitRecordsConverter converter;


public boolean createVisitRecord(DmVisitRecordsPo input){
public boolean createVisitRecord(DmVisitRecordsPo input, Long staffId){
return mapper.insert(input) > 0;
}

public boolean updateVisitRecord(DmVisitRecordsPo input){
public boolean updateVisitRecord(DmVisitRecordsPo input, Long staffId){
return mapper.updateById(input) > 0;
}

public Boolean deleteVisitRecord(Long id){
public Boolean deleteVisitRecord(Long id, Long staffId){
return mapper.deleteById(id) > 0;
}
}

+ 3
- 3
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLMutationResolver.java Ver arquivo

@@ -43,15 +43,15 @@ class VisitorGraphQLMutationResolver implements GraphQLMutationResolver {
return po;
}

public boolean updateVisitor(DmVisitorsPo po){
public boolean updateVisitor(DmVisitorsPo po, Long staffId){
return mapper.updateOne(initPo(po)) > 0;
}

public boolean createVisitor(DmVisitorsPo po){
public boolean createVisitor(DmVisitorsPo po, Long staffId){
return mapper.insert(initPo(po)) > 0;
}

public Boolean deleteVisitor(Long id){
public Boolean deleteVisitor(Long id, Long staffId){
return mapper.deleteById(id) > 0;
}
}

+ 58
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorLogsGraphQLQueryResolver.java Ver arquivo

@@ -0,0 +1,58 @@
package com.xueyi.system.staff.graphql;

import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xueyi.common.web.utils.MyDateUtils;
import com.xueyi.system.staff.domain.po.DmVisitorOperateLogPo;
import com.xueyi.system.staff.mapper.DmVisitorOperateLogMapper;
import graphql.kickstart.tools.GraphQLQueryResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.util.List;

/*
* @author yk
* @description
* @date 2023-12-25 19:55
*/

@Component
class VisitorLogsGraphQLQueryResolver implements GraphQLQueryResolver {
@Autowired
private DmVisitorOperateLogMapper mapper;



public DmVisitorOperateLogPo visitorLog(Long id) {
return mapper.selectById(id);
}

public List<DmVisitorOperateLogPo> visitorLogs(String userName, Long userId, Long visitorId, Integer businessType, LocalDate startDate, LocalDate endDate){
QueryWrapper<DmVisitorOperateLogPo> query = new QueryWrapper<>();

if (StringUtils.isNotEmpty(userName)) {
query.like("user_name", userName);
}

if (null != userId) {
query.eq("user_id", userId);
}

if (null != visitorId) {
query.eq("visitor_id", visitorId);
}

if (null != businessType) {
query.eq("business_type", businessType);
}

if (null != startDate && null != endDate){
query.between("operate_time", LocalDateTimeUtil.format(startDate, MyDateUtils.DEFAULT_DATE_PATTERN),LocalDateTimeUtil.format(endDate, MyDateUtils.DEFAULT_DATE_PATTERN));
}

return mapper.selectList(query);
}
}

+ 0
- 89
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/config/GraphQLConfig.java Ver arquivo

@@ -1,89 +0,0 @@
package com.xueyi.system.staff.graphql.config;

import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.GraphQLContext;
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext;
import graphql.execution.instrumentation.Instrumentation;
import graphql.execution.instrumentation.InstrumentationContext;
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters;
import graphql.execution.instrumentation.parameters.InstrumentationExecutionParameters;
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters;
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters;
import graphql.execution.instrumentation.parameters.InstrumentationFieldParameters;
import graphql.execution.instrumentation.parameters.InstrumentationValidationParameters;
import graphql.kickstart.autoconfigure.tools.GraphQLJavaToolsAutoConfiguration;
import graphql.kickstart.tools.GraphQLResolver;
import graphql.kickstart.tools.SchemaParser;
import graphql.language.Document;
import graphql.schema.GraphQLSchema;
import graphql.validation.ValidationError;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

import java.util.List;

/**
* @author yk
* @description
* @date 2024-01-04 22:03
*/
@Configuration
@Import(GraphQLJavaToolsAutoConfiguration.class)
public class GraphQLConfig {

@Bean
public GraphQL graphQL(List<GraphQLResolver<?>> resolvers, List<SchemaParser> schemaParsers, GraphQLSchema graphQLSchema) {
return GraphQL.newGraphQL(graphQLSchema)
.instrumentation(new SimpleAuthInstrumentation())
.build();
}

private static class SimpleAuthInstrumentation implements Instrumentation {
Logger logger = LoggerFactory.getLogger(SimpleAuthInstrumentation.class);

@Override
public InstrumentationContext<ExecutionResult> beginExecution(InstrumentationExecutionParameters parameters) {
return null;
}

@Override
public InstrumentationContext<Document> beginParse(InstrumentationExecutionParameters parameters) {
return null;
}

@Override
public InstrumentationContext<List<ValidationError>> beginValidation(InstrumentationValidationParameters parameters) {
return null;
}

@Override
public InstrumentationContext<ExecutionResult> beginExecuteOperation(InstrumentationExecuteOperationParameters parameters) {
GraphQLContext context = parameters.getExecutionContext().getGraphQLContext();

// 从上下文中获取请求头中的token
String token = context.get("Authorization");
logger.error("token: {}", token);
return null;
}


@Override
public ExecutionStrategyInstrumentationContext beginExecutionStrategy(InstrumentationExecutionStrategyParameters parameters) {
return null;
}

@Override
public InstrumentationContext<ExecutionResult> beginField(InstrumentationFieldParameters parameters) {
return null;
}

@Override
public InstrumentationContext<Object> beginFieldFetch(InstrumentationFieldFetchParameters parameters) {
return null;
}
}
}

+ 12
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/mapper/DmVisitorOperateLogMapper.java Ver arquivo

@@ -0,0 +1,12 @@
package com.xueyi.system.staff.mapper;

import com.xueyi.common.datasource.annotation.Isolate;
import com.xueyi.common.web.entity.mapper.BaseMapper;
import com.xueyi.system.staff.domain.dto.DmVisitorOperateLogDto;
import com.xueyi.system.staff.domain.po.DmVisitorOperateLogPo;
import com.xueyi.system.staff.domain.query.DmVisitorOperateLogQuery;


@Isolate
public interface DmVisitorOperateLogMapper extends BaseMapper<DmVisitorOperateLogQuery, DmVisitorOperateLogDto, DmVisitorOperateLogPo> {
}

+ 2
- 1
xueyi-modules/xueyi-system/src/main/resources/graphql/passRecords.graphqls Ver arquivo

@@ -16,6 +16,7 @@ type PassRecord {
userName: String
userId: ID
faceUrl: String
recognizedTime: DateTime
recognizedTime: String
createTime: Date
type: Int
}

+ 1
- 0
xueyi-modules/xueyi-system/src/main/resources/graphql/root.graphqls Ver arquivo

@@ -1,6 +1,7 @@
scalar Long
scalar DateTime
scalar Date
scalar Time

type Query {



+ 6
- 1
xueyi-modules/xueyi-system/src/main/resources/graphql/visitRecords.graphqls Ver arquivo

@@ -21,12 +21,17 @@ input VisitRecordInput {
extend type Mutation {
createVisitRecord(
input:VisitRecordInput!
staffId: Long!
): Boolean

updateVisitRecord(
input:VisitRecordInput!
staffId: Long!
): Boolean
deleteVisitRecord(id:Long): Boolean
deleteVisitRecord(
id:Long!
staffId: Long!
): Boolean
}

type VisitRecord {


+ 6
- 1
xueyi-modules/xueyi-system/src/main/resources/graphql/visitor.graphqls Ver arquivo

@@ -24,13 +24,18 @@ input VisitorInput {
extend type Mutation {
createVisitor(
input: VisitorInput!
staffId: Long!
): Boolean

updateVisitor(
input: VisitorInput!
staffId: Long!
): Boolean

deleteVisitor(id: Long!): Boolean
deleteVisitor(
id: Long!,
staffId: Long!
): Boolean
}

type Visitor {


+ 25
- 0
xueyi-modules/xueyi-system/src/main/resources/graphql/visitorOperateLog.graphqls Ver arquivo

@@ -0,0 +1,25 @@
extend type Query {
visitorLogs(
userName:String
userId:ID
visitorId:ID
businessType:Int
startDate:Date
endDate:Date
): [VisitorLog!]

visitorLog(id:Long!): VisitorLog
}


type VisitorLog {
id: ID
businessType: Int
method: String
visitorId: ID
userId: ID
userName: String
param: String
jsonResult: String
operateTime: String
}

Carregando…
Cancelar
Salvar