提交 | 用户 | age
|
a6a76f
|
1 |
package com.yc.api.controller; |
F |
2 |
|
|
3 |
import com.abc.pay.client.Base64; |
|
4 |
import com.abc.pay.client.Constants; |
|
5 |
import com.abc.pay.client.JSON; |
|
6 |
import com.abc.pay.client.ebus.PaymentRequest; |
|
7 |
import com.abc.pay.client.ebus.PaymentResult; |
|
8 |
import com.abc.pay.client.ebus.QueryOrderRequest; |
b1f69b
|
9 |
import com.yc.abc.utils.AbcMerchantConfig; |
a6a76f
|
10 |
import com.yc.action.BaseAction; |
6b5cd5
|
11 |
import com.yc.action.grid.GTGrid; |
a6a76f
|
12 |
import com.yc.action.panval.PanelCommitAction; |
3d9f25
|
13 |
import com.yc.api.bean.MatGroupEntity; |
F |
14 |
import com.yc.api.bean.ProducParmBean; |
|
15 |
import com.yc.api.bean.T120330; |
a6a76f
|
16 |
import com.yc.api.service.LuJiangNanServiceIfc; |
F |
17 |
import com.yc.api.service.QrServiceIfc; |
|
18 |
import com.yc.entity.DataSourceEntity; |
|
19 |
import com.yc.exception.ApplicationException; |
|
20 |
import com.yc.exception.CallBackMessage; |
|
21 |
import com.yc.factory.FactoryBean; |
|
22 |
import com.yc.multiData.MultiDataSource; |
|
23 |
import com.yc.multiData.SpObserver; |
|
24 |
import com.yc.sdk.shopping.entity.MatCodeEntity; |
|
25 |
import com.yc.sdk.shopping.service.*; |
|
26 |
import com.yc.sdk.shopping.service.PrepaidDeposit.PrepaidDepositIfc; |
|
27 |
import com.yc.sdk.shopping.service.imagedata.ShoppingImageDataIfc; |
|
28 |
import com.yc.sdk.shopping.service.share.ShareIfc; |
3dbec0
|
29 |
import com.yc.sdk.shopping.util.SettingKey; |
a6a76f
|
30 |
import com.yc.service.build.type.T_22_Ifc; |
F |
31 |
import com.yc.utils.SessionKey; |
|
32 |
import org.apache.commons.lang3.StringUtils; |
|
33 |
import org.slf4j.Logger; |
|
34 |
import org.slf4j.LoggerFactory; |
|
35 |
import org.springframework.beans.factory.annotation.Autowired; |
|
36 |
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
|
37 |
import org.springframework.web.bind.annotation.*; |
|
38 |
import org.springframework.web.context.request.async.WebAsyncTask; |
|
39 |
|
|
40 |
import javax.servlet.http.HttpServletRequest; |
|
41 |
import javax.servlet.http.HttpServletResponse; |
6b5cd5
|
42 |
import javax.servlet.http.HttpSession; |
a6a76f
|
43 |
import java.math.BigDecimal; |
F |
44 |
import java.time.LocalDate; |
|
45 |
import java.time.LocalTime; |
|
46 |
import java.time.format.DateTimeFormatter; |
|
47 |
import java.util.*; |
|
48 |
import java.util.concurrent.Callable; |
|
49 |
import java.util.concurrent.TimeUnit; |
|
50 |
import java.util.stream.Collectors; |
|
51 |
|
|
52 |
|
|
53 |
/** |
|
54 |
* 卤江南 |
|
55 |
*/ |
|
56 |
@RestController |
|
57 |
public class LuJiangNanController extends BaseAction { |
|
58 |
protected final Logger log = LoggerFactory.getLogger(this.getClass()); |
|
59 |
|
|
60 |
@Autowired |
|
61 |
ShoppingImageDataIfc imgData; |
|
62 |
@Autowired |
|
63 |
SettingIfc settingIfc; |
|
64 |
|
|
65 |
// 价格 |
|
66 |
@Autowired |
|
67 |
MatPriceIfc matPriceIfc; |
|
68 |
|
|
69 |
// 货币 |
|
70 |
@Autowired |
|
71 |
CurrencyIfc currencyIfc; |
|
72 |
|
|
73 |
// 商品资料 |
|
74 |
@Autowired |
|
75 |
MatCodeIfc matCodeIfc; |
|
76 |
|
|
77 |
// 商品附加图片信息 |
|
78 |
@Autowired |
|
79 |
MatCodeImageIfc matCodeImageIfc; |
|
80 |
|
|
81 |
// 商品选项 |
|
82 |
@Autowired |
|
83 |
MatOptionIfc matOptionIfc; |
|
84 |
|
|
85 |
|
|
86 |
// 消费积份 |
|
87 |
@Autowired |
|
88 |
MatPointsIfc matPointsIfc; |
|
89 |
|
|
90 |
// 商品促销活动关联表 |
|
91 |
@Autowired |
|
92 |
MatDiscountIfc matDiscountIfc; |
|
93 |
|
|
94 |
// 选项 |
|
95 |
@Autowired |
|
96 |
MatComponentIfc matComponentIfc; |
|
97 |
|
|
98 |
// 显示分享信息 |
|
99 |
@Autowired |
|
100 |
ShareIfc shareIfc; |
|
101 |
|
|
102 |
// 选项属性 |
|
103 |
@Autowired |
|
104 |
MatAttrIfc matAttrIfc; |
|
105 |
//优惠劵 |
|
106 |
@Autowired |
|
107 |
CouponIfc couponIfc; |
|
108 |
|
|
109 |
//预付订金分组 |
|
110 |
@Autowired |
|
111 |
PrepaidDepositIfc prepaidDepositIfc; |
|
112 |
|
|
113 |
@Autowired |
|
114 |
T_22_Ifc t22ifc; |
|
115 |
@Autowired |
|
116 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
117 |
@Autowired |
|
118 |
QrServiceIfc qrServiceIfc; |
|
119 |
@Autowired |
|
120 |
ThreadPoolTaskExecutor threadPoolExecutor; |
|
121 |
//---------------下单模块------------------------------- |
bfe31e
|
122 |
private class ProductCallable implements Callable<Object> { |
F |
123 |
ProducParmBean producParmBean; |
|
124 |
HttpServletRequest request; |
|
125 |
String dbid; |
|
126 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
127 |
ShoppingImageDataIfc imgData; |
|
128 |
int actionType=0;//1,取分类 2,取列表 |
a6a76f
|
129 |
|
bfe31e
|
130 |
|
F |
131 |
public ProductCallable(HttpServletRequest request,ProducParmBean producParmBean,String dbid, LuJiangNanServiceIfc luJiangNanServiceIfc,ShoppingImageDataIfc imgData,int actionType) { |
|
132 |
this.producParmBean = producParmBean; |
|
133 |
this.dbid = dbid; |
|
134 |
this.luJiangNanServiceIfc = luJiangNanServiceIfc; |
|
135 |
this.actionType=actionType; |
|
136 |
this.request=request; |
|
137 |
this.imgData=imgData; |
|
138 |
} |
|
139 |
|
|
140 |
@Override |
|
141 |
public Object call() throws Exception { |
|
142 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
143 |
try { |
|
144 |
SpObserver.setDBtoInstance("_" + dbid); |
|
145 |
|
|
146 |
Map nodes = new HashMap(); |
|
147 |
List<MatCodeEntity> matCodeEntityList=new ArrayList<>(); |
6b5cd5
|
148 |
GTGrid gtGrid =(GTGrid)FactoryBean.getBean("GTGrid"); |
F |
149 |
final HttpSession session = request.getSession(); |
3dbec0
|
150 |
String hostUrl = SettingKey.getHostUrlForImage(request); |
F |
151 |
|
6b5cd5
|
152 |
//数据组权限 |
3dbec0
|
153 |
switch (actionType) { |
bfe31e
|
154 |
case 1: |
6b5cd5
|
155 |
final String dataGroupInfo = gtGrid.getDataGroupInfo(110501, session.getAttribute(SessionKey.USERCODE) + "", 0, session); |
3dbec0
|
156 |
final List<MatGroupEntity> groups = luJiangNanServiceIfc.getMatGroups(dataGroupInfo); |
bfe31e
|
157 |
List<Map> groupList = new ArrayList(); |
F |
158 |
String matgourpId = null; |
3dbec0
|
159 |
List<MatGroupEntity> mainGroup = groups.stream().filter(x -> ( |
F |
160 |
x.getParentRowid() == null || x.getParentRowid().equals("")) |
|
161 |
).collect(Collectors.toList()); |
|
162 |
if (mainGroup != null && mainGroup.size() > 0) { |
|
163 |
for (MatGroupEntity matGroupEntity : mainGroup) { |
|
164 |
Map matGroup = new HashMap(); |
|
165 |
//1级分类 |
|
166 |
matGroup.put("MatGroupName", matGroupEntity.getMatGroupName()); |
|
167 |
matGroup.put("MatGroup", matGroupEntity.getMatGroup()); |
|
168 |
if (matgourpId == null) { |
|
169 |
matgourpId = matGroupEntity.getMatGroup(); |
|
170 |
} |
|
171 |
//2级分类 |
|
172 |
|
|
173 |
List<MatGroupEntity> subMatGroupList = groups.stream().filter(x -> ( |
3d9f25
|
174 |
matGroupEntity.getRowid().equals(x.getParentRowid()) |
3dbec0
|
175 |
)).collect(Collectors.toList()); |
F |
176 |
List<Map> subList = new ArrayList<>(); |
|
177 |
if(subMatGroupList!=null&&subMatGroupList.size()>0) { |
|
178 |
subMatGroupList.stream().forEach(x -> { |
|
179 |
Map subMap = new HashMap(); |
|
180 |
subMap.put("SubMatGroupName", x.getMatGroupName()); |
|
181 |
subMap.put("SubMatGroup", x.getMatGroup()); |
|
182 |
subList.add(subMap); |
|
183 |
}); |
|
184 |
} |
|
185 |
matGroup.put("subList", subList); |
|
186 |
groupList.add(matGroup); |
bfe31e
|
187 |
} |
3dbec0
|
188 |
ProducParmBean parmBean = new ProducParmBean(); |
F |
189 |
parmBean.setMatGroup(matgourpId); |
|
190 |
// final String dataGroupInfoByMatGroup = gtGrid.getDataGroupInfo(110503, session.getAttribute(SessionKey.USERCODE) + "", 0, session); |
|
191 |
parmBean.setAppSalesOrderMatCodeList(Integer.parseInt(String.valueOf(request.getSession().getAttribute(SessionKey.APP_SALESORDER_MATCODE_LIST)))); |
|
192 |
matCodeEntityList = luJiangNanServiceIfc.getMatCodesByMatGroup(parmBean, request.getSession().getAttribute(SessionKey.USERCODE) + "", dataGroupInfo); |
|
193 |
//用PhotoPathUrl代替PhotoPath输出图片Url |
|
194 |
// matCodeEntityList.stream().map(x -> { |
|
195 |
// x.setPhotoPath(imgData.getImageUrl(x.getPhotoPath(), 120, |
|
196 |
// 120, false, |
|
197 |
// false, request)); |
|
198 |
// return x; |
|
199 |
// }).collect(Collectors.toList()); |
|
200 |
matCodeEntityList.stream().forEach(x -> { |
|
201 |
x.setPhotoPath(SettingKey.getUrl(hostUrl, x.getPhotoPathUrl(), dbid+"",null)); |
|
202 |
x.setPhotoPathUrl(SettingKey.getUrl(hostUrl, x.getPhotoPathUrl(), dbid+"",null)); |
|
203 |
}); |
|
204 |
nodes.put("nodes", groupList); |
|
205 |
nodes.put("data", matCodeEntityList); |
|
206 |
//控制 下单列表 的“样式” , AppSalesOrderStyle : 0.商城图文式, 1.表格式(卤江南样式) |
|
207 |
nodes.put("appSalesOrderStyle", request.getSession().getAttribute(SessionKey.APP_SALESORDER_STYLE)); |
|
208 |
callBackMessage.setInfo(nodes); |
|
209 |
} |
|
210 |
break; |
|
211 |
case 2: |
|
212 |
final String dataGroupInfoByMatGroup2 = gtGrid.getDataGroupInfo(110503, session.getAttribute(SessionKey.USERCODE) + "", 0, session); |
|
213 |
final Object appSalesorderMatcodeList = session.getAttribute(SessionKey.APP_SALESORDER_MATCODE_LIST); |
|
214 |
int appSalesorderMatcodeInt = 0; |
|
215 |
if (appSalesorderMatcodeList != null) { |
|
216 |
appSalesorderMatcodeInt = Integer.parseInt(String.valueOf(appSalesorderMatcodeList)); |
|
217 |
} |
|
218 |
producParmBean.setAppSalesOrderMatCodeList(appSalesorderMatcodeInt); |
|
219 |
matCodeEntityList = luJiangNanServiceIfc.getMatCodesByMatGroup(this.producParmBean, session.getAttribute(SessionKey.USERCODE) + "", dataGroupInfoByMatGroup2); |
|
220 |
//用PhotoPathUrl代替PhotoPath输出图片Url |
|
221 |
matCodeEntityList.stream().forEach(x -> { |
|
222 |
x.setPhotoPath(SettingKey.getUrl(hostUrl, x.getPhotoPathUrl(), dbid+"",null)); |
|
223 |
x.setPhotoPathUrl(SettingKey.getUrl(hostUrl, x.getPhotoPathUrl(), dbid+"",null)); |
|
224 |
}); |
|
225 |
callBackMessage.setInfo(matCodeEntityList); |
|
226 |
break; |
bfe31e
|
227 |
} |
F |
228 |
|
|
229 |
callBackMessage.sendSuccessMessageByDefault(); |
|
230 |
return callBackMessage.toJSONObject(); |
|
231 |
} catch (Exception ex) { |
|
232 |
callBackMessage.sendErrorMessage(ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
233 |
return callBackMessage.toJSONObject(); |
|
234 |
} finally { |
|
235 |
SpObserver.setDBtoInstance(); |
|
236 |
} |
|
237 |
} |
|
238 |
} |
a6a76f
|
239 |
/** |
F |
240 |
* 商品分类显示 |
|
241 |
* |
|
242 |
* @param request |
|
243 |
* @param response |
|
244 |
*/ |
|
245 |
@RequestMapping(value = "/lujn/matGroups.do", method = RequestMethod.GET) |
|
246 |
@CrossOrigin |
|
247 |
public @ResponseBody |
bfe31e
|
248 |
WebAsyncTask matGroups(HttpServletRequest request, HttpServletResponse response) { |
F |
249 |
Callable<Object> callable = new ProductCallable(request, null, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "",luJiangNanServiceIfc,imgData,1); |
|
250 |
//定义超时45秒 |
|
251 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable); |
|
252 |
asyncTask.onCompletion( |
|
253 |
() -> log.info("执行成功") |
|
254 |
); |
|
255 |
asyncTask.onError( |
|
256 |
(Callable<Object>) () -> { |
|
257 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
258 |
log.info("执行出错"); |
|
259 |
callBackMessage.sendErrorMessage("操作出错"); |
|
260 |
return callBackMessage.toJSONObject(); |
a6a76f
|
261 |
} |
bfe31e
|
262 |
); |
F |
263 |
asyncTask.onTimeout( |
|
264 |
(Callable<Object>) () -> { |
|
265 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
266 |
log.info("执行超时"); |
|
267 |
callBackMessage.sendErrorMessage("服务器繁忙,正在排队处理,请不要重复提交", -1003); |
|
268 |
return callBackMessage.toJSONObject(); |
|
269 |
} |
|
270 |
); |
|
271 |
return asyncTask; |
|
272 |
|
|
273 |
|
a6a76f
|
274 |
} |
F |
275 |
|
|
276 |
/** |
|
277 |
* 商品列表显示 |
|
278 |
* |
|
279 |
* @param request |
|
280 |
* @param response |
|
281 |
*/ |
|
282 |
@RequestMapping(value = "/lujn/productList.do", method = RequestMethod.POST) |
|
283 |
@CrossOrigin |
|
284 |
public @ResponseBody |
bfe31e
|
285 |
WebAsyncTask productList(@RequestBody ProducParmBean producParmBean, HttpServletRequest request, HttpServletResponse response) { |
F |
286 |
Callable<Object> callable = new ProductCallable(request, producParmBean, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "",luJiangNanServiceIfc,imgData,2); |
|
287 |
//定义超时45秒 |
|
288 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable); |
|
289 |
asyncTask.onCompletion( |
|
290 |
() -> log.info("执行成功") |
|
291 |
); |
|
292 |
asyncTask.onError( |
|
293 |
(Callable<Object>) () -> { |
|
294 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
295 |
log.info("执行出错"); |
|
296 |
callBackMessage.sendErrorMessage("操作出错"); |
|
297 |
return callBackMessage.toJSONObject(); |
|
298 |
} |
|
299 |
); |
|
300 |
asyncTask.onTimeout( |
|
301 |
(Callable<Object>) () -> { |
|
302 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
303 |
log.info("执行超时"); |
|
304 |
callBackMessage.sendErrorMessage("服务器繁忙,正在排队处理,请不要重复提交", -1003); |
|
305 |
return callBackMessage.toJSONObject(); |
|
306 |
} |
|
307 |
); |
|
308 |
return asyncTask; |
a6a76f
|
309 |
} |
F |
310 |
|
|
311 |
private class T120201Callable implements Callable<Object> { |
|
312 |
List<MatCodeEntity> matCodeEntities; |
|
313 |
String cltCode; |
|
314 |
String dbid; |
|
315 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
316 |
|
|
317 |
public T120201Callable(List<MatCodeEntity> matCodeEntities, String cltCode, String dbid, LuJiangNanServiceIfc luJiangNanServiceIfc) { |
|
318 |
this.matCodeEntities = matCodeEntities; |
|
319 |
this.cltCode = cltCode; |
|
320 |
this.dbid = dbid; |
|
321 |
this.luJiangNanServiceIfc = luJiangNanServiceIfc; |
|
322 |
} |
|
323 |
|
|
324 |
@Override |
|
325 |
public Object call() throws Exception { |
|
326 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
327 |
long startTime = System.currentTimeMillis(); |
|
328 |
try { |
|
329 |
SpObserver.setDBtoInstance("_" + dbid); |
|
330 |
if (matCodeEntities == null || matCodeEntities.size() == 0) { |
|
331 |
throw new ApplicationException("没有商品,不能下单"); |
|
332 |
} |
|
333 |
Map map = luJiangNanServiceIfc.save120201(matCodeEntities, cltCode); |
|
334 |
log.info("cltCode:" + cltCode + "-客户:" + cltCode + "下单花费:" + (System.currentTimeMillis() - startTime)); |
|
335 |
callBackMessage.setInfo(map); |
|
336 |
callBackMessage.sendSuccessMessageByDefault(); |
|
337 |
return callBackMessage.toJSONObject(); |
|
338 |
} catch (Exception ex) { |
|
339 |
log.info("cltCode:" + cltCode + "-客户下单出错:" + cltCode + "花费:" + (System.currentTimeMillis() - startTime)); |
|
340 |
callBackMessage.sendErrorMessage(ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
341 |
return callBackMessage.toJSONObject(); |
|
342 |
} finally { |
|
343 |
SpObserver.setDBtoInstance(); |
|
344 |
log.info("---------------------end:" + cltCode + "-----------------"); |
|
345 |
} |
|
346 |
} |
|
347 |
} |
|
348 |
|
|
349 |
/** |
|
350 |
* 异步模式,保存订单 |
|
351 |
* |
|
352 |
* @param request |
|
353 |
*/ |
|
354 |
@RequestMapping(value = "/lujn/save120201.do", method = RequestMethod.POST) |
|
355 |
@CrossOrigin |
|
356 |
public @ResponseBody |
|
357 |
WebAsyncTask save120201(@RequestBody List<MatCodeEntity> matCodeEntities, HttpServletRequest request) { |
|
358 |
String cltCode = request.getSession().getAttribute(SessionKey.HRCODE) + ""; |
|
359 |
log.info("---------------------start:" + cltCode + "-----------------"); |
|
360 |
Callable<Object> callable = new T120201Callable(matCodeEntities, cltCode, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "", luJiangNanServiceIfc); |
|
361 |
//定义超时45秒 |
|
362 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable); |
|
363 |
asyncTask.onCompletion( |
|
364 |
() -> log.info("执行成功") |
|
365 |
); |
|
366 |
asyncTask.onError( |
|
367 |
(Callable<Object>) () -> { |
|
368 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
369 |
log.info("执行出错"); |
|
370 |
callBackMessage.sendErrorMessage("执行出错,请重新下单"); |
|
371 |
return callBackMessage.toJSONObject(); |
|
372 |
} |
|
373 |
); |
|
374 |
asyncTask.onTimeout( |
|
375 |
(Callable<Object>) () -> { |
|
376 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
377 |
log.info("执行超时"); |
|
378 |
callBackMessage.sendErrorMessage("服务器繁忙,正在排队处理,请不要重复提交,稍后请在【销售管理】-【销售订单】-【查询订单进度表】中查看结果", -1003); |
|
379 |
return callBackMessage.toJSONObject(); |
|
380 |
} |
|
381 |
); |
|
382 |
return asyncTask; |
|
383 |
} |
|
384 |
|
|
385 |
|
|
386 |
//-----------------支付模块------------------ |
|
387 |
|
|
388 |
/** |
|
389 |
* 单笔支付查询 |
|
390 |
* 查询120330 |
|
391 |
* |
|
392 |
* @param request |
|
393 |
*/ |
|
394 |
@RequestMapping(value = "/lujn/queryOrder.do") |
|
395 |
@CrossOrigin |
|
396 |
public @ResponseBody |
|
397 |
WebAsyncTask queryOrder(String docCode, HttpServletRequest request,HttpServletResponse response) { |
|
398 |
boolean isAppPost=request.getHeader("x-app-type")==null?false:true; |
|
399 |
//---web端调用 |
|
400 |
if (!isAppPost) { |
|
401 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
402 |
try { |
|
403 |
DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request); |
|
404 |
SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 |
|
405 |
//获取 参数集 map |
|
406 |
Map<String, String> map = t22ifc.getParamMap(request); |
|
407 |
docCode=map.get("docCode"); |
|
408 |
} catch (Exception e) { |
|
409 |
e.printStackTrace(); |
|
410 |
this.print(response, callBackMessage.sendErrorMessage(e.getCause() != null ? e.getCause().getMessage() : e.getMessage())); |
|
411 |
return null; |
|
412 |
} finally { |
|
413 |
SpObserver.setDBtoInstance(); |
|
414 |
} |
|
415 |
} |
|
416 |
Callable<Object> callable = new QueryOrderCallable(docCode, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "", luJiangNanServiceIfc,isAppPost); |
|
417 |
//定义超时45秒 |
|
418 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable); |
|
419 |
|
|
420 |
asyncTask.onError( |
|
421 |
(Callable<Object>) () -> { |
|
422 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
423 |
callBackMessage.sendErrorMessage("执行出错,请重新提交"); |
|
424 |
return callBackMessage.toJSONObject(); |
|
425 |
} |
|
426 |
); |
|
427 |
asyncTask.onTimeout( |
|
428 |
(Callable<Object>) () -> { |
|
429 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
430 |
callBackMessage.sendErrorMessage("服务器繁忙,请稍候查询", -1003); |
|
431 |
return callBackMessage.toJSONObject(); |
|
432 |
} |
|
433 |
); |
|
434 |
return asyncTask; |
|
435 |
} |
|
436 |
|
|
437 |
private class QueryOrderCallable implements Callable<Object> { |
|
438 |
|
|
439 |
String orderNo; |
|
440 |
String dbid; |
|
441 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
442 |
boolean isAppCall; |
|
443 |
public QueryOrderCallable(String orderNo, String dbid, LuJiangNanServiceIfc luJiangNanServiceIfc,boolean isAppCall) { |
|
444 |
this.orderNo = orderNo; |
|
445 |
this.dbid = dbid; |
|
446 |
this.luJiangNanServiceIfc = luJiangNanServiceIfc; |
|
447 |
this.isAppCall=isAppCall; |
|
448 |
} |
|
449 |
|
|
450 |
@Override |
|
451 |
public Object call() throws Exception { |
|
452 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
453 |
try { |
|
454 |
SpObserver.setDBtoInstance("_" + dbid); |
|
455 |
QueryOrderRequest tQueryRequest = new QueryOrderRequest(); |
|
456 |
tQueryRequest.queryRequest.put("PayTypeID", Constants.PAY_TYPE_DIRECTPAY); //设定交易类型 |
|
457 |
tQueryRequest.queryRequest.put("OrderNo", orderNo); //设定订单编号 (必要信息) |
|
458 |
tQueryRequest.queryRequest.put("QueryDetail", "1");//设定查询方式 |
|
459 |
JSON json = tQueryRequest.postRequest(); |
|
460 |
String ReturnCode = json.GetKeyValue("ReturnCode"); |
|
461 |
String ErrorMessage = json.GetKeyValue("ErrorMessage"); |
|
462 |
//成功 |
|
463 |
if (ReturnCode.equals("0000")) { |
|
464 |
String orderInfo = json.GetKeyValue("Order"); |
|
465 |
Base64 tBase64 = new Base64(); |
|
466 |
String orderDetail = new String(tBase64.decode(orderInfo)); |
|
467 |
json.setJsonString(orderDetail); |
|
468 |
//支付成功才写执行 |
|
469 |
if ("04".equalsIgnoreCase(json.GetKeyValue("Status"))) { |
|
470 |
//--插入日志表 |
|
471 |
luJiangNanServiceIfc.save150172LogByQuery(json); |
|
472 |
luJiangNanServiceIfc.save150171ByQueryOrder(json); |
|
473 |
} |
|
474 |
Map info = new HashMap(); |
|
475 |
info.put("code", json.GetKeyValue("Status")); |
|
476 |
info.put("status", getOrderStatus(json.GetKeyValue("Status"))); |
|
477 |
callBackMessage.setInfo(info); |
|
478 |
callBackMessage.sendSuccessMessageByDefault(); |
|
479 |
if(isAppCall) { |
|
480 |
return callBackMessage.toJSONObject(); |
|
481 |
}else { |
|
482 |
return callBackMessage.print(); |
|
483 |
} |
|
484 |
} else { |
|
485 |
throw new ApplicationException(ReturnCode + "-" + ErrorMessage); |
|
486 |
} |
|
487 |
} catch (Exception ex) { |
|
488 |
callBackMessage.sendErrorMessage(ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
489 |
if(isAppCall) { |
|
490 |
return callBackMessage.toJSONObject(); |
|
491 |
}else { |
|
492 |
return callBackMessage.print(); |
|
493 |
} |
|
494 |
} finally { |
|
495 |
SpObserver.setDBtoInstance(); |
|
496 |
} |
|
497 |
} |
|
498 |
} |
|
499 |
|
|
500 |
/** |
|
501 |
* 01:未支付 |
|
502 |
* 02:无回应 |
|
503 |
* 03:微信和支付宝支付成功 |
|
504 |
* 04:选择微信、支付宝支付时,表示农行清算成功; |
|
505 |
* 选择我行支付通道支付时,表示农行支付成功 |
|
506 |
* 05:已退款 |
|
507 |
* 07:授权确认成功 |
|
508 |
* 00:授权已取消 |
|
509 |
* 99:失败 |
|
510 |
*/ |
|
511 |
private String getOrderStatus(String status) { |
|
512 |
switch (status) { |
|
513 |
case "01": |
|
514 |
return "未支付"; |
|
515 |
case "02": |
|
516 |
return "无回应"; |
|
517 |
case "03": |
|
518 |
return "微信和支付宝支付成功"; |
|
519 |
case "04": |
|
520 |
return "支付成功"; |
|
521 |
case "05": |
|
522 |
return "已退款"; |
|
523 |
case "07": |
|
524 |
return "授权确认成功"; |
|
525 |
case "00": |
|
526 |
return "授权已取消"; |
|
527 |
default: |
|
528 |
return "失败"; |
|
529 |
} |
|
530 |
|
|
531 |
} |
|
532 |
|
|
533 |
/** |
|
534 |
* 支付通知结果 |
|
535 |
* |
|
536 |
* @param request |
|
537 |
*/ |
|
538 |
@RequestMapping(value = "/lujn/orderPayCallback.do") |
|
539 |
@CrossOrigin |
|
540 |
public @ResponseBody |
|
541 |
WebAsyncTask orderPayCallback(HttpServletRequest request) { |
|
542 |
Callable<Object> callable = new OrderPayCallable(request.getParameter("MSG"), luJiangNanServiceIfc); |
|
543 |
//定义超时45秒 |
|
544 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable); |
|
545 |
|
|
546 |
asyncTask.onError( |
|
547 |
(Callable<Object>) () -> { |
|
548 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
549 |
callBackMessage.sendErrorMessage("执行出错,请重新提交"); |
|
550 |
return callBackMessage.toJSONObject(); |
|
551 |
} |
|
552 |
); |
|
553 |
asyncTask.onTimeout( |
|
554 |
(Callable<Object>) () -> { |
|
555 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
556 |
callBackMessage.sendErrorMessage("服务器繁忙,请不要重复提交,稍候在支付结果中查询结果", -1003); |
|
557 |
return callBackMessage.toJSONObject(); |
|
558 |
} |
|
559 |
); |
|
560 |
return asyncTask; |
|
561 |
} |
|
562 |
|
|
563 |
private class OrderPayCallable implements Callable<Object> { |
|
564 |
|
|
565 |
String msg; |
|
566 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
567 |
|
|
568 |
public OrderPayCallable(String msg, LuJiangNanServiceIfc luJiangNanServiceIfc) { |
|
569 |
this.msg = msg; |
|
570 |
this.luJiangNanServiceIfc = luJiangNanServiceIfc; |
|
571 |
} |
|
572 |
|
|
573 |
@Override |
|
574 |
public Object call() throws Exception { |
|
575 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
576 |
PaymentResult paymentResult = null; |
|
577 |
try { |
|
578 |
log.info("msg:" + msg); |
|
579 |
paymentResult = new PaymentResult(msg); |
|
580 |
log.info("orderNo:" + paymentResult.getValue("OrderNo")); |
|
581 |
log.info("ResponseMessage:" + paymentResult.getResponseMessage()); |
|
582 |
} catch (Exception e) { |
|
583 |
e.printStackTrace(); |
|
584 |
log.info("PaymentResultErrorMessage:" + e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); |
|
585 |
throw new ApplicationException(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); |
|
586 |
} |
|
587 |
try { |
|
588 |
SpObserver.setDBtoInstance("_" + paymentResult.getValue("MerchantRemarks")); |
|
589 |
//--插入日志表 |
|
590 |
luJiangNanServiceIfc.save150172Log(paymentResult); |
|
591 |
//保存支付结果日志及执行150171确认过账 |
|
592 |
luJiangNanServiceIfc.save150171ByCallBack(paymentResult); |
|
593 |
log.info("执行完成150171过账"); |
|
594 |
callBackMessage.sendSuccessMessageByDefault(); |
|
595 |
return callBackMessage.toJSONObject(); |
|
596 |
} catch (Exception ex) { |
|
597 |
ex.printStackTrace(); |
|
598 |
log.info("ErrorMessage:" + ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
599 |
throw ex; |
|
600 |
// callBackMessage.sendErrorMessage(ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
601 |
//return callBackMessage.toJSONObject(); |
|
602 |
} finally { |
|
603 |
SpObserver.setDBtoInstance(); |
|
604 |
} |
|
605 |
} |
|
606 |
} |
|
607 |
|
|
608 |
/** |
|
609 |
* 未支付提示 |
|
610 |
* 查询120330 |
|
611 |
* |
|
612 |
* @param request |
|
613 |
*/ |
|
614 |
@RequestMapping(value = "/lujn/nodify120330.do", method = RequestMethod.GET) |
|
615 |
@CrossOrigin |
|
616 |
public @ResponseBody |
|
617 |
WebAsyncTask nodify120330(HttpServletRequest request) { |
|
618 |
String cltCode = request.getSession().getAttribute(SessionKey.HRCODE) + ""; |
|
619 |
Callable<Object> callable = new Notify120330ListCallable(cltCode, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "", luJiangNanServiceIfc); |
|
620 |
//定义超时45秒 |
|
621 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable); |
|
622 |
|
|
623 |
asyncTask.onError( |
|
624 |
(Callable<Object>) () -> { |
|
625 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
626 |
callBackMessage.sendErrorMessage("执行出错,请重新提交"); |
|
627 |
return callBackMessage.toJSONObject(); |
|
628 |
} |
|
629 |
); |
|
630 |
asyncTask.onTimeout( |
|
631 |
(Callable<Object>) () -> { |
|
632 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
633 |
callBackMessage.sendErrorMessage("服务器繁忙,请稍候再查询", -1003); |
|
634 |
return callBackMessage.toJSONObject(); |
|
635 |
} |
|
636 |
); |
|
637 |
return asyncTask; |
|
638 |
} |
|
639 |
|
|
640 |
private class Notify120330ListCallable implements Callable<Object> { |
|
641 |
|
|
642 |
String cltCode; |
|
643 |
String dbid; |
|
644 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
645 |
|
|
646 |
public Notify120330ListCallable(String cltCode, String dbid, LuJiangNanServiceIfc luJiangNanServiceIfc) { |
|
647 |
this.cltCode = cltCode; |
|
648 |
this.dbid = dbid; |
|
649 |
this.luJiangNanServiceIfc = luJiangNanServiceIfc; |
|
650 |
} |
|
651 |
|
|
652 |
@Override |
|
653 |
public Object call() throws Exception { |
|
654 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
655 |
try { |
|
656 |
SpObserver.setDBtoInstance("_" + dbid); |
|
657 |
|
|
658 |
String msg = luJiangNanServiceIfc.notify120330(cltCode); |
|
659 |
Map info = new HashMap(); |
|
660 |
info.put("msg", msg); |
|
661 |
callBackMessage.setInfo(info); |
|
662 |
callBackMessage.sendSuccessMessageByDefault(); |
|
663 |
return callBackMessage.toJSONObject(); |
|
664 |
} catch (Exception ex) { |
|
665 |
callBackMessage.sendErrorMessage(ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
666 |
return callBackMessage.toJSONObject(); |
|
667 |
} finally { |
|
668 |
SpObserver.setDBtoInstance(); |
|
669 |
} |
|
670 |
} |
|
671 |
} |
|
672 |
|
|
673 |
/** |
|
674 |
* 询结单列表 |
|
675 |
* 查询120330 |
|
676 |
* |
|
677 |
* @param request |
|
678 |
*/ |
|
679 |
@RequestMapping(value = "/lujn/get120330List.do", method = RequestMethod.GET) |
|
680 |
@CrossOrigin |
|
681 |
public @ResponseBody |
7832d6
|
682 |
WebAsyncTask get120330List(Integer pageIndex, Integer pageSize, Integer isPay,Integer isNew, HttpServletRequest request) { |
a6a76f
|
683 |
String cltCode = request.getSession().getAttribute(SessionKey.HRCODE) + ""; |
7832d6
|
684 |
Callable<Object> callable = new Get120330ListCallable(isPay, pageIndex, pageSize, cltCode, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "", luJiangNanServiceIfc,isNew); |
a6a76f
|
685 |
//定义超时45秒 |
F |
686 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable); |
|
687 |
|
|
688 |
asyncTask.onError( |
|
689 |
(Callable<Object>) () -> { |
|
690 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
691 |
callBackMessage.sendErrorMessage("执行出错,请重新提交"); |
|
692 |
return callBackMessage.toJSONObject(); |
|
693 |
} |
|
694 |
); |
|
695 |
asyncTask.onTimeout( |
|
696 |
(Callable<Object>) () -> { |
|
697 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
698 |
callBackMessage.sendErrorMessage("执行超时,请重新提交"); |
|
699 |
return callBackMessage.toJSONObject(); |
|
700 |
} |
|
701 |
); |
|
702 |
return asyncTask; |
|
703 |
} |
|
704 |
|
|
705 |
private class Get120330ListCallable implements Callable<Object> { |
|
706 |
Integer pageIndex; |
|
707 |
Integer isPay; |
7832d6
|
708 |
Integer isNew; |
a6a76f
|
709 |
Integer pageSize; |
F |
710 |
String cltCode; |
|
711 |
String dbid; |
|
712 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
713 |
|
7832d6
|
714 |
public Get120330ListCallable(Integer isPay, Integer pageIndex, Integer pageSize, String cltCode, String dbid, LuJiangNanServiceIfc luJiangNanServiceIfc,Integer isNew) { |
a6a76f
|
715 |
this.pageIndex = pageIndex; |
F |
716 |
this.isPay = isPay; |
|
717 |
this.pageSize = pageSize; |
|
718 |
this.cltCode = cltCode; |
|
719 |
this.dbid = dbid; |
|
720 |
this.luJiangNanServiceIfc = luJiangNanServiceIfc; |
7832d6
|
721 |
this.isNew=isNew; |
a6a76f
|
722 |
} |
F |
723 |
|
|
724 |
@Override |
|
725 |
public Object call() throws Exception { |
|
726 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
727 |
try { |
|
728 |
SpObserver.setDBtoInstance("_" + dbid); |
|
729 |
|
|
730 |
List<Map<String, Object>> list = null; |
|
731 |
if (isPay != null && isPay == 1) { |
|
732 |
//已支付 |
7832d6
|
733 |
list = luJiangNanServiceIfc.get120330ListByPaid(pageIndex, pageSize, cltCode,isNew); |
a6a76f
|
734 |
} else { |
F |
735 |
//未支付 |
7832d6
|
736 |
list = luJiangNanServiceIfc.get120330List(pageIndex, pageSize, cltCode,isNew); |
a6a76f
|
737 |
} |
F |
738 |
callBackMessage.setInfo(list); |
|
739 |
callBackMessage.sendSuccessMessageByDefault(); |
|
740 |
return callBackMessage.toJSONObject(); |
|
741 |
} catch (Exception ex) { |
|
742 |
callBackMessage.sendErrorMessage(ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
743 |
return callBackMessage.toJSONObject(); |
|
744 |
} finally { |
|
745 |
SpObserver.setDBtoInstance(); |
|
746 |
} |
|
747 |
} |
|
748 |
} |
|
749 |
|
|
750 |
/** |
|
751 |
* app下单 |
|
752 |
* 查询120330取得支付金额,发送订单请求到农行支付平台,返回支付信息返回给app,以便app发起支付请求 |
|
753 |
* |
|
754 |
* @param request |
|
755 |
*/ |
|
756 |
@RequestMapping(value = "/lujn/post120330.do", method = RequestMethod.POST) |
|
757 |
@CrossOrigin |
|
758 |
public @ResponseBody |
|
759 |
WebAsyncTask post120330(@RequestBody List<T120330> list, HttpServletRequest request) { |
|
760 |
String cltCode = request.getSession().getAttribute(SessionKey.HRCODE) + ""; |
|
761 |
String userName = request.getSession().getAttribute(SessionKey.USER_NAME) + ""; |
|
762 |
Map<String, String> env = this.initEnv(request, 150171, null, false); |
|
763 |
Callable<Object> callable = new T150171Callable(list, cltCode, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "", luJiangNanServiceIfc, userName, env); |
|
764 |
//定义超时45秒, 改为600秒,Modified by Johns Wang,2021-02-10 |
|
765 |
WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(600), threadPoolExecutor, callable); |
|
766 |
asyncTask.onCompletion( |
|
767 |
() -> log.info("执行成功") |
|
768 |
); |
|
769 |
asyncTask.onError( |
|
770 |
(Callable<Object>) () -> { |
|
771 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
772 |
log.info("执行出错"); |
|
773 |
callBackMessage.sendErrorMessage("执行出错,请重新提交"); |
|
774 |
return callBackMessage.toJSONObject(); |
|
775 |
} |
|
776 |
); |
|
777 |
asyncTask.onTimeout( |
|
778 |
(Callable<Object>) () -> { |
|
779 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
780 |
log.info("执行超时"); |
|
781 |
callBackMessage.sendErrorMessage("服务器繁忙,请不要重复提交", -1003); |
|
782 |
return callBackMessage.toJSONObject(); |
|
783 |
} |
|
784 |
); |
|
785 |
return asyncTask; |
|
786 |
} |
|
787 |
|
|
788 |
private class T150171Callable implements Callable<Object> { |
|
789 |
List<T120330> list; |
|
790 |
String cltCode; |
|
791 |
String userName; |
|
792 |
String dbid; |
|
793 |
Map<String, String> env; |
|
794 |
LuJiangNanServiceIfc luJiangNanServiceIfc; |
|
795 |
|
|
796 |
public T150171Callable(List<T120330> list, String cltCode, String dbid, LuJiangNanServiceIfc luJiangNanServiceIfc, String userName, Map<String, String> env) { |
|
797 |
this.list = list; |
|
798 |
this.cltCode = cltCode; |
|
799 |
this.dbid = dbid; |
|
800 |
this.userName = userName; |
|
801 |
this.env = env; |
|
802 |
this.luJiangNanServiceIfc = luJiangNanServiceIfc; |
|
803 |
} |
|
804 |
|
|
805 |
@Override |
|
806 |
public Object call() throws Exception { |
|
807 |
CallBackMessage callBackMessage = new CallBackMessage(); |
|
808 |
T120330 t120330 = new T120330(); |
|
809 |
try { |
|
810 |
SpObserver.setDBtoInstance("_" + dbid); |
|
811 |
if (list == null || list.size() == 0) { |
|
812 |
throw new ApplicationException("没有需要支付的订单"); |
|
813 |
} |
|
814 |
//1-------------------生成门店付款单 150171 |
7832d6
|
815 |
Map map =null; |
7edaee
|
816 |
if(list.get(0).getFormid()!=null&&list.get(0).getFormid().intValue()==120340){ |
7832d6
|
817 |
//加盟费支付 |
F |
818 |
map = luJiangNanServiceIfc.save150171V2(list, cltCode); |
|
819 |
}else { |
|
820 |
//货款支付 |
|
821 |
map = luJiangNanServiceIfc.save150171(list, cltCode); |
|
822 |
} |
a6a76f
|
823 |
t120330.setDocCode(map.get("docCode") + ""); |
F |
824 |
if (map.get("amount") == null || "".equals(map.get("amount"))) { |
|
825 |
throw new ApplicationException(map.get("docCode") + "-订单金额不能为空"); |
|
826 |
} |
|
827 |
t120330.setAmount(new BigDecimal(map.get("amount") + "")); |
|
828 |
t120330.setDbid(Integer.parseInt(dbid)); |
b1f69b
|
829 |
t120330.setMerchantID(map.get("merchantID") + ""); |
a6a76f
|
830 |
//2--------------------生成支付平台需要的请求对象 |
b1f69b
|
831 |
//log.info("t120330:"+ com.alibaba.fastjson.JSON.toJSONString(t120330)); |
a6a76f
|
832 |
JSON json = postOrder(t120330); |
F |
833 |
String ReturnCode = json.GetKeyValue("ReturnCode"); |
|
834 |
String ErrorMessage = json.GetKeyValue("ErrorMessage"); |
|
835 |
String paymentURL = json.GetKeyValue("PaymentURL"); |
|
836 |
log.info("ReturnCode = [" + ReturnCode + "]"); |
|
837 |
log.info("ErrorMessage = [" + ErrorMessage + "]"); |
|
838 |
log.info("PaymentURL-->" + json.GetKeyValue("PaymentURL")); |
|
839 |
//成功 |
|
840 |
if ("0000".equals(ReturnCode)) { |
|
841 |
//3---------------------把返回的信息返回给app端,发起支付请求 |
|
842 |
//---解析PaymentURL,获得支付token |
|
843 |
Map info = new HashMap(); |
|
844 |
info.put("token", paymentURL.split("TOKEN=")[1]); |
|
845 |
info.put("orderNo", json.GetKeyValue("OrderNo")); |
|
846 |
info.put("amount", t120330.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP)); |
|
847 |
callBackMessage.setInfo(info); |
|
848 |
callBackMessage.sendSuccessMessageByDefault(); |
|
849 |
return callBackMessage.toJSONObject(); |
|
850 |
} else { |
|
851 |
//出错 |
|
852 |
throw new ApplicationException(ReturnCode + "-" + ErrorMessage); |
|
853 |
} |
|
854 |
} catch (Exception ex) { |
|
855 |
ex.printStackTrace(); |
|
856 |
//删除新建的单 |
|
857 |
if (StringUtils.isNotBlank(t120330.getDocCode())) { |
|
858 |
env.put("@doccode", t120330.getDocCode()); |
|
859 |
PanelCommitAction panelCommitAction = (PanelCommitAction) FactoryBean.getBean("panelCommitAction"); |
|
860 |
panelCommitAction.PostDeleteDocSql("150171", t120330.getDocCode(), "0", dbid, "5", userName, cltCode, null, env); |
|
861 |
} |
|
862 |
callBackMessage.sendErrorMessage(ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); |
|
863 |
return callBackMessage.toJSONObject(); |
|
864 |
} finally { |
|
865 |
SpObserver.setDBtoInstance(); |
|
866 |
} |
|
867 |
} |
|
868 |
} |
|
869 |
|
|
870 |
/** |
|
871 |
* 向农行发送订单请求,把订单提交到网上支付平台,成功后导向支付界面,然后发起支付操作 |
|
872 |
* |
|
873 |
* @return |
|
874 |
*/ |
|
875 |
private JSON postOrder(T120330 t120330) { |
|
876 |
|
|
877 |
//订单日期和时间 |
|
878 |
LocalDate localDate = LocalDate.now(); |
|
879 |
String date = localDate.format(DateTimeFormatter.ofPattern("yyyy/MM/dd")); |
|
880 |
LocalTime localTime = LocalTime.now(); |
|
881 |
String time = localTime.format(DateTimeFormatter.ofPattern("HH:mm:ss")); |
|
882 |
String docCode = t120330.getDocCode(); |
|
883 |
//todo 订单金额 |
|
884 |
BigDecimal orderAmount = t120330.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP); |
|
885 |
//1、生成订单对象 |
|
886 |
PaymentRequest tPaymentRequest = new PaymentRequest(); |
|
887 |
|
|
888 |
tPaymentRequest.dicOrder.put("PayTypeID", Constants.PAY_TYPE_DIRECTPAY); //设定交易类型 |
|
889 |
tPaymentRequest.dicOrder.put("OrderDate", date); //设定订单日期 (必要信息 - YYYY/MM/DD) |
|
890 |
tPaymentRequest.dicOrder.put("OrderTime", time); //设定订单时间 (必要信息 - HH:MM:SS) |
|
891 |
tPaymentRequest.dicOrder.put("OrderNo", docCode); //设定订单编号 (必要信息) |
|
892 |
tPaymentRequest.dicOrder.put("CurrencyCode", "156"); //设定交易币种 |
ef47cf
|
893 |
tPaymentRequest.dicOrder.put("OrderAmount", orderAmount.toString()); //设定交易金额 |
a6a76f
|
894 |
tPaymentRequest.dicOrder.put("InstallmentMark", "0"); // 分期标识 |
F |
895 |
tPaymentRequest.dicOrder.put("CommodityType", "0202"); // 设置商品种类 |
|
896 |
//2、订单明细 |
|
897 |
LinkedHashMap orderitem = new LinkedHashMap(); |
|
898 |
orderitem.put("ProductName", docCode);//商品名称 |
|
899 |
tPaymentRequest.orderitems.put(1, orderitem); |
|
900 |
//3、生成支付请求对象 |
|
901 |
tPaymentRequest.dicRequest.put("PaymentType", Constants.PAY_TYPE_ALL); //设定支付类型 |
|
902 |
tPaymentRequest.dicRequest.put("PaymentLinkType", Constants.PAY_LINK_TYPE_MOBILE); //设定支付接入方式 |
|
903 |
tPaymentRequest.dicRequest.put("NotifyType", Constants.NOTIFY_TYPE_SERVER); //设定通知方式 |
|
904 |
tPaymentRequest.dicRequest.put("MerchantRemarks", t120330.getDbid()); // 附言,这里保存数据源id,方便回调支付结果通知时获得对应的数据源id |
|
905 |
//--测试环境 |
|
906 |
//tPaymentRequest.dicRequest.put("ResultNotifyURL", "http://ljn.onbus.cn:9010/lujn/orderPayCallback.do"); //设定通知URL地址 |
|
907 |
tPaymentRequest.dicRequest.put("ResultNotifyURL", "https://ljn.onbus.cn/lujn/orderPayCallback.do"); //设定通知URL地址 |
|
908 |
tPaymentRequest.dicRequest.put("IsBreakAccount", Constants.IsBreakAccount_NO); //设定交易是否分账、交易是否支持向二级商户入账 |
|
909 |
// System.out.println(GridUtils.toJson(tPaymentRequest)); |
b1f69b
|
910 |
//---根据MerchantID取得配置文件TrustMerchant.properties中所在的index位置,传给农行执行 |
F |
911 |
JSON json = tPaymentRequest.extendPostRequest(getMerchantIDIndex(t120330.getDbid(), t120330.getMerchantID())); |
a6a76f
|
912 |
return json; |
F |
913 |
} |
|
914 |
|
b1f69b
|
915 |
/** |
F |
916 |
* 根据商户号查找在配置文件所有的位置index |
|
917 |
* @param merchantID |
|
918 |
* @return |
|
919 |
*/ |
|
920 |
private int getMerchantIDIndex(Integer dbid,String merchantID){ |
|
921 |
//商户证书列表 |
|
922 |
String merchantStr = AbcMerchantConfig.get("MerchantID"); |
|
923 |
if(StringUtils.isBlank(merchantStr)){ |
|
924 |
throw new ApplicationException("TrustMerchant.properties中商户号MerchantID配置项不能为空"); |
|
925 |
} |
|
926 |
final String[] merchantList = merchantStr.split(","); |
|
927 |
int index=0;//商户号的位置 |
|
928 |
if(merchantList!=null&&merchantList.length>0) { |
|
929 |
for (int i = 0; i < merchantList.length; i++) { |
|
930 |
//根据商户id定位对应的位置 |
|
931 |
if (merchantList[i].trim().equalsIgnoreCase(merchantID)) { |
|
932 |
index = i + 1; |
|
933 |
break; |
|
934 |
} |
|
935 |
} |
|
936 |
} |
|
937 |
if(index==0){ |
|
938 |
final DataSourceEntity dataSourceMap = MultiDataSource.getDataSourceMap(dbid + ""); |
|
939 |
throw new ApplicationException(dataSourceMap.getSystemID()+"-商户证书找不到,请检查配置文件"); |
|
940 |
} |
|
941 |
return index; |
|
942 |
} |
a6a76f
|
943 |
|
F |
944 |
} |