Преглед на файлове

1,修改SysEnterpriseStaff to SysEnterpriseStaffPo

2,新增敏感词local策略
3,新增随时拜访访客短信模版
tags/B.2.6.10_20240126_release
yk преди 1 година
родител
ревизия
f8f5f38206
променени са 38 файла, в които са добавени 731 реда и са изтрити 143 реда
  1. +2
    -2
      xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/dto/SysEnterpriseStaffDto.java
  2. +17
    -0
      xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/model/SysStaffConverter.java
  3. +1
    -3
      xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/po/SysEnterpriseStaffPo.java
  4. +2
    -2
      xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/query/SysEnterpriseStaffQuery.java
  5. +3
    -3
      xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/feign/RemoteTenantService.java
  6. +3
    -3
      xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/feign/factory/RemoteTenantFallbackFactory.java
  7. +3
    -3
      xueyi-auth/src/main/java/com/xueyi/auth/controller/TokenController.java
  8. +1
    -0
      xueyi-common/xueyi-common-sms/src/main/java/com/xueyi/common/sms/configure/SmsProperties.java
  9. +45
    -0
      xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/entity/manager/impl/BaseManagerImpl.java
  10. +7
    -0
      xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/entity/service/impl/BaseServiceImpl.java
  11. +7
    -0
      xueyi-modules/xueyi-nlt/pom.xml
  12. +9
    -2
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/controller/DmIntentController.java
  13. +21
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/dto/DmSensitiveWordDto.java
  14. +13
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/model/DmSensitiveWordConverter.java
  15. +41
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/po/DmSensitiveWordPo.java
  16. +13
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/query/DmSensitiveWordQuery.java
  17. +8
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/IDmSensitiveWordManager.java
  18. +23
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/impl/DmSensitiveWordManager.java
  19. +11
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/mapper/DmSensitiveWordMapper.java
  20. +8
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/IDmSensitiveWordService.java
  21. +28
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/DmSensitiveWordServiceImpl.java
  22. +49
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/LocalSensitiveServiceImpl.java
  23. +2
    -2
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/XunFeiSensitiveServiceImpl.java
  24. +0
    -1
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/service/impl/IDmHolidayServiceImpl.java
  25. +1
    -101
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/DmStaffController.java
  26. +16
    -3
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/DmVisitorSmsConfigController.java
  27. +67
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/StaffGraphQLMutationResolver.java
  28. +59
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/StaffGraphQLQueryResolver.java
  29. +0
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLQueryResolver.java
  30. +112
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmStaffServiceImpl.java
  31. +44
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmVisitRecordsServiceImpl.java
  32. +7
    -7
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/controller/WeappController.java
  33. +55
    -0
      xueyi-modules/xueyi-system/src/main/resources/graphql/staff.graphqls
  34. +15
    -6
      xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/controller/TeTenantController.java
  35. +14
    -0
      xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/manager/ISysStaffManager.java
  36. +19
    -0
      xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/manager/impl/SysStaffManagerImpl.java
  37. +4
    -4
      xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/mapper/SysEnterpriseStaffMapper.java
  38. +1
    -1
      xueyi-modules/xueyi-tenant/src/main/resources/mapper/SysEnterpriseStaffMapper.xml

+ 2
- 2
xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/dto/SysEnterpriseStaffDto.java Целия файл

@@ -1,6 +1,6 @@
package com.xueyi.tenant.api.tenant.domain.dto;

import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

@@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class SysEnterpriseStaffDto extends SysEnterpriseStaff {
public class SysEnterpriseStaffDto extends SysEnterpriseStaffPo {
private static final long serialVersionUID = 1L;
private String oldPhone;



+ 17
- 0
xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/model/SysStaffConverter.java Целия файл

@@ -0,0 +1,17 @@
package com.xueyi.tenant.api.tenant.domain.model;

import com.xueyi.common.core.web.entity.model.BaseConverter;
import com.xueyi.tenant.api.tenant.domain.dto.SysEnterpriseStaffDto;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.domain.query.SysEnterpriseStaffQuery;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;

/**
* 租户 对象映射器
*
* @author xueyi
*/
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface SysStaffConverter extends BaseConverter<SysEnterpriseStaffQuery, SysEnterpriseStaffDto, SysEnterpriseStaffPo> {
}

xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/po/SysEnterpriseStaff.java → xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/po/SysEnterpriseStaffPo.java Целия файл

@@ -15,15 +15,13 @@ import java.io.Serial;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "sys_enterprise_staff", excludeProperty = {"name","sort","createBy","createTime","updateBy","updateTime","remark","tenantId", "status"})
public class SysEnterpriseStaff extends TBaseEntity {
public class SysEnterpriseStaffPo extends TBaseEntity {

@Serial
private static final long serialVersionUID = 1L;

protected Long id;

protected Long staffId;

protected String phone;

private Long tId;//租户号

+ 2
- 2
xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/domain/query/SysEnterpriseStaffQuery.java Целия файл

@@ -1,6 +1,6 @@
package com.xueyi.tenant.api.tenant.domain.query;

import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

@@ -13,7 +13,7 @@ import java.io.Serial;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class SysEnterpriseStaffQuery extends SysEnterpriseStaff {
public class SysEnterpriseStaffQuery extends SysEnterpriseStaffPo {

@Serial
private static final long serialVersionUID = 1L;


+ 3
- 3
xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/feign/RemoteTenantService.java Целия файл

@@ -6,7 +6,7 @@ import com.xueyi.common.core.constant.basic.ServiceConstants;
import com.xueyi.common.core.web.result.R;
import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo;
import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo;
import com.xueyi.tenant.api.tenant.feign.factory.RemoteTenantFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
@@ -53,10 +53,10 @@ public interface RemoteTenantService {
R<TeTenantPo> queryTenantByStaffPhone(@RequestParam ("phone") String phone, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

@GetMapping("/tenant/query-staff-by-phone")
R<SysEnterpriseStaff> queryStaff(@RequestParam ("phone") String phone, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
R<SysEnterpriseStaffPo> queryStaff(@RequestParam ("phone") String phone, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);


@PostMapping("/tenant/save-staff")
R<SysEnterpriseStaff> saveEnterpriseStaff(@RequestBody SysEnterpriseStaff staff, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
R<SysEnterpriseStaffPo> saveEnterpriseStaff(@RequestBody SysEnterpriseStaffPo staff, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

}

+ 3
- 3
xueyi-api/xueyi-api-tenant/src/main/java/com/xueyi/tenant/api/tenant/feign/factory/RemoteTenantFallbackFactory.java Целия файл

@@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.core.web.result.R;
import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo;
import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo;
import com.xueyi.tenant.api.tenant.feign.RemoteTenantService;
import lombok.extern.slf4j.Slf4j;
@@ -61,12 +61,12 @@ public class RemoteTenantFallbackFactory implements FallbackFactory<RemoteTenant


@Override
public R<SysEnterpriseStaff> queryStaff(String phone, String source) {
public R<SysEnterpriseStaffPo> queryStaff(String phone, String source) {
return R.fail("验证用户手机号失败:" + throwable.getMessage());
}

@Override
public R<SysEnterpriseStaff> saveEnterpriseStaff(SysEnterpriseStaff staff, String source) {
public R<SysEnterpriseStaffPo> saveEnterpriseStaff(SysEnterpriseStaffPo staff, String source) {
return R.fail("保存员工失败:" + throwable.getMessage());
}
};


+ 3
- 3
xueyi-auth/src/main/java/com/xueyi/auth/controller/TokenController.java Целия файл

@@ -23,7 +23,7 @@ import com.xueyi.common.sms.configure.SmsProperties;
import com.xueyi.system.api.model.LoginUser;
import com.xueyi.system.api.sms.domain.vo.SmsReqEntity;
import com.xueyi.system.api.sms.feign.RemoteSmsService;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.feign.RemoteTenantService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -85,7 +85,7 @@ public class TokenController {

@PostMapping("phoneLogin")
public AjaxResult loginByPhone(@Valid @RequestBody PhoneLoginBody form) {
R<SysEnterpriseStaff> staffR = tenantService.queryStaff(form.getPhone(), SecurityConstants.INNER);
R<SysEnterpriseStaffPo> staffR = tenantService.queryStaff(form.getPhone(), SecurityConstants.INNER);
if (staffR.isFail() || staffR.getData() == null) {
return AjaxResult.error("手机号不正确,清查验");
}
@@ -162,7 +162,7 @@ public class TokenController {

@GetMapping("validCode")
public R<String> validCode(@RequestParam String phone) {
R<SysEnterpriseStaff> staff = tenantService.queryStaff(phone, SecurityConstants.INNER);
R<SysEnterpriseStaffPo> staff = tenantService.queryStaff(phone, SecurityConstants.INNER);
if (staff.getData() == null) {
return R.fail("手机号不存在,请查验");
}


+ 1
- 0
xueyi-common/xueyi-common-sms/src/main/java/com/xueyi/common/sms/configure/SmsProperties.java Целия файл

@@ -28,6 +28,7 @@ public class SmsProperties {
private String defaultRemindTemplate;
private String warningTemplate;
private String visitorTemplate;
private String vipVisitorTemplate;
private String robotName;
private String receptionPhones;
}

+ 45
- 0
xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/entity/manager/impl/BaseManagerImpl.java Целия файл

@@ -12,6 +12,11 @@ import com.xueyi.common.web.entity.manager.impl.handle.BaseHandleManagerImpl;
import com.xueyi.common.web.entity.mapper.BaseMapper;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

@@ -296,4 +301,44 @@ public class BaseManagerImpl<Q extends P, D extends P, P extends BaseEntity, PM
.last(SqlConstants.LIMIT_ONE));
return mapperDto(po);
}

private <R> R createObj(Class<R> clazz) {
try {
return clazz.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | InvocationTargetException |
NoSuchMethodException e) {
throw new RuntimeException(e);
}
}

public List<Field> getAllFields(Class<?> clazz) {
List<Field> fields = new ArrayList<>();
while (clazz != null) {
fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
clazz = clazz.getSuperclass();
}
return fields;
}

public D merge(D origin, D newInstance, Class<D> type) {
D result = createObj(type);
for (Field field : getAllFields(type)) {
field.setAccessible(true);
try {
if (Modifier.isFinal(field.getModifiers())){
continue;
}
Object valueA = field.get(origin);
Object valueB = field.get(newInstance);
if (valueB != null) {
field.set(result, valueB);
} else {
field.set(result, valueA);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return result;
}
}

+ 7
- 0
xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/entity/service/impl/BaseServiceImpl.java Целия файл

@@ -252,6 +252,13 @@ public class BaseServiceImpl<Q extends BaseEntity, D extends BaseEntity, IDG ext
}
}

public <D> D createObject(Class<D> type) {
try {
return type.getDeclaredConstructor().newInstance();
} catch (Exception e) {
return null;
}
}

@Override
public void saveToEs(BaseEntity dto) {


+ 7
- 0
xueyi-modules/xueyi-nlt/pom.xml Целия файл

@@ -81,6 +81,13 @@
<artifactId>xueyi-api-system</artifactId>
</dependency>


<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-word</artifactId>
<version>0.12.0</version>
</dependency>

</dependencies>

<build>


+ 9
- 2
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/controller/DmIntentController.java Целия файл

@@ -1,7 +1,6 @@
package com.xueyi.nlt.nlt.controller;

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
@@ -41,6 +40,7 @@ import com.xueyi.nlt.nlt.domain.LlmContext;
import com.xueyi.nlt.nlt.domain.LlmParam;
import com.xueyi.nlt.nlt.domain.LlmResponse;
import com.xueyi.nlt.nlt.domain.dto.DmIntentDto;
import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto;
import com.xueyi.nlt.nlt.domain.po.DmRegularPo;
import com.xueyi.nlt.nlt.domain.query.DmIntentQuery;
import com.xueyi.nlt.nlt.domain.vo.IntentTemplateVo;
@@ -49,7 +49,7 @@ import com.xueyi.nlt.nlt.mapper.DmRegularMapper;
import com.xueyi.nlt.nlt.service.IDmIntentService;
import com.xueyi.nlt.nlt.service.ISensitiveService;
import com.xueyi.nlt.nlt.service.ISysLlmService;
import com.xueyi.nlt.nlt.service.impl.XunFeiSensitiveSeviceImpl;
import com.xueyi.nlt.nlt.service.impl.DmSensitiveWordServiceImpl;
import com.xueyi.nlt.nlt.template.*;
import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto;
import com.xueyi.system.api.digitalmans.domain.dto.DmSkillDto;
@@ -902,6 +902,9 @@ public class DmIntentController extends BaseController<DmIntentQuery, DmIntentDt
@Autowired
private ISensitiveService sensitiveService;

@Autowired
private DmSensitiveWordServiceImpl sensitiveWordService;

@GetMapping("/api/create-sensitive-lib")
public AjaxResult addSensitiveBlack(@RequestParam("name") String name, @RequestParam(value = "category" ,required = false) String category, @RequestParam("type") String type){
try {
@@ -924,8 +927,12 @@ public class DmIntentController extends BaseController<DmIntentQuery, DmIntentDt
String res = "";
if ("black".equals(type)) {
res = sensitiveService.addKeyWord(xunFeiSensitiveConfig.BLACK_LIB_ID, new String[]{content});
DmSensitiveWordDto sensitiveWordPo = new DmSensitiveWordDto(content, DmSensitiveWordDto.SENSITIVE_TYPE_BLACK);
sensitiveWordService.insert(sensitiveWordPo);
} else {
res = sensitiveService.addKeyWord(xunFeiSensitiveConfig.WHITE_LIB_ID, new String[]{content});
DmSensitiveWordDto sensitiveWordPo = new DmSensitiveWordDto(content, DmSensitiveWordDto.SENSITIVE_TYPE_WHITE);
sensitiveWordService.insert(sensitiveWordPo);
}
return AjaxResult.success(JSON.parse(res));
} catch (Exception e) {


+ 21
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/dto/DmSensitiveWordDto.java Целия файл

@@ -0,0 +1,21 @@
package com.xueyi.nlt.nlt.domain.dto;


import com.xueyi.nlt.nlt.domain.po.DmSensitiveWordPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper = true)
public class DmSensitiveWordDto extends DmSensitiveWordPo {

private static final long serialVersionUID = 1L;
public static final Integer SENSITIVE_TYPE_BLACK = 1;
public static final Integer SENSITIVE_TYPE_WHITE = 2;

public DmSensitiveWordDto (){}

public DmSensitiveWordDto (String content, Integer type){
super(content, type);
}
}

+ 13
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/model/DmSensitiveWordConverter.java Целия файл

@@ -0,0 +1,13 @@
package com.xueyi.nlt.nlt.domain.model;

import com.xueyi.common.core.web.entity.model.BaseConverter;
import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto;
import com.xueyi.nlt.nlt.domain.po.DmSensitiveWordPo;
import com.xueyi.nlt.nlt.domain.query.DmSensitiveWordQuery;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;


@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface DmSensitiveWordConverter extends BaseConverter<DmSensitiveWordQuery, DmSensitiveWordDto, DmSensitiveWordPo> {
}

+ 41
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/po/DmSensitiveWordPo.java Целия файл

@@ -0,0 +1,41 @@
package com.xueyi.nlt.nlt.domain.po;

import com.baomidou.mybatisplus.annotation.TableName;
import com.xueyi.common.core.web.tenant.base.TBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import static com.xueyi.common.core.constant.basic.EntityConstants.CREATE_BY;
import static com.xueyi.common.core.constant.basic.EntityConstants.CREATE_TIME;
import static com.xueyi.common.core.constant.basic.EntityConstants.DEL_FLAG;
import static com.xueyi.common.core.constant.basic.EntityConstants.NAME;
import static com.xueyi.common.core.constant.basic.EntityConstants.REMARK;
import static com.xueyi.common.core.constant.basic.EntityConstants.SORT;
import static com.xueyi.common.core.constant.basic.EntityConstants.STATUS;
import static com.xueyi.common.core.constant.basic.EntityConstants.UPDATE_BY;
import static com.xueyi.common.core.constant.basic.EntityConstants.UPDATE_TIME;

/**
* 访客 持久化对象
*
* @author xueyi
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "dm_sensitive_word", excludeProperty = { SORT, NAME, STATUS, REMARK, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, DEL_FLAG, "tenantId"})
public class DmSensitiveWordPo extends TBaseEntity {

private static final long serialVersionUID = 1L;

private String content;

private Integer type;

public DmSensitiveWordPo (){}

public DmSensitiveWordPo (String content, Integer type){
this.content = content;
this.type = type;
}

}

+ 13
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/query/DmSensitiveWordQuery.java Целия файл

@@ -0,0 +1,13 @@
package com.xueyi.nlt.nlt.domain.query;


import com.xueyi.nlt.nlt.domain.po.DmSensitiveWordPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper = true)
public class DmSensitiveWordQuery extends DmSensitiveWordPo {

private static final long serialVersionUID = 1L;
}

+ 8
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/IDmSensitiveWordManager.java Целия файл

@@ -0,0 +1,8 @@
package com.xueyi.nlt.nlt.manager;

import com.xueyi.common.web.entity.manager.IBaseManager;
import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto;
import com.xueyi.nlt.nlt.domain.query.DmSensitiveWordQuery;

public interface IDmSensitiveWordManager extends IBaseManager<DmSensitiveWordQuery, DmSensitiveWordDto> {
}

+ 23
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/impl/DmSensitiveWordManager.java Целия файл

@@ -0,0 +1,23 @@
package com.xueyi.nlt.nlt.manager.impl;

import com.xueyi.common.web.annotation.TenantIgnore;
import com.xueyi.common.web.entity.manager.impl.BaseManagerImpl;
import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto;
import com.xueyi.nlt.nlt.domain.model.DmSensitiveWordConverter;
import com.xueyi.nlt.nlt.domain.po.DmSensitiveWordPo;
import com.xueyi.nlt.nlt.domain.query.DmSensitiveWordQuery;
import com.xueyi.nlt.nlt.manager.IDmSensitiveWordManager;
import com.xueyi.nlt.nlt.mapper.DmSensitiveWordMapper;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class DmSensitiveWordManager extends BaseManagerImpl<DmSensitiveWordQuery, DmSensitiveWordDto, DmSensitiveWordPo, DmSensitiveWordMapper, DmSensitiveWordConverter> implements IDmSensitiveWordManager {
@Override
@TenantIgnore(tenantLine = true)
public List<DmSensitiveWordDto> selectList(DmSensitiveWordQuery query) {
List<DmSensitiveWordPo> poList = baseMapper.selectList(selectListQuery(query));
return subMerge(mapperDto(poList));
}
}

+ 11
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/mapper/DmSensitiveWordMapper.java Целия файл

@@ -0,0 +1,11 @@
package com.xueyi.nlt.nlt.mapper;

import com.xueyi.common.datasource.annotation.Master;
import com.xueyi.common.web.entity.mapper.BaseMapper;
import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto;
import com.xueyi.nlt.nlt.domain.po.DmSensitiveWordPo;
import com.xueyi.nlt.nlt.domain.query.DmSensitiveWordQuery;

@Master
public interface DmSensitiveWordMapper extends BaseMapper<DmSensitiveWordQuery, DmSensitiveWordDto, DmSensitiveWordPo> {
}

+ 8
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/IDmSensitiveWordService.java Целия файл

@@ -0,0 +1,8 @@
package com.xueyi.nlt.nlt.service;

import com.xueyi.common.web.entity.service.IBaseService;
import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto;
import com.xueyi.nlt.nlt.domain.query.DmSensitiveWordQuery;

public interface IDmSensitiveWordService extends IBaseService<DmSensitiveWordQuery, DmSensitiveWordDto> {
}

+ 28
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/DmSensitiveWordServiceImpl.java Целия файл

@@ -0,0 +1,28 @@
package com.xueyi.nlt.nlt.service.impl;

import com.xueyi.common.web.annotation.TenantIgnore;
import com.xueyi.common.web.entity.service.impl.BaseServiceImpl;
import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto;
import com.xueyi.nlt.nlt.domain.query.DmSensitiveWordQuery;
import com.xueyi.nlt.nlt.manager.IDmSensitiveWordManager;
import com.xueyi.nlt.nlt.service.IDmSensitiveWordService;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.List;

@Service
public class DmSensitiveWordServiceImpl extends BaseServiceImpl<DmSensitiveWordQuery, DmSensitiveWordDto, IDmSensitiveWordManager> implements IDmSensitiveWordService {
@Override
public List<DmSensitiveWordDto> selectList(DmSensitiveWordQuery query) {
return super.selectList(query);
}


//TODO. 查询自定义敏感词库,塞入缓存
@PostConstruct
public void init() {
this.selectList(null);
System.err.println("init");
}
}

+ 49
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/LocalSensitiveServiceImpl.java Целия файл

@@ -0,0 +1,49 @@
package com.xueyi.nlt.nlt.service.impl;

import com.alibaba.fastjson2.JSONObject;
import com.github.houbb.sensitive.word.core.SensitiveWordHelper;
import com.xueyi.nlt.nlt.service.ISensitiveService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;

/**
* @author yk
* @description
* @date 2024-01-15 15:53
*/
@Service
@ConditionalOnProperty(name = "sensitive.type", havingValue = "local", matchIfMissing = true)
public class LocalSensitiveServiceImpl implements ISensitiveService {

Logger logger = LoggerFactory.getLogger(LocalSensitiveServiceImpl.class);

@Override
public String addKeyWord(String libId, String[] wordList) throws Exception {
return null;
}



@Override
public String createWhite(String name) throws Exception {
return null;
}

@Override
public String createBlack(String name, String category) throws Exception {
return null;
}

@Override
public String checkSensitiveWord(String content, Integer useLib) {
JSONObject jsonObject = new JSONObject();
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("suggest",SensitiveWordHelper.contains(content)? "block":"pass");
jsonObject.put("result", jsonObject2);
JSONObject json = new JSONObject();
json.put("data", jsonObject);
return json.toJSONString();
}
}

xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/XunFeiSensitiveSeviceImpl.java → xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/XunFeiSensitiveServiceImpl.java Целия файл

@@ -42,9 +42,9 @@ import java.util.UUID;
*/
@Service
@Primary
public class XunFeiSensitiveSeviceImpl implements ISensitiveService {
public class XunFeiSensitiveServiceImpl implements ISensitiveService {

Logger logger = LoggerFactory.getLogger(XunFeiSensitiveSeviceImpl.class);
Logger logger = LoggerFactory.getLogger(XunFeiSensitiveServiceImpl.class);

private String appid;
private String APIKey;

+ 0
- 1
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/service/impl/IDmHolidayServiceImpl.java Целия файл

@@ -9,7 +9,6 @@ import com.xueyi.system.common.service.IDmHolidayService;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.Date;

@Service
public class IDmHolidayServiceImpl extends BaseServiceImpl<DmHolidayQuery, DmHolidayDto, IDmHolidayManager> implements IDmHolidayService {


+ 1
- 101
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/DmStaffController.java Целия файл

@@ -1,10 +1,5 @@
package com.xueyi.system.staff.controller;

import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.cache.utils.SourceUtil;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.context.SecurityContextHolder;
import com.xueyi.common.core.utils.core.IdUtil;
import com.xueyi.common.core.utils.core.ObjectUtil;
import com.xueyi.common.core.utils.core.StrUtil;
import com.xueyi.common.core.utils.file.FileTypeUtil;
@@ -21,21 +16,14 @@ import com.xueyi.common.security.annotation.RequiresPermissions;
import com.xueyi.common.web.entity.controller.BaseController;
import com.xueyi.file.api.domain.SysFile;
import com.xueyi.file.api.feign.RemoteFileService;
import com.xueyi.nlt.api.netty.domain.vo.DmWebSocketMessageVo;
import com.xueyi.nlt.api.nlt.feign.RemoteIntentService;
import com.xueyi.system.api.model.Source;
import com.xueyi.system.api.organize.domain.dto.SysEnterpriseDto;
import com.xueyi.system.api.staff.domain.dto.DmStaffDto;
import com.xueyi.system.api.staff.domain.po.DmStaffPo;
import com.xueyi.system.api.staff.domain.vo.DmStaffFeature;
import com.xueyi.system.authority.service.ISysLoginService;
import com.xueyi.system.organize.service.ISysEnterpriseService;
import com.xueyi.system.resource.domain.dto.DmResourcesDto;
import com.xueyi.system.resource.service.IDmResourcesService;
import com.xueyi.system.staff.domain.query.DmStaffQuery;
import com.xueyi.system.staff.service.IDmStaffService;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.feign.RemoteTenantService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -51,7 +39,6 @@ import org.springframework.web.multipart.MultipartFile;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
@@ -71,19 +58,9 @@ public class DmStaffController extends BaseController<DmStaffQuery, DmStaffDto,
@Autowired
private RemoteFileService remoteFileService;

@Autowired
private RemoteIntentService remoteIntentService;

@Autowired
ISysEnterpriseService enterpriseService;

@Autowired
IDmResourcesService resourcesService;


@Autowired
RemoteTenantService tenantService;

/** 定义节点名称 */
@Override
protected String getNodeName() {
@@ -140,50 +117,7 @@ public class DmStaffController extends BaseController<DmStaffQuery, DmStaffDto,
@RequiresPermissions(Auth.DM_STAFF_ADD)
@Log(title = "人员管理", businessType = BusinessType.INSERT)
public AjaxResult add(@Validated({V_A.class}) @RequestBody DmStaffDto dmStaff) {
Long tenantId = Long.parseLong(String.valueOf(SecurityContextHolder.getLocalMap().get("enterprise_id")));
SysEnterpriseDto enterpriseDto = enterpriseService.selectById(tenantId);
Source source = SourceUtil.getSourceCache(enterpriseDto.getStrategyId());
if (dmStaff.getResourceId() != null) {
DmResourcesDto dto = resourcesService.selectById(dmStaff.getResourceId());
if (dto != null) {
dmStaff.setAvatar(dto.getUrl());
}
}
long id = IdUtil.getSnowflakeNextId();
dmStaff.setId(id);
//以下代码添加主库企业和员工的关系映射表,用于手机号登录以及小程序登录
SysEnterpriseStaff enterpriseStaff = new SysEnterpriseStaff();
enterpriseStaff.setPhone(dmStaff.getPhone());
enterpriseStaff.setStaffId(id);
enterpriseStaff.setId(id);
enterpriseStaff.setTId(SecurityContextHolder.getEnterpriseId());
tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER);
AjaxResult result = super.add(dmStaff);
if (dmStaff.getBirthDate() != null) {
DmWebSocketMessageVo vo = new DmWebSocketMessageVo();
JSONObject birthJson = new JSONObject();
birthJson.put("name",dmStaff.getUserName());
birthJson.put("orderId",dmStaff.getId());
birthJson.put("years",new Date().getYear() - dmStaff.getBirthDate().getYear());
birthJson.put("timestamp",dmStaff.getBirthDate().getTime());
vo.setTemplate("birthday");
vo.setFormat(birthJson);
System.out.println(birthJson.toJSONString());
remoteIntentService.sendMessage(vo,tenantId,source.getMaster(), SecurityConstants.INNER);
}
if (dmStaff.getHireDate() != null) {
DmWebSocketMessageVo vo2 = new DmWebSocketMessageVo();
JSONObject hireJson = new JSONObject();
hireJson.put("name",dmStaff.getUserName());
hireJson.put("orderId",dmStaff.getId());
hireJson.put("years",new Date().getYear() - dmStaff.getHireDate().getYear());
hireJson.put("timestamp",dmStaff.getHireDate().getTime());
vo2.setTemplate("hireDate");
vo2.setFormat(hireJson);
System.out.println(hireJson.toJSONString());
remoteIntentService.sendMessage(vo2,tenantId,source.getMaster(), SecurityConstants.INNER);
}
return result;
return super.add(dmStaff);
}

/**
@@ -194,40 +128,6 @@ public class DmStaffController extends BaseController<DmStaffQuery, DmStaffDto,
@RequiresPermissions(Auth.DM_STAFF_EDIT)
@Log(title = "人员管理", businessType = BusinessType.UPDATE)
public AjaxResult edit(@Validated({V_E.class}) @RequestBody DmStaffDto dmStaff) {
Long tenantId = Long.parseLong(String.valueOf(SecurityContextHolder.getLocalMap().get("enterprise_id")));
SysEnterpriseDto enterpriseDto = enterpriseService.selectById(tenantId);
Source source = SourceUtil.getSourceCache(enterpriseDto.getStrategyId());
SysEnterpriseStaff enterpriseStaff = new SysEnterpriseStaff();
enterpriseStaff.setPhone(dmStaff.getPhone());
enterpriseStaff.setStaffId(dmStaff.getId());
enterpriseStaff.setId(dmStaff.getId());
enterpriseStaff.setTId(SecurityContextHolder.getEnterpriseId());
tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER);

if (dmStaff.getBirthDate() != null) {
DmWebSocketMessageVo vo = new DmWebSocketMessageVo();
JSONObject birthJson = new JSONObject();
birthJson.put("name",dmStaff.getUserName());
birthJson.put("orderId",dmStaff.getId());
birthJson.put("years",new Date().getYear() - dmStaff.getBirthDate().getYear());
birthJson.put("timestamp",dmStaff.getBirthDate().getTime());
vo.setTemplate("birthday");
vo.setFormat(birthJson);
System.out.println(birthJson.toJSONString());
remoteIntentService.sendMessage(vo,tenantId,source.getMaster(), SecurityConstants.INNER);
}
if (dmStaff.getHireDate() != null) {
DmWebSocketMessageVo vo2 = new DmWebSocketMessageVo();
JSONObject hireJson = new JSONObject();
hireJson.put("name",dmStaff.getUserName());
hireJson.put("orderId",dmStaff.getId());
hireJson.put("years",new Date().getYear() - dmStaff.getHireDate().getYear());
hireJson.put("timestamp",dmStaff.getHireDate().getTime());
vo2.setTemplate("hireDate");
vo2.setFormat(hireJson);
System.out.println(hireJson.toJSONString());
remoteIntentService.sendMessage(vo2,tenantId,source.getMaster(), SecurityConstants.INNER);
}
return super.edit(dmStaff);
}



+ 16
- 3
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/DmVisitorSmsConfigController.java Целия файл

@@ -9,9 +9,11 @@ import com.xueyi.common.log.enums.BusinessType;
import com.xueyi.common.security.annotation.RequiresPermissions;
import com.xueyi.common.web.entity.controller.BaseController;
import com.xueyi.system.api.digitalmans.domain.po.DmVisitRecordsPo;
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo;
import com.xueyi.system.staff.domain.dto.DmVisitorSmsConfigDto;
import com.xueyi.system.staff.domain.query.DmVisitorSmsConfigQuery;
import com.xueyi.system.staff.mapper.DmVisitRecordsMapper;
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;
@@ -49,6 +51,10 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon
private DmVisitRecordsMapper visitRecordsMapper;


@Autowired
private DmVisitorsMapper visitorsMapper;



/** 定义节点名称 */
@Override
@@ -120,8 +126,8 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon


@GetMapping("/send-sms")
public AjaxResult sendVisitorSms(@RequestParam("visitRecordId") Long visitRecordId, @RequestParam(value = "staffId", required = false) Long staffId) {
if (null != visitRecordId) {
public AjaxResult sendVisitorSms(@RequestParam("visitRecordId") Long visitRecordId, @RequestParam(value = "staffId", required = false) Long staffId, @RequestParam(value = "visitorId", required = false) Long visitorId) {
if (null != visitRecordId && -1 != visitRecordId) {
DmVisitRecordsPo po = visitRecordsMapper.selectById(visitRecordId);
R<String> r = visitRecordsService.sendSms(po);
if (r.isOk()) {
@@ -129,8 +135,15 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon
} else {
return AjaxResult.error(r.getMsg());
}
} else {//随时到访人员发短信
DmVisitorsPo po = visitorsMapper.selectById(visitorId);
R<String> r = visitRecordsService.sendSms(po, staffId);
if (r.isOk()) {
return AjaxResult.success("短信发送成功,请注意查收");
} else {
return AjaxResult.error(r.getMsg());
}
}
return AjaxResult.success("短信发送成功,请注意查收");
}

/**


+ 67
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/StaffGraphQLMutationResolver.java Целия файл

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

import com.xueyi.common.core.utils.core.IdUtil;
import com.xueyi.system.api.resource.domain.po.DmResourcesPo;
import com.xueyi.system.api.staff.domain.dto.DmStaffDto;
import com.xueyi.system.resource.mapper.DmResourcesMapper;
import com.xueyi.system.staff.domain.model.DmStaffConverter;
import com.xueyi.system.staff.manager.impl.DmStaffManager;
import com.xueyi.system.staff.mapper.DmStaffMapper;
import graphql.kickstart.tools.GraphQLMutationResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


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

@Component
class StaffGraphQLMutationResolver implements GraphQLMutationResolver {
@Autowired
private DmStaffMapper mapper;

@Autowired
private DmResourcesMapper resourcesMapper;

@Autowired
private DmStaffManager staffManager;

@Autowired
private DmStaffConverter staffConverter;


private DmStaffDto initPo(DmStaffDto po) {
if (null != po.getResourceId() && null == po.getAvatar()) {
DmResourcesPo resourcesPo = resourcesMapper.selectById(po.getResourceId());
if (null != resourcesPo) {
po.setAvatar(resourcesPo.getUrl());
}
}
DmStaffDto dto2 = null;
if (null != po.getId()) {
DmStaffDto dto = staffConverter.mapperDto(mapper.selectById(po.getId()));
if (null != dto) {
dto2 = staffManager.merge(dto, po, DmStaffDto.class);
}
}
return dto2 == null ? po : staffConverter.mapperDto(dto2);
}

public DmStaffDto updateStaff(DmStaffDto po){
Boolean result = mapper.updateById(initPo(po)) > 0;
return result ? po : null;
}

public DmStaffDto createStaff(DmStaffDto po){
po.setId(IdUtil.getSnowflakeNextId());
Boolean result = mapper.insert(initPo(po)) > 0;
return result ? po : null;
}

public Boolean deleteStaff(Long id){
return mapper.deleteById(id) > 0;
}
}

+ 59
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/StaffGraphQLQueryResolver.java Целия файл

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

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xueyi.system.api.staff.domain.dto.DmStaffDto;
import com.xueyi.system.api.staff.domain.po.DmStaffPo;
import com.xueyi.system.staff.domain.model.DmStaffConverter;
import com.xueyi.system.staff.mapper.DmStaffMapper;
import graphql.kickstart.tools.GraphQLQueryResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

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

@Component
class StaffGraphQLQueryResolver implements GraphQLQueryResolver {
@Autowired
private DmStaffMapper mapper;

@Autowired
private DmStaffConverter converter;

public DmStaffDto staff(Long id){
return converter.mapperDto(mapper.selectById(id));
}

public List<DmStaffDto> staffs(Long id, String userName, String nickName, Integer userType, String phone){
QueryWrapper<DmStaffPo> query = new QueryWrapper<>();

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

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

if (StringUtils.isNotEmpty(nickName)) {
query.like("nick_name", nickName);
}

if (null != userType) {
query.eq("type", userType);
}

if (StringUtils.isNotEmpty(phone)) {
query.eq("phone", phone);
}
query.orderByDesc("id");

return mapper.selectList(query).stream().map(t->converter.mapperDto(t)).toList();
}
}

xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLQuery.java → xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLQueryResolver.java Целия файл


+ 112
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmStaffServiceImpl.java Целия файл

@@ -2,13 +2,22 @@ package com.xueyi.system.staff.service.impl;

import cn.hutool.core.date.LocalDateTimeUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xueyi.common.cache.utils.SourceUtil;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.context.SecurityContextHolder;
import com.xueyi.common.core.utils.core.IdUtil;
import com.xueyi.common.core.utils.core.ObjectUtil;
import com.xueyi.common.web.annotation.TenantIgnore;
import com.xueyi.common.web.entity.service.impl.BaseServiceImpl;
import com.xueyi.common.web.utils.MyDateUtils;
import com.xueyi.nlt.api.netty.domain.vo.DmWebSocketMessageVo;
import com.xueyi.nlt.api.nlt.feign.RemoteIntentService;
import com.xueyi.system.api.holiday.domain.po.DmHolidayPo;
import com.xueyi.system.api.model.Source;
import com.xueyi.system.api.organize.domain.dto.SysEnterpriseDto;
import com.xueyi.system.api.organize.domain.vo.SysDeptExt;
import com.xueyi.system.api.pass.domain.po.DmRecognizedRecordsPo;
import com.xueyi.system.api.staff.domain.dto.DmStaffDto;
@@ -16,12 +25,17 @@ import com.xueyi.system.api.staff.domain.po.DmStaffPo;
import com.xueyi.system.api.staff.domain.vo.DmStaffFeature;
import com.xueyi.system.common.service.IDmHolidayService;
import com.xueyi.system.organize.mapper.SysDeptExtMapper;
import com.xueyi.system.organize.service.ISysEnterpriseService;
import com.xueyi.system.resource.domain.dto.DmResourcesDto;
import com.xueyi.system.resource.service.impl.DmResourcesServiceImpl;
import com.xueyi.system.staff.domain.po.DmEmpAttendancePo;
import com.xueyi.system.staff.domain.query.DmStaffQuery;
import com.xueyi.system.staff.manager.IDmStaffManager;
import com.xueyi.system.staff.mapper.DmEmpAttendanceMapper;
import com.xueyi.system.staff.mapper.DmStaffMapper;
import com.xueyi.system.staff.service.IDmStaffService;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.feign.RemoteTenantService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -245,4 +259,102 @@ public class DmStaffServiceImpl extends BaseServiceImpl<DmStaffQuery, DmStaffDto
dmEmpAttendanceMapper.insert(ea);
}
}

@Autowired
private DmResourcesServiceImpl resourcesService;

@Autowired
private RemoteTenantService tenantService;

@Autowired
ISysEnterpriseService enterpriseService;

@Autowired
private RemoteIntentService remoteIntentService;

@Override
public int insert(DmStaffDto dmStaff) {
if (dmStaff.getResourceId() != null) {
DmResourcesDto dto = resourcesService.selectById(dmStaff.getResourceId());
if (dto != null) {
dmStaff.setAvatar(dto.getUrl());
}
}
long id = IdUtil.getSnowflakeNextId();
dmStaff.setId(id);
//以下代码添加主库企业和员工的关系映射表,用于手机号登录以及小程序登录
SysEnterpriseStaffPo enterpriseStaff = new SysEnterpriseStaffPo();
enterpriseStaff.setPhone(dmStaff.getPhone());
enterpriseStaff.setId(id);
Long tenantId = SecurityContextHolder.getEnterpriseId();
enterpriseStaff.setTId(tenantId);
tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER);

SysEnterpriseDto enterpriseDto = enterpriseService.selectById(tenantId);
Source source = SourceUtil.getSourceCache(enterpriseDto.getStrategyId());
if (dmStaff.getBirthDate() != null) {
DmWebSocketMessageVo vo = new DmWebSocketMessageVo();
JSONObject birthJson = new JSONObject();
birthJson.put("name",dmStaff.getUserName());
birthJson.put("orderId",dmStaff.getId());
birthJson.put("years",new Date().getYear() - dmStaff.getBirthDate().getYear());
birthJson.put("timestamp",dmStaff.getBirthDate().getTime());
vo.setTemplate("birthday");
vo.setFormat(birthJson);
System.out.println(birthJson.toJSONString());
remoteIntentService.sendMessage(vo,tenantId,source.getMaster(), SecurityConstants.INNER);
}
if (dmStaff.getHireDate() != null) {
DmWebSocketMessageVo vo2 = new DmWebSocketMessageVo();
JSONObject hireJson = new JSONObject();
hireJson.put("name",dmStaff.getUserName());
hireJson.put("orderId",dmStaff.getId());
hireJson.put("years",new Date().getYear() - dmStaff.getHireDate().getYear());
hireJson.put("timestamp",dmStaff.getHireDate().getTime());
vo2.setTemplate("hireDate");
vo2.setFormat(hireJson);
System.out.println(hireJson.toJSONString());
remoteIntentService.sendMessage(vo2,tenantId,source.getMaster(), SecurityConstants.INNER);
}
return super.insert(dmStaff);
}


public int update(DmStaffDto dmStaff) {
Long tenantId = SecurityContextHolder.getEnterpriseId();
SysEnterpriseDto enterpriseDto = enterpriseService.selectById(tenantId);
Source source = SourceUtil.getSourceCache(enterpriseDto.getStrategyId());
SysEnterpriseStaffPo enterpriseStaff = new SysEnterpriseStaffPo();
enterpriseStaff.setPhone(dmStaff.getPhone());
enterpriseStaff.setId(dmStaff.getId());
enterpriseStaff.setTId(SecurityContextHolder.getEnterpriseId());
tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER);

if (dmStaff.getBirthDate() != null) {
DmWebSocketMessageVo vo = new DmWebSocketMessageVo();
JSONObject birthJson = new JSONObject();
birthJson.put("name",dmStaff.getUserName());
birthJson.put("orderId",dmStaff.getId());
birthJson.put("years",new Date().getYear() - dmStaff.getBirthDate().getYear());
birthJson.put("timestamp",dmStaff.getBirthDate().getTime());
vo.setTemplate("birthday");
vo.setFormat(birthJson);
System.out.println(birthJson.toJSONString());
remoteIntentService.sendMessage(vo,tenantId,source.getMaster(), SecurityConstants.INNER);
}
if (dmStaff.getHireDate() != null) {
DmWebSocketMessageVo vo2 = new DmWebSocketMessageVo();
JSONObject hireJson = new JSONObject();
hireJson.put("name",dmStaff.getUserName());
hireJson.put("orderId",dmStaff.getId());
hireJson.put("years",new Date().getYear() - dmStaff.getHireDate().getYear());
hireJson.put("timestamp",dmStaff.getHireDate().getTime());
vo2.setTemplate("hireDate");
vo2.setFormat(hireJson);
System.out.println(hireJson.toJSONString());
remoteIntentService.sendMessage(vo2,tenantId,source.getMaster(), SecurityConstants.INNER);
}

return super.update(dmStaff);
}
}

+ 44
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmVisitRecordsServiceImpl.java Целия файл

@@ -1,6 +1,7 @@
package com.xueyi.system.staff.service.impl;

import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.BooleanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -200,6 +201,9 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue

send.setPhone(visitorsPo.getPhone());
send.setTemplate(smsProperties.getVisitorTemplate());
if (BooleanUtil.isTrue(visitorsPo.getFlexVisit())) {
send.setTemplate(smsProperties.getVipVisitorTemplate());
}
send.setDataMap(json.toJSONString());
JSONObject result = smsService.sendSms(send);

@@ -217,5 +221,45 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue
return R.ok("发送成功");
}

public R<String> sendSms(DmVisitorsPo po, Long staffId) {
log.info("sendSms po:{}", JSON.toJSONString(po));
if (null != po && null != po.getId()) {
DmVisitorsPo visitorsPo = visitorsMapper.selectById(po.getId());
SmsReqEntity send = new SmsReqEntity();
try {
if (null != visitorsPo && StringUtils.isNotEmpty(visitorsPo.getPhone()) && BooleanUtil.isTrue(visitorsPo.getFlexVisit())) {

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


JSONObject json = new JSONObject();

json.put("nickName", visitorsPo.getName());
json.put("robotName", dmDigitalmanPo.getName());
//给访客发送短信

send.setPhone(visitorsPo.getPhone());
send.setTemplate(smsProperties.getVisitorTemplate());
if (BooleanUtil.isTrue(visitorsPo.getFlexVisit())) {
send.setTemplate(smsProperties.getVipVisitorTemplate());
}
send.setDataMap(json.toJSONString());
JSONObject result = smsService.sendSms(send);
DmStaffPo staffPo = staffMapper.selectById(staffId);

DmVisitorOperateLogDto visitorOperateLogPo = visitorOperateLogService.initData(po.getId(), staffPo.getId(), DmVisitorOperateLogDto.BUSINESS_TYPE_OTHER, "sendSms", JSON.toJSONString(send), result.toJSONString());
visitorOperateLogService.insert(visitorOperateLogPo);
} else {
return R.fail("数据存在问题");
}

} catch (Exception e) {
log.error("发送短信异常", e.getMessage());
return R.fail("服务器错误,无法发送短信");
}
}
return R.ok("发送成功");
}


}

+ 7
- 7
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/controller/WeappController.java Целия файл

@@ -19,7 +19,7 @@ import com.xueyi.system.wechat.domain.bean.WeappSessionResponse;
import com.xueyi.system.wechat.domain.bean.WeappSignUpReq;
import com.xueyi.system.wechat.domain.po.WeappUserInfo;
import com.xueyi.system.wechat.service.WeappService;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.feign.RemoteTenantService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -75,11 +75,11 @@ public class WeappController {
}

log.info("微信login返回信息:{}", weChatUserInfo);
R<SysEnterpriseStaff> staffR = tenantService.queryStaff(weChatUserInfo.getOpenid(), SecurityConstants.INNER);
R<SysEnterpriseStaffPo> staffR = tenantService.queryStaff(weChatUserInfo.getOpenid(), SecurityConstants.INNER);
Map<String, Object> map = new HashMap<>();
try {
map.put("weappAuth", CryptoUtil.encrypt(weChatUserInfo.toString()));
SysEnterpriseStaff staff = staffR.getData();
SysEnterpriseStaffPo staff = staffR.getData();
log.info("login staff:{}", staff);
if (staff != null) {
log.info("login phone:{}", staff.getPhone());
@@ -142,10 +142,10 @@ public class WeappController {
return AjaxResult.error("手机号无对应员工,请查证后重试!");
} else {
Map<String, Object> map = tokenService.createToken(loginInfoResult.getData());
R<SysEnterpriseStaff> enterpriseStaffR = tenantService.queryStaff(phone, SecurityConstants.INNER);
R<SysEnterpriseStaffPo> enterpriseStaffR = tenantService.queryStaff(phone, SecurityConstants.INNER);
log.info("根据手机号查询员工返回:{}", enterpriseStaffR);
if (!enterpriseStaffR.isFail() && enterpriseStaffR.getData() != null){
SysEnterpriseStaff enterpriseStaff = enterpriseStaffR.getData();
SysEnterpriseStaffPo enterpriseStaff = enterpriseStaffR.getData();
enterpriseStaff.setOpenid(obj.getOpenid());
tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER);
}
@@ -172,10 +172,10 @@ public class WeappController {
try {
String str = CryptoUtil.decrypt(signUpReq.getWeappAuth());
WeappSessionResponse obj = JSON.parseObject(str, WeappSessionResponse.class);
R<SysEnterpriseStaff> enterpriseStaffR = tenantService.queryStaff(obj.getOpenid(), SecurityConstants.INNER);
R<SysEnterpriseStaffPo> enterpriseStaffR = tenantService.queryStaff(obj.getOpenid(), SecurityConstants.INNER);
log.info("根据手机号查询员工返回:{}", enterpriseStaffR);
if (!enterpriseStaffR.isFail() && enterpriseStaffR.getData() != null){
SysEnterpriseStaff enterpriseStaff = enterpriseStaffR.getData();
SysEnterpriseStaffPo enterpriseStaff = enterpriseStaffR.getData();
enterpriseStaff.setOpenid(null);
tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER);
}


+ 55
- 0
xueyi-modules/xueyi-system/src/main/resources/graphql/staff.graphqls Целия файл

@@ -0,0 +1,55 @@
extend type Query {
staffs(
id: ID
userName: String
nickName: String
userType: Int
phone: String
): [Staff!]

staff(id: ID): Staff
}

input StaffInput {
id: ID
userName: String
nickName: String
phone: String
email: String
sex: String
userType: Int
deptId: String
avatar: String
resourceId: ID
# 删除标识,1:已删除;0:未删除
delFlag: Int
}

extend type Mutation {
createStaff(
input: StaffInput!
): Staff

updateStaff(
input: StaffInput!
): Staff

deleteStaff(
id: ID!,
): Boolean
}

type Staff {
id: ID
userName: String
nickName: String
phone: String
email: String
sex: String
userType: Int
deptId: String
avatar: String
resourceId: ID
# 删除标识,1:已删除;0:未删除
delFlag: Int
}

+ 15
- 6
xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/controller/TeTenantController.java Целия файл

@@ -20,11 +20,14 @@ import com.xueyi.common.security.auth.Auth;
import com.xueyi.common.web.annotation.TenantIgnore;
import com.xueyi.common.web.entity.controller.BaseController;
import com.xueyi.common.web.entity.domain.mapper.DeviceTenantMergeMapper;
import com.xueyi.tenant.api.tenant.domain.dto.SysEnterpriseStaffDto;
import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.model.SysStaffConverter;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo;
import com.xueyi.tenant.api.tenant.domain.query.TeTenantQuery;
import com.xueyi.tenant.tenant.domain.model.TeTenantRegister;
import com.xueyi.tenant.tenant.manager.impl.SysStaffManagerImpl;
import com.xueyi.tenant.tenant.mapper.SysEnterpriseStaffMapper;
import com.xueyi.tenant.tenant.service.ITeTenantService;
import org.slf4j.Logger;
@@ -67,6 +70,12 @@ public class TeTenantController extends BaseController<TeTenantQuery, TeTenantDt
@Autowired
private SysEnterpriseStaffMapper staffMapper;

@Autowired
private SysStaffManagerImpl staffManager;

@Autowired
private SysStaffConverter staffConverter;

/**
* 租户新增 | 内部调用
*/
@@ -119,19 +128,19 @@ public class TeTenantController extends BaseController<TeTenantQuery, TeTenantDt

@InnerAuth
@GetMapping("/query-staff-by-phone")
R<SysEnterpriseStaff> queryStaff(@RequestParam("phone") String phone) {
SysEnterpriseStaff po = staffMapper.selectStaffByPhone(phone);
R<SysEnterpriseStaffPo> queryStaff(@RequestParam("phone") String phone) {
SysEnterpriseStaffPo po = staffMapper.selectStaffByPhone(phone);
return R.ok(po);
}

@InnerAuth
@PostMapping("/save-staff")
@TenantIgnore(tenantLine = true)
R<SysEnterpriseStaff> staff(@RequestBody SysEnterpriseStaff staff) {
R<SysEnterpriseStaffPo> staff(@RequestBody SysEnterpriseStaffPo staff) {
if (staff.getId() != null) {
SysEnterpriseStaff staffPo = staffMapper.selectById(staff.getId());
SysEnterpriseStaffPo staffPo = staffMapper.selectById(staff.getId());
if (null != staffPo) {
staffMapper.updateById(staff);
staffMapper.updateById(staffManager.merge(staffConverter.mapperDto(staffPo), staffConverter.mapperDto(staff), SysEnterpriseStaffDto.class));
} else {
staffMapper.insert(staff);
}


+ 14
- 0
xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/manager/ISysStaffManager.java Целия файл

@@ -0,0 +1,14 @@
package com.xueyi.tenant.tenant.manager;

import com.xueyi.common.web.entity.manager.IBaseManager;
import com.xueyi.tenant.api.tenant.domain.dto.SysEnterpriseStaffDto;
import com.xueyi.tenant.api.tenant.domain.query.SysEnterpriseStaffQuery;

/**
* 租户管理 数据封装层
*
* @author xueyi
*/
public interface ISysStaffManager extends IBaseManager<SysEnterpriseStaffQuery, SysEnterpriseStaffDto> {

}

+ 19
- 0
xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/manager/impl/SysStaffManagerImpl.java Целия файл

@@ -0,0 +1,19 @@
package com.xueyi.tenant.tenant.manager.impl;

import com.xueyi.common.web.entity.manager.impl.BaseManagerImpl;
import com.xueyi.tenant.api.tenant.domain.dto.SysEnterpriseStaffDto;
import com.xueyi.tenant.api.tenant.domain.model.SysStaffConverter;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.domain.query.SysEnterpriseStaffQuery;
import com.xueyi.tenant.tenant.manager.ISysStaffManager;
import com.xueyi.tenant.tenant.mapper.SysEnterpriseStaffMapper;
import org.springframework.stereotype.Component;

/**
* 租户管理 数据封装层处理
*
* @author xueyi
*/
@Component
public class SysStaffManagerImpl extends BaseManagerImpl<SysEnterpriseStaffQuery, SysEnterpriseStaffDto, SysEnterpriseStaffPo, SysEnterpriseStaffMapper, SysStaffConverter> implements ISysStaffManager {
}

+ 4
- 4
xueyi-modules/xueyi-tenant/src/main/java/com/xueyi/tenant/tenant/mapper/SysEnterpriseStaffMapper.java Целия файл

@@ -4,7 +4,7 @@ import com.xueyi.common.datasource.annotation.Master;
import com.xueyi.common.web.annotation.TenantIgnore;
import com.xueyi.common.web.entity.mapper.BaseMapper;
import com.xueyi.tenant.api.tenant.domain.dto.SysEnterpriseStaffDto;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff;
import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo;
import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo;
import com.xueyi.tenant.api.tenant.domain.query.SysEnterpriseStaffQuery;
import org.apache.ibatis.annotations.Param;
@@ -15,13 +15,13 @@ import org.apache.ibatis.annotations.Param;
* @author xueyi
*/
@Master
public interface SysEnterpriseStaffMapper extends BaseMapper<SysEnterpriseStaffQuery, SysEnterpriseStaffDto, SysEnterpriseStaff> {
public interface SysEnterpriseStaffMapper extends BaseMapper<SysEnterpriseStaffQuery, SysEnterpriseStaffDto, SysEnterpriseStaffPo> {
@TenantIgnore(tenantLine = true)
TeTenantPo selectTenantByPhone(@Param("phone") String phone);

@TenantIgnore(tenantLine = true)
SysEnterpriseStaff selectStaffByPhone(@Param("phone") String phone);
SysEnterpriseStaffPo selectStaffByPhone(@Param("phone") String phone);

@TenantIgnore(tenantLine = true)
void updateEntity(SysEnterpriseStaff po);
void updateEntity(SysEnterpriseStaffPo po);
}

+ 1
- 1
xueyi-modules/xueyi-tenant/src/main/resources/mapper/SysEnterpriseStaffMapper.xml Целия файл

@@ -8,7 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select * from te_tenant where id = (select t_id from sys_enterprise_staff where (phone = #{phone} or openid = #{phone}) and del_flag = 0 limit 1)
</select>

<select id="selectStaffByPhone" resultType="com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaff" parameterType="Object">
<select id="selectStaffByPhone" resultType="com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo" parameterType="Object">
select * from sys_enterprise_staff where (phone = #{phone} or openid = #{phone}) and del_flag = 0 limit 1
</select>



Зареждане…
Отказ
Запис