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 org.beetl.sql.core.kit.StringKit;
e80df919   atao   init
13
  
80db26ae   王富生   提交
14
  import com.alibaba.fastjson.JSONObject;
e80df919   atao   init
15
16
17
18
19
20
21
  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;
80db26ae   王富生   提交
22
  import com.rnt.commo.enums.ErrorType;
e80df919   atao   init
23
24
25
26
27
28
  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   王富生   提交
29
  import com.rnt.model.zf.OrderDetailPark;
e80df919   atao   init
30
31
32
33
34
  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;
e80df919   atao   init
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
  
  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;
      }
80db26ae   王富生   提交
134
135
136
137
138
139
140
141
142
143
144
145
146
147
      
      /**
       * 通过订单好
       * @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;
      }
e80df919   atao   init
148
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
       */
      public OrderVO queryParkOrderForNotPay(String carNum) throws ParseException {
80db26ae   王富生   提交
162
          logger.info("---begin订单信息更新,carNum=" + carNum);
e80df919   atao   init
163
164
          OrderVO orderVO = new OrderVO();
          SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
80db26ae   王富生   提交
165
166
          Map<String,String> resultmap = new HashMap<String,String>();
          //1.查询支付订单
e80df919   atao   init
167
          Order order = this.findOrderByCarNum(carNum);
80db26ae   王富生   提交
168
169
170
171
172
          logger.info("通过车牌号查询到的支付订单信息结果="+JSONObject.toJSON(order));
          //2.调用查询费用接口
          if (order != null && StringKit.isNotBlank(order.getOrderId())) {
          	resultmap = this.chosseBillQuery(carNum,order);
          } 
e80df919   atao   init
173
174
175
          boolean orderUpdateFlg = false;
          int updateOrderDetailFlg = 0;
          //3.更新订单
80db26ae   王富生   提交
176
177
          if (resultmap != null && resultmap.size() >0){
                  Order updateOrder = new Order();
e80df919   atao   init
178
179
180
181
                  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()));
80db26ae   王富生   提交
182
183
184
                  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")));
e80df919   atao   init
185
186
187
                  updateOrder.setModfiyDate(new Date());
                  /**更新订单表.*/
                  orderUpdateFlg = updateOrder.update();
80db26ae   王富生   提交
188
                  logger.info("更新订单结果="+(orderUpdateFlg ==true ? "成功!" :"失败!"));
e80df919   atao   init
189
190
191
192
193
194
195
196
197
198
199
200
201
202
              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   王富生   提交
203
204
205
206
                      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
207
208
                      new Date(),
                      order.getOrderId());
80db26ae   王富生   提交
209
210
211
                  logger.info("更新停车订单明细结果="+(updateOrderDetailFlg > 0 ? "成功" : "失败"));
                  if (updateOrderDetailFlg > 0) {
                  	//封装返回数据
e80df919   atao   init
212
213
                      orderVO.setOrderId(order.getOrderId());
                      orderVO.setParkId(order.getParkId());
80db26ae   王富生   提交
214
215
                      orderVO.setParkName(resultmap.get("park_name"));
                      orderVO.setParkAddress(resultmap.get("park_address"));
e80df919   atao   init
216
                      orderVO.setCarNumber(order.getCarNumber());
80db26ae   王富生   提交
217
218
219
                      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")));
e80df919   atao   init
220
                      orderVO.setOrderTitle("待付费用");
80db26ae   王富生   提交
221
222
223
224
225
                      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"))));
                  } 
                  /**插入订单流水.*/
e80df919   atao   init
226
227
228
229
230
231
232
                  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();
  
80db26ae   王富生   提交
233
              } 
e80df919   atao   init
234
          }
80db26ae   王富生   提交
235
236
      
          logger.info("---end订单信息更新,结果=" +JSONObject.toJSON(orderVO));
e80df919   atao   init
237
238
          return orderVO;
      }
80db26ae   王富生   提交
239
      
e80df919   atao   init
240
      /**
80db26ae   王富生   提交
241
242
       * 查询费用艾润或者青岛路侧费用查询接口.<br/>
       * @param carNum
e80df919   atao   init
243
244
       * @return
       */
6040c55c   王富生   提交
245
      public  Map<String, String>  chosseBillQuery(String carNum,Order order){
80db26ae   王富生   提交
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
      	 
      	 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;
e80df919   atao   init
266
267
      }
  
80db26ae   王富生   提交
268
269
     
  
e80df919   atao   init
270
271
272
273
274
275
276
277
278
279
280
281
282
      /**
       * 通过车牌查询待核算支付单信息.<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=?");
e950ab14   王富生   提交
283
          sql.append(" order by a.create_date DESC");
e80df919   atao   init
284
285
  
          Order order = new Order().findFirst(sql.toString(), carNum);
e950ab14   王富生   提交
286
287
          
          
e80df919   atao   init
288
289
290
291
292
293
  
          return order;
      }
  
  
  }