Explorar el Código

fix:处理被转移权限用户,解除用户客户分配时,错误删除自己客户分配权限的问题。

dongbw hace 7 años
padre
commit
db0f27f6c7

+ 2 - 1
src/main/java/com/uas/platform/b2b/model/Distribute.java

@@ -13,7 +13,8 @@ import java.io.Serializable;
 @Entity
 @Table(name = "purc$distribute", indexes =
         {@Index(name = "purc$distribute_vdid_IDX", columnList = "pd_vdid"),
-                @Index(name = "purc$distribute_useruu_IDX", columnList = "pd_useruu")
+                @Index(name = "purc$distribute_useruu_IDX", columnList = "pd_useruu"),
+                @Index(name = "purc$distribute_leaderuu_IDX", columnList = "pd_leaderuu")
 })
 public class Distribute implements Serializable {
 	

+ 53 - 48
src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java

@@ -1,26 +1,11 @@
 package com.uas.platform.b2b.service.impl;
 
 import com.uas.message.mail.service.MailService;
-import com.uas.platform.b2b.dao.DistributeDao;
-import com.uas.platform.b2b.dao.EnterpriseDao;
-import com.uas.platform.b2b.dao.RoleDao;
-import com.uas.platform.b2b.dao.UserDao;
-import com.uas.platform.b2b.dao.VendorDao;
-import com.uas.platform.b2b.model.Distribute;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.Role;
-import com.uas.platform.b2b.model.SearchFilter;
-import com.uas.platform.b2b.model.User;
-import com.uas.platform.b2b.model.UserInfo;
-import com.uas.platform.b2b.model.Vendor;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.service.VendorService;
-import com.uas.platform.b2b.support.MessageConf;
-import com.uas.platform.b2b.support.SPageUtils;
-import com.uas.platform.b2b.support.SendMailService;
-import com.uas.platform.b2b.support.SystemSession;
-import com.uas.platform.b2b.support.TokenService;
-import com.uas.platform.b2b.support.UsageBufferedLogger;
+import com.uas.platform.b2b.support.*;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.SystemException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
@@ -41,14 +26,7 @@ import org.springframework.util.StringUtils;
 
 import javax.servlet.http.HttpServletRequest;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author US50
@@ -852,34 +830,61 @@ public class UserServiceImpl implements UserService {
 	public boolean addUserToVendor(Long custUU, List<User> users) {
 		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());
 		if (!CollectionUtils.isEmpty(users)) {
+		    List<Distribute> saveList = new ArrayList<>();
+            List<Distribute> deleteList = new ArrayList<>();
 			for (User u : users) {
-				Distribute distribute = new Distribute();
-				List<Distribute> butes = distributeDao.findByUserUUAndVendorId(u.getUserUU(), vendors.get(0).getId());
-				if (u.getDistribute()) {
-					if (CollectionUtils.isEmpty(butes)) {
-						distribute.setUserUU(u.getUserUU());
-						distribute.setVendorId(vendors.get(0).getId());
-						distribute.setLeaderUU(SystemSession.getUser().getUserUU());
-						distributeDao.save(distribute);
-					}
-				} else {
-					if (!CollectionUtils.isEmpty(butes)) {
-						List<Distribute> deleteList = new ArrayList<>();
-						// 删除时,同时删除其绑定权限的其他用户
-						List<Distribute> distributes = distributeDao.findByVendorIdAndLeaderUU(vendors.get(0).getId(), u.getUserUU());
-						if (!CollectionUtils.isEmpty(distributes)) {
-							deleteList.addAll(distributes);
-						}
-						deleteList.add(butes.get(0));
-                        distributeDao.delete(deleteList);
-					}
-				}
-			}
+			    if (null != u.getUserUU()) {
+                    Distribute distribute = new Distribute();
+                    List<Distribute> butes = distributeDao.findByUserUUAndVendorId(u.getUserUU(), vendors.get(0).getId());
+                    if (u.getDistribute()) {
+                        if (CollectionUtils.isEmpty(butes)) {
+                            distribute.setUserUU(u.getUserUU());
+                            distribute.setVendorId(vendors.get(0).getId());
+                            distribute.setLeaderUU(SystemSession.getUser().getUserUU());
+                            saveList.add(distribute);
+                        }
+                    } else {
+                        // 删除当前用户的权限子节点用户
+                        if (!CollectionUtils.isEmpty(butes)) {
+                            // 当前用户
+                            deleteList.add(butes.get(0));
+                            Long vendorId = vendors.get(0).getId();
+                            Long userUU = u.getUserUU();
+                            deleteList = deleteChildrenDistributes(vendorId, userUU, deleteList);
+                            // 防止出现作为参数的用户之间存在权限父子节点关系,导致重复查询,所以每次递归完成,执行一次删除
+                            distributeDao.delete(deleteList);
+                        }
+                    }
+                }
+            }
+            distributeDao.save(saveList);
 			return true;
 		}
 		return false;
 	}
 
+    /**
+     * 删除用户的所有关联节点
+     * @param vendorId 供应商关系id
+     * @param userUU  用户UU
+     * @param deleteList 删除idList
+     * @return
+     */
+	private List<Distribute> deleteChildrenDistributes(Long vendorId, Long userUU, List<Distribute> deleteList) {
+        // 删除时,同时删除被其分配权限的其他用户
+        List<Distribute> distributes = distributeDao.findByVendorIdAndLeaderUU(vendorId, userUU);
+        if (!CollectionUtils.isEmpty(distributes)) {
+            deleteList.addAll(distributes);
+            // 被删除用户拥有转移权限时,继续删除其子节点
+            for (Distribute distribute : distributes) {
+                if (null != distribute.getIsTransfer() && 1 == distribute.getIsTransfer()) {
+                    return deleteChildrenDistributes(vendorId, distribute.getUserUU(), deleteList);
+                }
+            }
+        }
+        return deleteList;
+    }
+
 	@Override
 	public boolean transferUserToVendor(Long custUU, List<User> users) {
 		List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(custUU, SystemSession.getUser().getEnterprise().getUu());

+ 2 - 2
src/main/webapp/resources/js/index/app.js

@@ -2484,7 +2484,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             $scope.distribute = distribute;
             $scope.havedone = angular.copy($scope.distribute);
             $scope.loading = false;
-        })
+        });
 
         var checkStatus = function (userinfos) {
             var distribute = [];
@@ -2495,7 +2495,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             });
             $scope.distribute = distribute;
             $scope.isChanged = !angular.equals($scope.havedone, $scope.distribute);
-        }
+        };
         $scope.isChanged = false;
         $scope.isChangedAll = false;
         $scope.changes = [];