GWY
2022-05-21 a3460549533111815e7f73d6cef601a58031525d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
global class PrototypeToThaw {
 
    /**
     * 样机申请者自动解冻
     * @Author   XHL
     * @DateTime 2020-02-26
     * @param    loanerId   样机借用申请Id
     */
    public static void UserUnfreeze(String loanerId) {
 
        Map<String, String> userIdViolationIdMap = new Map<String, String>();
        //查找样机借用申请相关的"样机用户违规信息"
        List<User_Violations__c> 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<String, Map<String, Integer>> userIdReasonQuantityMap = new Map<String, Map<String, Integer>>();
            Map<String, Integer> reasonQuantityMap = new Map<String, Integer>();
            //用户的"样机用户违规信息"
            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<String,User_Violations__c> upsertUserViolationsMap = new Map<String,User_Violations__c>();
                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<User> userList = [SELECT Id, ViolationsID__c FROM User WHERE Id in :userIdReasonQuantityMap.keySet()];
                    if (userList.size() > 0 && userList != null) {
                        Map<String,Integer> reasonMap = new Map<String,Integer>();
                        for (User user : userList) {
                            for (String keys : userIdReasonQuantityMap.get(user.Id).keySet()) {
                                List<String> 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;
            }
 
 
        }
    }
}