feat: 客户管理和项目管理模块完善更新接口
## 客户管理模块
- CustomerUpdateDTO: 客户更新DTO
- CustomerService: 新增updateCustomer方法
- CustomerServiceImpl: 实现客户更新逻辑
- CustomerController: 新增PUT /api/v1/customer/{id}接口
## 项目管理模块
- ProjectUpdateDTO: 项目更新DTO
- ProjectService: 新增updateProject方法
- ProjectServiceImpl: 实现项目更新逻辑
- ProjectController: 新增PUT /api/v1/project/{id}接口
## 功能特性
- 更新时检查编码唯一性(排除自身)
- 支持状态更新
- 自动记录更新人和更新时间
This commit is contained in:
parent
075525d577
commit
6d06a361fe
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.fundplatform.common.core.PageResult;
|
import com.fundplatform.common.core.PageResult;
|
||||||
import com.fundplatform.common.core.Result;
|
import com.fundplatform.common.core.Result;
|
||||||
import com.fundplatform.cust.dto.CustomerCreateDTO;
|
import com.fundplatform.cust.dto.CustomerCreateDTO;
|
||||||
|
import com.fundplatform.cust.dto.CustomerUpdateDTO;
|
||||||
import com.fundplatform.cust.service.CustomerService;
|
import com.fundplatform.cust.service.CustomerService;
|
||||||
import com.fundplatform.cust.vo.CustomerVO;
|
import com.fundplatform.cust.vo.CustomerVO;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
@ -31,6 +32,15 @@ public class CustomerController {
|
|||||||
return Result.success(id);
|
return Result.success(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新客户
|
||||||
|
*/
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public Result<Void> updateCustomer(@PathVariable Long id, @Valid @RequestBody CustomerUpdateDTO dto) {
|
||||||
|
customerService.updateCustomer(id, dto);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询客户详情
|
* 查询客户详情
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -0,0 +1,91 @@
|
|||||||
|
package com.fundplatform.cust.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户更新DTO
|
||||||
|
*/
|
||||||
|
public class CustomerUpdateDTO {
|
||||||
|
|
||||||
|
@NotBlank(message = "客户编码不能为空")
|
||||||
|
private String customerCode;
|
||||||
|
|
||||||
|
@NotBlank(message = "客户名称不能为空")
|
||||||
|
private String customerName;
|
||||||
|
|
||||||
|
@NotBlank(message = "联系人不能为空")
|
||||||
|
private String contact;
|
||||||
|
|
||||||
|
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
private String email;
|
||||||
|
private String address;
|
||||||
|
private Integer status;
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
public String getCustomerCode() {
|
||||||
|
return customerCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomerCode(String customerCode) {
|
||||||
|
this.customerCode = customerCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCustomerName() {
|
||||||
|
return customerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomerName(String customerName) {
|
||||||
|
this.customerName = customerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContact() {
|
||||||
|
return contact;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContact(String contact) {
|
||||||
|
this.contact = contact;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhone() {
|
||||||
|
return phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhone(String phone) {
|
||||||
|
this.phone = phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(String address) {
|
||||||
|
this.address = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(Integer status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRemark() {
|
||||||
|
return remark;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemark(String remark) {
|
||||||
|
this.remark = remark;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@ package com.fundplatform.cust.service;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.fundplatform.cust.dto.CustomerCreateDTO;
|
import com.fundplatform.cust.dto.CustomerCreateDTO;
|
||||||
|
import com.fundplatform.cust.dto.CustomerUpdateDTO;
|
||||||
import com.fundplatform.cust.vo.CustomerVO;
|
import com.fundplatform.cust.vo.CustomerVO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -14,6 +15,11 @@ public interface CustomerService {
|
|||||||
*/
|
*/
|
||||||
Long createCustomer(CustomerCreateDTO dto);
|
Long createCustomer(CustomerCreateDTO dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新客户
|
||||||
|
*/
|
||||||
|
void updateCustomer(Long id, CustomerUpdateDTO dto);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询客户详情
|
* 查询客户详情
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import com.fundplatform.common.context.UserContextHolder;
|
|||||||
import com.fundplatform.cust.data.entity.Customer;
|
import com.fundplatform.cust.data.entity.Customer;
|
||||||
import com.fundplatform.cust.data.service.CustomerDataService;
|
import com.fundplatform.cust.data.service.CustomerDataService;
|
||||||
import com.fundplatform.cust.dto.CustomerCreateDTO;
|
import com.fundplatform.cust.dto.CustomerCreateDTO;
|
||||||
|
import com.fundplatform.cust.dto.CustomerUpdateDTO;
|
||||||
import com.fundplatform.cust.service.CustomerService;
|
import com.fundplatform.cust.service.CustomerService;
|
||||||
import com.fundplatform.cust.vo.CustomerVO;
|
import com.fundplatform.cust.vo.CustomerVO;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -50,6 +51,38 @@ public class CustomerServiceImpl implements CustomerService {
|
|||||||
return customer.getId();
|
return customer.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateCustomer(Long id, CustomerUpdateDTO dto) {
|
||||||
|
Customer customer = customerDataService.getById(id);
|
||||||
|
if (customer == null) {
|
||||||
|
throw new RuntimeException("客户不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查编码是否重复(排除自身)
|
||||||
|
if (!customer.getCustomerCode().equals(dto.getCustomerCode())) {
|
||||||
|
LambdaQueryWrapper<Customer> checkWrapper = new LambdaQueryWrapper<>();
|
||||||
|
checkWrapper.eq(Customer::getCustomerCode, dto.getCustomerCode())
|
||||||
|
.ne(Customer::getId, id);
|
||||||
|
if (customerDataService.count(checkWrapper) > 0) {
|
||||||
|
throw new RuntimeException("客户编码已存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customer.setCustomerCode(dto.getCustomerCode());
|
||||||
|
customer.setCustomerName(dto.getCustomerName());
|
||||||
|
customer.setContact(dto.getContact());
|
||||||
|
customer.setPhone(dto.getPhone());
|
||||||
|
customer.setEmail(dto.getEmail());
|
||||||
|
customer.setAddress(dto.getAddress());
|
||||||
|
if (dto.getStatus() != null) {
|
||||||
|
customer.setStatus(dto.getStatus());
|
||||||
|
}
|
||||||
|
customer.setRemark(dto.getRemark());
|
||||||
|
customer.setUpdatedBy(UserContextHolder.getUserId());
|
||||||
|
|
||||||
|
customerDataService.updateById(customer);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CustomerVO getCustomerById(Long id) {
|
public CustomerVO getCustomerById(Long id) {
|
||||||
Customer customer = customerDataService.getById(id);
|
Customer customer = customerDataService.getById(id);
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.fundplatform.common.core.PageResult;
|
import com.fundplatform.common.core.PageResult;
|
||||||
import com.fundplatform.common.core.Result;
|
import com.fundplatform.common.core.Result;
|
||||||
import com.fundplatform.proj.dto.ProjectCreateDTO;
|
import com.fundplatform.proj.dto.ProjectCreateDTO;
|
||||||
|
import com.fundplatform.proj.dto.ProjectUpdateDTO;
|
||||||
import com.fundplatform.proj.service.ProjectService;
|
import com.fundplatform.proj.service.ProjectService;
|
||||||
import com.fundplatform.proj.vo.ProjectVO;
|
import com.fundplatform.proj.vo.ProjectVO;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
@ -31,6 +32,15 @@ public class ProjectController {
|
|||||||
return Result.success(id);
|
return Result.success(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新项目
|
||||||
|
*/
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public Result<Void> updateProject(@PathVariable Long id, @Valid @RequestBody ProjectUpdateDTO dto) {
|
||||||
|
projectService.updateProject(id, dto);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询项目详情
|
* 查询项目详情
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -0,0 +1,112 @@
|
|||||||
|
package com.fundplatform.proj.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目更新DTO
|
||||||
|
*/
|
||||||
|
public class ProjectUpdateDTO {
|
||||||
|
|
||||||
|
@NotBlank(message = "项目编码不能为空")
|
||||||
|
private String projectCode;
|
||||||
|
|
||||||
|
@NotBlank(message = "项目名称不能为空")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@NotNull(message = "客户ID不能为空")
|
||||||
|
private Long customerId;
|
||||||
|
|
||||||
|
@NotBlank(message = "项目类型不能为空")
|
||||||
|
private String projectType;
|
||||||
|
|
||||||
|
private BigDecimal budgetAmount;
|
||||||
|
private LocalDate startDate;
|
||||||
|
private LocalDate endDate;
|
||||||
|
private String projectManager;
|
||||||
|
private Integer status;
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
public String getProjectCode() {
|
||||||
|
return projectCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProjectCode(String projectCode) {
|
||||||
|
this.projectCode = projectCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProjectName() {
|
||||||
|
return projectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProjectName(String projectName) {
|
||||||
|
this.projectName = projectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getCustomerId() {
|
||||||
|
return customerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomerId(Long customerId) {
|
||||||
|
this.customerId = customerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProjectType() {
|
||||||
|
return projectType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProjectType(String projectType) {
|
||||||
|
this.projectType = projectType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getBudgetAmount() {
|
||||||
|
return budgetAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBudgetAmount(BigDecimal budgetAmount) {
|
||||||
|
this.budgetAmount = budgetAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getStartDate() {
|
||||||
|
return startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartDate(LocalDate startDate) {
|
||||||
|
this.startDate = startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getEndDate() {
|
||||||
|
return endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndDate(LocalDate endDate) {
|
||||||
|
this.endDate = endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProjectManager() {
|
||||||
|
return projectManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProjectManager(String projectManager) {
|
||||||
|
this.projectManager = projectManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(Integer status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRemark() {
|
||||||
|
return remark;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemark(String remark) {
|
||||||
|
this.remark = remark;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@ package com.fundplatform.proj.service;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.fundplatform.proj.dto.ProjectCreateDTO;
|
import com.fundplatform.proj.dto.ProjectCreateDTO;
|
||||||
|
import com.fundplatform.proj.dto.ProjectUpdateDTO;
|
||||||
import com.fundplatform.proj.vo.ProjectVO;
|
import com.fundplatform.proj.vo.ProjectVO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -14,6 +15,11 @@ public interface ProjectService {
|
|||||||
*/
|
*/
|
||||||
Long createProject(ProjectCreateDTO dto);
|
Long createProject(ProjectCreateDTO dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新项目
|
||||||
|
*/
|
||||||
|
void updateProject(Long id, ProjectUpdateDTO dto);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询项目详情
|
* 查询项目详情
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import com.fundplatform.common.context.UserContextHolder;
|
|||||||
import com.fundplatform.proj.data.entity.Project;
|
import com.fundplatform.proj.data.entity.Project;
|
||||||
import com.fundplatform.proj.data.service.ProjectDataService;
|
import com.fundplatform.proj.data.service.ProjectDataService;
|
||||||
import com.fundplatform.proj.dto.ProjectCreateDTO;
|
import com.fundplatform.proj.dto.ProjectCreateDTO;
|
||||||
|
import com.fundplatform.proj.dto.ProjectUpdateDTO;
|
||||||
import com.fundplatform.proj.service.ProjectService;
|
import com.fundplatform.proj.service.ProjectService;
|
||||||
import com.fundplatform.proj.vo.ProjectVO;
|
import com.fundplatform.proj.vo.ProjectVO;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -52,6 +53,40 @@ public class ProjectServiceImpl implements ProjectService {
|
|||||||
return project.getId();
|
return project.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateProject(Long id, ProjectUpdateDTO dto) {
|
||||||
|
Project project = projectDataService.getById(id);
|
||||||
|
if (project == null) {
|
||||||
|
throw new RuntimeException("项目不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查编码是否重复(排除自身)
|
||||||
|
if (!project.getProjectCode().equals(dto.getProjectCode())) {
|
||||||
|
LambdaQueryWrapper<Project> checkWrapper = new LambdaQueryWrapper<>();
|
||||||
|
checkWrapper.eq(Project::getProjectCode, dto.getProjectCode())
|
||||||
|
.ne(Project::getId, id);
|
||||||
|
if (projectDataService.count(checkWrapper) > 0) {
|
||||||
|
throw new RuntimeException("项目编码已存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
project.setProjectCode(dto.getProjectCode());
|
||||||
|
project.setProjectName(dto.getProjectName());
|
||||||
|
project.setCustomerId(dto.getCustomerId());
|
||||||
|
project.setProjectType(dto.getProjectType());
|
||||||
|
project.setBudgetAmount(dto.getBudgetAmount());
|
||||||
|
project.setStartDate(dto.getStartDate());
|
||||||
|
project.setEndDate(dto.getEndDate());
|
||||||
|
project.setProjectManager(dto.getProjectManager());
|
||||||
|
if (dto.getStatus() != null) {
|
||||||
|
project.setStatus(dto.getStatus());
|
||||||
|
}
|
||||||
|
project.setRemark(dto.getRemark());
|
||||||
|
project.setUpdatedBy(UserContextHolder.getUserId());
|
||||||
|
|
||||||
|
projectDataService.updateById(project);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProjectVO getProjectById(Long id) {
|
public ProjectVO getProjectById(Long id) {
|
||||||
Project project = projectDataService.getById(id);
|
Project project = projectDataService.getById(id);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user