liuyn
2024-03-11 a87f1c3df03078814ee97ad0c8ac200a232419e9
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
public with sharing class otherLookUp {
    
    @AuraEnabled(cacheable=true)
    public static List<Record> lookUp(String searchTerm, String objName, String filter,String visitPlaceId) {
        system.debug('lookUp');
        system.debug('objName:'+objName);
        system.debug('searchTerm:'+searchTerm);
        system.debug('filter:'+filter);
        system.debug('visitPlaceId:'+visitPlaceId);
        User loginUser = [Select Id, State_Hospital__c, Job_Category__c from User where Id =: UserInfo.getUserId()];
        String reporterState = loginUser.State_Hospital__c;
 
        List<Record> recordList = new List<Record>();
        String qureyObjName = 'Account';
        if(objName == 'SearchVisitorPlace_Campaign') {
            qureyObjName = 'Campaign';
        } 
        if(objName == 'Opportunity') {
            qureyObjName = 'Opportunity';
        }
        
        if(objName == 'MaintenanceContract') {
            qureyObjName = 'Maintenance_Contract__c';
        } 
        if(objName == 'InfrastructureProject') {
            qureyObjName = 'Infrastructure_Project__c';
        }
 
        String searchQuery = 'select Id,name from '+qureyObjName+' where Id <> null ';
        //zzm 2023-11-24 日报询价加科室和状态 start
        if(objName == 'Opportunity') {
            searchQuery = 'Select Id, Opportunity_No__c, name, Department_Name__c,Field1__c,Close_Forecasted_Date__c, Competitor__c, Wholesale_Price__c from  '+qureyObjName+' where Id <> null '; 
        }
        //zzm 2023-11-24 日报询价加科室和状态 end
        
        
        searchQuery += nameCondition(searchTerm,qureyObjName);
        // if(String.isNotBlank(searchTerm)){
        //     if(qureyObjName=='Account'){
        //         searchQuery += 'and Name_for_Daily_Report_text__c like \'%'+ searchTerm + '%\'';
 
        //     } else{
        //         searchQuery += 'and Name LIKE \'%' + searchTerm + '%\'';
        //     }
        // }
        //访问场所
        if(objName=='SearchVisitorPlace') {
            searchQuery += ' and  Hospital__r.RecordType.DeveloperName = \'HP\' and Is_Active__c <> \'無効\' order by Name ';
        }
        // String queryString = 'select Id, Name from Account where' + nameCondition + ' Is_Active_Formula__c = \'有效\' and RecordType.DeveloperName = \'Agency\' order by Name limit 51';
        if(objName=='SearchVisitorPlace_Sales') {
            searchQuery += ' and RecordType.DeveloperName = \'Agency\' and Is_Active_Formula__c = \'有效\' order by Name ';
        }
        // [select Id, Name from Account where Is_Active__c != '無効' and Name like :nameCondition and RecordType.DeveloperName = 'Training'  order by Name limit 30]
        if(objName=='SearchVisitorPlace_Training') {
            searchQuery += ' and RecordType.DeveloperName = \'Training\' and Is_Active__c <> \'無効\' order by Name ';
        }
        // if(objName=='SearchVisitorPlace_Campaign' || objName == 'InfrastructureProject') {
        //     searchQuery += '  id !=null ';
        // }
        if(objName == 'InfrastructureProject') {
            Account a = null;
            try {
                a = [select Id, Hospital__c from Account where Id=:visitPlaceId];
            }
            catch ( System.QueryException qe) {
                return recordList;
            }
            
            
            searchQuery += '  and OCSM_Hospital__c=\'' + a.Hospital__c + '\' ';
        }
 
        //新建联系人,只能选择该医院下的所有的三级科室--没做出来
        // if(objName == 'ContactDepartment') {
        //     List<RecordType>  recordTypes= [select Id from RecordType where  SobjectType = 'Account' and DeveloperName in ('Department_GYN','Department_OTH','Department_BF','Department_GI','Department_GS','Department_URO','Department_ENT','Department')];
        //     List<String> recordTypeIds = new List<String>();
        //     for(RecordType rt : recordTypes) {
        //         recordTypeIds.add(rt.Id);
        //     }
        //     Account a = null;
        //     a = [select Id, Hospital__c from Account where Id=:visitPlaceId];
        //     searchQuery += '  and OCSM_Hospital__c=\'' + a.Hospital__c + '\'  and RecordTypeId in :recordTypeIds';
        // }
        Date toDate = Date.today();
        Date lastDate = toDate.addYears(-1);
        // String  today = String.valueOf(Date.newInstance(toDate.year(), toDate.month(), toDate.day())).substring(0,10);
        // String  lastDate = String.valueOf(Date.newInstance(toDate.year()-1, toDate.month(), toDate.day())).substring(0,10);
        // Date lastDate = Date.newInstance(toDate.year()-1, toDate.month(), toDate.day());
           
        //询价单独处理
 
        if(objName=='Opportunity') { 
            if(String.isNotBlank(visitPlaceId)){
                searchQuery += ControllerUtil.getOppSearchSQOLforLwc(visitPlaceId,toDate,lastDate);
 
                // searchQuery = ControllerUtil.getOppSearchSQOL(visitPlaceId,'  Id <> null  ' +nameCondition(searchTerm,qureyObjName));
            }
        }
        searchQuery += ' limit 31'; 
        
            
        system.debug('searchQuery:'+searchQuery);
        List<Sobject> queryResult = new List<sObject>();
        //维修合同单独处理
        if(objName == 'MaintenanceContract') {
            queryResult = searchMc(searchTerm,visitPlaceId);
        } else  if(objName == 'Opportunity') {
            queryResult = ControllerUtil.getOpportunitys(searchQuery);
        }else{
            queryResult = Database.query(searchQuery);
        }
        
        Map<Id, Account> accMap = new Map<Id, Account>();
        if(queryResult.size()>0){
            for(Sobject sobj : queryResult){
                Record r = new Record();
                r.Id = sobj.id;
                r.Name = (String)sobj.get('name');
                //zzm 2023-11-24 日报询价加科室和状态 start
                if(objName=='Opportunity') {
                    // r.Department_Name = (String)sobj.get('Department_Name__c');
                    // r.Competitor = (String)sobj.get('Competitor__c');
                     r.Name += '(' +(String)sobj.get('Department_Name__c') +')' +(String)sobj.get('Competitor__c');
 
                }
                //zzm 2023-11-24 日报询价加科室和状态 end
                recordList.add(r);
                accMap.put(sobj.id,null);
            }
        }
        if(objName=='SearchVisitorPlace'){
            if(recordList.size()<=50){
                // さらに省単位のデータを検索
                String nameCondition = nameCondition(searchTerm,'Account');
                // Map<Id, Account> stateDepartmentMap = selectDepartByHospitalState(' and Name_for_Daily_Report_text__c like \'%'+ searchTerm + '%\'  ', 31 - recordList.size());
                Map<Id, Account> stateDepartmentMap = ControllerUtil.selectDepartByHospitalState(' Id<>null ' +nameCondition + ' and ',reporterState, 51 - recordList.size());
                if (stateDepartmentMap.size() > 0) {
                    for (Id accId : stateDepartmentMap.keySet()) {
                        if (!accMap.containsKey(accId)) {
                            Record r = new Record();
                            r.Id = accId;
                            r.Name = stateDepartmentMap.get(accId).Name;
                            recordList.add(r);
                        }
                    }
                }
            }
        }
        system.debug(recordList);
        return recordList;
    }
    public static String nameCondition(String searchTerm,String qureyObjName) {
        String nameCondition = '';
        List<String> qwords = new List<String>();
        List<String> qwordstmp = searchTerm.split(' ');
        for (String qword : qwordstmp) {
            if (String.isBlank(qword) == false) {
                qwords.add('%' + String.escapeSingleQuotes(qword.replaceAll('%', '')) + '%');
                if(qureyObjName=='Account'){
                    nameCondition += ' and  Name_for_Daily_Report_text__c like \'' + qwords[qwords.size() - 1] + '\'  ';
 
                } else{
                    nameCondition += ' and Name like \'' + qwords[qwords.size() - 1] + '\'  ';
                }
            }
        }
        return nameCondition;
    }
   
    public class Record {
        @AuraEnabled public String Id;
        @AuraEnabled public String Name;
    }
    /*public static Map<Id, Account> selectDepartByHospitalState(String nameCondition, Integer limitCnt) {
        User loginUser = [Select Id, State_Hospital__c, Job_Category__c from User where Id =: UserInfo.getUserId()];
        String reporterState = loginUser.State_Hospital__c;
        String queryString = 'select Id, Name, Department_Class__c, Department_Class__r.Name, Hospital__c, Hospital__r.Name from Account where Id<>null ' + nameCondition + 'and Hospital__r.RecordType.DeveloperName = \'HP\' and Is_Active__c <> \'無効\'';
        if (loginUser.Job_Category__c == 'GI市场'
                || loginUser.Job_Category__c == 'SP市场'
                || loginUser.Job_Category__c == '服务本部'
                || loginUser.Job_Category__c == '培训'
        ) {
            // 全国範囲、なにもしない
        } else {
            // 省単位の条件追加
            system.debug('selectDepartByHospitalState reporterState=' + reporterState);
            queryString += ' and Parent.Parent.State_Master__r.Name = :reporterState';
        }
        queryString += ' order by Name limit '+limitCnt;
        system.debug('selectDepartByHospitalState queryString=' + queryString);
        return new Map<Id, Account>((List<Account>) Database.query(queryString));
    }*/
 
    //检索询价
    /*public static String getOppSearchSQOL(String visitorPlaceId,Date today,Date lastDate) {
        Account a = new Account();
        List<Account> accountList = [select Id, Hospital__c, Agent_Ref__c, Parent.Parent.RecordType.DeveloperName, Parent.RecordType.DeveloperName, RecordType.DeveloperName from Account where Id=:visitorPlaceId];
        if(accountList.size()>0) {
            a = accountList[0];
        }
        
        
        // 検索
        String queryString = ' ';
        // String temptoday = Date.today().format().replace('/', '-');
        // String tempLastDate = Date.today().addDays(-365).format().replace('/', '-');
        // Date today = Datetime.now().date();
        // Date lastDate = Datetime.now().date().addyears(-1);
        
        // 病院
        if (a.Parent.Parent.RecordType.DeveloperName == 'HP') {
 
 
 
        // queryString = 'Select Id, Opportunity_No__c, Name, toLabel(StageName), Department_Name__c,Field1__c,Close_Forecasted_Date__c, Competitor__c, Wholesale_Price__c from Opportunity where' + nameCondition 
            // + ' Account.Hospital__c=\'' + a.Hospital__c + '\' and ( StageName IN (\'引合\',\'注残\') or ( StageName = \'出荷\' and Shipping_Finished_Day__c > '+tempLastDate+' and Shipping_Finished_Day__c <= '+temptoday+' and CALENDAR_YEAR(Created_Day__c) != 2012 )) and RecordTypeId in (\'01210000000QekK\',\'012100000006KMeAAM\') order by Name, Opportunity_No__c, Department_Name__c limit 31';
 
 
            queryString +=  '  and Account.Hospital__c=\'' + a.Hospital__c + '\' and ( StageName IN (\'引合\',\'注残\') or ( StageName = \'出荷\' and Shipping_Finished_Day__c > :lastDate and Shipping_Finished_Day__c <= :today and CALENDAR_YEAR(Created_Day__c) != 2012 )) and RecordTypeId in (\'01210000000QekK\',\'012100000006KMeAAM\') order by Name, Opportunity_No__c, Department_Name__c '; 
            // queryString +=  ' and   Account.Hospital__c=\'' + a.Hospital__c + '\' and ( StageName IN (\'引合\',\'注残\') or ( StageName = \'出荷\' and CALENDAR_YEAR(Created_Day__c) <> 2012 )) and RecordTypeId in (\'01210000000QekK\',\'012100000006KMeAAM\') order by Name, Opportunity_No__c, Department_Name__c '; 
        }
        // 販売店
        else if (a.RecordType.DeveloperName == 'Agency') {
            queryString +=  ' and Account.Hospital__c=\'' + a.Hospital__c + '\' and ( StageName IN (\'引合\',\'注残\') or ( StageName = \'出荷\' and Shipping_Finished_Day__c > :lastDate and Shipping_Finished_Day__c <= :today and CALENDAR_YEAR(Created_Day__c) != 2012 )) and RecordTypeId in (\'01210000000QekK\',\'012100000006KMeAAM\') order by Name, Opportunity_No__c, Department_Name__c';
            // queryString +=  ' and  Account.Hospital__c=\'' + a.Hospital__c + '\' and ( StageName IN (\'引合\',\'注残\') or ( StageName = \'出荷\'  CALENDAR_YEAR(Created_Day__c) <> 2012 )) and RecordTypeId in (\'01210000000QekK\',\'012100000006KMeAAM\') order by Name, Opportunity_No__c, Department_Name__c ';
           
        }
        return queryString;
    }*/
 
 
 
    //检索合同
    
    public static  List<Maintenance_Contract__c> searchMc(String query, String visitorPlaceId) {
        // Xin_SearchOpportunityと同じにする
        List<String> qwords = new List<String>();
        List<String> qwordstmp = query.split(' ');
        String nameCondition = '';
        for (String qword : qwordstmp) {
            if (String.isBlank(qword) == false) {
                qwords.add('%' + String.escapeSingleQuotes(qword.replaceAll('%', '')) + '%');
                nameCondition += ' and Name like \'' + qwords[qwords.size() - 1] + '\' ';
            }
        }
        
        Account a = null;
        try {
            a = [select Hospital__c from Account where Id=:visitorPlaceId];
        }
        catch ( System.QueryException qe) {
            return new List<Maintenance_Contract__c>();
        }
        
        system.debug('cond=' + nameCondition);
        
        String queryString = 'select Id, Name,Management_Code__c,Status__c from Maintenance_Contract__c where Id<>null ' + nameCondition + '  and Hospital__c=\'' + a.Hospital__c + '\' AND Status__c in (\'契約\',\'契約満了\')  order by Status__c ASC limit 31';
        System.debug(queryString);
        return (List<Maintenance_Contract__c>) Database.query(queryString);
    }
 
    
 
}