@ -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)));
// }
// }
// }
// //TODO 每个成员都关注此项目(暂时)
// addUserAttention(userIdSet, sysProject);
// } else {
// throw new BaseException(CodeEnum.WBS_NOT_MEMBER_SHEET);
// 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));
// }
//成员
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 ;
}
}