| @@ -2394,43 +2394,55 @@ public class WxOrderServiceImpl implements WxOrderService { | |||||
| @Override | @Override | ||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | ||||
| public int updateOrderStatus(WxOrder updateOrder, EnumOrderStatus enumOrderStatus) { | public int updateOrderStatus(WxOrder updateOrder, EnumOrderStatus enumOrderStatus) { | ||||
| Date currentDate = new Date(); | |||||
| WxOrder oldOrder = wxOrderMapper.selectById(updateOrder.getId(),updateOrder.getTenantId()); | |||||
| if ((!oldOrder.getOrderStatus().equals(enumOrderStatus.getCode())) && (!oldOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_OVERTIME_PAID_REFUND.getCode()))) { | |||||
| // 状态已更新,库存不退回, 保证不会多退 | |||||
| switch (enumOrderStatus) { | |||||
| case ORDER_STATUS_OVERTIME_CANCEL: // 支付取消,库存退回 | |||||
| case ORDER_STATUS_REFUND_SUCCESS: // 退款成功,库存退回 | |||||
| case ORDER_STATUS_COOPERATING_OVERTIME: // 拼团超时,退库存 | |||||
| case ORDER_STATUS_COOPERATING_CANCEL: // 拼团取消,退库存 | |||||
| case ORDER_STATUS_COOPERATING_COMPLETE: // 拼团完成,退库存 | |||||
| { | |||||
| try { | |||||
| stockBack(updateOrder); | |||||
| } catch (Exception e) { | |||||
| logger.error("库存+1失败, e:" + e.getMessage(),e); | |||||
| throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); | |||||
| String orderIdStr = updateOrder.getId() + "_" + enumOrderStatus.getCode(); | |||||
| //加锁 | |||||
| long time = System.currentTimeMillis() + RedisLock.LONG_TIMEOUT; | |||||
| String timeStr = String.valueOf(time); | |||||
| if (!redisLock.lock(orderIdStr, timeStr)) { | |||||
| logger.error("此订单被锁定, order: " + orderIdStr); | |||||
| throw new MallinkException(ErrorCode.TOO_MANY_REQUEST); | |||||
| } | |||||
| try{ | |||||
| WxOrder oldOrder = wxOrderMapper.selectById(updateOrder.getId(),updateOrder.getTenantId()); | |||||
| if ((!oldOrder.getOrderStatus().equals(enumOrderStatus.getCode())) | |||||
| && (!oldOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_OVERTIME_PAID_REFUND.getCode()))) { | |||||
| // 状态已更新,库存不退回, 保证不会多退 | |||||
| switch (enumOrderStatus) { | |||||
| case ORDER_STATUS_OVERTIME_CANCEL: // 支付取消,库存退回 | |||||
| case ORDER_STATUS_REFUND_SUCCESS: // 退款成功,库存退回 | |||||
| case ORDER_STATUS_COOPERATING_OVERTIME: // 拼团超时,退库存 | |||||
| case ORDER_STATUS_COOPERATING_CANCEL: // 拼团取消,退库存 | |||||
| case ORDER_STATUS_COOPERATING_COMPLETE: // 拼团完成,退库存 | |||||
| { | |||||
| try { | |||||
| stockBack(updateOrder); | |||||
| } catch (Exception e) { | |||||
| logger.error("库存+1失败, e:" + e.getMessage(),e); | |||||
| throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); | |||||
| } | |||||
| break; | |||||
| } | } | ||||
| break; | |||||
| } | } | ||||
| } | } | ||||
| }finally { | |||||
| redisLock.unlock(orderIdStr, timeStr); | |||||
| } | } | ||||
| WxOrder refOrder = new WxOrder(); | |||||
| refOrder.setId(updateOrder.getId()); | |||||
| refOrder.setOrderStatus(enumOrderStatus.getCode()); | |||||
| refOrder.setUpdateDate(currentDate); | |||||
| refOrder.updateTenantInfo(updateOrder); | |||||
| int ret = 0; | int ret = 0; | ||||
| try { | try { | ||||
| WxOrder refOrder = new WxOrder(); | |||||
| refOrder.setId(updateOrder.getId()); | |||||
| refOrder.setOrderStatus(enumOrderStatus.getCode()); | |||||
| refOrder.setUpdateDate(new Date()); | |||||
| refOrder.updateTenantInfo(updateOrder); | |||||
| ret = wxOrderMapper.updateById(refOrder); | ret = wxOrderMapper.updateById(refOrder); | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| logger.error("订单状态更新失败, e:" + e.getMessage(),e); | logger.error("订单状态更新失败, e:" + e.getMessage(),e); | ||||
| throw new MallinkException(ErrorCode.ORDER_UPDATE_ERR); | throw new MallinkException(ErrorCode.ORDER_UPDATE_ERR); | ||||
| } | } | ||||
| // if(ret == 1){ | |||||
| // //订单同步 | |||||
| // sendInsideOrderPushMsg(oldOrder,oldOrder.getComposeOrderId()); | |||||
| // } | |||||
| return ret; | return ret; | ||||
| } | } | ||||