Blame view

src/main/java/com/rnt/service/OrderService.java 12.7 KB
e80df919   atao   init
1
2
3
4
5
6
7
8
9
10
11
  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;
  
80db26ae   王富生   提交
12
  import com.alibaba.fastjson.JSONObject;
9a7cfd5c   atao   提交代码
13
  
e80df919   atao   init
14
15
16
17
18
19
20
  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;
e80df919   atao   init
21
22
23
24
25
26
  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;
80db26ae   王富生   提交
27
  import com.rnt.model.zf.OrderDetailPark;
e80df919   atao   init
28
29
  import com.rnt.model.zf.ParkOrderFlow;
  import com.rnt.model.zf.PayOrder;
e80df919   atao   init
30
31
  import com.rnt.utils.SequenceUtil;
  import com.rnt.vo.OrderVO;
9a7cfd5c   atao   提交代码
32
  import org.beetl.sql.core.kit.StringKit;
e80df919   atao   init
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  
  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)
9a7cfd5c   atao   提交代码
47
      public Boolean payOrderSuccess(String payOrderId, String transId) {
e80df919   atao   init
48
          logger.info("========支付成功后,修改单据状态==== start ====");
9a7cfd5c   atao   提交代码
49
          logger.info("========支付成功后,修改单据状态  入参为:payOrderId=" + payOrderId + "; transId=" + transId);
e80df919   atao   init
50
          //修改支付单状态
9a7cfd5c   atao   提交代码
51
52
          PayOrder payOrder = PayOrder.dao.findFirst("select * from td_b_pay_order t where t.pay_order_id = ?",
              payOrderId);
e80df919   atao   init
53
54
55
56
57
58
59
60
61
          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());
9a7cfd5c   atao   提交代码
62
          flag = flag & order.update();
e80df919   atao   init
63
64
65
66
67
68
69
70
71
          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);
9a7cfd5c   atao   提交代码
72
73
74
          //推送状态:1已推送,0:未推送
          //将卡卷信息推送状态设置为0: 未推送
          cardCoupons.setPushState(0);
e80df919   atao   init
75
76
          Integer orderType = order.getOrderType();
  
9a7cfd5c   atao   提交代码
77
          if (OrderTypeEnum.PARK_ORDER_TYPE_1.value().equals(orderType)) {
e80df919   atao   init
78
79
80
81
              /**停车订单*/
              /** 上面已将订单状态修改为已支付,无需后续操作了*/
              logger.info("停车订单修改,将订单状态修改为已支付");
  
9a7cfd5c   atao   提交代码
82
83
          } else if (OrderTypeEnum.PARK_ORDER_TYPE_2.value().equals(orderType) || OrderTypeEnum.PARK_ORDER_TYPE_3.value()
              .equals(orderType)) {
e80df919   atao   init
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
              /**年卡、月卡订单*/
              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);
              }
9a7cfd5c   atao   提交代码
101
          } else {
e80df919   atao   init
102
103
104
              logger.info("无法识别的订单类型 orderType=" + orderType);
          }
  
e80df919   atao   init
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
          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;
      }
9a7cfd5c   atao   提交代码
134
  
80db26ae   王富生   提交
135
136
      /**
       * 通过订单好
9a7cfd5c   atao   提交代码
137
       *
80db26ae   王富生   提交
138
139
140
       * @param orderId
       * @return
       */
9a7cfd5c   atao   提交代码
141
142
143
144
145
146
      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);
80db26ae   王富生   提交
147
148
          return orderDetailPark;
      }
e80df919   atao   init
149
150
151
152
153
154
155
156
157
158
159
160
161
  
      /**
       * 查询待支付的停车订单.<br/>
       * 步骤:
       * 1.查询待支付的订单
       * 1.调用艾润接口查询费用.<br/>
       * 3.更新订单费用.<br/>
       * 4.更新订单明细费用.<br/>
       * 5.插入订单流水表.
       *
       * @param carNum
       * @throws ParseException
       */
81145463   王富生   更改车牌号支付流程
162
163
      public OrderVO queryParkOrderForNotPay(String orderId) throws ParseException {
          logger.info("---begin订单信息更新,orderId=" + orderId);
e80df919   atao   init
164
165
          OrderVO orderVO = new OrderVO();
          SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
9a7cfd5c   atao   提交代码
166
          Map<String, String> resultmap = new HashMap<String, String>();
80db26ae   王富生   提交
167
          //1.查询支付订单
81145463   王富生   更改车牌号支付流程
168
          Order order = this.findOrderByOrderId(orderId);
9a7cfd5c   atao   提交代码
169
          logger.info("通过车牌号查询到的支付订单信息结果=" + JSONObject.toJSON(order));
80db26ae   王富生   提交
170
171
          //2.调用查询费用接口
          if (order != null && StringKit.isNotBlank(order.getOrderId())) {
9a7cfd5c   atao   提交代码
172
173
              resultmap = this.chosseBillQuery(order.getCarNumber(), order);
          }
e80df919   atao   init
174
175
176
          boolean orderUpdateFlg = false;
          int updateOrderDetailFlg = 0;
          //3.更新订单
9a7cfd5c   atao   提交代码
177
178
179
180
181
182
183
184
185
186
187
188
189
          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 ? "成功!" : "失败!"));
e80df919   atao   init
190
191
192
193
194
195
196
197
198
199
200
201
202
203
              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(),
80db26ae   王富生   提交
204
205
206
207
                      resultmap.get("record_id"),
                      format.parse(resultmap.get("park_in_time")),
                      format.parse(resultmap.get("park_out_time")),
                      Long.valueOf(resultmap.get("parking_duration")),
e80df919   atao   init
208
209
                      new Date(),
                      order.getOrderId());
9a7cfd5c   atao   提交代码
210
                  logger.info("更新停车订单明细结果=" + (updateOrderDetailFlg > 0 ? "成功" : "失败"));
80db26ae   王富生   提交
211
                  if (updateOrderDetailFlg > 0) {
9a7cfd5c   atao   提交代码
212
                      //封装返回数据
e80df919   atao   init
213
                      orderVO.setOrderId(order.getOrderId());
9a7cfd5c   atao   提交代码
214
                  }
80db26ae   王富生   提交
215
                  /**插入订单流水.*/
e80df919   atao   init
216
217
218
219
220
221
222
                  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();
  
9a7cfd5c   atao   提交代码
223
              }
e80df919   atao   init
224
          }
9a7cfd5c   atao   提交代码
225
226
  
          logger.info("---end订单信息更新,结果=" + JSONObject.toJSON(orderVO));
e80df919   atao   init
227
228
          return orderVO;
      }
9a7cfd5c   atao   提交代码
229
  
e80df919   atao   init
230
      /**
80db26ae   王富生   提交
231
       * 查询费用艾润或者青岛路侧费用查询接口.<br/>
9a7cfd5c   atao   提交代码
232
       *
80db26ae   王富生   提交
233
       * @param carNum
e80df919   atao   init
234
235
       * @return
       */
9a7cfd5c   atao   提交代码
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
      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())) {
              logger.info("查询费用来源=" + (order.getSourceType() == 2 ? "调用青岛路侧费用查询接口" : "调用艾润查询费用接口"));
              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());
                  }
e80df919   atao   init
253
  
9a7cfd5c   atao   提交代码
254
255
256
257
              }
          }
          return reultMap;
      }
80db26ae   王富生   提交
258
  
e80df919   atao   init
259
260
261
262
263
264
265
266
267
      /**
       * 通过车牌查询待核算支付单信息.<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"
81145463   王富生   更改车牌号支付流程
268
                  + ".order_total_fee,a.park_id,source_type,park_name");
e80df919   atao   init
269
270
271
          sql.append(" from td_b_order a");
          sql.append(" where a.order_state in(1,2,3)");
          sql.append(" and a.car_number=?");
81145463   王富生   更改车牌号支付流程
272
          sql.append(" and a.data_state=1");
e950ab14   王富生   提交
273
          sql.append(" order by a.create_date DESC");
e80df919   atao   init
274
275
  
          Order order = new Order().findFirst(sql.toString(), carNum);
e80df919   atao   init
276
277
278
  
          return order;
      }
9a7cfd5c   atao   提交代码
279
  
81145463   王富生   更改车牌号支付流程
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
      /**
       * 通过车牌查询待核算支付单信息.<br/>
       *
       * @param
       */
      public Order findOrderByOrderId(String orderId) {
          //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,source_type,park_name");
          sql.append(" from td_b_order a");
          sql.append(" where a.order_state in(1,2,3)");
          sql.append(" and a.order_id=?");
          sql.append(" and a.data_state=1");
          Order order = new Order().findFirst(sql.toString(), orderId);
          return order;
      }
e80df919   atao   init
297
  
e80df919   atao   init
298
  }