diff --git a/kernel-s-customer/customer-api/pom.xml b/kernel-s-customer/customer-api/pom.xml index 365b948eb..bce688338 100644 --- a/kernel-s-customer/customer-api/pom.xml +++ b/kernel-s-customer/customer-api/pom.xml @@ -24,6 +24,13 @@ ${roses.version} + + + cn.stylefeng.roses + validator-api + ${roses.version} + + diff --git a/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java index 53a69b5d2..863397b51 100644 --- a/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java +++ b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/exception/enums/CustomerExceptionEnum.java @@ -76,7 +76,12 @@ public enum CustomerExceptionEnum implements AbstractExceptionEnum { /** * 激活用户失败 */ - ACTIVE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "07", "激活用户失败!用户激活码无效!"); + ACTIVE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "07", "激活用户失败!用户激活码无效!"), + + /** + * 用户原密码错误 + */ + PWD_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "08", "更改密码失败,原密码错误!"); /** * 错误编码 diff --git a/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/pojo/CustomerInfoRequest.java b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/pojo/CustomerInfoRequest.java new file mode 100644 index 000000000..89a4bc443 --- /dev/null +++ b/kernel-s-customer/customer-api/src/main/java/cn/stylefeng/roses/kernel/customer/api/pojo/CustomerInfoRequest.java @@ -0,0 +1,56 @@ +package cn.stylefeng.roses.kernel.customer.api.pojo; + +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 用户信息修改的请求bean + * + * @author fengshuonan + * @date 2021/6/18 16:37 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class CustomerInfoRequest extends BaseRequest { + + /** + * 主键id + */ + @NotNull(message = "用户id不能为空", groups = {changeAvatar.class, changePassword.class}) + private Long customerId; + + /** + * 用户头像(文件表id) + */ + @NotNull(message = "用户头像", groups = changeAvatar.class) + private Long avatar; + + /** + * 原密码 + */ + @NotBlank(message = "原密码不能为空", groups = changePassword.class) + private String oldPassword; + + /** + * 新密码 + */ + @NotBlank(message = "新密码不能为空", groups = changePassword.class) + private String newPassword; + + /** + * 修改密码 + */ + public @interface changePassword { + } + + /** + * 修改头像 + */ + public @interface changeAvatar { + } + +} diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/controller/CustomerInfoController.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/controller/CustomerInfoController.java new file mode 100644 index 000000000..388096516 --- /dev/null +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/controller/CustomerInfoController.java @@ -0,0 +1,66 @@ +package cn.stylefeng.roses.kernel.customer.modular.controller; + +import cn.stylefeng.roses.kernel.customer.api.pojo.CustomerInfo; +import cn.stylefeng.roses.kernel.customer.api.pojo.CustomerInfoRequest; +import cn.stylefeng.roses.kernel.customer.modular.request.CustomerRequest; +import cn.stylefeng.roses.kernel.customer.modular.service.CustomerService; +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * C端用户个人信息修改 + * + * @author fengshuonan + * @date 2021/6/18 16:28 + */ +@RestController +@ApiResource(name = "C端用户个人信息修改") +public class CustomerInfoController { + + @Resource + private CustomerService customerService; + + /** + * 获取个人信息 + * + * @author fengshuonan + * @date 2021/6/18 16:29 + */ + @GetResource(name = "获取个人信息", path = "/customerInfo/getPersonInfo", requiredPermission = false) + public ResponseData getPersonInfo(@RequestBody @Validated(CustomerInfoRequest.detail.class) CustomerRequest customerRequest) { + CustomerInfo customerInfo = customerService.getCustomerInfoById(customerRequest.getCustomerId()); + return new SuccessResponseData(customerInfo); + } + + /** + * 修改个人密码 + * + * @author fengshuonan + * @date 2021/6/18 16:29 + */ + @GetResource(name = "修改个人密码", path = "/customerInfo/updatePassword", requiredPermission = false) + public ResponseData updatePassword(@RequestBody @Validated(CustomerInfoRequest.changePassword.class) CustomerInfoRequest customerInfoRequest) { + this.customerService.updatePassword(customerInfoRequest); + return new SuccessResponseData(); + } + + /** + * 修改个人头像 + * + * @author fengshuonan + * @date 2021/6/18 16:29 + */ + @GetResource(name = "修改个人头像", path = "/customerInfo/updateAvatar", requiredPermission = false) + public ResponseData updateAvatar(@RequestBody @Validated(CustomerInfoRequest.changeAvatar.class) CustomerInfoRequest customerInfoRequest) { + this.customerService.updateAvatar(customerInfoRequest); + return new SuccessResponseData(); + } + +} \ No newline at end of file diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java index d85438414..6fed4dcfa 100644 --- a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/request/CustomerRequest.java @@ -21,7 +21,7 @@ public class CustomerRequest extends BaseRequest { /** * 主键id */ - @NotNull(message = "主键id不能为空", groups = {edit.class, delete.class}) + @NotNull(message = "主键id不能为空", groups = {edit.class, delete.class, detail.class}) @ChineseDescription("主键id") private Long customerId; diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/CustomerService.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/CustomerService.java index 9aa3ab92a..f29ced087 100644 --- a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/CustomerService.java +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/CustomerService.java @@ -3,6 +3,7 @@ package cn.stylefeng.roses.kernel.customer.modular.service; import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginRequest; import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginResponse; import cn.stylefeng.roses.kernel.customer.api.CustomerApi; +import cn.stylefeng.roses.kernel.customer.api.pojo.CustomerInfoRequest; import cn.stylefeng.roses.kernel.customer.modular.entity.Customer; import cn.stylefeng.roses.kernel.customer.modular.request.CustomerRequest; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; @@ -106,4 +107,20 @@ public interface CustomerService extends IService, CustomerApi { */ PageResult findPage(CustomerRequest customerRequest); + /** + * 更新密码 + * + * @author fengshuonan + * @date 2021/6/18 17:16 + */ + void updatePassword(CustomerInfoRequest customerInfoRequest); + + /** + * 更新头像 + * + * @author fengshuonan + * @date 2021/6/18 17:16 + */ + void updateAvatar(CustomerInfoRequest customerInfoRequest); + } \ No newline at end of file diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java index dd172421d..1f96e57b9 100644 --- a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java @@ -16,6 +16,7 @@ import cn.stylefeng.roses.kernel.customer.api.exception.CustomerException; import cn.stylefeng.roses.kernel.customer.api.exception.enums.CustomerExceptionEnum; import cn.stylefeng.roses.kernel.customer.api.expander.CustomerConfigExpander; import cn.stylefeng.roses.kernel.customer.api.pojo.CustomerInfo; +import cn.stylefeng.roses.kernel.customer.api.pojo.CustomerInfoRequest; import cn.stylefeng.roses.kernel.customer.modular.entity.Customer; import cn.stylefeng.roses.kernel.customer.modular.factory.CustomerFactory; import cn.stylefeng.roses.kernel.customer.modular.mapper.CustomerMapper; @@ -26,7 +27,9 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.email.api.MailSenderApi; import cn.stylefeng.roses.kernel.email.api.pojo.SendMailParam; +import cn.stylefeng.roses.kernel.file.api.FileInfoApi; import cn.stylefeng.roses.kernel.file.api.FileOperatorApi; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; import cn.stylefeng.roses.kernel.jwt.api.context.JwtContext; import cn.stylefeng.roses.kernel.jwt.api.pojo.payload.DefaultJwtPayload; import cn.stylefeng.roses.kernel.log.api.LoginLogServiceApi; @@ -85,6 +88,9 @@ public class CustomerServiceImpl extends ServiceImpl i @Resource private FileOperatorApi fileOperatorApi; + @Resource + private FileInfoApi fileInfoApi; + @Override @Transactional(rollbackFor = Exception.class) public void reg(CustomerRequest customerRequest) { @@ -269,6 +275,41 @@ public class CustomerServiceImpl extends ServiceImpl i return this.list(wrapper); } + @Override + public void updatePassword(CustomerInfoRequest customerInfoRequest) { + + CustomerRequest customerRequest = new CustomerRequest(); + customerRequest.setCustomerId(customerInfoRequest.getCustomerId()); + Customer customer = this.detail(customerRequest); + + // 校验旧密码是否正确 + Boolean passwordRightFlag = passwordStoredEncryptApi.checkPassword(customerInfoRequest.getOldPassword(), customer.getPassword()); + if (!passwordRightFlag) { + throw new CustomerException(CustomerExceptionEnum.PWD_ERROR); + } + + // 更新密码 + String encryptPwd = passwordStoredEncryptApi.encrypt(customerInfoRequest.getNewPassword()); + customer.setPassword(encryptPwd); + this.updateById(customer); + } + + @Override + public void updateAvatar(CustomerInfoRequest customerInfoRequest) { + + CustomerRequest customerRequest = new CustomerRequest(); + customerRequest.setCustomerId(customerInfoRequest.getCustomerId()); + Customer customer = this.detail(customerRequest); + + // 根据id查询文件obj名称 + SysFileInfoResponse fileInfo = fileInfoApi.getFileInfoWithoutContent(customerInfoRequest.getAvatar()); + + // 更新头像 + customer.setAvatar(customerInfoRequest.getAvatar()); + customer.setAvatarObjectName(fileInfo.getFileObjectName()); + this.updateById(customer); + } + @Override public CustomerInfo getCustomerInfoById(Long customerId) {