高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
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
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
public with sharing   class OpportunityService{
 
  private static String opp_search_field = ' Id, Name, Account_Name_F__c, OwnerId, Hospital__c, Opportunity_No__c, Opportunity_stage__c, StageName__c, Bidding_Project_Name_Bid__c, Department_Class__r.RecordTypeId ';
  
  // 查询已保存的数据  
  //noStr 询价的ID
  //daccountID 客户的ID 现在没用
  // IdStr 招投标的ID
  //hospital 医院的ID
  @AuraEnabled
  public  static string GetNormalProductDataSearch(String noStr,String accountId,String IdStr,String hospital,String[] hospitalArr, String departments) {
 
    String sql = 'select ';
    // sql += CommonUtils.GetSqlToPorps(Opportunity.SObjectType);
    sql += opp_search_field;
    sql += ' from Opportunity';
    // 多对多关系 去掉未关联的判断 start
    // sql += ' where Bidding_Project_Name_Bid__c = null ';
    sql += ' where id != null ';
    // 多对多关系 去掉未关联的判断 end
    if(noStr != null && noStr != '' && noStr != ' ')
    {
      sql += ' and Opportunity_No__c = :noStr';
    }
 
    if(hospitalArr!= null && hospitalArr.size() > 0)
    {
      sql += ' and Hospital__c in :hospitalArr';
    }
    if(hospital != null && hospital != '' && hospital != ' ')
    {
      sql += ' and Hospital__c = :hospital';
    }
 
    // String paremt1 = '012100000006KMe';
    // String paremt2 = '01210000000QekK';
    // String paremt3 = '引合';
    // sql += ' and (recordtypeid = :paremt1 or recordtypeid = :paremt2) and stagename = :paremt3 ';
    sql += ' and recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '+
        // 这里有修改,别给盖了
    ' and ( (SAP_Send_OK__c = true and SAP_Send_OK_Date__c   = LAST_N_DAYS:183  ) '+
        'or( stagename = \'敗戦\' and Final_Contract_Proceeded_Date__c = LAST_N_DAYS:183  ) or stagename = \'引合\' ) ';
      // 这里有修改,别给盖了
    // 20210914 战略科室修改
    //if (departments != null && String.isNotBlank(departments)) {
    //  String[] depart_types = departments.split(';');
    //  if (depart_types != null && depart_types.size() > 0 && depart_types.size() < 6) {
    //    sql += ' and Department_Class__r.RecordTypeId in :depart_types ';
    //  }
    //}
    // 20210914 战略科室修改
    // 去掉已经关联的招标
    if(IdStr != null && String.isNotBlank(IdStr)) {
      sql += ' and id not in (select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr) ';
    }
    sql += '  limit 50';
    List<Opportunity> arrays = Database.query(sql);
    return JSON.serialize(arrays); 
    
  }
 
 // 查询未保存的数据  
  // IdStr 招投标的ID
  //hospital 医院的ID
  @AuraEnabled
  public  static string GetNormalProductDataNotSave(String IdStr,String[] hospital, String departments) {
 
    //TODU
    // QueryWrapper query = new QueryWrapper(Tender_information__c.SObjectType);
    // query.eq('Id',IdStr);
 
    // 招标-询价关联修改 20210813 start
    String sql = 'select ';
    // sql += CommonUtils.GetSqlToPorps(Opportunity.SObjectType);
    sql += opp_search_field;
    sql += ' from Opportunity';
    // 多对多关系 去掉未关联的判断 start
    // sql += ' where Bidding_Project_Name_Bid__c = null ';
    // 多对多关系 去掉未关联的判断 end
    // String paremt1 = '012100000006KMe';
    // String paremt2 = '01210000000QekK';
    // String paremt3 = '引合';
    // sql += ' and (recordtypeid = :paremt1 or recordtypeid = :paremt2) and stagename = \'引合\' ';
    // sql += ' and recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '+
    sql += ' where recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '+
        // 这里有修改,别给盖了
    ' and ( (SAP_Send_OK__c = true and SAP_Send_OK_Date__c   = LAST_N_DAYS:183 ) '+
        'or( stagename = \'敗戦\' and Final_Contract_Proceeded_Date__c = LAST_N_DAYS:183  ) or stagename = \'引合\' ) ';
      // 这里有修改,别给盖了
    // 去掉已经关联的招标
    if(IdStr != null && String.isNotBlank(IdStr)) {
      sql += ' and id not in (select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr) ';
    }
    // 20210914 战略科室修改
    //if (departments != null && String.isNotBlank(departments)) {
    //  String[] depart_types = departments.split(';');
    //  if (depart_types != null && depart_types.size() > 0 && depart_types.size() < 6) {
    //    sql += ' and Department_Class__r.RecordTypeId in :depart_types ';
    //  }
    //}
    // 20210914 战略科室修改
    if(hospital!= null && hospital.size() > 0)
    {
      sql += ' and Hospital__c in :hospital';
    }
    sql += '  limit 50';
    List<Opportunity> arrays = Database.query(sql);
 
    // Tender_information__c
    return JSON.serialize(arrays); 
    
    // 招标-询价关联修改 20210813 end
  }
 
 
 
 
 
  //查询已保存
  // 只有一个 当前招投标
  //IdStr 招投标的ID
  @AuraEnabled
  public  static string GetNormalProductDataIsSave(String IdStr) {
    // 招标-询价关联修改 20210817 start
    // 查询方式或许应该优化一下
    // QueryWrapper query = new QueryWrapper(Opportunity.SObjectType);
    // query.eq('Bidding_Project_Name_Bid__c', IdStr);
    // List<Opportunity> arrays = DataBasePlus.listPlus(query);
    List<Id> oppIds = new List<Id>();
    List<Tender_Opportunity_Link__c> links = [select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr];
    if (links != null && links.size() > 0) {
      for (Tender_Opportunity_Link__c link : links) {
        oppIds.add(link.Opportunity__c);
      }
    }
    // String sql = 'select ' + CommonUtils.GetSqlToPorps(Opportunity.SObjectType) + ' from Opportunity ';
    String sql = 'select ' + opp_search_field + ' from Opportunity ';
    sql += 'where Id in :oppIds';
    List<Opportunity> arrays = Database.query(sql);
    // 招标-询价关联修改 20210817 end
    return JSON.serialize(arrays); 
  }
   
 
 
  
  //保存
   //JsonSelected JSON格式的招投标的已选择数据集合
   //JsonNotSelected JSON格式的招投标的未选择数据集合
   // BiddingId 对应的招标项目名(招投标)
   // flag  修改 招投标项目 关联询价时间的一个标识
  @AuraEnabled
  public  static string SaveData(String JsonSelected,String JsonNotSelected,String BiddingId,Boolean flag) {
 
    try{
      // 新增招标-询价关联关系表,去掉更新询价上的最新招标信息 20210813 start
      // if(JsonSelected != null &&  JsonSelected != '' && JsonSelected !='[]')
      // {
      //   List<Opportunity> SelectedList = (List<Opportunity>)JSON.deserialize(JsonSelected,List<Opportunity>.class);
 
      //   for(Opportunity item :SelectedList){
      //     item.Bidding_Project_Name_Bid__c = null;
      //   }
       
 
              
      // Database.update(SelectedList,false);
      // }
      // string OppOwnerId = '';
      // if(JsonNotSelected != null &&  JsonNotSelected != '' && JsonNotSelected !='[]')
      // {
      //   List<Opportunity> NotSelectedList = (List<Opportunity>)JSON.deserialize(JsonNotSelected,List<Opportunity>.class);
 
      //   for(Opportunity item :NotSelectedList){
      //     item.Bidding_Project_Name_Bid__c = BiddingId;
      //   }
      //   OppOwnerId = NotSelectedList[0].ownerId;
      //   Database.update(NotSelectedList);
      // }
      // if(flag != null && flag == true)
      // {
      //   string tenProp = CommonUtils.GetSqlToPorps(Tender_information__c.SObjectType);
      //   String sql = 'select '+tenProp+' from Tender_information__c  where Id = :BiddingId';
      //   List<Tender_information__c> arrays = Database.query(sql);
      //   arrays[0].RelateOppTime__c = datetime.now();
      //   //if( arrays[0].IsBid__c == null && OppOwnerId != '')
      //   //{
      //   //  arrays[0].ownerId = OppOwnerId;
      //   //}
      //   if (arrays != null && arrays.size() >0 &&
      //   (arrays[0].ownerId == '00510000005sEEM' || arrays[0].ownerId == '00510000000gmxH')
      //   && OppOwnerId != '')
      //   {
      //     arrays[0].ownerId = OppOwnerId;
      //   }
      //   Database.update(arrays);
      // }
      // 新增招标-询价关联关系表,去掉更新询价上的最新招标信息 20210813 end
 
      // 招标-询价关联修改 20210813 start
      // 查询招标
      // string tenProp = CommonUtils.GetSqlToPorps(Tender_information__c.SObjectType);
      // String sql = 'select '+tenProp+' from Tender_information__c  where Id = :BiddingId';
      String sql = 'SELECT ';
      sql += 'Id, ';
      sql += 'NotBidApprovalStatus__c, ';
      sql += 'IsBid__c, ';
      sql += 'TenderBeginTime__c, ';
      sql += 'InfoType__c, ';
      sql += 'OwnerId, ';
      sql += 'IsReactionOpp__c, ';
      sql += 'IsRelateProject__c, ';
      sql += 'RelateOppTime__c, ';
      sql += 'irrelevantReasons__c, ';
      sql += 'irrelevantReasonOther__c, ';
      sql += 'Hospital__c, ';
      sql += 'Hospital1__c, ';
      sql += 'Hospital2__c, ';
      sql += 'Hospital3__c, ';
      sql += 'Hospital4__c ';
      sql += 'FROM Tender_information__c  WHERE Id = :BiddingId';
      List<Tender_information__c> arrays = Database.query(sql);
      Tender_information__c tender = arrays[0];
      
      // 不应标申请中的时候 调回申请修改 20210907 start
      if (tender.NotBidApprovalStatus__c != null && tender.NotBidApprovalStatus__c == '申请中') {
        List<Approval.ProcessWorkitemRequest> requests = new List<Approval.ProcessWorkitemRequest> ();
        ProcessInstance pi = [Select Id, SubmittedById from ProcessInstance where TargetObjectId = :tender.Id and Status = 'Pending' order by CreatedDate desc limit 1];
        if (pi != null) {
          for(ProcessInstanceWorkItem wi : [Select Id from ProcessInstanceWorkItem where ProcessInstanceId = :pi.Id]){
            Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest();
            if (pi.SubmittedById.equals(Userinfo.getUserId())) {
              req2.setAction('Removed');
              tender.NotBidApprovalStatus__c = '草案中';
            } else {
              req2.setAction('Reject');
              tender.NotBidApprovalStatus__c = '驳回';
              tender.IsBid__c = null;
            }
            req2.setWorkitemId(wi.Id);
            requests.add(req2);
          }
          system.debug('==requests.size()=='+requests.size());
          if (requests.size() > 0) {
            Approval.ProcessResult[] processResults = null;
            processResults = Approval.process(requests, true);
            system.debug('==调回结果=='+processResults);
          }
        }
      }
      // 不应标申请中的时候 调回申请修改 20210907 end
      
      // 合并已关联和未关联列表
      List<Opportunity> all_selected_list = new List<Opportunity>();
      if (JsonSelected != null &&  JsonSelected != '' && JsonSelected !='[]') {
        all_selected_list.addAll((List<Opportunity>)JSON.deserialize(JsonSelected,List<Opportunity>.class));
      }
      if (JsonNotSelected != null &&  JsonNotSelected != '' && JsonNotSelected !='[]') {
        all_selected_list.addAll((List<Opportunity>)JSON.deserialize(JsonNotSelected,List<Opportunity>.class));
      }
      // 招标所有人是否要修改flag
      // boolean owner_change = false;
      // 先删除旧的link
      // 跳过trigger标记
      // 没有删除逻辑
      StaticParameter.EscapeTOLinkTrigger = true;
      // List<Tender_Opportunity_Link__c> del_links = [select Id from Tender_Opportunity_Link__c where Tender_information__c = :BiddingId];
      // if (del_links != null && del_links.size() > 0) {
      //   delete del_links;
      // }
      // 更新询价
      List<Opportunity> upd_opps = new List<Opportunity>();
      List<String> owners = new List<String>();
      // 插入link
      if (all_selected_list.size() > 0) {
        // 设置招标所有人
        // OppOwnerId = all_selected_list[0].ownerId;
        // 初始化参数
        List<Tender_Opportunity_Link__c> add_list = new List<Tender_Opportunity_Link__c>();
        // 当询价关联过结果阶段的招标项目,再被另一个结果阶段的招标项目关联时,会因为数据被锁定而报错
        // 在此处重新检索询价
        List<String> oppIds = new List<String>();
        for (Opportunity opp : all_selected_list) {
          oppIds.add(opp.Id);
          owners.add(opp.ownerId);
          // 新建link
          Tender_Opportunity_Link__c link = new Tender_Opportunity_Link__c();
          link.Tender_information__c = tender.Id;
          link.Opportunity__c = opp.Id;
          link.Tender_Opportunity_Uniq__c = String.valueOf(tender.Id) + String.valueOf(opp.Id);
 
          add_list.add(link);
        }
        // 插入link
        if (add_list.size() > 0) {
          insert add_list;
        }
        // 恢复trigger标记
        StaticParameter.EscapeTOLinkTrigger = false;
 
        if (oppIds.size() > 0) {
          List<Opportunity> wait_upd_opps = [select id, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c from Opportunity where id in :oppIds and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'];
          if (wait_upd_opps != null && wait_upd_opps.size() > 0) {
            for (Opportunity opp : wait_upd_opps) {
              if (opp.Bidding_Project_Name_Bid__c == null || String.isBlank(opp.Bidding_Project_Name_Bid__c)) {
                opp.Bidding_Project_Name_Bid__c = tender.Id;
                opp.TenderBeginDate_Text__c = tender.TenderBeginTime__c;
                upd_opps.add(opp);
              } else if (tender.InfoType__c == '3:结果' && opp.Bidding_Project_Name_Bid__r.InfoType__c != '3:结果') {
                opp.Bidding_Project_Name_Bid__c = tender.Id;
                upd_opps.add(opp);
              }
            }
          }
        }
        // 更新询价上的招标项目
        if (upd_opps.size() > 0) {
          update upd_opps;
        }
      }
 
      // 查询招标数量并更新
      List<Tender_Opportunity_Link__c> tenderLinks = [SELECT id, Tender_information__c, Opportunity__c, Opportunity__r.Hospital__c, Opportunity__r.OwnerId FROM Tender_Opportunity_Link__c WHERE Tender_information__c = :tender.Id];
      List<String> oppOwnerInLinks = new List<String>();
      for (Tender_Opportunity_Link__c link : tenderLinks) {
        oppOwnerInLinks.add(link.Opportunity__r.OwnerId);
      }
      // 更新招标上的所有人
      if (tender.OwnerId == null || '00510000000gmxH'.equals(tender.OwnerId) || (oppOwnerInLinks.size() > 0 && !oppOwnerInLinks.contains(tender.OwnerId))) {
        tender.ownerId = owners.size() > 0 ? owners.get(0) : '00510000000gmxH';
      }
      // 反映询价状态
      tender.IsReactionOpp__c = true;
      // 查询招标数量并更新
      //List<Tender_Opportunity_Link__c> tenderLinks = [SELECT id, Tender_information__c, Opportunity__c, Opportunity__r.Hospital__c FROM Tender_Opportunity_Link__c WHERE Tender_information__c = :tender.Id];
      tender.OpportunityNum__c = tenderLinks != null ? tenderLinks.size() : 0;
      // 关联询价时间和是否相关状态
      if (tender.IsRelateProject__c != '是') {
        tender.IsRelateProject__c = '是';
        tender.RelateOppTime__c = datetime.now();
        tender.irrelevantReasons__c = null;
        tender.irrelevantReasonOther__c = null;
      }
      // 更新关联医院
      if (tenderLinks != null && tenderLinks.size() > 0) {
        // 招标项目的医院
        Map<String,String> fiveHospitalMap = new Map<String,String>();
        fiveHospitalMap.put('Hospital__c', tender.Hospital__c);
        fiveHospitalMap.put('Hospital1__c', tender.Hospital1__c);
        fiveHospitalMap.put('Hospital2__c', tender.Hospital2__c);
        fiveHospitalMap.put('Hospital3__c', tender.Hospital3__c);
        fiveHospitalMap.put('Hospital4__c', tender.Hospital4__c);
        for(Integer i = 0; i<tenderLinks.size();i++) {
          //当招投标项目的五个医院赋值完成后不再赋值
          Boolean HospitalIsNeedBreak = false;
          for(String ApiName :fiveHospitalMap.keySet()){
              HospitalIsNeedBreak = fiveHospitalMap.get(ApiName)==null?false:true;
          }
          
          if(HospitalIsNeedBreak){
              break;
          }
 
          //给招投标项目的5个医院设值
          for(String ApiName : fiveHospitalMap.keySet()){
            String tempTenderHospId = fiveHospitalMap.get(ApiName)==null?'':fiveHospitalMap.get(ApiName);
            String oppHospId = tenderLinks.get(i).Opportunity__r.Hospital__c; 
            //如果招标项目已经有该医院就判断下一个询价的医院
            if(tempTenderHospId.contains(oppHospId)){
                break;
            }
 
            //医院为空,赋值医院(赋值之后进行赋值下一个医院)
            if(String.isBlank( fiveHospitalMap.get(ApiName) )){
                fiveHospitalMap.put(ApiName,oppHospId);
                break;
            }
          }
        }
        tender.Hospital__c = fiveHospitalMap.get('Hospital__c');
        tender.Hospital1__c = fiveHospitalMap.get('Hospital1__c');
        tender.Hospital2__c = fiveHospitalMap.get('Hospital2__c');
        tender.Hospital3__c = fiveHospitalMap.get('Hospital3__c');
        tender.Hospital4__c = fiveHospitalMap.get('Hospital4__c');
      }
      update tender;
      // 招标-询价关联修改 20210813 end
      return '成功'; 
    }catch (Exception ex) {
      return  ex.getMessage();
    }
 
  }
}