| @@ -1,14 +1,11 @@ | |||
| package com.xueyi.nlt.api.nlt.feign; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.nlt.api.nlt.domain.vo.HotspotVo; | |||
| import com.xueyi.nlt.api.nlt.domain.vo.KnowledgeVo; | |||
| import com.xueyi.nlt.api.nlt.domain.vo.response.DmKnowledgeResponse; | |||
| import com.xueyi.nlt.api.nlt.feign.factory.RemoteQAFallbackFactory; | |||
| import com.xueyi.system.api.sms.domain.vo.SmsReqEntity; | |||
| import com.xueyi.system.api.sms.feign.factory.RemoteSmsFallbackFactory; | |||
| import org.springframework.cloud.openfeign.FeignClient; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| @@ -83,6 +83,15 @@ public class TokenController { | |||
| return AjaxResult.success(tokenService.createToken(userInfo)); | |||
| } | |||
| //不处理验证码 | |||
| @PostMapping("mgr-login") | |||
| public AjaxResult mgrLogin(@RequestBody LoginBody form) { | |||
| // 用户登录 | |||
| LoginUser userInfo = sysLoginService.login(form.getEnterpriseName(), form.getUserName(), form.getPassword()); | |||
| // 获取登录token | |||
| return AjaxResult.success(tokenService.createToken(userInfo)); | |||
| } | |||
| @PostMapping("phoneLogin") | |||
| public AjaxResult loginByPhone(@Valid @RequestBody PhoneLoginBody form) { | |||
| R<SysEnterpriseStaffPo> staffR = tenantService.queryStaff(form.getPhone(), SecurityConstants.INNER); | |||
| @@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import java.util.concurrent.TimeUnit; | |||
| /** | |||
| * @author yk | |||
| * @description | |||
| @@ -51,10 +53,10 @@ public class SmsApiController { | |||
| return R.fail("手机号为空"); | |||
| } else { | |||
| String cachedCode = redisService.getCacheObject("codes:phones:"+smsReqEntity.getPhone()); | |||
| if (StringUtils.isNotEmpty(cachedCode) && redisService.hasKey("codes:"+cachedCode)) { | |||
| if (StringUtils.isNotEmpty(cachedCode)) { | |||
| return R.fail("之前请求的验证码并未失效,禁止重复请求验证码"); | |||
| } else { | |||
| redisService.setCacheObject("codes:phones:"+smsReqEntity.getPhone(), code); | |||
| redisService.setCacheObject("codes:phones:"+smsReqEntity.getPhone(), code,5L, TimeUnit.MINUTES); | |||
| } | |||
| smsReqEntity.setTemplate(smsProperties.getCodeTemplate()); | |||
| @@ -38,6 +38,6 @@ public class SysEnterpriseServiceImpl extends BaseServiceImpl<SysEnterpriseQuery | |||
| @Override | |||
| public Long selectDefaultDeptId(String devId) { | |||
| R<DmDigitalmanExtPo> extPo = digitalmanService.devInfo(devId, SecurityContextHolder.getEnterpriseId(), SecurityContextHolder.getSourceName(), SecurityConstants.INNER); | |||
| return extPo.getData().getDeptId(); | |||
| return extPo.getData() == null ? 0L : extPo.getData().getDeptId(); | |||
| } | |||
| } | |||
| @@ -7,9 +7,11 @@ import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.context.SecurityContextHolder; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.redis.service.RedisService; | |||
| import com.xueyi.common.redis.utils.RedisUtil; | |||
| import com.xueyi.common.security.annotation.InnerAuth; | |||
| import com.xueyi.common.web.annotation.TenantIgnore; | |||
| import com.xueyi.common.web.constant.ResponseCode; | |||
| import com.xueyi.file.api.feign.RemoteFileService; | |||
| import com.xueyi.system.api.model.Source; | |||
| import com.xueyi.system.api.pass.domain.po.DmRecognizedRecordsPo; | |||
| @@ -19,6 +21,7 @@ import com.xueyi.system.pass.mapper.DmRecognizedRecordsMapper; | |||
| import com.xueyi.system.resource.controller.api.MyBaseApiController; | |||
| import com.xueyi.system.staff.service.impl.DmStaffServiceImpl; | |||
| import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
| 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; | |||
| @@ -64,6 +67,35 @@ public class DmStaffApiController extends MyBaseApiController { | |||
| } | |||
| @GetMapping(value = "ableLogin/{phone}") | |||
| @ResponseBody | |||
| public JSONObject ableLogin(@PathVariable("phone") String phone){ | |||
| R<SysEnterpriseStaffPo> staffPoR = tenantService.queryStaff(phone, SecurityConstants.INNER); | |||
| if (staffPoR.isOk() && null != staffPoR.getData()) { | |||
| return outputSuccess().toJSON(); | |||
| } else { | |||
| return output(ResponseCode.DATA_NOT_EXISTS, "该手机号未注册").toJSON(); | |||
| } | |||
| } | |||
| @Autowired | |||
| private RedisService redisService; | |||
| @GetMapping(value = "validCode/{phone}/{code}") | |||
| @ResponseBody | |||
| public JSONObject validLogin(@PathVariable("phone") String phone,@PathVariable("code") String code){ | |||
| String cachedCode = redisService.getCacheObject("codes:phones:"+phone); | |||
| if (cachedCode.equalsIgnoreCase(code)) { | |||
| return outputSuccess().toJSON(); | |||
| } else { | |||
| return output(ResponseCode.CHECK_PARAMS_ERROR, "验证码不存在或不匹配").toJSON(); | |||
| } | |||
| } | |||
| @PostMapping(value = "new-staff") | |||
| @ResponseBody | |||
| public com.alibaba.fastjson2.JSONObject newStaff(@RequestBody DmStaffCommonDto commonDto){ | |||
| @@ -91,7 +123,6 @@ public class DmStaffApiController extends MyBaseApiController { | |||
| R<List<TeTenantDto>> listR = tenantService.tenantList(); | |||
| if (listR.isFail()) { | |||
| System.out.println("租户列表获取失败"); | |||
| return null; | |||
| } | |||
| List<TeTenantDto> res = listR.getData(); | |||
| @@ -122,14 +153,13 @@ public class DmStaffApiController extends MyBaseApiController { | |||
| public R<List<DmRecognizedRecordsPo>> recognizedRecords(){ | |||
| R<List<TeTenantDto>> listR = tenantService.tenantList(); | |||
| if (listR.isFail()) { | |||
| System.out.println("租户列表获取失败"); | |||
| return null; | |||
| } | |||
| List<TeTenantDto> res = listR.getData(); | |||
| TeTenantDto teTenantDto = res.get(0); | |||
| if (teTenantDto != null) { | |||
| Source source = SourceUtil.getSourceCache(teTenantDto.getStrategyId()); | |||
| // return countJson; | |||
| return staffService._recognizedRecords(teTenantDto.getId(), source.getMaster(), SecurityConstants.INNER); | |||
| } | |||
| return null; | |||
| @@ -156,7 +186,7 @@ public class DmStaffApiController extends MyBaseApiController { | |||
| for (int i = 0; i < urlList.size(); i += batchSize) { | |||
| int endIndex = Math.min(i + batchSize, urlList.size()); | |||
| List<String> batch = urlList.subList(i, endIndex); | |||
| if (batch.size() > 0) { | |||
| if (!batch.isEmpty()) { | |||
| remoteFileService.deleteFiles(batch.toArray(new String[batch.size()])); | |||
| } | |||
| } | |||
| @@ -5,12 +5,13 @@ import com.alibaba.fastjson2.JSONObject; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||
| import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.constant.basic.SqlConstants; | |||
| import com.xueyi.common.core.context.SecurityContextHolder; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.security.annotation.InnerAuth; | |||
| import com.xueyi.common.web.constant.ResponseCode; | |||
| import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; | |||
| import com.xueyi.system.api.resource.domain.po.DmResourcesPo; | |||
| import com.xueyi.system.api.staff.domain.dto.DmStaffCommonDto; | |||
| import com.xueyi.system.api.staff.domain.po.DmPersonFeaturePo; | |||
| import com.xueyi.system.api.staff.domain.po.DmStaffPo; | |||
| @@ -23,6 +24,8 @@ import com.xueyi.system.staff.mapper.DmPersonFeatureMapper; | |||
| import com.xueyi.system.staff.mapper.DmStaffMapper; | |||
| import com.xueyi.system.staff.mapper.DmVisitorsMapper; | |||
| import com.xueyi.system.staff.service.impl.DmStaffServiceImpl; | |||
| import com.xueyi.tenant.api.tenant.domain.po.SysEnterpriseStaffPo; | |||
| import com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| @@ -98,6 +101,9 @@ public class DmStaffInnerApiController extends MyBaseApiController { | |||
| @Autowired | |||
| private SysEnterpriseServiceImpl enterpriseService; | |||
| @Autowired | |||
| private RemoteTenantService tenantService; | |||
| @InnerAuth | |||
| @PostMapping(value = "new-staff") | |||
| @ResponseBody | |||
| @@ -165,6 +171,14 @@ public class DmStaffInnerApiController extends MyBaseApiController { | |||
| } | |||
| } | |||
| //以下代码添加主库企业和员工的关系映射表,用于手机号登录以及小程序登录 | |||
| SysEnterpriseStaffPo enterpriseStaff = new SysEnterpriseStaffPo(); | |||
| enterpriseStaff.setPhone(staffPo.getPhone()); | |||
| enterpriseStaff.setId(id); | |||
| Long tenantId = SecurityContextHolder.getEnterpriseId(); | |||
| enterpriseStaff.setTId(tenantId); | |||
| tenantService.saveEnterpriseStaff(enterpriseStaff, SecurityConstants.INNER); | |||
| } | |||
| return outputSuccess().toJSON(); | |||
| @@ -145,6 +145,7 @@ public class DmStaffServiceImpl extends BaseServiceImpl<DmStaffQuery, DmStaffDto | |||
| if (null != staff.getResourceId()) { | |||
| resourcesMapper.deleteById(staff.getResourceId()); | |||
| } | |||
| tenantService.delEnterpriseStaff(new SysEnterpriseStaffPo(staff.getId()), SecurityConstants.INNER); | |||
| staffMapper.deleteById(staff.getId()); | |||
| } | |||
| @@ -189,7 +189,7 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue | |||
| } | |||
| json.put("code", code); | |||
| json.put("nickName", visitorsPo.getName()); | |||
| json.put("nickName", StringUtils.isNotEmpty(visitorsPo.getNickname()) ? visitorsPo.getNickname() : visitorsPo.getName()); | |||
| json.put("robotName", dmDigitalmanPo.getName()); | |||
| json.put("dateTime", LocalDateTimeUtil.format(po.getVisitDate(), MyDateUtils.DEFAULT_DATE_PATTERN)); | |||
| json.put("companyName", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyName():""); | |||
| @@ -228,14 +228,16 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue | |||
| SmsReqEntity send = new SmsReqEntity(); | |||
| try { | |||
| if (null != visitorsPo && StringUtils.isNotEmpty(visitorsPo.getPhone()) && BooleanUtil.isTrue(visitorsPo.getFlexVisit())) { | |||
| DmVisitorSmsConfigPo dmVisitorSmsConfigPo = visitorSmsConfigMapper.selectOne(Wrappers.<DmVisitorSmsConfigPo>query().lambda().last(SqlConstants.LIMIT_ONE)); | |||
| DmDigitalmanPo dmDigitalmanPo = digitalmanMapper.selectByCode(digitalmanExtMapper.selectOne(Wrappers.<DmDigitalmanExtPo>query().lambda().last(SqlConstants.LIMIT_ONE)).getManCode()); | |||
| JSONObject json = new JSONObject(); | |||
| json.put("nickName", visitorsPo.getName()); | |||
| json.put("nickName", StringUtils.isNotEmpty(visitorsPo.getNickname()) ? visitorsPo.getNickname() : visitorsPo.getName()); | |||
| json.put("robotName", dmDigitalmanPo.getName()); | |||
| json.put("companyName", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyName():""); | |||
| //给访客发送短信 | |||
| send.setPhone(visitorsPo.getPhone()); | |||
| @@ -27,6 +27,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| <select id="selectStaffFeaturesList" parameterType="DmStaffFeature" resultMap="DmStaffFeatureResult"> | |||
| select s.id, s.user_name as name, s.update_time,s.user_type, s.nick_name, s.del_flag, r.feature from dm_staff s left join dm_resources as r on s.resource_id = r.id | |||
| where (UNIX_TIMESTAMP(s.update_time) * 1000 > #{timestamp} or UNIX_TIMESTAMP(s.create_time) * 1000 > #{timestamp}) and r.feature is not null | |||
| union all | |||
| select s.id, s.user_name as name, s.update_time,s.user_type, s.nick_name, s.del_flag, r.feature from dm_staff s left join dm_person_feature as r on s.id = r.id | |||
| where (UNIX_TIMESTAMP(s.update_time) * 1000 > #{timestamp} or UNIX_TIMESTAMP(s.create_time) * 1000 > #{timestamp}) and r.feature is not null | |||
| </select> | |||
| <select id="selectVisitorFeaturesList" parameterType="DmStaffFeature" resultMap="DmStaffFeatureResult"> | |||