Ver código fonte

1,修改graphql接口返回值

2,访客接口new-visitor修改
tags/B.2.6.7_20240112_base
yk 1 ano atrás
pai
commit
a36f81be17
12 arquivos alterados com 239 adições e 248 exclusões
  1. +1
    -3
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmVisitCommonDto.java
  2. +22
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/resource/service/impl/DmResourcesServiceImpl.java
  3. +13
    -8
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/resource/service/impl/FaceServiceImpl.java
  4. +5
    -87
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/DmVisitorSmsConfigController.java
  5. +0
    -15
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmStaffInnerApiController.java
  6. +0
    -1
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmVisitorApiController.java
  7. +48
    -117
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmVisitorInnerApiController.java
  8. +8
    -8
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLMutationResolver.java
  9. +137
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmVisitRecordsServiceImpl.java
  10. +1
    -5
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmVisitorOperateLogServiceImpl.java
  11. +2
    -2
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/utils/common/ImageUtil.java
  12. +2
    -2
      xueyi-modules/xueyi-system/src/main/resources/graphql/visitor.graphqls

+ 1
- 3
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmVisitCommonDto.java Ver arquivo

@@ -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();


+ 22
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/resource/service/impl/DmResourcesServiceImpl.java Ver arquivo

@@ -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);
}
}

+ 13
- 8
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/resource/service/impl/FaceServiceImpl.java Ver arquivo

@@ -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;
}

}

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

@@ -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("短信发送成功,请注意查收");


+ 0
- 15
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmStaffInnerApiController.java Ver arquivo

@@ -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;



+ 0
- 1
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmVisitorApiController.java Ver arquivo

@@ -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;


+ 48
- 117
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmVisitorInnerApiController.java Ver arquivo

@@ -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();


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

@@ -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){


+ 137
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmVisitRecordsServiceImpl.java Ver arquivo

@@ -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
- 5
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/service/impl/DmVisitorOperateLogServiceImpl.java Ver arquivo

@@ -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);


+ 2
- 2
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/utils/common/ImageUtil.java Ver arquivo

@@ -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解码


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

@@ -28,12 +28,12 @@ extend type Mutation {
createVisitor(
input: VisitorInput!
staffId: ID!
): Boolean
): Visitor

updateVisitor(
input: VisitorInput!
staffId: ID!
): Boolean
): Visitor

deleteVisitor(
id: ID!,


Carregando…
Cancelar
Salvar