Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ public enum FormKey {
/**
* 报价单
*/
QUOTATION("quotation");
QUOTATION("quotation"),
/**
* 合同
*/
CONTRACT("contract");

private final String key;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package cn.cordys.crm.contract.constants;

/**
* 合同归档状态
*/
public enum ArchivedStatus {

/**
* 已归档
*/
ARCHIVED,

/**
* 未归档
*/
UN_ARCHIVED,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package cn.cordys.crm.contract.constants;


/**
* 合同状态
*/
public enum ContractStatus {


/**
* 已签署
*/
SIGNED,

/**
* 履行中
*/
IN_PROGRESS,

/**
* 履行完毕
*/
COMPLETED_PERFORMANCE,

/**
* 作废
*/
VOID,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package cn.cordys.crm.contract.constants;


/**
* 合同审核状态
*/
public enum ReviewStatus {

/**
* 审核中
*/
UNDER_REVIEW,

/**
* 通过
*/
PASS,

/**
* 不通过
*/
NOT_PASSED,


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package cn.cordys.crm.contract.controller;

import cn.cordys.common.constants.FormKey;
import cn.cordys.common.constants.PermissionConstants;
import cn.cordys.context.OrganizationContext;
import cn.cordys.crm.contract.domain.Contract;
import cn.cordys.crm.contract.dto.request.ContractAddRequest;
import cn.cordys.crm.contract.dto.request.ContractUpdateRequest;
import cn.cordys.crm.contract.service.ContractService;
import cn.cordys.crm.opportunity.domain.Opportunity;
import cn.cordys.crm.opportunity.dto.request.OpportunityAddRequest;
import cn.cordys.crm.opportunity.dto.request.OpportunityUpdateRequest;
import cn.cordys.crm.system.dto.response.ModuleFormConfigDTO;
import cn.cordys.crm.system.service.ModuleFormCacheService;
import cn.cordys.security.SessionUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;


@Tag(name = "合同")
@RestController
@RequestMapping("/contract")
public class ContractController {
@Resource
private ModuleFormCacheService moduleFormCacheService;
@Resource
private ContractService contractService;


@GetMapping("/module/form")
@RequiresPermissions(PermissionConstants.CONTRACT_READ)
@Operation(summary = "获取表单配置")
public ModuleFormConfigDTO getModuleFormConfig() {
return moduleFormCacheService.getBusinessFormConfig(FormKey.CONTRACT.getKey(), OrganizationContext.getOrganizationId());
}


@PostMapping("/add")
@RequiresPermissions(PermissionConstants.CONTRACT_ADD)
@Operation(summary = "创建")
public Contract add(@Validated @RequestBody ContractAddRequest request) {
return contractService.add(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
}

@PostMapping("/update")
@RequiresPermissions(PermissionConstants.CONTRACT_UPDATE)
@Operation(summary = "更新")
public Contract update(@Validated @RequestBody ContractUpdateRequest request) {
return contractService.update(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
}


@GetMapping("/delete/{id}")
@RequiresPermissions(PermissionConstants.CONTRACT_DELETE)
@Operation(summary = "删除")
public void delete(@PathVariable("id") String id) {
contractService.delete(id);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ public class Contract extends BaseModel {
@Schema(description = "归档状态")
private String archivedStatus;

@Schema(description = "作废状态")
private String voidedStatus;
@Schema(description = "合同状态")
private String status;

@Schema(description = "组织id")
private String organizationId;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package cn.cordys.crm.contract.domain;

import jakarta.persistence.Table;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;


@Data
@Table(name = "contract_snapshot")
public class ContractSnapshot implements Serializable {

@Serial
private static final long serialVersionUID = 1L;

@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String id;

@Schema(description = "合同id")
private String contractId;

@Schema(description = "表单属性快照")
private String contractProp;

@Schema(description = "表单值快照")
private String contractValue;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package cn.cordys.crm.contract.dto.request;

import cn.cordys.common.domain.BaseModuleFieldValue;
import cn.cordys.crm.system.dto.response.ModuleFormConfigDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

@Data
public class ContractAddRequest {

@NotBlank
@Size(max = 255)
@Schema(description = "合同名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String name;

@Size(max = 32)
@Schema(description = "客户id", requiredMode = Schema.RequiredMode.REQUIRED)
private String customerId;

@Schema(description = "金额")
private BigDecimal amount;

@Size(max = 32)
@Schema(description = "负责人", requiredMode = Schema.RequiredMode.REQUIRED)
private String owner;

@Schema(description = "自定义字段")
private List<BaseModuleFieldValue> moduleFields;

@Schema(description = "表单配置")
private ModuleFormConfigDTO moduleFormConfigDTO;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package cn.cordys.crm.contract.dto.request;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;

@Data
public class ContractUpdateRequest extends ContractAddRequest {

@NotBlank
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED)
@Size(max = 32)
private String id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package cn.cordys.crm.contract.service;

import cn.cordys.common.constants.FormKey;
import cn.cordys.common.service.BaseResourceFieldService;
import cn.cordys.crm.contract.domain.ContractField;
import cn.cordys.crm.contract.domain.ContractFieldBlob;
import cn.cordys.mybatis.BaseMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(rollbackFor = Exception.class)
public class ContractFieldService extends BaseResourceFieldService<ContractField, ContractFieldBlob> {

@Resource
private BaseMapper<ContractField> contractFieldMapper;
@Resource
private BaseMapper<ContractFieldBlob> contractFieldBlobMapper;

@Override
protected String getFormKey() {
return FormKey.CONTRACT.getKey();
}

@Override
protected BaseMapper<ContractField> getResourceFieldMapper() {
return contractFieldMapper;
}

@Override
protected BaseMapper<ContractFieldBlob> getResourceFieldBlobMapper() {
return contractFieldBlobMapper;
}
}
Loading
Loading