diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java index 24a14f76..382bb1e9 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java @@ -128,7 +128,12 @@ public interface ProRoleDao extends ProRoleMapper{ */ List selectRoleOfNoLook(Long roleId); - + /** + * 查找项目内的奖惩干系人信息 + * @param projectId + * @return + */ + ProRole getMoneyStakeholder(@Param("projectId") Long projectId); // /** diff --git a/tall/src/main/java/com/ccsens/tall/service/ExcelService.java b/tall/src/main/java/com/ccsens/tall/service/ExcelService.java index fb87af12..6fcfa8fd 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ExcelService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ExcelService.java @@ -618,7 +618,7 @@ public class ExcelService implements IExcelService { } } //TODO 每个成员都关注此项目(暂时) - addUserAttention(userIdSet, sysProject); + addUserAttention(userIdSet, sysProject.getId()); } else { throw new BaseException(CodeEnum.WBS_NOT_MEMBER_SHEET); } @@ -627,13 +627,14 @@ public class ExcelService implements IExcelService { /** * 项目成员表内的每个人都关注此项目(暂时,当前版本) */ - private void addUserAttention(Set userIdList, SysProject sysProject) { + @Override + public void addUserAttention(Set userIdList, Long sysProjectId) { if (CollectionUtil.isNotEmpty(userIdList)) { for (Long userId : userIdList) { UserAttention userAttention = new UserAttention(); userAttention.setId(snowflake.nextId()); userAttention.setUserId(userId); - userAttention.setProjectId(sysProject.getId()); + userAttention.setProjectId(sysProjectId); userAttentionService.saveAttention(userAttention); } } diff --git a/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java b/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java index 8d15fcc0..0c61de9a 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java @@ -59,15 +59,13 @@ public class ExportWbsService implements IExportWbsService{ @Resource private SysPluginDao sysPluginDao; @Resource - private TaskDeliverService taskDeliverService; - @Resource - private ProTaskDetailService taskDetailService; - @Resource private ProRoleService proRoleService; @Resource private IUserService userService; @Resource private Snowflake snowflake; + @Resource + private IExcelService excelService; @Override public String exportWbs(Long projectId) throws Exception { @@ -973,109 +971,138 @@ public class ExportWbsService implements IExportWbsService{ @Override public void importMember(String path, Long currentUserId, Long projectId) throws Exception { -// //验证权限 -// int power = proRoleService.selectPowerByRoleName(currentUserId, projectId); -// if (power < 2) { -// throw new BaseException(CodeEnum.NOT_POWER); -// } -// //获取excel表格 -// InputStream is = new FileInputStream(path); -// XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); -// //获取项目成员表 -// XSSFSheet memberSheet = xssfWorkbook.getSheet("项目成员表"); -// -// //读取WBS表 -// List stakeholderList = new ArrayList<>(); -// if (ObjectUtil.isNotNull(memberSheet)) { -// Set userIdSet = new HashSet<>(); -// -// for (int i = 1; i <= memberSheet.getLastRowNum(); i++) { -// XSSFRow row = memberSheet.getRow(i); -// if(ObjectUtil.isNull(row)){ -// continue; -// } -// String memberCell = ExcelUtil.getCellValue(row.getCell(1)); -// String phoneCell = ExcelUtil.getCellValue(row.getCell(2)); -// String stakeholderCell = ExcelUtil.getCellValue(row.getCell(3)); -// String stakeholderPhoneCell = ExcelUtil.getCellValue(row.getCell(4)); -// ProMember stakeholder = null; -// ProMember member; -// //成员名为空,跳至下一行 -// if ((StrUtil.isEmpty(memberCell))) { -// continue; -// } -// //手机号不能为空 -// if (StrUtil.isNotEmpty(memberCell) && StrUtil.isEmpty(phoneCell)) { -// throw new BaseException(CodeEnum.WBS_NOT_PHONE.addMsg(memberSheet.getSheetName(), (i+1),memberCell)); -// } -// //判断手机号格式 -// String regex ="^[1]([3-9])[0-9]{9}$"; -// if (StrUtil.isEmpty(phoneCell) || !phoneCell.matches(regex)){ -// throw new BaseException(CodeEnum.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(),(i+1),memberCell)); -// } -// -// //添加奖惩干系人 -// if (StrUtil.isNotEmpty(stakeholderCell)) { -// //判断奖惩干系人的手机号是否为空 -// if ( StrUtil.isEmpty(stakeholderPhoneCell)){ -// throw new BaseException(CodeEnum.WBS_NOT_PHONE.addMsg(memberSheet.getSheetName(), (i+1),stakeholderCell)); -// } -// //判断奖惩干系人的手机号格式是否正确 -// if (!stakeholderPhoneCell.matches(regex)){ -// throw new BaseException(CodeEnum.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(),(i+1),stakeholderCell)); -// } -// if (!stakeholderWithPhone(stakeholderList, stakeholderCell, stakeholderPhoneCell)) { -// Long userId = userService.selectUserIdByPhone(stakeholderPhoneCell); -// if (ObjectUtil.isNotNull(userId)) { -// userIdSet.add(userId); -// } -// stakeholder = new ProMember(); -// stakeholder.setId(snowflake.nextId()); -// stakeholder.setProjectId(projectId); -// stakeholder.setUserId(userId); -// stakeholder.setNickname(stakeholderCell); -// stakeholder.setPhone(stakeholderPhoneCell); -// proMemberDao.insertSelective(stakeholder); -// stakeholderList.add(stakeholder); + //验证权限 + int power = proRoleService.selectPowerByRoleName(currentUserId, projectId); + if (power < 2) { + throw new BaseException(CodeEnum.NOT_POWER); + } + //获取excel表格 + InputStream is = new FileInputStream(path); + XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); + //获取项目成员表 + XSSFSheet memberSheet = xssfWorkbook.getSheet("项目成员表"); + if (ObjectUtil.isNull(memberSheet)) { + throw new BaseException(CodeEnum.WBS_NOT_MEMBER_SHEET); + } + +// //存储表内的成员信息 +// Map mapName = new HashMap<>(); +// Map mapPhone = new HashMap<>(); +// //存储奖惩干系人信息 +// Map sMapName = new HashMap<>(); +// Map sMapPhone = new HashMap<>(); + //存成员 + List memberList = new ArrayList<>(); + //存奖惩干系人 + List stakeholderList = new ArrayList<>(); + //存储添加的成员和奖惩干系人的userId,为了关注此项目 + Set userIdSet = new HashSet<>(); + //查询项目内的奖惩干系人角色 + ProRole proStakeholder = proRoleDao.getMoneyStakeholder(projectId); + //手机号格式 + String regex ="^[1]([3-9])[0-9]{9}$"; + //循环读取信息 + for (int i = 1; i <= memberSheet.getLastRowNum(); i++) { + XSSFRow row = memberSheet.getRow(i); + if (ObjectUtil.isNull(row)) { + continue; + } + String memberCell = ExcelUtil.getCellValue(row.getCell(1)); + String phoneCell = ExcelUtil.getCellValue(row.getCell(2)); + String stakeholderCell = ExcelUtil.getCellValue(row.getCell(3)); + String stakeholderPhoneCell = ExcelUtil.getCellValue(row.getCell(4)); + //成员名不存在,跳过 + if ((StrUtil.isEmpty(memberCell))) { + continue; + } + //成员手机号不能为空 + if (StrUtil.isEmpty(phoneCell)) { + throw new BaseException(CodeEnum.WBS_NOT_PHONE.addMsg(memberSheet.getSheetName(), (i + 1), memberCell)); + } + //验证手机号格式 + if (!phoneCell.matches(regex)) { + throw new BaseException(CodeEnum.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(), (i + 1), memberCell)); + } + //处理奖惩干系人 + ProMember stakeholder = null; + if (StrUtil.isNotEmpty(stakeholderCell)) { + //判断奖惩干系人的手机号是否为空 + if (StrUtil.isEmpty(stakeholderPhoneCell)) { + throw new BaseException(CodeEnum.WBS_NOT_PHONE.addMsg(memberSheet.getSheetName(), (i + 1), stakeholderCell)); + } + //判断奖惩干系人的手机号格式是否正确 + if (!stakeholderPhoneCell.matches(regex)) { + throw new BaseException(CodeEnum.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(), (i + 1), stakeholderCell)); + } + if (!stakeholderWithPhone(stakeholderList, stakeholderCell, stakeholderPhoneCell)) { + Long userId = userService.selectUserIdByPhone(stakeholderPhoneCell); + if (ObjectUtil.isNotNull(userId)) { + userIdSet.add(userId); + } + stakeholder = new ProMember(); + stakeholder.setId(snowflake.nextId()); + stakeholder.setProjectId(projectId); + stakeholder.setUserId(userId); + stakeholder.setNickname(stakeholderCell); + stakeholder.setPhone(stakeholderPhoneCell); + proMemberDao.insertSelective(stakeholder); + stakeholderList.add(stakeholder); + + ProMemberRole proMemberRole = new ProMemberRole(); + proMemberRole.setId(snowflake.nextId()); + proMemberRole.setMemberId(stakeholder.getId()); + proMemberRole.setRoleId(proStakeholder.getId()); + proMemberRoleDao.insertSelective(proMemberRole); + } else { + throw new BaseException(CodeEnum.WBS_STAKEHOLDER_PHONE.addMsg(memberSheet.getSheetName(), (i + 1), stakeholderCell)); + } + } + //检查成员在此项目中是否已存在 + ProMemberExample nameExample = new ProMemberExample(); + nameExample.createCriteria().andProjectIdEqualTo(projectId).andNicknameEqualTo(memberCell); + long l2 = proMemberDao.countByExample(nameExample); + if(l2 > 0){ + throw new BaseException(CodeEnum.WBS_REPEAT_MEMBER_PHONE.addMsg(memberSheet.getSheetName(),(i+1),memberCell)); + } + //校验手机号是否已存在 + ProMemberExample phoneExample = new ProMemberExample(); + phoneExample.createCriteria().andProjectIdEqualTo(projectId).andPhoneEqualTo(phoneCell); + long l1 = proMemberDao.countByExample(phoneExample); + if(l1 > 0){ + throw new BaseException(CodeEnum.WBS_REPEAT_MEMBER_PHONE.addMsg(memberSheet.getSheetName(),(i+1),phoneCell)); + } +// ProMemberExample example = new ProMemberExample(); +// ProMemberExample.Criteria c1 = example.createCriteria(); +// c1.andProjectIdEqualTo(projectId).andPhoneEqualTo(phoneCell); // -// ProMemberRole proMemberRole = new ProMemberRole(); -// proMemberRole.setId(snowflake.nextId()); -// proMemberRole.setMemberId(stakeholder.getId()); -// proMemberRole.setRoleId(stakeholderId); -// proMemberRoleDao.insertSelective(proMemberRole); -// } else { -// throw new BaseException(CodeEnum.WBS_STAKEHOLDER_PHONE.addMsg(memberSheet.getSheetName(),(i+1),stakeholderCell)); -// } -// } -// //成员 -// if (StrUtil.isNotEmpty(memberCell)) { -// if (!memberAndPhoneRepeat(proMembers, memberCell, phoneCell)) { -// Long userId = userService.selectUserIdByPhone(phoneCell); -// if (ObjectUtil.isNotNull(userId)) { -// userIdSet.add(userId); -// } -// member = new ProMember(); -// member.setId(snowflake.nextId()); -// member.setProjectId(sysProject.getId()); -// member.setUserId(userId); -// member.setNickname(memberCell); -// member.setPhone(phoneCell); -// if (ObjectUtil.isNotNull(stakeholder)) { -// member.setStakeholderId(stakeholder.getId()); -// } -// proMemberService.saveMember(member); -// proMembers.add(member); -//// //创建者依据project的creatorId判断,不需要添加成员 -// } else { -// throw new BaseException(CodeEnum.WBS_REPEAT_MEMBER_PHONE.addMsg(memberSheet.getSheetName(),(i+1))); -// } -// } +// ProMemberExample.Criteria c2 = example.createCriteria(); +// c2.andProjectIdEqualTo(projectId).andNicknameEqualTo(memberCell); +// example.or(c2); +// long l3 = proMemberDao.countByExample(example); +// if(l3 > 0){ +// throw new BaseException(CodeEnum.WBS_REPEAT_MEMBER_PHONE.addMsg(memberSheet.getSheetName(),(i+1),phoneCell)); // } -// //TODO 每个成员都关注此项目(暂时) -// addUserAttention(userIdSet, sysProject); -// } else { -// throw new BaseException(CodeEnum.WBS_NOT_MEMBER_SHEET); -// } + //成员 + if (!memberAndPhoneRepeat(memberList, memberCell, phoneCell)) { + Long userId = userService.selectUserIdByPhone(phoneCell); + if (ObjectUtil.isNotNull(userId)) { + userIdSet.add(userId); + } + ProMember member = new ProMember(); + member.setId(snowflake.nextId()); + member.setProjectId(projectId); + member.setUserId(userId); + member.setNickname(memberCell); + member.setPhone(phoneCell); + if (ObjectUtil.isNotNull(stakeholder)) { + member.setStakeholderId(stakeholder.getId()); + } + proMemberDao.insertSelective(member); + memberList.add(member); + } + } + //TODO 每个成员都关注此项目(暂时) + excelService.addUserAttention(userIdSet, projectId); } private boolean stakeholderWithPhone(List stakeholderList, String stakeholderName, String phone) { @@ -1094,4 +1121,21 @@ public class ExportWbsService implements IExportWbsService{ } return false; } + + /** + * 判断成员和手机号是否重复 + */ + private boolean memberAndPhoneRepeat(List proMembers, String memberName, String phone) { + if (CollectionUtil.isNotEmpty(proMembers)) { + for (ProMember proMember : proMembers) { + if (proMember.getNickname().equalsIgnoreCase(memberName)) { + return true; + } + if (proMember.getPhone().equalsIgnoreCase(phone)) { + return true; + } + } + } + return false; + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/IExcelService.java b/tall/src/main/java/com/ccsens/tall/service/IExcelService.java index f509df29..b3e5f369 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IExcelService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IExcelService.java @@ -1,10 +1,12 @@ package com.ccsens.tall.service; +import com.ccsens.tall.bean.po.SysProject; import com.ccsens.tall.bean.vo.ProjectVo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.http.Part; +import java.util.Set; public interface IExcelService { /** @@ -36,4 +38,10 @@ public interface IExcelService { */ void saveWbsExcelFile(Long userId,Long projectId,String filePath, String fileName,Long fileSize,Long wpsFileId); + /** + * 用户关注项目 + * @param userIdList + * @param projectId + */ + void addUserAttention(Set userIdList, Long projectId); } diff --git a/tall/src/main/resources/mapper_dao/ProRoleDao.xml b/tall/src/main/resources/mapper_dao/ProRoleDao.xml index 2ade565d..71a80495 100644 --- a/tall/src/main/resources/mapper_dao/ProRoleDao.xml +++ b/tall/src/main/resources/mapper_dao/ProRoleDao.xml @@ -462,4 +462,17 @@ WHERE r.rec_status = 0 + \ No newline at end of file