package com.gs.xky.service.Impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gs.xky.dto.EmployeeInfo; import com.gs.xky.entity.MesStaff; import com.gs.xky.entity.SysUser; import com.gs.xky.mapper.MesStaffMapper; import com.gs.xky.service.MesStaffService; import com.gs.xky.service.SysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @author 28567 * @description 针对表【MES_STAFF(员工信息表)】的数据库操作Service实现 * @createDate 2025-02-17 20:59:36 */ @Service @RequiredArgsConstructor @Transactional(rollbackFor = Exception.class) public class MesStaffServiceImpl extends ServiceImpl implements MesStaffService { private final SysUserService sysUserService; private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @Override public boolean SaveStaff(List employeeInfos) { List sysUsers = new ArrayList<>(); List mesStaffs = new ArrayList<>(); for (EmployeeInfo employeeInfo : employeeInfos) { MesStaff mesStaff = getMesStaff(employeeInfo); SysUser user = getUser(employeeInfo, mesStaff.getId()); sysUsers.add(user); mesStaffs.add(mesStaff); } // 批量插入或更新 return batchInsert(sysUsers, mesStaffs); } private MesStaff getMesStaff(EmployeeInfo employeeInfo) { MesStaff mesStaff = new MesStaff(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(MesStaff::getRemark4, employeeInfo.getPersonId()); MesStaff one = getOne(wrapper, false); if (one != null) { mesStaff.setId(one.getId()); } mesStaff.setStaffNo(employeeInfo.getEmployeeId()); mesStaff.setStaffName(employeeInfo.getTrueName()); mesStaff.setPositionCode(employeeInfo.getNames()); mesStaff.setKeyPosts("否"); if (employeeInfo.getIsCore() != null && employeeInfo.getIsCore() == 1) { mesStaff.setKeyPosts("是"); } // 处理日期字段 try { if (StrUtil.isNotEmpty(employeeInfo.getAttendOnDate())) { Date startDate = sdf.parse(employeeInfo.getAttendOnDate()); mesStaff.setStartDate(startDate); } if (StrUtil.isNotEmpty(employeeInfo.getDimissionDate())) { Date separationTime = sdf.parse(employeeInfo.getDimissionDate()); mesStaff.setSeparationTime(separationTime); } } catch (ParseException e) { throw new RuntimeException("日期格式不正确", e); } // 赋值其他信息 // mesStaff.setFforbidStatus("1"); // if ("离职".equals(employeeInfo.getState()) || "退休".equals(employeeInfo.getState())) { // mesStaff.setFforbidStatus("0"); // } mesStaff.setFforbidStatus(employeeInfo.getState()); mesStaff.setDepartmentName(employeeInfo.getUnitName()); mesStaff.setRemark(StrUtil.isNotEmpty(employeeInfo.getLaowugongsi()) ? "派遣工" : "正式工"); mesStaff.setRemark3(employeeInfo.getCUnitName()); mesStaff.setRemark4(employeeInfo.getPersonId()); return mesStaff; } private SysUser getUser(EmployeeInfo staff, Long id) { SysUser sysUser = new SysUser(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SysUser::getFcode, staff.getEmployeeId()) // .eq(SysUser::getFname, staff.getTrueName()) ; SysUser one = sysUserService.getOne(wrapper, false); if (one == null) { // 映射员工ID sysUser.setSid(id); } else { sysUser.setSid(one.getSid()); sysUser.setFid(one.getFid()); } // 映射员工编号 sysUser.setFcode(staff.getEmployeeId()); // 映射员工姓名 sysUser.setFname(staff.getTrueName()); // 设置初始密码 123456 sysUser.setFpassword("8+()./,"); // 设置权限级别 sysUser.setLever(0); // 设置公司代码 sysUser.setFcompany("1000"); // 设置工厂代码 sysUser.setFfactory("1000"); // 设置删除标志 sysUser.setDelFlag(0L); // 设置设备相关标志 sysUser.setDev(0); // 设置测试相关标志 sysUser.setTet(0); // 设置生产相关标志 sysUser.setPrd(1); // 设置管理标志 sysUser.setIsmanager(0); // 设置收购标志 sysUser.setIsacq(0); // 设置扩展字段 sysUser.setExpField9("1020"); // 设置质量检测用户标志 sysUser.setQmUser(0); // 设置用户状态 sysUser.setStatus(0); // 设置离职标志 sysUser.setIsdeparture(0); // 设置检查标志 sysUser.setCheckFlag(0L); // 设置扩展字段12 sysUser.setExpFiel12(0L); // 设置首次登录标志 sysUser.setFirstLogin(0); // 设置创建日期 sysUser.setCreateDate(new Date()); // 设置密码修改时间 sysUser.setPswEditTime(new Date()); return sysUser; } private boolean batchInsert(List sysUsers, List mesStaffs) { // 批量检查 SysUser 是否存在 List sysUserSids = sysUsers.stream().map(SysUser::getSid).collect(Collectors.toList()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(SysUser::getSid, sysUserSids); List existingUsers = sysUserService.list(wrapper); // 分离需要插入的新用户 List newUserList = sysUsers.stream().filter(user -> existingUsers.stream().noneMatch(e -> e.getSid().equals(user.getSid()))).collect(Collectors.toList()); // 批量插入新用户 if (!newUserList.isEmpty()) { sysUserService.saveBatch(newUserList); } // 批量删除旧的 MesStaff 记录 //baseMapper.deleteStaff(); // 批量插入新的 MesStaff 记录 if (!mesStaffs.isEmpty()) { saveBatch(mesStaffs); } //baseMapper.updateStaff(); return true; } @Override public boolean UpdateStaff(List employeeInfos) { List sysUsers = new ArrayList<>(); List mesStaffs = new ArrayList<>(); for (EmployeeInfo employeeInfo : employeeInfos) { MesStaff mesStaff = getMesStaff(employeeInfo); SysUser user = getUser(employeeInfo, mesStaff.getId()); sysUsers.add(user); mesStaffs.add(mesStaff); } // 批量插入或更新 boolean b = saveOrUpdateBatch(mesStaffs) && sysUserService.saveOrUpdateBatch(sysUsers); baseMapper.updateStaff(); return b; } }