feat: collaboration and statistics
This commit is contained in:
+402
@@ -0,0 +1,402 @@
|
||||
package com.agileboot.domain.collaboration.record;
|
||||
|
||||
import com.agileboot.common.core.page.PageDTO;
|
||||
import com.agileboot.domain.collaboration.record.command.AddCollaborationRecordCommand;
|
||||
import com.agileboot.domain.collaboration.record.command.CollaborationExpenditureCommand;
|
||||
import com.agileboot.domain.collaboration.record.command.CollaborationFileCommand;
|
||||
import com.agileboot.domain.collaboration.record.command.CollaborationSettlementCommand;
|
||||
import com.agileboot.domain.collaboration.record.command.CollaborationTaskCommand;
|
||||
import com.agileboot.domain.collaboration.record.command.UpdateCollaborationRecordCommand;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationExpenditureEntity;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationExpenditureService;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationFileEntity;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationFileService;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordEntity;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordService;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationSettlementEntity;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationSettlementService;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationTaskEntity;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationTaskService;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationExpenditureDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationFileDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationMonthlyStatisticsDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationOptionDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationRecordDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationRecordDetailDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationSettlementDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.CollaborationTaskDTO;
|
||||
import com.agileboot.domain.collaboration.record.dto.SettlementStatusDTO;
|
||||
import com.agileboot.domain.collaboration.record.enumtype.CollaborationOptionEnum;
|
||||
import com.agileboot.domain.collaboration.record.enumtype.SettlementStatusEnum;
|
||||
import com.agileboot.domain.collaboration.record.model.CollaborationRecordModel;
|
||||
import com.agileboot.domain.collaboration.record.model.CollaborationRecordModelFactory;
|
||||
import com.agileboot.domain.collaboration.record.query.CollaborationRecordQuery;
|
||||
import com.agileboot.domain.common.command.BulkOperationCommand;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class CollaborationRecordApplicationService {
|
||||
|
||||
private static final String PURCHASE_FEE = "拍单费用";
|
||||
private static final String DELIVERY_FEE = "快递费用";
|
||||
private static final String REMUNERATION_FEE = "稿费";
|
||||
|
||||
private final CollaborationRecordModelFactory recordModelFactory;
|
||||
private final CollaborationRecordService recordService;
|
||||
private final CollaborationTaskService taskService;
|
||||
private final CollaborationExpenditureService expenditureService;
|
||||
private final CollaborationSettlementService settlementService;
|
||||
private final CollaborationFileService fileService;
|
||||
|
||||
public PageDTO<CollaborationRecordDTO> getRecordList(CollaborationRecordQuery query) {
|
||||
Page<CollaborationRecordEntity> page = recordService.page(query.toPage(), query.toQueryWrapper());
|
||||
List<CollaborationRecordDTO> records = page.getRecords().stream()
|
||||
.map(this::buildRecordDTO)
|
||||
.collect(Collectors.toList());
|
||||
return new PageDTO<>(records, page.getTotal());
|
||||
}
|
||||
|
||||
public CollaborationRecordDetailDTO getRecordInfo(Long recordId) {
|
||||
CollaborationRecordModel model = recordModelFactory.loadById(recordId);
|
||||
CollaborationRecordDetailDTO dto = new CollaborationRecordDetailDTO(model);
|
||||
fillDetailChildren(dto, recordId);
|
||||
fillRecordStats(dto, recordId);
|
||||
return dto;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void addRecord(AddCollaborationRecordCommand command) {
|
||||
CollaborationRecordModel model = recordModelFactory.create();
|
||||
model.loadFromAddCommand(command);
|
||||
model.saveRecord();
|
||||
saveChildren(model.getRecordId(), command);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateRecord(UpdateCollaborationRecordCommand command) {
|
||||
CollaborationRecordModel model = recordModelFactory.loadById(command.getRecordId());
|
||||
model.loadFromUpdateCommand(command);
|
||||
model.updateRecord();
|
||||
replaceChildren(command.getRecordId(), command);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteRecord(BulkOperationCommand<Long> command) {
|
||||
Set<Long> ids = command.getIds();
|
||||
if (ids == null || ids.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
taskService.removeByRecordIds(ids);
|
||||
expenditureService.removeByRecordIds(ids);
|
||||
settlementService.removeByRecordIds(ids);
|
||||
fileService.removeByRecordIds(ids);
|
||||
recordService.removeBatchByIds(ids);
|
||||
}
|
||||
|
||||
public List<CollaborationOptionDTO> getOptions() {
|
||||
return Arrays.stream(CollaborationOptionEnum.values())
|
||||
.map(item -> new CollaborationOptionDTO(item.getType(), item.getLabel(), Arrays.asList(item.getValues())))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<CollaborationMonthlyStatisticsDTO> getMonthlyStatistics(Integer year) {
|
||||
List<CollaborationMonthlyStatisticsDTO> statistics = new ArrayList<>();
|
||||
for (int month = 1; month <= 12; month++) {
|
||||
statistics.add(buildMonthlyStatistics(year, month));
|
||||
}
|
||||
return statistics;
|
||||
}
|
||||
|
||||
private CollaborationRecordDTO buildRecordDTO(CollaborationRecordEntity entity) {
|
||||
CollaborationRecordDTO dto = new CollaborationRecordDTO(entity);
|
||||
fillRecordStats(dto, entity.getRecordId());
|
||||
return dto;
|
||||
}
|
||||
|
||||
private void fillDetailChildren(CollaborationRecordDetailDTO dto, Long recordId) {
|
||||
dto.setTasks(taskService.listByRecordId(recordId).stream()
|
||||
.map(CollaborationTaskDTO::new)
|
||||
.collect(Collectors.toList()));
|
||||
dto.setExpenditures(expenditureService.listByRecordId(recordId).stream()
|
||||
.map(CollaborationExpenditureDTO::new)
|
||||
.collect(Collectors.toList()));
|
||||
dto.setSettlements(settlementService.listByRecordId(recordId).stream()
|
||||
.map(CollaborationSettlementDTO::new)
|
||||
.collect(Collectors.toList()));
|
||||
dto.setFiles(fileService.listByRecordId(recordId).stream()
|
||||
.map(CollaborationFileDTO::new)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
private void fillRecordStats(CollaborationRecordDTO dto, Long recordId) {
|
||||
List<CollaborationTaskEntity> tasks = taskService.listByRecordId(recordId);
|
||||
List<CollaborationExpenditureEntity> expenditures = expenditureService.listByRecordId(recordId);
|
||||
List<CollaborationSettlementEntity> settlements = settlementService.listByRecordId(recordId);
|
||||
dto.setTasksNum(tasks.size());
|
||||
dto.setCompletedTasksNum((int) tasks.stream().filter(item -> item.getReleaseDate() != null).count());
|
||||
dto.setPurchaseSettlementStatus(getStatus(dto.getPurchasePrice(), settlements, PURCHASE_FEE));
|
||||
dto.setDeliverySettlementStatus(getStatus(sumExpenditure(expenditures, DELIVERY_FEE), settlements, DELIVERY_FEE));
|
||||
dto.setRemunerationSettlementStatus(getStatus(dto.getRemuneration(), settlements, REMUNERATION_FEE));
|
||||
}
|
||||
|
||||
private SettlementStatusDTO getStatus(
|
||||
BigDecimal expectedAmount, List<CollaborationSettlementEntity> settlements, String purpose) {
|
||||
List<CollaborationSettlementEntity> matched = filterSettlements(settlements, purpose);
|
||||
if (matched.isEmpty()) {
|
||||
return toStatusDTO(SettlementStatusEnum.NONE);
|
||||
}
|
||||
BigDecimal settledAmount = sumSettlement(matched);
|
||||
BigDecimal expected = defaultAmount(expectedAmount);
|
||||
if (isAllSettlementPending(matched)) {
|
||||
return toStatusDTO(SettlementStatusEnum.UNSETTLED);
|
||||
}
|
||||
if (isAllSettlementDue(matched) && settledAmount.compareTo(expected) >= 0) {
|
||||
return toStatusDTO(SettlementStatusEnum.SETTLED);
|
||||
}
|
||||
return toStatusDTO(SettlementStatusEnum.PARTIAL);
|
||||
}
|
||||
|
||||
private List<CollaborationSettlementEntity> filterSettlements(
|
||||
List<CollaborationSettlementEntity> settlements, String purpose) {
|
||||
if (settlements == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return settlements.stream()
|
||||
.filter(item -> purpose.equals(item.getPurpose()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private SettlementStatusDTO toStatusDTO(SettlementStatusEnum status) {
|
||||
return new SettlementStatusDTO(status.getValue(), status.getLabel());
|
||||
}
|
||||
|
||||
private boolean isAllSettlementDue(List<CollaborationSettlementEntity> settlements) {
|
||||
Date today = getTodayStart();
|
||||
return settlements.stream()
|
||||
.allMatch(item -> item.getSettleDate() != null && !item.getSettleDate().after(today));
|
||||
}
|
||||
|
||||
private boolean isAllSettlementPending(List<CollaborationSettlementEntity> settlements) {
|
||||
Date today = getTodayStart();
|
||||
return settlements.stream()
|
||||
.allMatch(item -> item.getSettleDate() == null || item.getSettleDate().after(today));
|
||||
}
|
||||
|
||||
private void replaceChildren(Long recordId, AddCollaborationRecordCommand command) {
|
||||
List<Long> ids = Collections.singletonList(recordId);
|
||||
taskService.removeByRecordIds(ids);
|
||||
expenditureService.removeByRecordIds(ids);
|
||||
settlementService.removeByRecordIds(ids);
|
||||
fileService.removeByRecordIds(ids);
|
||||
saveChildren(recordId, command);
|
||||
}
|
||||
|
||||
private void saveChildren(Long recordId, AddCollaborationRecordCommand command) {
|
||||
saveTasks(recordId, command.getTasks());
|
||||
saveExpenditures(recordId, command.getExpenditures());
|
||||
saveSettlements(recordId, command.getSettlements());
|
||||
saveFiles(recordId, command.getFiles());
|
||||
}
|
||||
|
||||
private void saveTasks(Long recordId, List<CollaborationTaskCommand> tasks) {
|
||||
List<CollaborationTaskEntity> entities = toTaskEntities(recordId, tasks);
|
||||
if (!entities.isEmpty()) {
|
||||
taskService.saveBatch(entities);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveExpenditures(Long recordId, List<CollaborationExpenditureCommand> expenditures) {
|
||||
List<CollaborationExpenditureEntity> entities = toExpenditureEntities(recordId, expenditures);
|
||||
if (!entities.isEmpty()) {
|
||||
expenditureService.saveBatch(entities);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveSettlements(Long recordId, List<CollaborationSettlementCommand> settlements) {
|
||||
List<CollaborationSettlementEntity> entities = toSettlementEntities(recordId, settlements);
|
||||
if (!entities.isEmpty()) {
|
||||
settlementService.saveBatch(entities);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveFiles(Long recordId, List<CollaborationFileCommand> files) {
|
||||
List<CollaborationFileEntity> entities = toFileEntities(recordId, files);
|
||||
if (!entities.isEmpty()) {
|
||||
fileService.saveBatch(entities);
|
||||
}
|
||||
}
|
||||
|
||||
private List<CollaborationTaskEntity> toTaskEntities(Long recordId, List<CollaborationTaskCommand> tasks) {
|
||||
List<CollaborationTaskEntity> entities = new ArrayList<>();
|
||||
if (tasks == null) {
|
||||
return entities;
|
||||
}
|
||||
for (int i = 0; i < tasks.size(); i++) {
|
||||
entities.add(toTaskEntity(recordId, tasks.get(i), i));
|
||||
}
|
||||
return entities;
|
||||
}
|
||||
|
||||
private CollaborationTaskEntity toTaskEntity(Long recordId, CollaborationTaskCommand command, int index) {
|
||||
CollaborationTaskEntity entity = new CollaborationTaskEntity();
|
||||
entity.setRecordId(recordId);
|
||||
entity.setReleaseDate(command.getReleaseDate());
|
||||
entity.setSortOrder(index);
|
||||
return entity;
|
||||
}
|
||||
|
||||
private List<CollaborationExpenditureEntity> toExpenditureEntities(
|
||||
Long recordId, List<CollaborationExpenditureCommand> expenditures) {
|
||||
if (expenditures == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return expenditures.stream()
|
||||
.map(item -> toExpenditureEntity(recordId, item))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private CollaborationExpenditureEntity toExpenditureEntity(Long recordId, CollaborationExpenditureCommand command) {
|
||||
CollaborationExpenditureEntity entity = new CollaborationExpenditureEntity();
|
||||
entity.setRecordId(recordId);
|
||||
entity.setSpendDate(command.getSpendDate());
|
||||
entity.setAmount(command.getAmount());
|
||||
entity.setPurpose(command.getPurpose());
|
||||
return entity;
|
||||
}
|
||||
|
||||
private List<CollaborationSettlementEntity> toSettlementEntities(
|
||||
Long recordId, List<CollaborationSettlementCommand> settlements) {
|
||||
if (settlements == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return settlements.stream()
|
||||
.map(item -> toSettlementEntity(recordId, item))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private CollaborationSettlementEntity toSettlementEntity(Long recordId, CollaborationSettlementCommand command) {
|
||||
CollaborationSettlementEntity entity = new CollaborationSettlementEntity();
|
||||
entity.setRecordId(recordId);
|
||||
entity.setSettleDate(command.getSettleDate());
|
||||
entity.setMethod(command.getMethod());
|
||||
entity.setIncome(command.getIncome());
|
||||
entity.setPurpose(command.getPurpose());
|
||||
return entity;
|
||||
}
|
||||
|
||||
private List<CollaborationFileEntity> toFileEntities(Long recordId, List<CollaborationFileCommand> files) {
|
||||
List<CollaborationFileEntity> entities = new ArrayList<>();
|
||||
if (files == null) {
|
||||
return entities;
|
||||
}
|
||||
for (int i = 0; i < files.size(); i++) {
|
||||
entities.add(toFileEntity(recordId, files.get(i), i));
|
||||
}
|
||||
return entities;
|
||||
}
|
||||
|
||||
private CollaborationFileEntity toFileEntity(Long recordId, CollaborationFileCommand command, int index) {
|
||||
CollaborationFileEntity entity = new CollaborationFileEntity();
|
||||
entity.setRecordId(recordId);
|
||||
entity.setFileType(command.getFileType());
|
||||
entity.setUrl(command.getUrl());
|
||||
entity.setFileName(command.getFileName());
|
||||
entity.setNewFileName(command.getNewFileName());
|
||||
entity.setOriginalFilename(command.getOriginalFilename());
|
||||
entity.setSortOrder(index);
|
||||
return entity;
|
||||
}
|
||||
|
||||
private CollaborationMonthlyStatisticsDTO buildMonthlyStatistics(Integer year, Integer month) {
|
||||
Date[] range = getMonthRange(year, month);
|
||||
BigDecimal purchasePrice = sumPurchasePrice(range);
|
||||
BigDecimal expenditureAmount = sumExpenditure(range);
|
||||
BigDecimal settledRemuneration = sumSettlement(range, REMUNERATION_FEE);
|
||||
BigDecimal settledTotal = sumSettlement(range, null);
|
||||
return new CollaborationMonthlyStatisticsDTO(month, purchasePrice, expenditureAmount,
|
||||
settledRemuneration, settledTotal);
|
||||
}
|
||||
|
||||
private BigDecimal sumPurchasePrice(Date[] range) {
|
||||
List<CollaborationRecordEntity> records = recordService.list(new QueryWrapper<CollaborationRecordEntity>()
|
||||
.ge("purchase_date", range[0])
|
||||
.le("purchase_date", range[1]));
|
||||
return records.stream()
|
||||
.map(CollaborationRecordEntity::getPurchasePrice)
|
||||
.map(this::defaultAmount)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
|
||||
private BigDecimal sumExpenditure(Date[] range) {
|
||||
List<CollaborationExpenditureEntity> expenditures = expenditureService.list(
|
||||
new QueryWrapper<CollaborationExpenditureEntity>().ge("spend_date", range[0]).le("spend_date", range[1]));
|
||||
return expenditures.stream()
|
||||
.map(CollaborationExpenditureEntity::getAmount)
|
||||
.map(this::defaultAmount)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
|
||||
private BigDecimal sumSettlement(Date[] range, String purpose) {
|
||||
QueryWrapper<CollaborationSettlementEntity> wrapper = new QueryWrapper<CollaborationSettlementEntity>()
|
||||
.ge("settle_date", range[0])
|
||||
.le("settle_date", range[1])
|
||||
.eq(purpose != null, "purpose", purpose);
|
||||
return sumSettlement(settlementService.list(wrapper));
|
||||
}
|
||||
|
||||
private BigDecimal sumExpenditure(List<CollaborationExpenditureEntity> expenditures, String purpose) {
|
||||
return expenditures.stream()
|
||||
.filter(item -> purpose.equals(item.getPurpose()))
|
||||
.map(CollaborationExpenditureEntity::getAmount)
|
||||
.map(this::defaultAmount)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
|
||||
private BigDecimal sumSettlement(List<CollaborationSettlementEntity> settlements) {
|
||||
return settlements.stream()
|
||||
.map(CollaborationSettlementEntity::getIncome)
|
||||
.map(this::defaultAmount)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
|
||||
private BigDecimal defaultAmount(BigDecimal amount) {
|
||||
return amount == null ? BigDecimal.ZERO : amount;
|
||||
}
|
||||
|
||||
private Date[] getMonthRange(Integer year, Integer month) {
|
||||
Calendar start = Calendar.getInstance();
|
||||
start.set(year, month - 1, 1, 0, 0, 0);
|
||||
start.set(Calendar.MILLISECOND, 0);
|
||||
Calendar end = (Calendar) start.clone();
|
||||
end.add(Calendar.MONTH, 1);
|
||||
end.add(Calendar.MILLISECOND, -1);
|
||||
return new Date[]{start.getTime(), end.getTime()};
|
||||
}
|
||||
|
||||
private Date getTodayStart() {
|
||||
Calendar today = Calendar.getInstance();
|
||||
today.set(Calendar.HOUR_OF_DAY, 0);
|
||||
today.set(Calendar.MINUTE, 0);
|
||||
today.set(Calendar.SECOND, 0);
|
||||
today.set(Calendar.MILLISECOND, 0);
|
||||
return today.getTime();
|
||||
}
|
||||
|
||||
}
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
package com.agileboot.domain.collaboration.record.command;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.PositiveOrZero;
|
||||
import javax.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Data
|
||||
public class AddCollaborationRecordCommand {
|
||||
|
||||
@NotBlank(message = "品牌不能为空")
|
||||
@Size(max = 100, message = "品牌长度不能超过100个字符")
|
||||
protected String brand;
|
||||
|
||||
@NotBlank(message = "物品不能为空")
|
||||
@Size(max = 100, message = "物品长度不能超过100个字符")
|
||||
protected String goods;
|
||||
|
||||
@Size(max = 50, message = "合作平台长度不能超过50个字符")
|
||||
protected String cooperationPlatform;
|
||||
|
||||
@NotNull(message = "返图数量不能为空")
|
||||
@Min(value = 1, message = "返图数量至少为1")
|
||||
protected Integer imageReturnNum;
|
||||
|
||||
@Size(max = 30, message = "留存方式长度不能超过30个字符")
|
||||
protected String retainedMethod;
|
||||
|
||||
@Size(max = 30, message = "合作方式长度不能超过30个字符")
|
||||
protected String cooperatedMethod;
|
||||
|
||||
@Size(max = 30, message = "购入方式长度不能超过30个字符")
|
||||
protected String purchaseMethod;
|
||||
|
||||
@PositiveOrZero(message = "购入金额不能小于0")
|
||||
protected BigDecimal purchasePrice;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
protected Date purchaseDate;
|
||||
|
||||
@Size(max = 30, message = "购入平台长度不能超过30个字符")
|
||||
protected String purchasePlatform;
|
||||
|
||||
@NotNull(message = "预完成日期不能为空")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
protected Date deadline;
|
||||
|
||||
@PositiveOrZero(message = "稿费不能小于0")
|
||||
protected BigDecimal remuneration;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
protected Date completeDate;
|
||||
|
||||
@Size(max = 1000, message = "拍摄要求长度不能超过1000个字符")
|
||||
protected String requirements;
|
||||
|
||||
@Size(max = 1000, message = "备注长度不能超过1000个字符")
|
||||
protected String remark;
|
||||
|
||||
@Valid
|
||||
protected List<CollaborationTaskCommand> tasks = new ArrayList<>();
|
||||
|
||||
@Valid
|
||||
protected List<CollaborationExpenditureCommand> expenditures = new ArrayList<>();
|
||||
|
||||
@Valid
|
||||
protected List<CollaborationSettlementCommand> settlements = new ArrayList<>();
|
||||
|
||||
@Valid
|
||||
protected List<CollaborationFileCommand> files = new ArrayList<>();
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.agileboot.domain.collaboration.record.command;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import javax.validation.constraints.PositiveOrZero;
|
||||
import javax.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Data
|
||||
public class CollaborationExpenditureCommand {
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date spendDate;
|
||||
|
||||
@PositiveOrZero(message = "支出金额不能小于0")
|
||||
private BigDecimal amount;
|
||||
|
||||
@Size(max = 30, message = "支出用途长度不能超过30个字符")
|
||||
private String purpose;
|
||||
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.agileboot.domain.collaboration.record.command;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Data
|
||||
public class CollaborationFileCommand {
|
||||
|
||||
@NotBlank(message = "文件类型不能为空")
|
||||
@Size(max = 30, message = "文件类型长度不能超过30个字符")
|
||||
private String fileType;
|
||||
|
||||
@NotBlank(message = "文件地址不能为空")
|
||||
@Size(max = 500, message = "文件地址长度不能超过500个字符")
|
||||
private String url;
|
||||
|
||||
@Size(max = 300, message = "文件路径长度不能超过300个字符")
|
||||
private String fileName;
|
||||
|
||||
@Size(max = 200, message = "服务端文件名长度不能超过200个字符")
|
||||
private String newFileName;
|
||||
|
||||
@Size(max = 300, message = "原始文件名长度不能超过300个字符")
|
||||
private String originalFilename;
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.agileboot.domain.collaboration.record.command;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import javax.validation.constraints.PositiveOrZero;
|
||||
import javax.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Data
|
||||
public class CollaborationSettlementCommand {
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date settleDate;
|
||||
|
||||
@Size(max = 30, message = "结款方式长度不能超过30个字符")
|
||||
private String method;
|
||||
|
||||
@PositiveOrZero(message = "结款金额不能小于0")
|
||||
private BigDecimal income;
|
||||
|
||||
@Size(max = 30, message = "结款用途长度不能超过30个字符")
|
||||
private String purpose;
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.agileboot.domain.collaboration.record.command;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Data
|
||||
public class CollaborationTaskCommand {
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date releaseDate;
|
||||
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.agileboot.domain.collaboration.record.command;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Positive;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class UpdateCollaborationRecordCommand extends AddCollaborationRecordCommand {
|
||||
|
||||
@NotNull(message = "合作记录ID不能为空")
|
||||
@Positive
|
||||
private Long recordId;
|
||||
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.agileboot.common.core.base.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("collaboration_expenditure")
|
||||
@ApiModel(value = "CollaborationExpenditureEntity对象", description = "合作支出表")
|
||||
public class CollaborationExpenditureEntity extends BaseEntity<CollaborationExpenditureEntity> {
|
||||
|
||||
@TableId(value = "expenditure_id", type = IdType.AUTO)
|
||||
private Long expenditureId;
|
||||
|
||||
@TableField("record_id")
|
||||
private Long recordId;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
@TableField("spend_date")
|
||||
private Date spendDate;
|
||||
|
||||
@TableField("amount")
|
||||
private BigDecimal amount;
|
||||
|
||||
@TableField("purpose")
|
||||
private String purpose;
|
||||
|
||||
@Override
|
||||
public Serializable pkVal() {
|
||||
return this.expenditureId;
|
||||
}
|
||||
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationExpenditureMapper extends BaseMapper<CollaborationExpenditureEntity> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationExpenditureService extends IService<CollaborationExpenditureEntity> {
|
||||
|
||||
List<CollaborationExpenditureEntity> listByRecordId(Long recordId);
|
||||
|
||||
void removeByRecordIds(Collection<Long> recordIds);
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Service
|
||||
public class CollaborationExpenditureServiceImpl
|
||||
extends ServiceImpl<CollaborationExpenditureMapper, CollaborationExpenditureEntity>
|
||||
implements CollaborationExpenditureService {
|
||||
|
||||
@Override
|
||||
public List<CollaborationExpenditureEntity> listByRecordId(Long recordId) {
|
||||
if (recordId == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return list(new QueryWrapper<CollaborationExpenditureEntity>()
|
||||
.eq("record_id", recordId)
|
||||
.orderByAsc("spend_date"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeByRecordIds(Collection<Long> recordIds) {
|
||||
if (recordIds == null || recordIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
remove(new QueryWrapper<CollaborationExpenditureEntity>().in("record_id", recordIds));
|
||||
}
|
||||
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.agileboot.common.core.base.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import java.io.Serializable;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("collaboration_file")
|
||||
@ApiModel(value = "CollaborationFileEntity对象", description = "合作文件表")
|
||||
public class CollaborationFileEntity extends BaseEntity<CollaborationFileEntity> {
|
||||
|
||||
@TableId(value = "file_id", type = IdType.AUTO)
|
||||
private Long fileId;
|
||||
|
||||
@TableField("record_id")
|
||||
private Long recordId;
|
||||
|
||||
@TableField("file_type")
|
||||
private String fileType;
|
||||
|
||||
@TableField("url")
|
||||
private String url;
|
||||
|
||||
@TableField("file_name")
|
||||
private String fileName;
|
||||
|
||||
@TableField("new_file_name")
|
||||
private String newFileName;
|
||||
|
||||
@TableField("original_filename")
|
||||
private String originalFilename;
|
||||
|
||||
@TableField("sort_order")
|
||||
private Integer sortOrder;
|
||||
|
||||
@Override
|
||||
public Serializable pkVal() {
|
||||
return this.fileId;
|
||||
}
|
||||
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationFileMapper extends BaseMapper<CollaborationFileEntity> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationFileService extends IService<CollaborationFileEntity> {
|
||||
|
||||
List<CollaborationFileEntity> listByRecordId(Long recordId);
|
||||
|
||||
void removeByRecordIds(Collection<Long> recordIds);
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Service
|
||||
public class CollaborationFileServiceImpl
|
||||
extends ServiceImpl<CollaborationFileMapper, CollaborationFileEntity>
|
||||
implements CollaborationFileService {
|
||||
|
||||
@Override
|
||||
public List<CollaborationFileEntity> listByRecordId(Long recordId) {
|
||||
if (recordId == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return list(new QueryWrapper<CollaborationFileEntity>()
|
||||
.eq("record_id", recordId)
|
||||
.orderByAsc("file_type", "sort_order"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeByRecordIds(Collection<Long> recordIds) {
|
||||
if (recordIds == null || recordIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
remove(new QueryWrapper<CollaborationFileEntity>().in("record_id", recordIds));
|
||||
}
|
||||
|
||||
}
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.agileboot.common.core.base.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("collaboration_record")
|
||||
@ApiModel(value = "CollaborationRecordEntity对象", description = "合作记录表")
|
||||
public class CollaborationRecordEntity extends BaseEntity<CollaborationRecordEntity> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("合作记录ID")
|
||||
@TableId(value = "record_id", type = IdType.AUTO)
|
||||
private Long recordId;
|
||||
|
||||
@ApiModelProperty("品牌")
|
||||
@TableField("brand")
|
||||
private String brand;
|
||||
|
||||
@ApiModelProperty("物品")
|
||||
@TableField("goods")
|
||||
private String goods;
|
||||
|
||||
@ApiModelProperty("合作平台")
|
||||
@TableField("cooperation_platform")
|
||||
private String cooperationPlatform;
|
||||
|
||||
@ApiModelProperty("返图数量")
|
||||
@TableField("image_return_num")
|
||||
private Integer imageReturnNum;
|
||||
|
||||
@ApiModelProperty("留存方式")
|
||||
@TableField("retained_method")
|
||||
private String retainedMethod;
|
||||
|
||||
@ApiModelProperty("合作方式")
|
||||
@TableField("cooperated_method")
|
||||
private String cooperatedMethod;
|
||||
|
||||
@ApiModelProperty("购入方式")
|
||||
@TableField("purchase_method")
|
||||
private String purchaseMethod;
|
||||
|
||||
@ApiModelProperty("购入金额")
|
||||
@TableField("purchase_price")
|
||||
private BigDecimal purchasePrice;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
@ApiModelProperty("购入日期")
|
||||
@TableField("purchase_date")
|
||||
private Date purchaseDate;
|
||||
|
||||
@ApiModelProperty("购入平台")
|
||||
@TableField("purchase_platform")
|
||||
private String purchasePlatform;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
@ApiModelProperty("预完成日期")
|
||||
@TableField("deadline")
|
||||
private Date deadline;
|
||||
|
||||
@ApiModelProperty("稿费")
|
||||
@TableField("remuneration")
|
||||
private BigDecimal remuneration;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
@ApiModelProperty("完成日期")
|
||||
@TableField("complete_date")
|
||||
private Date completeDate;
|
||||
|
||||
@ApiModelProperty("拍摄要求")
|
||||
@TableField("requirements")
|
||||
private String requirements;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
@TableField("remark")
|
||||
private String remark;
|
||||
|
||||
@Override
|
||||
public Serializable pkVal() {
|
||||
return this.recordId;
|
||||
}
|
||||
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationRecordMapper extends BaseMapper<CollaborationRecordEntity> {
|
||||
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationRecordService extends IService<CollaborationRecordEntity> {
|
||||
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Service
|
||||
public class CollaborationRecordServiceImpl
|
||||
extends ServiceImpl<CollaborationRecordMapper, CollaborationRecordEntity>
|
||||
implements CollaborationRecordService {
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.agileboot.common.core.base.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("collaboration_settlement")
|
||||
@ApiModel(value = "CollaborationSettlementEntity对象", description = "合作结款表")
|
||||
public class CollaborationSettlementEntity extends BaseEntity<CollaborationSettlementEntity> {
|
||||
|
||||
@TableId(value = "settlement_id", type = IdType.AUTO)
|
||||
private Long settlementId;
|
||||
|
||||
@TableField("record_id")
|
||||
private Long recordId;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
@TableField("settle_date")
|
||||
private Date settleDate;
|
||||
|
||||
@TableField("method")
|
||||
private String method;
|
||||
|
||||
@TableField("income")
|
||||
private BigDecimal income;
|
||||
|
||||
@TableField("purpose")
|
||||
private String purpose;
|
||||
|
||||
@Override
|
||||
public Serializable pkVal() {
|
||||
return this.settlementId;
|
||||
}
|
||||
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationSettlementMapper extends BaseMapper<CollaborationSettlementEntity> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationSettlementService extends IService<CollaborationSettlementEntity> {
|
||||
|
||||
List<CollaborationSettlementEntity> listByRecordId(Long recordId);
|
||||
|
||||
void removeByRecordIds(Collection<Long> recordIds);
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Service
|
||||
public class CollaborationSettlementServiceImpl
|
||||
extends ServiceImpl<CollaborationSettlementMapper, CollaborationSettlementEntity>
|
||||
implements CollaborationSettlementService {
|
||||
|
||||
@Override
|
||||
public List<CollaborationSettlementEntity> listByRecordId(Long recordId) {
|
||||
if (recordId == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return list(new QueryWrapper<CollaborationSettlementEntity>()
|
||||
.eq("record_id", recordId)
|
||||
.orderByAsc("settle_date"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeByRecordIds(Collection<Long> recordIds) {
|
||||
if (recordIds == null || recordIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
remove(new QueryWrapper<CollaborationSettlementEntity>().in("record_id", recordIds));
|
||||
}
|
||||
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.agileboot.common.core.base.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("collaboration_task")
|
||||
@ApiModel(value = "CollaborationTaskEntity对象", description = "合作笔记任务表")
|
||||
public class CollaborationTaskEntity extends BaseEntity<CollaborationTaskEntity> {
|
||||
|
||||
@TableId(value = "task_id", type = IdType.AUTO)
|
||||
private Long taskId;
|
||||
|
||||
@TableField("record_id")
|
||||
private Long recordId;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
@TableField("release_date")
|
||||
private Date releaseDate;
|
||||
|
||||
@TableField("sort_order")
|
||||
private Integer sortOrder;
|
||||
|
||||
@Override
|
||||
public Serializable pkVal() {
|
||||
return this.taskId;
|
||||
}
|
||||
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationTaskMapper extends BaseMapper<CollaborationTaskEntity> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public interface CollaborationTaskService extends IService<CollaborationTaskEntity> {
|
||||
|
||||
List<CollaborationTaskEntity> listByRecordId(Long recordId);
|
||||
|
||||
void removeByRecordIds(Collection<Long> recordIds);
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.agileboot.domain.collaboration.record.db;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Service
|
||||
public class CollaborationTaskServiceImpl
|
||||
extends ServiceImpl<CollaborationTaskMapper, CollaborationTaskEntity>
|
||||
implements CollaborationTaskService {
|
||||
|
||||
@Override
|
||||
public List<CollaborationTaskEntity> listByRecordId(Long recordId) {
|
||||
if (recordId == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return list(new QueryWrapper<CollaborationTaskEntity>()
|
||||
.eq("record_id", recordId)
|
||||
.orderByAsc("sort_order"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeByRecordIds(Collection<Long> recordIds) {
|
||||
if (recordIds == null || recordIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
remove(new QueryWrapper<CollaborationTaskEntity>().in("record_id", recordIds));
|
||||
}
|
||||
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationExpenditureEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationExpenditureDTO {
|
||||
|
||||
public CollaborationExpenditureDTO(CollaborationExpenditureEntity entity) {
|
||||
if (entity != null) {
|
||||
BeanUtil.copyProperties(entity, this);
|
||||
}
|
||||
}
|
||||
|
||||
private Long expenditureId;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date spendDate;
|
||||
|
||||
private BigDecimal amount;
|
||||
|
||||
private String purpose;
|
||||
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationFileEntity;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationFileDTO {
|
||||
|
||||
public CollaborationFileDTO(CollaborationFileEntity entity) {
|
||||
if (entity != null) {
|
||||
BeanUtil.copyProperties(entity, this);
|
||||
}
|
||||
}
|
||||
|
||||
private Long fileId;
|
||||
|
||||
private String fileType;
|
||||
|
||||
private String url;
|
||||
|
||||
private String fileName;
|
||||
|
||||
private String newFileName;
|
||||
|
||||
private String originalFilename;
|
||||
|
||||
private Integer sortOrder;
|
||||
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationMonthlyStatisticsDTO {
|
||||
|
||||
private Integer month;
|
||||
|
||||
private BigDecimal purchasePrice;
|
||||
|
||||
private BigDecimal expenditureAmount;
|
||||
|
||||
private BigDecimal settledRemuneration;
|
||||
|
||||
private BigDecimal settledTotal;
|
||||
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationOptionDTO {
|
||||
|
||||
private String type;
|
||||
|
||||
private String label;
|
||||
|
||||
private List<String> values;
|
||||
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationRecordDTO {
|
||||
|
||||
public CollaborationRecordDTO(CollaborationRecordEntity entity) {
|
||||
if (entity != null) {
|
||||
BeanUtil.copyProperties(entity, this);
|
||||
}
|
||||
}
|
||||
|
||||
private Long recordId;
|
||||
|
||||
private String brand;
|
||||
|
||||
private String goods;
|
||||
|
||||
private String cooperationPlatform;
|
||||
|
||||
private Integer imageReturnNum;
|
||||
|
||||
private String retainedMethod;
|
||||
|
||||
private String cooperatedMethod;
|
||||
|
||||
private String purchaseMethod;
|
||||
|
||||
private BigDecimal purchasePrice;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date purchaseDate;
|
||||
|
||||
private String purchasePlatform;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date deadline;
|
||||
|
||||
private BigDecimal remuneration;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date completeDate;
|
||||
|
||||
private String requirements;
|
||||
|
||||
private String remark;
|
||||
|
||||
private Integer tasksNum;
|
||||
|
||||
private Integer completedTasksNum;
|
||||
|
||||
private SettlementStatusDTO purchaseSettlementStatus;
|
||||
|
||||
private SettlementStatusDTO deliverySettlementStatus;
|
||||
|
||||
private SettlementStatusDTO remunerationSettlementStatus;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordEntity;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationRecordDetailDTO extends CollaborationRecordDTO {
|
||||
|
||||
public CollaborationRecordDetailDTO(CollaborationRecordEntity entity) {
|
||||
super(entity);
|
||||
}
|
||||
|
||||
private List<CollaborationTaskDTO> tasks = new ArrayList<>();
|
||||
|
||||
private List<CollaborationExpenditureDTO> expenditures = new ArrayList<>();
|
||||
|
||||
private List<CollaborationSettlementDTO> settlements = new ArrayList<>();
|
||||
|
||||
private List<CollaborationFileDTO> files = new ArrayList<>();
|
||||
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationSettlementEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationSettlementDTO {
|
||||
|
||||
public CollaborationSettlementDTO(CollaborationSettlementEntity entity) {
|
||||
if (entity != null) {
|
||||
BeanUtil.copyProperties(entity, this);
|
||||
}
|
||||
}
|
||||
|
||||
private Long settlementId;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date settleDate;
|
||||
|
||||
private String method;
|
||||
|
||||
private BigDecimal income;
|
||||
|
||||
private String purpose;
|
||||
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationTaskEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CollaborationTaskDTO {
|
||||
|
||||
public CollaborationTaskDTO(CollaborationTaskEntity entity) {
|
||||
if (entity != null) {
|
||||
BeanUtil.copyProperties(entity, this);
|
||||
}
|
||||
}
|
||||
|
||||
private Long taskId;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date releaseDate;
|
||||
|
||||
private Integer sortOrder;
|
||||
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.agileboot.domain.collaboration.record.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class SettlementStatusDTO {
|
||||
|
||||
private String status;
|
||||
|
||||
private String label;
|
||||
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.agileboot.domain.collaboration.record.enumtype;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
public enum CollaborationFileTypeEnum {
|
||||
|
||||
GOODS_IMAGE,
|
||||
|
||||
ATTACHMENT
|
||||
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
package com.agileboot.domain.collaboration.record.enumtype;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Getter
|
||||
public enum CollaborationOptionEnum {
|
||||
|
||||
COOPERATION_PLATFORM("cooperationPlatform", "合作平台",
|
||||
new String[]{"小红书", "得物", "抖音", "淘宝", "京东", "微博", "B站", "其他"}),
|
||||
|
||||
RETAINED_METHOD("retainedMethod", "留存方式",
|
||||
new String[]{"寄拍", "送拍", "置换", "无需寄样"}),
|
||||
|
||||
COOPERATED_METHOD("cooperatedMethod", "合作方式",
|
||||
new String[]{"水下", "蒲公英"}),
|
||||
|
||||
PURCHASE_METHOD("purchaseMethod", "购入方式",
|
||||
new String[]{"拍单", "商家寄出"}),
|
||||
|
||||
PURCHASE_PLATFORM("purchasePlatform", "购入平台",
|
||||
new String[]{"淘宝", "小红书", "京东", "抖音"}),
|
||||
|
||||
EXPENDITURE_PURPOSE("expenditurePurpose", "支出用途",
|
||||
new String[]{"快递费用", "返点", "蒲公英扣税费用"}),
|
||||
|
||||
SETTLEMENT_METHOD("settlementMethod", "结款方式",
|
||||
new String[]{"微信", "支付宝", "蒲公英", "京灵平台"}),
|
||||
|
||||
SETTLEMENT_PURPOSE("settlementPurpose", "结款用途",
|
||||
new String[]{"稿费", "快递费用", "拍单费用", "蒲公英扣税费用"});
|
||||
|
||||
private final String type;
|
||||
private final String label;
|
||||
private final String[] values;
|
||||
|
||||
CollaborationOptionEnum(String type, String label, String[] values) {
|
||||
this.type = type;
|
||||
this.label = label;
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.agileboot.domain.collaboration.record.enumtype;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Getter
|
||||
public enum SettlementStatusEnum {
|
||||
|
||||
NONE("NONE", "无结款项"),
|
||||
|
||||
SETTLED("SETTLED", "已结"),
|
||||
|
||||
UNSETTLED("UNSETTLED", "未结"),
|
||||
|
||||
PARTIAL("PARTIAL", "未结清");
|
||||
|
||||
private final String value;
|
||||
private final String label;
|
||||
|
||||
SettlementStatusEnum(String value, String label) {
|
||||
this.value = value;
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
package com.agileboot.domain.collaboration.record.model;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.agileboot.common.exception.ApiException;
|
||||
import com.agileboot.common.exception.error.ErrorCode;
|
||||
import com.agileboot.domain.collaboration.record.command.AddCollaborationRecordCommand;
|
||||
import com.agileboot.domain.collaboration.record.command.UpdateCollaborationRecordCommand;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordEntity;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordService;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
public class CollaborationRecordModel extends CollaborationRecordEntity {
|
||||
|
||||
private CollaborationRecordService recordService;
|
||||
|
||||
public CollaborationRecordModel(CollaborationRecordService recordService) {
|
||||
this.recordService = recordService;
|
||||
}
|
||||
|
||||
public CollaborationRecordModel(CollaborationRecordEntity entity, CollaborationRecordService recordService) {
|
||||
if (entity != null) {
|
||||
BeanUtil.copyProperties(entity, this);
|
||||
}
|
||||
this.recordService = recordService;
|
||||
}
|
||||
|
||||
public void loadFromAddCommand(AddCollaborationRecordCommand command) {
|
||||
if (command == null) {
|
||||
return;
|
||||
}
|
||||
BeanUtil.copyProperties(command, this, "recordId");
|
||||
loadDefaultValues();
|
||||
}
|
||||
|
||||
public void loadFromUpdateCommand(UpdateCollaborationRecordCommand command) {
|
||||
if (command == null) {
|
||||
return;
|
||||
}
|
||||
loadFromAddCommand(command);
|
||||
}
|
||||
|
||||
public void checkRequiredFields() {
|
||||
if (StrUtil.isBlank(getBrand())) {
|
||||
throw new ApiException(ErrorCode.FAILED);
|
||||
}
|
||||
if (StrUtil.isBlank(getGoods())) {
|
||||
throw new ApiException(ErrorCode.FAILED);
|
||||
}
|
||||
}
|
||||
|
||||
public void saveRecord() {
|
||||
recordService.save(this);
|
||||
}
|
||||
|
||||
public void updateRecord() {
|
||||
recordService.updateById(this);
|
||||
}
|
||||
|
||||
private void loadDefaultValues() {
|
||||
if (getImageReturnNum() == null) {
|
||||
setImageReturnNum(1);
|
||||
}
|
||||
if (StrUtil.isBlank(getRetainedMethod())) {
|
||||
setRetainedMethod("寄拍");
|
||||
}
|
||||
if (StrUtil.isBlank(getCooperatedMethod())) {
|
||||
setCooperatedMethod("水下");
|
||||
}
|
||||
if (StrUtil.isBlank(getPurchaseMethod())) {
|
||||
setPurchaseMethod("拍单");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.agileboot.domain.collaboration.record.model;
|
||||
|
||||
import com.agileboot.common.exception.ApiException;
|
||||
import com.agileboot.common.exception.error.ErrorCode.Business;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordEntity;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class CollaborationRecordModelFactory {
|
||||
|
||||
private final CollaborationRecordService recordService;
|
||||
|
||||
public CollaborationRecordModel loadById(Long recordId) {
|
||||
CollaborationRecordEntity entity = recordService.getById(recordId);
|
||||
if (entity == null) {
|
||||
throw new ApiException(Business.COMMON_OBJECT_NOT_FOUND, recordId, "合作记录");
|
||||
}
|
||||
return new CollaborationRecordModel(entity, recordService);
|
||||
}
|
||||
|
||||
public CollaborationRecordModel create() {
|
||||
return new CollaborationRecordModel(recordService);
|
||||
}
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.agileboot.domain.collaboration.record.query;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.agileboot.common.core.page.AbstractPageQuery;
|
||||
import com.agileboot.common.utils.time.DatePickUtil;
|
||||
import com.agileboot.domain.collaboration.record.db.CollaborationRecordEntity;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author codex
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class CollaborationRecordQuery extends AbstractPageQuery<CollaborationRecordEntity> {
|
||||
|
||||
private String brand;
|
||||
|
||||
private String goods;
|
||||
|
||||
private String cooperationPlatform;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date purchaseBeginTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date purchaseEndTime;
|
||||
|
||||
@Override
|
||||
public QueryWrapper<CollaborationRecordEntity> addQueryCondition() {
|
||||
QueryWrapper<CollaborationRecordEntity> queryWrapper = new QueryWrapper<CollaborationRecordEntity>()
|
||||
.like(StrUtil.isNotEmpty(brand), "brand", brand)
|
||||
.like(StrUtil.isNotEmpty(goods), "goods", goods)
|
||||
.eq(StrUtil.isNotEmpty(cooperationPlatform), "cooperation_platform", cooperationPlatform)
|
||||
.ge(purchaseBeginTime != null, "purchase_date", DatePickUtil.getBeginOfTheDay(purchaseBeginTime))
|
||||
.le(purchaseEndTime != null, "purchase_date", DatePickUtil.getEndOfTheDay(purchaseEndTime));
|
||||
|
||||
if (StrUtil.isEmpty(this.getOrderColumn())) {
|
||||
this.setOrderColumn("deadline");
|
||||
this.setOrderDirection("descending");
|
||||
}
|
||||
this.setTimeRangeColumn("deadline");
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user