@@ -37,9 +37,7 @@ public class DmVisitCommonDto { | |||
private String visitorBase64Img; | |||
private Long visitorId; | |||
public String toSmsJson(String code, String name, String companyName, String companyAddress, String parkInfo){ | |||
JSONObject json = new JSONObject(); | |||
@@ -89,4 +89,26 @@ public class DmResourcesServiceImpl extends BaseServiceImpl<DmResourcesQuery, Dm | |||
} | |||
return R.ok(dmResourcesDto); | |||
} | |||
public R<DmResourcesDto> saveVisitorBase64Image(String base64Image, String visitorName){ | |||
R<SysFile> fileResult = fileService.uploadFace(ImageUtil.convertToMultipartFile(base64Image)); | |||
if (ObjectUtil.isNull(fileResult) || ObjectUtil.isNull(fileResult.getData())) | |||
return R.fail("文件服务异常"); | |||
String url = fileResult.getData().getUrl(); | |||
DmResourcesDto dmResourcesDto = new DmResourcesDto(); | |||
dmResourcesDto.setType(DmResourcesDto.TYPE_PIC); | |||
dmResourcesDto.setUrl(url); | |||
dmResourcesDto.setName("visitor-"+visitorName); | |||
com.alibaba.fastjson.JSONObject json = faceService.getFaceExtraction("", "", base64Image); | |||
if (0!=json.getInteger("status")) { | |||
return R.fail(json.getString("errMsg")); | |||
} else { | |||
JSONArray obj = json.getJSONArray("result").getJSONObject(0).getJSONArray("faces").getJSONObject(0).getJSONArray("feature"); | |||
dmResourcesDto.setFeature(obj.toJSONString()); | |||
} | |||
addOne(dmResourcesDto); | |||
return R.ok(dmResourcesDto); | |||
} | |||
} |
@@ -4,11 +4,14 @@ package com.xueyi.system.resource.service.impl; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONArray; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.xueyi.file.api.feign.RemoteFileService; | |||
import com.xueyi.system.utils.common.ImageUtil; | |||
import kong.unirest.HttpResponse; | |||
import kong.unirest.Unirest; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.apache.commons.lang3.ObjectUtils; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.http.HttpEntity; | |||
@@ -27,6 +30,7 @@ import java.util.Map; | |||
@Slf4j | |||
@Component | |||
public class FaceServiceImpl { | |||
private static Logger logger = LoggerFactory.getLogger(FaceServiceImpl.class); | |||
@Value("${face.server}") | |||
private String faceServer; | |||
@@ -51,6 +55,9 @@ public class FaceServiceImpl { | |||
@Autowired | |||
private RestTemplate restTemplate; | |||
@Autowired | |||
private RemoteFileService fileService; | |||
public static String execCurl(String[] cmds) { | |||
ProcessBuilder process = new ProcessBuilder(cmds); | |||
@@ -67,7 +74,7 @@ public class FaceServiceImpl { | |||
return builder.toString(); | |||
} catch (IOException e) { | |||
System.out.print("error"); | |||
logger.info("error"); | |||
e.printStackTrace(); | |||
} | |||
return null; | |||
@@ -122,7 +129,7 @@ public class FaceServiceImpl { | |||
String path = faceServer; | |||
String result = restTemplate.postForObject(path + extractionPath, entity, String.class, "face-detection"); | |||
System.err.println(path + extractionPath); | |||
logger.info(path + extractionPath); | |||
JSONObject resultJson = JSON.parseObject(result); | |||
return resultJson; | |||
@@ -136,7 +143,7 @@ public class FaceServiceImpl { | |||
/********restTemplate 请求方式*************/ | |||
try { | |||
imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||
imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||
HttpHeaders headers = new HttpHeaders(); | |||
headers.setContentType(MediaType.APPLICATION_JSON); | |||
headers.set("Authorization", "Bearer "+token); | |||
@@ -150,7 +157,7 @@ public class FaceServiceImpl { | |||
map.add("detect", true); | |||
map.add("images", jsonArray); | |||
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map.toSingleValueMap(), headers); | |||
System.err.println(faceServer + qualityPath); | |||
logger.info(faceServer + qualityPath); | |||
String result = restTemplate.postForObject(faceServer + qualityPath, entity, String.class, "face-detection"); | |||
@@ -158,7 +165,6 @@ public class FaceServiceImpl { | |||
return resultJson.getJSONArray("result").getJSONObject(0); | |||
} catch (Exception e) { | |||
System.err.println("8888err"); | |||
e.printStackTrace(); | |||
throw e; | |||
} | |||
@@ -172,7 +178,7 @@ public class FaceServiceImpl { | |||
JSONObject json = new JSONObject(); | |||
try { | |||
imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||
imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||
JSONObject res = this.getFaceExtraction(token, imageId, imgBase64); | |||
JSONObject obj = res.getJSONArray("faces").getJSONObject(0); | |||
@@ -204,7 +210,7 @@ public class FaceServiceImpl { | |||
JSONObject json = new JSONObject(); | |||
try { | |||
imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||
imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||
JSONObject res = this.getFaceCheck(token, imageId, imgBase64); | |||
Boolean passed = res.getBoolean("passed"); | |||
@@ -289,5 +295,4 @@ public class FaceServiceImpl { | |||
json.put("feature",array.toJSONString()); | |||
return json; | |||
} | |||
} |
@@ -1,41 +1,19 @@ | |||
package com.xueyi.system.staff.controller; | |||
import cn.hutool.core.date.LocalDateTimeUtil; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.xueyi.common.core.constant.basic.SqlConstants; | |||
import com.xueyi.common.core.web.result.AjaxResult; | |||
import com.xueyi.common.core.web.result.R; | |||
import com.xueyi.common.core.web.validate.V_A; | |||
import com.xueyi.common.core.web.validate.V_E; | |||
import com.xueyi.common.log.annotation.Log; | |||
import com.xueyi.common.log.enums.BusinessType; | |||
import com.xueyi.common.security.annotation.RequiresPermissions; | |||
import com.xueyi.common.sms.configure.SmsProperties; | |||
import com.xueyi.common.web.entity.controller.BaseController; | |||
import com.xueyi.common.web.utils.MyDateUtils; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanExtPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmVisitRecordsPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; | |||
import com.xueyi.system.api.sms.domain.vo.SmsReqEntity; | |||
import com.xueyi.system.api.sms.feign.RemoteSmsService; | |||
import com.xueyi.system.api.staff.domain.po.DmStaffPo; | |||
import com.xueyi.system.digitalmans.mapper.DmDigitalmanExtMapper; | |||
import com.xueyi.system.digitalmans.mapper.DmDigitalmanMapper; | |||
import com.xueyi.system.staff.domain.dto.DmVisitorOperateLogDto; | |||
import com.xueyi.system.staff.domain.dto.DmVisitorSmsConfigDto; | |||
import com.xueyi.system.staff.domain.po.DmVisitorOperateLogPo; | |||
import com.xueyi.system.staff.domain.po.DmVisitorSmsConfigPo; | |||
import com.xueyi.system.staff.domain.query.DmVisitorSmsConfigQuery; | |||
import com.xueyi.system.staff.mapper.DmStaffMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitRecordsMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitorSmsConfigMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitorsMapper; | |||
import com.xueyi.system.staff.service.IDmVisitorSmsConfigService; | |||
import com.xueyi.system.staff.service.impl.DmVisitRecordsServiceImpl; | |||
import com.xueyi.system.staff.service.impl.DmVisitorOperateLogServiceImpl; | |||
import com.xueyi.system.staff.service.impl.DmVisitorSmsConfigServiceImpl; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.validation.annotation.Validated; | |||
@@ -64,34 +42,13 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon | |||
@Autowired | |||
private DmVisitorSmsConfigServiceImpl visitorSmsConfigService; | |||
@Autowired | |||
private RemoteSmsService smsService; | |||
@Autowired | |||
private DmVisitRecordsServiceImpl visitRecordsService; | |||
@Autowired | |||
private DmVisitRecordsMapper visitRecordsMapper; | |||
@Autowired | |||
private DmVisitorsMapper visitorsMapper; | |||
@Autowired | |||
private SmsProperties smsProperties; | |||
@Autowired | |||
private DmVisitorSmsConfigMapper visitorSmsConfigMapper; | |||
@Autowired | |||
private DmDigitalmanExtMapper digitalmanExtMapper; | |||
@Autowired | |||
private DmDigitalmanMapper digitalmanMapper; | |||
@Autowired | |||
private DmStaffMapper staffMapper; | |||
@Autowired | |||
private DmVisitorOperateLogServiceImpl visitorOperateLogService; | |||
/** 定义节点名称 */ | |||
@Override | |||
@@ -166,50 +123,11 @@ public class DmVisitorSmsConfigController extends BaseController<DmVisitorSmsCon | |||
public AjaxResult sendVisitorSms(@RequestParam("visitRecordId") Long visitRecordId, @RequestParam(value = "staffId", required = false) Long staffId) { | |||
if (null != visitRecordId) { | |||
DmVisitRecordsPo po = visitRecordsMapper.selectById(visitRecordId); | |||
if (null != po && null != po.getVisitorId()) { | |||
DmVisitorsPo visitorsPo = visitorsMapper.selectById(po.getVisitorId()); | |||
SmsReqEntity send = new SmsReqEntity(); | |||
try { | |||
if (null != visitorsPo && StringUtils.isNotEmpty(visitorsPo.getPhone())) { | |||
DmVisitorSmsConfigPo dmVisitorSmsConfigPo = visitorSmsConfigMapper.selectOne(Wrappers.<DmVisitorSmsConfigPo>query().lambda().last(SqlConstants.LIMIT_ONE)); | |||
DmDigitalmanPo dmDigitalmanPo = digitalmanMapper.selectByCode(digitalmanExtMapper.selectOne(Wrappers.<DmDigitalmanExtPo>query().lambda().last(SqlConstants.LIMIT_ONE)).getManCode()); | |||
DmStaffPo staffPo = staffMapper.selectById(po.getUserId()); | |||
JSONObject json = new JSONObject(); | |||
String code = po.getVisitorCode(); | |||
if (code == null) { | |||
code = visitRecordsService.genVisitorCode(); | |||
po.setVisitorCode(code); | |||
visitRecordsMapper.updateById(po); | |||
} | |||
json.put("code", code); | |||
json.put("nickName", visitorsPo.getName()); | |||
json.put("robotName", dmDigitalmanPo.getName()); | |||
json.put("dateTime", LocalDateTimeUtil.format(po.getVisitDate(), MyDateUtils.DEFAULT_DATE_PATTERN)); | |||
json.put("companyName", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyName():""); | |||
json.put("companyAddr", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyAddress():""); | |||
json.put("receiverName", staffPo!=null?staffPo.getUserName():""); | |||
json.put("receiverPhone", staffPo!=null?staffPo.getPhone():""); | |||
json.put("parkInfo", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getParkPrompt():""); | |||
//给访客发送短信 | |||
send.setPhone(visitorsPo.getPhone()); | |||
send.setTemplate(smsProperties.getVisitorTemplate()); | |||
send.setDataMap(json.toJSONString()); | |||
JSONObject result = smsService.sendSms(send); | |||
DmVisitorOperateLogDto visitorOperateLogPo = visitorOperateLogService.initData(po.getVisitorId(), staffId, DmVisitorOperateLogDto.BUSINESS_TYPE_OTHER, "sendSms", JSON.toJSONString(send), result.toJSONString()); | |||
visitorOperateLogService.insert(visitorOperateLogPo); | |||
} | |||
} catch (Exception e) { | |||
return AjaxResult.error("服务器错误,无法发送短信"); | |||
// e.printStackTrace(); | |||
} | |||
R<String> r = visitRecordsService.sendSms(po); | |||
if (r.isOk()) { | |||
return AjaxResult.success("短信发送成功,请注意查收"); | |||
} else { | |||
return AjaxResult.error("未找到对应邀约记录,无法发送短信"); | |||
return AjaxResult.error(r.getMsg()); | |||
} | |||
} | |||
return AjaxResult.success("短信发送成功,请注意查收"); | |||
@@ -7,7 +7,6 @@ import com.xueyi.common.core.constant.basic.SqlConstants; | |||
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.file.api.feign.RemoteFileService; | |||
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; | |||
import com.xueyi.system.api.staff.domain.dto.DmStaffCommonDto; | |||
@@ -15,11 +14,9 @@ import com.xueyi.system.api.staff.domain.po.DmStaffPo; | |||
import com.xueyi.system.resource.controller.api.MyBaseApiController; | |||
import com.xueyi.system.resource.domain.dto.DmResourcesDto; | |||
import com.xueyi.system.resource.service.impl.DmResourcesServiceImpl; | |||
import com.xueyi.system.resource.service.impl.FaceServiceImpl; | |||
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.system.utils.common.ImageUtil; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.GetMapping; | |||
import org.springframework.web.bind.annotation.PathVariable; | |||
@@ -42,24 +39,12 @@ public class DmStaffInnerApiController extends MyBaseApiController { | |||
@Autowired | |||
private DmStaffMapper dmStaffMapper; | |||
@Autowired | |||
private RemoteFileService fileService; | |||
@Autowired | |||
private FaceServiceImpl faceService; | |||
@Autowired | |||
private ImageUtil imageUtil; | |||
@Autowired | |||
private DmResourcesServiceImpl iDmResourcesService; | |||
@Autowired | |||
private DmVisitorsMapper dmVisitorsMapper; | |||
@Autowired | |||
private DmStaffMapper staffMapper; | |||
@Autowired | |||
private DmStaffServiceImpl dmStaffService; | |||
@@ -6,7 +6,6 @@ import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
import com.xueyi.system.api.staff.domain.dto.DmVisitCommonDto; | |||
import com.xueyi.system.api.staff.feign.RemoteVisitorService; | |||
import com.xueyi.system.resource.controller.api.MyBaseApiController; | |||
import com.xueyi.system.staff.domain.query.DmVisitorsQuery; | |||
import com.xueyi.system.staff.mapper.DmStaffMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitRecordsMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitorsMapper; | |||
@@ -1,11 +1,9 @@ | |||
package com.xueyi.system.staff.controller.api; | |||
import cn.hutool.core.date.LocalDateTimeUtil; | |||
import cn.hutool.core.util.ObjectUtil; | |||
import com.alibaba.fastjson.JSONArray; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; | |||
import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.xueyi.common.cache.utils.DictUtil; | |||
@@ -16,12 +14,9 @@ import com.xueyi.common.security.annotation.InnerAuth; | |||
import com.xueyi.common.sms.configure.SmsProperties; | |||
import com.xueyi.common.web.constant.ResponseCode; | |||
import com.xueyi.common.web.utils.MyDateUtils; | |||
import com.xueyi.file.api.domain.SysFile; | |||
import com.xueyi.file.api.feign.RemoteFileService; | |||
import com.xueyi.system.api.dict.domain.dto.SysDictDataDto; | |||
import com.xueyi.system.api.dict.domain.po.SysDictDataPo; | |||
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitRecordsDto; | |||
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanExtPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmVisitRecordsPo; | |||
@@ -32,22 +27,20 @@ import com.xueyi.system.api.staff.domain.dto.DmVisitCommonDto; | |||
import com.xueyi.system.api.staff.domain.po.DmStaffPo; | |||
import com.xueyi.system.digitalmans.mapper.DmDigitalmanExtMapper; | |||
import com.xueyi.system.digitalmans.mapper.DmDigitalmanMapper; | |||
import com.xueyi.system.meeting.constant.VisitRecordStatus; | |||
import com.xueyi.system.receiver.domain.po.DmTenantReceiverPo; | |||
import com.xueyi.system.receiver.mapper.DmTenantReceiverMapper; | |||
import com.xueyi.system.resource.controller.api.MyBaseApiController; | |||
import com.xueyi.system.resource.domain.dto.DmResourcesDto; | |||
import com.xueyi.system.resource.service.impl.DmResourcesServiceImpl; | |||
import com.xueyi.system.resource.service.impl.FaceServiceImpl; | |||
import com.xueyi.system.staff.domain.dto.DmVisitorOperateLogDto; | |||
import com.xueyi.system.staff.domain.model.DmVisitRecordsConverter; | |||
import com.xueyi.system.staff.domain.model.DmVisitorSmsConfigConverter; | |||
import com.xueyi.system.staff.domain.po.DmVisitorSmsConfigPo; | |||
import com.xueyi.system.staff.mapper.DmStaffMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitRecordsMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitorSmsConfigMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitorsMapper; | |||
import com.xueyi.system.staff.service.impl.DmVisitRecordsServiceImpl; | |||
import com.xueyi.system.utils.common.ImageUtil; | |||
import com.xueyi.system.staff.service.impl.DmVisitorOperateLogServiceImpl; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.data.redis.core.StringRedisTemplate; | |||
import org.springframework.web.bind.annotation.DeleteMapping; | |||
@@ -61,7 +54,6 @@ import org.springframework.web.bind.annotation.RestController; | |||
import java.util.ArrayList; | |||
import java.util.Date; | |||
import java.util.List; | |||
import java.util.stream.Collectors; | |||
/** | |||
* 访客管理 API业务处理 | |||
@@ -91,10 +83,6 @@ public class DmVisitorInnerApiController extends MyBaseApiController { | |||
@Autowired | |||
private DmVisitRecordsConverter recordsConverter; | |||
@Autowired | |||
private DmVisitorSmsConfigConverter visitorSmsConfigConverter; | |||
@Autowired | |||
private DmVisitorSmsConfigMapper visitorSmsConfigMapper; | |||
@@ -104,20 +92,14 @@ public class DmVisitorInnerApiController extends MyBaseApiController { | |||
@Autowired | |||
DmTenantReceiverMapper receiverMapper; | |||
@Autowired | |||
private RemoteFileService fileService; | |||
@Autowired | |||
private FaceServiceImpl faceService; | |||
@Autowired | |||
private DmResourcesServiceImpl iDmResourcesService; | |||
@Autowired | |||
private ImageUtil imageUtil; | |||
private StringRedisTemplate redisTemplate; | |||
@Autowired | |||
private StringRedisTemplate redisTemplate; | |||
private DmVisitorOperateLogServiceImpl visitorOperateLogService; | |||
@InnerAuth | |||
@PostMapping(value = "confirm-visitor") | |||
@@ -136,7 +118,6 @@ public class DmVisitorInnerApiController extends MyBaseApiController { | |||
json.put("visitorName", visitorsPo.getName()); | |||
} | |||
// DmStaffPo e = dmStaffMapper.selectById(v.getUserId()); | |||
if (v.getReceiverPhone() != null){ | |||
json.put("phone", v.getReceiverPhone()); | |||
json.put("visitorId", v.getVisitorId()); | |||
@@ -163,106 +144,61 @@ public class DmVisitorInnerApiController extends MyBaseApiController { | |||
@InnerAuth | |||
@PostMapping(value = "new-visitor") | |||
public com.alibaba.fastjson2.JSONObject newVisit(@RequestBody DmVisitCommonDto commonDto){ | |||
DmVisitRecordsPo visitRecords = visitRecordsService.initVisitRecord(commonDto); | |||
if (visitRecords == null) { | |||
return output(ResponseCode.DATA_NOT_EXISTS, "员工").toJSON(); | |||
} | |||
DmVisitorsPo v = null; | |||
if (StringUtils.isNotEmpty(commonDto.getVisitorTel())) { | |||
v = dmVisitorsMapper.selectOne( | |||
Wrappers.<DmVisitorsPo>query().lambda() | |||
.eq(DmVisitorsPo::getPhone, commonDto.getVisitorTel()).last(SqlConstants.LIMIT_ONE)); | |||
if (commonDto.getVisitorId() == null) {//新的访客 | |||
if (StringUtils.isNotEmpty(commonDto.getVisitorTel())) { | |||
v = dmVisitorsMapper.selectOne( | |||
Wrappers.<DmVisitorsPo>query().lambda() | |||
.eq(DmVisitorsPo::getPhone, commonDto.getVisitorTel()).last(SqlConstants.LIMIT_ONE)); | |||
} | |||
} else {//旧的访客 | |||
v = dmVisitorsMapper.selectById(commonDto.getVisitorId()); | |||
} | |||
if (v == null) { | |||
v = new DmVisitorsPo(); | |||
v.setName(commonDto.getVisitorName()); | |||
v.setNickname(commonDto.getVisitorNickName()); | |||
v.setVisitorCompany(commonDto.getVisitCompany()); | |||
v.setPhone(commonDto.getVisitorTel()); | |||
v.setType(DmVisitorsDto.TYPE_NORMAL_VISITOR); | |||
List<DmVisitorOperateLogDto> operateLogs = new ArrayList<>(); | |||
if (v == null) {//后台无访客数据,新建访客 | |||
v = visitRecordsService.initVisitor(commonDto); | |||
//兼容熟人介绍生人,传递访客照片 | |||
if (StringUtils.isNotEmpty(commonDto.getVisitorBase64Img())) { | |||
String imgBase64 = commonDto.getVisitorBase64Img(); | |||
R<SysFile> fileResult = fileService.uploadFace(imageUtil.convertToMultipartFile(imgBase64)); | |||
if (ObjectUtil.isNull(fileResult) || ObjectUtil.isNull(fileResult.getData())) | |||
return output(ResponseCode.FILE_SERVICE_ERROR).toJSON(); | |||
String url = fileResult.getData().getUrl(); | |||
DmResourcesDto dmResourcesDto = new DmResourcesDto(); | |||
dmResourcesDto.setType(DmResourcesDto.TYPE_PIC); | |||
dmResourcesDto.setUrl(url); | |||
dmResourcesDto.setName("stranger"); | |||
com.alibaba.fastjson.JSONObject json = faceService.getFaceExtraction("", "", imgBase64); | |||
if (0!=json.getInteger("status")) { | |||
return output(-1, json.getString("errMsg")).toJSON(); | |||
} else { | |||
JSONArray obj = json.getJSONArray("result").getJSONObject(0).getJSONArray("faces").getJSONObject(0).getJSONArray("feature"); | |||
dmResourcesDto.setFeature(obj.toJSONString()); | |||
R<DmResourcesDto> resourcesDtoR = iDmResourcesService.saveVisitorBase64Image(imgBase64, commonDto.getVisitorName()); | |||
if (resourcesDtoR.isOk()){ | |||
DmResourcesDto dmResourcesDto = resourcesDtoR.getData(); | |||
v.setAvatar(dmResourcesDto.getUrl()); | |||
v.setResourceId(dmResourcesDto.getId()); | |||
} | |||
iDmResourcesService.addOne(dmResourcesDto); | |||
v.setAvatar(dmResourcesDto.getUrl()); | |||
v.setResourceId(dmResourcesDto.getId()); | |||
} | |||
dmVisitorsMapper.addOne(v); | |||
} else { | |||
Long res = dmVisitorsMapper.addOne(v); | |||
DmVisitorOperateLogDto visitorOperateLogPo = visitorOperateLogService.initData(v.getId(), commonDto.getEmpId(), DmVisitorOperateLogDto.BUSINESS_TYPE_CREATE, "createVisitor", JSON.toJSONString(commonDto), JSON.toJSONString(res)); | |||
operateLogs.add(visitorOperateLogPo); | |||
} else {//后台有访客数据,更新访客信息 | |||
v.setName(commonDto.getVisitorName()); | |||
v.setNickname(commonDto.getVisitorNickName()); | |||
v.setPhone(commonDto.getVisitorTel()); | |||
v.setVisitorCompany(commonDto.getVisitCompany()); | |||
dmVisitorsMapper.updateById(v); | |||
Integer res = dmVisitorsMapper.updateById(v); | |||
DmVisitorOperateLogDto visitorOperateLogPo = visitorOperateLogService.initData(v.getId(), commonDto.getEmpId(), DmVisitorOperateLogDto.BUSINESS_TYPE_UPDATE, "updateVisitor", JSON.toJSONString(commonDto), JSON.toJSONString(res)); | |||
operateLogs.add(visitorOperateLogPo); | |||
} | |||
DmVisitRecordsPo visitRecords = new DmVisitRecordsPo(); | |||
try { | |||
DmStaffPo emp = dmStaffMapper.selectOne( | |||
Wrappers.<DmStaffPo>query().lambda() | |||
.eq(DmStaffPo::getId, commonDto.getEmpId()).last(SqlConstants.LIMIT_ONE)); | |||
if (ObjectUtils.isNotEmpty(emp)) { | |||
visitRecords.setDeptId(emp.getDeptId()); | |||
visitRecords.setVisitorId(v.getId()); | |||
if (StringUtils.isNotEmpty(commonDto.getVisitDate())) { | |||
visitRecords.setVisitDate(LocalDateTimeUtil.of(MyDateUtils.parseStrToDate(commonDto.getVisitDate(), MyDateUtils.DEFAULT_DATE_PATTERN)).toLocalDate()); | |||
} | |||
visitRecords.setUserId(commonDto.getEmpId()); | |||
visitRecords.setRecordStatus(VisitRecordStatus.getRecordStatusStart()); | |||
String code = visitRecordsService.genVisitorCode(); | |||
visitRecords.setVisitorCode(code); | |||
visitRecords.setReceiverName(commonDto.getEmpName()); | |||
visitRecords.setReceiverPhone(commonDto.getEmpTel()); | |||
dmVisitRecordsMapper.insert(visitRecords); | |||
redisTemplate.opsForValue().increment("dashboard:create_visitor_info", 1); | |||
JSONObject json = new JSONObject(); | |||
if (null != commonDto.getVisitorTel()){ | |||
DmVisitorSmsConfigPo dmVisitorSmsConfigPo = visitorSmsConfigMapper.selectOne(Wrappers.<DmVisitorSmsConfigPo>query().lambda().last(SqlConstants.LIMIT_ONE)); | |||
DmDigitalmanPo dmDigitalmanPo = digitalmanMapper.selectByCode(digitalmanExtMapper.selectOne(Wrappers.<DmDigitalmanExtPo>query().lambda().eq(DmDigitalmanExtPo::getDeviceId, commonDto.getDevId()).last(SqlConstants.LIMIT_ONE)).getManCode()); | |||
json.put("code", code); | |||
json.put("nickName", commonDto.getVisitorName()); | |||
json.put("robotName", dmDigitalmanPo.getName()); | |||
json.put("dateTime", commonDto.getVisitDate()); | |||
json.put("companyName", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyName():""); | |||
json.put("companyAddr", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyAddress():""); | |||
json.put("receiverName", commonDto.getEmpName()); | |||
json.put("receiverPhone", commonDto.getEmpTel()); | |||
json.put("parkInfo", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getParkPrompt():""); | |||
//给访客发送短信 | |||
SmsReqEntity send = new SmsReqEntity(); | |||
send.setPhone(commonDto.getVisitorTel()); | |||
send.setTemplate(smsProperties.getVisitorTemplate()); | |||
send.setDataMap(json.toJSONString()); | |||
remoteSmsService.sendSms(send); | |||
visitRecords.setVisitorId(v.getId()); | |||
} | |||
} else { | |||
System.err.println("emp not exist"); | |||
return output(ResponseCode.DATA_NOT_EXISTS, "员工").toJSON(); | |||
} | |||
} catch (Exception ee) { | |||
ee.printStackTrace(); | |||
Integer res = dmVisitRecordsMapper.insert(visitRecords); | |||
DmVisitorOperateLogDto visitorOperateLogPo = visitorOperateLogService.initData(v.getId(), commonDto.getEmpId(), DmVisitorOperateLogDto.BUSINESS_TYPE_CREATE, "createVisitRecord", JSON.toJSONString(commonDto), JSON.toJSONString(res)); | |||
operateLogs.add(visitorOperateLogPo); | |||
if (!operateLogs.isEmpty()) { | |||
visitorOperateLogService.insertBatch(operateLogs); | |||
} | |||
redisTemplate.opsForValue().increment("dashboard:create_visitor_info", 1); | |||
if (null != commonDto.getVisitorTel()){//有访客电话,发送短信 | |||
R<String> rStr = visitRecordsService.sendSms(visitRecords); | |||
if (rStr.isFail()) { | |||
return output(-1, rStr.getMsg()).toJSON(); | |||
} | |||
} | |||
return outputSuccess().toJSON(); | |||
} | |||
@@ -304,11 +240,6 @@ public class DmVisitorInnerApiController extends MyBaseApiController { | |||
JSONObject json = new JSONObject(); | |||
/*json.put("empId", empId); | |||
DmStaffPo e = dmStaffMapper.selectById(v.getUserId()); | |||
json.put("phone", e.getPhone()); | |||
json.put("visitorName", visitorName); | |||
json.put("visitorId", v.getVisitorId());*/ | |||
List<DmVisitRecordsDto> dtos = new ArrayList<>(); | |||
v.forEach(item->{ | |||
@@ -382,13 +313,13 @@ public class DmVisitorInnerApiController extends MyBaseApiController { | |||
@PostMapping(value = "send-sms") | |||
public com.alibaba.fastjson2.JSONObject sendSms(@RequestParam(value = "type") Integer type){ | |||
List<SysDictDataDto> dictDataDtos = DictUtil.getDictCache("dm_allpeople_type"); | |||
List<String> vals = dictDataDtos.stream().map(SysDictDataPo::getValue).collect(Collectors.toList()); | |||
List<String> vals = dictDataDtos.stream().map(SysDictDataPo::getValue).toList(); | |||
if (!vals.contains(type.toString())) { | |||
return AjaxResult.error("传入的参数可能有误").toJson(); | |||
} | |||
List<Integer> ll = new ArrayList<Integer>(); | |||
List<Integer> ll = new ArrayList<>(); | |||
ll.add(type); | |||
ll.add(DmTenantReceiverPo.ALL_TYPE); | |||
List<DmTenantReceiverPo> list = receiverMapper.selectList(Wrappers.<DmTenantReceiverPo>query().lambda().in(DmTenantReceiverPo::getPersonType, ll.toArray())).stream().toList(); | |||
@@ -2,6 +2,8 @@ package com.xueyi.system.staff.graphql; | |||
import com.alibaba.excel.util.BooleanUtils; | |||
import com.alibaba.fastjson.JSON; | |||
import com.xueyi.common.core.utils.core.IdUtil; | |||
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; | |||
import com.xueyi.system.api.resource.domain.po.DmResourcesPo; | |||
import com.xueyi.system.resource.mapper.DmResourcesMapper; | |||
@@ -28,16 +30,13 @@ class VisitorGraphQLMutationResolver implements GraphQLMutationResolver { | |||
@Autowired | |||
private DmVisitorsMapper mapper; | |||
@Autowired | |||
private DmVisitorsConverter converter; | |||
@Autowired | |||
private DmResourcesMapper resourcesMapper; | |||
@Autowired | |||
private DmVisitorOperateLogServiceImpl visitorLogsService; | |||
private DmVisitorsPo initPo(DmVisitorsPo po){ | |||
private DmVisitorsDto initPo(DmVisitorsDto po){ | |||
if (BooleanUtils.isTrue(po.getIsVip())) { | |||
po.setType(9L); | |||
} else { | |||
@@ -52,24 +51,25 @@ class VisitorGraphQLMutationResolver implements GraphQLMutationResolver { | |||
return po; | |||
} | |||
public boolean updateVisitor(DmVisitorsPo po, Long staffId){ | |||
public DmVisitorsDto updateVisitor(DmVisitorsDto po, Long staffId){ | |||
Map<String, Object> map = new HashMap<>(); | |||
map.put("input", po); | |||
map.put("staffId", staffId); | |||
Boolean result = mapper.updateOne(initPo(po)) > 0; | |||
DmVisitorOperateLogDto operateLogPo = visitorLogsService.initData(po.getId(),staffId, DmVisitorOperateLogDto.BUSINESS_TYPE_UPDATE, "updateVisitor",JSON.toJSONString(map),JSON.toJSONString(result)); | |||
visitorLogsService.insert(operateLogPo); | |||
return result; | |||
return result ? po : null; | |||
} | |||
public boolean createVisitor(DmVisitorsPo po, Long staffId){ | |||
public DmVisitorsDto createVisitor(DmVisitorsDto po, Long staffId){ | |||
Map<String, Object> map = new HashMap<>(); | |||
map.put("input", po); | |||
map.put("staffId", staffId); | |||
po.setId(IdUtil.getSnowflakeNextId()); | |||
Boolean result = mapper.insert(initPo(po)) > 0; | |||
DmVisitorOperateLogDto operateLogPo = visitorLogsService.initData(po.getId(),staffId, DmVisitorOperateLogDto.BUSINESS_TYPE_CREATE, "createVisitor",JSON.toJSONString(map),JSON.toJSONString(result)); | |||
visitorLogsService.insert(operateLogPo); | |||
return result; | |||
return result ? po : null; | |||
} | |||
public Boolean deleteVisitor(Long id, Long staffId){ | |||
@@ -1,10 +1,38 @@ | |||
package com.xueyi.system.staff.service.impl; | |||
import cn.hutool.core.date.LocalDateTimeUtil; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; | |||
import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.xueyi.common.core.constant.basic.SqlConstants; | |||
import com.xueyi.common.core.utils.core.IdUtil; | |||
import com.xueyi.common.core.web.result.R; | |||
import com.xueyi.common.sms.configure.SmsProperties; | |||
import com.xueyi.common.web.entity.service.impl.BaseServiceImpl; | |||
import com.xueyi.common.web.utils.MyDateUtils; | |||
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitRecordsDto; | |||
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanExtPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmVisitRecordsPo; | |||
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; | |||
import com.xueyi.system.api.sms.domain.vo.SmsReqEntity; | |||
import com.xueyi.system.api.sms.feign.RemoteSmsService; | |||
import com.xueyi.system.api.staff.domain.dto.DmVisitCommonDto; | |||
import com.xueyi.system.api.staff.domain.po.DmStaffPo; | |||
import com.xueyi.system.digitalmans.mapper.DmDigitalmanExtMapper; | |||
import com.xueyi.system.digitalmans.mapper.DmDigitalmanMapper; | |||
import com.xueyi.system.meeting.constant.VisitRecordStatus; | |||
import com.xueyi.system.staff.domain.dto.DmVisitorOperateLogDto; | |||
import com.xueyi.system.staff.domain.po.DmVisitorSmsConfigPo; | |||
import com.xueyi.system.staff.domain.query.DmVisitRecordsQuery; | |||
import com.xueyi.system.staff.manager.IDmVisitRecordsManager; | |||
import com.xueyi.system.staff.mapper.DmStaffMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitRecordsMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitorSmsConfigMapper; | |||
import com.xueyi.system.staff.mapper.DmVisitorsMapper; | |||
import com.xueyi.system.staff.service.IDmVisitRecordsService; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.data.redis.core.RedisTemplate; | |||
@@ -25,6 +53,32 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue | |||
private static final int CODE_LENGTH = 4; | |||
private static final String REDIS_KEY_PREFIX = "visitor:verification_code:"; | |||
@Autowired | |||
private RemoteSmsService smsService; | |||
@Autowired | |||
private DmVisitRecordsMapper visitRecordsMapper; | |||
@Autowired | |||
private DmVisitorsMapper visitorsMapper; | |||
@Autowired | |||
private SmsProperties smsProperties; | |||
@Autowired | |||
private DmVisitorSmsConfigMapper visitorSmsConfigMapper; | |||
@Autowired | |||
private DmDigitalmanExtMapper digitalmanExtMapper; | |||
@Autowired | |||
private DmDigitalmanMapper digitalmanMapper; | |||
@Autowired | |||
private DmStaffMapper staffMapper; | |||
@Autowired | |||
private DmVisitorOperateLogServiceImpl visitorOperateLogService; | |||
@Autowired | |||
private RedisTemplate<String, String> redisTemplate; | |||
@@ -75,5 +129,88 @@ public class DmVisitRecordsServiceImpl extends BaseServiceImpl<DmVisitRecordsQue | |||
} | |||
} | |||
public DmVisitRecordsPo initVisitRecord(DmVisitCommonDto commonDto){ | |||
DmVisitRecordsPo visitRecords = null; | |||
DmStaffPo emp = staffMapper.selectOne( | |||
Wrappers.<DmStaffPo>query().lambda() | |||
.eq(DmStaffPo::getId, commonDto.getEmpId()).last(SqlConstants.LIMIT_ONE)); | |||
if (ObjectUtils.isNotEmpty(emp)) { | |||
visitRecords = new DmVisitRecordsPo(); | |||
visitRecords.setDeptId(emp.getDeptId()); | |||
// visitRecords.setVisitorId(v.getId()); | |||
if (StringUtils.isNotEmpty(commonDto.getVisitDate())) { | |||
visitRecords.setVisitDate(LocalDateTimeUtil.of(MyDateUtils.parseStrToDate(commonDto.getVisitDate(), MyDateUtils.DEFAULT_DATE_PATTERN)).toLocalDate()); | |||
} | |||
visitRecords.setUserId(commonDto.getEmpId()); | |||
visitRecords.setRecordStatus(VisitRecordStatus.getRecordStatusStart()); | |||
String code = genVisitorCode(); | |||
visitRecords.setVisitorCode(code); | |||
visitRecords.setReceiverName(commonDto.getEmpName()); | |||
visitRecords.setReceiverPhone(commonDto.getEmpTel()); | |||
} | |||
return visitRecords; | |||
} | |||
public DmVisitorsPo initVisitor(DmVisitCommonDto commonDto){ | |||
DmVisitorsPo v = new DmVisitorsPo(); | |||
v.setId(IdUtil.getSnowflakeNextId()); | |||
v.setName(commonDto.getVisitorName()); | |||
v.setNickname(commonDto.getVisitorNickName()); | |||
v.setVisitorCompany(commonDto.getVisitCompany()); | |||
v.setPhone(commonDto.getVisitorTel()); | |||
v.setType(DmVisitorsDto.TYPE_NORMAL_VISITOR); | |||
return v; | |||
} | |||
public R<String> sendSms(DmVisitRecordsPo po) { | |||
if (null != po && null != po.getVisitorId()) { | |||
DmVisitorsPo visitorsPo = visitorsMapper.selectById(po.getVisitorId()); | |||
SmsReqEntity send = new SmsReqEntity(); | |||
try { | |||
if (null != visitorsPo && StringUtils.isNotEmpty(visitorsPo.getPhone())) { | |||
DmVisitorSmsConfigPo dmVisitorSmsConfigPo = visitorSmsConfigMapper.selectOne(Wrappers.<DmVisitorSmsConfigPo>query().lambda().last(SqlConstants.LIMIT_ONE)); | |||
DmDigitalmanPo dmDigitalmanPo = digitalmanMapper.selectByCode(digitalmanExtMapper.selectOne(Wrappers.<DmDigitalmanExtPo>query().lambda().last(SqlConstants.LIMIT_ONE)).getManCode()); | |||
DmStaffPo staffPo = staffMapper.selectById(po.getUserId()); | |||
JSONObject json = new JSONObject(); | |||
String code = po.getVisitorCode(); | |||
if (code == null && po.getId() != null) { | |||
code = genVisitorCode(); | |||
po.setVisitorCode(code); | |||
visitRecordsMapper.updateById(po); | |||
} | |||
json.put("code", code); | |||
json.put("nickName", visitorsPo.getName()); | |||
json.put("robotName", dmDigitalmanPo.getName()); | |||
json.put("dateTime", LocalDateTimeUtil.format(po.getVisitDate(), MyDateUtils.DEFAULT_DATE_PATTERN)); | |||
json.put("companyName", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyName():""); | |||
json.put("companyAddr", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getCompanyAddress():""); | |||
json.put("receiverName", staffPo!=null?staffPo.getUserName():""); | |||
json.put("receiverPhone", staffPo!=null?staffPo.getPhone():""); | |||
json.put("parkInfo", dmVisitorSmsConfigPo!=null?dmVisitorSmsConfigPo.getParkPrompt():""); | |||
//给访客发送短信 | |||
send.setPhone(visitorsPo.getPhone()); | |||
send.setTemplate(smsProperties.getVisitorTemplate()); | |||
send.setDataMap(json.toJSONString()); | |||
JSONObject result = smsService.sendSms(send); | |||
DmVisitorOperateLogDto visitorOperateLogPo = visitorOperateLogService.initData(po.getVisitorId(), po.getUserId(), DmVisitorOperateLogDto.BUSINESS_TYPE_OTHER, "sendSms", JSON.toJSONString(send), result.toJSONString()); | |||
visitorOperateLogService.insert(visitorOperateLogPo); | |||
} else { | |||
return R.fail("数据存在问题"); | |||
} | |||
} catch (Exception e) { | |||
return R.fail("服务器错误,无法发送短信"); | |||
} | |||
} | |||
return R.ok("发送成功"); | |||
} | |||
} |
@@ -1,10 +1,8 @@ | |||
package com.xueyi.system.staff.service.impl; | |||
import com.alibaba.fastjson.JSON; | |||
import com.xueyi.common.web.entity.service.impl.BaseServiceImpl; | |||
import com.xueyi.system.api.staff.domain.po.DmStaffPo; | |||
import com.xueyi.system.staff.domain.dto.DmVisitorOperateLogDto; | |||
import com.xueyi.system.staff.domain.po.DmVisitorOperateLogPo; | |||
import com.xueyi.system.staff.domain.query.DmVisitorOperateLogQuery; | |||
import com.xueyi.system.staff.manager.IDmVisitorOperateLogManager; | |||
import com.xueyi.system.staff.mapper.DmStaffMapper; | |||
@@ -13,8 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.time.LocalDateTime; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
/** | |||
* 访客管理 服务层处理 | |||
@@ -35,7 +31,7 @@ public class DmVisitorOperateLogServiceImpl extends BaseServiceImpl<DmVisitorOpe | |||
operateLogPo.setBusinessType(businessType); | |||
operateLogPo.setMethod(funName); | |||
operateLogPo.setUserName(staffPo.getUserName()); | |||
operateLogPo.setTitle("访客方面操作日志(小程序)"); | |||
operateLogPo.setTitle("访客方面操作日志"); | |||
operateLogPo.setOperateTime(LocalDateTime.now()); | |||
operateLogPo.setParam(parms); | |||
operateLogPo.setJsonResult(result); | |||
@@ -118,7 +118,7 @@ public class ImageUtil { | |||
} | |||
} | |||
protected String getNewFileName(String ext){ | |||
protected static String getNewFileName(String ext){ | |||
String random1 = String.valueOf(System.currentTimeMillis()); | |||
String random2 = UUID.randomUUID().toString().replaceAll("-", ""); | |||
return random1 + "_" + random2.substring(0, 8) + "."+ext; | |||
@@ -248,7 +248,7 @@ public class ImageUtil { | |||
} | |||
public MultipartFile convertToMultipartFile(String base64String) { | |||
public static MultipartFile convertToMultipartFile(String base64String) { | |||
java.util.Base64.Decoder decoder = java.util.Base64.getDecoder(); | |||
try { | |||
//Base64解码 | |||
@@ -28,12 +28,12 @@ extend type Mutation { | |||
createVisitor( | |||
input: VisitorInput! | |||
staffId: ID! | |||
): Boolean | |||
): Visitor | |||
updateVisitor( | |||
input: VisitorInput! | |||
staffId: ID! | |||
): Boolean | |||
): Visitor | |||
deleteVisitor( | |||
id: ID!, | |||