李彤
2022-12-30 582ab5d403a12e7ac0834dac34bc087dbbea8dc7
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
public with sharing class ImprovedForecastTimeController {
    @AuraEnabled
    public static  String GetOppinformationcData(String ParamIdStr) {
        //获取数据
        List<InquiryPredictsDateChange__c> ipdList = Database.query('Select Id,Name,Opportunity__c,Date_InAdvance_Delay__c,CloseDate__c, CloseDate_Old__c, Close_Forecasted_Date__c,Predicted_date_ChangeReason__c,Predicted_Date_Status__c,Close_Forecasted_Date_Old__c, Manager_name__c,Opportunity__r.Sales_manager_departmentID__c,Opportunity__r.Sales_assistant_ID__c,Sales_assistant_name__c From InquiryPredictsDateChange__c Where Opportunity__c = : ParamIdStr order by CreatedDate desc');
        if(ipdList.size() > 0){
            OppInfo opp = new OppInfo(ipdList[0]);
            return JSON.serialize(opp);
        }else{
            Opportunity arrays = Database.query('Select Id,Name,Opportunity_No__c,CloseDate, Close_Forecasted_Date__c,Sales_manager_departmentID__c,Sales_assistant_ID__c From Opportunity Where id = : ParamIdStr');
            System.debug('lt123arrays'+arrays);
            OppInfo opp = new OppInfo(arrays);
            return JSON.serialize(opp);
        }
    }
 
    public class OppInfo {
        // 询价Id
        public String Opportunity { get; set; }
        // 询价编码
        public String Opportunity_No { get; set; }
        // 询价预测表Id
        public String datechangeId { get; set; }
        // 预测KPI当前值
        public Date Close_Forecasted_Date_Old { get; set; }
        // 预测KPI目标值
        public Date Close_Forecasted_Date { get; set; }
        
        // 20220830  “担当”字段弃用  只用“kpi”字段判断
        // // 预测担当当前值
        // public Date Close_Forecasted_Assume_Date_Old { get; set; }
        // // 预测担当目标值
        // public Date Close_Forecasted_Assume_Date { get; set; }
 
        // 预测发货当前值
        public Date CloseDate_Old { get; set; }
        // 预测发货目标值
        public Date CloseDate { get; set; }
        // 提前/延后
        public String Date_InAdvance_Delay { get; set; }
        // 原因
        public String Predicted_date_ChangeReason { get; set; }
        // cl6经理
        public String Manager_name { get; set; }
        // 助理
        public String Sales_assistant_name { get; set; }
        // 状态
        public String Predicted_Date_Status { get; set; }
 
        // 增加一个字段 用来做判断用的
        public Date Close_Forecasted_Check { get; set; }
    
        // 从询价上获得数据
        public OppInfo(Opportunity opp) {
            Opportunity = opp.Id;
            Opportunity_No = opp.Opportunity_No__c;
            Close_Forecasted_Date_Old = opp.Close_Forecasted_Date__c;
            // Close_Forecasted_Assume_Date_Old = opp.Close_Forecasted_Assume_Date__c;
            CloseDate_Old = opp.CloseDate;
            Manager_name = opp.Sales_manager_departmentID__c;
            //Sales_assistant_ID__c替换Sales_assistant_name_text__c
            Sales_assistant_name = opp.Sales_assistant_ID__c;
 
            //20220830  “担当”字段弃用  只用“kpi”字段判断
            //Close_Forecasted_Check = opp.Close_Forecasted_Assume_Date__c != null ? opp.Close_Forecasted_Assume_Date__c : opp.Close_Forecasted_Date__c;
            Close_Forecasted_Check = opp.Close_Forecasted_Date__c;
        }
        // 从询价预测上获得数据
        public OppInfo(InquiryPredictsDateChange__c datechange) {
            // 把当前已有的值都设置上
            Opportunity = datechange.Opportunity__c;
            Opportunity_No = datechange.Name;
            datechangeId = datechange.Id;
 
            Close_Forecasted_Date_Old = datechange.Predicted_Date_Status__c == '已批准' ? datechange.Close_Forecasted_Date__c : datechange.Close_Forecasted_Date_Old__c;
            // Close_Forecasted_Assume_Date_Old = datechange.Predicted_Date_Status__c == '已批准' ? datechange.Close_Forecasted_Assume_Date__c : datechange.Close_Forecasted_Assume_Date_Old__c;
            Close_Forecasted_Date = datechange.Close_Forecasted_Date__c;
            // Close_Forecasted_Assume_Date = datechange.Close_Forecasted_Assume_Date__c;
            CloseDate_Old = datechange.Predicted_Date_Status__c == '已批准' ? datechange.CloseDate__c : datechange.CloseDate_Old__c;
            CloseDate = datechange.CloseDate__c;
 
            if(datechange.Predicted_Date_Status__c != '已批准'){
                // Close_Forecasted_Check = datechange.Close_Forecasted_Assume_Date_Old__c != null ? datechange.Close_Forecasted_Assume_Date_Old__c : datechange.Close_Forecasted_Date_Old__c;
                Close_Forecasted_Check = datechange.Close_Forecasted_Date_Old__c;
            }else {
                // Close_Forecasted_Check = datechange.Close_Forecasted_Assume_Date__c != null ? datechange.Close_Forecasted_Assume_Date__c : datechange.Close_Forecasted_Date__c;
                Close_Forecasted_Check = datechange.Close_Forecasted_Date__c;
            }
            
            //Sales_manager_departmentID__c替换Manager_name_text__c
            Manager_name = datechange.Opportunity__r.Sales_manager_departmentID__c;
            Sales_assistant_name = datechange.Opportunity__r.Sales_assistant_ID__c;
 
            Date_InAdvance_Delay = datechange.Date_InAdvance_Delay__c;
            Predicted_date_ChangeReason = datechange.Predicted_date_ChangeReason__c;
            Predicted_Date_Status = datechange.Predicted_Date_Status__c;
        }
    }
 
    // 把页面上的数据赋值到询价预测的对象上
    private static InquiryPredictsDateChange__c mergeInfo(Map<String, Object> oppMap) {
        InquiryPredictsDateChange__c datechange = new InquiryPredictsDateChange__c();
 
        if (String.isBlank(String.valueOf(oppMap.get('Predicted_Date_Status'))) || !'已批准'.equals(String.valueOf(oppMap.get('Predicted_Date_Status')))) {
            datechange.Id = String.valueOf(oppMap.get('datechangeId'));
        } 
        if (String.isBlank(datechange.Id)){
            datechange.Opportunity__c = String.valueOf(oppMap.get('Opportunity'));
            datechange.Name = String.valueOf(oppMap.get('Opportunity_No'));
        }
        // 当前的日期都从对象上获取 
        if(oppMap.get('Close_Forecasted_Date_Old') != null){
            datechange.Close_Forecasted_Date_Old__c = Date.valueOf(String.valueOf(oppMap.get('Close_Forecasted_Date_Old')));
        }
        // if(oppMap.get('Close_Forecasted_Assume_Date_Old') != null){
        //     datechange.Close_Forecasted_Assume_Date_Old__c = Date.valueOf(String.valueOf(oppMap.get('Close_Forecasted_Assume_Date_Old')));
        // }
        if(oppMap.get('CloseDate_Old') != null){
            datechange.CloseDate_Old__c = Date.valueOf(String.valueOf(oppMap.get('CloseDate_Old')));
        }
        // 新的日期全跟预测担当有关
        datechange.Close_Forecasted_Date__c = Date.valueOf(String.valueOf(oppMap.get('Close_Forecasted_Date')));
        // datechange.Close_Forecasted_Assume_Date__c = Date.valueOf(String.valueOf(oppMap.get('Close_Forecasted_Assume_Date')));
        datechange.CloseDate__c = Date.valueOf(String.valueOf(oppMap.get('CloseDate')));
 
        datechange.Manager_name__c = String.valueOf(oppMap.get('Manager_name'));
        datechange.Sales_assistant_name__c = String.valueOf(oppMap.get('Sales_assistant_name'));
 
        datechange.Date_InAdvance_Delay__c = String.valueOf(oppMap.get('Date_InAdvance_Delay'));
        datechange.Predicted_date_ChangeReason__c = String.valueOf(oppMap.get('Predicted_date_ChangeReason'));
 
        // 状态设置为已提交
        datechange.Predicted_Date_Status__c = '已提交';
 
        return datechange;
    }
 
    @AuraEnabled
    public static String getReason(){
        return System.Label.DateChangeReason;
    }
 
    //保存数据  JSONData 是 json格式的值 
    @AuraEnabled
    public  static string  SaveData(String JsonData){
        try{
            // InquiryPredictsDateChange__c ipd = (InquiryPredictsDateChange__c)JSON.deserialize(JsonData,InquiryPredictsDateChange__c.class);
            // OppInfo opp = (OppInfo)JSON.deserializeUntyped(JsonData);
            Map<String, Object> oppMap = (Map<String, Object>)JSON.deserializeUntyped(JsonData);
            System.debug('lt123JsonData'+JsonData);
            InquiryPredictsDateChange__c ipd = mergeInfo(oppMap);
            // ipd.Predicted_Date_Status__c = '已提交';
            upsert ipd;
        }catch(Exception ex)
        {
            return  ex.getLineNumber()+'  行错误 :   '+ex.getMessage();
        }
        return  '成功';
    }
}