|
|
@ -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<ProMember> stakeholderList = new ArrayList<>();
|
|
|
|
// if (ObjectUtil.isNotNull(memberSheet)) {
|
|
|
|
// Set<Long> 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<String,String> mapName = new HashMap<>();
|
|
|
|
// Map<String,String> mapPhone = new HashMap<>();
|
|
|
|
// //存储奖惩干系人信息
|
|
|
|
// Map<String,String> sMapName = new HashMap<>();
|
|
|
|
// Map<String,String> sMapPhone = new HashMap<>();
|
|
|
|
//存成员
|
|
|
|
List<ProMember> memberList = new ArrayList<>(); |
|
|
|
//存奖惩干系人
|
|
|
|
List<ProMember> stakeholderList = new ArrayList<>(); |
|
|
|
//存储添加的成员和奖惩干系人的userId,为了关注此项目
|
|
|
|
Set<Long> 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<ProMember> stakeholderList, String stakeholderName, String phone) { |
|
|
@ -1094,4 +1121,21 @@ public class ExportWbsService implements IExportWbsService{ |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 判断成员和手机号是否重复 |
|
|
|
*/ |
|
|
|
private boolean memberAndPhoneRepeat(List<ProMember> 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; |
|
|
|
} |
|
|
|
} |
|
|
|