|
|
@@ -2,12 +2,17 @@ package com.kym.service.enplus.impl;
|
|
|
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
+import com.kym.common.utils.IDGenerator;
|
|
|
import com.kym.entity.miniapp.ChargeOrder;
|
|
|
+import com.kym.entity.miniapp.WalletDetail;
|
|
|
import com.kym.service.enplus.EnNotifyService;
|
|
|
import com.kym.service.enplus.EnPlusService;
|
|
|
+import com.kym.service.miniapp.AccountService;
|
|
|
import com.kym.service.miniapp.ChargeOrderService;
|
|
|
+import com.kym.service.miniapp.WalletDetailService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
@@ -27,8 +32,17 @@ public class EnNotifyServiceImpl implements EnNotifyService {
|
|
|
@Autowired
|
|
|
private ChargeOrderService chargeOrderService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private AccountService accountService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IDGenerator idGenerator;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WalletDetailService walletDetailService;
|
|
|
+
|
|
|
/**
|
|
|
- * EN+ 设备状态变化推送
|
|
|
+ * EN+ 充电站状态变化推送
|
|
|
*
|
|
|
* @param json
|
|
|
* @return
|
|
|
@@ -47,11 +61,12 @@ public class EnNotifyServiceImpl implements EnNotifyService {
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public String handleNotificationStartChargeResult(JSONObject json) {
|
|
|
var data = enPlusService.signValidation(json);
|
|
|
var obj = JSONObject.parseObject(data);
|
|
|
var startChargeSeq = obj.getString("StartChargeSeq");
|
|
|
- var StartChargeSeqStat = obj.getIntValue("StartChargeSeqStat");
|
|
|
+ var startChargeSeqStat = obj.getIntValue("StartChargeSeqStat");
|
|
|
var connectorId = obj.getString("connectorId");
|
|
|
var startTime = obj.getString("StartTime");
|
|
|
|
|
|
@@ -59,7 +74,7 @@ public class EnNotifyServiceImpl implements EnNotifyService {
|
|
|
UpdateWrapper<ChargeOrder> updateWrapper = new UpdateWrapper<>();
|
|
|
updateWrapper.eq("connector_id", connectorId);
|
|
|
updateWrapper.eq("start_charge_seq", startChargeSeq);
|
|
|
- updateWrapper.set("charge_status", StartChargeSeqStat);
|
|
|
+ updateWrapper.set("charge_status", startChargeSeqStat);
|
|
|
updateWrapper.set("start_time", LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
chargeOrderService.update(updateWrapper);
|
|
|
return """
|
|
|
@@ -72,16 +87,111 @@ public class EnNotifyServiceImpl implements EnNotifyService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 推送启动充电结果
|
|
|
+ * 推送充电状态
|
|
|
*
|
|
|
* @param json
|
|
|
* @return
|
|
|
*/
|
|
|
- String handleNotificationStartChargeStatus(JSONObject json) {
|
|
|
- var data = enPlusService.signValidation(json);
|
|
|
- // TODO 业务逻辑处理 更新订单信息 扣费
|
|
|
- // 这里可能有坑,文档中为TotalSeviceMoney,正确的拼写为TotalServiceMoney
|
|
|
- return null;
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String handleNotificationEquipChargeStatus(JSONObject json) {
|
|
|
+ var dataStr = enPlusService.signValidation(json);
|
|
|
+ var data = JSONObject.parseObject(dataStr);
|
|
|
+ var startChargeSeq = data.getString("StartChargeSeq");
|
|
|
+ var chargeOrder = chargeOrderService.getChargingOrderByStartChargeSeq(startChargeSeq);
|
|
|
+ // 更新订单信息
|
|
|
+ chargeOrder.setSoc(data.getBigDecimal("Soc"));
|
|
|
+ chargeOrder.setTotalPower(data.getBigDecimal("TotalPower"));
|
|
|
+ chargeOrder.setTotalMoney(data.getBigDecimal("TotalMoney"));
|
|
|
+ chargeOrder.setElecMoney(data.getBigDecimal("ElecMoney"));
|
|
|
+ chargeOrder.setServiceMoney(data.getBigDecimal("SeviceMoney")); // 这里文档service单词错误,按文档填写
|
|
|
+ chargeOrder.setSumPeriod(data.getIntValue("SumPeriod"));
|
|
|
+ chargeOrder.setChargeDetail(data.getString("ChargeDetails"));
|
|
|
+ chargeOrder.setChargeStatus(data.getIntValue("StartChargeSeqStat"));
|
|
|
+ chargeOrderService.updateById(chargeOrder);
|
|
|
+ return """
|
|
|
+ {
|
|
|
+ "StartChargeSeq":%s,
|
|
|
+ "SuccStat":%d
|
|
|
+ }
|
|
|
+ """.formatted(startChargeSeq, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 推送停止充电结果
|
|
|
+ *
|
|
|
+ * @param json
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String handleNotificationStopChargeResult(JSONObject json) {
|
|
|
+ var dataStr = enPlusService.signValidation(json);
|
|
|
+ var data = JSONObject.parseObject(dataStr);
|
|
|
+ var startChargeSeq = data.getString("StartChargeSeq");
|
|
|
+ var chargeOrder = chargeOrderService.getChargingOrderByStartChargeSeq(startChargeSeq);
|
|
|
+ if (data.containsKey("SuccStat") && data.getIntValue("SuccStat") == 0) {
|
|
|
+ chargeOrder.setChargeStatus(data.getIntValue("StartChargeSeqStat"));
|
|
|
+ chargeOrderService.updateById(chargeOrder);
|
|
|
+ }
|
|
|
+ return """
|
|
|
+ {
|
|
|
+ "StartChargeSeq":%s,
|
|
|
+ "SuccStat":%d,
|
|
|
+ "FailReason":%d
|
|
|
+ }
|
|
|
+ """.formatted(startChargeSeq, 0, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 推送充电订单信息
|
|
|
+ *
|
|
|
+ * @param json
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String handleNotificationChargeOrderInfo(JSONObject json) {
|
|
|
+ var dataStr = enPlusService.signValidation(json);
|
|
|
+ var data = JSONObject.parseObject(dataStr);
|
|
|
+ var startChargeSeq = data.getString("StartChargeSeq");
|
|
|
+ var chargeOrder = chargeOrderService.getChargingOrderByStartChargeSeq(startChargeSeq);
|
|
|
+ // 更新订单信息
|
|
|
+ chargeOrder.setEndTime(LocalDateTime.parse(data.getString("EndTime"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ chargeOrder.setTotalPower(data.getBigDecimal("TotalPower"));
|
|
|
+ chargeOrder.setElecMoney(data.getBigDecimal("TotalElecMoney"));
|
|
|
+ chargeOrder.setServiceMoney(data.getBigDecimal("TotalSeviceMoney")); // 这里文档service单词错误,按文档填写
|
|
|
+ chargeOrder.setTotalMoney(data.getBigDecimal("TotalMoney"));
|
|
|
+ chargeOrder.setStopReason(data.getIntValue("StopReason"));
|
|
|
+ chargeOrder.setSumPeriod(data.getIntValue("SumPeriod"));
|
|
|
+ chargeOrder.setChargeDetail(data.getString("ChargeDetails"));
|
|
|
+ chargeOrder.setOrderStatus(1);
|
|
|
+ chargeOrderService.updateById(chargeOrder);
|
|
|
+
|
|
|
+ // 扣费
|
|
|
+ var account = accountService.getAccountByUserId(chargeOrder.getUserId());
|
|
|
+ account.setBalance(account.getBalance().subtract(chargeOrder.getTotalMoney()));
|
|
|
+ accountService.save(account);
|
|
|
+
|
|
|
+ // 记录资金流水
|
|
|
+ var walletDetail = new WalletDetail();
|
|
|
+ walletDetail.setId(idGenerator.nextId());
|
|
|
+ walletDetail.setUserId(chargeOrder.getUserId());
|
|
|
+ walletDetail.setOrderNo(startChargeSeq);
|
|
|
+ walletDetail.setType(3);
|
|
|
+ walletDetail.setAmount(chargeOrder.getTotalMoney());
|
|
|
+ walletDetail.setTransactionTime(LocalDateTime.parse(data.getString("EndTime"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ walletDetail.setStatus(1);
|
|
|
+ walletDetailService.save(walletDetail);
|
|
|
+ return """
|
|
|
+ {
|
|
|
+ "StartChargeSeq":%s,
|
|
|
+ "ConnectorID":%s,
|
|
|
+ "ConfirmResult":%d
|
|
|
+ }
|
|
|
+ """.formatted(startChargeSeq, chargeOrder.getConnectorId(), 0);
|
|
|
}
|
|
|
|
|
|
|