Reviewed-on: http://39.105.23.186:3000/develop/digimeta-MultiSaas/pulls/19tags/B.1.0.2.7_20230725_release
| @@ -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; | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| package com.xueyi.system.api.holiday.domain.vo; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @NoArgsConstructor | |||
| public class HolidayRspEntity { | |||
| } | |||
| @@ -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(); | |||
| } | |||
| @@ -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(); | |||
| } | |||
| }; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -71,4 +71,6 @@ public class DmRecognizedRecordsPo extends TBaseEntity { | |||
| @Excel(name = "所属组织ID") | |||
| protected Long deptId; | |||
| protected Long resourceId; | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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(); | |||
| } | |||
| }; | |||
| } | |||
| } | |||
| @@ -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"; | |||
| @@ -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) { | |||
| @@ -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 | |||
| @@ -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(); | |||
| @@ -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(); | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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> { | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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> { | |||
| } | |||
| @@ -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(); | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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(); | |||
| } | |||
| } | |||
| @@ -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"; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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"; | |||
| } | |||
| @@ -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> { | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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(); | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -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> { | |||
| } | |||
| @@ -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> { | |||
| } | |||
| @@ -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> { | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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(); | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||