· 5 years ago · May 11, 2020, 03:58 AM
1package org.jleaf.erp.pos_intgr.bo.hrms;
2
3import okhttp3.Call;
4import okhttp3.MediaType;
5import okhttp3.OkHttpClient;
6import okhttp3.Request;
7import okhttp3.RequestBody;
8import okhttp3.Response;
9import org.jleaf.core.AbstractBusinessFunction;
10import org.jleaf.core.BusinessFunction;
11import org.jleaf.core.CoreException;
12import org.jleaf.core.Dto;
13import org.jleaf.core.annotation.Info;
14import org.jleaf.core.annotation.InfoIn;
15import org.jleaf.core.annotation.InfoOut;
16import org.jleaf.erp.pos_intgr.PosIntegrationConstantsForSasa;
17import org.jleaf.erp.pos_intgr.PosIntegrationExceptionConstantsForSasa;
18import org.slf4j.Logger;
19import org.slf4j.LoggerFactory;
20import org.springframework.beans.factory.annotation.Autowired;
21import org.springframework.core.env.Environment;
22import org.springframework.stereotype.Service;
23
24/**
25 * Api Send Data Transaksi
26 *
27 * @author Gea, March 12, 2020
28 *
29 */
30// @formatter:off
31@Service
32@InfoIn({
33 @Info(name="sessionUuid", description="Session uuid", type=String.class, required=true),
34 //@Info(name="apiKey", description="Api key", type=String.class, required=false),
35 @Info(name="tenantCode", description="Tenant code", type=String.class, required=true),
36 @Info(name="datetime", description="Datetime", type=String.class, required=true),
37 @Info(name="username", description="Username", type=String.class, required=true),
38 @Info(name="docNo", description="Doc no", type=String.class, required=true),
39 @Info(name="docDate", description="Doc date", type=String.class, required=true),
40 @Info(name="nip", description="Nip", type=String.class, required=true),
41 @Info(name="perusahaan", description="Perusahaan", type=String.class, required=true),
42 @Info(name="outletCode", description="Outlet code", type=String.class, required=true),
43 @Info(name="nilaiTransaksi", description="Nilai transaksi", type=String.class, required=true)
44})
45@InfoOut({
46 @Info(name="sessionUuid", description="Session uuid", type=String.class, required=true),
47 @Info(name="requestUuid", description="Request uuid", type=String.class, required=true),
48 @Info(name="success", description="Success", type=String.class, required=false),
49 @Info(name="errorMessage", description="Error message", type=String.class, required=true),
50 @Info(name="errorCode", description="Error code", type=String.class, required=true)
51})
52//@formatter:on
53public class ApiSendDataTransaksi extends AbstractBusinessFunction implements BusinessFunction {
54
55 private Logger log = LoggerFactory.getLogger(ApiSendDataTransaksi.class);
56
57 @Autowired
58 Environment env;
59
60 @Autowired
61 OkHttpClient httpClient;
62
63 @Override
64 public Dto execute(Dto inputDto) throws Exception {
65 log.debug("INPUT DTO"+inputDto);
66
67 String baseUrl = env.getProperty("jleaf.hrms.baseUrl");
68 String url = baseUrl+"/employee-transaction";
69
70 Dto apiPayloadDto = createApiPayload(inputDto);
71
72 RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), apiPayloadDto.toString());
73 Request request = new Request.Builder().url(url).post(body).build();
74
75 log.debug("REQUEST"+request);
76
77 Call call = httpClient.newCall(request);
78 Response response = call.execute();
79 String reString = response.body().string();
80 log.debug("Response ? {}", reString);
81
82 Dto responseCallApiDto = new Dto();
83 try{
84 responseCallApiDto = new Dto (reString);
85 } catch (Exception e){
86 throw new CoreException(PosIntegrationExceptionConstantsForSasa.ERROR_CALL_API_WISER, url, "response.not.valid");
87 }
88
89 if( response.code() == 200 ){
90 if (responseCallApiDto.getBoolean("success") != true) {
91 throw new CoreException(PosIntegrationExceptionConstantsForSasa.ERROR_CALL_API_WISER, url, responseCallApiDto.get("error_message"));
92 }
93 }else {
94 log.error("RESPONSE NOT SUCCESS {}", response.code());
95 log.error("WITH MESSAGE {}", response.message());
96 throw new CoreException(PosIntegrationExceptionConstantsForSasa.ERROR_CALL_API_WISER, url, "connection.error");
97 }
98
99 Dto outputDto = responseCallApiDto;
100 return outputDto;
101
102 }
103
104 @Override
105 public String getDescription() {
106 return "Api Send Data Transaksi";
107 }
108
109 private Dto createApiPayload(Dto inputDto){
110 Dto payloadDto = new Dto();
111
112 String apiKey = env.getProperty("jleaf.hrms.apiKey", PosIntegrationConstantsForSasa.API_KEY_HRMS);
113 String tenantCode = env.getProperty("jleaf.hrms.tenantCode", PosIntegrationConstantsForSasa.TENANT_CODE);
114
115 payloadDto.put("apikey", apiKey);
116 payloadDto.put("tenant_code", tenantCode);
117
118 payloadDto.put("session_uuid", inputDto.get("sessionUuid"));
119 payloadDto.put("datetime", inputDto.get("datetime"));
120 payloadDto.put("username", inputDto.get("username"));
121 payloadDto.put("doc_no", inputDto.get("docNo"));
122 payloadDto.put("doc_date", inputDto.get("docDate"));
123 payloadDto.put("nip", inputDto.get("nip"));
124 payloadDto.put("perusahaan", inputDto.get("perusahaan"));
125 payloadDto.put("outlet_code", inputDto.get("outletCode"));
126 payloadDto.put("nilai_transaksi", inputDto.get("nilaiTransaksi"));
127
128 return payloadDto;
129 }
130}