Api.java
6.3 KB
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
package com.xiniunet.erp.ledger.module.screen;
import com.alibaba.citrus.service.requestcontext.buffered.BufferedRequestContext;
import com.alibaba.citrus.turbine.dataresolver.Param;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.xiniunet.erp.foundation.helper.FoundationHelper;
import com.xiniunet.erp.ledger.domain.CapitalAccountDetail;
import com.xiniunet.erp.ledger.helper.LedgerHelper;
import com.xiniunet.erp.tool.Constants;
import com.xiniunet.data.domain.Bank;
import com.xiniunet.data.request.BankGetListRequest;
import com.xiniunet.log.request.ErrorLogCreateRequest;
import com.xiniunet.data.response.BankGetListResponse;
import com.xiniunet.framework.base.BaseFindResponse;
import com.xiniunet.framework.base.BaseResponse;
import com.xiniunet.framework.exception.ErrorType;
import com.xiniunet.framework.log.Log;
import com.xiniunet.framework.log.LogUtil;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.framework.util.auth.LocalData;
import com.xiniunet.master.domain.ledger.CapitalAccount;
import com.xiniunet.master.domain.ledger.CapitalAccountTypeEnum;
import com.xiniunet.master.request.ledger.CapitalAccountFindRequest;
import com.xiniunet.master.request.ledger.CurrencyChartSearchRequest;
import com.xiniunet.master.response.ledger.CapitalAccountFindResponse;
import com.xiniunet.master.response.ledger.CurrencyChartSearchResponse;
import com.xiniunet.master.service.MasterService;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created on 2015-08-07.
*
* @author 吕浩
* @since 1.0.0
*/
public class Api {
@Autowired
private HttpServletResponse response;
@Autowired
private BufferedRequestContext brc;
@Autowired
private HttpServletRequest request;
@Autowired
private FoundationHelper foundationHelper;
@Autowired
private MasterService masterService;
@Autowired
private LedgerHelper ledgerHelper;
public void execute(@Param("method") String method) throws Exception {
BaseResponse baseResponse = new BaseResponse();
Passport passport = LocalData.getCurrentPassport();
InputStreamReader isr = new InputStreamReader(request.getInputStream());
BufferedReader in = new BufferedReader(isr);
String line = in.readLine();
try {
// 必须关闭buffering,未完成的页面才会被显示在浏览器上。
brc.setBuffering(false);
// 设置content type,但不需要设置charset,框架会设置正确的charset。
response.setContentType("text/plain");
method = method.toLowerCase();
JSONObject jsonObject = JSON.parseObject(line);
switch(method) {
case "api.ledger.capital.account.find":
baseResponse = apiLedgerCapitalAccountFind(jsonObject, passport);
break;
case "api.ledger.currency.chart.search":
baseResponse = apiLedgerCurrencyChartSearch(jsonObject, passport);
break;
//---------------不存在的方法--------------
default:
baseResponse.addError(ErrorType.INVALID_PARAMETER, Constants.NOT_EXIST_METHOD);
break;
}
} catch(Exception e) {
LogUtil.writeLog(new Log("debug", "web", "", e.getMessage(), passport));
baseResponse.addError(ErrorType.SYSTEM_ERROR, Constants.ERROR_MESSAGE_500);
baseResponse.addError(ErrorType.STACK_DUMP, LogUtil.dumpException(e));
foundationHelper.createErrorLog(new ErrorLogCreateRequest(e, Constants.ERROR_MESSAGE_500, line), passport);
} finally {
PrintWriter out = response.getWriter();
String json = JSON.toJSONString(baseResponse, SerializerFeature.DisableCircularReferenceDetect);
out.println(json);
}
}
BaseFindResponse<CapitalAccountDetail> apiLedgerCapitalAccountFind(JSONObject jsonObject, Passport passport) {
BaseFindResponse<CapitalAccountDetail> findResponse = new BaseFindResponse<>();
CapitalAccountFindRequest capitalAccountFindRequest = JSON.toJavaObject(jsonObject, CapitalAccountFindRequest.class);
BankGetListResponse bankGetListResponse = foundationHelper.getBankList(new BankGetListRequest());
List<Bank> bankList = new ArrayList<>();
if(bankGetListResponse != null && !bankGetListResponse.hasError()) {
bankList = bankGetListResponse.getBankList();
}
Map<Long, String> bankMap = new HashMap<>();
for(Bank bank : bankList) {
bankMap.put(bank.getId(), bank.getName());
}
CapitalAccountFindResponse capitalAccountFindResponse = masterService.findCapitalAccount(capitalAccountFindRequest, passport);
if(capitalAccountFindResponse.hasError()) {
findResponse.addErrors(capitalAccountFindResponse.getErrors());
return findResponse;
}
List<CapitalAccount> capitalAccounts = capitalAccountFindResponse.getResult();
List<CapitalAccountDetail> capitalAccountDetails = JSON.parseArray(JSON.toJSONString(capitalAccounts), CapitalAccountDetail.class);
for(CapitalAccountDetail capitalAccountDetail : capitalAccountDetails) {
if(capitalAccountDetail.getType() == CapitalAccountTypeEnum.BANK) {
String bankName = bankMap.get(capitalAccountDetail.getBankId());
capitalAccountDetail.setBankName(bankName);
}
}
findResponse.setResult(capitalAccountDetails);
findResponse.setTotalCount(capitalAccountFindResponse.getTotalCount());
return findResponse;
}
CurrencyChartSearchResponse apiLedgerCurrencyChartSearch(JSONObject jsonObject, Passport passport) {
CurrencyChartSearchRequest currencyChartSearchRequest = JSON.toJavaObject(jsonObject, CurrencyChartSearchRequest.class);
return ledgerHelper.searchCurrencyChart(currencyChartSearchRequest, passport);
}
}