Browse Source

Merge pull request '数字人1.0版本SaaS后端发布' (#19) from test into main

Reviewed-on: http://39.105.23.186:3000/develop/digimeta-MultiSaas/pulls/19
tags/B.1.0.2.7_20230725_release
bogemail 2 years ago
parent
commit
bbce90b158
44 changed files with 1342 additions and 34 deletions
  1. +27
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/vo/DmReceptionVo.java
  2. +21
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/feign/RemoteReceptionService.java
  3. +11
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/holiday/domain/vo/HolidayRspEntity.java
  4. +24
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/holiday/feign/RemoteHolidayService.java
  5. +30
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/holiday/feign/factory/RemoteHolidayFallbackFactory.java
  6. +32
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/dto/DmRecognizedMultiRecordsDto.java
  7. +1
    -1
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/dto/DmRecognizedRecordsDto.java
  8. +2
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/po/DmRecognizedRecordsPo.java
  9. +6
    -3
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/feign/RemoteRecognizedRecordsService.java
  10. +6
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/feign/factory/RemotePassFallbackFactory.java
  11. +2
    -2
      xueyi-common/xueyi-common-core/src/main/java/com/xueyi/common/core/constant/digitalman/InitConstants.java
  12. +1
    -1
      xueyi-gateway/src/main/java/com/xueyi/gateway/filter/AuthFilter.java
  13. +1
    -1
      xueyi-gateway/src/main/resources/bootstrap.yml
  14. +41
    -10
      xueyi-modules/xueyi-message/src/main/java/com/xueyi/message/transfer/controller/ApiController.java
  15. +46
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/controller/DmHolidayController.java
  16. +16
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/dto/DmHolidayDto.java
  17. +18
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/model/DmHolidayConverter.java
  18. +41
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/po/DmHolidayPo.java
  19. +13
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/query/DmHolidayQuery.java
  20. +21
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/manager/IDmHolidayManager.java
  21. +36
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/manager/impl/DmHolidayManager.java
  22. +17
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/mapper/DmHolidayMapper.java
  23. +10
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/service/IDmHolidayService.java
  24. +32
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/service/impl/IDmHolidayServiceImpl.java
  25. +10
    -1
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmDigitalmanController.java
  26. +145
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmReceptionController.java
  27. +37
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/dto/DmReceptionDto.java
  28. +43
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/merge/DmReceptionStaffMerge.java
  29. +56
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/merge/DmReceptionVisitorMerge.java
  30. +13
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/merge/MergeGroup.java
  31. +17
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/model/DmReceptionConverter.java
  32. +62
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/po/DmReceptionPo.java
  33. +23
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/query/DmReceptionQuery.java
  34. +24
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/manager/IDmReceptionManager.java
  35. +145
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/manager/impl/DmReceptionManager.java
  36. +16
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/mapper/DmReceptionMapper.java
  37. +17
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/mapper/merge/DmReceptionStaffMergeMapper.java
  38. +14
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/mapper/merge/DmReceptionVisitorMergeMapper.java
  39. +16
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/IDmReceptionService.java
  40. +132
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/impl/DmReceptionServiceImpl.java
  41. +1
    -7
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/emcs/service/BaseRedisListDataCache.java
  42. +9
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/pass/controller/api/DmRecognizedRecordsApiController.java
  43. +90
    -8
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/pass/controller/api/DmRecognizedRecordsInnerApiController.java
  44. +17
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/manager/impl/DmVisitorsManager.java

+ 27
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/vo/DmReceptionVo.java View File

@@ -0,0 +1,27 @@
package com.xueyi.system.api.digitalmans.domain.vo;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;

@Data
@NoArgsConstructor
public class DmReceptionVo {
@Serial
private static final long serialVersionUID = 1L;

private String name;

private String date;
private String welcome;

private Long[] guide;

private Long[] first;

private Long[] second;

private Long[] third;
}

+ 21
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/feign/RemoteReceptionService.java View File

@@ -0,0 +1,21 @@
package com.xueyi.system.api.digitalmans.feign;

import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.constant.basic.ServiceConstants;
import com.xueyi.common.core.web.result.R;
import com.xueyi.system.api.digitalmans.domain.vo.DmReceptionVo;
import com.xueyi.system.api.organize.feign.factory.RemoteUserFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(contextId = "remoteReceptionService", value = ServiceConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class)
public interface RemoteReceptionService {


@GetMapping("/reception/inner/get_reception_task")
public R<DmReceptionVo> getReceptionTaskInner(@RequestParam("manCode") String manCode,
@RequestHeader(SecurityConstants.ENTERPRISE_ID) Long enterpriseId, @RequestHeader(SecurityConstants.SOURCE_NAME) String sourceName, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

}

+ 11
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/holiday/domain/vo/HolidayRspEntity.java View File

@@ -0,0 +1,11 @@
package com.xueyi.system.api.holiday.domain.vo;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class HolidayRspEntity {


}

+ 24
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/holiday/feign/RemoteHolidayService.java View File

@@ -0,0 +1,24 @@
package com.xueyi.system.api.holiday.feign;


import com.alibaba.fastjson2.JSONObject;
import com.xueyi.system.api.holiday.feign.factory.RemoteHolidayFallbackFactory;
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;
import org.springframework.web.bind.annotation.RequestBody;

/**
* 短信发送服务
*
* @author yrx
*/
@FeignClient(url = "${notification.holiday.url}",name = "holiday", fallbackFactory = RemoteHolidayFallbackFactory.class)
public interface RemoteHolidayService {

@GetMapping("/api/holiday/year")
JSONObject getHolidays();

}

+ 30
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/holiday/feign/factory/RemoteHolidayFallbackFactory.java View File

@@ -0,0 +1,30 @@
package com.xueyi.system.api.holiday.feign.factory;

import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.core.web.result.R;
import com.xueyi.system.api.holiday.feign.RemoteHolidayService;
import com.xueyi.system.api.sms.domain.vo.SmsReqEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;

/**
* 会议室服务 降级处理
*
* @author xueyi
*/
@Slf4j
@Component
public class RemoteHolidayFallbackFactory implements FallbackFactory<RemoteHolidayService> {

@Override
public RemoteHolidayService create(Throwable throwable) {
log.error("短信服务调用失败:{}", throwable.getMessage());
return new RemoteHolidayService() {
@Override
public JSONObject getHolidays() {
return R.fail("工作日服务调用失败:" + throwable.getMessage()).toJson();
}
};
}
}

+ 32
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/dto/DmRecognizedMultiRecordsDto.java View File

@@ -0,0 +1,32 @@
package com.xueyi.system.api.pass.domain.dto;

import lombok.Data;

import java.io.Serial;
import java.math.BigDecimal;
import java.util.List;

/**
* 人员识别 数据传输对象
*
* @author xueyi
*/
@Data
public class DmRecognizedMultiRecordsDto {

@Serial
private static final long serialVersionUID = 1L;


private String devId;

private BigDecimal timestamp;

private List<DmRecognizedRecordsDto> records;

private String sign;

public final static Integer TYPE_STAFF = 1;
public final static Integer TYPE_STRANGER = 2;

}

+ 1
- 1
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/dto/DmRecognizedRecordsDto.java View File

@@ -26,6 +26,6 @@ public class DmRecognizedRecordsDto extends DmRecognizedRecordsPo {
private String sign;

public final static Integer TYPE_STAFF = 1;
public final static Integer TYPE_STRANGER = 2;
public final static Integer TYPE_STRANGER = 6;

}

+ 2
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/domain/po/DmRecognizedRecordsPo.java View File

@@ -71,4 +71,6 @@ public class DmRecognizedRecordsPo extends TBaseEntity {
@Excel(name = "所属组织ID")
protected Long deptId;

protected Long resourceId;

}

+ 6
- 3
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/feign/RemoteRecognizedRecordsService.java View File

@@ -4,12 +4,12 @@ import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.constant.basic.ServiceConstants;
import com.xueyi.system.api.organize.feign.factory.RemotePostFallbackFactory;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedMultiRecordsDto;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedRecordsDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;

/**
* 用户服务
@@ -19,9 +19,12 @@ import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(contextId = "remoteRecognizedRecordsService", value = ServiceConstants.SYSTEM_SERVICE, fallbackFactory = RemotePostFallbackFactory.class)
public interface RemoteRecognizedRecordsService {

@GetMapping("/pass/inner-api/upload-pass")
@PostMapping("/pass/inner-api/upload-pass")
JSONObject uploadPass(@RequestBody DmRecognizedRecordsDto recognizedRecordsDto, @RequestHeader(SecurityConstants.ENTERPRISE_ID) Long enterpriseId, @RequestHeader(SecurityConstants.SOURCE_NAME) String sourceName, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

@PostMapping("/pass/inner-api/upload-multi-pass")
JSONObject uploadMultiPass(@RequestBody DmRecognizedMultiRecordsDto recognizedMultiRecordsDto, @RequestHeader(SecurityConstants.ENTERPRISE_ID) Long enterpriseId, @RequestHeader(SecurityConstants.SOURCE_NAME) String sourceName, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);



}

+ 6
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/pass/feign/factory/RemotePassFallbackFactory.java View File

@@ -2,6 +2,7 @@ package com.xueyi.system.api.pass.feign.factory;

import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.core.web.result.R;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedMultiRecordsDto;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedRecordsDto;
import com.xueyi.system.api.pass.feign.RemoteRecognizedRecordsService;
import lombok.extern.slf4j.Slf4j;
@@ -26,6 +27,11 @@ public class RemotePassFallbackFactory implements FallbackFactory<RemoteRecogniz
public JSONObject uploadPass(DmRecognizedRecordsDto recognizedRecordsDto, Long enterpriseId, String sourceName, String source) {
return R.fail("通行记录上传失败:" + throwable.getMessage()).toJson();
}

@Override
public JSONObject uploadMultiPass(DmRecognizedMultiRecordsDto recognizedMultiRecordsDto, Long enterpriseId, String sourceName, String source) {
return R.fail("通行记录上传失败:" + throwable.getMessage()).toJson();
}
};
}
}

+ 2
- 2
xueyi-common/xueyi-common-core/src/main/java/com/xueyi/common/core/constant/digitalman/InitConstants.java View File

@@ -11,9 +11,9 @@ public class InitConstants {

public static final String DEFAULT_NAME = "小智";
public static final Integer DEFAULT_CLOTH = 1;
public static final String DEFAULT_CLOTH_URL = "http://39.107.77.235:9000/dgmeta/init_digital_mans/cloth/default_cloth.jpg";
public static final String DEFAULT_CLOTH_URL = "http://39.107.77.235:9000/dgmeta/init_digital_mans/cloth/default_cloth_vi.png";
public static final Integer DEFAULT_MODEL = 1;
public static final String DEFAULT_MODEL_URL = "http://39.107.77.235:9000/dgmeta/init_digital_mans/model/default_model2.jpg";
public static final String DEFAULT_MODEL_URL = "http://39.107.77.235:9000/dgmeta/init_digital_mans/model/default_model_v1.png";
public static final Long DEFAULT_BACKGROUND_ID = 749L;

public static final String DEFAULT_BACKGROUND_URL = "http://39.107.77.235:9000/dgmeta/init_digital_mans/background/default_background.jpg";


+ 1
- 1
xueyi-gateway/src/main/java/com/xueyi/gateway/filter/AuthFilter.java View File

@@ -37,7 +37,7 @@ public class AuthFilter implements GlobalFilter, Ordered {
@Autowired
private RedisService redisService;

private static final String[] whitePrefix = {"/message/api", "/pass/api", "/meeting/api", "/visit/api", "/file/api","/staff/api","/apkversion/api","/man/api"};
private static final String[] whitePrefix = {"/message/api", "/pass/api", "/meeting/api", "/visit/api", "/file/api","/staff/api","/apkversion/api","/man/api","/holiday/api"};

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {


+ 1
- 1
xueyi-gateway/src/main/resources/bootstrap.yml View File

@@ -37,7 +37,7 @@ spring:
datasource:
ds1:
nacos:
server-addr: 172.17.0.1:18848
server-addr: @nacos.host@:@nacos.port@
# namespace: 6d0ee265-2a92-44cc-a6de-f34b3ea104e6
# server-addr: 39.107.77.235:18848
dataId: sentinel-xueyi-gateway


+ 41
- 10
xueyi-modules/xueyi-message/src/main/java/com/xueyi/message/transfer/controller/ApiController.java View File

@@ -1,6 +1,8 @@
package com.xueyi.message.transfer.controller;


import com.alibaba.fastjson2.JSONArray;
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.constant.digitalman.InitConstants;
@@ -16,8 +18,10 @@ 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.DmSyncDigitalmanDto;
import com.xueyi.system.api.digitalmans.domain.po.DmManDevicePo;
import com.xueyi.system.api.digitalmans.domain.vo.DmReceptionVo;
import com.xueyi.system.api.digitalmans.feign.RemoteDigitalmanService;
import com.xueyi.system.api.digitalmans.feign.RemoteManDeviceService;
import com.xueyi.system.api.digitalmans.feign.RemoteReceptionService;
import com.xueyi.system.api.digitalmans.feign.RemoteSkillService;
import com.xueyi.system.api.model.Source;
import com.xueyi.system.api.organize.domain.dto.SysEnterpriseDto;
@@ -56,6 +60,9 @@ public class ApiController {
@Autowired
RemoteDigitalmanService remoteDigitalmanService;

@Autowired
RemoteReceptionService remoteReceptionService;

@Autowired
RemoteDeviceTenantMergeService deviceTenantMergeServicel;

@@ -134,33 +141,57 @@ public class ApiController {
switch (vo.getType()) {
// 人员信息
case 0:
timestamp = redisTemplate.opsForValue().get("group:dgman:" + manDeviceDtoR.getData().getTId() + ":" + MessageConstants.STAFF_SYNC );
timestamp = redisTemplate.opsForValue().get("group:dgman:" + manDeviceDtoR.getData().getTId() + ":" + MessageConstants.STAFF_SYNC);
if (timestamp == null) {
AjaxResult.warn("当前时间戳获取失败");
}
R<List<DmStaffFeature>> staffFeatureList = remoteStaffService.listInner(vo.getDevId(), vo.getTimestamp(), manDeviceDtoR.getData().getTId(),source.getMaster(), SecurityConstants.INNER);
R<List<DmStaffFeature>> staffFeatureList = remoteStaffService.listInner(vo.getDevId(), vo.getTimestamp(), manDeviceDtoR.getData().getTId(), source.getMaster(), SecurityConstants.INNER);
if (staffFeatureList.isFail())
return AjaxResult.warn("新增失败,请检查!");
staffFeatureList.getData().forEach(item->
staffFeatureList.getData().forEach(item ->
{
if (item.getFeature() != "" ) {
String ops_str = item.getFeature().substring(1,item.getFeature().indexOf("]"));
if (item.getFeature() != "") {
String ops_str = item.getFeature().substring(1, item.getFeature().indexOf("]"));
item.setDFeatures(Arrays.stream(ops_str.split(",")).map(Double::valueOf).collect(Collectors.toList()));
}
item.setFeature("");
});
return AjaxResult.success(staffFeatureList.getData()).put("timestamp",timestamp);
return AjaxResult.success(staffFeatureList.getData()).put("timestamp", timestamp);
case 1:
System.out.println("=========租户号:" + manDeviceDtoR.getData().getTId() + ", 数据源: " + source.getMaster() + " 设备号:" + vo.getDevId());
R<List<DmSkillDto>> skillList = remoteSkillService.skilllistInner(vo.getDevId(),vo.getTimestamp(), manDeviceDtoR.getData().getTId(),source.getMaster(), SecurityConstants.INNER);
R<List<DmSkillDto>> skillList = remoteSkillService.skilllistInner(vo.getDevId(), vo.getTimestamp(), manDeviceDtoR.getData().getTId(), source.getMaster(), SecurityConstants.INNER);
if (skillList.isFail())
return AjaxResult.warn("新增失败,请检查");
return AjaxResult.success(skillList.getData()).put("timestamp",timestamp);
return AjaxResult.success(skillList.getData()).put("timestamp", timestamp);
case 2:
R<DmSyncDigitalmanDto> syncDmDto = remoteDigitalmanService.listInner(manDeviceDtoR.getData().getManCode(),vo.getTimestamp(), manDeviceDtoR.getData().getTId(),source.getMaster(), SecurityConstants.INNER);
R<DmSyncDigitalmanDto> syncDmDto = remoteDigitalmanService.listInner(manDeviceDtoR.getData().getManCode(), vo.getTimestamp(), manDeviceDtoR.getData().getTId(), source.getMaster(), SecurityConstants.INNER);
if (syncDmDto.isFail())
return AjaxResult.warn("新增失败,请检查");
return AjaxResult.success(syncDmDto.getData()).put("timestamp",timestamp);
return AjaxResult.success(syncDmDto.getData()).put("timestamp", timestamp);
case 3:
R<DmReceptionVo> receptionVo = remoteReceptionService.getReceptionTaskInner(manDeviceDtoR.getData().getManCode(), manDeviceDtoR.getData().getTId(), source.getMaster(), SecurityConstants.INNER);
if (receptionVo.isFail()){
return AjaxResult.warn("接待模式任务获取失败,请检查");
}
// JSONObject jsObject = new JSONObject();
// jsObject.put("code",200);
// JSONObject data = new JSONObject();
// data.put("name", "A市长考察");
// data.put("date", "07-23");
// JSONArray gArray = new JSONArray();
// gArray.add(1676570397299970049L);
// data.put("guide", gArray);
// JSONArray fArray = new JSONArray();
// fArray.add(1682948239952818177L);
// fArray.add(1683035071285399554L);
// data.put("first", fArray);
// JSONArray sArray = new JSONArray();
// sArray.add(1682328924238446593L);
// data.put("second", sArray);
//
// jsObject.put("data",data);
// jsObject.put("msg","success");
return AjaxResult.success(receptionVo.getData());
}
}
return AjaxResult.success();


+ 46
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/controller/DmHolidayController.java View File

@@ -0,0 +1,46 @@
package com.xueyi.system.common.controller;

import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.core.web.result.AjaxResult;
import com.xueyi.common.web.entity.controller.BaseController;
import com.xueyi.system.api.holiday.feign.RemoteHolidayService;
import com.xueyi.system.common.domain.dto.DmHolidayDto;
import com.xueyi.system.common.domain.query.DmHolidayQuery;
import com.xueyi.system.common.service.IDmHolidayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/holiday")
public class DmHolidayController extends BaseController<DmHolidayQuery, DmHolidayDto, IDmHolidayService> {


/** 定义节点名称 */
@Override
protected String getNodeName() {
return "节假日管理 ";
}

@Autowired
RemoteHolidayService holidayService;
/**
* 获取今天是否为工作日
*/
@GetMapping("/api/getTodayIsWorkDay")
AjaxResult getTodayIsWorkDay() {
return success(baseService.getTodayHoliday());
}

/**
* 调用外部接口,获取本年度节假日信息
*/
@GetMapping("/getHolidays")
AjaxResult getHolidays() {
JSONObject holidays = holidayService.getHolidays();
return AjaxResult.success();
}

}

+ 16
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/dto/DmHolidayDto.java View File

@@ -0,0 +1,16 @@
package com.xueyi.system.common.domain.dto;


import com.xueyi.system.common.domain.po.DmHolidayPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

@Data
@EqualsAndHashCode(callSuper = true)
public class DmHolidayDto extends DmHolidayPo {

@Serial
private static final long serialVersionUID = 1L;
}

+ 18
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/model/DmHolidayConverter.java View File

@@ -0,0 +1,18 @@
package com.xueyi.system.common.domain.model;

import com.xueyi.common.core.web.entity.model.BaseConverter;
import com.xueyi.system.common.domain.dto.DmHolidayDto;
import com.xueyi.system.common.domain.po.DmHolidayPo;
import com.xueyi.system.common.domain.query.DmHolidayQuery;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;

/**
* 动作管理
对象映射器
*
* @author xueyi
*/
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface DmHolidayConverter extends BaseConverter<DmHolidayQuery, DmHolidayDto, DmHolidayPo> {
}

+ 41
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/po/DmHolidayPo.java View File

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

import com.baomidou.mybatisplus.annotation.TableName;
import com.xueyi.common.core.annotation.Excel;
import com.xueyi.common.core.web.entity.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.time.LocalDate;

import static com.xueyi.common.core.constant.basic.EntityConstants.*;

@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "dm_holiday", excludeProperty = { STATUS, SORT, REMARK, DEL_FLAG })
public class DmHolidayPo extends BaseEntity{

@Serial
private static final long serialVersionUID = 1L;

/** 是否为节假日 */
@Excel(name = "是否为节假日")
protected LocalDate date;

/** 是否为节假日 */
@Excel(name = "是否为节假日")
protected Integer holiday;

/** 工资比例 */
@Excel(name = "工资比例")
protected Double wage;

/** 是否节后调休 */
@Excel(name = "是否节后调休")
protected Integer after;

/** 关联节假日 */
@Excel(name = "关联节假日")
protected String target;
}

+ 13
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/domain/query/DmHolidayQuery.java View File

@@ -0,0 +1,13 @@
package com.xueyi.system.common.domain.query;
import com.xueyi.system.common.domain.po.DmHolidayPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper = true)
public class DmHolidayQuery extends DmHolidayPo {

private static final long serialVersionUID = 1L;


}

+ 21
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/manager/IDmHolidayManager.java View File

@@ -0,0 +1,21 @@
package com.xueyi.system.common.manager;

import com.xueyi.common.web.entity.manager.IBaseManager;
import com.xueyi.system.common.domain.dto.DmHolidayDto;
import com.xueyi.system.common.domain.query.DmHolidayQuery;

/**
* 动作管理
管理 数据封装层
*
* @author xueyi
*/
public interface IDmHolidayManager extends IBaseManager<DmHolidayQuery, DmHolidayDto> {

/**
* 获取今日节假日
*
* @return 今日节假日
*/
public DmHolidayDto selectTodayHoliday(DmHolidayQuery query);
}

+ 36
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/manager/impl/DmHolidayManager.java View File

@@ -0,0 +1,36 @@
package com.xueyi.system.common.manager.impl;


import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xueyi.common.web.entity.manager.impl.BaseManagerImpl;
import com.xueyi.system.common.domain.dto.DmHolidayDto;
import com.xueyi.system.common.domain.model.DmHolidayConverter;
import com.xueyi.system.common.domain.po.DmHolidayPo;
import com.xueyi.system.common.domain.query.DmHolidayQuery;
import com.xueyi.system.common.manager.IDmHolidayManager;
import com.xueyi.system.common.mapper.DmHolidayMapper;

import org.springframework.stereotype.Component;

import java.util.List;


/**
* 动作管理
管理 数据封装层处理
*
* @author xueyi
*/
@Component
public class DmHolidayManager extends BaseManagerImpl<DmHolidayQuery, DmHolidayDto, DmHolidayPo, DmHolidayMapper, DmHolidayConverter> implements IDmHolidayManager {

@Override
public DmHolidayDto selectTodayHoliday(DmHolidayQuery query) {
List<DmHolidayPo> poList = baseMapper.selectList(Wrappers.<DmHolidayPo>query().lambda()
.eq(DmHolidayPo::getDate, query.getDate()));
if (poList != null && poList.size() > 0) {
return baseConverter.mapperDto(poList.get(0));
}
return null;
}
}

+ 17
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/mapper/DmHolidayMapper.java View File

@@ -0,0 +1,17 @@
package com.xueyi.system.common.mapper;

import com.xueyi.common.datasource.annotation.Master;
import com.xueyi.common.web.entity.mapper.BaseMapper;
import com.xueyi.system.common.domain.dto.DmHolidayDto;
import com.xueyi.system.common.domain.po.DmHolidayPo;
import com.xueyi.system.common.domain.query.DmHolidayQuery;

/**
* 动作管理
管理 数据层
*
* @author xueyi
*/
@Master
public interface DmHolidayMapper extends BaseMapper<DmHolidayQuery, DmHolidayDto, DmHolidayPo> {
}

+ 10
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/service/IDmHolidayService.java View File

@@ -0,0 +1,10 @@
package com.xueyi.system.common.service;

import com.xueyi.common.web.entity.service.IBaseService;
import com.xueyi.system.common.domain.dto.DmHolidayDto;
import com.xueyi.system.common.domain.query.DmHolidayQuery;

public interface IDmHolidayService extends IBaseService<DmHolidayQuery, DmHolidayDto> {

DmHolidayDto getTodayHoliday();
}

+ 32
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/common/service/impl/IDmHolidayServiceImpl.java View File

@@ -0,0 +1,32 @@
package com.xueyi.system.common.service.impl;

import com.xueyi.common.web.entity.service.impl.BaseServiceImpl;
import com.xueyi.system.common.domain.dto.DmHolidayDto;
import com.xueyi.system.common.domain.query.DmHolidayQuery;
import com.xueyi.system.common.manager.IDmHolidayManager;
import com.xueyi.system.common.service.IDmHolidayService;
import org.springframework.stereotype.Service;

import java.time.LocalDate;

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

@Override
public DmHolidayDto getTodayHoliday() {
DmHolidayQuery query = new DmHolidayQuery();
query.setDate(LocalDate.now());
DmHolidayDto dto = baseManager.selectTodayHoliday(query);
if (dto != null) {
return dto;
}
dto = new DmHolidayDto();
// 判断今天是工作日还是周末
if (LocalDate.now().getDayOfWeek().getValue() == 6 || LocalDate.now().getDayOfWeek().getValue() == 7) {
dto.setHoliday(1);
} else {
dto.setHoliday(0);
}
return dto;
}
}

+ 10
- 1
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmDigitalmanController.java View File

@@ -300,9 +300,10 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm
try {
occurTime = DateUtils.formatDate(DateUtils.parseLongToDate(timestamp),"HH:mm");
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
try{
if (StringUtils.isNotEmpty(devId)) {
if (StringUtils.isNotEmpty(network)){
baseRedisListDataCache.init (REDIS_LIST_SIZE).addToList(HEART_MQTT_PREFIX+":"+devId+":network", new RedisBaseDto(occurTime, network));
@@ -317,6 +318,9 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm
baseRedisListDataCache.init(REDIS_LIST_SIZE).addToList(HEART_MQTT_PREFIX + ":" + devId + ":memory", new RedisBaseDto(occurTime, memory));
baseRedisListDataCache.setListExpiration(HEART_MQTT_PREFIX+":"+devId+":memory", Duration.ofHours(1));
}
}}catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
System.err.println(heartBeatObj.toJSONString());
}
@@ -391,4 +395,9 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm
}
return R.fail("请检查请求参数");
}

@GetMapping("/api/checkNetwork")
public R netInfo() {
return R.ok();
}
}

+ 145
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmReceptionController.java View File

@@ -0,0 +1,145 @@
package com.xueyi.system.digitalmans.controller;

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.Logical;
import com.xueyi.common.security.annotation.RequiresPermissions;
import com.xueyi.common.web.entity.controller.BaseController;
import com.xueyi.system.api.digitalmans.domain.vo.DmReceptionVo;
import com.xueyi.system.digitalmans.domain.dto.DmDigitalmanDto;
import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.system.digitalmans.domain.query.DmDigitalmanQuery;
import com.xueyi.system.digitalmans.domain.query.DmReceptionQuery;
import com.xueyi.system.digitalmans.service.IDmDigitalmanService;
import com.xueyi.system.digitalmans.service.IDmReceptionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

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

/**
* 接待模式管理管理 业务处理
*
* @author yinruoxi
*/
@RestController
@RequestMapping("/reception")
public class DmReceptionController extends BaseController<DmReceptionQuery, DmReceptionDto, IDmReceptionService> {

@Autowired
private IDmDigitalmanService digitalmanService;

/** 定义节点名称 */
@Override
protected String getNodeName() {
return "接待模式管理" ;
}


@GetMapping("/inner/get_reception_task")
public R<DmReceptionVo> getReceptionTaskInner(@RequestParam("manCode") String manCode) {
DmDigitalmanQuery query = new DmDigitalmanQuery();
query.setManCode(manCode);
List<DmDigitalmanDto> manList = digitalmanService.selectList(query);
DmReceptionVo res = baseService.selectReceptionTask(manList.get(0).getId());
if (res == null) {
return R.fail("未查询到接待模式");
}
return R.ok(res);
}

/**
* 查询接待模式管理列表
*/
@Override
@GetMapping("/list")
@RequiresPermissions(Auth.DM_RECEPTION_LIST)
public AjaxResult list(DmReceptionQuery reception) {
return super.list(reception);
}

/**
* 查询接待模式管理详细
*/
@Override
@GetMapping(value = "/{id}")
@RequiresPermissions(Auth.DM_RECEPTION_SINGLE)
public AjaxResult getInfo(@PathVariable Serializable id) {
return super.getInfo(id);
}

/**
* 接待模式管理新增
*/
@Override
@PostMapping
@RequiresPermissions(Auth.DM_RECEPTION_ADD)
@Log(title = "接待模式管理管理", businessType = BusinessType.INSERT)
public AjaxResult add(@Validated({V_A.class}) @RequestBody DmReceptionDto reception) {
return super.add(reception);
}

/**
* 接待模式管理修改
*/
@Override
@PutMapping
@RequiresPermissions(Auth.DM_RECEPTION_EDIT)
@Log(title = "接待模式管理管理", businessType = BusinessType.UPDATE)
public AjaxResult edit(@Validated({V_E.class}) @RequestBody DmReceptionDto reception) {
return super.edit(reception);
}


/**
* 接待模式管理修改状态
*/
@Override
@PutMapping("/status")
@RequiresPermissions(value = {Auth.DM_RECEPTION_EDIT, Auth.DM_RECEPTION_ES}, logical = Logical.OR)
@Log(title = "接待模式管理管理", businessType = BusinessType.UPDATE_STATUS)
public AjaxResult editStatus(@RequestBody DmReceptionDto reception) {
return super.editStatus(reception);
}

/**
* 接待模式管理批量删除
*/
@Override
@DeleteMapping("/batch/{idList}")
@RequiresPermissions(Auth.DM_RECEPTION_DEL)
@Log(title = "接待模式管理管理", businessType = BusinessType.DELETE)
public AjaxResult batchRemove(@PathVariable List<Long> idList) {
return super.batchRemove(idList);
}

/**
* 获取接待模式管理选择框列表
*/
@Override
@GetMapping("/option")
public AjaxResult option() {
return super.option();
}

interface Auth {
/** 系统 - 接待模式管理管理 - 列表 */
String DM_RECEPTION_LIST = "digitalmans:reception:list";
/** 系统 - 接待模式管理管理 - 详情 */
String DM_RECEPTION_SINGLE = "digitalmans:reception:single";
/** 系统 - 接待模式管理管理 - 新增 */
String DM_RECEPTION_ADD = "digitalmans:reception:add";
/** 系统 - 接待模式管理管理 - 修改 */
String DM_RECEPTION_EDIT = "digitalmans:reception:edit";
/** 系统 - 接待模式管理管理 - 修改状态 */
String DM_RECEPTION_ES = "digitalmans:reception:es";
/** 系统 - 接待模式管理管理 - 删除 */
String DM_RECEPTION_DEL = "digitalmans:reception:delete";
}
}

+ 37
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/dto/DmReceptionDto.java View File

@@ -0,0 +1,37 @@
package com.xueyi.system.digitalmans.domain.dto;

import com.xueyi.common.core.annotation.Correlation;
import com.xueyi.common.core.constant.basic.OperateConstants;
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto;
import com.xueyi.system.api.staff.domain.dto.DmStaffDto;
import com.xueyi.system.digitalmans.domain.po.DmReceptionPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.util.List;

import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Reception_DmReceptionVisitorMerge_GROUP;
import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Reception_Staff_GROUP;

/**
* 接待模式管理 数据传输对象
*
* @author yinruoxi
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DmReceptionDto extends DmReceptionPo {

@Serial
private static final long serialVersionUID = 1L;

@Correlation(groupName = Reception_Staff_GROUP, keyType = OperateConstants.SubKeyType.RECEIVE)
private DmStaffDto head;

@Correlation(groupName = Reception_DmReceptionVisitorMerge_GROUP, keyType = OperateConstants.SubKeyType.RECEIVE)
private List<DmVisitorsDto> visitors;

// 属性值变量
private Long [][] priorities;
}

+ 43
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/merge/DmReceptionStaffMerge.java View File

@@ -0,0 +1,43 @@
package com.xueyi.system.digitalmans.domain.merge;

import com.baomidou.mybatisplus.annotation.*;
import com.xueyi.common.core.annotation.Correlation;
import com.xueyi.common.core.annotation.Correlations;
import com.xueyi.common.core.constant.basic.OperateConstants;
import com.xueyi.common.core.web.tenant.base.TBasisEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serial;

/**
* 接待任务与负责人联表 持久化对象
*
* @author xueyi
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("dm_reception_staff_merge")
public class DmReceptionStaffMerge extends TBasisEntity {

@Serial
private static final long serialVersionUID = 1L;


/** 招待id */
@Correlations({
@Correlation(groupName = "dm_reception_staff_merge", keyType = OperateConstants.SubKeyType.MERGE_SLAVE),
@Correlation(groupName = "dm_reception_staff_merge", keyType = OperateConstants.SubKeyType.MERGE_MAIN)
})
protected Long receptionId;

/** 内部人员id */
@Correlations({
@Correlation(groupName = "dm_reception_staff_merge", keyType = OperateConstants.SubKeyType.MERGE_SLAVE),
@Correlation(groupName = "dm_reception_staff_merge", keyType = OperateConstants.SubKeyType.MERGE_MAIN)
})
protected Long staffId;

}

+ 56
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/merge/DmReceptionVisitorMerge.java View File

@@ -0,0 +1,56 @@
package com.xueyi.system.digitalmans.domain.merge;

import com.baomidou.mybatisplus.annotation.*;
import com.xueyi.common.core.annotation.Correlation;
import com.xueyi.common.core.annotation.Correlations;
import com.xueyi.common.core.constant.basic.OperateConstants;
import com.xueyi.common.core.web.tenant.base.TBasisEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serial;

import static com.xueyi.system.api.organize.domain.merge.MergeGroup.POST_SysUserPostMerge_GROUP;
import static com.xueyi.system.api.organize.domain.merge.MergeGroup.USER_SysUserPostMerge_GROUP;
import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Reception_DmReceptionVisitorMerge_GROUP;
import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Visitor_DmReceptionVisitorMerge_GROUP;

/**
* 任务访客关联 持久化对象
*
* @author xueyi
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("dm_reception_visitor_merge")
public class DmReceptionVisitorMerge extends TBasisEntity {

@Serial
private static final long serialVersionUID = 1L;


/** 招待任务id */
@Correlations({
@Correlation(groupName = Reception_DmReceptionVisitorMerge_GROUP, keyType = OperateConstants.SubKeyType.MERGE_MAIN),
@Correlation(groupName = Visitor_DmReceptionVisitorMerge_GROUP, keyType = OperateConstants.SubKeyType.MERGE_SLAVE)
})
protected Long receptionId;

/** 访客id */
@Correlations({
@Correlation(groupName = Visitor_DmReceptionVisitorMerge_GROUP, keyType = OperateConstants.SubKeyType.MERGE_MAIN),
@Correlation(groupName = Reception_DmReceptionVisitorMerge_GROUP, keyType = OperateConstants.SubKeyType.MERGE_SLAVE)
})
protected Long visitorId;

/** 优先级 */
protected Integer priority;

public DmReceptionVisitorMerge(Long receptionId, Long visitorId, Integer priority) {
this.receptionId = receptionId;
this.visitorId = visitorId;
this.priority = priority;
}
}

+ 13
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/merge/MergeGroup.java View File

@@ -0,0 +1,13 @@
package com.xueyi.system.digitalmans.domain.merge;

public interface MergeGroup {

/** 设备日志关联 -》 日志 */
String Action_Resource_GROUP = "Action_Resource_GROUP";
String Skill_Action_GROUP = "Skill_Action_GROUP";

String Reception_Staff_GROUP = "Reception_Staff_GROUP";
String Reception_DmReceptionVisitorMerge_GROUP = "Reception_DmReceptionVisitorMerge_GROUP";
String Visitor_DmReceptionVisitorMerge_GROUP = "Visitor_DmReceptionVisitorMerge_GROUP";

}

+ 17
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/model/DmReceptionConverter.java View File

@@ -0,0 +1,17 @@
package com.xueyi.system.digitalmans.domain.model;

import com.xueyi.common.core.web.entity.model.BaseConverter;
import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.system.digitalmans.domain.po.DmReceptionPo;
import com.xueyi.system.digitalmans.domain.query.DmReceptionQuery;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;

/**
* 接待模式管理 对象映射器
*
* @author yinruoxi
*/
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface DmReceptionConverter extends BaseConverter<DmReceptionQuery, DmReceptionDto, DmReceptionPo> {
}

+ 62
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/po/DmReceptionPo.java View File

@@ -0,0 +1,62 @@
package com.xueyi.system.digitalmans.domain.po;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xueyi.common.core.annotation.Correlation;
import com.xueyi.common.core.annotation.Correlations;
import com.xueyi.common.core.constant.basic.OperateConstants;
import com.xueyi.common.core.web.tenant.base.TBaseEntity;
import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.common.core.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

import static com.xueyi.common.core.constant.basic.EntityConstants.REMARK;
import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Reception_Staff_GROUP;

/**
* 接待模式管理 持久化对象
*
* @author yinruoxi
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "dm_reception", excludeProperty = { REMARK })
public class DmReceptionPo extends TBaseEntity {

@Serial
private static final long serialVersionUID = 1L;

/** 负责人 */
@Excel(name = "负责人")
protected String headName;

/** 负责人id */
@Excel(name = "负责人")
@Correlations({
@Correlation(groupName = Reception_Staff_GROUP, keyType = OperateConstants.SubKeyType.MAIN)
})
protected Long headId;

/** 接待日期 */
@Excel(name = "接待日期")
protected Date receptionTime;

/** 触发状态 */
@Excel(name = "触发状态")
protected String status;

/** 开场白 */
@Excel(name = "开场白")
protected String welcome;

/** 数字人id */
@Excel(name = "数字人id")
protected Long manId;

}

+ 23
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/domain/query/DmReceptionQuery.java View File

@@ -0,0 +1,23 @@
package com.xueyi.system.digitalmans.domain.query;

import com.xueyi.system.digitalmans.domain.po.DmReceptionPo;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

/**
* 接待模式管理 数据查询对象
*
* @author yinruoxi
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DmReceptionQuery extends DmReceptionPo {

@Serial
private static final long serialVersionUID = 1L;

protected String taskTime;

}

+ 24
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/manager/IDmReceptionManager.java View File

@@ -0,0 +1,24 @@
package com.xueyi.system.digitalmans.manager;

import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.system.digitalmans.domain.merge.DmReceptionVisitorMerge;
import com.xueyi.system.digitalmans.domain.query.DmReceptionQuery;
import com.xueyi.common.web.entity.manager.IBaseManager;

import java.util.List;

/**
* 接待模式管理管理 数据封装层
*
* @author yinruoxi
*/
public interface IDmReceptionManager extends IBaseManager<DmReceptionQuery, DmReceptionDto> {

void addDeceptionVisitorMerge(Long receptionId, Long[][] visitorIds);

void editReceptionVisitorMerge(Long receptionId, Long[][] visitorIds);

List<DmReceptionVisitorMerge> selectDeceptionVisitorMerge(Long receptionId);

List<DmReceptionDto> selectReceptionTaskOpenStatus();
}

+ 145
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/manager/impl/DmReceptionManager.java View File

@@ -0,0 +1,145 @@
package com.xueyi.system.digitalmans.manager.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xueyi.common.core.constant.basic.OperateConstants;
import com.xueyi.common.core.utils.core.ArrayUtil;
import com.xueyi.common.core.utils.core.CollUtil;
import com.xueyi.common.web.entity.domain.SlaveRelation;
import com.xueyi.system.api.organize.domain.dto.SysDeptDto;
import com.xueyi.system.digitalmans.domain.merge.DmReceptionVisitorMerge;
import com.xueyi.system.digitalmans.domain.po.DmReceptionPo;
import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.system.digitalmans.domain.query.DmReceptionQuery;
import com.xueyi.system.digitalmans.domain.model.DmReceptionConverter;
import com.xueyi.system.digitalmans.mapper.DmReceptionMapper;
import com.xueyi.common.web.entity.manager.impl.BaseManagerImpl;
import com.xueyi.system.digitalmans.manager.IDmReceptionManager;
import com.xueyi.system.digitalmans.mapper.merge.DmReceptionVisitorMergeMapper;
import com.xueyi.system.organize.domain.merge.SysRoleDeptMerge;
import com.xueyi.system.organize.domain.merge.SysRolePostMerge;
import com.xueyi.system.resource.manager.impl.DmResourcesManager;
import com.xueyi.system.staff.manager.impl.DmStaffManager;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Reception_DmReceptionVisitorMerge_GROUP;
import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Reception_Staff_GROUP;



/**
* 接待模式管理管理 数据封装层处理
*
* @author yinruoxi
*/
@Component
public class DmReceptionManager extends BaseManagerImpl<DmReceptionQuery, DmReceptionDto, DmReceptionPo, DmReceptionMapper, DmReceptionConverter> implements IDmReceptionManager {


@Autowired
private DmReceptionVisitorMergeMapper dmReceptionVisitorMergeMapper;

@Override
protected List<SlaveRelation> subRelationInit() {
List result = new ArrayList<SlaveRelation>();
result.add(new SlaveRelation(Reception_Staff_GROUP, DmStaffManager.class, OperateConstants.SubOperateLimit.ONLY_SEL));
result.add(new SlaveRelation(Reception_DmReceptionVisitorMerge_GROUP, DmReceptionVisitorMergeMapper.class, DmReceptionVisitorMerge.class, OperateConstants.SubOperateLimit.ONLY_DEL));
return result;
}


@Override
public int insert(DmReceptionDto dto) {
// 判断priorities的长度,如果长度为0,返回失败
if (dto.getPriorities() == null || dto.getPriorities().length == 0) {
return 0;
} else {
int row = super.insert(dto);
if (row > 0) {
if (dto.getPriorities().length > 1) {
this.addDeceptionVisitorMerge(dto.getId(),dto.getPriorities());
}
}
return row;
}

}

@Override
public void addDeceptionVisitorMerge(Long receptionId, Long[][] visitorIds) {
if (ArrayUtil.isNotEmpty(visitorIds)) {
List<DmReceptionVisitorMerge> receptionVisitorMerges = new ArrayList<DmReceptionVisitorMerge>();
if (visitorIds == null) {
return;
}
for (int p = 1; p < visitorIds.length; p++) {
int priority = p;
List<Long> visitorList = new ArrayList<>(Arrays.asList(visitorIds[p]));
// 1.存储接待模式与访客的关联数据
receptionVisitorMerges.addAll(visitorList.stream().filter(visitorId->visitorId!=null).map(visitorId -> new DmReceptionVisitorMerge(receptionId, visitorId, priority))
.collect(Collectors.toList()));
}
// 2.在数据库插入接待模式与访客的关联数据
if (receptionVisitorMerges.size() > 0) {
dmReceptionVisitorMergeMapper.insertBatch(receptionVisitorMerges);
}

}
}

@Override
public List<DmReceptionVisitorMerge> selectDeceptionVisitorMerge(Long receptionId) {

return dmReceptionVisitorMergeMapper.selectList(Wrappers. <DmReceptionVisitorMerge>query().lambda()
.eq(DmReceptionVisitorMerge::getReceptionId,receptionId));
}

@Override
public List<DmReceptionDto> selectReceptionTaskOpenStatus() {
return baseConverter.mapperDto(baseMapper.selectList(Wrappers.<DmReceptionPo>query().lambda()
.eq(DmReceptionPo::getStatus,1)));
}

@Override
public int update(DmReceptionDto dto) {
int row = super.update(dto);
if (row > 0) {
this.editReceptionVisitorMerge(dto.getId(),dto.getPriorities());
}
return row;
}

@Override
public void editReceptionVisitorMerge(Long receptionId, Long[][] visitorIds) {
// 1.校验organizeIds是否为空 ? 删除不存在的,增加新增的 : 删除所有
if (ArrayUtil.isNotEmpty(visitorIds)) {
// 1.计算所有visitorIds的总和
List<Long> visitorIdList = new ArrayList<>();
for (int p = 1; p < visitorIds.length; p++) {
visitorIdList.addAll(Arrays.asList(visitorIds[p]));
}
// 2.删除所有任务相关数据
dmReceptionVisitorMergeMapper.delete(Wrappers.<DmReceptionVisitorMerge>query().lambda()
.eq(DmReceptionVisitorMerge::getReceptionId, receptionId));
// 3.新增所有任务相关数据
List<DmReceptionVisitorMerge> receptionVisitorMerges = new ArrayList<DmReceptionVisitorMerge>();
for (int p = 1; p < visitorIds.length; p++) {
int priority = p;
List<Long> visitorList = new ArrayList<>(Arrays.asList(visitorIds[p]));
// 1.存储接待模式与访客的关联数据
receptionVisitorMerges.addAll(visitorList.stream().filter(visitorId->visitorId!=null).map(visitorId -> new DmReceptionVisitorMerge(receptionId, visitorId, priority))
.collect(Collectors.toList()));
}
// 2.在数据库插入接待模式与访客的关联数据
if (receptionVisitorMerges.size() > 0) {
dmReceptionVisitorMergeMapper.insertBatch(receptionVisitorMerges);
}
}
}
}

+ 16
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/mapper/DmReceptionMapper.java View File

@@ -0,0 +1,16 @@
package com.xueyi.system.digitalmans.mapper;

import com.xueyi.system.digitalmans.domain.query.DmReceptionQuery;
import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.system.digitalmans.domain.po.DmReceptionPo;
import com.xueyi.common.web.entity.mapper.BaseMapper;
import com.xueyi.common.datasource.annotation.Isolate;

/**
* 接待模式管理管理 数据层
*
* @author yinruoxi
*/
@Isolate
public interface DmReceptionMapper extends BaseMapper<DmReceptionQuery, DmReceptionDto, DmReceptionPo> {
}

+ 17
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/mapper/merge/DmReceptionStaffMergeMapper.java View File

@@ -0,0 +1,17 @@
package com.xueyi.system.digitalmans.mapper.merge;

import com.xueyi.common.datasource.annotation.Isolate;
import com.xueyi.common.datasource.annotation.Master;
import com.xueyi.common.web.entity.mapper.BasicMapper;
import com.xueyi.system.digitalmans.domain.merge.DmReceptionStaffMerge;

/**
* 接待任务与负责人联表 数据层
*
* @author xueyi
*/
@Isolate
public interface DmReceptionStaffMergeMapper extends BasicMapper<DmReceptionStaffMerge> {


}

+ 14
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/mapper/merge/DmReceptionVisitorMergeMapper.java View File

@@ -0,0 +1,14 @@
package com.xueyi.system.digitalmans.mapper.merge;

import com.xueyi.common.datasource.annotation.Isolate;
import com.xueyi.common.web.entity.mapper.BasicMapper;
import com.xueyi.system.digitalmans.domain.merge.DmReceptionVisitorMerge;

/**
* 任务访客关联 数据层
*
* @author xueyi
*/
@Isolate
public interface DmReceptionVisitorMergeMapper extends BasicMapper<DmReceptionVisitorMerge> {
}

+ 16
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/IDmReceptionService.java View File

@@ -0,0 +1,16 @@
package com.xueyi.system.digitalmans.service;

import com.xueyi.system.api.digitalmans.domain.vo.DmReceptionVo;
import com.xueyi.system.digitalmans.domain.query.DmReceptionQuery;
import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.common.web.entity.service.IBaseService;

/**
* 接待模式管理管理 服务层
*
* @author yinruoxi
*/
public interface IDmReceptionService extends IBaseService<DmReceptionQuery, DmReceptionDto> {

DmReceptionVo selectReceptionTask(Long manId);
}

+ 132
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/impl/DmReceptionServiceImpl.java View File

@@ -0,0 +1,132 @@
package com.xueyi.system.digitalmans.service.impl;

import com.xueyi.common.core.constant.basic.OperateConstants;
import com.xueyi.system.api.digitalmans.domain.vo.DmReceptionVo;
import com.xueyi.system.digitalmans.domain.dto.DmReceptionDto;
import com.xueyi.system.digitalmans.domain.merge.DmReceptionVisitorMerge;
import com.xueyi.system.digitalmans.domain.query.DmReceptionQuery;
import com.xueyi.system.digitalmans.service.IDmReceptionService;
import com.xueyi.system.digitalmans.manager.IDmReceptionManager;
import com.xueyi.common.web.entity.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

/**
* 接待模式管理管理 服务层处理
*
* @author yinruoxi
*/
@Service
public class DmReceptionServiceImpl extends BaseServiceImpl<DmReceptionQuery, DmReceptionDto, IDmReceptionManager> implements IDmReceptionService {

/**
* 查询接待模式管理对象列表 | 数据权限
*
* @param reception 接待模式管理对象
* @return 接待模式管理对象集合
*/
@Override
//@DataScope(userAlias = "createBy", mapperScope = {"DmReceptionMapper"})
public List<DmReceptionDto> selectListScope(DmReceptionQuery reception) {
List<DmReceptionDto> dtoList = baseManager.selectList(reception);
for (DmReceptionDto dto : dtoList) {
List<DmReceptionVisitorMerge> rvList = baseManager.selectDeceptionVisitorMerge(dto.getId());
Long[][] visitorIds = new Long[3][5];
List<Long> first = new ArrayList<>();
List<Long> second = new ArrayList<>();
List<Long> third = new ArrayList<>();
for (DmReceptionVisitorMerge rv : rvList) {
switch (rv.getPriority()) {
case 1:
first.add(rv.getVisitorId());
break;
case 2:
second.add(rv.getVisitorId());
break;
case 3:
third.add(rv.getVisitorId());
break;
default:
break;
}
}
visitorIds[0] = first.toArray(new Long[0]);
visitorIds[1] = second.toArray(new Long[0]);
visitorIds[2] = third.toArray(new Long[0]);
dto.setPriorities(visitorIds);
}

// return dtoList;
return dtoList;
}


@Override
public int updateStatus(DmReceptionDto dto) {
// 查询原始数据
DmReceptionDto originDto = baseManager.selectById(dto.getId());
// 查询运行中的任务
List <DmReceptionDto> taskList = baseManager.selectReceptionTaskOpenStatus();
startHandle(OperateConstants.ServiceType.EDIT_STATUS, originDto, dto);
if (taskList != null && taskList.size() > 0 && dto.getStatus().equals("1")) {
for (DmReceptionDto task : taskList) {
if (task.getId().equals(dto.getId())) {
continue;
}
task.setStatus("0");
baseManager.updateStatus(task);
}
}
int row = baseManager.updateStatus(dto);
endHandle(OperateConstants.ServiceType.EDIT_STATUS, row, originDto, dto);
return row;
}

@Override
public DmReceptionVo selectReceptionTask(Long manId) {
DmReceptionQuery query = new DmReceptionQuery();
query.setManId(manId);
query.setStatus("1");
List<DmReceptionDto> dtoList = baseManager.selectList(query);
if (dtoList == null || dtoList.size() == 0) {
return null;
}
DmReceptionVo vo = new DmReceptionVo();
DmReceptionDto dto = dtoList.get(0);
vo.setName(dto.getName());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd");
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
vo.setDate(dateFormat.format(dto.getReceptionTime()));
vo.setWelcome(dto.getWelcome());
vo.setGuide(new Long[]{dto.getHeadId()});
List<DmReceptionVisitorMerge> rvList = baseManager.selectDeceptionVisitorMerge(dto.getId());
Long[][] visitorIds = new Long[3][5];
List<Long> first = new ArrayList<>();
List<Long> second = new ArrayList<>();
List<Long> third = new ArrayList<>();
for (DmReceptionVisitorMerge rv : rvList) {
switch (rv.getPriority()) {
case 1:
first.add(rv.getVisitorId());
break;
case 2:
second.add(rv.getVisitorId());
break;
case 3:
third.add(rv.getVisitorId());
break;
default:
break;
}
}
vo.setFirst(first.toArray(new Long[0]));
vo.setSecond(second.toArray(new Long[0]));
vo.setThird(third.toArray(new Long[0]));
return vo;
}
}

+ 1
- 7
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/emcs/service/BaseRedisListDataCache.java View File

@@ -6,10 +6,7 @@ import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* @author yk
@@ -45,9 +42,6 @@ public class BaseRedisListDataCache {


public void setListExpiration(String key, Duration duration) {
// 计算过期时间的秒数
long expirationSeconds = LocalDateTime.now().plus(duration).until(LocalDateTime.now(), ChronoUnit.SECONDS);
// 设置键的过期时间
redisTemplate.expire(key, expirationSeconds, TimeUnit.SECONDS);
redisTemplate.expire(key, duration);
}
}

+ 9
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/pass/controller/api/DmRecognizedRecordsApiController.java View File

@@ -3,6 +3,7 @@ package com.xueyi.system.pass.controller.api;
import com.alibaba.fastjson2.JSONObject;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedMultiRecordsDto;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedRecordsDto;
import com.xueyi.system.api.pass.feign.RemoteRecognizedRecordsService;
import com.xueyi.system.resource.controller.api.BaseApiController;
@@ -32,4 +33,12 @@ public class DmRecognizedRecordsApiController extends BaseApiController {

return recognizedRecordsFeign.uploadPass(recognizedRecordsDto, vo.getTenantId(), vo.getSourceSlave(), SecurityConstants.INNER);
}

@ResponseBody
@PostMapping(value = "/upload-multi-pass", produces = "application/json;charset=UTF-8")
public JSONObject uploads(@RequestBody DmRecognizedMultiRecordsDto recognizedMultiRecordsDto){
DeviceTenantSourceMergeVo vo = super.getDeviceTenantSourceMergeVo(recognizedMultiRecordsDto.getDevId());

return recognizedRecordsFeign.uploadMultiPass(recognizedMultiRecordsDto, vo.getTenantId(), vo.getSourceSlave(), SecurityConstants.INNER);
}
}

+ 90
- 8
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/pass/controller/api/DmRecognizedRecordsInnerApiController.java View File

@@ -1,6 +1,7 @@
package com.xueyi.system.pass.controller.api;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xueyi.common.core.web.result.R;
@@ -10,12 +11,16 @@ import com.xueyi.common.web.response.MyResponse;
import com.xueyi.common.web.utils.DateUtils;
import com.xueyi.file.api.domain.SysFile;
import com.xueyi.file.api.feign.RemoteFileService;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedMultiRecordsDto;
import com.xueyi.system.api.pass.domain.dto.DmRecognizedRecordsDto;
import com.xueyi.system.api.pass.domain.po.DmRecognizedRecordsPo;
import com.xueyi.system.api.staff.domain.po.DmStaffPo;
import com.xueyi.system.pass.domain.model.DmRecognizedRecordsConverter;
import com.xueyi.system.pass.mapper.DmRecognizedRecordsMapper;
import com.xueyi.system.resource.controller.api.BaseApiController;
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.service.impl.DmStaffServiceImpl;
import com.xueyi.system.utils.common.ImageUtil;
@@ -28,6 +33,8 @@ import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

/**
* 人员识别管理 业务处理
@@ -53,9 +60,15 @@ public class DmRecognizedRecordsInnerApiController extends BaseApiController {
@Autowired
ImageUtil imageUtil;

@Autowired
private DmResourcesServiceImpl iDmResourcesService;

@Autowired
private DmRecognizedRecordsConverter recordsConverter;

@Autowired
private FaceServiceImpl faceService;

@InnerAuth
@PostMapping(value = "/upload-pass")
public JSONObject upload(@RequestBody DmRecognizedRecordsDto recognizedRecordsDto) {
@@ -64,6 +77,7 @@ public class DmRecognizedRecordsInnerApiController extends BaseApiController {
Long userId = recognizedRecordsDto.getUserId();
String imgBase64 = recognizedRecordsDto.getImgbase64();
String sign = recognizedRecordsDto.getSign();
Integer type = recognizedRecordsDto.getType();//1:staff;2:stranger

MyResponse myResponse = commonCheck(deviceId, timestamp.doubleValue(), sign);
if (myResponse.getStatus() != 0) {
@@ -71,18 +85,22 @@ public class DmRecognizedRecordsInnerApiController extends BaseApiController {
}

DmRecognizedRecordsPo cr = recordsConverter.mapperPo(recognizedRecordsDto);
DmStaffPo emp = dmStaffMapper.selectById(userId);

if (ObjectUtils.anyNotNull(emp)) {
cr.setUserName(emp.getUserName());
cr.setDeptId(emp.getDeptId());
}
try {
cr.setRecognizedTime(DateUtils.parseLongToDate(timestamp.longValue()));
} catch (ParseException e) {
e.printStackTrace();
return output(ResponseCode.ILLEGAL_PARAMETER, "timestamp").toJSON();
}
if (type.equals(DmRecognizedRecordsDto.TYPE_STRANGER)) {
DmStaffPo emp = dmStaffMapper.selectById(userId);
if (ObjectUtils.anyNotNull(emp)) {
cr.setUserName(emp.getUserName());
cr.setDeptId(emp.getDeptId());

dmStaffService.updateOrInsertAttendance(cr);
}
}

if (StringUtils.isNotEmpty(imgBase64)) {
R<SysFile> fileResult = fileService.upload(imageUtil.base64ToMultipartFile(imgBase64));
@@ -92,11 +110,75 @@ public class DmRecognizedRecordsInnerApiController extends BaseApiController {
cr.setFaceUrl(url);
}

if (ObjectUtils.anyNotNull(emp)) {//员工不为空更新考勤
dmStaffService.updateOrInsertAttendance(cr);
}
dmRecognizedRecordsMapper.insert(cr);

return outputSuccess().toJSON();
}

@InnerAuth
@PostMapping(value = "/upload-multi-pass")
public JSONObject uploads(@RequestBody DmRecognizedMultiRecordsDto recognizedMultiRecordsDto) {
String deviceId = recognizedMultiRecordsDto.getDevId();
BigDecimal timestamp = recognizedMultiRecordsDto.getTimestamp();
String sign = recognizedMultiRecordsDto.getSign();

MyResponse myResponse = commonCheck(deviceId, timestamp.doubleValue(), sign);
if (myResponse.getStatus() != 0) {
return myResponse.toJSON();
}

List<DmRecognizedRecordsDto> dtoList = recognizedMultiRecordsDto.getRecords();

List<DmRecognizedRecordsPo> crs = new ArrayList<>();
for (DmRecognizedRecordsDto recognizedRecordsDto : dtoList) {
Long userId = recognizedRecordsDto.getUserId();
String imgBase64 = recognizedRecordsDto.getImgbase64();
Integer type = recognizedRecordsDto.getType();//1:staff;2:stranger
DmRecognizedRecordsPo cr = recordsConverter.mapperPo(recognizedRecordsDto);

try {
cr.setRecognizedTime(DateUtils.parseLongToDate(timestamp.longValue()));
} catch (ParseException e) {
e.printStackTrace();
return output(ResponseCode.ILLEGAL_PARAMETER, "timestamp").toJSON();
}
if (type.equals(DmRecognizedRecordsDto.TYPE_STRANGER)) {
DmStaffPo emp = dmStaffMapper.selectById(userId);
if (ObjectUtils.anyNotNull(emp)) {
cr.setUserName(emp.getUserName());
cr.setDeptId(emp.getDeptId());

dmStaffService.updateOrInsertAttendance(cr);
}
}
if (StringUtils.isNotEmpty(imgBase64)) {
R<SysFile> fileResult = fileService.upload(imageUtil.base64ToMultipartFile(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());
}

iDmResourcesService.addOne(dmResourcesDto);
cr.setFaceUrl(url);
cr.setResourceId(dmResourcesDto.getId());
}
crs.add(cr);
}

dmRecognizedRecordsMapper.insertBatch(crs);

return outputSuccess().toJSON();
}
}

+ 17
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/manager/impl/DmVisitorsManager.java View File

@@ -1,14 +1,25 @@
package com.xueyi.system.staff.manager.impl;

import com.xueyi.common.core.constant.basic.OperateConstants;
import com.xueyi.common.web.entity.domain.SlaveRelation;
import com.xueyi.common.web.entity.manager.impl.BaseManagerImpl;
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto;
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo;
import com.xueyi.system.digitalmans.domain.merge.DmReceptionVisitorMerge;
import com.xueyi.system.digitalmans.mapper.merge.DmReceptionVisitorMergeMapper;
import com.xueyi.system.resource.manager.impl.DmResourcesManager;
import com.xueyi.system.staff.domain.model.DmVisitorsConverter;
import com.xueyi.system.staff.domain.query.DmVisitorsQuery;
import com.xueyi.system.staff.manager.IDmVisitorsManager;
import com.xueyi.system.staff.mapper.DmVisitorsMapper;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Action_Resource_GROUP;
import static com.xueyi.system.digitalmans.domain.merge.MergeGroup.Visitor_DmReceptionVisitorMerge_GROUP;

/**
* 访客管理 数据封装层处理
*
@@ -16,4 +27,10 @@ import org.springframework.stereotype.Component;
*/
@Component
public class DmVisitorsManager extends BaseManagerImpl<DmVisitorsQuery, DmVisitorsDto, DmVisitorsPo, DmVisitorsMapper, DmVisitorsConverter> implements IDmVisitorsManager {
@Override
protected List<SlaveRelation> subRelationInit() {
List result = new ArrayList<SlaveRelation>();
result.add(new SlaveRelation(Visitor_DmReceptionVisitorMerge_GROUP, DmReceptionVisitorMergeMapper.class, DmReceptionVisitorMerge.class, OperateConstants.SubOperateLimit.ONLY_DEL));
return result;
}
}

Loading…
Cancel
Save