|
@@ -0,0 +1,325 @@
|
|
|
+package com.citu.module.menduner.system.old;
|
|
|
+
|
|
|
+import com.citu.framework.common.util.date.DateUtils;
|
|
|
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
+import com.citu.framework.tenant.core.util.TenantUtils;
|
|
|
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
|
|
|
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseUserBindDO;
|
|
|
+import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
|
|
|
+import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
|
|
|
+import com.citu.module.menduner.system.dal.dataobject.position.PositionDO;
|
|
|
+import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
|
|
|
+import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseMapper;
|
|
|
+import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseUserBindMapper;
|
|
|
+import com.citu.module.menduner.system.dal.mysql.job.JobAdvertisedMapper;
|
|
|
+import com.citu.module.menduner.system.dal.mysql.person.PersonInfoMapper;
|
|
|
+import com.citu.module.menduner.system.dal.mysql.position.PositionMapper;
|
|
|
+import com.citu.module.menduner.system.dal.mysql.user.MdeUserMapper;
|
|
|
+import com.citu.module.menduner.system.enums.MendunerStatusEnum;
|
|
|
+import com.citu.module.menduner.system.enums.enterprise.EnterpriseUserTypeEnum;
|
|
|
+import com.citu.module.menduner.system.old.dataobject.OldMdeDepartment;
|
|
|
+import com.citu.module.menduner.system.old.dataobject.OldMdeJobAdvertised;
|
|
|
+import com.citu.module.menduner.system.old.dataobject.OldMdePosition;
|
|
|
+import com.citu.module.menduner.system.old.dataobject.OldMdeUser;
|
|
|
+import com.citu.module.menduner.system.old.mysql.OldMdeDepartmentMapper;
|
|
|
+import com.citu.module.menduner.system.old.mysql.OldMdeJobAdvertisedMapper;
|
|
|
+import com.citu.module.menduner.system.old.mysql.OldMdePositionMapper;
|
|
|
+import com.citu.module.menduner.system.old.mysql.OldMdeUserMapper;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 门墩儿 老平台的数据同步
|
|
|
+ **/
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+public class MdeOldSyncService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OldMdeDepartmentMapper oldMdeDepartmentMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OldMdePositionMapper oldPositionMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private PositionMapper positionMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OldMdeUserMapper oldUserMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MdeUserMapper mdeUserMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private PersonInfoMapper personInfoMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private PasswordEncoder passwordEncoder;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EnterpriseUserBindMapper enterpriseUserBindMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EnterpriseMapper enterpriseMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OldMdeJobAdvertisedMapper oldJobAdvertisedMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private JobAdvertisedMapper jobAdvertisedMapper;
|
|
|
+
|
|
|
+ private String url = "https://www.mendunerhr.com/";
|
|
|
+
|
|
|
+
|
|
|
+ public void run() {
|
|
|
+ // 同步职位信息
|
|
|
+ // syncPosition();
|
|
|
+ // 同步用户信息
|
|
|
+ syncUser();
|
|
|
+ // syncJob();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void execute(Runnable runnable) {
|
|
|
+ TenantUtils.execute(155L, runnable);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void syncPosition() {
|
|
|
+
|
|
|
+ // 部门 or 职位类型
|
|
|
+ List<OldMdeDepartment> oldDepartmentList = oldMdeDepartmentMapper.selectList(OldMdeDepartment::getDelFlag, 0);
|
|
|
+
|
|
|
+ List<OldMdePosition> oldMdePositionList = oldPositionMapper.selectList(OldMdePosition::getDelFlag, 0);
|
|
|
+
|
|
|
+ Long top = 8L;
|
|
|
+ PositionDO topPosition = positionMapper.selectOne(PositionDO::getNameEn, "old");
|
|
|
+ if (null == topPosition) {
|
|
|
+ execute(() -> {
|
|
|
+ positionMapper.insert(PositionDO.builder()
|
|
|
+ .id(top)
|
|
|
+ .parentId(0L)
|
|
|
+ .nameCn("old")
|
|
|
+ .nameEn("old")
|
|
|
+ .level(1)
|
|
|
+ .sort(0)
|
|
|
+ .build());
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ Long leader = 9L;
|
|
|
+ oldDepartmentList.stream().forEach(
|
|
|
+ oldMdeDepartment -> {
|
|
|
+ // 查询是否存在
|
|
|
+ PositionDO positionDO = null;
|
|
|
+
|
|
|
+ if (0 == oldMdeDepartment.getDepdId()) {
|
|
|
+ positionDO = positionMapper.selectOne(PositionDO::getId, leader);
|
|
|
+ } else {
|
|
|
+ positionDO = positionMapper.selectOne(PositionDO::getId, oldMdeDepartment.getDepdId());
|
|
|
+ }
|
|
|
+ if (null != positionDO) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ execute(() -> {
|
|
|
+ positionMapper.insert(PositionDO.builder()
|
|
|
+ .id(0 == oldMdeDepartment.getDepdId() ? leader : Long.valueOf(oldMdeDepartment.getDepdId()))
|
|
|
+ .parentId(top)
|
|
|
+ .nameCn(oldMdeDepartment.getDepdNameCn())
|
|
|
+ .nameEn(oldMdeDepartment.getDepdNameEn())
|
|
|
+ .level(2)
|
|
|
+ .sort(0)
|
|
|
+ .build());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ oldMdePositionList.forEach(oldMdePosition -> {
|
|
|
+ // 查询是否存在
|
|
|
+ PositionDO positionDO = positionMapper.selectOne(PositionDO::getId, oldMdePosition.getPositionId());
|
|
|
+ if (null != positionDO) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ PositionDO insertionDO = PositionDO.builder()
|
|
|
+ .id(Long.valueOf(oldMdePosition.getPositionId()))
|
|
|
+ .parentId(Long.valueOf(oldMdePosition.getDepdId()))
|
|
|
+ .nameCn(oldMdePosition.getPositionNameCn())
|
|
|
+ .nameEn(oldMdePosition.getPositionNameEn())
|
|
|
+ .level(oldMdePosition.getPositionGrade())
|
|
|
+ .requirement(oldMdePosition.getRequirement())
|
|
|
+ .content(oldMdePosition.getDescribe())
|
|
|
+ .sort(0)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ if (0 == oldMdePosition.getDepdId()) {
|
|
|
+ insertionDO.setLevel(2);
|
|
|
+ insertionDO.setParentId(leader);
|
|
|
+ } else {
|
|
|
+ insertionDO.setLevel(3);
|
|
|
+ }
|
|
|
+
|
|
|
+ execute(() -> {
|
|
|
+ // 插入职位类型
|
|
|
+ positionMapper.insert(insertionDO);
|
|
|
+ });
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void syncUser() {
|
|
|
+
|
|
|
+ // 个人用户
|
|
|
+ List<OldMdeUser> userList = oldUserMapper.selectList(new LambdaQueryWrapperX<OldMdeUser>()
|
|
|
+ .eq(OldMdeUser::getDelFlag, 0)
|
|
|
+ );
|
|
|
+
|
|
|
+ // 新增用户 or 人才基本信息
|
|
|
+ userList.stream().forEach(oldMdeUser -> {
|
|
|
+ MdeUserDO userDO = mdeUserMapper.selectOne(MdeUserDO::getId, oldMdeUser.getUserCode());
|
|
|
+
|
|
|
+ MdeUserDO insertionDO = MdeUserDO.builder()
|
|
|
+ .id(oldMdeUser.getUserCode())
|
|
|
+ .username(oldMdeUser.getUserName())
|
|
|
+ // 重置密码手机号后6位
|
|
|
+ .password(passwordEncoder.encode("123456"))
|
|
|
+ .email(oldMdeUser.getEmail())
|
|
|
+ // 有座机,大坑
|
|
|
+ .phone(oldMdeUser.getUserName())
|
|
|
+ .avatar(null==oldMdeUser.getHeadPortrait()?null:url + oldMdeUser.getHeadPortrait())
|
|
|
+ .status(MendunerStatusEnum.ENABLE.getStatus())
|
|
|
+ .build();
|
|
|
+
|
|
|
+
|
|
|
+ PersonInfoDO personInfoDO = personInfoMapper.getByUserId(oldMdeUser.getUserCode());
|
|
|
+ personInfoDO = PersonInfoDO.builder()
|
|
|
+ .id(personInfoDO != null ? personInfoDO.getId() : null)
|
|
|
+ .userId(oldMdeUser.getUserCode())
|
|
|
+ .name(oldMdeUser.getName())
|
|
|
+ .foreignName(oldMdeUser.getForeignName())
|
|
|
+ // 有座机,大坑
|
|
|
+ .phone(oldMdeUser.getUserName().contains("+")?null:oldMdeUser.getUserName())
|
|
|
+ .email(oldMdeUser.getEmail())
|
|
|
+ .firstWorkTime(null == oldMdeUser.getFirstWork() ? null : oldMdeUser.getFirstWork().atStartOfDay())
|
|
|
+ .jobStatus(oldMdeUser.getWorkStatus())
|
|
|
+ .advantage(oldMdeUser.getIntroduction())
|
|
|
+ .avatar(null==oldMdeUser.getHeadPortrait()?null:url + oldMdeUser.getHeadPortrait())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ if (null != oldMdeUser.getBirthday()) {
|
|
|
+ personInfoDO.setBirthday(DateUtils.of(oldMdeUser.getBirthday(), FORMAT_YEAR_MONTH_DAY).atStartOfDay());
|
|
|
+ }
|
|
|
+
|
|
|
+ PersonInfoDO finalPersonInfoDO = personInfoDO;
|
|
|
+ execute(() -> {
|
|
|
+ personInfoMapper.insertOrUpdate(finalPersonInfoDO);
|
|
|
+ });
|
|
|
+
|
|
|
+ if (null != userDO) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ execute(() -> {
|
|
|
+ mdeUserMapper.insertOrUpdate(insertionDO);
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ // 企业用户
|
|
|
+ List<OldMdeUser> enterpriseUserList = userList.stream().filter(c -> c.getIdentityFlag().equals("1")).collect(Collectors.toList());
|
|
|
+ enterpriseUserList.forEach(oldMdeUser -> {
|
|
|
+ EnterpriseUserBindDO userDO = enterpriseUserBindMapper.selectOne(EnterpriseUserBindDO::getUserId, oldMdeUser.getUserCode());
|
|
|
+
|
|
|
+ // 借用用户编号作为企业编号匹配唯一键(旧平台只会存在人-企业一对一)
|
|
|
+ EnterpriseDO enterpriseDO = enterpriseMapper.selectOne(EnterpriseDO::getId, oldMdeUser.getUserCode());
|
|
|
+
|
|
|
+
|
|
|
+ EnterpriseDO enterpriseInsertionDO = EnterpriseDO.builder()
|
|
|
+ .id(null==enterpriseDO?oldMdeUser.getUserCode():enterpriseDO.getId())
|
|
|
+ .parentId(0L)
|
|
|
+ .name(oldMdeUser.getName())
|
|
|
+ .foreignName(oldMdeUser.getForeignName())
|
|
|
+ .anotherName(oldMdeUser.getName())
|
|
|
+ .website(oldMdeUser.getWebsite())
|
|
|
+ .introduce(oldMdeUser.getIntroduction())
|
|
|
+ .contact(oldMdeUser.getEntContacts())
|
|
|
+ .phone(oldMdeUser.getEntPhone())
|
|
|
+ .logoUrl(null==oldMdeUser.getHeadPortrait()?null:url + oldMdeUser.getHeadPortrait())
|
|
|
+ // 营业执照暂时放这
|
|
|
+ .albumList(null==oldMdeUser.getImage()?null:Collections.singletonList(url +oldMdeUser.getImage()))
|
|
|
+ .status(MendunerStatusEnum.ENABLE.getStatus())
|
|
|
+ .build();
|
|
|
+
|
|
|
+
|
|
|
+ EnterpriseUserBindDO userInsertionDO = EnterpriseUserBindDO.builder()
|
|
|
+ .id(null==userDO?oldMdeUser.getUserCode():userDO.getId())
|
|
|
+ .enterpriseId(oldMdeUser.getUserCode())
|
|
|
+ .userId(oldMdeUser.getUserCode())
|
|
|
+ .name(oldMdeUser.getEntContacts())
|
|
|
+ .avatar(null==oldMdeUser.getHeadPortrait()?null:url + oldMdeUser.getHeadPortrait())
|
|
|
+ .email(oldMdeUser.getUserName())
|
|
|
+ .password((passwordEncoder.encode(oldMdeUser.getUserName())))
|
|
|
+ .phone(oldMdeUser.getEntPhone())
|
|
|
+ .userType(EnterpriseUserTypeEnum.ADMIN.getType())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ execute(() -> {
|
|
|
+ // 插入企业信息
|
|
|
+ enterpriseMapper.insertOrUpdate(enterpriseInsertionDO);
|
|
|
+ });
|
|
|
+ execute(() -> {
|
|
|
+ // 插入企业用户绑定信息
|
|
|
+ enterpriseUserBindMapper.insertOrUpdate(userInsertionDO);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void syncJob() {
|
|
|
+ // 职位信息
|
|
|
+ List<OldMdeJobAdvertised> jobList = oldJobAdvertisedMapper.selectList(OldMdeJobAdvertised::getDelFlag, 0);
|
|
|
+ jobList.stream().forEach(oldMdeJobAdvertised -> {
|
|
|
+ JobAdvertisedDO jobAdvertisedDO = jobAdvertisedMapper.selectOne(JobAdvertisedDO::getId, oldMdeJobAdvertised.getJobId());
|
|
|
+
|
|
|
+ JobAdvertisedDO insertionDO = JobAdvertisedDO.builder()
|
|
|
+ .id(null==jobAdvertisedDO?oldMdeJobAdvertised.getJobId():jobAdvertisedDO.getId())
|
|
|
+ .name(oldMdeJobAdvertised.getJobName())
|
|
|
+ .content(oldMdeJobAdvertised.getJobDescribe())
|
|
|
+ .requirement(oldMdeJobAdvertised.getJobRequirement())
|
|
|
+ .positionId(Long.valueOf(oldMdeJobAdvertised.getPositionId()))
|
|
|
+ .userId(oldMdeJobAdvertised.getPublisher())
|
|
|
+ .enterpriseId(oldMdeJobAdvertised.getPublisher())
|
|
|
+ .address(oldMdeJobAdvertised.getWorkExperience())
|
|
|
+ .longitude(String.valueOf(oldMdeJobAdvertised.getAddLongitude()))
|
|
|
+ .latitude(String.valueOf(oldMdeJobAdvertised.getAddLatitude()))
|
|
|
+ // 不知道 学历要求和工作经验要求能否对准
|
|
|
+ .eduType(oldMdeJobAdvertised.getEducation())
|
|
|
+ .expType(oldMdeJobAdvertised.getWorkExperience())
|
|
|
+ .payFrom(oldMdeJobAdvertised.getPayFrom())
|
|
|
+ .payTo(oldMdeJobAdvertised.getPayTo())
|
|
|
+ .status(oldMdeJobAdvertised.getJobStatus())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ execute(() -> {
|
|
|
+ jobAdvertisedMapper.insertOrUpdate(insertionDO);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void syncPersonExtend() {
|
|
|
+ // 人才教育经历、工作经验、投递记录信息
|
|
|
+ }
|
|
|
+}
|