Skip to content

Commit 6cc54ef

Browse files
WangXu10fit2-zhao
authored andcommitted
feat: contract api
1 parent f82ab47 commit 6cc54ef

File tree

17 files changed

+613
-55
lines changed

17 files changed

+613
-55
lines changed

backend/crm/src/main/java/cn/cordys/common/constants/FormKey.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ public enum FormKey {
4848
/**
4949
* 报价单
5050
*/
51-
QUOTATION("quotation");
51+
QUOTATION("quotation"),
52+
/**
53+
* 合同
54+
*/
55+
CONTRACT("contract");
5256

5357
private final String key;
5458

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cn.cordys.crm.contract.constants;
2+
3+
/**
4+
* 合同归档状态
5+
*/
6+
public enum ArchivedStatus {
7+
8+
/**
9+
* 已归档
10+
*/
11+
ARCHIVED,
12+
13+
/**
14+
* 未归档
15+
*/
16+
UN_ARCHIVED,
17+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cn.cordys.crm.contract.constants;
2+
3+
4+
/**
5+
* 合同状态
6+
*/
7+
public enum ContractStatus {
8+
9+
10+
/**
11+
* 已签署
12+
*/
13+
SIGNED,
14+
15+
/**
16+
* 履行中
17+
*/
18+
IN_PROGRESS,
19+
20+
/**
21+
* 履行完毕
22+
*/
23+
COMPLETED_PERFORMANCE,
24+
25+
/**
26+
* 作废
27+
*/
28+
VOID,
29+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package cn.cordys.crm.contract.constants;
2+
3+
4+
/**
5+
* 合同审核状态
6+
*/
7+
public enum ReviewStatus {
8+
9+
/**
10+
* 审核中
11+
*/
12+
UNDER_REVIEW,
13+
14+
/**
15+
* 通过
16+
*/
17+
PASS,
18+
19+
/**
20+
* 不通过
21+
*/
22+
NOT_PASSED,
23+
24+
25+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package cn.cordys.crm.contract.controller;
2+
3+
import cn.cordys.common.constants.FormKey;
4+
import cn.cordys.common.constants.PermissionConstants;
5+
import cn.cordys.context.OrganizationContext;
6+
import cn.cordys.crm.contract.domain.Contract;
7+
import cn.cordys.crm.contract.dto.request.ContractAddRequest;
8+
import cn.cordys.crm.contract.dto.request.ContractUpdateRequest;
9+
import cn.cordys.crm.contract.service.ContractService;
10+
import cn.cordys.crm.opportunity.domain.Opportunity;
11+
import cn.cordys.crm.opportunity.dto.request.OpportunityAddRequest;
12+
import cn.cordys.crm.opportunity.dto.request.OpportunityUpdateRequest;
13+
import cn.cordys.crm.system.dto.response.ModuleFormConfigDTO;
14+
import cn.cordys.crm.system.service.ModuleFormCacheService;
15+
import cn.cordys.security.SessionUtils;
16+
import io.swagger.v3.oas.annotations.Operation;
17+
import io.swagger.v3.oas.annotations.tags.Tag;
18+
import jakarta.annotation.Resource;
19+
import org.apache.shiro.authz.annotation.RequiresPermissions;
20+
import org.springframework.validation.annotation.Validated;
21+
import org.springframework.web.bind.annotation.*;
22+
23+
24+
@Tag(name = "合同")
25+
@RestController
26+
@RequestMapping("/contract")
27+
public class ContractController {
28+
@Resource
29+
private ModuleFormCacheService moduleFormCacheService;
30+
@Resource
31+
private ContractService contractService;
32+
33+
34+
@GetMapping("/module/form")
35+
@RequiresPermissions(PermissionConstants.CONTRACT_READ)
36+
@Operation(summary = "获取表单配置")
37+
public ModuleFormConfigDTO getModuleFormConfig() {
38+
return moduleFormCacheService.getBusinessFormConfig(FormKey.CONTRACT.getKey(), OrganizationContext.getOrganizationId());
39+
}
40+
41+
42+
@PostMapping("/add")
43+
@RequiresPermissions(PermissionConstants.CONTRACT_ADD)
44+
@Operation(summary = "创建")
45+
public Contract add(@Validated @RequestBody ContractAddRequest request) {
46+
return contractService.add(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
47+
}
48+
49+
@PostMapping("/update")
50+
@RequiresPermissions(PermissionConstants.CONTRACT_UPDATE)
51+
@Operation(summary = "更新")
52+
public Contract update(@Validated @RequestBody ContractUpdateRequest request) {
53+
return contractService.update(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
54+
}
55+
56+
57+
@GetMapping("/delete/{id}")
58+
@RequiresPermissions(PermissionConstants.CONTRACT_DELETE)
59+
@Operation(summary = "删除")
60+
public void delete(@PathVariable("id") String id) {
61+
contractService.delete(id);
62+
}
63+
}

backend/crm/src/main/java/cn/cordys/crm/contract/domain/Contract.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public class Contract extends BaseModel {
3232
@Schema(description = "归档状态")
3333
private String archivedStatus;
3434

35-
@Schema(description = "作废状态")
36-
private String voidedStatus;
35+
@Schema(description = "合同状态")
36+
private String status;
3737

3838
@Schema(description = "组织id")
3939
private String organizationId;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package cn.cordys.crm.contract.domain;
2+
3+
import jakarta.persistence.Table;
4+
5+
6+
import io.swagger.v3.oas.annotations.media.Schema;
7+
import lombok.Data;
8+
9+
import java.io.Serial;
10+
import java.io.Serializable;
11+
12+
13+
@Data
14+
@Table(name = "contract_snapshot")
15+
public class ContractSnapshot implements Serializable {
16+
17+
@Serial
18+
private static final long serialVersionUID = 1L;
19+
20+
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
21+
private String id;
22+
23+
@Schema(description = "合同id")
24+
private String contractId;
25+
26+
@Schema(description = "表单属性快照")
27+
private String contractProp;
28+
29+
@Schema(description = "表单值快照")
30+
private String contractValue;
31+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package cn.cordys.crm.contract.dto.request;
2+
3+
import cn.cordys.common.domain.BaseModuleFieldValue;
4+
import cn.cordys.crm.system.dto.response.ModuleFormConfigDTO;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import jakarta.validation.constraints.NotBlank;
7+
import jakarta.validation.constraints.Size;
8+
import lombok.Data;
9+
10+
import java.math.BigDecimal;
11+
import java.util.List;
12+
13+
@Data
14+
public class ContractAddRequest {
15+
16+
@NotBlank
17+
@Size(max = 255)
18+
@Schema(description = "合同名称", requiredMode = Schema.RequiredMode.REQUIRED)
19+
private String name;
20+
21+
@Size(max = 32)
22+
@Schema(description = "客户id", requiredMode = Schema.RequiredMode.REQUIRED)
23+
private String customerId;
24+
25+
@Schema(description = "金额")
26+
private BigDecimal amount;
27+
28+
@Size(max = 32)
29+
@Schema(description = "负责人", requiredMode = Schema.RequiredMode.REQUIRED)
30+
private String owner;
31+
32+
@Schema(description = "自定义字段")
33+
private List<BaseModuleFieldValue> moduleFields;
34+
35+
@Schema(description = "表单配置")
36+
private ModuleFormConfigDTO moduleFormConfigDTO;
37+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cn.cordys.crm.contract.dto.request;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotBlank;
5+
import jakarta.validation.constraints.Size;
6+
import lombok.Data;
7+
8+
@Data
9+
public class ContractUpdateRequest extends ContractAddRequest {
10+
11+
@NotBlank
12+
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED)
13+
@Size(max = 32)
14+
private String id;
15+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package cn.cordys.crm.contract.service;
2+
3+
import cn.cordys.common.constants.FormKey;
4+
import cn.cordys.common.service.BaseResourceFieldService;
5+
import cn.cordys.crm.contract.domain.ContractField;
6+
import cn.cordys.crm.contract.domain.ContractFieldBlob;
7+
import cn.cordys.mybatis.BaseMapper;
8+
import jakarta.annotation.Resource;
9+
import org.springframework.stereotype.Service;
10+
import org.springframework.transaction.annotation.Transactional;
11+
12+
@Service
13+
@Transactional(rollbackFor = Exception.class)
14+
public class ContractFieldService extends BaseResourceFieldService<ContractField, ContractFieldBlob> {
15+
16+
@Resource
17+
private BaseMapper<ContractField> contractFieldMapper;
18+
@Resource
19+
private BaseMapper<ContractFieldBlob> contractFieldBlobMapper;
20+
21+
@Override
22+
protected String getFormKey() {
23+
return FormKey.CONTRACT.getKey();
24+
}
25+
26+
@Override
27+
protected BaseMapper<ContractField> getResourceFieldMapper() {
28+
return contractFieldMapper;
29+
}
30+
31+
@Override
32+
protected BaseMapper<ContractFieldBlob> getResourceFieldBlobMapper() {
33+
return contractFieldBlobMapper;
34+
}
35+
}

0 commit comments

Comments
 (0)