From 7ecdc99fc1e31c170e6aa9f81b07414d45483337 Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Thu, 18 Jun 2020 10:43:21 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=A4=B4=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/application-util-test.yml | 4 +- .../com/ccsens/tall/bean/dto/MemberDto.java | 32 ++++ .../com/ccsens/tall/bean/dto/UserDto.java | 46 +++++- .../com/ccsens/tall/config/SpringConfig.java | 1 + .../tall/persist/dao/SysRingMsgDao.java | 2 + .../tall/service/IProMemberService.java | 8 + .../com/ccsens/tall/service/IRingService.java | 2 +- .../ccsens/tall/service/IUserInfoService.java | 32 ++++ .../com/ccsens/tall/service/IUserService.java | 24 ++- .../ccsens/tall/service/ProMemberService.java | 132 +++++++-------- .../com/ccsens/tall/service/RingService.java | 75 +++++---- .../ccsens/tall/service/UserInfoService.java | 150 ++++++++++++++++++ .../com/ccsens/tall/service/UserService.java | 127 ++++++++------- .../com/ccsens/tall/util/TallConstant.java | 12 ++ .../com/ccsens/tall/web/ExcelController.java | 2 - .../com/ccsens/tall/web/MemberController.java | 38 +++++ .../com/ccsens/tall/web/RingController.java | 6 +- .../com/ccsens/tall/web/UserController.java | 12 +- .../ccsens/tall/web/UserInfoController.java | 70 ++++++++ tall/src/main/resources/application-dev.yml | 1 + tall/src/main/resources/application-test.yml | 10 +- tall/src/main/resources/application.yml | 4 +- tall/src/main/resources/druid-test.yml | 8 +- .../resources/mapper_dao/SysOperationDao.xml | 2 +- .../resources/mapper_dao/SysRingMsgDao.xml | 56 +++++++ .../main/java/com/ccsens/util/CodeEnum.java | 6 +- .../ccsens/util/UploadFileUtil_Servlet3.java | 3 +- .../java/com/ccsens/util/WebConstant.java | 5 +- 28 files changed, 671 insertions(+), 199 deletions(-) create mode 100644 tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java create mode 100644 tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java create mode 100644 tall/src/main/java/com/ccsens/tall/service/UserInfoService.java create mode 100644 tall/src/main/java/com/ccsens/tall/web/MemberController.java create mode 100644 tall/src/main/java/com/ccsens/tall/web/UserInfoController.java diff --git a/cloudutil/src/main/resources/application-util-test.yml b/cloudutil/src/main/resources/application-util-test.yml index 929fc03c..a52717f4 100644 --- a/cloudutil/src/main/resources/application-util-test.yml +++ b/cloudutil/src/main/resources/application-util-test.yml @@ -20,8 +20,8 @@ eureka: service-url: # 指定eureka server通信地址,注意/eureka/小尾巴不能少 #defaultZone: http://admin:admin@peer1:8761/eureka/,http://admin:admin@peer2:8762/eureka/ - defaultZone: http://admin:admin@192.168.0.99:7010/eureka/ -# defaultZone: http://admin:admin@test.tall.wiki:7010/eureka/ +# defaultZone: http://admin:admin@192.168.0.99:7010/eureka/ + defaultZone: http://admin:admin@test.tall.wiki:7010/eureka/ instance: # 是否注册IP到eureka server,如不指定或设为false,那就回注册主机名到eureka server prefer-ip-address: true diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java new file mode 100644 index 00000000..300e6fd7 --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java @@ -0,0 +1,32 @@ +package com.ccsens.tall.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * @author 逗 + */ +@Data +public class MemberDto { + @Data + @ApiModel("添加评论") + public static class SaveMember{ + @ApiModelProperty("项目id") + private Long projectId; + @ApiModelProperty("成员名") + private String memberName; + @ApiModelProperty("成员手机号") + private String phone; + @ApiModelProperty("所属角色的id") + private List roleId; + @ApiModelProperty("奖惩干系人id") + private Long stakeholderId; + } + +} diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java index ddcc9765..2b5373b3 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java @@ -75,9 +75,24 @@ public class UserDto { private String password; } - //注册 @Data - @ApiModel + @ApiModel("通过账号修改密码") + public static class UpdatePasswordByAccount{ + @ApiModelProperty("账号") + @NotEmpty(message = "账号不能为空") + private String account; + @ApiModelProperty("旧密码") + @NotEmpty(message = "旧密码不能为空.") + @Pattern(regexp="^[a-zA-Z0-9._-]{6,20}$",message="密码长度需在6~20之间,不能使用汉字,不能包含特殊字符") + private String passwordOld; + @ApiModelProperty("新密码") + @NotEmpty(message = "新密码不能为空") + @Pattern(regexp="^[a-zA-Z0-9._-]{6,20}$",message="密码长度需在6~20之间,不能使用汉字,不能包含特殊字符") + private String passwordNew; + } + + @Data + @ApiModel("手机号注册") public static class UserSignup{ @ApiModelProperty("手机号") @NotEmpty(message = "手机号不能为空") @@ -97,9 +112,9 @@ public class UserDto { @ApiModelProperty("来源 0:默认注册,1:HT病人注册") private byte source = WebConstant.Regist.SOURCE; } - //注册 + @Data - @ApiModel + @ApiModel("注册") public static class UserSignupSystem{ @ApiModelProperty("账号") private String account; @@ -144,4 +159,27 @@ public class UserDto { @ApiModelProperty("语言") private String language; } + + @Data + @ApiModel("修改登录账号") + public static class UpdateAccount{ + @ApiModelProperty("手机号") + @NotEmpty(message = "手机号不能为空") + @Pattern(regexp="^[1]([3-9])[0-9]{9}$",message="请输入正确的手机号") + private String phone; + @ApiModelProperty("验证码") + @NotEmpty(message = "验证码不能为空.") + private String smsCode; + @ApiModelProperty("账号") + @NotEmpty(message = "新账号不能为空.") + private String account; + } + + @Data + @ApiModel("修改昵称") + public static class UpdateNickname{ + @ApiModelProperty("昵称") + @NotEmpty(message = "新昵称不能为空.") + private String nickname; + } } diff --git a/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java b/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java index 74197a67..6755c3ed 100644 --- a/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java +++ b/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java @@ -137,6 +137,7 @@ public class SpringConfig implements WebMvcConfigurer { .excludePathPatterns("/users/smscode") .excludePathPatterns("/users/signup/**") .excludePathPatterns("/users/password") + .excludePathPatterns("/users/password/account") .excludePathPatterns("/users/account") .excludePathPatterns("/users/token") .excludePathPatterns("/users/claims") diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/SysRingMsgDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/SysRingMsgDao.java index bec16750..c19f7ae3 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/SysRingMsgDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/SysRingMsgDao.java @@ -15,4 +15,6 @@ public interface SysRingMsgDao extends SysRingMsgMapper { List selectRoleIdByUserId(@Param("userId")Long userId, @Param("projectId")Long projectId); List ringReceiveRole(@Param("messageId")Long messageId); + + List selectRingInfoByRingMsgId(@Param("userId")Long userId, @Param("projectId")Long projectId, @Param("msgId")Long msgId); } diff --git a/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java b/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java index e1009abd..493832ef 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java @@ -1,5 +1,6 @@ package com.ccsens.tall.service; +import com.ccsens.tall.bean.dto.MemberDto; import com.ccsens.tall.bean.po.ProMember; import com.ccsens.tall.bean.po.ProRole; import com.ccsens.tall.bean.vo.MemberVo; @@ -29,4 +30,11 @@ public interface IProMemberService { List getMemberIdByProjectId(Long projectId); MemberVo.MemberInfo getUserInfoByUserId(Long userId); + + /** + * 添加成员 + * @param currentUserId userId + * @param saveMember 项目id,角色id,成员姓名和手机号等 + */ + void saveProMember(Long currentUserId, MemberDto.SaveMember saveMember) throws Exception; } diff --git a/tall/src/main/java/com/ccsens/tall/service/IRingService.java b/tall/src/main/java/com/ccsens/tall/service/IRingService.java index f88ff876..0f9dbca2 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IRingService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IRingService.java @@ -12,5 +12,5 @@ public interface IRingService { PageInfo getRingInfo(Long currentUserId, RingDto.GetRingDto getRingDto); - void readRingMsg(Long currentUserId, RingDto.MessageId message) throws JsonProcessingException; + List readRingMsg(Long currentUserId, RingDto.MessageId message) throws JsonProcessingException; } diff --git a/tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java b/tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java new file mode 100644 index 00000000..fbd953ba --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java @@ -0,0 +1,32 @@ +package com.ccsens.tall.service; + +import com.ccsens.tall.bean.dto.UserDto; +import com.ccsens.util.NotSupportedFileTypeException; + +import javax.servlet.http.Part; + +/** + * @author 逗 + */ +public interface IUserInfoService { + /** + * 修改登录的账号 + * @param userId 用户id + * @param changeAccount 验证码和新账号 + */ + void updateAccount(Long userId, UserDto.UpdateAccount changeAccount); + + /** + * 修改昵称 + * @param userId 用户id + * @param updateNickname 新昵称 + */ + void updateNickname(Long userId, UserDto.UpdateNickname updateNickname); + + /** + * 上传头像 + * @param currentUserId userId + * @param file 上传的文件 + */ + void uploadAvatarUrl(Long currentUserId, Part file) throws Exception; +} \ No newline at end of file diff --git a/tall/src/main/java/com/ccsens/tall/service/IUserService.java b/tall/src/main/java/com/ccsens/tall/service/IUserService.java index 87bf61fb..7147b182 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IUserService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IUserService.java @@ -1,17 +1,19 @@ package com.ccsens.tall.service; - - - import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.dto.UserDto; import com.ccsens.tall.bean.po.SysUser; import com.ccsens.tall.bean.vo.UserVo; import com.ccsens.util.WebConstant; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; import java.util.List; import java.util.Map; +/** + * @author 逗 + */ public interface IUserService { UserVo.UserSign signin(WebConstant.CLIENT_TYPE clientType, WebConstant.IDENTIFY_TYPE identifyType, String identifier, String credential, String clientIp, String redirect) throws Exception; @@ -42,8 +44,23 @@ public interface IUserService { void updateAccount(UserDto.Account account); + /** + * 通过手机号修改密码 + * @param passwordDto 手机号验证码 + */ void updatePassword(UserDto.UpdatePassword passwordDto) throws Exception; + /** + * 通过账号密码修改密码 + * @param passwordDto 账号旧密码和新密码 + */ + void updatePasswordByAccount(UserDto.UpdatePasswordByAccount passwordDto) throws Exception; + + /** + * 通过手机号查找userId + * @param phoneCell 手机号 + * @return userId + */ Long selectUserIdByPhone(String phoneCell)throws Exception; String selectAccountByPhone(String phone)throws Exception; @@ -80,4 +97,5 @@ public interface IUserService { UserVo.Account systemRegister(UserDto.UserSignupSystem userSignup); String getUserNameByUserId(Long userId); + } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java b/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java index e64a62ea..ec801469 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java @@ -2,7 +2,10 @@ package com.ccsens.tall.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; +import com.ccsens.tall.bean.dto.MemberDto; +import com.ccsens.tall.bean.dto.MemberRoleDto; import com.ccsens.tall.bean.po.*; import com.ccsens.tall.bean.vo.MemberVo; import com.ccsens.tall.bean.vo.ProjectVo; @@ -11,12 +14,11 @@ import com.ccsens.util.CodeEnum; import com.ccsens.util.WebConstant; import com.ccsens.util.exception.BaseException; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import java.lang.reflect.Member; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -24,18 +26,24 @@ import java.util.List; @Service @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public class ProMemberService implements IProMemberService { - @Autowired + @Resource private ProMemberDao proMemberDao; - @Autowired + @Resource private ProRoleDao proRoleDao; - @Autowired + @Resource private ProMemberRoleDao proMemberRoleDao; - @Autowired - private IUserService userService; - @Autowired + @Resource private SysUserDao userDao; - @Autowired + @Resource private SysAuthDao authDao; + @Resource + private ProRoleService proRoleService; + @Resource + private IUserService userService; + @Resource + private Snowflake snowflake; + @Resource + private UserAttentionDao userAttentionDao; @Override @@ -46,75 +54,6 @@ public class ProMemberService implements IProMemberService { @Override public List selectMembersByProjectId(Long projectId) throws Exception { List members = proMemberDao.selectMembersByProjectId(projectId); -// List members = new ArrayList<>(); -// ProjectVo.MembersByProject member = null; -// List belongRoleList = null; -// ProjectVo.MembersByProject.BelongRole belongRole = null; -// ProMemberExample memberExample = new ProMemberExample(); -// memberExample.createCriteria().andProjectIdEqualTo(projectId).andStakeholderIdIsNull(); -// List memberList = proMemberDao.selectByExample(memberExample); -// if(CollectionUtil.isNotEmpty(memberList)){ -// for(ProMember proMember:memberList){ -// member = new ProjectVo.MembersByProject(); -// member.setMemberId(proMember.getId()); -// member.setName(proMember.getNickname()); -// member.setPhone(proMember.getPhone()); -// member.setUserId(proMember.getUserId()); -// } -// } -// -// //查找所有角色 -// ProRoleExample roleExample = new ProRoleExample(); -// roleExample.createCriteria().andProjectIdEqualTo(projectId); -// List roleList = proRoleDao.selectByExample(roleExample); -// if(CollectionUtil.isNotEmpty(roleList)){ -// for(ProRole role :roleList){ -// if(!role.getName().equals(WebConstant.ROLE_NAME.AllMember.phase)&&!role.getName().equals(WebConstant.ROLE_NAME.MVP.phase)) { -// //查找角色下所有成员 -// ProMemberRoleExample memberRoleExample = new ProMemberRoleExample(); -// memberRoleExample.createCriteria().andRoleIdEqualTo(role.getId()); -// List memberRoleList = proMemberRoleDao.selectByExample(memberRoleExample); -// if(CollectionUtil.isNotEmpty(memberRoleList)){ -// for (ProMemberRole memberRole:memberRoleList){ -// ProMember proMember = proMemberDao.selectByPrimaryKey(memberRole.getMemberId()); -// if(ObjectUtil.isNotNull(proMember)){ -// boolean flag = false; -// if (CollectionUtil.isNotEmpty(members)) { -// for (ProjectVo.MembersByProject membersByProject : members) { -// if (membersByProject.getPhone().equals(proMember.getPhone())) { -// belongRole = new ProjectVo.MembersByProject.BelongRole(); -// belongRole.setRoleId(role.getId()); -// belongRole.setRoleName(role.getName()); -// membersByProject.getBelongRole().add(belongRole); -// flag = true; -// break; -// } -// } -// } -// if (!flag) { -// member = new ProjectVo.MembersByProject(); -// member.setMemberId(proMember.getId()); -// member.setName(proMember.getNickname()); -// member.setPhone(proMember.getPhone()); -// member.setUserId(proMember.getUserId()); -// String mAccount = userService.selectAccountByPhone(member.getPhone()); -// member.setAccount(mAccount); -// -// belongRoleList = new ArrayList<>(); -// belongRole = new ProjectVo.MembersByProject.BelongRole(); -// belongRole.setRoleId(role.getId()); -// belongRole.setRoleName(role.getName()); -// belongRoleList.add(belongRole); -// member.setBelongRole(belongRoleList); -// -// members.add(member); -// } -// } -// } -// } -// } -// } -// } return members; } @@ -289,4 +228,41 @@ public class ProMemberService implements IProMemberService { } return memberIdList; } + + @Override + public void saveProMember(Long currentUserId, MemberDto.SaveMember saveMember) throws Exception { + int power = proRoleService.selectPowerByRoleName(currentUserId, saveMember.getProjectId()); + if (power > 1) { + //通过手机号查找用户 + Long userId = userService.selectUserIdByPhone(saveMember.getPhone()); + //添加成员 + ProMember proMember = new ProMember(); + proMember.setId(snowflake.nextId()); + proMember.setProjectId(saveMember.getProjectId()); + proMember.setNickname(saveMember.getMemberName()); + proMember.setUserId(userId); + proMember.setStakeholderId(saveMember.getStakeholderId()); + proMemberDao.insertSelective(proMember); + //添加成员与角色的关联 + if(CollectionUtil.isNotEmpty(saveMember.getRoleId())){ + saveMember.getRoleId().forEach(roleId -> { + ProMemberRole proMemberRole = new MemberRoleDto(); + proMemberRole.setId(snowflake.nextId()); + proMemberRole.setRoleId(roleId); + proMemberRole.setMemberId(proMember.getId()); + proMemberRoleDao.insertSelective(proMemberRole); + }); + } + //添加用户关注项目信息 + if(ObjectUtil.isNotNull(userId)) { + UserAttention userAttention = new UserAttention(); + userAttention.setId(snowflake.nextId()); + userAttention.setUserId(userId); + userAttention.setProjectId(saveMember.getProjectId()); + userAttentionDao.insertSelective(userAttention); + } + } else { + throw new BaseException(CodeEnum.NOT_POWER); + } + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/RingService.java b/tall/src/main/java/com/ccsens/tall/service/RingService.java index f88c3540..1e0735f1 100644 --- a/tall/src/main/java/com/ccsens/tall/service/RingService.java +++ b/tall/src/main/java/com/ccsens/tall/service/RingService.java @@ -27,8 +27,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.*; -import java.util.function.Consumer; /** * @author 逗 @@ -36,23 +36,24 @@ import java.util.function.Consumer; @Slf4j @Service @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) -public class RingService implements IRingService{ - @Autowired +public class RingService implements IRingService { + @Resource private Snowflake snowflake; - @Autowired + @Resource private SysRingMsgDao sysRingMsgDao; - @Autowired + @Resource private SysRingSendDao sysRingSendDao; - @Autowired + @Resource private IUserService userService; - @Autowired + @Resource private RabbitTemplate rabbitTemplate; /** * 发送ring消息 + * * @param currentUserId 当前用户userid - * @param ringSendDto 发送的消息内容 + * @param ringSendDto 发送的消息内容 */ @Override public void sendRingMsg(Long currentUserId, RingDto.RingSendDto ringSendDto) throws Exception { @@ -65,17 +66,17 @@ public class RingService implements IRingService{ ringMsg.setSenderId(currentUserId); ringMsg.setTime(time); ringMsg.setValueText(ringSendDto.getValue()); - if(ringSendDto.getValue().length() > 20){ - ringMsg.setValue(ringSendDto.getValue().substring(0,20)); - }else { + if (ringSendDto.getValue().length() > 20) { + ringMsg.setValue(ringSendDto.getValue().substring(0, 20)); + } else { ringMsg.setValue(ringSendDto.getValue()); } sysRingMsgDao.insertSelective(ringMsg); //所有接收者的userId Set userIdSet = new HashSet<>(); //添加消息详情与接收角色的关联信息 - if(CollectionUtil.isNotEmpty(ringSendDto.getRoleList())){ - for(Long roleId :ringSendDto.getRoleList()){ + if (CollectionUtil.isNotEmpty(ringSendDto.getRoleList())) { + for (Long roleId : ringSendDto.getRoleList()) { SysRingSend sysRingSend = new SysRingSend(); sysRingSend.setId(snowflake.nextId()); sysRingSend.setRingId(ringMsg.getId()); @@ -88,7 +89,7 @@ public class RingService implements IRingService{ List userIdList = new ArrayList<>(userIdSet); //发送消息 RingMessageWithSendDto ringMessageWithSendDto = new RingMessageWithSendDto( - ringMsg.getId(),ringSendDto.getProjectId(),ringMsg.getValue(),time); + ringMsg.getId(), ringSendDto.getProjectId(), ringMsg.getValue(), time); ringMessageWithSendDto.setReceivers(BaseMessageDto.MessageUser.userIdToUsers(userIdList)); rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME, JacksonUtil.beanToJson(ringMessageWithSendDto)); @@ -96,8 +97,9 @@ public class RingService implements IRingService{ /** * 查询ring消息 + * * @param currentUserId userId - * @param getRingDto 查询条件 + * @param getRingDto 查询条件 * @return 时间倒叙查询最近10条信息。在返回的结果中需时间正序展示 */ @Override @@ -107,18 +109,18 @@ public class RingService implements IRingService{ getRingDto.setPageSize(getRingDto.getPageSize() == null ? 10 : getRingDto.getPageSize()); PageHelper.startPage(getRingDto.getPage(), getRingDto.getPageSize()); - List ringInfoList = sysRingMsgDao.selectRingInfoByProject(currentUserId,getRingDto.getProjectId()); - if(CollectionUtil.isNotEmpty(ringInfoList)){ + List ringInfoList = sysRingMsgDao.selectRingInfoByProject(currentUserId, getRingDto.getProjectId()); + if (CollectionUtil.isNotEmpty(ringInfoList)) { ringInfoList.forEach(ringInfo -> { List msgReceiveRole = sysRingMsgDao.ringReceiveRole(ringInfo.getMessageId()); ringInfo.setRoleList(msgReceiveRole); }); } - CollectionUtil.sort(ringInfoList,new Comparator(){ + CollectionUtil.sort(ringInfoList, new Comparator() { @Override public int compare(RingVo.RingInfo o1, RingVo.RingInfo o2) { - return (int)(o1.getTime() - o2.getTime()); + return (int) (o1.getTime() - o2.getTime()); } }); @@ -127,28 +129,30 @@ public class RingService implements IRingService{ /** * 阅读消息(将消息设为已读) + * * @param currentUserId userId - * @param message 项目id,和消息id,可以多个。同时将多个消息设为已读 + * @param message 项目id,和消息id,可以多个。同时将多个消息设为已读 */ @Override - public void readRingMsg(Long currentUserId, RingDto.MessageId message) throws JsonProcessingException { + public List readRingMsg(Long currentUserId, RingDto.MessageId message) throws JsonProcessingException { + List ringInfoList = new ArrayList<>(); //获取当前用户在项目内的角色 - List roleIdList = sysRingMsgDao.selectRoleIdByUserId(currentUserId,message.getProjectId()); - log.info("阅读者的角色:{}",roleIdList.toString()); + List roleIdList = sysRingMsgDao.selectRoleIdByUserId(currentUserId, message.getProjectId()); + log.info("阅读者的角色:{}", roleIdList.toString()); //将每条消息的状态设为已读 - if(CollectionUtil.isNotEmpty(roleIdList) && CollectionUtil.isNotEmpty(message.getMessageIdList())){ - for(Long roleId : roleIdList){ - for(Long msgId : message.getMessageIdList()){ + if (CollectionUtil.isNotEmpty(roleIdList) && CollectionUtil.isNotEmpty(message.getMessageIdList())) { + for (Long msgId : message.getMessageIdList()) { + for (Long roleId : roleIdList) { //查找消息 SysRingMsg sysRingMsg = sysRingMsgDao.selectByPrimaryKey(msgId); - if(ObjectUtil.isNull(sysRingMsg)){ + if (ObjectUtil.isNull(sysRingMsg)) { throw new BaseException(CodeEnum.PARAM_ERROR); } SysRingSendExample sysRingSendExample = new SysRingSendExample(); sysRingSendExample.createCriteria().andRingIdEqualTo(msgId).andRoleIdEqualTo(roleId); List sysRingSendList = sysRingSendDao.selectByExample(sysRingSendExample); - if(CollectionUtil.isNotEmpty(sysRingSendList)){ - for(SysRingSend sysRingSend : sysRingSendList){ + if (CollectionUtil.isNotEmpty(sysRingSendList)) { + for (SysRingSend sysRingSend : sysRingSendList) { sysRingSend.setReadStatus((byte) 1); sysRingSend.setReadTime(System.currentTimeMillis()); sysRingSendDao.updateByPrimaryKeySelective(sysRingSend); @@ -156,13 +160,24 @@ public class RingService implements IRingService{ //将已读消息返回给发送者 List userIdList = new ArrayList<>(); userIdList.add(sysRingMsg.getSenderId()); - RingMessageWithReadDto ringMessageWithReadDto = new RingMessageWithReadDto(msgId,message.getProjectId(),roleId); + RingMessageWithReadDto ringMessageWithReadDto = new RingMessageWithReadDto(msgId, message.getProjectId(), roleId); ringMessageWithReadDto.setReceivers(BaseMessageDto.MessageUser.userIdToUsers(userIdList)); rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME, JacksonUtil.beanToJson(ringMessageWithReadDto)); } } + //查询被读的信息返回 + List ringInfos = sysRingMsgDao.selectRingInfoByRingMsgId(currentUserId, message.getProjectId(),msgId); + if (CollectionUtil.isNotEmpty(ringInfos)) { + ringInfos.forEach(ringInfo -> { + List msgReceiveRole = sysRingMsgDao.ringReceiveRole(msgId); + ringInfo.setRoleList(msgReceiveRole); + }); + } + ringInfoList.addAll(ringInfos); } } + return ringInfoList; } + } diff --git a/tall/src/main/java/com/ccsens/tall/service/UserInfoService.java b/tall/src/main/java/com/ccsens/tall/service/UserInfoService.java new file mode 100644 index 00000000..a7883522 --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/service/UserInfoService.java @@ -0,0 +1,150 @@ +package com.ccsens.tall.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ImageUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.ccsens.tall.bean.dto.UserDto; +import com.ccsens.tall.bean.po.*; +import com.ccsens.tall.persist.dao.SysAuthDao; +import com.ccsens.tall.persist.dao.SysUserDao; +import com.ccsens.tall.util.TallConstant; +import com.ccsens.util.*; +import com.ccsens.util.exception.BaseException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.Part; +import java.io.File; +import java.util.Date; +import java.util.List; + +/** + * @author 逗 + */ +@Slf4j +@Service +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +public class UserInfoService implements IUserInfoService{ + @Resource + private RedisUtil redisUtil; + @Resource + private SysAuthDao sysAuthDao; + @Resource + private SysUserDao sysUserDao; + + @Override + public void updateAccount(Long userId, UserDto.UpdateAccount changeAccount) { + //判断验证码是否正确 + if (redisUtil.hasKey(RedisKeyManager.getSigninSmsKey(changeAccount.getPhone()))) { + if (changeAccount.getSmsCode().equals(redisUtil.get(RedisKeyManager.getSigninSmsKey(changeAccount.getPhone())).toString())) { + //查找redis该账号是否正在使用 + String accountKey = TallConstant.getUpdateAccount(changeAccount.getAccount()); + if(redisUtil.hasKey(accountKey)){ + throw new BaseException(CodeEnum.ALREADY_EXIST_ACCOUNT); + } + //未查到则存进redis时效一分钟 + redisUtil.set(accountKey,changeAccount.getAccount(),60); + //检查数据库内账号是否存在 + SysAuthExample sysAuthExample = new SysAuthExample(); + sysAuthExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Account.value) + .andIdentifierEqualTo(changeAccount.getAccount()); + List sysAuthList = sysAuthDao.selectByExample(sysAuthExample); + if(CollectionUtil.isNotEmpty(sysAuthList)){ + throw new BaseException(CodeEnum.ALREADY_EXIST_ACCOUNT); + } + //修改账号 + SysAuthExample authAccountExample = new SysAuthExample(); + authAccountExample.createCriteria().andUserIdEqualTo(userId).andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Account.value); + List authList = sysAuthDao.selectByExample(authAccountExample); + if(CollectionUtil.isNotEmpty(authList)){ + authList.forEach(sysAuth -> { + sysAuth.setIdentifier(changeAccount.getAccount()); + sysAuthDao.updateByPrimaryKeySelective(sysAuth); + }); + } + //修改完删除redis + redisUtil.del(accountKey); + }else { + throw new BaseException(CodeEnum.SMS_CODE_CORRECT); + } + }else { + throw new BaseException(CodeEnum.SMS_CODE_CORRECT); + } + } + + @Override + public void updateNickname(Long userId, UserDto.UpdateNickname updateNickname) { + //查找redis该昵称是否正在使用 + String nicknameKey = TallConstant.getUpdateNickname(updateNickname.getNickname()); + if(redisUtil.hasKey(nicknameKey)){ + throw new BaseException(CodeEnum.NICKNAME_REPEAT); + } + //未查到则存进redis时效一分钟 + redisUtil.set(nicknameKey,updateNickname.getNickname(),60); + //查找数据库此昵称是否存在 + SysUserExample sysUserExample = new SysUserExample(); + sysUserExample.createCriteria().andNicknameEqualTo(updateNickname.getNickname()); + List userList = sysUserDao.selectByExample(sysUserExample); + if(CollectionUtil.isNotEmpty(userList)){ + throw new BaseException(CodeEnum.NICKNAME_REPEAT); + } + SysUser user = sysUserDao.selectByPrimaryKey(userId); + if(ObjectUtil.isNotNull(user)){ + user.setNickname(updateNickname.getNickname()); + sysUserDao.updateByPrimaryKeySelective(user); + } + redisUtil.del(nicknameKey); + } + + @Override + public void uploadAvatarUrl(Long currentUserId, Part file) throws Exception { + //获取文件大小 + float fileSize = (float) file.getSize(); + System.out.println(fileSize); + //计算出倍数 + float a = (float)(80 * 1024) / fileSize; + System.out.println(a); + //限制文件格式 + String allowedExts = "png,jpg,jpeg"; + String original = UploadFileUtil_Servlet3.getFileNameByPart(file); + String ext = FileUtil.extName(original); + if (StrUtil.isEmpty(ext) || !allowedExts.contains(ext)){ + throw new NotSupportedFileTypeException("不支持的格式类型: " + ext); + } + //创建文件目录及名字 + String extraPath = DateUtil.format(new Date(), "yyyyMMdd"); + //上传的文件 + String temporaryFilePath = File.separator + IdUtil.simpleUUID() + "." + ext; + File temporaryFile = new File(WebConstant.UPLOAD_AVATAR_URL + extraPath + temporaryFilePath); + FileUtils.copyInputStreamToFile(file.getInputStream(), temporaryFile); + //压缩后的文件 + String compressFilePath = File.separator + IdUtil.simpleUUID() + "." + ext; + File compressFile = new File(WebConstant.UPLOAD_AVATAR_URL+ extraPath + compressFilePath); + //文件大于80k则进行压缩,否则不压缩 + if(a < 1) { + ImageUtil.scale(temporaryFile, compressFile, a); + } + //获取文件的压缩前的文件名 + String fullPath = WebConstant.UPLOAD_PATH_AVATAR_URL + File.separator + extraPath + temporaryFilePath; + //压缩前和压缩后的文件都存在则删除压缩前的文件 + if(temporaryFile.exists() && compressFile.exists()){ + FileUtil.del(temporaryFile); + //压缩成功后获取压缩后的文件名 + fullPath = WebConstant.UPLOAD_PATH_AVATAR_URL + File.separator + extraPath + compressFilePath; + } + + //查找到当前的用户,修改头像路径信息 + SysUser sysUser = sysUserDao.selectByPrimaryKey(currentUserId); + + sysUser.setAvatarUrl(PropUtil.gatewayUrl + WebConstant.TALL_UPLOADS + fullPath); + sysUserDao.updateByPrimaryKeySelective(sysUser); + } +} diff --git a/tall/src/main/java/com/ccsens/tall/service/UserService.java b/tall/src/main/java/com/ccsens/tall/service/UserService.java index 2f5a43ef..7b1f6388 100644 --- a/tall/src/main/java/com/ccsens/tall/service/UserService.java +++ b/tall/src/main/java/com/ccsens/tall/service/UserService.java @@ -34,6 +34,8 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.xhtmlrenderer.css.parser.property.PrimitivePropertyBuilders; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -376,10 +378,10 @@ public class UserService implements IUserService { userSignVo.setUserId(theAuth.getUserId()); userSignVo.setAuthId(theAuth.getId()); } else { - throw new BaseException("密码错误"); + throw new BaseException(CodeEnum.PASSWORD_ERROR); } } else { - throw new BaseException("找不到该用户"); + throw new BaseException(CodeEnum.NOT_ACCOUNT); } return userSignVo; } @@ -508,7 +510,7 @@ public class UserService implements IUserService { /** * 微信登陆后天添加用户和认证方式 * - * @return + * @return 认证信息 */ private SysAuth wxRegist(String identifier, String credential, WebConstant.IDENTIFY_TYPE identifyType) { //1.添加user @@ -549,19 +551,19 @@ public class UserService implements IUserService { Long refreshTokenExpired = null; switch (clientType) { - case Wxmp: //token(2hours) refreshToken(null) + case Wxmp: //tokenExpired = 3600 * 1000L * 2; tokenExpired = 3600 * 1000L * 24; break; - case H5: //token(2hours) refreshToken(null) + case H5: // tokenExpired = 3600 * 1000L * 2; tokenExpired = 3600 * 1000L * 24; break; - case Android: //token(2hours) refreshToken(30天) + case Android: tokenExpired = 3600 * 1000L * 2; refreshTokenExpired = 3600 * 1000L * 24 * 30; break; - case IOS: //token(2hours) refreshToken(30天) + case IOS: tokenExpired = 3600 * 1000L * 2; refreshTokenExpired = 3600 * 1000L * 24 * 30; break; @@ -601,7 +603,7 @@ public class UserService implements IUserService { * 发送验证码 */ @Override - public UserVo.SmsCode getSignInSmsCode(String phone, Integer client) throws Exception { + public UserVo.SmsCode getSignInSmsCode(String phone, Integer client) { //获取登陆客户端类型 WebConstant.CLIENT_TYPE client_type = null; if (ObjectUtil.isNotNull(client)) { @@ -809,20 +811,19 @@ public class UserService implements IUserService { } @Override - public boolean tokenNotExistInCache(Long authId) throws Exception { + public boolean tokenNotExistInCache(Long authId) { return !redisUtil.hasKey(RedisKeyManager.getTokenCachedKey(authId)); } /** * 微信绑定新手机号(没有账号,注册) * - * @param currentUserId - * @param wxPhone - * @return - * @throws Exception + * @param currentUserId userId + * @param wxPhone 手机号和验证码 + * @return 用户id和认证类型 */ @Override - public UserVo.UserSign bindingNewPhone(Long currentUserId, UserDto.WxBindingPhone wxPhone) throws Exception { + public UserVo.UserSign bindingNewPhone(Long currentUserId, UserDto.WxBindingPhone wxPhone) { if (isSmsCodeCorrect(wxPhone.getPhone(), wxPhone.getSmsCode())) { //查找该用户以前绑定的手机 SysAuthExample authExample = new SysAuthExample(); @@ -833,7 +834,7 @@ public class UserService implements IUserService { throw new BaseException(CodeEnum.ALREADY_BINDING_PHONE); } else { //改手机对应账户,如果有,提示 - List phoneList = null; + List phoneList; SysAuth theAuth = null; SysAuthExample phoneExample = new SysAuthExample(); phoneExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Phone.value) @@ -842,7 +843,6 @@ public class UserService implements IUserService { if (CollectionUtil.isNotEmpty(phoneList)) { throw new BaseException(CodeEnum.MERGE_WX_PHONE); } else { -// throw new BaseException(CodeEnum.NOT_REGISTER); //绑定 添加auth SysAuth auth = new SysAuth(); auth.setId(snowflake.nextId()); @@ -920,8 +920,8 @@ public class UserService implements IUserService { /** * 判断验证码是否有效 */ - private Boolean isSmsCodeCorrect(String phone, String smsCode) throws Exception { - Boolean correct = false; + private Boolean isSmsCodeCorrect(String phone, String smsCode) { + boolean correct = false; if (redisUtil.hasKey(RedisKeyManager.getSigninSmsKey(phone))) { if (smsCode.equals(redisUtil.get(RedisKeyManager.getSigninSmsKey(phone)).toString())) { correct = true; @@ -950,25 +950,48 @@ public class UserService implements IUserService { auth.setCredential(ShiroKit.md5(passwordDto.getPassword(), auth.getSalt())); authDao.updateByPrimaryKeySelective(auth); } else { - throw new BaseException("新密码不能和旧密码相同"); + throw new BaseException(CodeEnum.NEW_PASSWORD_REPEAT_OLD); } } else { - throw new BaseException("该手机号未绑定账号"); + throw new BaseException(CodeEnum.PHONE_ERR); } } else { - throw new BaseException("该手机号未注册"); + throw new BaseException(CodeEnum.PHONE_ERR); } } else { - throw new BaseException("验证信息错误"); + throw new BaseException(CodeEnum.SMS_CODE_CORRECT); } } } + @Override + public void updatePasswordByAccount(UserDto.UpdatePasswordByAccount passwordDto) throws Exception{ + if (passwordDto.getPasswordOld().equalsIgnoreCase(passwordDto.getPasswordNew())){ + throw new BaseException(CodeEnum.NEW_PASSWORD_REPEAT_OLD); + } + //检查账号和密码是否正确 + SysAuthExample authExample = new SysAuthExample(); + authExample.createCriteria() + .andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Account.value) + .andIdentifierEqualTo(passwordDto.getAccount()); + List authList = authDao.selectByExample(authExample); + if (CollectionUtil.isEmpty(authList)) { + throw new BaseException(CodeEnum.NOT_ACCOUNT); + } + SysAuth sysAuth = authList.get(0); + if (ShiroKit.authenticate(passwordDto.getPasswordOld(), sysAuth.getCredential(), sysAuth.getSalt())) { + //修改密码 + sysAuth.setCredential(ShiroKit.md5(passwordDto.getPasswordNew(), sysAuth.getSalt())); + authDao.updateByPrimaryKeySelective(sysAuth); + } else { + throw new BaseException(CodeEnum.PASSWORD_ERROR); + } + } + /** * 通过用户查找手机号 - * - * @param userId - * @return + * @param userId userId + * @return 用户名 */ @Override public String getPhone(Long userId) { @@ -1031,36 +1054,25 @@ public class UserService implements IUserService { if(ObjectUtil.isNull(role)){ return null; } - List userIdList = new ArrayList<>(); + List userIdList; if(role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase)){ userIdList = memberRoleDao.selectUserIdByProjectId(role.getProjectId()); }else { userIdList = memberRoleDao.selectUserIdByRoleId(roleId); } -// List userIdList = new ArrayList<>(); -// ProMemberRoleExample proMemberRoleExample = new ProMemberRoleExample(); -// proMemberRoleExample.createCriteria().andRoleIdEqualTo(roleId); -// List memberRoleList = memberRoleDao.selectByExample(proMemberRoleExample); -// if (CollectionUtil.isNotEmpty(memberRoleList)) { -// for (ProMemberRole memberRole : memberRoleList) { -// ProMember member = memberDao.selectByPrimaryKey(memberRole.getMemberId()); -// Long userId = member.getUserId(); -// userIdList.add(userId); -// } -// } return userIdList; } /** * 查询用户是否关注此项目 * - * @param currentUserId - * @param projectId - * @return + * @param currentUserId userId + * @param projectId 项目id + * @return 是否关注此项目 */ @Override public Boolean getIsAttention(Long currentUserId, Long projectId) { - Boolean isAttention = false; + boolean isAttention = false; if (ObjectUtil.isNotNull(sysProjectDao.selectByPrimaryKey(projectId))) { UserAttentionExample attentionExample = new UserAttentionExample(); attentionExample.createCriteria().andProjectIdEqualTo(projectId).andUserIdEqualTo(currentUserId); @@ -1077,8 +1089,8 @@ public class UserService implements IUserService { /** * 用户关注某个项目 * - * @param currentUserId - * @param projectIdDto + * @param currentUserId userId + * @param projectIdDto 项目id */ @Override public void userAttentionProject(Long currentUserId, ProjectDto.ProjectIdDto projectIdDto) { @@ -1122,12 +1134,6 @@ public class UserService implements IUserService { log.info("用户已存在,直接返回user"); return userDao.selectByPrimaryKey(authList.get(0).getUserId()).getId(); } -// int i = 0; -// 用户已存在 = true -// boolean userExist = userService.findAccount(signup.getAccount()); -// while (userExist) { -// userExist = userService.findAccount(signup.getAccount() + "_" + (++i)); -// } UserDto.UserSignup up = new UserDto.UserSignup(); up.setAccount(signup.getAccount()); up.setPassword(WebConstant.Regist.PASSWORD); @@ -1165,8 +1171,8 @@ public class UserService implements IUserService { /** * 通过userId查找账号 - * @param userId - * @return + * @param userId userId + * @return 账号 */ private String selectAccountByUserId(Long userId) { String account = null; @@ -1212,9 +1218,9 @@ public class UserService implements IUserService { /** * 合并账号 * - * @param currentUserId - * @param wxPhone - * @return + * @param currentUserId userId + * @param wxPhone 手机号和合并方式 + * @return 用户id */ @Override public UserVo.UserSign mergeByPhone(Long currentUserId, UserDto.WxMergePhone wxPhone) { @@ -1237,16 +1243,16 @@ public class UserService implements IUserService { userDao.replaceAuth(userId, currentUserId); //查询所有关联userId的数据库表 auth表 attention表 balance表 project表 member表 DeliverPostLog表 proLog表 //依次将查出的数据的旧userId 替换成新的userId + userDao.replaceProject(userId, currentUserId); userDao.replaceAttention(userId, currentUserId); userDao.replaceBalance(userId, currentUserId); - userDao.replaceProject(userId, currentUserId); userDao.replaceMember(userId, currentUserId); userDao.replaceDeliverPostLog(userId, currentUserId); userDao.replaceProLog(userId, currentUserId); userDao.replaceComment(userId, currentUserId); //将以前的余额添加至此账号 - SysUser oldUser = userDao.selectByPrimaryKey(userId); SysUser newUser = userDao.selectByPrimaryKey(currentUserId); + SysUser oldUser = userDao.selectByPrimaryKey(userId); if(ObjectUtil.isNotNull(oldUser) && ObjectUtil.isNotNull(newUser)) { updateBalance(oldUser, newUser); } @@ -1335,7 +1341,7 @@ public class UserService implements IUserService { */ @Override public UserVo.WxInfo updateUserInfo(Long currentUserId, UserDto.WxInfo userInfo) { - //通过userid查找到用户 + //通过userId查找到用户 SysUser user = userDao.selectByPrimaryKey(currentUserId); if (ObjectUtil.isNull(user)) { throw new BaseException(CodeEnum.NOT_LOGIN); @@ -1393,12 +1399,11 @@ public class UserService implements IUserService { /** * 更改绑定手机号(不要密码) * - * @param userId - * @param phoneInfo - * @throws Exception + * @param userId userId + * @param phoneInfo 手机号和验证码 */ @Override - public UserVo.UserSign changePhoneNotPassword(Long userId, UserDto.WxBindingPhone phoneInfo) throws Exception { + public UserVo.UserSign changePhoneNotPassword(Long userId, UserDto.WxBindingPhone phoneInfo) { UserVo.UserSign userSign = null; if (isSmsCodeCorrect(phoneInfo.getPhone(), phoneInfo.getSmsCode())) { //查找新手机号的的绑定信息 diff --git a/tall/src/main/java/com/ccsens/tall/util/TallConstant.java b/tall/src/main/java/com/ccsens/tall/util/TallConstant.java index 3d20a301..4633ea08 100644 --- a/tall/src/main/java/com/ccsens/tall/util/TallConstant.java +++ b/tall/src/main/java/com/ccsens/tall/util/TallConstant.java @@ -5,6 +5,11 @@ package com.ccsens.tall.util; */ public class TallConstant { + /*** redis key: 修改账号*/ + public static final String UPDATE_ACCOUNT = "update_account_"; + /*** redis key: 修改账号*/ + public static final String UPDATE_NICKNAME = "update_nickname_"; + /** * 接口发送的信息模板 * @param operateType 接口code @@ -14,4 +19,11 @@ public class TallConstant { return "operate_type_" + operateType; } + public static String getUpdateAccount(String account){ + return UPDATE_ACCOUNT + account; + } + + public static String getUpdateNickname(String nickname){ + return UPDATE_ACCOUNT + nickname; + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/ExcelController.java b/tall/src/main/java/com/ccsens/tall/web/ExcelController.java index 1d03de32..3bd87aaf 100644 --- a/tall/src/main/java/com/ccsens/tall/web/ExcelController.java +++ b/tall/src/main/java/com/ccsens/tall/web/ExcelController.java @@ -1,7 +1,6 @@ package com.ccsens.tall.web; -import com.ccsens.tall.bean.vo.PluginVo; import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.service.IExcelService; import com.ccsens.tall.service.IExportWbsService; @@ -20,7 +19,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import java.io.File; -import java.util.List; @Api(tags = "Excel" , description = "") @RestController diff --git a/tall/src/main/java/com/ccsens/tall/web/MemberController.java b/tall/src/main/java/com/ccsens/tall/web/MemberController.java new file mode 100644 index 00000000..6f032c0d --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/web/MemberController.java @@ -0,0 +1,38 @@ +package com.ccsens.tall.web; + +import com.ccsens.tall.bean.dto.MemberDto; +import com.ccsens.tall.bean.dto.MemberRoleDto; +import com.ccsens.tall.bean.dto.RingDto; +import com.ccsens.tall.service.IProMemberService; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.WebConstant; +import io.jsonwebtoken.Claims; +import io.swagger.annotations.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +/** + * @author 逗 + */ +@Api(tags = "成员操作相关api" ) +@RestController +@RequestMapping("/member") +public class MemberController { + @Resource + private IProMemberService proMemberService; + + + @ApiOperation(value = "添加角色",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse saveMember(HttpServletRequest request, + @ApiParam @Validated @RequestBody MemberDto.SaveMember saveMember) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + proMemberService.saveProMember(currentUserId,saveMember); + return JsonResponse.newInstance().ok(); + } +} diff --git a/tall/src/main/java/com/ccsens/tall/web/RingController.java b/tall/src/main/java/com/ccsens/tall/web/RingController.java index ef359198..1fa0a578 100644 --- a/tall/src/main/java/com/ccsens/tall/web/RingController.java +++ b/tall/src/main/java/com/ccsens/tall/web/RingController.java @@ -56,11 +56,11 @@ public class RingController { @ApiImplicitParams({ }) @RequestMapping(value = "/read", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse readRingMsg(HttpServletRequest request, + public JsonResponse> readRingMsg(HttpServletRequest request, @ApiParam @Validated @RequestBody RingDto.MessageId message) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); - ringService.readRingMsg(currentUserId,message); - return JsonResponse.newInstance().ok(); + List ringInfoList = ringService.readRingMsg(currentUserId,message); + return JsonResponse.newInstance().ok(ringInfoList); } } diff --git a/tall/src/main/java/com/ccsens/tall/web/UserController.java b/tall/src/main/java/com/ccsens/tall/web/UserController.java index a7bcb5b1..006f2b3b 100644 --- a/tall/src/main/java/com/ccsens/tall/web/UserController.java +++ b/tall/src/main/java/com/ccsens/tall/web/UserController.java @@ -240,7 +240,7 @@ public class UserController { return JsonResponse.newInstance().ok(wxInfo); } - @ApiOperation(value = "修改密码", notes = "") + @ApiOperation(value = "通过手机号修改密码", notes = "") @ApiImplicitParams({ }) @RequestMapping(value = "/password", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @@ -250,6 +250,16 @@ public class UserController { return JsonResponse.newInstance().ok(); } + @ApiOperation(value = "通过账号密码修改密码", notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/password/account", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updatePasswordByAccount(HttpServletRequest request, + @ApiParam @Validated @RequestBody UserDto.UpdatePasswordByAccount passwordDto) throws Exception { + userService.updatePasswordByAccount(passwordDto); + return JsonResponse.newInstance().ok(); + } + @ApiOperation(value = "解绑手机号", notes = "") @ApiImplicitParams({ }) diff --git a/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java b/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java new file mode 100644 index 00000000..4f3a3c85 --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java @@ -0,0 +1,70 @@ +package com.ccsens.tall.web; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.ImageUtil; +import com.ccsens.tall.bean.dto.UserDto; +import com.ccsens.tall.service.IUserInfoService; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.UploadFileUtil_Servlet3; +import com.ccsens.util.WebConstant; +import io.jsonwebtoken.Claims; +import io.swagger.annotations.*; +import org.apache.commons.io.FileUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.Part; +import java.awt.*; +import java.io.File; + +/** + * @author 逗 + */ +@Api(tags = "用户详细信息操作API") +@RestController +@RequestMapping("/users/info") +public class UserInfoController { + @Resource + private IUserInfoService userInfoService; + + @ApiOperation(value = "修改登录账号") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/account", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateAccount(HttpServletRequest request, + @ApiParam @Validated @RequestBody UserDto.UpdateAccount updateAccount) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + userInfoService.updateAccount(currentUserId, updateAccount); + return JsonResponse.newInstance().ok(); + } + + + @ApiOperation(value = "修改昵称") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/nickname", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateNickname(HttpServletRequest request, + @ApiParam @Validated @RequestBody UserDto.UpdateNickname updateNickname) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + userInfoService.updateNickname(currentUserId, updateNickname); + return JsonResponse.newInstance().ok(); + } + + @ApiOperation(value = "上传头像") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/avatarUrl", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse uploadAvatarUrl(HttpServletRequest request, + @ApiParam @Validated @RequestBody Part file) throws Exception { + + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + userInfoService.uploadAvatarUrl(currentUserId,file); + return JsonResponse.newInstance().ok(); + } + +} diff --git a/tall/src/main/resources/application-dev.yml b/tall/src/main/resources/application-dev.yml index 1453566f..7d242878 100644 --- a/tall/src/main/resources/application-dev.yml +++ b/tall/src/main/resources/application-dev.yml @@ -29,6 +29,7 @@ spring: timeout: 1000ms swagger: enable: true +gatewayUrl: https://test.tall.wiki/gateway/ notGatewayUrl: /home/staticrec/logo.png wx: prefixUrl: https://test.tall.wiki/wxconfigurer-api/ diff --git a/tall/src/main/resources/application-test.yml b/tall/src/main/resources/application-test.yml index 4d2efba6..edaa05c9 100644 --- a/tall/src/main/resources/application-test.yml +++ b/tall/src/main/resources/application-test.yml @@ -32,9 +32,11 @@ swagger: enable: true eureka: instance: - ip-address: 192.168.0.99 -# ip-address: 49.233.89.188 -gatewayUrl: http://192.168.0.99/gateway/ -notGatewayUrl: http://192.168.0.99/ +# ip-address: 192.168.0.99 + ip-address: 49.233.89.188 +#gatewayUrl: http://192.168.0.99/gateway/ +#notGatewayUrl: http://192.168.0.99/ +gatewayUrl: https://test.tall.wiki/gateway/ +notGatewayUrl: https://test.tall.wiki/ wx: prefixUrl: https://test.tall.wiki/wxconfigurer-api \ No newline at end of file diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index b2acd365..c88e995d 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: dev - include: util-dev,common + active: test + include: util-test,common diff --git a/tall/src/main/resources/druid-test.yml b/tall/src/main/resources/druid-test.yml index b52b019f..11227332 100644 --- a/tall/src/main/resources/druid-test.yml +++ b/tall/src/main/resources/druid-test.yml @@ -15,8 +15,8 @@ spring: maxWait: 60000 minEvictableIdleTimeMillis: 300000 minIdle: 5 -# password: - password: 68073a279b399baa1fa12cf39bfbb65bfc1480ffee7b659ccc81cf19be8c4473 + password: +# password: 68073a279b399baa1fa12cf39bfbb65bfc1480ffee7b659ccc81cf19be8c4473 poolPreparedStatements: true servletLogSlowSql: true servletLoginPassword: 111111 @@ -28,8 +28,8 @@ spring: testOnReturn: false testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 -# url: jdbc:mysql://127.0.0.1/tall?useUnicode=true&characterEncoding=UTF-8 - url: jdbc:mysql://test.tall.wiki/tall?useUnicode=true&characterEncoding=UTF-8 + url: jdbc:mysql://127.0.0.1/tall?useUnicode=true&characterEncoding=UTF-8 +# url: jdbc:mysql://test.tall.wiki/tall?useUnicode=true&characterEncoding=UTF-8 username: root validationQuery: SELECT 1 FROM DUAL env: CCSENS_TALL \ No newline at end of file diff --git a/tall/src/main/resources/mapper_dao/SysOperationDao.xml b/tall/src/main/resources/mapper_dao/SysOperationDao.xml index d80c7291..a0272c76 100644 --- a/tall/src/main/resources/mapper_dao/SysOperationDao.xml +++ b/tall/src/main/resources/mapper_dao/SysOperationDao.xml @@ -38,7 +38,7 @@ AND s.receiver_id = #{userId} AND s.send_type = #{sendType} AND s.init_read =0 - AND s.rec_status = 0e + AND s.rec_status = 0 AND o.rec_status = 0 + + \ No newline at end of file diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index f4fb6e7b..9431acba 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -116,7 +116,11 @@ public enum CodeEnum { NOT_COMMENT(98,"该评论不存在",true), NOT_MESSAGE_TYPE(99,"找不到消息类型,请检查名称是否正确",true), NOT_LABEL(100,"标签不存在,请检查后操作",true), - REPEAT_LABEL(100,"标签已存在,请勿重复添加",true), + REPEAT_LABEL(101,"标签已存在,请勿重复添加",true), + NICKNAME_REPEAT(102,"改名字已经存在,请换一个再试",true), + NEW_PASSWORD_REPEAT_OLD(103,"新密码不能和旧密码相同",true), + PASSWORD_ERROR(104,"密码错误",true), + NOT_ACCOUNT(105,"未找到该账号",true), ; public CodeEnum addMsg(String msg){ diff --git a/util/src/main/java/com/ccsens/util/UploadFileUtil_Servlet3.java b/util/src/main/java/com/ccsens/util/UploadFileUtil_Servlet3.java index b882d0dd..29143252 100644 --- a/util/src/main/java/com/ccsens/util/UploadFileUtil_Servlet3.java +++ b/util/src/main/java/com/ccsens/util/UploadFileUtil_Servlet3.java @@ -2,6 +2,7 @@ package com.ccsens.util; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; @@ -36,7 +37,7 @@ public class UploadFileUtil_Servlet3 { if (StrUtil.isEmpty(ext) || !allowedExts.contains(ext)){ throw new NotSupportedFileTypeException("不支持的格式类型: " + ext); } - String path = extraPath + File.separator + SecureUtil.simpleUUID() + "." + ext; + String path = extraPath + File.separator + IdUtil.simpleUUID() + "." + ext; //3.创建必要的目录 File tmpFile = new File(dir); if (!tmpFile.exists()) { diff --git a/util/src/main/java/com/ccsens/util/WebConstant.java b/util/src/main/java/com/ccsens/util/WebConstant.java index 9d8e36a1..fd154ebd 100644 --- a/util/src/main/java/com/ccsens/util/WebConstant.java +++ b/util/src/main/java/com/ccsens/util/WebConstant.java @@ -119,14 +119,17 @@ public class WebConstant { public static final String UPLOAD_PATH_DELIVER = UPLOAD_PATH_BASE + File.separator + "delivers"; public static final String UPLOAD_PATH_DELIVER1 ="delivers"; + public static final String UPLOAD_PATH_AVATAR_URL ="avatarUrl"; public static final String UPLOAD_PATH_REMARK ="remarks"; public static final String UPLOAD_PROJECT_WBS = UPLOAD_PATH_BASE + File.separator + "project"; + public static final String UPLOAD_AVATAR_URL = UPLOAD_PATH_BASE + File.separator + "avatarUrl/"; public static final String URL_BASE = "https://api.ccsens.com/ptpro/uploads/"; public static final String TEST_URL = "https://test.tall.wiki/"; public static final String TEST_URL_GAME_SQ = TEST_URL + "game-dev/"; public static final String TEST_URL_GAME_SP = TEST_URL + "game-sp/"; public static final String TEST_URL_GAME_BH = TEST_URL + "game-bh/"; - public static final String TEST_URL_BASE = TEST_URL + "gateway/tall/v1.0/uploads/"; + public static final String TALL_UPLOADS = "tall/v1.0/uploads/"; + public static final String TEST_URL_BASE = TEST_URL + "gateway/" + TALL_UPLOADS; public static final String TEST_URL_BASE_MT = TEST_URL + "gateway/mt/uploads/"; public static final String TEST_URL_BASE_HEALTH = TEST_URL + "gateway/health/uploads/"; From 8e66b4f1f3e4bfe8b3055af7221074cb4530fa2b Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Fri, 19 Jun 2020 14:21:47 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ccsens/tall/bean/vo/RingVo.java | 2 + .../java/com/ccsens/tall/bean/vo/UserVo.java | 54 +++++++++++++++++++ .../ccsens/tall/persist/dao/SysUserDao.java | 15 ++++++ .../ccsens/tall/service/IUserInfoService.java | 9 ++++ .../com/ccsens/tall/service/LabelService.java | 1 + .../com/ccsens/tall/service/RingService.java | 27 +++++++++- .../tall/service/TaskDeliverService.java | 12 ++--- .../tall/service/TaskSubTimeService.java | 1 + .../ccsens/tall/service/UserInfoService.java | 23 ++++++++ .../ccsens/tall/web/UserInfoController.java | 12 +++++ tall/src/main/resources/application-dev.yml | 2 +- .../main/resources/mapper_dao/DeliverDao.xml | 3 +- .../resources/mapper_dao/SysRingMsgDao.xml | 4 ++ .../main/resources/mapper_dao/SysUserDao.xml | 35 ++++++++++++ .../main/java/com/ccsens/util/CodeEnum.java | 2 +- 15 files changed, 190 insertions(+), 12 deletions(-) diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java index 3e6e0469..c9b3050d 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java @@ -57,5 +57,7 @@ public class RingVo { private Long id; @ApiModelProperty("发送者的名字") private String name; + @ApiModelProperty("发送者的头像") + private String avatarUrl; } } diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/UserVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/UserVo.java index 98a1c500..33f7d3d7 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/UserVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/UserVo.java @@ -6,6 +6,10 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; import lombok.Setter; + +import java.util.Date; +import java.util.List; + @Data public class UserVo { @Data @@ -90,4 +94,54 @@ public class UserVo { @ApiModelProperty("用户id") private Long userId; } + + @Data + @ApiModel("查询个人信息") + public static class SelectUserInfo{ + @ApiModelProperty("userId") + private Long id; + @ApiModelProperty("账号") + private String account; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("昵称") + private String nickname; + @ApiModelProperty("头像") + private String avatarUrl; + @ApiModelProperty("个人签名") + private String signature; + @ApiModelProperty("个人简介") + private String introduction; + @ApiModelProperty("生日") + private String birthday; + @ApiModelProperty("所在地") + private String address; + @ApiModelProperty("网页") + private String webPath; + @ApiModelProperty("公司") + private String company; + @ApiModelProperty("职位") + private String position; + @ApiModelProperty("已使用tall多少天") + private Integer dayOfUseTall; + @JsonIgnore // 已使用tall多少天 + private Date createdAt; + @ApiModelProperty("空间使用情况") + private Interspace interspace; + @ApiModelProperty("标签信息") + private List labelList; + } + + @Data + @ApiModel("空间使用信息") + public static class Interspace{ + @ApiModelProperty("空间已有项目") + private Integer projectNum; + @ApiModelProperty("空间总项目(目前写无限制)") + private Integer projectTotal; + @ApiModelProperty("空间剩余(目前写无限制)") + private Integer interspaceResidue; + @ApiModelProperty("总空间(目前写无限制)") + private Integer interspaceTotal; + } } diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/SysUserDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/SysUserDao.java index a5be7e6f..e5ab0810 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/SysUserDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/SysUserDao.java @@ -1,5 +1,6 @@ package com.ccsens.tall.persist.dao; +import com.ccsens.tall.bean.vo.UserVo; import com.ccsens.tall.persist.mapper.SysUserMapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -24,4 +25,18 @@ public interface SysUserDao extends SysUserMapper { String getUserNameByUserId(@Param("userId") Long userId); void replaceComment(@Param("oldUserId")Long userId, @Param("newUserId") Long currentUserId); + + /** + * 查找个人详细信息 + * @param currentUserId userId + * @return 个人信息 + */ + UserVo.SelectUserInfo selectUserInfo(@Param("userId")Long currentUserId); + + /** + * 获取空间使用信息 + * @param currentUserId userId + * @return 目前只查询用户创建了几个项目 + */ + UserVo.Interspace selectInterspace(@Param("userId")Long currentUserId); } diff --git a/tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java b/tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java index fbd953ba..cf5f2f0c 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IUserInfoService.java @@ -1,6 +1,7 @@ package com.ccsens.tall.service; import com.ccsens.tall.bean.dto.UserDto; +import com.ccsens.tall.bean.vo.UserVo; import com.ccsens.util.NotSupportedFileTypeException; import javax.servlet.http.Part; @@ -27,6 +28,14 @@ public interface IUserInfoService { * 上传头像 * @param currentUserId userId * @param file 上传的文件 + * @throws Exception 文件异常 */ void uploadAvatarUrl(Long currentUserId, Part file) throws Exception; + + /** + * 查找全部个人信息 + * @param currentUserId userId + * @return 个人信息 + */ + UserVo.SelectUserInfo selectUserInfo(Long currentUserId); } \ No newline at end of file diff --git a/tall/src/main/java/com/ccsens/tall/service/LabelService.java b/tall/src/main/java/com/ccsens/tall/service/LabelService.java index cf3d283d..8b325520 100644 --- a/tall/src/main/java/com/ccsens/tall/service/LabelService.java +++ b/tall/src/main/java/com/ccsens/tall/service/LabelService.java @@ -58,6 +58,7 @@ public class LabelService implements ILabelService{ /** * 查找此用户的所有标签 * @param currentUserId userId + * @param key 标签名包含的关键字 * @return 返回该用户添加的所有标签 */ @Override diff --git a/tall/src/main/java/com/ccsens/tall/service/RingService.java b/tall/src/main/java/com/ccsens/tall/service/RingService.java index 1e0735f1..5c1e5599 100644 --- a/tall/src/main/java/com/ccsens/tall/service/RingService.java +++ b/tall/src/main/java/com/ccsens/tall/service/RingService.java @@ -3,6 +3,7 @@ package com.ccsens.tall.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.ccsens.tall.bean.dto.RingDto; import com.ccsens.tall.bean.dto.message.BaseMessageDto; import com.ccsens.tall.bean.dto.message.RingMessageWithReadDto; @@ -10,11 +11,14 @@ import com.ccsens.tall.bean.dto.message.RingMessageWithSendDto; import com.ccsens.tall.bean.po.SysRingMsg; import com.ccsens.tall.bean.po.SysRingSend; import com.ccsens.tall.bean.po.SysRingSendExample; +import com.ccsens.tall.bean.po.SysUser; import com.ccsens.tall.bean.vo.RingVo; import com.ccsens.tall.persist.dao.SysRingMsgDao; import com.ccsens.tall.persist.dao.SysRingSendDao; +import com.ccsens.tall.persist.dao.SysUserDao; import com.ccsens.util.CodeEnum; import com.ccsens.util.JacksonUtil; +import com.ccsens.util.PropUtil; import com.ccsens.util.config.RabbitMQConfig; import com.ccsens.util.exception.BaseException; import com.fasterxml.jackson.core.JsonProcessingException; @@ -22,7 +26,6 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -46,6 +49,8 @@ public class RingService implements IRingService { @Resource private IUserService userService; @Resource + private SysUserDao userDao; + @Resource private RabbitTemplate rabbitTemplate; @@ -112,8 +117,18 @@ public class RingService implements IRingService { List ringInfoList = sysRingMsgDao.selectRingInfoByProject(currentUserId, getRingDto.getProjectId()); if (CollectionUtil.isNotEmpty(ringInfoList)) { ringInfoList.forEach(ringInfo -> { + //添加接收角色的信息 List msgReceiveRole = sysRingMsgDao.ringReceiveRole(ringInfo.getMessageId()); ringInfo.setRoleList(msgReceiveRole); + //添加发送者的头像 + if(ObjectUtil.isNotNull(ringInfo.getSender())) { + SysUser user = userDao.selectByPrimaryKey(ringInfo.getSender().getId()); + if(ObjectUtil.isNotNull(user) && StrUtil.isNotEmpty(user.getAvatarUrl())){ + ringInfo.getSender().setAvatarUrl(user.getAvatarUrl()); + }else { + ringInfo.getSender().setAvatarUrl(PropUtil.notGatewayUrl + "staticrec/logo.png"); + } + } }); } @@ -170,8 +185,18 @@ public class RingService implements IRingService { List ringInfos = sysRingMsgDao.selectRingInfoByRingMsgId(currentUserId, message.getProjectId(),msgId); if (CollectionUtil.isNotEmpty(ringInfos)) { ringInfos.forEach(ringInfo -> { + //添加接收角色的信息 List msgReceiveRole = sysRingMsgDao.ringReceiveRole(msgId); ringInfo.setRoleList(msgReceiveRole); + //添加发送者的头像 + if(ObjectUtil.isNotNull(ringInfo.getSender())) { + SysUser user = userDao.selectByPrimaryKey(ringInfo.getSender().getId()); + if(ObjectUtil.isNotNull(user) && StrUtil.isNotEmpty(user.getAvatarUrl())){ + ringInfo.getSender().setAvatarUrl(user.getAvatarUrl()); + }else { + ringInfo.getSender().setAvatarUrl(PropUtil.notGatewayUrl + "staticrec/logo.png"); + } + } }); } ringInfoList.addAll(ringInfos); diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java index d918b531..68aa25c8 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java @@ -208,7 +208,11 @@ public class TaskDeliverService implements ITaskDeliverService { if (CollectionUtil.isNotEmpty(uploadDeliver.getFileInfo())) { for (DeliverDto.fileInfo fileInfo : uploadDeliver.getFileInfo()) { SysCommitedFile file = commitedFileDao.selectByPrimaryKey(fileInfo.getId()); - deliverPostLog.setFileId(fileInfo.getId()); + if(ObjectUtil.isNotNull(file)){ + deliverPostLog.setFileId(file.getId()); + }else { + throw new BaseException(CodeEnum.NOT_DELIVER_FILE); + } } } deliverPostLog.setUserId(currentUserId); @@ -281,12 +285,6 @@ public class TaskDeliverService implements ITaskDeliverService { rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME, JacksonUtil.beanToJson(uploadMessage)); -// MessageRule messageRule = MessageRule.defaultRule(MessageConstant.DomainType.User); -// String s = JacksonUtil.beanToJson(uploadMessage); -// InMessage inMessage = InMessage.newToUserMessage(currentUserId.toString(),userIdSet,null,messageRule,s); -// String j = JacksonUtil.beanToJson(inMessage); -// System.out.println(j); -// messageService.sendDeliverMessageWithUpload(inMessage); } else { throw new BaseException(CodeEnum.IS_NOT_EXECUTOR); } diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java index 83634afa..8c0f5026 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java @@ -392,6 +392,7 @@ public class TaskSubTimeService implements ITaskSubTimeService { ProTaskDeliver deliver = new ProTaskDeliver(); deliver.setId(snowflake.nextId()); deliver.setTaskDetailId(detail.getId()); + deliver.setName(addTask.getTaskDeliver()); deliver.setIsInput(0); taskDeliverDao.insertSelective(deliver); } diff --git a/tall/src/main/java/com/ccsens/tall/service/UserInfoService.java b/tall/src/main/java/com/ccsens/tall/service/UserInfoService.java index a7883522..d31c3cab 100644 --- a/tall/src/main/java/com/ccsens/tall/service/UserInfoService.java +++ b/tall/src/main/java/com/ccsens/tall/service/UserInfoService.java @@ -9,7 +9,9 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.ccsens.tall.bean.dto.UserDto; import com.ccsens.tall.bean.po.*; +import com.ccsens.tall.bean.vo.UserVo; import com.ccsens.tall.persist.dao.SysAuthDao; +import com.ccsens.tall.persist.dao.SysLabelDao; import com.ccsens.tall.persist.dao.SysUserDao; import com.ccsens.tall.util.TallConstant; import com.ccsens.util.*; @@ -39,6 +41,8 @@ public class UserInfoService implements IUserInfoService{ private SysAuthDao sysAuthDao; @Resource private SysUserDao sysUserDao; + @Resource + private SysLabelDao sysLabelDao; @Override public void updateAccount(Long userId, UserDto.UpdateAccount changeAccount) { @@ -147,4 +151,23 @@ public class UserInfoService implements IUserInfoService{ sysUser.setAvatarUrl(PropUtil.gatewayUrl + WebConstant.TALL_UPLOADS + fullPath); sysUserDao.updateByPrimaryKeySelective(sysUser); } + + @Override + public UserVo.SelectUserInfo selectUserInfo(Long currentUserId){ + UserVo.SelectUserInfo selectUserInfo = sysUserDao.selectUserInfo(currentUserId); + if(ObjectUtil.isNotNull(selectUserInfo)){ + //计算注册时长 + if(ObjectUtil.isNotNull(selectUserInfo.getCreatedAt())){ + long now = System.currentTimeMillis(); + selectUserInfo.setDayOfUseTall((int) ((now - selectUserInfo.getCreatedAt().getTime()) / 1000 / 3600 / 24)); + } + //获取标签信息 + selectUserInfo.setLabelList(sysLabelDao.selectLabelByUserId(currentUserId,null)); + //获取空间使用信息 + UserVo.Interspace interspace = sysUserDao.selectInterspace(currentUserId); + selectUserInfo.setInterspace(interspace); + } + + return selectUserInfo; + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java b/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java index 4f3a3c85..d0ca3674 100644 --- a/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java +++ b/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java @@ -3,6 +3,7 @@ package com.ccsens.tall.web; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ImageUtil; import com.ccsens.tall.bean.dto.UserDto; +import com.ccsens.tall.bean.vo.UserVo; import com.ccsens.tall.service.IUserInfoService; import com.ccsens.util.JsonResponse; import com.ccsens.util.UploadFileUtil_Servlet3; @@ -67,4 +68,15 @@ public class UserInfoController { return JsonResponse.newInstance().ok(); } + @ApiOperation(value = "上传头像") + @ApiImplicitParams({ + }) + @RequestMapping(value = "", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) + public JsonResponse selectUserInfo(HttpServletRequest request) throws Exception { + + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + UserVo.SelectUserInfo selectUserInfo = userInfoService.selectUserInfo(currentUserId); + return JsonResponse.newInstance().ok(selectUserInfo); + } + } diff --git a/tall/src/main/resources/application-dev.yml b/tall/src/main/resources/application-dev.yml index 7d242878..e2ed06fc 100644 --- a/tall/src/main/resources/application-dev.yml +++ b/tall/src/main/resources/application-dev.yml @@ -11,7 +11,7 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource rabbitmq: - host: 192.168.0.99 + host: api.ccsens.com password: 111111 port: 5672 username: admin diff --git a/tall/src/main/resources/mapper_dao/DeliverDao.xml b/tall/src/main/resources/mapper_dao/DeliverDao.xml index 5280ef5f..0f72a56a 100644 --- a/tall/src/main/resources/mapper_dao/DeliverDao.xml +++ b/tall/src/main/resources/mapper_dao/DeliverDao.xml @@ -148,10 +148,9 @@ l.is_history as history, l.user_id as userId FROM - `t_pro_task_deliver_post_log` l JOIN t_sys_commited_file f on l.file_id = f.id + `t_pro_task_deliver_post_log` l LEFT JOIN t_sys_commited_file f on l.file_id = f.id WHERE l.task_sub_time_id = #{subTimeId} - group by l.file_id ORDER BY l.time DESC diff --git a/tall/src/main/resources/mapper_dao/SysRingMsgDao.xml b/tall/src/main/resources/mapper_dao/SysRingMsgDao.xml index 6211e242..21fbc2a1 100644 --- a/tall/src/main/resources/mapper_dao/SysRingMsgDao.xml +++ b/tall/src/main/resources/mapper_dao/SysRingMsgDao.xml @@ -46,6 +46,10 @@ FROM t_sys_ring_msg m LEFT JOIN t_sys_ring_send s on m.id = s.ring_id WHERE + m.rec_status = 0 + and + s.rec_status = 0 + and ( m.sender_id = #{userId} or diff --git a/tall/src/main/resources/mapper_dao/SysUserDao.xml b/tall/src/main/resources/mapper_dao/SysUserDao.xml index 1ca117c7..99388f43 100644 --- a/tall/src/main/resources/mapper_dao/SysUserDao.xml +++ b/tall/src/main/resources/mapper_dao/SysUserDao.xml @@ -91,4 +91,39 @@ u.id = #{userId} limit 1 + + + + \ No newline at end of file diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index 9431acba..e573e4ea 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -49,7 +49,7 @@ public enum CodeEnum { NOT_ROLE(37,"对不起,找不到该角色",true), NOT_DELIVER(38,"对不起,找不到对应的交付物",true), NOT_TASK(39,"对不起,找不到对应的任务",true), - NOT_DELIVER_FILE(40,"上传文件信息错误,请重试",true), + NOT_DELIVER_FILE(40,"文件信息错误,请重试",true), IS_NOT_EXECUTOR(41,"对不起,您不是该任务负责人",true), NOT_CHECKER(42,"请选择检查人",true), SUB_TASK_IS_NOT_FINISH(43,"分组内任务未全部完成,无法完成任务",true), From e49e526abb096f5ef21f99de851748dc9cac8e80 Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Fri, 19 Jun 2020 17:38:52 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=BC=98=E5=85=88?= =?UTF-8?q?=E7=BA=A7=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tall/persist/dao/TaskSubTimeDao.java | 6 +++-- .../tall/service/IProTaskDetailService.java | 4 +++- .../tall/service/ITaskSubTimeService.java | 4 +++- .../tall/service/ProTaskDetailService.java | 14 +++++++---- .../tall/service/TaskDeliverService.java | 5 +++- .../tall/service/TaskSubTimeService.java | 17 +++++++------- .../ccsens/tall/web/ProjectController.java | 1 + .../com/ccsens/tall/web/TaskController.java | 12 +++++++--- tall/src/main/resources/application-prod.yml | 2 +- tall/src/main/resources/application-test.yml | 2 +- .../resources/mapper_dao/TaskDetailDao.xml | 5 ++-- .../resources/mapper_dao/TaskSubTimeDao.xml | 23 +++++++++++++++++-- 12 files changed, 68 insertions(+), 27 deletions(-) diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java index 90426ad7..5ea535dd 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java @@ -14,7 +14,9 @@ public interface TaskSubTimeDao extends ProTaskSubTimeMapper{ void clearTaskRealTime(@Param("projectId")Long projectId); - List getKanbanTake(@Param("userId")Long userId,@Param("projectId")Long projectId, @Param("roleId")Long roleId,@Param("type") Integer type,@Param("memberId")Long memberId); + List getKanbanTake(@Param("userId")Long userId,@Param("projectId")Long projectId, @Param("roleId")Long roleId, + @Param("type") Integer type,@Param("memberId")Long memberId,@Param("orderType")Integer orderType,@Param("order")Integer order); - List getKanbanTakeByType(@Param("userId")Long userId,@Param("projectId")Long projectId, @Param("roleId")Long roleId, @Param("type")Integer type); + List getKanbanTakeByType(@Param("userId")Long userId,@Param("projectId")Long projectId, @Param("roleId")Long roleId, + @Param("type")Integer type,@Param("orderType")Integer orderType,@Param("order")Integer order); } diff --git a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java index ffac0a98..1ce1a321 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java @@ -4,13 +4,15 @@ import com.ccsens.tall.bean.dto.TaskDto; import com.ccsens.tall.bean.po.ProSubTimeMember; import com.ccsens.tall.bean.po.ProTaskDetail; import com.ccsens.tall.bean.vo.TaskVo; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; public interface IProTaskDetailService { void saveTaskDetail(ProTaskDetail taskDetail); - Object getTasksByRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime, Integer process, Integer page, Integer pageSize) throws Exception; + Object getTasksByRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime, Integer process, + Integer page, Integer pageSize) throws Exception; TaskVo.NormalTask getTaskInfoByTaskId(Long currentUserId, Long projectId, Long taskId) throws Exception; diff --git a/tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java b/tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java index dc845d97..f2bccfca 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java @@ -4,6 +4,7 @@ import com.ccsens.tall.bean.dto.TaskDto; import com.ccsens.tall.bean.po.ProTaskSubTime; import com.ccsens.tall.bean.vo.TaskVo; import com.github.pagehelper.PageInfo; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -18,7 +19,8 @@ public interface ITaskSubTimeService { void clearTaskRealTime(Long projectId); - List getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize) throws Exception; + List getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, + Integer page, Integer pageSize, Integer orderType, Integer order) throws Exception; void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask) throws Exception; } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index 20f0eed1..be51869c 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -81,7 +81,8 @@ public class ProTaskDetailService implements IProTaskDetailService { } @Override - public Object getTasksByRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime, Integer process, Integer page, Integer pageSize) throws Exception { + public Object getTasksByRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime, Integer process, + Integer page, Integer pageSize) throws Exception { SysProject sysProject = sysProjectDao.selectByPrimaryKey(projectId); if (ObjectUtil.isNull(sysProject)) { throw new BaseException(CodeEnum.NOT_PROJECT); @@ -134,7 +135,8 @@ public class ProTaskDetailService implements IProTaskDetailService { /** * 查看任务 项目经理 */ - private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndPM(Long currentUserId, Long projectId,Long roleId, Long startTime, Long endTime, Integer process, Integer page, Integer pageSize) throws Exception { + private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndPM(Long currentUserId, Long projectId,Long roleId, Long startTime, Long endTime, + Integer process, Integer page, Integer pageSize) throws Exception { TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo(); List globalTaskList = new ArrayList<>(); @@ -233,7 +235,8 @@ public class ProTaskDetailService implements IProTaskDetailService { /** * 查看任务 项目成员 */ - private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime, Integer process, Integer page, Integer pageSize) throws Exception { + private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, + Long endTime, Integer process, Integer page, Integer pageSize) throws Exception { TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo(); List globalTaskList = new ArrayList<>(); @@ -246,7 +249,8 @@ public class ProTaskDetailService implements IProTaskDetailService { allMemberId = allMember.getId(); } //查找该角色的所有任务(全体成员的任务也是这个角色的任务) - List secondTaskVoList = taskDetailDao.selectTaskByRoleAndAllMembers(projectId, roleId,allMemberId, startTime, endTime); + List secondTaskVoList = taskDetailDao.selectTaskByRoleAndAllMembers(projectId, roleId, + allMemberId, startTime, endTime); if (CollectionUtil.isNotEmpty(secondTaskVoList)) { for (TaskVo.NormalTask normalTask : secondTaskVoList) { @@ -285,7 +289,7 @@ public class ProTaskDetailService implements IProTaskDetailService { } } if (CollectionUtil.isNotEmpty(task.getCommonTask())) { - normalTaskList = sortTaskTime(task.getCommonTask()); + normalTaskList = sortTaskTime(task.getCommonTask()); } } diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java index 68aa25c8..2ddef5c7 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java @@ -24,6 +24,7 @@ import com.ccsens.util.config.RabbitMQConfig; import com.ccsens.util.exception.BaseException; import lombok.extern.slf4j.Slf4j; import org.omg.CORBA.OBJ_ADAPTER; +import org.omg.CORBA.StructMember; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -427,7 +428,9 @@ public class TaskDeliverService implements ITaskDeliverService { filePath.setDeleteTime(filePath.getUpdateTime().getTime()); } //修改文件路径为可下载路径 - filePath.setUrl(WebConstant.TEST_URL_BASE + filePath.getUrl()); + if(StrUtil.isNotEmpty(filePath.getUrl())) { + filePath.setUrl(WebConstant.TEST_URL_BASE + filePath.getUrl()); + } if (ObjectUtil.isNotNull(filePath.getUploaderId())) { //添加上传人的姓名信息 ProMember member = proMemberService.selectByUserId(filePath.getUploaderId(), task.getProjectId()); diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java index 8c0f5026..93e753b5 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java @@ -447,7 +447,8 @@ public class TaskSubTimeService implements ITaskSubTimeService { * @return 任务列表 */ @Override - public List getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize) throws Exception { + public List getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, + Integer page, Integer pageSize, Integer orderType, Integer order) throws Exception { //返回的list List kanBans = new ArrayList<>(); //查找此用户在任务下的成员 @@ -457,7 +458,7 @@ public class TaskSubTimeService implements ITaskSubTimeService { } //TODO 暂时确定三个状态 - Map typeMap = new HashMap<>(); + Map typeMap = new HashMap<>(0); typeMap.put(0, "未开始"); typeMap.put(1, "进行中"); typeMap.put(2, "已完成"); @@ -470,10 +471,10 @@ public class TaskSubTimeService implements ITaskSubTimeService { kanBan.setTypeName(entry.getValue()); PageHelper.startPage(page, pageSize); if (kanBan.getCode() <= 2) { - List kanBanTaskList = taskSubTimeDao.getKanbanTake(currentUserId,projectId, roleId, kanBan.getCode(), member.getId()); + List kanBanTaskList = taskSubTimeDao.getKanbanTake(currentUserId,projectId, roleId, kanBan.getCode(), member.getId(),orderType,order); kanBan.setTaskList(new PageInfo<>(kanBanTaskList)); } else { - List kanBanTaskList = taskSubTimeDao.getKanbanTakeByType(currentUserId,projectId, roleId, kanBan.getCode()); + List kanBanTaskList = taskSubTimeDao.getKanbanTakeByType(currentUserId,projectId, roleId, kanBan.getCode(),orderType,order); kanBan.setTaskList(new PageInfo<>(kanBanTaskList)); } kanBans.add(kanBan); @@ -484,10 +485,10 @@ public class TaskSubTimeService implements ITaskSubTimeService { kanBan.setTypeName(typeMap.get(type)); PageHelper.startPage(page, pageSize); if (kanBan.getCode() <= 2) { - List kanBanTaskList = taskSubTimeDao.getKanbanTake(currentUserId,projectId, roleId, type, member.getId()); + List kanBanTaskList = taskSubTimeDao.getKanbanTake(currentUserId,projectId, roleId, type, member.getId(),orderType,order); kanBan.setTaskList(new PageInfo<>(kanBanTaskList)); } else { - List kanBanTaskList = taskSubTimeDao.getKanbanTakeByType(currentUserId,projectId, roleId, type); + List kanBanTaskList = taskSubTimeDao.getKanbanTakeByType(currentUserId,projectId, roleId, type,orderType,order); kanBan.setTaskList(new PageInfo<>(kanBanTaskList)); } kanBans.add(kanBan); @@ -499,8 +500,8 @@ public class TaskSubTimeService implements ITaskSubTimeService { /** * 修改看板上的任务状态 * - * @param currentUserId - * @param changeKanbanTask + * @param currentUserId userId + * @param changeKanbanTask 任务状态 */ @Override public void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask) throws Exception { diff --git a/tall/src/main/java/com/ccsens/tall/web/ProjectController.java b/tall/src/main/java/com/ccsens/tall/web/ProjectController.java index 0b0c4a83..34f0b2fa 100644 --- a/tall/src/main/java/com/ccsens/tall/web/ProjectController.java +++ b/tall/src/main/java/com/ccsens/tall/web/ProjectController.java @@ -116,6 +116,7 @@ public class ProjectController { Integer pageSize = 10; page = page == null ? 1 : page; process = process == null ? 0 : process; + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); Object proTaskInfo = taskDetailService.getTasksByRoleId(currentUserId,projectId,roleId,startTime,endTime,process,page,pageSize); return JsonResponse.newInstance().ok(proTaskInfo); diff --git a/tall/src/main/java/com/ccsens/tall/web/TaskController.java b/tall/src/main/java/com/ccsens/tall/web/TaskController.java index 02f75be2..06cf237e 100644 --- a/tall/src/main/java/com/ccsens/tall/web/TaskController.java +++ b/tall/src/main/java/com/ccsens/tall/web/TaskController.java @@ -126,7 +126,9 @@ public class TaskController { @ApiImplicitParams({ @ApiImplicitParam(name = "projectId", value = "项目id 必填", required = true, paramType = "query"), @ApiImplicitParam(name = "type", value = "任务状态 0未开始 1进行中 2已完成", required = true, paramType = "query"), - @ApiImplicitParam(name = "roleId", value = "角色id 不传则查找全部", required = true, paramType = "query") + @ApiImplicitParam(name = "roleId", value = "角色id 不传则查找全部", required = true, paramType = "query"), + @ApiImplicitParam(name = "orderType", value = "排序方式 0时间排序 1优先级排序 没有则默认时间排序",paramType = "query",dataType = "string"), + @ApiImplicitParam(name = "order", value = "排序方式 0倒序 1正序 默认倒序",paramType = "query") }) @RequestMapping(value = "kanban", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) public JsonResponse> getKanbanTake(HttpServletRequest request, @@ -134,11 +136,15 @@ public class TaskController { @RequestParam(required = false)Long roleId, @RequestParam(required = false)Integer type, @RequestParam(required = false)Integer page, - @RequestParam(required = false)Integer pageSize) throws Exception { + @RequestParam(required = false)Integer pageSize, + @RequestParam(required = false)Integer orderType, + @RequestParam(required = false)Integer order) throws Exception { page = page == null ? 1 : page; pageSize = pageSize == null ? 10 : pageSize; + orderType = orderType == null ? 0 : orderType; + order = order == null ? 0 : order; Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); - List kanbanList = subTimeService.getKanbanTake(currentUserId,projectId,roleId,type,page,pageSize); + List kanbanList = subTimeService.getKanbanTake(currentUserId,projectId,roleId,type,page,pageSize,orderType,order); return JsonResponse.newInstance().ok(kanbanList); } diff --git a/tall/src/main/resources/application-prod.yml b/tall/src/main/resources/application-prod.yml index 2835dbd7..4743ced1 100644 --- a/tall/src/main/resources/application-prod.yml +++ b/tall/src/main/resources/application-prod.yml @@ -38,4 +38,4 @@ eureka: gatewayUrl: https://www.tall.wiki/gateway/ notGatewayUrl: https://www.tall.wiki/ wx: - prefixUrl: https://test.tall.wiki/wxconfigurer-api \ No newline at end of file + prefixUrl: https://test.tall.wiki/wxconfigurer-api/ \ No newline at end of file diff --git a/tall/src/main/resources/application-test.yml b/tall/src/main/resources/application-test.yml index edaa05c9..1235f17c 100644 --- a/tall/src/main/resources/application-test.yml +++ b/tall/src/main/resources/application-test.yml @@ -39,4 +39,4 @@ eureka: gatewayUrl: https://test.tall.wiki/gateway/ notGatewayUrl: https://test.tall.wiki/ wx: - prefixUrl: https://test.tall.wiki/wxconfigurer-api \ No newline at end of file + prefixUrl: https://test.tall.wiki/wxconfigurer-api/ \ No newline at end of file diff --git a/tall/src/main/resources/mapper_dao/TaskDetailDao.xml b/tall/src/main/resources/mapper_dao/TaskDetailDao.xml index f4f239d7..d33e337b 100644 --- a/tall/src/main/resources/mapper_dao/TaskDetailDao.xml +++ b/tall/src/main/resources/mapper_dao/TaskDetailDao.xml @@ -89,7 +89,8 @@ p.id as p_id, sp.description as spDescription, sp.id as spid, - sp.show_type as spShowType + sp.show_type as spShowType, + d.priority as priority FROM t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d ON s.task_detail_id = d.id LEFT JOIN t_pro_task_plugin p ON p.task_detail_id = d.id @@ -117,7 +118,6 @@ AND s.end_time > #{startTime} - AND d.Level in (2,3) AND @@ -128,6 +128,7 @@ )t GROUP BY t.tSubTimeId order by t.tDetailId + diff --git a/tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml b/tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml index a722a3fa..85a7397e 100644 --- a/tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml +++ b/tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml @@ -73,6 +73,8 @@ d.rec_status = 0 and d.level != 0 + and + d.level != 1 and r.id = #{roleId} @@ -93,7 +95,15 @@ t.mid > 0 ) ) - ORDER BY s.begin_time DESC + ORDER BY + + s.begin_time DESC + + + d.priority DESC + ,s.begin_time DESC + + \ No newline at end of file From a681f3ea91d44f1e048c6e51fd275fbdaf54f0dc Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Tue, 23 Jun 2020 10:29:24 +0800 Subject: [PATCH 4/4] 0623 --- .../com/ccsens/tall/bean/dto/MemberDto.java | 24 +++++++- .../com/ccsens/tall/bean/dto/ProjectDto.java | 4 ++ .../com/ccsens/tall/bean/dto/RingDto.java | 6 ++ .../com/ccsens/tall/bean/vo/ProjectVo.java | 15 +++++ .../java/com/ccsens/tall/bean/vo/RingVo.java | 25 ++++++-- .../tall/service/IProMemberService.java | 16 +++++ .../com/ccsens/tall/service/IRingService.java | 30 ++++++++- .../ccsens/tall/service/ProMemberService.java | 44 +++++++++++++ .../ccsens/tall/service/ProjectService.java | 60 ++++++++++-------- .../com/ccsens/tall/service/RingService.java | 61 ++++++++++++++++--- .../com/ccsens/tall/web/MemberController.java | 31 ++++++++-- .../ccsens/tall/web/MemberRoleController.java | 2 +- .../ccsens/tall/web/ProjectController.java | 16 ++--- .../com/ccsens/tall/web/RingController.java | 16 ++++- .../ccsens/tall/web/UserInfoController.java | 2 +- tall/src/main/resources/application.yml | 4 +- .../resources/mapper_dao/SysProjectDao.xml | 6 +- .../test/java/com/ccsens/util/Base64Test.java | 8 +-- 18 files changed, 302 insertions(+), 68 deletions(-) diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java index 300e6fd7..21721c06 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/MemberDto.java @@ -15,7 +15,7 @@ import java.util.List; @Data public class MemberDto { @Data - @ApiModel("添加评论") + @ApiModel("添加成员") public static class SaveMember{ @ApiModelProperty("项目id") private Long projectId; @@ -29,4 +29,26 @@ public class MemberDto { private Long stakeholderId; } + + @Data + @ApiModel("删除成员") + public static class DeleteMember{ + @ApiModelProperty("成员id") + private Long memberId; + } + + @Data + @ApiModel("修改成员信息") + public static class UpdateMemberInfo{ + @ApiModelProperty("成员id") + private Long memberId; + @ApiModelProperty("成员名") + private String memberName; + @ApiModelProperty("成员手机号") + private String phone; + @ApiModelProperty("所属角色的id") + private List roleId; + @ApiModelProperty("奖惩干系人id") + private Long stakeholderId; + } } diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java index bdbaeaba..b1d93ddd 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java @@ -66,5 +66,9 @@ public class ProjectDto { private String description; @ApiModelProperty("被修改的项目的地址") private String address; + @ApiModelProperty("项目开始时间") + private String beginTime; + @ApiModelProperty("项目结束时间") + private String endTime; } } diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/RingDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/RingDto.java index a24cd121..289fc311 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/RingDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/RingDto.java @@ -42,4 +42,10 @@ public class RingDto { @ApiModelProperty("消息id") private List messageIdList; } + @Data + @ApiModel("将项目内的消息设为已读") + public static class ReadMessageByProjectId{ + @ApiModelProperty("项目id") + private Long projectId; + } } diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java index 8e57cd2b..5d9ad382 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java @@ -40,6 +40,8 @@ public class ProjectVo { private ProjectConfig projectConfig; @ApiModelProperty("标签信息") private List labelList; + @ApiModelProperty("未处理信息的数量") + private ProjectUnreadMsg projectUnreadMsg; public Long getTotalDuration(){ if(ObjectUtil.isNotNull(endTime) && ObjectUtil.isNotNull(beginTime)){ @@ -84,6 +86,19 @@ public class ProjectVo { } } + @Data + @ApiModel("项目下未处理的消息数量") + public static class ProjectUnreadMsg{ + @ApiModelProperty("未处理的消息总数") + private Integer totalNum; + @ApiModelProperty("ring消息") + private Integer ringNum; + @ApiModelProperty("check消息") + private Integer checkNum; + @ApiModelProperty("交付物消息") + private Integer deliverNum; + } + @ApiModel @Data public static class ProjectConfig{ diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java index c9b3050d..70b530a1 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/RingVo.java @@ -21,16 +21,16 @@ public class RingVo { private Integer size ; } @Data - @ApiModel("返回ring消息") + @ApiModel("查找ring消息") public static class RingInfo{ @ApiModelProperty("消息id") private Long messageId; @ApiModelProperty("消息内容") - private String value ; + private String value; @ApiModelProperty("消息发送时间") - private Long time ; + private Long time; @ApiModelProperty("是否是自己发送的消息") - private Integer mine ; + private Integer mine; @ApiModelProperty("未读数量") private Integer unread; @ApiModelProperty("发送者信息") @@ -40,7 +40,7 @@ public class RingVo { } @Data - @ApiModel("接收/发送者信息") + @ApiModel("发送者信息") public static class MsgReceiveRole{ @ApiModelProperty("接收者的角色id") private Long id; @@ -51,7 +51,7 @@ public class RingVo { } @Data - @ApiModel("接收/发送者信息") + @ApiModel("接收者信息") public static class MsgSender{ @ApiModelProperty("发送者的id") private Long id; @@ -60,4 +60,17 @@ public class RingVo { @ApiModelProperty("发送者的头像") private String avatarUrl; } + + @Data + @ApiModel("发送后返回消息详情") + public static class RingInfoByReturn{ + @ApiModelProperty("消息id") + private Long messageId; + @ApiModelProperty("消息内容") + private String value; + @ApiModelProperty("消息发送时间") + private Long time; + @ApiModelProperty("接收角色的信息") + private List roleList = new ArrayList<>(); + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java b/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java index 493832ef..62975830 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IProMemberService.java @@ -35,6 +35,22 @@ public interface IProMemberService { * 添加成员 * @param currentUserId userId * @param saveMember 项目id,角色id,成员姓名和手机号等 + * @throws Exception 权限不足异常 */ void saveProMember(Long currentUserId, MemberDto.SaveMember saveMember) throws Exception; + + /** + * 删除成员 + * @param currentUserId userId + * @param deleteMember 被删除的成员的id + */ + void deleteMember(Long currentUserId, MemberDto.DeleteMember deleteMember); + + /** + * 修改成员的信息 + * @param currentUserId userId + * @param updateMemberInfo 需要修改的信息 + * @return 返回修改后的成员信息 + */ + ProjectVo.MembersByProject updateMemberInfo(Long currentUserId, MemberDto.UpdateMemberInfo updateMemberInfo); } diff --git a/tall/src/main/java/com/ccsens/tall/service/IRingService.java b/tall/src/main/java/com/ccsens/tall/service/IRingService.java index 0f9dbca2..4fba61ad 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IRingService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IRingService.java @@ -8,9 +8,37 @@ import com.github.pagehelper.PageInfo; import java.util.List; public interface IRingService { - void sendRingMsg(Long currentUserId, RingDto.RingSendDto ringSendDto) throws Exception; + /** + * 发送消息 + * @param currentUserId userId + * @param ringSendDto 发送的消息内容 + * @return 返回发送的消息详细信息 + * @throws Exception json异常 + */ + RingVo.RingInfoByReturn sendRingMsg(Long currentUserId, RingDto.RingSendDto ringSendDto) throws Exception; + /** + * 查找ring消息 + * @param currentUserId userId + * @param getRingDto 项目id和分页信息 + * @return 分页查找的消息详情 + */ PageInfo getRingInfo(Long currentUserId, RingDto.GetRingDto getRingDto); + /** + * 阅读消息 + * @param currentUserId userId + * @param message 消息id + * @return 返回已读的消息的信息 + * @throws JsonProcessingException json异常 + */ List readRingMsg(Long currentUserId, RingDto.MessageId message) throws JsonProcessingException; + + /** + * 将项目下的消息全部已读 + * @param currentUserId userId + * @param projectId 项目id + * @throws Exception json异常 + */ + void readRingMsgByProjectId(Long currentUserId, Long projectId) throws Exception; } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java b/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java index ec801469..e19ed570 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java @@ -265,4 +265,48 @@ public class ProMemberService implements IProMemberService { throw new BaseException(CodeEnum.NOT_POWER); } } + + @Override + public void deleteMember(Long currentUserId, MemberDto.DeleteMember deleteMember) { + //查找要删除的成员 + ProMember proMember = proMemberDao.selectByPrimaryKey(deleteMember.getMemberId()); + if(ObjectUtil.isNull(proMember)){ + throw new BaseException(CodeEnum.NOT_MEMBER); + } + //检查操作者的权限 + int power = proRoleService.selectPowerByRoleName(currentUserId, proMember.getProjectId()); +// if (power < 2) { +// throw new BaseException(CodeEnum.NOT_POWER); +// } + //修改成员状态来删除 + proMember.setRecStatus((byte) 2); + proMemberDao.updateByPrimaryKeySelective(proMember); + //删除成员和角色关联信息 + ProMemberRoleExample proMemberRoleExample = new ProMemberRoleExample(); + proMemberRoleExample.createCriteria().andMemberIdEqualTo(proMember.getId()); + List proMemberRoleList = proMemberRoleDao.selectByExample(proMemberRoleExample); + if(CollectionUtil.isNotEmpty(proMemberRoleList)){ + proMemberRoleList.forEach(proMemberRole -> { + proMemberRole.setRecStatus((byte) 2); + proMemberRoleDao.updateByPrimaryKeySelective(proMemberRole); + }); + } + //删除成员关注项目的信息 + UserAttentionExample userAttentionExample = new UserAttentionExample(); + userAttentionExample.createCriteria().andUserIdEqualTo(proMember.getUserId()).andProjectIdEqualTo(proMember.getProjectId()); + List userAttentionList = userAttentionDao.selectByExample(userAttentionExample); + if(CollectionUtil.isNotEmpty(userAttentionList)){ + userAttentionList.forEach(userAttention -> { + userAttention.setRecStatus((byte) 2); + userAttentionDao.updateByPrimaryKeySelective(userAttention); + }); + } + } + + @Override + public ProjectVo.MembersByProject updateMemberInfo(Long currentUserId, MemberDto.UpdateMemberInfo updateMemberInfo) { + return null; + } + + } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProjectService.java b/tall/src/main/java/com/ccsens/tall/service/ProjectService.java index 1beffc16..9fe2cee7 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProjectService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProjectService.java @@ -7,7 +7,6 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.po.*; -import com.ccsens.tall.bean.vo.DomainVo; import com.ccsens.tall.bean.vo.LabelVo; import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.persist.dao.*; @@ -20,11 +19,11 @@ import com.ccsens.util.exception.BaseException; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; @@ -32,31 +31,31 @@ import java.util.*; @Service @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class ProjectService implements IProjectService { - @Autowired + @Resource private SysProjectDao sysProjectDao; - @Autowired + @Resource private ProShowDao proShowDao; - @Autowired + @Resource private ProRoleExcludeDao roleExcludeDao; - @Autowired + @Resource private ProRoleDao proRoleDao; - @Autowired + @Resource private TaskDetailDao taskDetailDao; - @Autowired + @Resource private TaskSubTimeDao taskSubTimeDao; - @Autowired + @Resource private UserAttentionDao attentionDao; - @Autowired + @Resource private TaskPluginDao pluginDao; - @Autowired + @Resource private TaskDeliverDao taskDeliverDao; - @Autowired + @Resource private IProRoleService proRoleService; - @Autowired + @Resource private Snowflake snowflake; - @Autowired + @Resource private SysDomainDao sysDomainDao; - @Autowired + @Resource private SysLabelDao sysLabelDao; @Override @@ -71,13 +70,12 @@ public class ProjectService implements IProjectService { /** * 根据名字查找此用户创建的项目 - * - * @param subProject - * @param currentUserId - * @return + * @param subProject 项目名 + * @param currentUserId userId + * @return 项目信息 */ @Override - public SysProject selectByNameAndUserId(String subProject, Long currentUserId) throws Exception { + public SysProject selectByNameAndUserId(String subProject, Long currentUserId) { SysProject project = new SysProject(); SysProjectExample projectExample = new SysProjectExample(); projectExample.createCriteria().andCreatorIdEqualTo(currentUserId).andNameEqualTo(subProject); @@ -90,10 +88,9 @@ public class ProjectService implements IProjectService { /** * 查找本月哪一天有项目 - * - * @param currentUserId - * @param date - * @return + * @param currentUserId userId + * @param date 日期 + * @return 返回有项目的日期 */ @Override public List haveProjectDay(Long currentUserId, String date) throws Exception { @@ -109,13 +106,13 @@ public class ProjectService implements IProjectService { for (SysProject sysProject : projectList) { startMillisTime = sysProject.getBeginTime() > startMillisTime ? sysProject.getBeginTime() : startMillisTime; endMillisTime = sysProject.getEndTime() < endMillisTime ? sysProject.getEndTime() : endMillisTime; - dateList = getTimeList(dateList, startMillisTime, endMillisTime); + getTimeList(dateList, startMillisTime, endMillisTime); } } return dateList; } - private List getTimeList(List dateList, Long startTime, Long endTime) { + private void getTimeList(List dateList, Long startTime, Long endTime) { SimpleDateFormat sdf = new SimpleDateFormat("dd"); Date s = new Date(startTime); Date e = new Date(endTime); @@ -133,7 +130,6 @@ public class ProjectService implements IProjectService { } curr.add(Calendar.DATE, 1); } - return dateList; } /** @@ -193,10 +189,18 @@ public class ProjectService implements IProjectService { ProjectVo.ProjectConfig projectConfig = new ProjectVo.ProjectConfig(); projectInfo.setProjectConfig(projectConfig); } + //查找项目未处理的消息数量 + ProjectVo.ProjectUnreadMsg unreadMsg = getUnreadMsgByProject(currentUserId,projectInfo.getId()); + projectInfo.setProjectUnreadMsg(unreadMsg); }); } } + private ProjectVo.ProjectUnreadMsg getUnreadMsgByProject(Long userId,Long projectId) { + + return null; + } + private List projectInfoByProject(List projectList, Long currentUserId) { List projectInfoList = new ArrayList<>(); if (CollectionUtil.isNotEmpty(projectList)) { @@ -587,6 +591,7 @@ public class ProjectService implements IProjectService { if (CollectionUtil.isNotEmpty(roleExecludeList)) { for (ProRoleExclude roleExeclude : roleExecludeList) { ProRoleExclude newRoleExeclude = new ProRoleExclude(); + newRoleExeclude.setId(snowflake.nextId()); newRoleExeclude.setRoleId(newRoleMap.get(oldRoleMap.get(roleExeclude.getRoleId()))); newRoleExeclude.setOtherRoleId(newRoleMap.get(oldRoleMap.get(roleExeclude.getRoleId()))); roleExcludeDao.insertSelective(newRoleExeclude); @@ -757,6 +762,7 @@ public class ProjectService implements IProjectService { sysProjectDao.updateByPrimaryKeySelective(project); } else { throw new BaseException(CodeEnum.NOT_POWER); + } } else { throw new BaseException(CodeEnum.NOT_PROJECT); diff --git a/tall/src/main/java/com/ccsens/tall/service/RingService.java b/tall/src/main/java/com/ccsens/tall/service/RingService.java index 5c1e5599..b84da705 100644 --- a/tall/src/main/java/com/ccsens/tall/service/RingService.java +++ b/tall/src/main/java/com/ccsens/tall/service/RingService.java @@ -61,7 +61,7 @@ public class RingService implements IRingService { * @param ringSendDto 发送的消息内容 */ @Override - public void sendRingMsg(Long currentUserId, RingDto.RingSendDto ringSendDto) throws Exception { + public RingVo.RingInfoByReturn sendRingMsg(Long currentUserId, RingDto.RingSendDto ringSendDto) throws Exception { //获取当前时间 Long time = System.currentTimeMillis(); //将消息详情保存至数据库 @@ -98,6 +98,14 @@ public class RingService implements IRingService { ringMessageWithSendDto.setReceivers(BaseMessageDto.MessageUser.userIdToUsers(userIdList)); rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME, JacksonUtil.beanToJson(ringMessageWithSendDto)); + //返回消息的详细信息 + RingVo.RingInfoByReturn ringInfoByReturn = new RingVo.RingInfoByReturn(); + ringInfoByReturn.setMessageId(ringMsg.getId()); + ringInfoByReturn.setTime(ringMsg.getTime()); + ringInfoByReturn.setValue(ringMsg.getValueText()); + List msgReceiveRole = sysRingMsgDao.ringReceiveRole(ringMsg.getId()); + ringInfoByReturn.setRoleList(msgReceiveRole); + return ringInfoByReturn; } /** @@ -121,11 +129,11 @@ public class RingService implements IRingService { List msgReceiveRole = sysRingMsgDao.ringReceiveRole(ringInfo.getMessageId()); ringInfo.setRoleList(msgReceiveRole); //添加发送者的头像 - if(ObjectUtil.isNotNull(ringInfo.getSender())) { + if (ObjectUtil.isNotNull(ringInfo.getSender())) { SysUser user = userDao.selectByPrimaryKey(ringInfo.getSender().getId()); - if(ObjectUtil.isNotNull(user) && StrUtil.isNotEmpty(user.getAvatarUrl())){ + if (ObjectUtil.isNotNull(user) && StrUtil.isNotEmpty(user.getAvatarUrl())) { ringInfo.getSender().setAvatarUrl(user.getAvatarUrl()); - }else { + } else { ringInfo.getSender().setAvatarUrl(PropUtil.notGatewayUrl + "staticrec/logo.png"); } } @@ -182,18 +190,18 @@ public class RingService implements IRingService { } } //查询被读的信息返回 - List ringInfos = sysRingMsgDao.selectRingInfoByRingMsgId(currentUserId, message.getProjectId(),msgId); + List ringInfos = sysRingMsgDao.selectRingInfoByRingMsgId(currentUserId, message.getProjectId(), msgId); if (CollectionUtil.isNotEmpty(ringInfos)) { ringInfos.forEach(ringInfo -> { //添加接收角色的信息 List msgReceiveRole = sysRingMsgDao.ringReceiveRole(msgId); ringInfo.setRoleList(msgReceiveRole); //添加发送者的头像 - if(ObjectUtil.isNotNull(ringInfo.getSender())) { + if (ObjectUtil.isNotNull(ringInfo.getSender())) { SysUser user = userDao.selectByPrimaryKey(ringInfo.getSender().getId()); - if(ObjectUtil.isNotNull(user) && StrUtil.isNotEmpty(user.getAvatarUrl())){ + if (ObjectUtil.isNotNull(user) && StrUtil.isNotEmpty(user.getAvatarUrl())) { ringInfo.getSender().setAvatarUrl(user.getAvatarUrl()); - }else { + } else { ringInfo.getSender().setAvatarUrl(PropUtil.notGatewayUrl + "staticrec/logo.png"); } } @@ -205,4 +213,41 @@ public class RingService implements IRingService { return ringInfoList; } + + @Override + public void readRingMsgByProjectId(Long currentUserId, Long projectId) throws Exception { + log.info("读取消息的项目id:{}", projectId); + //获取当前用户在项目内的角色 + List roleIdList = sysRingMsgDao.selectRoleIdByUserId(currentUserId, projectId); + log.info("阅读者的角色:{}", roleIdList.toString()); + if (CollectionUtil.isNotEmpty(roleIdList)) { + for (Long roleId : roleIdList) { + //查找消息 + SysRingSendExample sysRingSendExample = new SysRingSendExample(); + sysRingSendExample.createCriteria().andRoleIdEqualTo(roleId); + List sysRingSendList = sysRingSendDao.selectByExample(sysRingSendExample); + if (CollectionUtil.isNotEmpty(sysRingSendList)) { + //循环已读消息 + for (SysRingSend sysRingSend : sysRingSendList) { + if (sysRingSend.getReadStatus() != 1) { + sysRingSend.setReadStatus((byte) 1); + sysRingSend.setReadTime(System.currentTimeMillis()); + sysRingSendDao.updateByPrimaryKeySelective(sysRingSend); + //获取消息 + SysRingMsg sysRingMsg = sysRingMsgDao.selectByPrimaryKey(sysRingSend.getRingId()); + //ws消息接收者的userId + Set userIdSet = new HashSet<>(); + userIdSet.add(sysRingMsg.getSenderId()); + List userIdList = new ArrayList<>(userIdSet); + //将已读消息返回给发送者 + RingMessageWithReadDto ringMessageWithReadDto = new RingMessageWithReadDto(sysRingMsg.getId(), projectId, roleId); + ringMessageWithReadDto.setReceivers(BaseMessageDto.MessageUser.userIdToUsers(userIdList)); + rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME, + JacksonUtil.beanToJson(ringMessageWithReadDto)); + } + } + } + } + } + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/MemberController.java b/tall/src/main/java/com/ccsens/tall/web/MemberController.java index 6f032c0d..fdf5c149 100644 --- a/tall/src/main/java/com/ccsens/tall/web/MemberController.java +++ b/tall/src/main/java/com/ccsens/tall/web/MemberController.java @@ -1,8 +1,7 @@ package com.ccsens.tall.web; import com.ccsens.tall.bean.dto.MemberDto; -import com.ccsens.tall.bean.dto.MemberRoleDto; -import com.ccsens.tall.bean.dto.RingDto; +import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.service.IProMemberService; import com.ccsens.util.JsonResponse; import com.ccsens.util.WebConstant; @@ -19,20 +18,42 @@ import javax.servlet.http.HttpServletRequest; */ @Api(tags = "成员操作相关api" ) @RestController -@RequestMapping("/member") +@RequestMapping("/members") public class MemberController { @Resource private IProMemberService proMemberService; - @ApiOperation(value = "添加角色",notes = "") + @ApiOperation(value = "添加成员",notes = "") @ApiImplicitParams({ }) - @RequestMapping(value = "", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + @RequestMapping(value = "/save", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse saveMember(HttpServletRequest request, @ApiParam @Validated @RequestBody MemberDto.SaveMember saveMember) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); proMemberService.saveProMember(currentUserId,saveMember); return JsonResponse.newInstance().ok(); } + + @ApiOperation(value = "删除成员",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse deleteMember(HttpServletRequest request, + @ApiParam @Validated @RequestBody MemberDto.DeleteMember deleteMember) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + proMemberService.deleteMember(currentUserId,deleteMember); + return JsonResponse.newInstance().ok(); + } + + @ApiOperation(value = "修改成员信息",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateMemberInfo(HttpServletRequest request, + @ApiParam @Validated @RequestBody MemberDto.UpdateMemberInfo updateMemberInfo) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + ProjectVo.MembersByProject membersInfo = proMemberService.updateMemberInfo(currentUserId,updateMemberInfo); + return JsonResponse.newInstance().ok(membersInfo); + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java b/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java index dca38ab9..409d6174 100644 --- a/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java +++ b/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java @@ -78,7 +78,7 @@ public class MemberRoleController { @ApiImplicitParams({ @ApiImplicitParam(name = "roleId", value = "角色Id", required = true, paramType = "query") }) - @RequestMapping(value = "", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) + @RequestMapping(value = "/role/delete", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) public JsonResponse deleteTask(HttpServletRequest request, @RequestParam(required = false)Long roleId) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); diff --git a/tall/src/main/java/com/ccsens/tall/web/ProjectController.java b/tall/src/main/java/com/ccsens/tall/web/ProjectController.java index 34f0b2fa..5eaa1e82 100644 --- a/tall/src/main/java/com/ccsens/tall/web/ProjectController.java +++ b/tall/src/main/java/com/ccsens/tall/web/ProjectController.java @@ -1,6 +1,5 @@ package com.ccsens.tall.web; -import com.ccsens.tall.bean.dto.LabelDto; import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.bean.vo.TaskVo; @@ -15,24 +14,27 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; -@Api(tags = "项目相关API" , description = "") +/** + * @author 逗 + */ +@Api(tags = "项目相关API") @RestController @RequestMapping("/projects") public class ProjectController { - @Autowired + @Resource private IProjectService projectService; - @Autowired + @Resource private IProRoleService proRoleService; - @Autowired + @Resource private IProMemberService proMemberService; - @Autowired + @Resource private IProTaskDetailService taskDetailService; @ApiOperation(value = "获取日历上哪天有小红点",notes = "按照优先级倒序+时间正序排序") diff --git a/tall/src/main/java/com/ccsens/tall/web/RingController.java b/tall/src/main/java/com/ccsens/tall/web/RingController.java index 1fa0a578..9fdeab4f 100644 --- a/tall/src/main/java/com/ccsens/tall/web/RingController.java +++ b/tall/src/main/java/com/ccsens/tall/web/RingController.java @@ -31,11 +31,11 @@ public class RingController { @ApiImplicitParams({ }) @RequestMapping(value = "/send", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse sendRingMsg(HttpServletRequest request, + public JsonResponse sendRingMsg(HttpServletRequest request, @ApiParam @Validated @RequestBody RingDto.RingSendDto ringSendDto) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); - ringService.sendRingMsg(currentUserId,ringSendDto); - return JsonResponse.newInstance().ok(); + RingVo.RingInfoByReturn ringInfo = ringService.sendRingMsg(currentUserId,ringSendDto); + return JsonResponse.newInstance().ok(ringInfo); } @@ -63,4 +63,14 @@ public class RingController { return JsonResponse.newInstance().ok(ringInfoList); } + @ApiOperation(value = "将项目内的消息全部已读", notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/read/projectId", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse readRingMsgByProjectId(HttpServletRequest request, + @ApiParam @Validated @RequestBody RingDto.ReadMessageByProjectId projectId) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + ringService.readRingMsgByProjectId(currentUserId,projectId.getProjectId()); + return JsonResponse.newInstance().ok(); + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java b/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java index d0ca3674..65e310f6 100644 --- a/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java +++ b/tall/src/main/java/com/ccsens/tall/web/UserInfoController.java @@ -68,7 +68,7 @@ public class UserInfoController { return JsonResponse.newInstance().ok(); } - @ApiOperation(value = "上传头像") + @ApiOperation(value = "查找用户详细信息") @ApiImplicitParams({ }) @RequestMapping(value = "", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index c88e995d..b2acd365 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: test - include: util-test,common + active: dev + include: util-dev,common diff --git a/tall/src/main/resources/mapper_dao/SysProjectDao.xml b/tall/src/main/resources/mapper_dao/SysProjectDao.xml index ebeb4647..9bf3ab4c 100644 --- a/tall/src/main/resources/mapper_dao/SysProjectDao.xml +++ b/tall/src/main/resources/mapper_dao/SysProjectDao.xml @@ -139,8 +139,8 @@ l.level as lLevle, l.description as lDescription FROM - t_sys_user_attention a - left JOIN t_sys_project p ON a.project_id = p.id + t_sys_project p + LEFT JOIN t_sys_user_attention a ON a.project_id = p.id left join t_sys_project_label pl on pl.project_id = p.id left join t_sys_label l on pl.label_id = l.id and l.user_id = #{userId} @@ -148,6 +148,8 @@ a.user_id = #{userId} AND p.rec_status = 0 + and + a.rec_status = 0 and (l.rec_status = 0 or l.rec_status is null) and diff --git a/util/src/test/java/com/ccsens/util/Base64Test.java b/util/src/test/java/com/ccsens/util/Base64Test.java index 2c79076d..94aa3c12 100644 --- a/util/src/test/java/com/ccsens/util/Base64Test.java +++ b/util/src/test/java/com/ccsens/util/Base64Test.java @@ -13,7 +13,9 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @description: @@ -38,11 +40,9 @@ public class Base64Test { @Test public void test02() throws Exception { - String a = "112233445566"; - String b = a.substring(0,12); - System.out.println(a.length()); - System.out.println(b); + } + }