global class PrototypeToThaw { /** * 样机申请者自动解冻 * @Author XHL * @DateTime 2020-02-26 * @param loanerId 样机借用申请Id */ public static void UserUnfreeze(String loanerId) { Map userIdViolationIdMap = new Map(); //查找样机借用申请相关的"样机用户违规信息" List ulList = [select id, Violations_User__c, Violations_reason__c from User_Violations__c where Is_effective__c = true and Violations_reason__c = '超期未归还' and Violations_Loaner__c = :loanerId]; if ( ulList.size() > 0) { for (User_Violations__c violation : ulList) { userIdViolationIdMap.put(violation.Violations_User__c, violation.Id); } } if (userIdViolationIdMap.size() > 0) { Map> userIdReasonQuantityMap = new Map>(); Map reasonQuantityMap = new Map(); //用户的"样机用户违规信息" ulList = [SELECT Id, Is_effective__c, Violations_User__c, Is_locking__c, Violations_reason__c,is_Alone__c FROM User_Violations__c WHERE Violations_User__c in :userIdViolationIdMap.keySet() AND Is_effective__c = true]; if (ulList.size() > 0) { Map upsertUserViolationsMap = new Map(); String userId = ''; for (User_Violations__c violation : ulList) { userId = violation.Violations_User__c; //判断是否与当前"样机借用申请"的"样机用户违规信息"相同 if (userIdViolationIdMap.get(userId) != violation.Id) { //不同→统计样机借用的用户其他违规信息的数量 String key = userId + ';' + violation.Id + ';' + violation.Violations_reason__c; if (!userIdReasonQuantityMap.containsKey(userId)) { reasonQuantityMap.put(key, 1); userIdReasonQuantityMap.put(userId, reasonQuantityMap); } else { if (!reasonQuantityMap.containsKey(key)) { reasonQuantityMap.put(key, 1); } else { reasonQuantityMap.put(key, reasonQuantityMap.get(key) + 1); } userIdReasonQuantityMap.put(userId, reasonQuantityMap); } } else { //相同→将当前的"样机用户违规信息"设置为无效 upsertUserViolationsMap.put(violation.Id,violation); violation.Is_effective__c = false; if (violation.Is_locking__c == true) { violation.Is_locking__c = false; violation.Violations_Stop_Date__c = Date.today(); violation.is_Alone__c = true; } } } if (userIdReasonQuantityMap.size() > 0) { List userList = [SELECT Id, ViolationsID__c FROM User WHERE Id in :userIdReasonQuantityMap.keySet()]; if (userList.size() > 0 && userList != null) { Map reasonMap = new Map(); for (User user : userList) { for (String keys : userIdReasonQuantityMap.get(user.Id).keySet()) { List keyList = keys.split(';'); //判断剩余的"样机用户违规信息"的数量是否大于或等于1 if (userIdReasonQuantityMap.get(user.Id).size() >= 1) { //判断用户的"冻结信息Id"是否与"样机借用申请"的"样机用户违规信息"相同 if (userIdViolationIdMap.get(user.Id) == user.ViolationsID__c) { user.ViolationsID__c = keyList[1]; User_Violations__c uViolations = new User_Violations__c(); uViolations.Id = keyList[1]; uViolations.Is_locking__c = true; uViolations.Locking_Start_Date__c = date.today(); upsertUserViolationsMap.put(keyList[1],uViolations); } } else { user.ViolationsID__c = null; } //统计违规类型数量 if (!reasonMap.containsKey(keyList[2]) && '超期未归还'.equals(keyList[2])) { reasonMap.put(keyList[2],1); user.Return_Timeout_Number__c = 1; } else if ('超期未归还'.equals(keyList[2])){ user.Return_Timeout_Number__c += 1; } else if (!reasonMap.containsKey(keyList[2]) && '系统自动收货'.equals(keyList[2])) { reasonMap.put(keyList[2],1); user.Automatic_Received_Number__c = 1; } else if ('系统自动收货'.equals(keyList[2])){ user.Automatic_Received_Number__c += 1; } } //2020-05-08 AddStart //当违规类型"超期未归还"不存在时,用户的"超期未归还次数"字段置为0 if ( reasonMap.size() > 0) { if (!reasonMap.containsKey('超期未归还')) { user.Return_Timeout_Number__c = 0; } } //2020-05-08 AddEnd } update userList; } } else { if (String.isNotBlank(userId)) { User user = new User(); user.Id = userId; user.Return_Timeout_Number__c = 0; user.ViolationsID__c = null; update user; } } if ( upsertUserViolationsMap.size() > 0 && upsertUserViolationsMap != null) { upsert upsertUserViolationsMap.values(); } //upsert ulList; } } } }