55import cn .cordys .aspectj .constants .LogType ;
66import cn .cordys .aspectj .context .OperationLogContext ;
77import cn .cordys .aspectj .dto .LogContextInfo ;
8+ import cn .cordys .common .dto .OptionDTO ;
89import cn .cordys .common .exception .GenericException ;
910import cn .cordys .common .pager .PageUtils ;
1011import cn .cordys .common .pager .Pager ;
12+ import cn .cordys .common .permission .Permission ;
13+ import cn .cordys .common .permission .PermissionDefinitionItem ;
1114import cn .cordys .common .response .result .CrmHttpResultCode ;
1215import cn .cordys .common .uid .IDGenerator ;
1316import cn .cordys .common .util .BeanUtils ;
1417import cn .cordys .common .util .JSON ;
1518import cn .cordys .crm .approval .constants .ApprovalFormTypeEnum ;
1619import cn .cordys .crm .approval .constants .ApprovalNodeTypeEnum ;
1720import cn .cordys .crm .approval .domain .*;
18- import cn .cordys .crm .approval .dto .response .* ;
21+ import cn .cordys .crm .approval .dto .StatusPermissionDTO ;
1922import cn .cordys .crm .approval .dto .request .*;
23+ import cn .cordys .crm .approval .dto .response .*;
2024import cn .cordys .crm .system .constants .SystemResultCode ;
2125import cn .cordys .crm .approval .log .ApprovalFlowLogDTO ;
2226import cn .cordys .crm .approval .mapper .ExtApprovalFlowMapper ;
27+ import cn .cordys .crm .system .service .RoleService ;
2328import cn .cordys .mybatis .BaseMapper ;
2429import cn .cordys .mybatis .lambda .LambdaQueryWrapper ;
2530import com .github .pagehelper .Page ;
@@ -51,6 +56,8 @@ public class ApprovalFlowService {
5156 private BaseMapper <ApprovalNodeCondition > approvalNodeConditionMapper ;
5257 @ Resource
5358 private BaseMapper <ApprovalNodeLink > approvalNodeLinkMapper ;
59+ @ Resource
60+ private RoleService roleService ;
5461
5562 /**
5663 * 分页查询审批流列表
@@ -73,11 +80,16 @@ public ApprovalFlowDetailResponse getDetail(String id, String organizationId) {
7380
7481 ApprovalFlowDetailResponse response = convertToDetailResponse (flow );
7582
83+ List <Permission > permissions = getPermissionsByFormType (flow .getFormType ());
84+
85+ // 设置对应资源的权限列表
86+ response .setPermissions (getResourcePermissions (permissions ));
87+
7688 // 查询大字段表
7789 ApprovalFlowBlob blob = approvalFlowBlobMapper .selectByPrimaryKey (id );
7890 if (blob != null ) {
7991 response .setDescription (blob .getDescription ());
80- response .setStatusPermissions (blob .getStatusPermissions ());
92+ response .setStatusPermissions (parseStatusPermissions ( response . getPermissions (), blob .getStatusPermissions () ));
8193 }
8294
8395 // 查询节点配置并构建树状结构
@@ -113,7 +125,7 @@ public ApprovalFlow add(ApprovalFlowAddRequest request, String userId, String or
113125 ApprovalFlowBlob blob = new ApprovalFlowBlob ();
114126 blob .setId (flow .getId ());
115127 blob .setDescription (request .getDescription ());
116- blob .setStatusPermissions (request .getStatusPermissions ());
128+ blob .setStatusPermissions (JSON . toJSONString ( request .getStatusPermissions () ));
117129 approvalFlowBlobMapper .insert (blob );
118130
119131 // 保存节点配置
@@ -162,7 +174,7 @@ public ApprovalFlow update(ApprovalFlowUpdateRequest request, String userId, Str
162174 ApprovalFlowBlob blob = new ApprovalFlowBlob ();
163175 blob .setId (flow .getId ());
164176 blob .setDescription (request .getDescription ());
165- blob .setStatusPermissions (request .getStatusPermissions ());
177+ blob .setStatusPermissions (JSON . toJSONString ( request .getStatusPermissions () ));
166178 approvalFlowBlobMapper .updateById (blob );
167179
168180 // 删除原有节点配置并重新保存
@@ -487,4 +499,84 @@ private ApprovalFlowLogDTO buildModifiedLogDTO(ApprovalFlowUpdateRequest request
487499 logDTO .setDescription (request .getDescription ());
488500 return logDTO ;
489501 }
502+
503+ /**
504+ * 获取对应资源的权限列表
505+ */
506+ private List <OptionDTO > getResourcePermissions (List <Permission > permissions ) {
507+ return permissions .stream ()
508+ .map (p -> new OptionDTO (p .getId (), p .getName ()))
509+ .collect (Collectors .toList ());
510+ }
511+
512+ private List <Permission > getPermissionsByFormType (String formType ) {
513+ List <PermissionDefinitionItem > permissionSetting = roleService .getPermissionSetting ();
514+ String permissionId = ApprovalFormTypeEnum .valueOf (formType ).getPermissionId ();
515+ List <Permission > permissions = findPermissionsByPermissionId (permissionSetting , permissionId );
516+ if (permissions == null ) {
517+ return List .of ();
518+ }
519+ return permissions ;
520+ }
521+
522+ /**
523+ * 解析状态权限配置
524+ */
525+ private List <StatusPermissionDTO > parseStatusPermissions (List <OptionDTO > permissions , String statusPermissions ) {
526+ if (StringUtils .isBlank (statusPermissions )) {
527+ return null ;
528+ }
529+ // 解析已保存的状态权限配置
530+ List <StatusPermissionDTO > savedPermissions = JSON .parseArray (statusPermissions , StatusPermissionDTO .class );
531+
532+ // 获取所有审批状态
533+ Set <String > approvalStatuses = savedPermissions .stream ()
534+ .map (StatusPermissionDTO ::getApprovalStatus )
535+ .collect (Collectors .toSet ());
536+
537+ // 构建已保存权限的映射:(审批状态, 权限ID) -> StatusPermissionDTO
538+ Map <String , StatusPermissionDTO > savedPermissionMap = savedPermissions .stream ()
539+ .collect (Collectors .toMap (
540+ p -> p .getApprovalStatus () + ":" + p .getPermission (),
541+ p -> p ));
542+
543+ // 更新权限名称并补充缺失的权限
544+ List <StatusPermissionDTO > updatedPermissions = new ArrayList <>();
545+ for (String approvalStatus : approvalStatuses ) {
546+ for (OptionDTO permission : permissions ) {
547+ String key = approvalStatus + ":" + permission .getId ();
548+ StatusPermissionDTO item = savedPermissionMap .get (key );
549+ if (item != null ) {
550+ // 更新权限名称
551+ item .setEnabled (true );
552+ updatedPermissions .add (item );
553+ } else {
554+ // 添加缺失的权限,默认不启用
555+ StatusPermissionDTO newItem = new StatusPermissionDTO ();
556+ newItem .setApprovalStatus (approvalStatus );
557+ newItem .setPermission (permission .getId ());
558+ newItem .setEnabled (false );
559+ updatedPermissions .add (newItem );
560+ }
561+ }
562+ }
563+
564+ return updatedPermissions ;
565+ }
566+
567+ /**
568+ * 根据权限ID查找对应的权限列表
569+ */
570+ private List <Permission > findPermissionsByPermissionId (List <PermissionDefinitionItem > permissionSetting , String permissionId ) {
571+ for (PermissionDefinitionItem module : permissionSetting ) {
572+ if (module .getChildren () != null ) {
573+ for (PermissionDefinitionItem resource : module .getChildren ()) {
574+ if (resource .getId ().equals (permissionId )) {
575+ return resource .getPermissions ();
576+ }
577+ }
578+ }
579+ }
580+ return null ;
581+ }
490582}
0 commit comments