OrderService.java
12.7 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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
package com.rnt.service;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.beetl.sql.core.kit.StringKit;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.aop.Before;
import com.jfinal.aop.Duang;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.tx.Tx;
import com.rnt.commo.enums.DSEnum;
import com.rnt.commo.enums.DataStatusEnum;
import com.rnt.commo.enums.ErrorType;
import com.rnt.commo.enums.OrderTypeEnum;
import com.rnt.commo.enums.PayOrderEnum;
import com.rnt.commo.enums.SequenceTypeEnum;
import com.rnt.model.zf.CardCoupons;
import com.rnt.model.zf.Order;
import com.rnt.model.zf.OrderDetailCard;
import com.rnt.model.zf.OrderDetailPark;
import com.rnt.model.zf.ParkOrderFlow;
import com.rnt.model.zf.PayOrder;
import com.rnt.utils.DateUtil;
import com.rnt.utils.SequenceUtil;
import com.rnt.vo.OrderVO;
public class OrderService {
IRainQueryService iRainQueryService = Duang.duang(IRainQueryService.class);
private static final Log logger = Log.getLog(OrderService.class);
/**
* 支付成功后调用的函数
*
* @param payOrderId 支付单ID
* @return 是否成功
*/
@Before(Tx.class)
public Boolean payOrderSuccess(String payOrderId,String transId) {
logger.info("========支付成功后,修改单据状态==== start ====");
logger.info("========支付成功后,修改单据状态 入参为:payOrderId="+payOrderId+"; transId="+transId);
//修改支付单状态
PayOrder payOrder = PayOrder.dao.findFirst("select * from td_b_pay_order t where t.pay_order_id = ?", payOrderId);
payOrder.setPayOrderState(Integer.valueOf(PayOrderEnum.PAY_ORDER_STATE_PAY_SUCCESS.getValue()));
//微信端的订单交易流水
payOrder.setRltPayOrderId(transId);
boolean flag = payOrder.update();
logger.info("修改支付单,flag状态为: flag=" + flag);
String orderId = payOrder.getRltOrderId();
//修改订单状态
Order order = Order.dao.findFirst("select * from td_b_order t where t.order_id = ?", orderId);
order.setOrderState(OrderTypeEnum.ORDER_TYPE_3.value());
flag = flag & order.update();
logger.info("修改订单,flag状态为: flag=" + flag);
//查询订单明细表
OrderDetailCard orderDetailCard = OrderDetailCard.dao.findFirst(
"select * from td_b_order_detail_card t where t.order_id = ?", orderId);
Integer orderDetailType = orderDetailCard.getOrderDetailType();
Long cardCoponsId = orderDetailCard.getPersonCardId();
CardCoupons cardCoupons = CardCoupons.dao.findById(cardCoponsId);
Integer orderType = order.getOrderType();
if(OrderTypeEnum.PARK_ORDER_TYPE_1.value().equals(orderType)){
/**停车订单*/
/** 上面已将订单状态修改为已支付,无需后续操作了*/
logger.info("停车订单修改,将订单状态修改为已支付");
}else if(OrderTypeEnum.PARK_ORDER_TYPE_2.value().equals(orderType) || OrderTypeEnum.PARK_ORDER_TYPE_3.value().equals(orderType)){
/**年卡、月卡订单*/
if (OrderTypeEnum.ORDER_DETAIL_TYPE_BUY_CARD.value().equals(orderDetailType)) {
/**购卡单*/
cardCoupons.setDataState(DataStatusEnum.DATA_STATUS_VALID.value());
flag = flag & cardCoupons.update();
logger.info("购卡单修改数据状态,flag状态为: flag=" + flag);
} else if (OrderTypeEnum.ORDER_DETAIL_TYPE_RENEW_CARD.value().equals(orderDetailType)) {
/**续费单*/
//1、 从订单明细表中获取失效日期
Date expDate = orderDetailCard.getExpDate();
//2、更改个人卡卷表失效日期
cardCoupons.setExpDate(expDate);
flag = flag & cardCoupons.update();
logger.info("支付单修改数据状态,flag状态为: flag=" + flag);
} else {
logger.info("无法识别的订单类型 orderDetailType=" + orderDetailType);
}
}else{
logger.info("无法识别的订单类型 orderType=" + orderType);
}
logger.info("========支付成功后,修改单据状态==== end ====");
return flag;
}
/**
* 查询支付成功的历史车牌,最多3个.<br/>
*
* @param custId 个人客户id
* @return
*/
public List<String> queryHistoryCarNum(String custId) {
List<String> list = new ArrayList<String>();
StringBuffer sql = new StringBuffer("select a.car_number");
sql.append(" from td_b_order a ");
sql.append(" where a.order_state in(3,4) ");
sql.append(" and cust_person_id= ? ");
sql.append(" group by a.car_number,a.create_date");
sql.append(" order by a.create_date desc ");
sql.append(" limit 0,3 ");
List<Order> orderList = new Order().find(sql.toString(), custId);
if (orderList != null && orderList.size() > 0) {
for (Order order : orderList) {
list.add(order.getCarNumber());
}
}
return list;
}
/**
* 通过订单好
* @param orderId
* @return
*/
public OrderDetailPark queryDetailParkByOrderId(String orderId){
StringBuffer sql = new StringBuffer("select order_id,record_id");
sql.append(" from td_b_order_detail_park a ");
sql.append(" where a.data_state =1");
sql.append(" and a.order_id ? ");
OrderDetailPark orderDetailPark = new OrderDetailPark().findFirst(sql.toString(), orderId);
return orderDetailPark;
}
/**
* 查询待支付的停车订单.<br/>
* 步骤:
* 1.查询待支付的订单
* 1.调用艾润接口查询费用.<br/>
* 3.更新订单费用.<br/>
* 4.更新订单明细费用.<br/>
* 5.插入订单流水表.
*
* @param carNum
* @throws ParseException
*/
public OrderVO queryParkOrderForNotPay(String carNum) throws ParseException {
logger.info("---begin订单信息更新,carNum=" + carNum);
OrderVO orderVO = new OrderVO();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Map<String,String> resultmap = new HashMap<String,String>();
//1.查询支付订单
Order order = this.findOrderByCarNum(carNum);
logger.info("通过车牌号查询到的支付订单信息结果="+JSONObject.toJSON(order));
//2.调用查询费用接口
if (order != null && StringKit.isNotBlank(order.getOrderId())) {
resultmap = this.chosseBillQuery(carNum,order);
}
boolean orderUpdateFlg = false;
int updateOrderDetailFlg = 0;
//3.更新订单
if (resultmap != null && resultmap.size() >0){
Order updateOrder = new Order();
updateOrder.setId(order.getId());
updateOrder.setOrderId(order.getOrderId());
updateOrder.setOrderType(Integer.valueOf(PayOrderEnum.PAY_RESOURCE_TYPE_PARK.getValue()));
updateOrder.setOrderState(Integer.valueOf(OrderTypeEnum.ORDER_TYPE_2.value()));
updateOrder.setOrderPayedFee(new BigDecimal(resultmap.get("order_payed_fee")));
updateOrder.setOrderNotPayFee(new BigDecimal(resultmap.get("order_not_pay_fee")));
updateOrder.setOrderTotalFee(new BigDecimal(resultmap.get("order_total_fee")));
updateOrder.setModfiyDate(new Date());
/**更新订单表.*/
orderUpdateFlg = updateOrder.update();
logger.info("更新订单结果="+(orderUpdateFlg ==true ? "成功!" :"失败!"));
if (orderUpdateFlg) {
StringBuffer sqls = new StringBuffer("update td_b_order_detail_park a ");
sqls.append("set a.order_id =?,");
sqls.append("a.record_id=?,");
sqls.append("a.park_in_time=?,");
sqls.append("a.park_out_time =?,");
sqls.append("a.parking_duration=?,");
sqls.append("a.modfiy_date= ?,");
sqls.append("a.remark= '查询费用后更新'");
sqls.append(" where a.order_id =?");
/**更新订单明细表.*/
updateOrderDetailFlg = Db.use(DSEnum.ZF_DATASOURCE.name()).update(sqls.toString(),
order.getOrderId(),
resultmap.get("record_id"),
format.parse(resultmap.get("park_in_time")),
format.parse(resultmap.get("park_out_time")),
Long.valueOf(resultmap.get("parking_duration")),
new Date(),
order.getOrderId());
logger.info("更新停车订单明细结果="+(updateOrderDetailFlg > 0 ? "成功" : "失败"));
if (updateOrderDetailFlg > 0) {
//封装返回数据
orderVO.setOrderId(order.getOrderId());
orderVO.setParkId(order.getParkId());
orderVO.setParkName(resultmap.get("park_name"));
orderVO.setParkAddress(resultmap.get("park_address"));
orderVO.setCarNumber(order.getCarNumber());
orderVO.setOrderPayedFee(new BigDecimal(resultmap.get("order_payed_fee")));
orderVO.setOrderNotPayFee(new BigDecimal(resultmap.get("order_not_pay_fee")));
orderVO.setOrderTotalFee(new BigDecimal(resultmap.get("order_total_fee")));
orderVO.setOrderTitle("待付费用");
orderVO.setParkInTime(format.parse(resultmap.get("park_in_time")));
orderVO.setParkOutTime(format.parse(resultmap.get("park_out_time")));
orderVO.setParkingDuration(DateUtil.secondToTime(Long.valueOf(resultmap.get("parking_duration"))));
}
/**插入订单流水.*/
ParkOrderFlow parkOrderFlow = new ParkOrderFlow();
parkOrderFlow.setParkOrderFolwId(SequenceUtil.getNextOrderId(SequenceTypeEnum.ORDER_PARK_FLOW.value()));
parkOrderFlow.setParkOrderId(order.getOrderId());
parkOrderFlow.setProcTime(new Date());
parkOrderFlow.setProcResult(1);
parkOrderFlow.save();
}
}
logger.info("---end订单信息更新,结果=" +JSONObject.toJSON(orderVO));
return orderVO;
}
/**
* 查询费用艾润或者青岛路侧费用查询接口.<br/>
* @param carNum
* @return
*/
public Map<String, String> chosseBillQuery(String carNum,Order order){
OrderService orderService = Duang.duang(OrderService.class);
IRainQueryService iRainQueryService = Duang.duang(IRainQueryService.class);
Map<String, String> reultMap = new HashMap<String, String>();
if (order != null && StringKit.isNotBlank(order.getOrderId())) {
if("1".equals(String.valueOf(order.getSourceType()))){//道闸:调用艾润查询费用接口
/**调用艾润查询费用接口.*/
reultMap = iRainQueryService.billQuery(carNum, order.getParkId());
}else if("2".equals(String.valueOf(order.getSourceType()))
&& StringKit.isNotBlank(order.getOrderId())){//调用青岛路侧查询费用接口
/**查询停车记录id.*/
OrderDetailPark OrderDetailPark = orderService.queryDetailParkByOrderId(order.getOrderId());
if(OrderDetailPark != null && StringKit.isNotBlank(OrderDetailPark.getRecordId())){
/**调用青岛路侧费用查询接口.*/
reultMap =iRainQueryService.queryBillRoadside(OrderDetailPark.getRecordId());
}
}
}
return reultMap;
}
/**
* 通过车牌查询待核算支付单信息.<br/>
*
* @param
*/
public Order findOrderByCarNum(String carNum) {
//1.查询待支付订单
StringBuffer sql = new StringBuffer(
"select a.id, a.order_id,a.car_number,a.order_title,a.order_payed_fee,a.order_not_pay_fee,a"
+ ".order_total_fee,a.park_id");
sql.append(" from td_b_order a");
sql.append(" where a.order_state in(1,2,3)");
sql.append(" and a.car_number=?");
sql.append(" order by a.create_date DESC");
Order order = new Order().findFirst(sql.toString(), carNum);
return order;
}
}