高章伟
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
global with sharing class AL_MobileApp_Controller {
    
    global class AL_MobileApp_Controller_Exception extends Exception {}
     
    // 写真登録用 リクエスト
    global class CreateAttachmentRequest {
        @TestVisible global String id { get; private set;} // 登録先の土地のオブジェクトID
        @TestVisible global String photo { get; private set;}   // 写真 Base64エンコードされてる
        @TestVisible global String fname { get; private set;}   // 写真 ファイル名
        @TestVisible global String contentType { get; private set;}   // 写真 C/T
        @TestVisible global String photoType { get; private set;}   // 写真種類
        @TestVisible global Long ms { get; private set;}   //アップした日時(ms)
        @TestVisible global String latitude { get; public set; }        // 緯度
        @TestVisible global String longitude { get; public set; }       // 経度
    }
    
    // 写真登録用 レスポンス
    global class CreateAttachmentResponse {
        global String id { get; private set;}         // 登録した添付ファイル=写真のオブジェクトID
        global Boolean success { get; public set; }
        global String  error { get; public set; }
        public CreateAttachmentResponse() {
            this.id = null;
            this.success = false;
            this.error = null;
        }
    }
    
    @RemoteAction
    global static CreateAttachmentResponse createAttachment(CreateAttachmentRequest req) {
        System.debug('received data: '+req);
        Datetime dt = DateTime.newInstance(req.ms);
        CreateAttachmentResponse res = new CreateAttachmentResponse();
        Savepoint sp = Database.setSavepoint();
        try {
            String objectName = SchemaGlobalDescribe.findObjectNameFromRecordIdPrefix(req.id); //idをもとに、オブジェクトAPI名を取得
            SObject s = Database.query('SELECT Name, ' + req.photoType+'_date1__c FROM ' + objectName + ' where id=\''+req.id+'\'');
            s.put('photoType__c' , req.photoType); //写真種類をセットする
            s.put(req.photoType+'_date__c' , dt); //写真をアップした日時をセットする
            if(s.get(req.photoType + '_date1__c') == null){ //初めてアップロード
                s.put(req.photoType+'_date1__c' , dt);
            }
            update s;
            
            String extension = req.fname.split('\\.(?=[^\\.]+$)')[1]; //拡張子
            
            ContentVersion v = new ContentVersion();
            v.versionData = EncodingUtil.base64Decode(req.photo);
            v.title = String.valueOf(s.get('Name')) + '_' + req.photoType + '_' + dt.format('yyyyMMddHHmmss')+'.'+extension;
            v.pathOnClient = '/aaaaaa.png';
            insert v;
            
            ContentVersion tmp1 = [select id,latitude__c,longitude__c,ContentDocumentId from ContentVersion where id = :v.id];
            ContentWorkspace shareWorkspace = [select id from ContentWorkspace where name = 's1_photo' limit 1];
    
            ContentWorkspaceDoc docLink = new ContentWorkspaceDoc();
            docLink.ContentDocumentId = tmp1.ContentDocumentId;
            docLink.ContentWorkspaceId = shareWorkspace.id;
            insert docLink;
            
            tmp1.latitude__c = req.latitude;
            tmp1.longitude__c = req.longitude;
            update tmp1;
            
            ContentDocumentLink cdl = new ContentDocumentLink(ContentDocumentId = tmp1.ContentDocumentId, LinkedEntityId = req.id,ShareType='V');
            insert cdl;
                 
            Event e = new Event();
            e.StartDateTime = dt;
            e.EndDateTime = dt.addMinutes(15);
            //TODO sunbridge_ga テーブル名(漢字)と req.photoType (漢字) にする可能性が高い 2016.10.20
            e.Subject = '拍摄了'+req.photoType+'的照片';
            e.WS_flg__c = false;
            if(objectName == 'Rental_Apply__c'){
                Rental_Apply__c ra = [select account__c,account__r.name from Rental_Apply__c where id=:req.id][0];
                e.Location = ra.account__r.name;
                e.whatid__c = ra.account__c;
                //e.Location = [select account__r.name from Rental_Apply__c where id=:req.id][0].account__r.name;
            } else if (objectName == 'Repair__c'){
                Repair__c rp = [select account__c,account__r.name from Repair__c where id=:req.id][0];
                e.whatid__c = rp.account__c;
                e.whatid__c = rp.account__c;
                //e.Location = [select account__r.name from Repair__c where id=:req.id][0].account__r.name;
            } else if (objectName == 'Asset'){
                Asset ast = [select account.id,account.name from Asset where id=:req.id][0];
                e.Location = ast.account.name;
                e.whatid__c = ast.account.id;
                //e.Location = [select account.name from Asset where id=:req.id][0].account.name;
            }
            insert e;
            res.id = v.id;
            res.success = true;
        }
        catch (Exception e) {
                Database.rollback(sp);
            res.success = false;
            res.error = e.getMessage();
            System.debug(Logginglevel.ERROR, e.getStackTraceString());
        }
        return res;
    }
    
}