From 172d5240d264e1ffe174fa5f8082f6a6947773c1 Mon Sep 17 00:00:00 2001 From: yk Date: Sun, 4 Feb 2024 16:36:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=E5=91=98=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=B3=A8=E5=86=8C=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=9C=AC=E5=9C=B0=E5=8C=96=E4=BA=BA=E8=84=B8=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=EF=BC=8C=E5=85=BC=E5=AE=B9=E4=B8=9C=E6=96=B9=E5=BE=AE?= =?UTF-8?q?=E9=93=B6OA=E6=8E=A5=E5=8F=A3=E5=90=8C=E6=AD=A5=EF=BC=88?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E9=80=9A=E8=BF=87=E5=90=8D=E5=AD=97=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../digitalmans/domain/po/DmVisitorsPo.java | 8 +++ .../organize/domain/dto/SysEnterpriseDto.java | 1 + .../staff/domain/dto/DmPersonFeatureDto.java | 7 +++ .../staff/domain/dto/DmStaffCommonDto.java | 36 ++++++++++++ .../staff/domain/po/DmPersonFeaturePo.java | 58 +++++++++++++++++++ .../system/api/staff/domain/po/DmStaffPo.java | 5 ++ .../api/staff/domain/vo/DmStaffFeature.java | 2 - .../service/ISysEnterpriseService.java | 2 + .../impl/SysEnterpriseServiceImpl.java | 15 +++++ .../api/DmStaffInnerApiController.java | 43 ++++++++++---- .../domain/query/DmPersonFeatureQuery.java | 20 +++++++ .../staff/mapper/DmPersonFeatureMapper.java | 17 ++++++ 12 files changed, 200 insertions(+), 14 deletions(-) create mode 100644 xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmPersonFeatureDto.java create mode 100644 xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmPersonFeaturePo.java create mode 100644 xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/query/DmPersonFeatureQuery.java create mode 100644 xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/mapper/DmPersonFeatureMapper.java diff --git a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/po/DmVisitorsPo.java b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/po/DmVisitorsPo.java index 5786b891..8c09608e 100644 --- a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/po/DmVisitorsPo.java +++ b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/po/DmVisitorsPo.java @@ -76,4 +76,12 @@ public class DmVisitorsPo extends TBaseEntity { private Boolean flexVisit; + public DmVisitorsPo() { + + } + + public DmVisitorsPo(Long id) { + this.id = id; + } + } \ No newline at end of file diff --git a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/organize/domain/dto/SysEnterpriseDto.java b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/organize/domain/dto/SysEnterpriseDto.java index aabe729f..f4c9722f 100644 --- a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/organize/domain/dto/SysEnterpriseDto.java +++ b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/organize/domain/dto/SysEnterpriseDto.java @@ -28,4 +28,5 @@ public class SysEnterpriseDto extends SysEnterprisePo { return StrUtil.equals(AuthorityConstants.TenantType.ADMIN.getCode(), isLessor); } + public Long defaultDeptId; } diff --git a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmPersonFeatureDto.java b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmPersonFeatureDto.java new file mode 100644 index 00000000..2ed68ac1 --- /dev/null +++ b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmPersonFeatureDto.java @@ -0,0 +1,7 @@ +package com.xueyi.system.api.staff.domain.dto; + +import com.xueyi.system.api.staff.domain.po.DmPersonFeaturePo; + +public class DmPersonFeatureDto extends DmPersonFeaturePo { + +} diff --git a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmStaffCommonDto.java b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmStaffCommonDto.java index a12068d2..6266f008 100644 --- a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmStaffCommonDto.java +++ b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/dto/DmStaffCommonDto.java @@ -1,7 +1,13 @@ package com.xueyi.system.api.staff.domain.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto; +import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; +import com.xueyi.system.api.staff.domain.po.DmStaffPo; import lombok.Data; +import java.util.Date; + /** * 熟人介绍的生人数据的 数据传输对象 * @@ -20,8 +26,38 @@ public class DmStaffCommonDto { private String staffBase64Img; + private String faceFeature; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date birthDate; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date hireDate; + private String devId; + public DmStaffPo initStaff(Long id){ + DmStaffPo staffPo = new DmStaffPo(id); + staffPo.setNickName(this.getStaffName()); + staffPo.setUserName(this.getStaffName()); + staffPo.setUserType(this.getStaffType()); + staffPo.setHireDate(this.getHireDate()); + staffPo.setBirthDate(this.getBirthDate()); + staffPo.setSex(this.getGender()!=null ? String.valueOf(this.getGender()):null); + return staffPo; + } + + public DmVisitorsPo initVisitor(Long id){ + DmVisitorsPo v= new DmVisitorsPo(id); + v.setName(this.getStaffName()); + v.setNickname(this.getStaffName()); + v.setType(DmVisitorsDto.TYPE_NORMAL_VISITOR); + v.setGender(this.getGender()); + v.setType(Long.parseLong(this.getStaffType())); + return v; + } + + @Override public String toString() { diff --git a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmPersonFeaturePo.java b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmPersonFeaturePo.java new file mode 100644 index 00000000..1b37a253 --- /dev/null +++ b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmPersonFeaturePo.java @@ -0,0 +1,58 @@ +package com.xueyi.system.api.staff.domain.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xueyi.common.core.annotation.Excel; +import com.xueyi.common.core.web.tenant.base.TBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +import static com.xueyi.common.core.constant.basic.EntityConstants.CREATE_BY; +import static com.xueyi.common.core.constant.basic.EntityConstants.CREATE_TIME; +import static com.xueyi.common.core.constant.basic.EntityConstants.DEL_FLAG; +import static com.xueyi.common.core.constant.basic.EntityConstants.NAME; +import static com.xueyi.common.core.constant.basic.EntityConstants.REMARK; +import static com.xueyi.common.core.constant.basic.EntityConstants.SORT; +import static com.xueyi.common.core.constant.basic.EntityConstants.STATUS; +import static com.xueyi.common.core.constant.basic.EntityConstants.UPDATE_BY; +import static com.xueyi.common.core.constant.basic.EntityConstants.UPDATE_TIME; + +/** + * 人员 持久化对象 + * + * @author xueyi + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "dm_person_feature", excludeProperty = { STATUS, UPDATE_BY, SORT, CREATE_BY, DEL_FLAG, CREATE_TIME, UPDATE_TIME, REMARK, NAME }) +public class DmPersonFeaturePo extends TBaseEntity { + + public static final Integer PERSON_TYPE_STAFF = 1; + public static final Integer PERSON_TYPE_VISITOR = 2; + + @Serial + private static final long serialVersionUID = 1L; + + /** 用户编码 */ + @Excel(name = "用户编码") + protected Long id; + + /** 用户账号 */ + @Excel(name = "用户类型") + protected Integer type; + + + /** 所属资源ID */ + @Excel(name = "所属组织ID") + protected String feature; + + public DmPersonFeaturePo(){ + super(); + } + public DmPersonFeaturePo(Long id, Integer type, String feature){ + this.id = id; + this.type = type; + this.feature = feature; + } +} \ No newline at end of file diff --git a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmStaffPo.java b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmStaffPo.java index 559db56c..3e62fdd7 100644 --- a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmStaffPo.java +++ b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/po/DmStaffPo.java @@ -94,4 +94,9 @@ public class DmStaffPo extends TBaseEntity { private Long tenantId; + + public DmStaffPo() {} + public DmStaffPo(Long id) { + this.id = id; + } } \ No newline at end of file diff --git a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/vo/DmStaffFeature.java b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/vo/DmStaffFeature.java index 410a6f5d..d9ec2d8d 100644 --- a/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/vo/DmStaffFeature.java +++ b/xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/staff/domain/vo/DmStaffFeature.java @@ -1,9 +1,7 @@ package com.xueyi.system.api.staff.domain.vo; -import cn.hutool.core.date.DateTime; import lombok.Data; import lombok.NoArgsConstructor; -import net.sf.jsqlparser.expression.DateTimeLiteralExpression; import java.time.LocalDateTime; import java.util.List; diff --git a/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/organize/service/ISysEnterpriseService.java b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/organize/service/ISysEnterpriseService.java index b4c2325a..716d59ca 100644 --- a/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/organize/service/ISysEnterpriseService.java +++ b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/organize/service/ISysEnterpriseService.java @@ -18,4 +18,6 @@ public interface ISysEnterpriseService extends IBaseService extPo = digitalmanService.devInfo(devId, SecurityContextHolder.getEnterpriseId(), SecurityContextHolder.getSourceName(), SecurityConstants.INNER); + return extPo.getData().getDeptId(); + } } diff --git a/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmStaffInnerApiController.java b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmStaffInnerApiController.java index 66af7d56..03cfcfa5 100644 --- a/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmStaffInnerApiController.java +++ b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/controller/api/DmStaffInnerApiController.java @@ -1,19 +1,23 @@ package com.xueyi.system.staff.controller.api; +import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xueyi.common.core.constant.basic.SqlConstants; import com.xueyi.common.core.web.result.R; import com.xueyi.common.security.annotation.InnerAuth; import com.xueyi.common.web.constant.ResponseCode; -import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto; import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo; import com.xueyi.system.api.staff.domain.dto.DmStaffCommonDto; +import com.xueyi.system.api.staff.domain.po.DmPersonFeaturePo; import com.xueyi.system.api.staff.domain.po.DmStaffPo; +import com.xueyi.system.organize.service.impl.SysEnterpriseServiceImpl; import com.xueyi.system.resource.controller.api.MyBaseApiController; import com.xueyi.system.resource.domain.dto.DmResourcesDto; import com.xueyi.system.resource.service.impl.DmResourcesServiceImpl; +import com.xueyi.system.staff.mapper.DmPersonFeatureMapper; import com.xueyi.system.staff.mapper.DmStaffMapper; import com.xueyi.system.staff.mapper.DmVisitorsMapper; import com.xueyi.system.staff.service.impl.DmStaffServiceImpl; @@ -83,19 +87,21 @@ public class DmStaffInnerApiController extends MyBaseApiController { return output(ResponseCode.DATA_NOT_EXISTS,"指定phone的员工").toJSON(); } + @Autowired + private DmPersonFeatureMapper featureMapper; + + @Autowired + private SysEnterpriseServiceImpl enterpriseService; + @InnerAuth @PostMapping(value = "new-staff") @ResponseBody public com.alibaba.fastjson2.JSONObject newStaff(@RequestBody DmStaffCommonDto commonDto){ + Long id = IdUtil.getSnowflakeNextId(); //访客 if (commonDto.getStaffType().equals(DmStaffCommonDto.TYPE_STRANGER) || commonDto.getStaffType().equals(DmStaffCommonDto.TYPE_VIP_STRANGER)) { - DmVisitorsPo v = new DmVisitorsPo(); - v.setName(commonDto.getStaffName()); - v.setNickname(commonDto.getStaffName()); - v.setType(DmVisitorsDto.TYPE_NORMAL_VISITOR); - v.setGender(commonDto.getGender()); - v.setType(Long.parseLong(commonDto.getStaffType())); + DmVisitorsPo v = commonDto.initVisitor(id); //兼容熟人介绍生人,传递访客照片 if (StringUtils.isNotEmpty(commonDto.getStaffBase64Img())) { @@ -110,13 +116,20 @@ public class DmStaffInnerApiController extends MyBaseApiController { } } + if (StringUtils.isNotEmpty(commonDto.getFaceFeature())) {//访客传递特征值 + DmPersonFeaturePo featurePo = new DmPersonFeaturePo(id, DmPersonFeaturePo.PERSON_TYPE_VISITOR, commonDto.getFaceFeature()); + featureMapper.insert(featurePo); + } + dmVisitorsMapper.addOne(v); } else {//员工 - DmStaffPo staffPo = new DmStaffPo(); - staffPo.setNickName(commonDto.getStaffName()); - staffPo.setUserName(commonDto.getStaffName()); - staffPo.setUserType(commonDto.getStaffType()); - staffPo.setSex(commonDto.getGender()!=null ? String.valueOf(commonDto.getGender()):null); + //判断员工是否已同步,按姓名来判断 + DmStaffPo po = dmStaffMapper.selectOne(new QueryWrapper().eq("user_name", commonDto.getStaffName()).last("limit 1")); + if (po != null) { + return output(ResponseCode.SAVE_FAILED, "该员工已被同步").toJSON(); + } + DmStaffPo staffPo = commonDto.initStaff(id); + staffPo.setDeptId(enterpriseService.selectDefaultDeptId(commonDto.getDevId())); if (StringUtils.isNotEmpty(commonDto.getStaffBase64Img())) { R r = iDmResourcesService.addBase64Img(commonDto.getStaffBase64Img(), "staff-"+commonDto.getStaffName()); @@ -128,6 +141,12 @@ public class DmStaffInnerApiController extends MyBaseApiController { return output(ResponseCode.FILE_UPLOAD_FAIL, r.getMsg()).toJSON(); } } + + if (StringUtils.isNotEmpty(commonDto.getFaceFeature())) {//人员传递特征值 + DmPersonFeaturePo featurePo = new DmPersonFeaturePo(id, DmPersonFeaturePo.PERSON_TYPE_STAFF, commonDto.getFaceFeature()); + featureMapper.insert(featurePo); + } + dmStaffMapper.insert(staffPo); } diff --git a/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/query/DmPersonFeatureQuery.java b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/query/DmPersonFeatureQuery.java new file mode 100644 index 00000000..18bda489 --- /dev/null +++ b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/domain/query/DmPersonFeatureQuery.java @@ -0,0 +1,20 @@ +package com.xueyi.system.staff.domain.query; + +import com.xueyi.system.api.staff.domain.po.DmPersonFeaturePo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 人员 脸部特征值表 + * + * @author xueyi + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class DmPersonFeatureQuery extends DmPersonFeaturePo { + + @Serial + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/mapper/DmPersonFeatureMapper.java b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/mapper/DmPersonFeatureMapper.java new file mode 100644 index 00000000..e9d3296a --- /dev/null +++ b/xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/mapper/DmPersonFeatureMapper.java @@ -0,0 +1,17 @@ +package com.xueyi.system.staff.mapper; + +import com.xueyi.common.datasource.annotation.Isolate; +import com.xueyi.common.web.entity.mapper.BaseMapper; +import com.xueyi.system.api.staff.domain.dto.DmPersonFeatureDto; +import com.xueyi.system.api.staff.domain.po.DmPersonFeaturePo; +import com.xueyi.system.staff.domain.query.DmPersonFeatureQuery; + +/** + * 人员人脸特征值 数据层 + * + * @author xueyi + */ +@Isolate +public interface DmPersonFeatureMapper extends BaseMapper { + +} \ No newline at end of file