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) {