客户,项目提交

tx
tengxi 1 year ago
parent 372c5bb485
commit d1e7220473

@ -56,6 +56,12 @@
<groupId>com.yunxi.scm</groupId>
<artifactId>yunxi-spring-boot-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>com.yunxi.scm</groupId>
<artifactId>yunxi-module-system-biz</artifactId>
<version>1.8.0-snapshot</version>
<scope>compile</scope>
</dependency>
</dependencies>

@ -1,7 +1,9 @@
package com.yunxi.scm.module.xxjj.controller.admin.customer;
import com.yunxi.scm.framework.common.enums.CommonStatusEnum;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.TaskCreateReqVO;
import com.yunxi.scm.module.xxjj.controller.admin.workorder.vo.WorkOrderCreateReqVO;
import com.yunxi.scm.module.xxjj.service.task.TaskService;
import com.yunxi.scm.module.xxjj.service.workorder.WorkOrderService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -39,26 +41,19 @@ public class CustomerController {
@Resource
private CustomerService customerService;
@Resource
private WorkOrderService workOrderService;
@Resource
private TaskService taskService;
@PostMapping("/create")
@Operation(summary = "创建客户信息")
@PreAuthorize("@ss.hasPermission('xxjj:customer:create')")
public CommonResult<Long> createCustomerwork(@Valid @RequestBody CustomerCreateReqVO createReqVO) {
public CommonResult<Long> createCustomer(@Valid @RequestBody CustomerCreateReqVO createReqVO) {
return success(customerService.createCustomer(createReqVO));
}
@PostMapping("/creatework")
@Operation(summary = "创建工单")
@PreAuthorize("@ss.hasPermission('xxjj:customer:creatework')")
public CommonResult<Long> createCustomer(@Valid @RequestBody WorkOrderCreateReqVO workOrderCreateReqVO) {
return success(workOrderService.createWorkOrder(workOrderCreateReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新客户信息")
@PreAuthorize("@ss.hasPermission('xxjj:customer:update')")
@ -114,18 +109,29 @@ public class CustomerController {
ExcelUtils.write(response, "客户信息.xls", "数据", CustomerExcelVO.class, datas);
}
@GetMapping("/list-all-simplecustomer")
@Operation(summary = "获取客户", description = "只包含被开启的客户,主要用于前端的下拉选项")
@Operation(summary = "获取客户", description = "获取客户,主要用于前端的下拉选项")
public CommonResult<List<CustomerRespVO>> getCustomerId() {
CustomerRespVO customerRespVO=new CustomerRespVO();
String status=Integer.toString(CommonStatusEnum.ENABLE.getStatus());
customerRespVO.setStatus(status);
// String status=Integer.toString(CommonStatusEnum.ENABLE.getStatus());
// customerRespVO.setStatus(status);
List<CustomerDO> list = customerService.getCustomerstaus(customerRespVO);
List<CustomerDO> list = customerService.getCustomerId(customerRespVO);
return success(CustomerConvert.INSTANCE.convertList(list));
}
@PostMapping("/creatework")
@Operation(summary = "创建工单")
@PreAuthorize("@ss.hasPermission('xxjj:customer:creatework')")
public CommonResult<Long> createCustomerwork(@Valid @RequestBody WorkOrderCreateReqVO workOrderCreateReqVO) {
return success(workOrderService.createWorkOrder(workOrderCreateReqVO));
}
@PostMapping("/createtask")
@Operation(summary = "创建任务")
@PreAuthorize("@ss.hasPermission('xxjj:customer:createtask')")
public CommonResult<Long> createCustomertask(@Valid @RequestBody TaskCreateReqVO taskCreateReqVO) {
return success(taskService.createTask(taskCreateReqVO));
}
}

@ -14,34 +14,100 @@ import javax.validation.constraints.*;
@Data
public class CustomerBaseVO {
@Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@NotNull(message = "客户名称不能为空")
@Schema(description = "客户名称", example = "芋艿")
private String customerName;
@Schema(description = "客户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "客户类型不能为空")
private String customerType;
@Schema(description = "所在城市", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "所在城市不能为空")
private String city;
@Schema(description = "统一结算主体")
private String unifiedSettlement;
@Schema(description = "行业类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "行业类型不能为空")
private String industryType;
@Schema(description = "客户性质", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "客户性质不能为空")
private String customerNature;
@Schema(description = "首联系人")
private String firstContacts;
@Schema(description = "合作模式", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "合作模式不能为空")
private String cooperationMode;
@Schema(description = "手机号码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "手机号码不能为空")
private String mobilePhoneNumber;
@Schema(description = "隶属业务线", example = "22944")
private Long linebusinessId;
@Schema(description = "当前职位")
private String currentPosition;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "状态不能为空")
private String status;
@Schema(description = "邮箱")
private String email;
@Schema(description = "归属人员",requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
@NotNull(message = "成员编号数组不能为空")
@Schema(description = "微信")
private String wechat;
@Schema(description = "客户来源", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "客户来源不能为空")
private String customerSource;
@Schema(description = "客户星级", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "客户星级不能为空")
private String customerStarrating;
@Schema(description = "合约状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "合约状态不能为空")
private String contractStatus;
@Schema(description = "账户状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "账户状态不能为空")
private String accountStatus;
@Schema(description = "客户状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "客户状态不能为空")
private String customerStatus;
@Schema(description = "归属人员", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "归属人员不能为空")
private Set<Long> belongingPeople;
@Schema(description = "公司logo", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "公司logo不能为空")
private String customerLogo;
@Schema(description = "详细地址", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "详细地址不能为空")
private String address;
@Schema(description = "公司电话", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "公司电话不能为空")
private String phone;
@Schema(description = "公司传真")
private String companyFax;
@Schema(description = "公司网址")
private String companyHttp;
@Schema(description = "公司介绍")
private String companyProfile;
@Schema(description = "客户税号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "客户税号不能为空")
private String customerTax;
@Schema(description = "发票抬头", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "发票抬头不能为空")
private String invoiceHeader;
@Schema(description = "开户银行", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "开户银行不能为空")
private String bankOfDeposit;
@Schema(description = "银行账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24865")
@NotNull(message = "银行账号不能为空")
private String bankAccount;
@Schema(description = "银行电话号码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "银行电话号码不能为空")
private String bankPhone;
@Schema(description = "单位地址", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "单位地址不能为空")
private String bankAddress;
}

@ -7,11 +7,14 @@ import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
/**
* Excel VO
*
* @author
* @author
*/
@Data
public class CustomerExcelVO {
@ -22,27 +25,86 @@ public class CustomerExcelVO {
@ExcelProperty("客户名称")
private String customerName;
@ExcelProperty("客户类型")
private String customerType;
@ExcelProperty("所在城市")
private String city;
@ExcelProperty(value = "行业类型", converter = DictConvert.class)
@DictFormat("customer_industry_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String industryType;
@ExcelProperty("首联系人")
private String firstContacts;
@ExcelProperty("手机号码")
private String mobilePhoneNumber;
@ExcelProperty("当前职位")
private String currentPosition;
@ExcelProperty("统一结算主体")
private String unifiedSettlement;
@ExcelProperty("邮箱")
private String email;
@ExcelProperty("客户性质")
private String customerNature;
@ExcelProperty("微信")
private String wechat;
@ExcelProperty("合作模式")
private String cooperationMode;
@ExcelProperty(value = "客户来源", converter = DictConvert.class)
@DictFormat("customer_source") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String customerSource;
@ExcelProperty("隶属业务线")
private Long linebusinessId;
@ExcelProperty(value = "客户星级", converter = DictConvert.class)
@DictFormat("customer_starrating") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String customerStarrating;
@ExcelProperty("状态")
private String status;
@ExcelProperty(value = "合约状态", converter = DictConvert.class)
@DictFormat("contract_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String contractStatus;
@ExcelProperty(value = "账户状态", converter = DictConvert.class)
@DictFormat("account_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String accountStatus;
@ExcelProperty(value = "客户状态", converter = DictConvert.class)
@DictFormat("customer_status1") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String customerStatus;
@ExcelProperty("归属人员")
private Set<Long> belongingPeople;
@ExcelProperty("公司logo")
private String customerLogo;
@ExcelProperty("详细地址")
private String address;
@ExcelProperty("公司电话")
private String phone;
@ExcelProperty("公司传真")
private String companyFax;
@ExcelProperty("公司网址")
private String companyHttp;
@ExcelProperty("公司介绍")
private String companyProfile;
@ExcelProperty("客户税号")
private String customerTax;
@ExcelProperty("发票抬头")
private String invoiceHeader;
@ExcelProperty("开户银行")
private String bankOfDeposit;
@ExcelProperty("银行账号")
private String bankAccount;
@ExcelProperty("银行电话号码")
private String bankPhone;
@ExcelProperty("单位地址")
private String bankAddress;
@ExcelProperty("创建时间")
private LocalDateTime createTime;

@ -13,29 +13,83 @@ import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MON
@Data
public class CustomerExportReqVO {
@Schema(description = "客户名称", example = "赵六")
@Schema(description = "客户名称", example = "芋艿")
private String customerName;
@Schema(description = "客户类型", example = "2")
private String customerType;
@Schema(description = "所在城市")
private String city;
@Schema(description = "统一结算主体")
private String unifiedSettlement;
@Schema(description = "行业类型", example = "1")
private String industryType;
@Schema(description = "客户性质")
private String customerNature;
@Schema(description = "首联系人")
private String firstContacts;
@Schema(description = "合作模式")
private String cooperationMode;
@Schema(description = "手机号码")
private String mobilePhoneNumber;
@Schema(description = "隶属业务线", example = "22944")
private Long linebusinessId;
@Schema(description = "当前职位")
private String currentPosition;
@Schema(description = "状态", example = "2")
private String status;
@Schema(description = "邮箱")
private String email;
@Schema(description = "微信")
private String wechat;
@Schema(description = "客户来源")
private String customerSource;
@Schema(description = "客户星级")
private String customerStarrating;
@Schema(description = "合约状态", example = "1")
private String contractStatus;
@Schema(description = "账户状态", example = "1")
private String accountStatus;
@Schema(description = "客户状态", example = "1")
private String customerStatus;
@Schema(description = "归属人员")
private String belongingPeople;
private Set<Long> belongingPeople;
@Schema(description = "公司logo")
private String customerLogo;
@Schema(description = "详细地址")
private String address;
@Schema(description = "公司电话")
private String phone;
@Schema(description = "公司传真")
private String companyFax;
@Schema(description = "公司网址")
private String companyHttp;
@Schema(description = "公司介绍")
private String companyProfile;
@Schema(description = "客户税号")
private String customerTax;
@Schema(description = "发票抬头")
private String invoiceHeader;
@Schema(description = "开户银行")
private String bankOfDeposit;
@Schema(description = "银行账号", example = "24865")
private String bankAccount;
@Schema(description = "银行电话号码")
private String bankPhone;
@Schema(description = "单位地址")
private String bankAddress;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

@ -15,30 +15,84 @@ import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MON
@ToString(callSuper = true)
public class CustomerPageReqVO extends PageParam {
@Schema(description = "客户名称", example = "赵六")
@Schema(description = "客户名称", example = "芋艿")
private String customerName;
@Schema(description = "客户类型", example = "2")
private String customerType;
@Schema(description = "所在城市")
private String city;
@Schema(description = "统一结算主体")
private String unifiedSettlement;
@Schema(description = "行业类型", example = "1")
private String industryType;
@Schema(description = "客户性质")
private String customerNature;
@Schema(description = "首联系人")
private String firstContacts;
@Schema(description = "合作模式")
private String cooperationMode;
@Schema(description = "手机号码")
private String mobilePhoneNumber;
@Schema(description = "隶属业务线", example = "22944")
private Long linebusinessId;
@Schema(description = "当前职位")
private String currentPosition;
@Schema(description = "状态", example = "2")
private String status;
@Schema(description = "邮箱")
private String email;
@Schema(description = "微信")
private String wechat;
@Schema(description = "客户来源")
private String customerSource;
@Schema(description = "客户星级")
private String customerStarrating;
@Schema(description = "合约状态", example = "1")
private String contractStatus;
@Schema(description = "账户状态", example = "1")
private String accountStatus;
@Schema(description = "客户状态", example = "1")
private String customerStatus;
@Schema(description = "归属人员")
private Set<Long> belongingPeople;
@Schema(description = "公司logo")
private String customerLogo;
@Schema(description = "详细地址")
private String address;
@Schema(description = "公司电话")
private String phone;
@Schema(description = "公司传真")
private String companyFax;
@Schema(description = "公司网址")
private String companyHttp;
@Schema(description = "公司介绍")
private String companyProfile;
@Schema(description = "客户税号")
private String customerTax;
@Schema(description = "发票抬头")
private String invoiceHeader;
@Schema(description = "开户银行")
private String bankOfDeposit;
@Schema(description = "银行账号", example = "24865")
private String bankAccount;
@Schema(description = "银行电话号码")
private String bankPhone;
@Schema(description = "单位地址")
private String bankAddress;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

@ -10,13 +10,13 @@ import java.time.LocalDateTime;
@ToString(callSuper = true)
public class CustomerRespVO extends CustomerBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7245")
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21088")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "更新时间")
private LocalDateTime updateTime;
}

@ -11,7 +11,7 @@ import javax.validation.constraints.*;
@ToString(callSuper = true)
public class CustomerUpdateReqVO extends CustomerBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7245")
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21088")
@NotNull(message = "编号不能为空")
private Long id;

@ -0,0 +1,149 @@
package com.yunxi.scm.module.xxjj.controller.admin.project;
import com.yunxi.scm.module.system.controller.admin.user.vo.user.UserPageItemRespVO;
import com.yunxi.scm.module.system.controller.admin.user.vo.user.UserPageReqVO;
import com.yunxi.scm.module.system.controller.admin.user.vo.user.UserRespVO;
import com.yunxi.scm.module.system.convert.user.UserConvert;
import com.yunxi.scm.module.system.dal.dataobject.dept.DeptDO;
import com.yunxi.scm.module.system.dal.dataobject.user.AdminUserDO;
import com.yunxi.scm.module.system.service.dept.DeptService;
import com.yunxi.scm.module.system.service.user.AdminUserService;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.TaskCreateReqVO;
import com.yunxi.scm.module.xxjj.service.task.TaskService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.common.pojo.CommonResult;
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
import static com.yunxi.scm.framework.common.util.collection.CollectionUtils.convertList;
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
import com.yunxi.scm.module.xxjj.convert.project.ProjectConvert;
import com.yunxi.scm.module.xxjj.service.project.ProjectService;
@Tag(name = "管理后台 - 项目管理")
@RestController
@RequestMapping("/xxjj/project")
@Validated
public class ProjectController {
@Resource
private ProjectService projectService;
@Resource
private TaskService taskService;
@Resource
private AdminUserService adminUserService;
@Resource
private DeptService deptService;
@PostMapping("/create")
@Operation(summary = "创建项目管理")
@PreAuthorize("@ss.hasPermission('xxjj:project:create')")
public CommonResult<Long> createProject(@Valid @RequestBody ProjectCreateReqVO createReqVO) {
return success(projectService.createProject(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新项目管理")
@PreAuthorize("@ss.hasPermission('xxjj:project:update')")
public CommonResult<Boolean> updateProject(@Valid @RequestBody ProjectUpdateReqVO updateReqVO) {
projectService.updateProject(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除项目管理")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('xxjj:project:delete')")
public CommonResult<Boolean> deleteProject(@RequestParam("id") Long id) {
projectService.deleteProject(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得项目管理")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('xxjj:project:query')")
public CommonResult<ProjectRespVO> getProject(@RequestParam("id") Long id) {
ProjectDO project = projectService.getProject(id);
return success(ProjectConvert.INSTANCE.convert(project));
}
@GetMapping("/list")
@Operation(summary = "获得项目管理列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('xxjj:project:query')")
public CommonResult<List<ProjectRespVO>> getProjectList(@RequestParam("ids") Collection<Long> ids) {
List<ProjectDO> list = projectService.getProjectList(ids);
return success(ProjectConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得项目管理分页")
@PreAuthorize("@ss.hasPermission('xxjj:project:query')")
public CommonResult<PageResult<ProjectRespVO>> getProjectPage(@Valid ProjectPageReqVO pageVO) {
PageResult<ProjectDO> pageResult = projectService.getProjectPage(pageVO);
return success(ProjectConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出项目管理 Excel")
@PreAuthorize("@ss.hasPermission('xxjj:project:export')")
@OperateLog(type = EXPORT)
public void exportProjectExcel(@Valid ProjectExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ProjectDO> list = projectService.getProjectList(exportReqVO);
// 导出 Excel
List<ProjectExcelVO> datas = ProjectConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "项目管理.xls", "数据", ProjectExcelVO.class, datas);
}
@PostMapping("/projecttask")
@Operation(summary = "创建任务")
@PreAuthorize("@ss.hasPermission('xxjj:project:projecttask')")
public CommonResult<Long> createProjecttask(@Valid @RequestBody TaskCreateReqVO taskCreateReqVO) {
return success(taskService.createTask(taskCreateReqVO));
}
@GetMapping("/pagequeryuser")
@Operation(summary = "获得成员列表")
@PreAuthorize("@ss.hasPermission('xxjj:project:pagequeryuser')")
public CommonResult<PageResult<UserPageItemRespVO>> getProjectPageUser(@Valid UserPageReqVO userPageReqVO) {
PageResult<AdminUserDO> pageResult = adminUserService.getUserPage(userPageReqVO);
Collection<Long> deptIds = convertList(pageResult.getList(), AdminUserDO::getDeptId);
Map<Long, DeptDO> deptMap = deptService.getDeptMap(deptIds);
// 拼接结果返回
List<UserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size());
pageResult.getList().forEach(user -> {
UserPageItemRespVO respVO = UserConvert.INSTANCE.convert(user);
respVO.setDept(UserConvert.INSTANCE.convert(deptMap.get(user.getDeptId())));
userList.add(respVO);
});
return success(new PageResult<>(userList, pageResult.getTotal()));
}
}

@ -0,0 +1,63 @@
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class ProjectBaseVO {
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
@NotNull(message = "项目名称不能为空")
private String projectName;
@Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "开始时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime startTime;
@Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "结束时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endTime;
@Schema(description = "负责人员", requiredMode = Schema.RequiredMode.REQUIRED)
private Set<Long> responsible;
@Schema(description = "参数人员", requiredMode = Schema.RequiredMode.REQUIRED)
private Set<Long> participants;
@Schema(description = "任务标记")
private String projectMark;
@Schema(description = "可见范围")
private String visibility;
@Schema(description = "任务描述", example = "随便")
private String projectRemark;
@Schema(description = "附件")
private String annex;
@Schema(description = "项目图片")
private String projectPictures;
@Schema(description = "项目状态", example = "1")
private String projectStatus;
@Schema(description = "项目进度")
private String projectSchedule;
}

@ -0,0 +1,14 @@
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 项目管理创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProjectCreateReqVO extends ProjectBaseVO {
}

@ -0,0 +1,71 @@
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
/**
* Excel VO
*
* @author
*/
@Data
public class ProjectExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty("项目名称")
private String projectName;
@ExcelProperty("开始时间")
private LocalDateTime startTime;
@ExcelProperty("结束时间")
private LocalDateTime endTime;
@ExcelProperty("负责人员")
private Set<Long> responsible;
@ExcelProperty("参数人员")
private Set<Long> participants;
@ExcelProperty("任务标记")
private String projectMark;
@ExcelProperty(value = "可见范围", converter = DictConvert.class)
@DictFormat("project_visibility") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String visibility;
@ExcelProperty("任务描述")
private String projectRemark;
@ExcelProperty("附件")
private String annex;
@ExcelProperty("项目图片")
private String projectPictures;
@ExcelProperty(value = "项目状态", converter = DictConvert.class)
@DictFormat("project_visibility") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String projectStatus;
@ExcelProperty("项目进度")
private String projectSchedule;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@ExcelProperty("更新时间")
private LocalDateTime updateTime;
}

@ -0,0 +1,62 @@
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 项目管理 Excel 导出 Request VO参数和 ProjectPageReqVO 是一致的")
@Data
public class ProjectExportReqVO {
@Schema(description = "项目名称", example = "李四")
private String projectName;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] startTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "负责人员")
private Set<Long> responsible;
@Schema(description = "参数人员")
private Set<Long> participants;
@Schema(description = "任务标记")
private String projectMark;
@Schema(description = "可见范围")
private String visibility;
@Schema(description = "任务描述", example = "随便")
private String projectRemark;
@Schema(description = "附件")
private String annex;
@Schema(description = "项目图片")
private String projectPictures;
@Schema(description = "项目状态", example = "1")
private String projectStatus;
@Schema(description = "项目进度")
private String projectSchedule;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
}

@ -0,0 +1,64 @@
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 项目管理分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProjectPageReqVO extends PageParam {
@Schema(description = "项目名称", example = "李四")
private String projectName;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] startTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "负责人员")
private Set<Long> responsible;
@Schema(description = "参数人员")
private Set<Long> participants;
@Schema(description = "任务标记")
private String projectMark;
@Schema(description = "可见范围")
private String visibility;
@Schema(description = "任务描述", example = "随便")
private String projectRemark;
@Schema(description = "附件")
private String annex;
@Schema(description = "项目图片")
private String projectPictures;
@Schema(description = "项目状态", example = "1")
private String projectStatus;
@Schema(description = "项目进度")
private String projectSchedule;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
}

@ -0,0 +1,22 @@
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 项目管理 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProjectRespVO extends ProjectBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8672")
private Long id;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
}

@ -0,0 +1,18 @@
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 项目管理更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProjectUpdateReqVO extends ProjectBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8672")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -0,0 +1,102 @@
package com.yunxi.scm.module.xxjj.controller.admin.task;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.common.pojo.CommonResult;
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
import com.yunxi.scm.module.xxjj.convert.task.TaskConvert;
import com.yunxi.scm.module.xxjj.service.task.TaskService;
@Tag(name = "管理后台 - 任务")
@RestController
@RequestMapping("/xxjj/task")
@Validated
public class TaskController {
@Resource
private TaskService taskService;
@PostMapping("/create")
@Operation(summary = "创建任务")
@PreAuthorize("@ss.hasPermission('xxjj:task:create')")
public CommonResult<Long> createTask(@Valid @RequestBody TaskCreateReqVO createReqVO) {
return success(taskService.createTask(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新任务")
@PreAuthorize("@ss.hasPermission('xxjj:task:update')")
public CommonResult<Boolean> updateTask(@Valid @RequestBody TaskUpdateReqVO updateReqVO) {
taskService.updateTask(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除任务")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('xxjj:task:delete')")
public CommonResult<Boolean> deleteTask(@RequestParam("id") Long id) {
taskService.deleteTask(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得任务")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('xxjj:task:query')")
public CommonResult<TaskRespVO> getTask(@RequestParam("id") Long id) {
TaskDO task = taskService.getTask(id);
return success(TaskConvert.INSTANCE.convert(task));
}
@GetMapping("/list")
@Operation(summary = "获得任务列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('xxjj:task:query')")
public CommonResult<List<TaskRespVO>> getTaskList(@RequestParam("ids") Collection<Long> ids) {
List<TaskDO> list = taskService.getTaskList(ids);
return success(TaskConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得任务分页")
@PreAuthorize("@ss.hasPermission('xxjj:task:query')")
public CommonResult<PageResult<TaskRespVO>> getTaskPage(@Valid TaskPageReqVO pageVO) {
PageResult<TaskDO> pageResult = taskService.getTaskPage(pageVO);
return success(TaskConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出任务 Excel")
@PreAuthorize("@ss.hasPermission('xxjj:task:export')")
@OperateLog(type = EXPORT)
public void exportTaskExcel(@Valid TaskExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<TaskDO> list = taskService.getTaskList(exportReqVO);
// 导出 Excel
List<TaskExcelVO> datas = TaskConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "任务.xls", "数据", TaskExcelVO.class, datas);
}
}

@ -0,0 +1,63 @@
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class TaskBaseVO {
@Schema(description = "任务标题", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "任务标题不能为空")
private String taskTitle;
@Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "开始时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime startTime;
@Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "结束时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endTime;
@Schema(description = "项目id", example = "4238")
private Long projectId;
@Schema(description = "负责人员")
private String responsible;
@Schema(description = "参数人员")
private String participants;
@Schema(description = "任务标记")
private String taskMark;
@Schema(description = "紧要程度")
private String criticality;
@Schema(description = "任务提醒")
private String taskReminder;
@Schema(description = "提醒方式")
private String reminderMethod;
@Schema(description = "任务描述", example = "随便")
private String taskRemark;
@Schema(description = "附件")
private String annex;
}

@ -0,0 +1,14 @@
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 任务创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TaskCreateReqVO extends TaskBaseVO {
}

@ -0,0 +1,66 @@
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* Excel VO
*
* @author
*/
@Data
public class TaskExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty("任务标题")
private String taskTitle;
@ExcelProperty("开始时间")
private LocalDateTime startTime;
@ExcelProperty("结束时间")
private LocalDateTime endTime;
@ExcelProperty("项目id")
private Long projectId;
@ExcelProperty("负责人员")
private String responsible;
@ExcelProperty("参数人员")
private String participants;
@ExcelProperty("任务标记")
private String taskMark;
@ExcelProperty("紧要程度")
private String criticality;
@ExcelProperty("任务提醒")
private String taskReminder;
@ExcelProperty("提醒方式")
private String reminderMethod;
@ExcelProperty("任务描述")
private String taskRemark;
@ExcelProperty("附件")
private String annex;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@ExcelProperty("更新时间")
private LocalDateTime updateTime;
}

@ -0,0 +1,62 @@
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 任务 Excel 导出 Request VO参数和 TaskPageReqVO 是一致的")
@Data
public class TaskExportReqVO {
@Schema(description = "任务标题")
private String taskTitle;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] startTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "项目id", example = "4238")
private Long projectId;
@Schema(description = "负责人员")
private String responsible;
@Schema(description = "参数人员")
private String participants;
@Schema(description = "任务标记")
private String taskMark;
@Schema(description = "紧要程度")
private String criticality;
@Schema(description = "任务提醒")
private String taskReminder;
@Schema(description = "提醒方式")
private String reminderMethod;
@Schema(description = "任务描述", example = "随便")
private String taskRemark;
@Schema(description = "附件")
private String annex;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
}

@ -0,0 +1,64 @@
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 任务分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TaskPageReqVO extends PageParam {
@Schema(description = "任务标题")
private String taskTitle;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] startTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "项目id", example = "4238")
private Long projectId;
@Schema(description = "负责人员")
private String responsible;
@Schema(description = "参数人员")
private String participants;
@Schema(description = "任务标记")
private String taskMark;
@Schema(description = "紧要程度")
private String criticality;
@Schema(description = "任务提醒")
private String taskReminder;
@Schema(description = "提醒方式")
private String reminderMethod;
@Schema(description = "任务描述", example = "随便")
private String taskRemark;
@Schema(description = "附件")
private String annex;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
}

@ -0,0 +1,22 @@
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 任务 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TaskRespVO extends TaskBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7639")
private Long id;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
}

@ -0,0 +1,18 @@
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 任务更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TaskUpdateReqVO extends TaskBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7639")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -12,7 +12,7 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO;
/**
* Convert
*
* @author
* @author
*/
@Mapper
public interface CustomerConvert {

@ -0,0 +1,34 @@
package com.yunxi.scm.module.xxjj.convert.project;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface ProjectConvert {
ProjectConvert INSTANCE = Mappers.getMapper(ProjectConvert.class);
ProjectDO convert(ProjectCreateReqVO bean);
ProjectDO convert(ProjectUpdateReqVO bean);
ProjectRespVO convert(ProjectDO bean);
List<ProjectRespVO> convertList(List<ProjectDO> list);
PageResult<ProjectRespVO> convertPage(PageResult<ProjectDO> page);
List<ProjectExcelVO> convertList02(List<ProjectDO> list);
}

@ -0,0 +1,34 @@
package com.yunxi.scm.module.xxjj.convert.task;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface TaskConvert {
TaskConvert INSTANCE = Mappers.getMapper(TaskConvert.class);
TaskDO convert(TaskCreateReqVO bean);
TaskDO convert(TaskUpdateReqVO bean);
TaskRespVO convert(TaskDO bean);
List<TaskRespVO> convertList(List<TaskDO> list);
PageResult<TaskRespVO> convertPage(PageResult<TaskDO> page);
List<TaskExcelVO> convertList02(List<TaskDO> list);
}

@ -1,6 +1,6 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.customer;
import com.yunxi.scm.framework.common.enums.CommonStatusEnum;
import com.sun.xml.bind.v2.TODO;
import com.yunxi.scm.framework.mybatis.core.type.JsonLongSetTypeHandler;
import lombok.*;
import java.util.*;
@ -12,7 +12,7 @@ import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
* @author
*/
@TableName( value = "xxjj_customer" , autoResultMap = true)
@KeySequence("xxjj_customer_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@ -34,35 +34,117 @@ public class CustomerDO extends BaseDO {
*/
private String customerName;
/**
*
*
*/
private String customerType;
private String city;
/**
*
*
*
* {@link TODO customer_industry_type }
*/
private String industryType;
/**
*
*/
private String unifiedSettlement;
private String firstContacts;
/**
*
*
*/
private String customerNature;
private String mobilePhoneNumber;
/**
*
*
*/
private String cooperationMode;
private String currentPosition;
/**
* 线
*
*/
private String email;
/**
*
*/
private String wechat;
/**
*
*
* {@link TODO customer_source }
*/
private String customerSource;
/**
*
*
* {@link TODO customer_starrating }
*/
private Long linebusinessId;
private String customerStarrating;
/**
*
*
*
* {@link CommonStatusEnum}
* {@link TODO contract_status }
*/
private String status;
private String contractStatus;
/**
*
*
* {@link TODO account_status }
*/
private String accountStatus;
/**
*
*
* {@link TODO customer_status1 }
*/
private String customerStatus;
/**
*
*/
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> belongingPeople;
/**
* logo
*/
private String customerLogo;
/**
*
*/
private String address;
/**
*
*/
private String phone;
/**
*
*/
private String companyFax;
/**
*
*/
private String companyHttp;
/**
*
*/
private String companyProfile;
/**
*
*/
private String customerTax;
/**
*
*/
private String invoiceHeader;
/**
*
*/
private String bankOfDeposit;
/**
*
*/
private String bankAccount;
/**
*
*/
private String bankPhone;
/**
*
*/
private String bankAddress;
}

@ -0,0 +1,87 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.project;
import com.sun.xml.bind.v2.TODO;
import com.yunxi.scm.framework.mybatis.core.type.JsonLongSetTypeHandler;
import lombok.*;
import java.time.LocalDateTime;
import java.util.*;
import com.baomidou.mybatisplus.annotation.*;
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName( value = "xxjj_project" , autoResultMap = true)
@KeySequence("xxjj_project_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProjectDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String projectName;
/**
*
*/
private LocalDateTime startTime;
/**
*
*/
private LocalDateTime endTime;
/**
*
*/
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> responsible;
/**
*
*/
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> participants;
/**
*
*/
private String projectMark;
/**
*
*
* {@link TODO project_visibility }
*/
private String visibility;
/**
*
*/
private String projectRemark;
/**
*
*/
private String annex;
/**
*
*/
private String projectPictures;
/**
*
*
* {@link TODO project_visibility }
*/
private String projectStatus;
/**
*
*/
private String projectSchedule;
}

@ -0,0 +1,81 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.task;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("xxjj_task")
@KeySequence("xxjj_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaskDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String taskTitle;
/**
*
*/
private LocalDateTime startTime;
/**
*
*/
private LocalDateTime endTime;
/**
* id
*/
private Long projectId;
/**
*
*/
private String responsible;
/**
*
*/
private String participants;
/**
*
*/
private String taskMark;
/**
*
*/
private String criticality;
/**
*
*/
private String taskReminder;
/**
*
*/
private String reminderMethod;
/**
*
*/
private String taskRemark;
/**
*
*/
private String annex;
}

@ -12,7 +12,7 @@ import com.yunxi.scm.module.xxjj.controller.admin.customer.vo.*;
/**
* Mapper
*
* @author
* @author
*/
@Mapper
public interface CustomerMapper extends BaseMapperX<CustomerDO> {
@ -20,12 +20,29 @@ public interface CustomerMapper extends BaseMapperX<CustomerDO> {
default PageResult<CustomerDO> selectPage(CustomerPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<CustomerDO>()
.likeIfPresent(CustomerDO::getCustomerName, reqVO.getCustomerName())
.eqIfPresent(CustomerDO::getCustomerType, reqVO.getCustomerType())
.eqIfPresent(CustomerDO::getUnifiedSettlement, reqVO.getUnifiedSettlement())
.eqIfPresent(CustomerDO::getCustomerNature, reqVO.getCustomerNature())
.eqIfPresent(CustomerDO::getCooperationMode, reqVO.getCooperationMode())
.eqIfPresent(CustomerDO::getLinebusinessId, reqVO.getLinebusinessId())
.eqIfPresent(CustomerDO::getStatus, reqVO.getStatus())
.eqIfPresent(CustomerDO::getCity, reqVO.getCity())
.eqIfPresent(CustomerDO::getIndustryType, reqVO.getIndustryType())
.eqIfPresent(CustomerDO::getFirstContacts, reqVO.getFirstContacts())
.eqIfPresent(CustomerDO::getMobilePhoneNumber, reqVO.getMobilePhoneNumber())
.eqIfPresent(CustomerDO::getCurrentPosition, reqVO.getCurrentPosition())
.eqIfPresent(CustomerDO::getEmail, reqVO.getEmail())
.eqIfPresent(CustomerDO::getWechat, reqVO.getWechat())
.eqIfPresent(CustomerDO::getCustomerSource, reqVO.getCustomerSource())
.eqIfPresent(CustomerDO::getCustomerStarrating, reqVO.getCustomerStarrating())
.eqIfPresent(CustomerDO::getCustomerStatus, reqVO.getCustomerStatus())
.eqIfPresent(CustomerDO::getBelongingPeople, reqVO.getBelongingPeople())
.eqIfPresent(CustomerDO::getCustomerLogo, reqVO.getCustomerLogo())
.eqIfPresent(CustomerDO::getAddress, reqVO.getAddress())
.eqIfPresent(CustomerDO::getPhone, reqVO.getPhone())
.eqIfPresent(CustomerDO::getCompanyFax, reqVO.getCompanyFax())
.eqIfPresent(CustomerDO::getCompanyHttp, reqVO.getCompanyHttp())
.eqIfPresent(CustomerDO::getCompanyProfile, reqVO.getCompanyProfile())
.eqIfPresent(CustomerDO::getCustomerTax, reqVO.getCustomerTax())
.eqIfPresent(CustomerDO::getInvoiceHeader, reqVO.getInvoiceHeader())
.eqIfPresent(CustomerDO::getBankOfDeposit, reqVO.getBankOfDeposit())
.eqIfPresent(CustomerDO::getBankAccount, reqVO.getBankAccount())
.eqIfPresent(CustomerDO::getBankPhone, reqVO.getBankPhone())
.eqIfPresent(CustomerDO::getBankAddress, reqVO.getBankAddress())
.betweenIfPresent(CustomerDO::getCreateTime, reqVO.getCreateTime())
.betweenIfPresent(CustomerDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(CustomerDO::getId));
@ -34,22 +51,39 @@ public interface CustomerMapper extends BaseMapperX<CustomerDO> {
default List<CustomerDO> selectList(CustomerExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<CustomerDO>()
.likeIfPresent(CustomerDO::getCustomerName, reqVO.getCustomerName())
.eqIfPresent(CustomerDO::getCustomerType, reqVO.getCustomerType())
.eqIfPresent(CustomerDO::getUnifiedSettlement, reqVO.getUnifiedSettlement())
.eqIfPresent(CustomerDO::getCustomerNature, reqVO.getCustomerNature())
.eqIfPresent(CustomerDO::getCooperationMode, reqVO.getCooperationMode())
.eqIfPresent(CustomerDO::getLinebusinessId, reqVO.getLinebusinessId())
.eqIfPresent(CustomerDO::getStatus, reqVO.getStatus())
.eqIfPresent(CustomerDO::getCity, reqVO.getCity())
.eqIfPresent(CustomerDO::getIndustryType, reqVO.getIndustryType())
.eqIfPresent(CustomerDO::getFirstContacts, reqVO.getFirstContacts())
.eqIfPresent(CustomerDO::getMobilePhoneNumber, reqVO.getMobilePhoneNumber())
.eqIfPresent(CustomerDO::getCurrentPosition, reqVO.getCurrentPosition())
.eqIfPresent(CustomerDO::getEmail, reqVO.getEmail())
.eqIfPresent(CustomerDO::getWechat, reqVO.getWechat())
.eqIfPresent(CustomerDO::getCustomerSource, reqVO.getCustomerSource())
.eqIfPresent(CustomerDO::getCustomerStarrating, reqVO.getCustomerStarrating())
.eqIfPresent(CustomerDO::getCustomerStatus, reqVO.getCustomerStatus())
.eqIfPresent(CustomerDO::getBelongingPeople, reqVO.getBelongingPeople())
.eqIfPresent(CustomerDO::getCustomerLogo, reqVO.getCustomerLogo())
.eqIfPresent(CustomerDO::getAddress, reqVO.getAddress())
.eqIfPresent(CustomerDO::getPhone, reqVO.getPhone())
.eqIfPresent(CustomerDO::getCompanyFax, reqVO.getCompanyFax())
.eqIfPresent(CustomerDO::getCompanyHttp, reqVO.getCompanyHttp())
.eqIfPresent(CustomerDO::getCompanyProfile, reqVO.getCompanyProfile())
.eqIfPresent(CustomerDO::getCustomerTax, reqVO.getCustomerTax())
.eqIfPresent(CustomerDO::getInvoiceHeader, reqVO.getInvoiceHeader())
.eqIfPresent(CustomerDO::getBankOfDeposit, reqVO.getBankOfDeposit())
.eqIfPresent(CustomerDO::getBankAccount, reqVO.getBankAccount())
.eqIfPresent(CustomerDO::getBankPhone, reqVO.getBankPhone())
.eqIfPresent(CustomerDO::getBankAddress, reqVO.getBankAddress())
.betweenIfPresent(CustomerDO::getCreateTime, reqVO.getCreateTime())
.betweenIfPresent(CustomerDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(CustomerDO::getId));
}
default List<CustomerDO> selectcustomerList(CustomerRespVO reqVO) {
default List<CustomerDO> selectcustomerListId(CustomerRespVO reqVO) {
return selectList(new LambdaQueryWrapperX<CustomerDO>()
.likeIfPresent(CustomerDO::getCustomerName, reqVO.getCustomerName())
.eqIfPresent(CustomerDO::getStatus, reqVO.getStatus()));
);
}
}

@ -0,0 +1,58 @@
package com.yunxi.scm.module.xxjj.dal.mysql.project;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ProjectMapper extends BaseMapperX<ProjectDO> {
default PageResult<ProjectDO> selectPage(ProjectPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProjectDO>()
.likeIfPresent(ProjectDO::getProjectName, reqVO.getProjectName())
.betweenIfPresent(ProjectDO::getStartTime, reqVO.getStartTime())
.betweenIfPresent(ProjectDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(ProjectDO::getResponsible, reqVO.getResponsible())
.eqIfPresent(ProjectDO::getParticipants, reqVO.getParticipants())
.eqIfPresent(ProjectDO::getProjectMark, reqVO.getProjectMark())
.eqIfPresent(ProjectDO::getVisibility, reqVO.getVisibility())
.eqIfPresent(ProjectDO::getProjectRemark, reqVO.getProjectRemark())
.eqIfPresent(ProjectDO::getAnnex, reqVO.getAnnex())
.eqIfPresent(ProjectDO::getProjectPictures, reqVO.getProjectPictures())
.eqIfPresent(ProjectDO::getProjectStatus, reqVO.getProjectStatus())
.eqIfPresent(ProjectDO::getProjectSchedule, reqVO.getProjectSchedule())
.betweenIfPresent(ProjectDO::getCreateTime, reqVO.getCreateTime())
.betweenIfPresent(ProjectDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(ProjectDO::getId));
}
default List<ProjectDO> selectList(ProjectExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<ProjectDO>()
.likeIfPresent(ProjectDO::getProjectName, reqVO.getProjectName())
.betweenIfPresent(ProjectDO::getStartTime, reqVO.getStartTime())
.betweenIfPresent(ProjectDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(ProjectDO::getResponsible, reqVO.getResponsible())
.eqIfPresent(ProjectDO::getParticipants, reqVO.getParticipants())
.eqIfPresent(ProjectDO::getProjectMark, reqVO.getProjectMark())
.eqIfPresent(ProjectDO::getVisibility, reqVO.getVisibility())
.eqIfPresent(ProjectDO::getProjectRemark, reqVO.getProjectRemark())
.eqIfPresent(ProjectDO::getAnnex, reqVO.getAnnex())
.eqIfPresent(ProjectDO::getProjectPictures, reqVO.getProjectPictures())
.eqIfPresent(ProjectDO::getProjectStatus, reqVO.getProjectStatus())
.eqIfPresent(ProjectDO::getProjectSchedule, reqVO.getProjectSchedule())
.betweenIfPresent(ProjectDO::getCreateTime, reqVO.getCreateTime())
.betweenIfPresent(ProjectDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(ProjectDO::getId));
}
}

@ -0,0 +1,58 @@
package com.yunxi.scm.module.xxjj.dal.mysql.task;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface TaskMapper extends BaseMapperX<TaskDO> {
default PageResult<TaskDO> selectPage(TaskPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<TaskDO>()
.eqIfPresent(TaskDO::getTaskTitle, reqVO.getTaskTitle())
.betweenIfPresent(TaskDO::getStartTime, reqVO.getStartTime())
.betweenIfPresent(TaskDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(TaskDO::getProjectId, reqVO.getProjectId())
.eqIfPresent(TaskDO::getResponsible, reqVO.getResponsible())
.eqIfPresent(TaskDO::getParticipants, reqVO.getParticipants())
.eqIfPresent(TaskDO::getTaskMark, reqVO.getTaskMark())
.eqIfPresent(TaskDO::getCriticality, reqVO.getCriticality())
.eqIfPresent(TaskDO::getTaskReminder, reqVO.getTaskReminder())
.eqIfPresent(TaskDO::getReminderMethod, reqVO.getReminderMethod())
.eqIfPresent(TaskDO::getTaskRemark, reqVO.getTaskRemark())
.eqIfPresent(TaskDO::getAnnex, reqVO.getAnnex())
.betweenIfPresent(TaskDO::getCreateTime, reqVO.getCreateTime())
.betweenIfPresent(TaskDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(TaskDO::getId));
}
default List<TaskDO> selectList(TaskExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<TaskDO>()
.eqIfPresent(TaskDO::getTaskTitle, reqVO.getTaskTitle())
.betweenIfPresent(TaskDO::getStartTime, reqVO.getStartTime())
.betweenIfPresent(TaskDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(TaskDO::getProjectId, reqVO.getProjectId())
.eqIfPresent(TaskDO::getResponsible, reqVO.getResponsible())
.eqIfPresent(TaskDO::getParticipants, reqVO.getParticipants())
.eqIfPresent(TaskDO::getTaskMark, reqVO.getTaskMark())
.eqIfPresent(TaskDO::getCriticality, reqVO.getCriticality())
.eqIfPresent(TaskDO::getTaskReminder, reqVO.getTaskReminder())
.eqIfPresent(TaskDO::getReminderMethod, reqVO.getReminderMethod())
.eqIfPresent(TaskDO::getTaskRemark, reqVO.getTaskRemark())
.eqIfPresent(TaskDO::getAnnex, reqVO.getAnnex())
.betweenIfPresent(TaskDO::getCreateTime, reqVO.getCreateTime())
.betweenIfPresent(TaskDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(TaskDO::getId));
}
}

@ -29,8 +29,10 @@ public interface ErrorCodeConstants {
ErrorCode WAREHOUSE_RECEIPT_NOT_EXISTS = new ErrorCode(1002025013, "入库单不存在");
// ========== 领料单 TODO 补充编号 ==========
ErrorCode WAREHOUSE_OUT_NOT_EXISTS = new ErrorCode(1002025014, "领料单不存在");
// ========== 任务 TODO 补充编号 ==========
ErrorCode TASK_NOT_EXISTS = new ErrorCode(1002025071, "任务不存在");
// ========== 项目管理 TODO 补充编号 ==========
ErrorCode PROJECT_NOT_EXISTS = new ErrorCode(1002025072, "项目管理不存在");
// ========== 部门模块 1002004000 ==========
ErrorCode MaterialCategory_NAME_DUPLICATE = new ErrorCode(1002004000, "已经存在该名字的部门");
ErrorCode MaterialCategory_PARENT_NOT_EXITS = new ErrorCode(1002004001,"父级部门不存在");

@ -9,7 +9,7 @@ import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
* @author
*/
public interface CustomerService {
@ -68,10 +68,11 @@ public interface CustomerService {
List<CustomerDO> getCustomerList(CustomerExportReqVO exportReqVO);
/**
*
*
*
*
* @return
*/
List<CustomerDO> getCustomerstaus(CustomerRespVO customerRespVO);
List<CustomerDO> getCustomerId(CustomerRespVO customerRespVO);
}

@ -18,7 +18,7 @@ import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
* @author
*/
@Service
@Validated
@ -80,8 +80,8 @@ public class CustomerServiceImpl implements CustomerService {
}
@Override
public List<CustomerDO> getCustomerstaus(CustomerRespVO customerRespVO) {
return customerMapper.selectcustomerList(customerRespVO);
public List<CustomerDO> getCustomerId(CustomerRespVO customerRespVO) {
return customerMapper.selectcustomerListId(customerRespVO);
}
}

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.service.project;
import java.util.*;
import javax.validation.*;
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface ProjectService {
/**
*
*
* @param createReqVO
* @return
*/
Long createProject(@Valid ProjectCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateProject(@Valid ProjectUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteProject(Long id);
/**
*
*
* @param id
* @return
*/
ProjectDO getProject(Long id);
/**
*
*
* @param ids
* @return
*/
List<ProjectDO> getProjectList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<ProjectDO> getProjectPage(ProjectPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<ProjectDO> getProjectList(ProjectExportReqVO exportReqVO);
}

@ -0,0 +1,82 @@
package com.yunxi.scm.module.xxjj.service.project;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.convert.project.ProjectConvert;
import com.yunxi.scm.module.xxjj.dal.mysql.project.ProjectMapper;
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class ProjectServiceImpl implements ProjectService {
@Resource
private ProjectMapper projectMapper;
@Override
public Long createProject(ProjectCreateReqVO createReqVO) {
// 插入
ProjectDO project = ProjectConvert.INSTANCE.convert(createReqVO);
projectMapper.insert(project);
// 返回
return project.getId();
}
@Override
public void updateProject(ProjectUpdateReqVO updateReqVO) {
// 校验存在
validateProjectExists(updateReqVO.getId());
// 更新
ProjectDO updateObj = ProjectConvert.INSTANCE.convert(updateReqVO);
projectMapper.updateById(updateObj);
}
@Override
public void deleteProject(Long id) {
// 校验存在
validateProjectExists(id);
// 删除
projectMapper.deleteById(id);
}
private void validateProjectExists(Long id) {
if (projectMapper.selectById(id) == null) {
throw exception(PROJECT_NOT_EXISTS);
}
}
@Override
public ProjectDO getProject(Long id) {
return projectMapper.selectById(id);
}
@Override
public List<ProjectDO> getProjectList(Collection<Long> ids) {
return projectMapper.selectBatchIds(ids);
}
@Override
public PageResult<ProjectDO> getProjectPage(ProjectPageReqVO pageReqVO) {
return projectMapper.selectPage(pageReqVO);
}
@Override
public List<ProjectDO> getProjectList(ProjectExportReqVO exportReqVO) {
return projectMapper.selectList(exportReqVO);
}
}

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.service.task;
import java.util.*;
import javax.validation.*;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface TaskService {
/**
*
*
* @param createReqVO
* @return
*/
Long createTask(@Valid TaskCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateTask(@Valid TaskUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteTask(Long id);
/**
*
*
* @param id
* @return
*/
TaskDO getTask(Long id);
/**
*
*
* @param ids
* @return
*/
List<TaskDO> getTaskList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<TaskDO> getTaskPage(TaskPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<TaskDO> getTaskList(TaskExportReqVO exportReqVO);
}

@ -0,0 +1,82 @@
package com.yunxi.scm.module.xxjj.service.task;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.convert.task.TaskConvert;
import com.yunxi.scm.module.xxjj.dal.mysql.task.TaskMapper;
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class TaskServiceImpl implements TaskService {
@Resource
private TaskMapper taskMapper;
@Override
public Long createTask(TaskCreateReqVO createReqVO) {
// 插入
TaskDO task = TaskConvert.INSTANCE.convert(createReqVO);
taskMapper.insert(task);
// 返回
return task.getId();
}
@Override
public void updateTask(TaskUpdateReqVO updateReqVO) {
// 校验存在
validateTaskExists(updateReqVO.getId());
// 更新
TaskDO updateObj = TaskConvert.INSTANCE.convert(updateReqVO);
taskMapper.updateById(updateObj);
}
@Override
public void deleteTask(Long id) {
// 校验存在
validateTaskExists(id);
// 删除
taskMapper.deleteById(id);
}
private void validateTaskExists(Long id) {
if (taskMapper.selectById(id) == null) {
throw exception(TASK_NOT_EXISTS);
}
}
@Override
public TaskDO getTask(Long id) {
return taskMapper.selectById(id);
}
@Override
public List<TaskDO> getTaskList(Collection<Long> ids) {
return taskMapper.selectBatchIds(ids);
}
@Override
public PageResult<TaskDO> getTaskPage(TaskPageReqVO pageReqVO) {
return taskMapper.selectPage(pageReqVO);
}
@Override
public List<TaskDO> getTaskList(TaskExportReqVO exportReqVO) {
return taskMapper.selectList(exportReqVO);
}
}

@ -2,9 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yunxi.scm.module.xxjj.dal.mysql.customer.CustomerMapper">
<select id="queryCustomerTree" resultType="com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO">
select id,customer_name as name from xxjj_customer
where linebusiness_id = #{id}
</select>
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yunxi.scm.module.xxjj.dal.mysql.project.ProjectMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yunxi.scm.module.xxjj.dal.mysql.task.TaskMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -31,7 +31,7 @@ import static org.mockito.Mockito.*;
/**
* {@link CustomerServiceImpl}
*
* @author
* @author
*/
@Import(CustomerServiceImpl.class)
public class CustomerServiceImplTest extends BaseDbUnitTest {
@ -111,33 +111,81 @@ public class CustomerServiceImplTest extends BaseDbUnitTest {
// mock 数据
CustomerDO dbCustomer = randomPojo(CustomerDO.class, o -> { // 等会查询到
o.setCustomerName(null);
o.setCustomerType(null);
o.setUnifiedSettlement(null);
o.setCustomerNature(null);
o.setCooperationMode(null);
o.setLinebusinessId(null);
o.setStatus(null);
o.setCity(null);
o.setIndustryType(null);
o.setFirstContacts(null);
o.setMobilePhoneNumber(null);
o.setCurrentPosition(null);
o.setEmail(null);
o.setWechat(null);
o.setCustomerSource(null);
o.setCustomerStarrating(null);
o.setCustomerStatus(null);
o.setBelongingPeople(null);
o.setCustomerLogo(null);
o.setAddress(null);
o.setPhone(null);
o.setCompanyFax(null);
o.setCompanyHttp(null);
o.setCompanyProfile(null);
o.setCustomerTax(null);
o.setInvoiceHeader(null);
o.setBankOfDeposit(null);
o.setBankAccount(null);
o.setBankPhone(null);
o.setBankAddress(null);
o.setCreateTime(null);
o.setUpdateTime(null);
});
customerMapper.insert(dbCustomer);
// 测试 customerName 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerName(null)));
// 测试 customerType 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerType(null)));
// 测试 unifiedSettlement 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setUnifiedSettlement(null)));
// 测试 customerNature 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerNature(null)));
// 测试 cooperationMode 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCooperationMode(null)));
// 测试 linebusinessId 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setLinebusinessId(null)));
// 测试 status 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setStatus(null)));
// 测试 city 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCity(null)));
// 测试 industryType 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setIndustryType(null)));
// 测试 firstContacts 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setFirstContacts(null)));
// 测试 mobilePhoneNumber 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setMobilePhoneNumber(null)));
// 测试 currentPosition 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCurrentPosition(null)));
// 测试 email 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setEmail(null)));
// 测试 wechat 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setWechat(null)));
// 测试 customerSource 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerSource(null)));
// 测试 customerStarrating 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerStarrating(null)));
// 测试 customerStatus 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerStatus(null)));
// 测试 belongingPeople 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBelongingPeople(null)));
// 测试 customerLogo 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerLogo(null)));
// 测试 address 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setAddress(null)));
// 测试 phone 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setPhone(null)));
// 测试 companyFax 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCompanyFax(null)));
// 测试 companyHttp 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCompanyHttp(null)));
// 测试 companyProfile 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCompanyProfile(null)));
// 测试 customerTax 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerTax(null)));
// 测试 invoiceHeader 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setInvoiceHeader(null)));
// 测试 bankOfDeposit 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankOfDeposit(null)));
// 测试 bankAccount 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankAccount(null)));
// 测试 bankPhone 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankPhone(null)));
// 测试 bankAddress 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankAddress(null)));
// 测试 createTime 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCreateTime(null)));
// 测试 updateTime 不匹配
@ -145,13 +193,29 @@ public class CustomerServiceImplTest extends BaseDbUnitTest {
// 准备参数
CustomerPageReqVO reqVO = new CustomerPageReqVO();
reqVO.setCustomerName(null);
reqVO.setCustomerType(null);
reqVO.setUnifiedSettlement(null);
reqVO.setCustomerNature(null);
reqVO.setCooperationMode(null);
reqVO.setLinebusinessId(null);
reqVO.setStatus(null);
// reqVO.setBelongingPeople(null);
reqVO.setCity(null);
reqVO.setIndustryType(null);
reqVO.setFirstContacts(null);
reqVO.setMobilePhoneNumber(null);
reqVO.setCurrentPosition(null);
reqVO.setEmail(null);
reqVO.setWechat(null);
reqVO.setCustomerSource(null);
reqVO.setCustomerStarrating(null);
reqVO.setCustomerStatus(null);
reqVO.setBelongingPeople(null);
reqVO.setCustomerLogo(null);
reqVO.setAddress(null);
reqVO.setPhone(null);
reqVO.setCompanyFax(null);
reqVO.setCompanyHttp(null);
reqVO.setCompanyProfile(null);
reqVO.setCustomerTax(null);
reqVO.setInvoiceHeader(null);
reqVO.setBankOfDeposit(null);
reqVO.setBankAccount(null);
reqVO.setBankPhone(null);
reqVO.setBankAddress(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
@ -169,33 +233,81 @@ public class CustomerServiceImplTest extends BaseDbUnitTest {
// mock 数据
CustomerDO dbCustomer = randomPojo(CustomerDO.class, o -> { // 等会查询到
o.setCustomerName(null);
o.setCustomerType(null);
o.setUnifiedSettlement(null);
o.setCustomerNature(null);
o.setCooperationMode(null);
o.setLinebusinessId(null);
o.setStatus(null);
o.setCity(null);
o.setIndustryType(null);
o.setFirstContacts(null);
o.setMobilePhoneNumber(null);
o.setCurrentPosition(null);
o.setEmail(null);
o.setWechat(null);
o.setCustomerSource(null);
o.setCustomerStarrating(null);
o.setCustomerStatus(null);
o.setBelongingPeople(null);
o.setCustomerLogo(null);
o.setAddress(null);
o.setPhone(null);
o.setCompanyFax(null);
o.setCompanyHttp(null);
o.setCompanyProfile(null);
o.setCustomerTax(null);
o.setInvoiceHeader(null);
o.setBankOfDeposit(null);
o.setBankAccount(null);
o.setBankPhone(null);
o.setBankAddress(null);
o.setCreateTime(null);
o.setUpdateTime(null);
});
customerMapper.insert(dbCustomer);
// 测试 customerName 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerName(null)));
// 测试 customerType 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerType(null)));
// 测试 unifiedSettlement 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setUnifiedSettlement(null)));
// 测试 customerNature 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerNature(null)));
// 测试 cooperationMode 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCooperationMode(null)));
// 测试 linebusinessId 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setLinebusinessId(null)));
// 测试 status 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setStatus(null)));
// 测试 city 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCity(null)));
// 测试 industryType 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setIndustryType(null)));
// 测试 firstContacts 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setFirstContacts(null)));
// 测试 mobilePhoneNumber 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setMobilePhoneNumber(null)));
// 测试 currentPosition 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCurrentPosition(null)));
// 测试 email 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setEmail(null)));
// 测试 wechat 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setWechat(null)));
// 测试 customerSource 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerSource(null)));
// 测试 customerStarrating 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerStarrating(null)));
// 测试 customerStatus 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerStatus(null)));
// 测试 belongingPeople 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBelongingPeople(null)));
// 测试 customerLogo 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerLogo(null)));
// 测试 address 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setAddress(null)));
// 测试 phone 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setPhone(null)));
// 测试 companyFax 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCompanyFax(null)));
// 测试 companyHttp 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCompanyHttp(null)));
// 测试 companyProfile 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCompanyProfile(null)));
// 测试 customerTax 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCustomerTax(null)));
// 测试 invoiceHeader 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setInvoiceHeader(null)));
// 测试 bankOfDeposit 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankOfDeposit(null)));
// 测试 bankAccount 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankAccount(null)));
// 测试 bankPhone 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankPhone(null)));
// 测试 bankAddress 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setBankAddress(null)));
// 测试 createTime 不匹配
customerMapper.insert(cloneIgnoreId(dbCustomer, o -> o.setCreateTime(null)));
// 测试 updateTime 不匹配
@ -203,13 +315,29 @@ public class CustomerServiceImplTest extends BaseDbUnitTest {
// 准备参数
CustomerExportReqVO reqVO = new CustomerExportReqVO();
reqVO.setCustomerName(null);
reqVO.setCustomerType(null);
reqVO.setUnifiedSettlement(null);
reqVO.setCustomerNature(null);
reqVO.setCooperationMode(null);
reqVO.setLinebusinessId(null);
reqVO.setStatus(null);
reqVO.setCity(null);
reqVO.setIndustryType(null);
reqVO.setFirstContacts(null);
reqVO.setMobilePhoneNumber(null);
reqVO.setCurrentPosition(null);
reqVO.setEmail(null);
reqVO.setWechat(null);
reqVO.setCustomerSource(null);
reqVO.setCustomerStarrating(null);
reqVO.setCustomerStatus(null);
reqVO.setBelongingPeople(null);
reqVO.setCustomerLogo(null);
reqVO.setAddress(null);
reqVO.setPhone(null);
reqVO.setCompanyFax(null);
reqVO.setCompanyHttp(null);
reqVO.setCompanyProfile(null);
reqVO.setCustomerTax(null);
reqVO.setInvoiceHeader(null);
reqVO.setBankOfDeposit(null);
reqVO.setBankAccount(null);
reqVO.setBankPhone(null);
reqVO.setBankAddress(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));

@ -0,0 +1,255 @@
package com.yunxi.scm.module.xxjj.service.project;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
import com.yunxi.scm.module.xxjj.dal.mysql.project.ProjectMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link ProjectServiceImpl}
*
* @author
*/
@Import(ProjectServiceImpl.class)
public class ProjectServiceImplTest extends BaseDbUnitTest {
@Resource
private ProjectServiceImpl projectService;
@Resource
private ProjectMapper projectMapper;
@Test
public void testCreateProject_success() {
// 准备参数
ProjectCreateReqVO reqVO = randomPojo(ProjectCreateReqVO.class);
// 调用
Long projectId = projectService.createProject(reqVO);
// 断言
assertNotNull(projectId);
// 校验记录的属性是否正确
ProjectDO project = projectMapper.selectById(projectId);
assertPojoEquals(reqVO, project);
}
@Test
public void testUpdateProject_success() {
// mock 数据
ProjectDO dbProject = randomPojo(ProjectDO.class);
projectMapper.insert(dbProject);// @Sql: 先插入出一条存在的数据
// 准备参数
ProjectUpdateReqVO reqVO = randomPojo(ProjectUpdateReqVO.class, o -> {
o.setId(dbProject.getId()); // 设置更新的 ID
});
// 调用
projectService.updateProject(reqVO);
// 校验是否更新正确
ProjectDO project = projectMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, project);
}
@Test
public void testUpdateProject_notExists() {
// 准备参数
ProjectUpdateReqVO reqVO = randomPojo(ProjectUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> projectService.updateProject(reqVO), PROJECT_NOT_EXISTS);
}
@Test
public void testDeleteProject_success() {
// mock 数据
ProjectDO dbProject = randomPojo(ProjectDO.class);
projectMapper.insert(dbProject);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbProject.getId();
// 调用
projectService.deleteProject(id);
// 校验数据不存在了
assertNull(projectMapper.selectById(id));
}
@Test
public void testDeleteProject_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> projectService.deleteProject(id), PROJECT_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetProjectPage() {
// mock 数据
ProjectDO dbProject = randomPojo(ProjectDO.class, o -> { // 等会查询到
o.setProjectName(null);
o.setStartTime(null);
o.setEndTime(null);
o.setResponsible(null);
o.setParticipants(null);
o.setProjectMark(null);
o.setVisibility(null);
o.setProjectRemark(null);
o.setAnnex(null);
o.setProjectPictures(null);
o.setProjectStatus(null);
o.setProjectSchedule(null);
o.setCreateTime(null);
o.setUpdateTime(null);
});
projectMapper.insert(dbProject);
// 测试 projectName 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectName(null)));
// 测试 startTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setStartTime(null)));
// 测试 endTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setEndTime(null)));
// 测试 responsible 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setResponsible(null)));
// 测试 participants 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setParticipants(null)));
// 测试 projectMark 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectMark(null)));
// 测试 visibility 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setVisibility(null)));
// 测试 projectRemark 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectRemark(null)));
// 测试 annex 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setAnnex(null)));
// 测试 projectPictures 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectPictures(null)));
// 测试 projectStatus 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectStatus(null)));
// 测试 projectSchedule 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectSchedule(null)));
// 测试 createTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setCreateTime(null)));
// 测试 updateTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setUpdateTime(null)));
// 准备参数
ProjectPageReqVO reqVO = new ProjectPageReqVO();
reqVO.setProjectName(null);
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setResponsible(null);
reqVO.setParticipants(null);
reqVO.setProjectMark(null);
reqVO.setVisibility(null);
reqVO.setProjectRemark(null);
reqVO.setAnnex(null);
reqVO.setProjectPictures(null);
reqVO.setProjectStatus(null);
reqVO.setProjectSchedule(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<ProjectDO> pageResult = projectService.getProjectPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbProject, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetProjectList() {
// mock 数据
ProjectDO dbProject = randomPojo(ProjectDO.class, o -> { // 等会查询到
o.setProjectName(null);
o.setStartTime(null);
o.setEndTime(null);
o.setResponsible(null);
o.setParticipants(null);
o.setProjectMark(null);
o.setVisibility(null);
o.setProjectRemark(null);
o.setAnnex(null);
o.setProjectPictures(null);
o.setProjectStatus(null);
o.setProjectSchedule(null);
o.setCreateTime(null);
o.setUpdateTime(null);
});
projectMapper.insert(dbProject);
// 测试 projectName 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectName(null)));
// 测试 startTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setStartTime(null)));
// 测试 endTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setEndTime(null)));
// 测试 responsible 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setResponsible(null)));
// 测试 participants 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setParticipants(null)));
// 测试 projectMark 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectMark(null)));
// 测试 visibility 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setVisibility(null)));
// 测试 projectRemark 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectRemark(null)));
// 测试 annex 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setAnnex(null)));
// 测试 projectPictures 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectPictures(null)));
// 测试 projectStatus 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectStatus(null)));
// 测试 projectSchedule 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectSchedule(null)));
// 测试 createTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setCreateTime(null)));
// 测试 updateTime 不匹配
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setUpdateTime(null)));
// 准备参数
ProjectExportReqVO reqVO = new ProjectExportReqVO();
reqVO.setProjectName(null);
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setResponsible(null);
reqVO.setParticipants(null);
reqVO.setProjectMark(null);
reqVO.setVisibility(null);
reqVO.setProjectRemark(null);
reqVO.setAnnex(null);
reqVO.setProjectPictures(null);
reqVO.setProjectStatus(null);
reqVO.setProjectSchedule(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<ProjectDO> list = projectService.getProjectList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbProject, list.get(0));
}
}

@ -0,0 +1,255 @@
package com.yunxi.scm.module.xxjj.service.task;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
import com.yunxi.scm.module.xxjj.dal.mysql.task.TaskMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link TaskServiceImpl}
*
* @author
*/
@Import(TaskServiceImpl.class)
public class TaskServiceImplTest extends BaseDbUnitTest {
@Resource
private TaskServiceImpl taskService;
@Resource
private TaskMapper taskMapper;
@Test
public void testCreateTask_success() {
// 准备参数
TaskCreateReqVO reqVO = randomPojo(TaskCreateReqVO.class);
// 调用
Long taskId = taskService.createTask(reqVO);
// 断言
assertNotNull(taskId);
// 校验记录的属性是否正确
TaskDO task = taskMapper.selectById(taskId);
assertPojoEquals(reqVO, task);
}
@Test
public void testUpdateTask_success() {
// mock 数据
TaskDO dbTask = randomPojo(TaskDO.class);
taskMapper.insert(dbTask);// @Sql: 先插入出一条存在的数据
// 准备参数
TaskUpdateReqVO reqVO = randomPojo(TaskUpdateReqVO.class, o -> {
o.setId(dbTask.getId()); // 设置更新的 ID
});
// 调用
taskService.updateTask(reqVO);
// 校验是否更新正确
TaskDO task = taskMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, task);
}
@Test
public void testUpdateTask_notExists() {
// 准备参数
TaskUpdateReqVO reqVO = randomPojo(TaskUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> taskService.updateTask(reqVO), TASK_NOT_EXISTS);
}
@Test
public void testDeleteTask_success() {
// mock 数据
TaskDO dbTask = randomPojo(TaskDO.class);
taskMapper.insert(dbTask);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbTask.getId();
// 调用
taskService.deleteTask(id);
// 校验数据不存在了
assertNull(taskMapper.selectById(id));
}
@Test
public void testDeleteTask_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> taskService.deleteTask(id), TASK_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetTaskPage() {
// mock 数据
TaskDO dbTask = randomPojo(TaskDO.class, o -> { // 等会查询到
o.setTaskTitle(null);
o.setStartTime(null);
o.setEndTime(null);
o.setProjectId(null);
o.setResponsible(null);
o.setParticipants(null);
o.setTaskMark(null);
o.setCriticality(null);
o.setTaskReminder(null);
o.setReminderMethod(null);
o.setTaskRemark(null);
o.setAnnex(null);
o.setCreateTime(null);
o.setUpdateTime(null);
});
taskMapper.insert(dbTask);
// 测试 taskTitle 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskTitle(null)));
// 测试 startTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setStartTime(null)));
// 测试 endTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setEndTime(null)));
// 测试 projectId 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setProjectId(null)));
// 测试 responsible 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setResponsible(null)));
// 测试 participants 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setParticipants(null)));
// 测试 taskMark 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskMark(null)));
// 测试 criticality 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCriticality(null)));
// 测试 taskReminder 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskReminder(null)));
// 测试 reminderMethod 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setReminderMethod(null)));
// 测试 taskRemark 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskRemark(null)));
// 测试 annex 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setAnnex(null)));
// 测试 createTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCreateTime(null)));
// 测试 updateTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setUpdateTime(null)));
// 准备参数
TaskPageReqVO reqVO = new TaskPageReqVO();
reqVO.setTaskTitle(null);
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setProjectId(null);
reqVO.setResponsible(null);
reqVO.setParticipants(null);
reqVO.setTaskMark(null);
reqVO.setCriticality(null);
reqVO.setTaskReminder(null);
reqVO.setReminderMethod(null);
reqVO.setTaskRemark(null);
reqVO.setAnnex(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<TaskDO> pageResult = taskService.getTaskPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbTask, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetTaskList() {
// mock 数据
TaskDO dbTask = randomPojo(TaskDO.class, o -> { // 等会查询到
o.setTaskTitle(null);
o.setStartTime(null);
o.setEndTime(null);
o.setProjectId(null);
o.setResponsible(null);
o.setParticipants(null);
o.setTaskMark(null);
o.setCriticality(null);
o.setTaskReminder(null);
o.setReminderMethod(null);
o.setTaskRemark(null);
o.setAnnex(null);
o.setCreateTime(null);
o.setUpdateTime(null);
});
taskMapper.insert(dbTask);
// 测试 taskTitle 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskTitle(null)));
// 测试 startTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setStartTime(null)));
// 测试 endTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setEndTime(null)));
// 测试 projectId 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setProjectId(null)));
// 测试 responsible 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setResponsible(null)));
// 测试 participants 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setParticipants(null)));
// 测试 taskMark 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskMark(null)));
// 测试 criticality 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCriticality(null)));
// 测试 taskReminder 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskReminder(null)));
// 测试 reminderMethod 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setReminderMethod(null)));
// 测试 taskRemark 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskRemark(null)));
// 测试 annex 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setAnnex(null)));
// 测试 createTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCreateTime(null)));
// 测试 updateTime 不匹配
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setUpdateTime(null)));
// 准备参数
TaskExportReqVO reqVO = new TaskExportReqVO();
reqVO.setTaskTitle(null);
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setProjectId(null);
reqVO.setResponsible(null);
reqVO.setParticipants(null);
reqVO.setTaskMark(null);
reqVO.setCriticality(null);
reqVO.setTaskReminder(null);
reqVO.setReminderMethod(null);
reqVO.setTaskRemark(null);
reqVO.setAnnex(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<TaskDO> list = taskService.getTaskList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbTask, list.get(0));
}
}

@ -50,6 +50,7 @@
"core-js": "^3.26.0",
"crypto-js": "^4.0.0",
"echarts": "5.4.0",
"element-china-area-data": "^6.0.2",
"element-ui": "2.15.12",
"file-saver": "2.0.5",
"fuse.js": "6.6.2",

@ -53,6 +53,13 @@ export function exportCustomerExcel(query) {
})
}
// 获取客户精简信息列表
export function listSimpleCustomerid() {
return request({
url: '/xxjj/customer/list-all-simplecustomer',
method: 'get'
})
}
// 创建工单
export function createCustomerwork(data) {
return request({
@ -61,11 +68,11 @@ export function createCustomerwork(data) {
data: data
})
}
// 获取客户精简信息列表
export function listSimpleCustomerid() {
// 创建任务
export function createCustomertask(data) {
return request({
url: '/xxjj/customer/list-all-simplecustomer',
method: 'get'
url: '/xxjj/customer/createtask',
method: 'post',
data: data
})
}

@ -0,0 +1,73 @@
import request from '@/utils/request'
// 创建项目管理
export function createProject(data) {
return request({
url: '/xxjj/project/create',
method: 'post',
data: data
})
}
// 更新项目管理
export function updateProject(data) {
return request({
url: '/xxjj/project/update',
method: 'put',
data: data
})
}
// 删除项目管理
export function deleteProject(id) {
return request({
url: '/xxjj/project/delete?id=' + id,
method: 'delete'
})
}
// 获得项目管理
export function getProject(id) {
return request({
url: '/xxjj/project/get?id=' + id,
method: 'get'
})
}
// 获得项目管理分页
export function getProjectPage(query) {
return request({
url: '/xxjj/project/page',
method: 'get',
params: query
})
}
// 导出项目管理 Excel
export function exportProjectExcel(query) {
return request({
url: '/xxjj/project/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
// 创建任务
export function createProjecttask(data) {
return request({
url: '/xxjj/project/projecttask',
method: 'post',
data: data
})
}
// 获取成员列表
export function getProjectPageUser(query) {
return request({
url: '/xxjj/project/pagequeryuser',
method: 'get',
data: query
})
}

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 创建任务
export function createTask(data) {
return request({
url: '/xxjj/task/create',
method: 'post',
data: data
})
}
// 更新任务
export function updateTask(data) {
return request({
url: '/xxjj/task/update',
method: 'put',
data: data
})
}
// 删除任务
export function deleteTask(id) {
return request({
url: '/xxjj/task/delete?id=' + id,
method: 'delete'
})
}
// 获得任务
export function getTask(id) {
return request({
url: '/xxjj/task/get?id=' + id,
method: 'get'
})
}
// 获得任务分页
export function getTaskPage(query) {
return request({
url: '/xxjj/task/page',
method: 'get',
params: query
})
}
// 导出任务 Excel
export function exportTaskExcel(query) {
return request({
url: '/xxjj/task/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

@ -101,7 +101,12 @@ export const DICT_TYPE = {
CUSTOMER_TYPE: 'customer_type', //客户类型
CUSTOMER_NATUER: 'customer_nature', //客户性质
COOPERATION_MODE: 'cooperation_mode', //客户合作模式
CUSTOMER_INDUSTRY_TYPE:'customer_industry_type', //客户行业类型
CUSTOMER_SOURCE:'customer_source',//客户来源
CUSTOMER_STARRATING:'customer_starrating',//客户星级
CUSTOMER_STATUS1:'customer_status1',
CONTRACT_STATUS:'contract_state', //合约状态
ACCOUNT_STATUS:'account_status', //账户状态
// ============= BUSINESSLINE 模块=================
BUSINESS_TYPE: 'business_type', //业务线类型
@ -119,6 +124,9 @@ export const DICT_TYPE = {
QUALITY_TYPE: 'quality_type',//类型
BUSINESS_STATE: 'business_state',//状态
PROCESSES_TYPE: 'processes_type',//工序类型
// ============= PROJECT 模块=================
PROJECT_STATUS: 'project_status',//项目状态
PROJECT_VISIBILITY: 'project_visibility',//项目可见范围
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,625 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker v-model="queryParams.startTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker v-model="queryParams.endTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<!-- <el-form-item label="负责人员" prop="responsible">-->
<!-- <el-select v-model="queryParams.responsible" placeholder="请选择负责人员" clearable size="small">-->
<!-- <el-option label="请选择字典生成" value="" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="参数人员" prop="participants">-->
<!-- <el-select v-model="queryParams.participants" placeholder="请选择参数人员" clearable size="small">-->
<!-- <el-option label="请选择字典生成" value="" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="任务标记" prop="projectMark">-->
<!-- <el-input v-model="queryParams.projectMark" placeholder="请输入任务标记" clearable @keyup.enter.native="handleQuery"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="可见范围" prop="visibility">-->
<!-- <el-select v-model="queryParams.visibility" placeholder="请选择可见范围" clearable size="small">-->
<!-- <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_VISIBILITY)"-->
<!-- :key="dict.value" :label="dict.label" :value="dict.value"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="任务描述" prop="projectRemark">-->
<!-- <el-input v-model="queryParams.projectRemark" placeholder="请输入任务描述" clearable @keyup.enter.native="handleQuery"/>-->
<!-- </el-form-item>-->
<el-form-item label="项目状态" prop="projectStatus">
<el-select v-model="queryParams.projectStatus" placeholder="请选择项目状态" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="项目进度" prop="projectSchedule">-->
<!-- <el-input v-model="queryParams.projectSchedule" placeholder="请输入项目进度" clearable @keyup.enter.native="handleQuery"/>-->
<!-- </el-form-item>-->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<!-- <el-form-item label="更新时间" prop="updateTime">-->
<!-- <el-date-picker v-model="queryParams.updateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"-->
<!-- range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['xxjj:project:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['xxjj:project:export']">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddtask"
v-hasPermi="['xxjj:project:task']">新建任务
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="项目名称" align="center" prop="projectName" />
<el-table-column label="开始时间" align="center" prop="startTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.startTime) }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" align="center" prop="endTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.endTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="负责人员" align="center" prop="responsible" />-->
<el-table-column label="负责人员" align="responsible">
<template v-slot="scope">
<span v-for="userId in scope.row.responsible">
{{ getUserNickname(userId) }}
</span>
</template>
</el-table-column>
<el-table-column label="参数人员" align="center" prop="participants" />
<el-table-column label="任务标记" align="center" prop="projectMark" />
<el-table-column label="可见范围" align="center" prop="visibility" width="150px">
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.PROJECT_VISIBILITY" :value="scope.row.visibility" />
</template>
</el-table-column>
<!-- <el-table-column label="项目描述" align="center" prop="projectRemark" />-->
<!-- <el-table-column label="附件" align="center" prop="annex" />-->
<!-- <el-table-column label="项目图片" align="center" prop="projectPictures" />-->
<el-table-column label="项目图片" align="center" prop="projectPictures" >
<template v-slot="scope">
<image-preview :src="scope.row.projectPictures" :width="'60px'"></image-preview>
</template>
</el-table-column>
<el-table-column label="项目状态" align="center" prop="projectStatus">
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.PROJECT_STATUS" :value="scope.row.projectStatus" />
</template>
</el-table-column>
<!-- <el-table-column label="项目进度" align="center" prop="projectSchedule" />-->
<el-table-column label="项目进度" align="center" prop="projectSchedule" width="150px" >
<template slot-scope="scope">
<el-progress :text-inside="true" :stroke-width="26" :percentage="(scope.row.projectSchedule)" color="#57DCDD" ></el-progress>
</template>
</el-table-column>
<!-- <el-table-column label="项目进度" align="center" prop="projectSchedule" >-->
<!-- <template slot-scope="scope">-->
<!-- <el-progress type="line" :percentage="(scope.row.projectSchedule)" color="#57DCDD" :text-inside="false" :stroke-width="12" />-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:project:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:project:delete']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate1(scope.row)"
v-hasPermi="['xxjj:project:updates']">更新</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="form.projectName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目图片">
<imageUpload v-model="form.projectPictures"/>
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
</el-form-item>
<el-form-item label="负责人员" prop="responsible">
<el-select v-model="form.responsible" placeholder="请选择负责人员">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<!-- <el-form-item label="参数人员" prop="participants">-->
<!-- <el-select v-model="form.participants" placeholder="请选择参数人员">-->
<!-- <el-option label="请选择字典生成" value="" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="参数人员" prop="participants">
<el-select v-model="form.participants" multiple placeholder="请选择参数人员">
<el-option v-for="user in users" :key="parseInt(user.id)" :label="user.nickname" :value="parseInt(user.id)"/>
</el-select>
</el-form-item>
<el-form-item label="任务标记" prop="projectMark">
<el-input v-model="form.projectMark" placeholder="请输入任务标记" />
</el-form-item>
<el-form-item label="可见范围" prop="visibility">
<el-radio-group v-model="form.visibility">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_VISIBILITY)"
:key="dict.value" :label="dict.value">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="任务描述" prop="projectRemark">
<el-input v-model="form.projectRemark" placeholder="请输入任务描述" />
</el-form-item>
<el-form-item label="附件">
<fileUpload v-model="form.annex"/>
</el-form-item>
<el-form-item label="项目状态" prop="projectStatus">
<el-select v-model="form.projectStatus" placeholder="请选择项目状态">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<!-- <el-form-item label="项目进度" prop="projectSchedule">-->
<!-- <el-input v-model="form.projectSchedule" placeholder="请输入项目进度" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 对话框更新 -->
<el-dialog :title="title1" :visible.sync="open1" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目状态" prop="projectStatus">
<el-select v-model="form.projectStatus" placeholder="请选择项目状态">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="项目进度" prop="projectSchedule">
<el-input v-model="form.projectSchedule" placeholder="请输入项目进度" />
</el-form-item>
<el-form-item label="项目描述" prop="projectRemark">
<el-input v-model="form.projectRemark" placeholder="请输入项目描述" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormups"> </el-button>
<el-button @click="cancelups"> </el-button>
</div>
</el-dialog>
<!-- 新建任务 -->
<el-dialog :title="title2" :visible.sync="open2" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules2" label-width="80px">
<el-form-item label="任务标题" prop="taskTitle">
<el-input v-model="form.taskTitle" placeholder="请输入任务标题" />
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
</el-form-item>
<el-form-item label="项目id" prop="projectId">
<el-input v-model="form.projectId" placeholder="请输入项目id" />
</el-form-item>
<el-form-item label="负责人员" prop="responsible">
<el-input v-model="form.responsible" placeholder="请输入负责人员" />
</el-form-item>
<el-form-item label="参数人员" prop="participants">
<el-input v-model="form.participants" placeholder="请输入参数人员" />
</el-form-item>
<el-form-item label="任务标记" prop="taskMark">
<el-input v-model="form.taskMark" placeholder="请输入任务标记" />
</el-form-item>
<!-- <el-form-item label="紧要程度" prop="criticality">-->
<!-- <el-select v-model="form.criticality" placeholder="请选择紧要程度">-->
<!-- <el-option label="请选择字典生成" value="" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="紧要程度" prop="criticality">
<el-radio-group v-model="form.criticality" size="small">
<el-radio-button v-for="(item, index) in field101Options" :key="index" :label="item.value"
:disabled="item.disabled" border>{{item.label}}
</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="任务提醒" prop="taskReminder">-->
<!-- <el-checkbox-group v-model="form.taskReminder">-->
<!-- <el-checkbox>请选择字典生成</el-checkbox>-->
<!-- </el-checkbox-group>-->
<!-- </el-form-item>-->
<el-form-item label="任务提醒" prop="taskReminder">
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
<el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="提醒方式" prop="reminderMethod">
<el-input v-model="form.reminderMethod" placeholder="请输入提醒方式" />
</el-form-item>
<el-form-item label="任务描述">
<editor v-model="form.taskRemark" :min-height="192"/>
</el-form-item>
<el-form-item label="附件">
<fileUpload v-model="form.annex"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormtask"> </el-button>
<el-button @click="canceltask"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createProject, updateProject, deleteProject, getProject, getProjectPage, exportProjectExcel,createProjecttask,getProjectPageUser } from "@/api/xxjj/project";
import ImageUpload from '@/components/ImageUpload';
import FileUpload from '@/components/FileUpload';
import ImagePreview from "@/components/ImagePreview";
import { listSimpleUsers } from "@/api/system/user";
export default {
name: "Project",
components: {
ImageUpload,
FileUpload,
ImagePreview,
},
data() {
return {
//
projectSchedule:0,
//
loading: true,
//
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
list: [],
//
title: "",
//
title1: "",
//
title2: "",
//
open: false,
//
open1: false,
//
open2: false,
//
users: [],
//
queryParams: {
pageNo: 1,
pageSize: 10,
projectName: null,
startTime: [],
endTime: [],
responsible: null,
participants: null,
projectMark: null,
visibility: null,
projectRemark: null,
annex: null,
projectPictures: null,
projectStatus: null,
projectSchedule: null,
createTime: [],
updateTime: [],
},
//
form: {},
//
rules: {
projectName: [{ required: true, message: "项目名称不能为空", trigger: "blur" }],
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
},
rules2: {
taskTitle: [{ required: true, message: "任务标题不能为空", trigger: "blur" }],
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
},
//
field101Options: [{
'label': '重要',
'value': 0
}, {
'label': '紧急',
'value': 1
}, {
'label': '普通',
'value': 2
}, {
'label': '较低',
'value': 3
}],
};
},
created() {
this.getList();
this.getList1();
//
listSimpleUsers().then(response => {
this.users = response.data;
});
},
methods: {
handleCheckedCitiesChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.cities.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
},
//id
getUserNickname(userId) {
for (const user of this.users) {
if (user.id === userId) {
return user.nickname;
}
}
return '未知(' + userId + ')';
},
/** 查询列表 */
getList() {
this.loading = true;
//
getProjectPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
// getList1() {
// this.loading = true;
// //
// getProjectPageUser(this.queryParams).then(response => {
// this.list = response.data.list;
// this.total = response.data.total;
// this.loading = false;
// });
// },
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 取消更新按钮 */
cancelups() {
this.open1 = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
projectName: undefined,
startTime: undefined,
endTime: undefined,
responsible: undefined,
participants: undefined,
projectMark: undefined,
visibility: undefined,
projectRemark: undefined,
annex: undefined,
projectPictures: undefined,
projectStatus: undefined,
projectSchedule: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加项目管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getProject(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改项目管理";
});
},
/** 更新按钮操作 */
handleUpdate1(row) {
this.reset();
const id = row.id;
getProject(id).then(response => {
this.form = response.data;
this.open1 = true;
this.title1 = "更新项目";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
//
if (this.form.id != null) {
updateProject(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
//
createProject(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 提交按钮 */
submitFormups() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
//
if (this.form.id != null) {
updateProject(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open1 = false;
this.getList();
});
return;
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除项目管理编号为"' + id + '"的数据项?').then(function() {
return deleteProject(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有项目管理数据项?').then(() => {
this.exportLoading = true;
return exportProjectExcel(params);
}).then(response => {
this.$download.excel(response, '项目管理.xls');
this.exportLoading = false;
}).catch(() => {});
},
/** 新增任务操作 */
handleAddtask() {
this.reset()
this.open2 = true
this.title2 = '新建任务'
},
//
canceltask() {
this.open2 = false
this.reset()
},
/** 提交按钮任务 */
submitFormtask() {
this.$refs['form'].validate(valid => {
if (!valid) {
return
}
createProjecttask(this.form).then(response => {
this.$modal.msgSuccess('新增成功')
this.open2 = false
this.getList()
})
})
},
}
};
</script>

@ -0,0 +1,333 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="任务标题" prop="taskTitle">
<el-input v-model="queryParams.taskTitle" placeholder="请输入任务标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker v-model="queryParams.startTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker v-model="queryParams.endTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="项目id" prop="projectId">
<el-input v-model="queryParams.projectId" placeholder="请输入项目id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="负责人员" prop="responsible">
<el-input v-model="queryParams.responsible" placeholder="请输入负责人员" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="参数人员" prop="participants">
<el-input v-model="queryParams.participants" placeholder="请输入参数人员" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="任务标记" prop="taskMark">
<el-input v-model="queryParams.taskMark" placeholder="请输入任务标记" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="紧要程度" prop="criticality">
<el-select v-model="queryParams.criticality" placeholder="请选择紧要程度" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="提醒方式" prop="reminderMethod">
<el-input v-model="queryParams.reminderMethod" placeholder="请输入提醒方式" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="更新时间" prop="updateTime">
<el-date-picker v-model="queryParams.updateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['xxjj:task:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['xxjj:task:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="任务标题" align="center" prop="taskTitle" />
<el-table-column label="开始时间" align="center" prop="startTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.startTime) }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" align="center" prop="endTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.endTime) }}</span>
</template>
</el-table-column>
<el-table-column label="项目id" align="center" prop="projectId" />
<el-table-column label="负责人员" align="center" prop="responsible" />
<el-table-column label="参数人员" align="center" prop="participants" />
<el-table-column label="任务标记" align="center" prop="taskMark" />
<el-table-column label="紧要程度" align="center" prop="criticality" />
<el-table-column label="任务提醒" align="center" prop="taskReminder" />
<el-table-column label="提醒方式" align="center" prop="reminderMethod" />
<el-table-column label="任务描述" align="center" prop="taskRemark" />
<el-table-column label="附件" align="center" prop="annex" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:task:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:task:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="任务标题" prop="taskTitle">
<el-input v-model="form.taskTitle" placeholder="请输入任务标题" />
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
</el-form-item>
<el-form-item label="项目id" prop="projectId">
<el-input v-model="form.projectId" placeholder="请输入项目id" />
</el-form-item>
<el-form-item label="负责人员" prop="responsible">
<el-input v-model="form.responsible" placeholder="请输入负责人员" />
</el-form-item>
<el-form-item label="参数人员" prop="participants">
<el-input v-model="form.participants" placeholder="请输入参数人员" />
</el-form-item>
<el-form-item label="任务标记" prop="taskMark">
<el-input v-model="form.taskMark" placeholder="请输入任务标记" />
</el-form-item>
<el-form-item label="紧要程度" prop="criticality">
<el-select v-model="form.criticality" placeholder="请选择紧要程度">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="任务提醒" prop="taskReminder">
<el-checkbox-group v-model="form.taskReminder">
<el-checkbox>请选择字典生成</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="提醒方式" prop="reminderMethod">
<el-input v-model="form.reminderMethod" placeholder="请输入提醒方式" />
</el-form-item>
<el-form-item label="任务描述">
<editor v-model="form.taskRemark" :min-height="192"/>
</el-form-item>
<el-form-item label="附件">
<fileUpload v-model="form.annex"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createTask, updateTask, deleteTask, getTask, getTaskPage, exportTaskExcel } from "@/api/xxjj/task";
import FileUpload from '@/components/FileUpload';
import Editor from '@/components/Editor';
export default {
name: "Task",
components: {
FileUpload,
Editor,
},
data() {
return {
//
loading: true,
//
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
list: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
taskTitle: null,
startTime: [],
endTime: [],
projectId: null,
responsible: null,
participants: null,
taskMark: null,
criticality: null,
taskReminder: null,
reminderMethod: null,
taskRemark: null,
annex: null,
createTime: [],
updateTime: [],
},
//
form: {},
//
rules: {
taskTitle: [{ required: true, message: "任务标题不能为空", trigger: "blur" }],
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
//
getTaskPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
taskTitle: undefined,
startTime: undefined,
endTime: undefined,
projectId: undefined,
responsible: undefined,
participants: undefined,
taskMark: undefined,
criticality: undefined,
taskReminder: [],
reminderMethod: undefined,
taskRemark: undefined,
annex: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加任务";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getTask(id).then(response => {
this.form = response.data;
this.form.taskReminder = this.form.taskReminder.split(",");
this.open = true;
this.title = "修改任务";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
this.form.taskReminder = this.form.taskReminder.join(",");
//
if (this.form.id != null) {
updateTask(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
//
createTask(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除任务编号为"' + id + '"的数据项?').then(function() {
return deleteTask(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有任务数据项?').then(() => {
this.exportLoading = true;
return exportTaskExcel(params);
}).then(response => {
this.$download.excel(response, '任务.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save