2,新增敏感词local策略 3,新增随时拜访访客短信模版tags/B.2.7.0_20240201_base
| @@ -1,6 +1,6 @@ | |||||
| package com.xueyi.tenant.api.tenant.domain.dto; | 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.Data; | ||||
| import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
| @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; | |||||
| */ | */ | ||||
| @Data | @Data | ||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||
| public class SysEnterpriseStaffDto extends SysEnterpriseStaff { | |||||
| public class SysEnterpriseStaffDto extends SysEnterpriseStaffPo { | |||||
| private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
| private String oldPhone; | private String oldPhone; | ||||
| @@ -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> { | |||||
| } | |||||
| @@ -15,15 +15,13 @@ import java.io.Serial; | |||||
| @Data | @Data | ||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||
| @TableName(value = "sys_enterprise_staff", excludeProperty = {"name","sort","createBy","createTime","updateBy","updateTime","remark","tenantId", "status"}) | @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 | @Serial | ||||
| private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
| protected Long id; | protected Long id; | ||||
| protected Long staffId; | |||||
| protected String phone; | protected String phone; | ||||
| private Long tId;//租户号 | private Long tId;//租户号 | ||||
| @@ -1,6 +1,6 @@ | |||||
| package com.xueyi.tenant.api.tenant.domain.query; | 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.Data; | ||||
| import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
| @@ -13,7 +13,7 @@ import java.io.Serial; | |||||
| */ | */ | ||||
| @Data | @Data | ||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||
| public class SysEnterpriseStaffQuery extends SysEnterpriseStaff { | |||||
| public class SysEnterpriseStaffQuery extends SysEnterpriseStaffPo { | |||||
| @Serial | @Serial | ||||
| private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
| @@ -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.result.R; | ||||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | ||||
| import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | 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.domain.po.TeTenantPo; | ||||
| import com.xueyi.tenant.api.tenant.feign.factory.RemoteTenantFallbackFactory; | import com.xueyi.tenant.api.tenant.feign.factory.RemoteTenantFallbackFactory; | ||||
| import org.springframework.cloud.openfeign.FeignClient; | 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); | R<TeTenantPo> queryTenantByStaffPhone(@RequestParam ("phone") String phone, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | ||||
| @GetMapping("/tenant/query-staff-by-phone") | @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") | @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); | |||||
| } | } | ||||
| @@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSONObject; | |||||
| import com.xueyi.common.core.web.result.R; | import com.xueyi.common.core.web.result.R; | ||||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | ||||
| import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | 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.domain.po.TeTenantPo; | ||||
| import com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | import com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | ||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
| @@ -61,12 +61,12 @@ public class RemoteTenantFallbackFactory implements FallbackFactory<RemoteTenant | |||||
| @Override | @Override | ||||
| public R<SysEnterpriseStaff> queryStaff(String phone, String source) { | |||||
| public R<SysEnterpriseStaffPo> queryStaff(String phone, String source) { | |||||
| return R.fail("验证用户手机号失败:" + throwable.getMessage()); | return R.fail("验证用户手机号失败:" + throwable.getMessage()); | ||||
| } | } | ||||
| @Override | @Override | ||||
| public R<SysEnterpriseStaff> saveEnterpriseStaff(SysEnterpriseStaff staff, String source) { | |||||
| public R<SysEnterpriseStaffPo> saveEnterpriseStaff(SysEnterpriseStaffPo staff, String source) { | |||||
| return R.fail("保存员工失败:" + throwable.getMessage()); | return R.fail("保存员工失败:" + throwable.getMessage()); | ||||
| } | } | ||||
| }; | }; | ||||
| @@ -23,7 +23,7 @@ import com.xueyi.common.sms.configure.SmsProperties; | |||||
| import com.xueyi.system.api.model.LoginUser; | import com.xueyi.system.api.model.LoginUser; | ||||
| import com.xueyi.system.api.sms.domain.vo.SmsReqEntity; | import com.xueyi.system.api.sms.domain.vo.SmsReqEntity; | ||||
| import com.xueyi.system.api.sms.feign.RemoteSmsService; | 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 com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| @@ -85,7 +85,7 @@ public class TokenController { | |||||
| @PostMapping("phoneLogin") | @PostMapping("phoneLogin") | ||||
| public AjaxResult loginByPhone(@Valid @RequestBody PhoneLoginBody form) { | 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) { | if (staffR.isFail() || staffR.getData() == null) { | ||||
| return AjaxResult.error("手机号不正确,清查验"); | return AjaxResult.error("手机号不正确,清查验"); | ||||
| } | } | ||||
| @@ -162,7 +162,7 @@ public class TokenController { | |||||
| @GetMapping("validCode") | @GetMapping("validCode") | ||||
| public R<String> validCode(@RequestParam String phone) { | 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) { | if (staff.getData() == null) { | ||||
| return R.fail("手机号不存在,请查验"); | return R.fail("手机号不存在,请查验"); | ||||
| } | } | ||||
| @@ -28,6 +28,7 @@ public class SmsProperties { | |||||
| private String defaultRemindTemplate; | private String defaultRemindTemplate; | ||||
| private String warningTemplate; | private String warningTemplate; | ||||
| private String visitorTemplate; | private String visitorTemplate; | ||||
| private String vipVisitorTemplate; | |||||
| private String robotName; | private String robotName; | ||||
| private String receptionPhones; | private String receptionPhones; | ||||
| } | } | ||||
| @@ -12,6 +12,11 @@ import com.xueyi.common.web.entity.manager.impl.handle.BaseHandleManagerImpl; | |||||
| import com.xueyi.common.web.entity.mapper.BaseMapper; | import com.xueyi.common.web.entity.mapper.BaseMapper; | ||||
| import java.io.Serializable; | 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.Collection; | ||||
| import java.util.List; | 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)); | .last(SqlConstants.LIMIT_ONE)); | ||||
| return mapperDto(po); | 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; | |||||
| } | |||||
| } | } | ||||
| @@ -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 | @Override | ||||
| public void saveToEs(BaseEntity dto) { | public void saveToEs(BaseEntity dto) { | ||||
| @@ -81,6 +81,13 @@ | |||||
| <artifactId>xueyi-api-system</artifactId> | <artifactId>xueyi-api-system</artifactId> | ||||
| </dependency> | </dependency> | ||||
| <dependency> | |||||
| <groupId>com.github.houbb</groupId> | |||||
| <artifactId>sensitive-word</artifactId> | |||||
| <version>0.12.0</version> | |||||
| </dependency> | |||||
| </dependencies> | </dependencies> | ||||
| <build> | <build> | ||||
| @@ -1,7 +1,6 @@ | |||||
| package com.xueyi.nlt.nlt.controller; | package com.xueyi.nlt.nlt.controller; | ||||
| import co.elastic.clients.elasticsearch.ElasticsearchClient; | import co.elastic.clients.elasticsearch.ElasticsearchClient; | ||||
| import com.alibaba.druid.support.json.JSONUtils; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson2.JSONArray; | import com.alibaba.fastjson2.JSONArray; | ||||
| import com.alibaba.fastjson2.JSONObject; | 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.LlmParam; | ||||
| import com.xueyi.nlt.nlt.domain.LlmResponse; | import com.xueyi.nlt.nlt.domain.LlmResponse; | ||||
| import com.xueyi.nlt.nlt.domain.dto.DmIntentDto; | 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.po.DmRegularPo; | ||||
| import com.xueyi.nlt.nlt.domain.query.DmIntentQuery; | import com.xueyi.nlt.nlt.domain.query.DmIntentQuery; | ||||
| import com.xueyi.nlt.nlt.domain.vo.IntentTemplateVo; | 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.IDmIntentService; | ||||
| import com.xueyi.nlt.nlt.service.ISensitiveService; | import com.xueyi.nlt.nlt.service.ISensitiveService; | ||||
| import com.xueyi.nlt.nlt.service.ISysLlmService; | 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.nlt.nlt.template.*; | ||||
| import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto; | import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto; | ||||
| import com.xueyi.system.api.digitalmans.domain.dto.DmSkillDto; | import com.xueyi.system.api.digitalmans.domain.dto.DmSkillDto; | ||||
| @@ -904,6 +904,9 @@ public class DmIntentController extends BaseController<DmIntentQuery, DmIntentDt | |||||
| @Autowired | @Autowired | ||||
| private ISensitiveService sensitiveService; | private ISensitiveService sensitiveService; | ||||
| @Autowired | |||||
| private DmSensitiveWordServiceImpl sensitiveWordService; | |||||
| @GetMapping("/api/create-sensitive-lib") | @GetMapping("/api/create-sensitive-lib") | ||||
| public AjaxResult addSensitiveBlack(@RequestParam("name") String name, @RequestParam(value = "category" ,required = false) String category, @RequestParam("type") String type){ | public AjaxResult addSensitiveBlack(@RequestParam("name") String name, @RequestParam(value = "category" ,required = false) String category, @RequestParam("type") String type){ | ||||
| try { | try { | ||||
| @@ -926,8 +929,12 @@ public class DmIntentController extends BaseController<DmIntentQuery, DmIntentDt | |||||
| String res = ""; | String res = ""; | ||||
| if ("black".equals(type)) { | if ("black".equals(type)) { | ||||
| res = sensitiveService.addKeyWord(xunFeiSensitiveConfig.BLACK_LIB_ID, new String[]{content}); | res = sensitiveService.addKeyWord(xunFeiSensitiveConfig.BLACK_LIB_ID, new String[]{content}); | ||||
| DmSensitiveWordDto sensitiveWordPo = new DmSensitiveWordDto(content, DmSensitiveWordDto.SENSITIVE_TYPE_BLACK); | |||||
| sensitiveWordService.insert(sensitiveWordPo); | |||||
| } else { | } else { | ||||
| res = sensitiveService.addKeyWord(xunFeiSensitiveConfig.WHITE_LIB_ID, new String[]{content}); | 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)); | return AjaxResult.success(JSON.parse(res)); | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| @@ -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); | |||||
| } | |||||
| } | |||||
| @@ -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> { | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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> { | |||||
| } | |||||
| @@ -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)); | |||||
| } | |||||
| } | |||||
| @@ -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> { | |||||
| } | |||||
| @@ -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> { | |||||
| } | |||||
| @@ -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"); | |||||
| } | |||||
| } | |||||
| @@ -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(); | |||||
| } | |||||
| } | |||||
| @@ -42,9 +42,9 @@ import java.util.UUID; | |||||
| */ | */ | ||||
| @Service | @Service | ||||
| @Primary | @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 appid; | ||||
| private String APIKey; | private String APIKey; | ||||
| @@ -9,7 +9,6 @@ import com.xueyi.system.common.service.IDmHolidayService; | |||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import java.time.LocalDate; | import java.time.LocalDate; | ||||
| import java.util.Date; | |||||
| @Service | @Service | ||||
| public class IDmHolidayServiceImpl extends BaseServiceImpl<DmHolidayQuery, DmHolidayDto, IDmHolidayManager> implements IDmHolidayService { | public class IDmHolidayServiceImpl extends BaseServiceImpl<DmHolidayQuery, DmHolidayDto, IDmHolidayManager> implements IDmHolidayService { | ||||
| @@ -1,10 +1,5 @@ | |||||
| package com.xueyi.system.staff.controller; | 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.ObjectUtil; | ||||
| import com.xueyi.common.core.utils.core.StrUtil; | import com.xueyi.common.core.utils.core.StrUtil; | ||||
| import com.xueyi.common.core.utils.file.FileTypeUtil; | 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.common.web.entity.controller.BaseController; | ||||
| import com.xueyi.file.api.domain.SysFile; | import com.xueyi.file.api.domain.SysFile; | ||||
| import com.xueyi.file.api.feign.RemoteFileService; | 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.organize.domain.dto.SysEnterpriseDto; | ||||
| import com.xueyi.system.api.staff.domain.dto.DmStaffDto; | 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.po.DmStaffPo; | ||||
| import com.xueyi.system.api.staff.domain.vo.DmStaffFeature; | import com.xueyi.system.api.staff.domain.vo.DmStaffFeature; | ||||
| import com.xueyi.system.authority.service.ISysLoginService; | 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.resource.service.IDmResourcesService; | ||||
| import com.xueyi.system.staff.domain.query.DmStaffQuery; | import com.xueyi.system.staff.domain.query.DmStaffQuery; | ||||
| import com.xueyi.system.staff.service.IDmStaffService; | 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.beans.factory.annotation.Autowired; | ||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.bind.annotation.DeleteMapping; | import org.springframework.web.bind.annotation.DeleteMapping; | ||||
| @@ -51,7 +39,6 @@ import org.springframework.web.multipart.MultipartFile; | |||||
| import java.io.Serializable; | import java.io.Serializable; | ||||
| import java.util.Arrays; | import java.util.Arrays; | ||||
| import java.util.Date; | |||||
| import java.util.List; | import java.util.List; | ||||
| /** | /** | ||||
| @@ -71,19 +58,9 @@ public class DmStaffController extends BaseController<DmStaffQuery, DmStaffDto, | |||||
| @Autowired | @Autowired | ||||
| private RemoteFileService remoteFileService; | private RemoteFileService remoteFileService; | ||||
| @Autowired | |||||
| private RemoteIntentService remoteIntentService; | |||||
| @Autowired | |||||
| ISysEnterpriseService enterpriseService; | |||||
| @Autowired | @Autowired | ||||
| IDmResourcesService resourcesService; | IDmResourcesService resourcesService; | ||||
| @Autowired | |||||
| RemoteTenantService tenantService; | |||||
| /** 定义节点名称 */ | /** 定义节点名称 */ | ||||
| @Override | @Override | ||||
| protected String getNodeName() { | protected String getNodeName() { | ||||
| @@ -140,50 +117,7 @@ public class DmStaffController extends BaseController<DmStaffQuery, DmStaffDto, | |||||
| @RequiresPermissions(Auth.DM_STAFF_ADD) | @RequiresPermissions(Auth.DM_STAFF_ADD) | ||||
| @Log(title = "人员管理", businessType = BusinessType.INSERT) | @Log(title = "人员管理", businessType = BusinessType.INSERT) | ||||
| public AjaxResult add(@Validated({V_A.class}) @RequestBody DmStaffDto dmStaff) { | 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) | @RequiresPermissions(Auth.DM_STAFF_EDIT) | ||||
| @Log(title = "人员管理", businessType = BusinessType.UPDATE) | @Log(title = "人员管理", businessType = BusinessType.UPDATE) | ||||
| public AjaxResult edit(@Validated({V_E.class}) @RequestBody DmStaffDto dmStaff) { | 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); | return super.edit(dmStaff); | ||||
| } | } | ||||
| @@ -9,9 +9,11 @@ import com.xueyi.common.log.enums.BusinessType; | |||||
| import com.xueyi.common.security.annotation.RequiresPermissions; | import com.xueyi.common.security.annotation.RequiresPermissions; | ||||
| import com.xueyi.common.web.entity.controller.BaseController; | 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.DmVisitRecordsPo; | ||||
| import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; | |||||
| import com.xueyi.system.staff.domain.dto.DmVisitorSmsConfigDto; | import com.xueyi.system.staff.domain.dto.DmVisitorSmsConfigDto; | ||||
| import com.xueyi.system.staff.domain.query.DmVisitorSmsConfigQuery; | import com.xueyi.system.staff.domain.query.DmVisitorSmsConfigQuery; | ||||
| import com.xueyi.system.staff.mapper.DmVisitRecordsMapper; | 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.IDmVisitorSmsConfigService; | ||||
| import com.xueyi.system.staff.service.impl.DmVisitRecordsServiceImpl; | import com.xueyi.system.staff.service.impl.DmVisitRecordsServiceImpl; | ||||
| import com.xueyi.system.staff.service.impl.DmVisitorSmsConfigServiceImpl; | import com.xueyi.system.staff.service.impl.DmVisitorSmsConfigServiceImpl; | ||||
| @@ -49,6 +51,10 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon | |||||
| private DmVisitRecordsMapper visitRecordsMapper; | private DmVisitRecordsMapper visitRecordsMapper; | ||||
| @Autowired | |||||
| private DmVisitorsMapper visitorsMapper; | |||||
| /** 定义节点名称 */ | /** 定义节点名称 */ | ||||
| @Override | @Override | ||||
| @@ -120,8 +126,8 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon | |||||
| @GetMapping("/send-sms") | @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); | DmVisitRecordsPo po = visitRecordsMapper.selectById(visitRecordId); | ||||
| R<String> r = visitRecordsService.sendSms(po); | R<String> r = visitRecordsService.sendSms(po); | ||||
| if (r.isOk()) { | if (r.isOk()) { | ||||
| @@ -129,8 +135,15 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon | |||||
| } else { | } else { | ||||
| return AjaxResult.error(r.getMsg()); | 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("短信发送成功,请注意查收"); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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(); | |||||
| } | |||||
| } | |||||
| @@ -2,13 +2,22 @@ package com.xueyi.system.staff.service.impl; | |||||
| import cn.hutool.core.date.LocalDateTimeUtil; | import cn.hutool.core.date.LocalDateTimeUtil; | ||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson2.JSONObject; | |||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.toolkit.StringUtils; | 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.core.utils.core.ObjectUtil; | ||||
| import com.xueyi.common.web.annotation.TenantIgnore; | import com.xueyi.common.web.annotation.TenantIgnore; | ||||
| import com.xueyi.common.web.entity.service.impl.BaseServiceImpl; | import com.xueyi.common.web.entity.service.impl.BaseServiceImpl; | ||||
| import com.xueyi.common.web.utils.MyDateUtils; | 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.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.organize.domain.vo.SysDeptExt; | ||||
| import com.xueyi.system.api.pass.domain.po.DmRecognizedRecordsPo; | import com.xueyi.system.api.pass.domain.po.DmRecognizedRecordsPo; | ||||
| import com.xueyi.system.api.staff.domain.dto.DmStaffDto; | 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.api.staff.domain.vo.DmStaffFeature; | ||||
| import com.xueyi.system.common.service.IDmHolidayService; | import com.xueyi.system.common.service.IDmHolidayService; | ||||
| import com.xueyi.system.organize.mapper.SysDeptExtMapper; | 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.po.DmEmpAttendancePo; | ||||
| import com.xueyi.system.staff.domain.query.DmStaffQuery; | import com.xueyi.system.staff.domain.query.DmStaffQuery; | ||||
| import com.xueyi.system.staff.manager.IDmStaffManager; | import com.xueyi.system.staff.manager.IDmStaffManager; | ||||
| import com.xueyi.system.staff.mapper.DmEmpAttendanceMapper; | import com.xueyi.system.staff.mapper.DmEmpAttendanceMapper; | ||||
| import com.xueyi.system.staff.mapper.DmStaffMapper; | import com.xueyi.system.staff.mapper.DmStaffMapper; | ||||
| import com.xueyi.system.staff.service.IDmStaffService; | 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.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| @@ -245,4 +259,102 @@ public class DmStaffServiceImpl extends BaseServiceImpl<DmStaffQuery, DmStaffDto | |||||
| dmEmpAttendanceMapper.insert(ea); | 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); | |||||
| } | |||||
| } | } | ||||
| @@ -1,6 +1,7 @@ | |||||
| package com.xueyi.system.staff.service.impl; | package com.xueyi.system.staff.service.impl; | ||||
| import cn.hutool.core.date.LocalDateTimeUtil; | import cn.hutool.core.date.LocalDateTimeUtil; | ||||
| import cn.hutool.core.util.BooleanUtil; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; | ||||
| @@ -200,6 +201,9 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue | |||||
| send.setPhone(visitorsPo.getPhone()); | send.setPhone(visitorsPo.getPhone()); | ||||
| send.setTemplate(smsProperties.getVisitorTemplate()); | send.setTemplate(smsProperties.getVisitorTemplate()); | ||||
| if (BooleanUtil.isTrue(visitorsPo.getFlexVisit())) { | |||||
| send.setTemplate(smsProperties.getVipVisitorTemplate()); | |||||
| } | |||||
| send.setDataMap(json.toJSONString()); | send.setDataMap(json.toJSONString()); | ||||
| JSONObject result = smsService.sendSms(send); | JSONObject result = smsService.sendSms(send); | ||||
| @@ -217,5 +221,45 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue | |||||
| return R.ok("发送成功"); | 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("发送成功"); | |||||
| } | |||||
| } | } | ||||
| @@ -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.bean.WeappSignUpReq; | ||||
| import com.xueyi.system.wechat.domain.po.WeappUserInfo; | import com.xueyi.system.wechat.domain.po.WeappUserInfo; | ||||
| import com.xueyi.system.wechat.service.WeappService; | 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 com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| @@ -75,11 +75,11 @@ public class WeappController { | |||||
| } | } | ||||
| log.info("微信login返回信息:{}", weChatUserInfo); | 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<>(); | Map<String, Object> map = new HashMap<>(); | ||||
| try { | try { | ||||
| map.put("weappAuth", CryptoUtil.encrypt(weChatUserInfo.toString())); | map.put("weappAuth", CryptoUtil.encrypt(weChatUserInfo.toString())); | ||||
| SysEnterpriseStaff staff = staffR.getData(); | |||||
| SysEnterpriseStaffPo staff = staffR.getData(); | |||||
| log.info("login staff:{}", staff); | log.info("login staff:{}", staff); | ||||
| if (staff != null) { | if (staff != null) { | ||||
| log.info("login phone:{}", staff.getPhone()); | log.info("login phone:{}", staff.getPhone()); | ||||
| @@ -142,10 +142,10 @@ public class WeappController { | |||||
| return AjaxResult.error("手机号无对应员工,请查证后重试!"); | return AjaxResult.error("手机号无对应员工,请查证后重试!"); | ||||
| } else { | } else { | ||||
| Map<String, Object> map = tokenService.createToken(loginInfoResult.getData()); | 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); | log.info("根据手机号查询员工返回:{}", enterpriseStaffR); | ||||
| if (!enterpriseStaffR.isFail() && enterpriseStaffR.getData() != null){ | if (!enterpriseStaffR.isFail() && enterpriseStaffR.getData() != null){ | ||||
| SysEnterpriseStaff enterpriseStaff = enterpriseStaffR.getData(); | |||||
| SysEnterpriseStaffPo enterpriseStaff = enterpriseStaffR.getData(); | |||||
| enterpriseStaff.setOpenid(obj.getOpenid()); | enterpriseStaff.setOpenid(obj.getOpenid()); | ||||
| tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER); | tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER); | ||||
| } | } | ||||
| @@ -172,10 +172,10 @@ public class WeappController { | |||||
| try { | try { | ||||
| String str = CryptoUtil.decrypt(signUpReq.getWeappAuth()); | String str = CryptoUtil.decrypt(signUpReq.getWeappAuth()); | ||||
| WeappSessionResponse obj = JSON.parseObject(str, WeappSessionResponse.class); | 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); | log.info("根据手机号查询员工返回:{}", enterpriseStaffR); | ||||
| if (!enterpriseStaffR.isFail() && enterpriseStaffR.getData() != null){ | if (!enterpriseStaffR.isFail() && enterpriseStaffR.getData() != null){ | ||||
| SysEnterpriseStaff enterpriseStaff = enterpriseStaffR.getData(); | |||||
| SysEnterpriseStaffPo enterpriseStaff = enterpriseStaffR.getData(); | |||||
| enterpriseStaff.setOpenid(null); | enterpriseStaff.setOpenid(null); | ||||
| tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER); | tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER); | ||||
| } | } | ||||
| @@ -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 | |||||
| } | |||||
| @@ -20,11 +20,14 @@ import com.xueyi.common.security.auth.Auth; | |||||
| import com.xueyi.common.web.annotation.TenantIgnore; | import com.xueyi.common.web.annotation.TenantIgnore; | ||||
| import com.xueyi.common.web.entity.controller.BaseController; | import com.xueyi.common.web.entity.controller.BaseController; | ||||
| import com.xueyi.common.web.entity.domain.mapper.DeviceTenantMergeMapper; | 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.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.po.TeTenantPo; | ||||
| import com.xueyi.tenant.api.tenant.domain.query.TeTenantQuery; | import com.xueyi.tenant.api.tenant.domain.query.TeTenantQuery; | ||||
| import com.xueyi.tenant.tenant.domain.model.TeTenantRegister; | 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.mapper.SysEnterpriseStaffMapper; | ||||
| import com.xueyi.tenant.tenant.service.ITeTenantService; | import com.xueyi.tenant.tenant.service.ITeTenantService; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| @@ -67,6 +70,12 @@ public class TeTenantController extends BaseController<TeTenantQuery, TeTenantDt | |||||
| @Autowired | @Autowired | ||||
| private SysEnterpriseStaffMapper staffMapper; | private SysEnterpriseStaffMapper staffMapper; | ||||
| @Autowired | |||||
| private SysStaffManagerImpl staffManager; | |||||
| @Autowired | |||||
| private SysStaffConverter staffConverter; | |||||
| /** | /** | ||||
| * 租户新增 | 内部调用 | * 租户新增 | 内部调用 | ||||
| */ | */ | ||||
| @@ -119,19 +128,19 @@ public class TeTenantController extends BaseController<TeTenantQuery, TeTenantDt | |||||
| @InnerAuth | @InnerAuth | ||||
| @GetMapping("/query-staff-by-phone") | @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); | return R.ok(po); | ||||
| } | } | ||||
| @InnerAuth | @InnerAuth | ||||
| @PostMapping("/save-staff") | @PostMapping("/save-staff") | ||||
| @TenantIgnore(tenantLine = true) | @TenantIgnore(tenantLine = true) | ||||
| R<SysEnterpriseStaff> staff(@RequestBody SysEnterpriseStaff staff) { | |||||
| R<SysEnterpriseStaffPo> staff(@RequestBody SysEnterpriseStaffPo staff) { | |||||
| if (staff.getId() != null) { | if (staff.getId() != null) { | ||||
| SysEnterpriseStaff staffPo = staffMapper.selectById(staff.getId()); | |||||
| SysEnterpriseStaffPo staffPo = staffMapper.selectById(staff.getId()); | |||||
| if (null != staffPo) { | if (null != staffPo) { | ||||
| staffMapper.updateById(staff); | |||||
| staffMapper.updateById(staffManager.merge(staffConverter.mapperDto(staffPo), staffConverter.mapperDto(staff), SysEnterpriseStaffDto.class)); | |||||
| } else { | } else { | ||||
| staffMapper.insert(staff); | staffMapper.insert(staff); | ||||
| } | } | ||||
| @@ -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> { | |||||
| } | |||||
| @@ -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,7 +4,7 @@ import com.xueyi.common.datasource.annotation.Master; | |||||
| import com.xueyi.common.web.annotation.TenantIgnore; | import com.xueyi.common.web.annotation.TenantIgnore; | ||||
| import com.xueyi.common.web.entity.mapper.BaseMapper; | import com.xueyi.common.web.entity.mapper.BaseMapper; | ||||
| import com.xueyi.tenant.api.tenant.domain.dto.SysEnterpriseStaffDto; | 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.po.TeTenantPo; | ||||
| import com.xueyi.tenant.api.tenant.domain.query.SysEnterpriseStaffQuery; | import com.xueyi.tenant.api.tenant.domain.query.SysEnterpriseStaffQuery; | ||||
| import org.apache.ibatis.annotations.Param; | import org.apache.ibatis.annotations.Param; | ||||
| @@ -15,13 +15,13 @@ import org.apache.ibatis.annotations.Param; | |||||
| * @author xueyi | * @author xueyi | ||||
| */ | */ | ||||
| @Master | @Master | ||||
| public interface SysEnterpriseStaffMapper extends BaseMapper<SysEnterpriseStaffQuery, SysEnterpriseStaffDto, SysEnterpriseStaff> { | |||||
| public interface SysEnterpriseStaffMapper extends BaseMapper<SysEnterpriseStaffQuery, SysEnterpriseStaffDto, SysEnterpriseStaffPo> { | |||||
| @TenantIgnore(tenantLine = true) | @TenantIgnore(tenantLine = true) | ||||
| TeTenantPo selectTenantByPhone(@Param("phone") String phone); | TeTenantPo selectTenantByPhone(@Param("phone") String phone); | ||||
| @TenantIgnore(tenantLine = true) | @TenantIgnore(tenantLine = true) | ||||
| SysEnterpriseStaff selectStaffByPhone(@Param("phone") String phone); | |||||
| SysEnterpriseStaffPo selectStaffByPhone(@Param("phone") String phone); | |||||
| @TenantIgnore(tenantLine = true) | @TenantIgnore(tenantLine = true) | ||||
| void updateEntity(SysEnterpriseStaff po); | |||||
| void updateEntity(SysEnterpriseStaffPo po); | |||||
| } | } | ||||
| @@ -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 * 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> | ||||
| <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 * from sys_enterprise_staff where (phone = #{phone} or openid = #{phone}) and del_flag = 0 limit 1 | ||||
| </select> | </select> | ||||