| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.sandu.ximon.admin.service; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.sandu.common.execption.BusinessException; |
| | | import com.sandu.common.service.impl.BaseServiceImpl; |
| | | import com.sandu.ximon.admin.config.C3mRedisConfig; |
| | | import com.sandu.ximon.admin.pay.wx.WxFastPayService; |
| | | import com.sandu.ximon.admin.security.SecurityUtils; |
| | | import com.sandu.ximon.admin.security.order.OrderQueryListener; |
| | | import com.sandu.ximon.admin.security.order.OrderScanType; |
| | | import com.sandu.ximon.admin.utils.AliPayUtils; |
| | | import com.sandu.ximon.admin.utils.RedisUtils; |
| | | import com.sandu.ximon.admin.vo.C3mOrderVO; |
| | | import com.sandu.ximon.dao.domain.C3mCharging; |
| | | import com.sandu.ximon.dao.domain.C3mOrder; |
| | | import com.sandu.ximon.dao.domain.Pole; |
| | | import com.sandu.ximon.dao.enums.C3mRedisConstant; |
| | | import com.sandu.ximon.dao.enums.OrderStatus; |
| | | import com.sandu.ximon.dao.enums.OrderType; |
| | | import com.sandu.ximon.dao.mapper.C3mOrderMapper; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @Author liuhaonan |
| | | * @Date 2022/3/10 14:24 |
| | | * @Version 1.0 |
| | | */ |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class C3mOrderService extends BaseServiceImpl<C3mOrderMapper, C3mOrder> { |
| | | |
| | | private final RedisUtils redisUtils; |
| | | private final PoleService poleService; |
| | | private final C3mOrderMapper c3mOrderMapper; |
| | | private final WxFastPayService fastPayService; |
| | | private final OrderQueryListener orderQueryListener; |
| | | |
| | | public boolean orderRefund(String outTradeNo, Double refundAmount/*, Long userId, String username*/) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | String username = SecurityUtils.getUsername(); |
| | | C3mOrder orderByOutTradeNo = c3mOrderMapper.getOrderByOutTradeNo(outTradeNo); |
| | | if (orderByOutTradeNo.getTotalAmount() < refundAmount) { |
| | | throw new BusinessException("鿬¾éé¢é误,ä¸è½å¤§äºä»æ¬¾éé¢"); |
| | | } |
| | | if (null == orderByOutTradeNo) { |
| | | return false; |
| | | } else { |
| | | orderByOutTradeNo.setRefundAmount(refundAmount); |
| | | return c3mOrderRefund(orderByOutTradeNo, "页é¢API鿬¾", userId, username); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | private boolean c3mOrderRefund(C3mOrder C3mOrder, String msg, Long userId, String username) { |
| | | // è¿è¡é款ï¼è®¾ç½®è®¢åç¶æä¸ºå·²éæ¬¾ |
| | | boolean b = false; |
| | | if (C3mOrder.getOrderType().equals(OrderType.ALIPAY.getCode())) { |
| | | b = AliPayUtils.alipayrefund( |
| | | C3mOrder.getPoleId(), |
| | | C3mOrder.getOutTradeNo(), |
| | | C3mOrder.getRefundAmount()); |
| | | } else if (C3mOrder.getOrderType().equals(OrderType.WXPAY.getCode())) { |
| | | // è¿è¡å¾®ä¿¡é款 |
| | | b = fastPayService.refund( |
| | | C3mOrder.getTotalAmount(), |
| | | C3mOrder.getRefundAmount(), |
| | | C3mOrder.getOutTradeNo(), |
| | | C3mOrder.getPoleId() |
| | | ); |
| | | } |
| | | C3mOrder.setRefundTimestamp(new Date().getTime()); |
| | | C3mOrder.setRefundMsg(msg); |
| | | if (b) { |
| | | C3mOrder.setOrderStatus(OrderStatus.REFUND.getStatus()); |
| | | c3mOrderMapper.updateRefundOrder(C3mOrder); |
| | | /* logService.log( |
| | | userId, |
| | | ServerTask.SERVER_TASK, |
| | | "C3m订åå¤ç", |
| | | null, |
| | | "{ æä½è
("+username+")" + |
| | | "订å鿬¾: "+C3mOrder.getOutTradeNo() |
| | | +",è®¢åæ»éé¢:"+C3mOrder.getTotalAmount() |
| | | +",鿬¾éé¢: "+C3mOrder.getTotalAmount()+"}");*/ |
| | | return true; |
| | | } else { |
| | | C3mOrder.setOrderStatus(OrderStatus.REFUND_FAILED.getStatus()); |
| | | c3mOrderMapper.updateRefundOrder(C3mOrder); |
| | | /* logService.log( |
| | | userId, |
| | | ServerTask.SERVER_TASK, |
| | | "C3m订åå¤ç", |
| | | null, |
| | | "{ æä½è
("+username+")" + |
| | | "订å鿬¾(失败): "+C3mOrder.getOutTradeNo() |
| | | +",è®¢åæ»éé¢:"+C3mOrder.getTotalAmount() |
| | | +",鿬¾éé¢: "+C3mOrder.getTotalAmount()+"}");*/ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | public C3mOrder advancePayOrder(Long streetlightId, C3mCharging c3m, String orderType, Double totalAmount, |
| | | Integer subscribeChargingCapacity) { |
| | | |
| | | // å¤æè¯¥å
çµæ¡©æ¯å¦å卿£å¨è¿è¡ä¸ç订å |
| | | String chargingJson = redisUtils.get(C3mRedisConstant.C3_CHARGING_ORDER.getCode() + c3m.getC3Mac()); |
| | | if (null != chargingJson) { |
| | | return null; |
| | | } |
| | | Pole pole = poleService.getById(streetlightId); |
| | | if (null == pole) { |
| | | return null; |
| | | } |
| | | // çæè®¢åï¼å¹¶å è½½å°redisç¼åï¼è®¾ç½®è¶
æ¶æ¶é´ä¸º5åé |
| | | C3mOrder c3mOrderEntity = new C3mOrderVO().generateOrder( |
| | | streetlightId, |
| | | pole.getDeviceCode(), |
| | | c3m.getC3Mac(), |
| | | OrderType.getOrderType(orderType), |
| | | totalAmount, |
| | | subscribeChargingCapacity |
| | | ); |
| | | // å è½½å°redisç¼åä¸, æ¥è¯¢æ¨¡åèªå¨æ¥è¯¢ç¶æå¹¶å¤ç |
| | | boolean b = redisUtils.set( |
| | | C3mRedisConstant.C3_NO_PAY_ORDER.getCode() + c3m.getC3Mac() + c3mOrderEntity.getOutTradeNo(), |
| | | JSON.toJSONString(c3mOrderEntity), |
| | | C3mRedisConfig.ORDER_MAX_TIME |
| | | ); |
| | | // æ¨éå°èªå¨æ¥è¯¢æ¨¡åï¼è¿è¡æ«æå¯å¨ |
| | | orderQueryListener.startScan(OrderScanType.C3M.getType()); |
| | | return b ? c3mOrderEntity : null; |
| | | } |
| | | |
| | | |
| | | } |