Skip to content

Commit 37770d8

Browse files
xiaomeinvGfit2-zhao
authored andcommitted
feat: Quotation batch option
1 parent c20f319 commit 37770d8

File tree

11 files changed

+414
-108
lines changed

11 files changed

+414
-108
lines changed

backend/crm/src/main/java/cn/cordys/crm/opportunity/controller/OpportunityQuotationController.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
import cn.cordys.context.OrganizationContext;
88
import cn.cordys.crm.opportunity.domain.OpportunityQuotation;
99
import cn.cordys.crm.opportunity.dto.request.OpportunityQuotationAddRequest;
10+
import cn.cordys.crm.opportunity.dto.request.OpportunityQuotationBatchRequest;
1011
import cn.cordys.crm.opportunity.dto.request.OpportunityQuotationEditRequest;
1112
import cn.cordys.crm.opportunity.dto.request.OpportunityQuotationPageRequest;
1213
import cn.cordys.crm.opportunity.dto.response.OpportunityQuotationGetResponse;
1314
import cn.cordys.crm.opportunity.dto.response.OpportunityQuotationListResponse;
1415
import cn.cordys.crm.opportunity.service.OpportunityQuotationService;
16+
import cn.cordys.crm.system.dto.response.BatchAffectReasonResponse;
17+
import cn.cordys.crm.system.dto.response.BatchAffectResponse;
1518
import cn.cordys.crm.system.dto.response.ModuleFormConfigDTO;
1619
import cn.cordys.crm.system.service.ModuleFormCacheService;
1720
import cn.cordys.security.SessionUtils;
@@ -75,6 +78,7 @@ public OpportunityQuotationGetResponse get(@PathVariable("id") String id) {
7578

7679
//撤销审批
7780
@GetMapping("/revoke/{id}")
81+
@Operation(summary = "撤销报价单审批")
7882
public String revoke(@PathVariable("id") String id) {
7983
return opportunityQuotationService.revoke(id, SessionUtils.getUserId());
8084
}
@@ -87,6 +91,15 @@ public String voidQuotation(@PathVariable("id") String id) {
8791
return opportunityQuotationService.voidQuotation(id, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
8892
}
8993

94+
//批量作废报价单
95+
@PostMapping("/batch/voided")
96+
@RequiresPermissions(PermissionConstants.OPPORTUNITY_QUOTATION_UPDATE)
97+
@Operation(summary = "批量作废报价单")
98+
public BatchAffectReasonResponse batchVoidQuotation(@RequestBody OpportunityQuotationBatchRequest request) {
99+
return opportunityQuotationService.batchVoidQuotation(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
100+
}
101+
102+
90103
//审批
91104
@PostMapping("/approve")
92105
@RequiresPermissions(PermissionConstants.OPPORTUNITY_QUOTATION_APPROVAL)
@@ -95,6 +108,14 @@ public String approve(@RequestBody OpportunityQuotationEditRequest request) {
95108
return opportunityQuotationService.approve(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
96109
}
97110

111+
//批量审批
112+
@PostMapping("/batch/approve")
113+
@RequiresPermissions(PermissionConstants.OPPORTUNITY_QUOTATION_APPROVAL)
114+
@Operation(summary = "批量审批报价单")
115+
public BatchAffectResponse batchApprove(@RequestBody OpportunityQuotationBatchRequest request) {
116+
return opportunityQuotationService.batchApprove(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
117+
}
118+
98119
//删除报价单
99120
@GetMapping("/delete/{id}")
100121
@RequiresPermissions(PermissionConstants.OPPORTUNITY_QUOTATION_DELETE)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package cn.cordys.crm.opportunity.dto.request;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotBlank;
5+
import jakarta.validation.constraints.NotEmpty;
6+
import lombok.Data;
7+
8+
import java.util.List;
9+
10+
@Data
11+
public class OpportunityQuotationBatchRequest {
12+
13+
@NotEmpty
14+
@Schema(description = "ID集合")
15+
private List<String> ids;
16+
17+
@NotBlank
18+
@Schema(description = "审批状态")
19+
private String approvalStatus;
20+
21+
}

backend/crm/src/main/java/cn/cordys/crm/opportunity/mapper/ExtOpportunityQuotationMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@
1111
public interface ExtOpportunityQuotationMapper {
1212

1313
List<OpportunityQuotationListResponse> list(@Param("request") OpportunityQuotationPageRequest request, @Param("orgId") String orgId);
14+
15+
void batchUpdateApprovalStatus(List<String> approvingIds, String approvalStatus, String userId, long updateTime);
1416
}

backend/crm/src/main/java/cn/cordys/crm/opportunity/mapper/ExtOpportunityQuotationMapper.xml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@
33

44
<mapper namespace="cn.cordys.crm.opportunity.mapper.ExtOpportunityQuotationMapper">
55

6+
<update id="batchUpdateApprovalStatus">
7+
update opportunity_quotation
8+
set approval_status = #{approvalStatus},
9+
update_user = #{userId},
10+
update_time = #{updateTime}
11+
where id in
12+
<foreach collection="approvingIds" item="id" index="index" open="(" close=")" separator=",">
13+
#{id}
14+
</foreach>
15+
</update>
16+
617

718
<select id="list" resultType="cn.cordys.crm.opportunity.dto.response.OpportunityQuotationListResponse">
819
select oq.id, oq.name, oq.opportunity_id, o.opportunity_name as opportunityName, oq.approval_status, oq.amount,
@@ -18,14 +29,7 @@
1829
<include refid="fieldSortJoin">
1930
<property name="sort" value="request.sort"/>
2031
</include>
21-
22-
where oq.organization_id = #{currentOrg}
23-
<if test="request.approvalStatus != null and request.approvalStatus != ''">
24-
and oq.approval_status = #{request.approvalStatus}
25-
</if>
26-
<if test="request.amount != null and request.amount != ''">
27-
and oq.amount = #{request.amount}
28-
</if>
32+
where oq.organization_id = #{orgId}
2933
<if test="request.opportunityId != null and request.opportunityId != ''">
3034
and o.id = #{request.opportunityId}
3135
</if>

backend/crm/src/main/java/cn/cordys/crm/opportunity/service/OpportunityLogService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ public List<JsonDifferenceDTO> handleLogField(List<JsonDifferenceDTO> difference
9292
differ.setNewValueName(Translator.get(differ.getNewValue().toString()));
9393
}
9494
}
95+
96+
if (Strings.CS.equals(differ.getColumn(), "approvalStatus")) {
97+
differ.setColumnName(Translator.get("log.approvalStatus"));
98+
if (differ.getOldValue() != null) {
99+
differ.setOldValueName(Translator.get("log.approvalStatus." + differ.getOldValueName().toString()));
100+
}
101+
if (differ.getNewValue() != null) {
102+
differ.setNewValueName(Translator.get("log.approvalStatus." + differ.getNewValueName().toString()));
103+
}
104+
}
95105
}
96106
return differenceDTOS;
97107
}

0 commit comments

Comments
 (0)