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] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=B8=8A=E4=BC=A0=E5=A4=B4?= =?UTF-8?q?=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/";