diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java
index d5ee2b825..98443c8bb 100644
--- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java
+++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java
@@ -50,7 +50,7 @@ public class OrderController extends BaseController {
*/
@PostMapping("/generateOrder")
public RestApiResponse> generateOrder(HttpServletRequest request, @RequestBody GenerateOrderDTO dto) {
- logger.info("生成订单 param:{}", JSON.toJSONString(dto));
+ // logger.info("生成订单 param:{}", JSON.toJSONString(dto));
RestApiResponse> response;
try {
if ((StringUtils.isBlank(dto.getPileSn()) || StringUtils.isBlank(dto.getConnectorCode())) && StringUtils.isBlank(dto.getPileConnectorCode())) {
@@ -80,7 +80,7 @@ public class OrderController extends BaseController {
logger.error("生成订单 error, param:{}", JSON.toJSONString(dto), e);
response = new RestApiResponse<>(ReturnCodeEnum.CODE_GENERATE_ORDER_ERROR);
}
- logger.info("生成订单 result:{}", JSON.toJSONString(response));
+ logger.info("生成订单, param:{}, result:{}", JSON.toJSONString(dto), JSON.toJSONString(response));
return response;
}
@@ -137,7 +137,7 @@ public class OrderController extends BaseController {
*/
@PostMapping("/getOrderList")
public RestApiResponse> getOrderInfo(HttpServletRequest request, @RequestBody UniAppQueryOrderDTO dto) {
- logger.info("查询订单信息 param:{}", JSON.toJSONString(dto));
+ // logger.info("查询订单信息 param:{}", JSON.toJSONString(dto));
RestApiResponse> response = null;
try {
String memberId = getMemberIdByAuthorization(request);
@@ -154,7 +154,7 @@ public class OrderController extends BaseController {
logger.error("查询订单信息 error", e);
response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_ORDER_INFO_BY_MEMBER_ID_ERROR);
}
- logger.info("查询订单信息, result:{}", JSON.toJSONString(response));
+ logger.info("查询订单信息, param:{}, result:{}", JSON.toJSONString(dto), JSON.toJSONString(response));
return response;
}
@@ -167,7 +167,7 @@ public class OrderController extends BaseController {
*/
@PostMapping("/getOrderDetail")
public RestApiResponse> getOrderDetail(HttpServletRequest request, @RequestBody UniAppQueryOrderDTO dto) {
- logger.info("小程序获取订单详情 param:{}", JSON.toJSONString(dto));
+ // logger.info("小程序获取订单详情 param:{}", JSON.toJSONString(dto));
RestApiResponse> response = null;
try {
String memberId = getMemberIdByAuthorization(request);
@@ -194,27 +194,27 @@ public class OrderController extends BaseController {
* @param dto
* @return
*/
- @PostMapping("/getOrderDetailV2")
- public RestApiResponse> getOrderDetailV2(HttpServletRequest request, @RequestBody UniAppQueryOrderDTO dto) {
- logger.info("小程序获取订单详情V2 param:{}", JSON.toJSONString(dto));
- RestApiResponse> response = null;
- try {
- String memberId = getMemberIdByAuthorization(request);
- if (StringUtils.isBlank(memberId)) {
- throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR);
- }
- UniAppOrderDetailVO uniAppOrderDetail = orderService.getUniAppOrderDetailV2(dto.getOrderCode());
- response = new RestApiResponse<>(uniAppOrderDetail);
- } catch (BusinessException e) {
- logger.warn("小程序获取订单详情V2 warn", e);
- response = new RestApiResponse<>(e.getCode(), e.getMessage());
- } catch (Exception e) {
- logger.error("小程序获取订单详情V2 error", e);
- response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_ORDER_DETAIL_ERROR);
- }
- logger.info("小程序获取订单详情V2, result:{}", JSON.toJSONString(response));
- return response;
- }
+ // @PostMapping("/getOrderDetailV2")
+ // public RestApiResponse> getOrderDetailV2(HttpServletRequest request, @RequestBody UniAppQueryOrderDTO dto) {
+ // logger.info("小程序获取订单详情V2 param:{}", JSON.toJSONString(dto));
+ // RestApiResponse> response = null;
+ // try {
+ // String memberId = getMemberIdByAuthorization(request);
+ // if (StringUtils.isBlank(memberId)) {
+ // throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR);
+ // }
+ // UniAppOrderDetailVO uniAppOrderDetail = orderService.getUniAppOrderDetailV2(dto.getOrderCode());
+ // response = new RestApiResponse<>(uniAppOrderDetail);
+ // } catch (BusinessException e) {
+ // logger.warn("小程序获取订单详情V2 warn", e);
+ // response = new RestApiResponse<>(e.getCode(), e.getMessage());
+ // } catch (Exception e) {
+ // logger.error("小程序获取订单详情V2 error", e);
+ // response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_ORDER_DETAIL_ERROR);
+ // }
+ // logger.info("小程序获取订单详情V2, result:{}", JSON.toJSONString(response));
+ // return response;
+ // }
/**
* 根据订单号查询充电桩启动状态
@@ -268,7 +268,7 @@ public class OrderController extends BaseController {
*/
@PostMapping("/closeStartFailedOrder")
public RestApiResponse> closeStartFailedOrder(@RequestBody QueryOrderDTO dto) {
- logger.info("关闭支付未启动的订单 param:{}", JSON.toJSONString(dto));
+ // logger.info("关闭支付未启动的订单 param:{}", JSON.toJSONString(dto));
RestApiResponse> response = null;
try {
orderService.closeStartFailedOrder(dto);
@@ -277,7 +277,7 @@ public class OrderController extends BaseController {
logger.error("关闭支付未启动的订单 error", e);
response = new RestApiResponse<>("00300002", "关闭支付未启动的订单异常");
}
- logger.info("关闭支付未启动的订单 result:{}", response);
+ logger.info("关闭支付未启动的订单, param:{}, result:{}", JSON.toJSONString(dto), response);
return response;
}
@@ -305,6 +305,7 @@ public class OrderController extends BaseController {
logger.error("查询未开发票订单 error", e);
response = new RestApiResponse<>("00300003", "查询未开发票订单异常");
}
+ logger.info("查询未开发票订单 param:{}, result:{}", JSON.toJSONString(dto), JSON.toJSONString(response));
return response;
}
@@ -317,7 +318,7 @@ public class OrderController extends BaseController {
*/
@PostMapping("/queryUninvoicedStationList")
public RestApiResponse> queryUninvoicedStationList(HttpServletRequest request, @RequestBody QueryOrderDTO dto) {
- logger.info("查询未开发票的站点list param:{}", JSON.toJSONString(dto));
+ // logger.info("查询未开发票的站点list param:{}", JSON.toJSONString(dto));
RestApiResponse> response;
try {
String memberId = getMemberIdByAuthorization(request);
@@ -334,6 +335,7 @@ public class OrderController extends BaseController {
logger.error("查询未开发票的站点list error", e);
response = new RestApiResponse<>("00300004", "查询未开发票的站点list异常");
}
+ logger.info("查询未开发票的站点list param:{}, result:{}", JSON.toJSONString(dto), JSON.toJSONString(response));
return response;
}
diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java
index 99b0d8075..ed35d10e2 100644
--- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java
+++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java
@@ -13,6 +13,8 @@ import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.dto.*;
import com.jsowell.pile.service.PileBasicInfoService;
import com.jsowell.pile.service.PileMerchantInfoService;
+import com.jsowell.pile.service.PileReservationInfoService;
+import com.jsowell.pile.vo.PileReservationInfoVO;
import com.jsowell.pile.vo.uniapp.customer.PersonPileConnectorSumInfoVO;
import com.jsowell.pile.vo.uniapp.customer.PersonPileRealTimeVO;
import com.jsowell.pile.vo.uniapp.customer.PersonalPileInfoVO;
@@ -43,6 +45,9 @@ public class PersonPileController extends BaseController {
@Autowired
private PileBasicInfoService pileBasicInfoService;
+ @Autowired
+ private PileReservationInfoService pileReservationInfoService;
+
/**
* 用户绑定个人桩
@@ -117,7 +122,7 @@ public class PersonPileController extends BaseController {
if (StringUtils.isNotBlank(appId)) {
String firstLevelMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByWxAppId(appId);
if (StringUtils.isNotBlank(firstLevelMerchantId)) {
- dto.setMerchantId(firstLevelMerchantId);
+ dto.setFirstLevelMerchantId(firstLevelMerchantId);
}
}
String memberId = getMemberIdByAuthorization(request);
@@ -136,6 +141,8 @@ public class PersonPileController extends BaseController {
}
+
+
/**
* 通过memberId查个人桩列表
*
@@ -162,7 +169,6 @@ public class PersonPileController extends BaseController {
/**
* 获取枪口实时数据
- *
* http://localhost:8080/uniapp/personalPile/getConnectorRealTimeInfo
*
* @param request
@@ -171,7 +177,6 @@ public class PersonPileController extends BaseController {
*/
@PostMapping("/getConnectorRealTimeInfo")
public RestApiResponse> getConnectorRealTimeInfo(HttpServletRequest request, @RequestBody QueryPersonPileDTO dto) {
- logger.info("获取个人桩枪口实时数据 params:{}", JSON.toJSONString(dto));
RestApiResponse> response = null;
try {
String memberId = getMemberIdByAuthorization(request);
@@ -179,13 +184,13 @@ public class PersonPileController extends BaseController {
PersonPileRealTimeVO connectorRealTimeInfo = pileService.getConnectorRealTimeInfo(dto);
response = new RestApiResponse<>(connectorRealTimeInfo);
} catch (BusinessException e) {
- logger.error("获取个人桩枪口实时数据 error", e);
+ logger.error("获取个人桩枪口实时数据 warn:{}", e.getMessage());
response = new RestApiResponse<>(e.getCode(), e.getMessage());
} catch (Exception e) {
logger.error("获取个人桩枪口实时数据 error", e);
response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_PERSONAL_PILE_CONNECTOR_INFO_ERROR);
}
- logger.info("获取个人桩枪口实时数据 result:{}", response);
+ logger.info("获取个人桩枪口实时数据 params:{}, result:{}", JSON.toJSONString(dto), JSON.toJSONString(response));
return response;
}
@@ -248,7 +253,7 @@ public class PersonPileController extends BaseController {
}
/**
- * 个人桩启动充电
+ * 个人桩启动充电/个人桩一键启动
* http://localhost:8080/uniapp/personalPile/startPersonalPileCharging
*/
@PostMapping("/startPersonalPileCharging")
@@ -268,25 +273,56 @@ public class PersonPileController extends BaseController {
logger.error("个人桩启动充电error, params:{}", dto, e);
} catch (Exception e) {
logger.error("个人桩启动充电error, params:{}", dto, e);
- response = new RestApiResponse<>(ReturnCodeEnum.CODE_CREATE_RESERVED_ERROR);
+ response = new RestApiResponse<>(ReturnCodeEnum.CODE_START_PERSONAL_PILE_CHARGING_ERROR);
}
logger.info("个人桩启动充电params:{}, result:{}", dto, response);
return response;
}
+ /**
+ * 个人桩停止充电
+ * http://localhost:8080/uniapp/personalPile/personPileStopCharging
+ * 管理员可以停自己启动的和别人启动的
+ * 其他人员只能停止自己启动的
+ */
+ @PostMapping("/personPileStopCharging")
+ public RestApiResponse> personPileStopCharging(HttpServletRequest request, @RequestBody PersonPileStopChargingDTO dto) {
+ RestApiResponse> response = null;
+ try {
+ String appId = request.getHeader("appId");
+ if (StringUtils.isNotBlank(appId)) {
+ String firstLevelMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByWxAppId(appId);
+ if (StringUtils.isNotBlank(firstLevelMerchantId)) {
+ dto.setFirstLevelMerchantId(firstLevelMerchantId);
+ }
+ }
+ String memberId = getMemberIdByAuthorization(request);
+ dto.setMemberId(memberId);
+ pileReservationInfoService.personPileStopCharging(dto);
+ response = new RestApiResponse<>();
+ } catch (BusinessException e) {
+ logger.error("个人桩停止充电error", e);
+ response = new RestApiResponse<>(e.getCode(), e.getMessage());
+ } catch (Exception e) {
+ logger.error("个人桩停止充电error", e);
+ response = new RestApiResponse<>(ReturnCodeEnum.CODE_PERSON_PILE_STOP_CHARGING_ERROR);
+ }
+ return response;
+ }
+
+
/**
* 添加预约充电
* http://localhost:8080/uniapp/personalPile/createReserved
*/
@PostMapping("/createReserved")
public RestApiResponse> createReserved(HttpServletRequest request, @RequestBody CreateReservedDTO dto) {
- // logger.info("修改预约充电状态params:{}", dto);
RestApiResponse> response = null;
try {
String memberId = getMemberIdByAuthorization(request);
dto.setMemberId(memberId);
- int reservedId = pileService.createReserved(dto);
+ int reservedId = pileReservationInfoService.createReservation(dto);
response = new RestApiResponse<>(ImmutableMap.of("reservedId", reservedId));
} catch (BusinessException e) {
logger.error("添加预约充电error, params:{}", dto, e);
@@ -305,12 +341,11 @@ public class PersonPileController extends BaseController {
*/
@PostMapping("/queryReservedList")
public RestApiResponse> queryReservedList(HttpServletRequest request, @RequestBody PileReservationDTO dto) {
- // logger.info("修改预约充电状态params:{}", dto);
RestApiResponse> response = null;
try {
String memberId = getMemberIdByAuthorization(request);
dto.setMemberId(memberId);
- PageResponse pageResponse = pileService.queryReservedList(dto);
+ PageResponse pageResponse = pileReservationInfoService.queryReservationList(dto);
response = new RestApiResponse<>(pageResponse);
} catch (BusinessException e) {
logger.error("查询预约列表error, params:{}", dto, e);
@@ -323,18 +358,40 @@ public class PersonPileController extends BaseController {
return response;
}
+ /**
+ * 修改预约充电
+ * http://localhost:8080/uniapp/personalPile/updateReservation
+ */
+ @PostMapping("/updateReservation")
+ public RestApiResponse> updateReservation(HttpServletRequest request, @RequestBody PileReservationDTO dto) {
+ RestApiResponse> response = null;
+ try {
+ String memberId = getMemberIdByAuthorization(request);
+ dto.setMemberId(memberId);
+ pileReservationInfoService.updateReservation(dto);
+ response = new RestApiResponse<>();
+ } catch (BusinessException e) {
+ logger.error("修改预约充电信息error, params:{}", dto, e);
+ response = new RestApiResponse<>(e.getCode(), e.getMessage());
+ } catch (Exception e) {
+ logger.error("修改预约充电信息error, params:{}", dto, e);
+ response = new RestApiResponse<>(ReturnCodeEnum.CODE_UPDATE_RESERVED_STATUS_ERROR);
+ }
+ logger.info("修改预约充电信息params:{}, result:{}", dto, response);
+ return response;
+ }
+
/**
* 修改预约充电状态
* http://localhost:8080/uniapp/personalPile/updateReservedStatus
*/
@PostMapping("/updateReservedStatus")
public RestApiResponse> updateReservedStatus(HttpServletRequest request, @RequestBody PileReservationDTO dto) {
- // logger.info("修改预约充电状态params:{}", dto);
RestApiResponse> response = null;
try {
String memberId = getMemberIdByAuthorization(request);
dto.setMemberId(memberId);
- pileService.updateReservedStatus(dto);
+ pileReservationInfoService.updateReservationStatus(dto);
response = new RestApiResponse<>();
} catch (BusinessException e) {
logger.error("修改预约充电状态error, params:{}", dto, e);
@@ -353,23 +410,43 @@ public class PersonPileController extends BaseController {
*/
@PostMapping("/deleteReservation")
public RestApiResponse> deleteReservation(HttpServletRequest request, @RequestBody PileReservationDTO dto) {
- // logger.info("修改预约充电状态params:{}", dto);
RestApiResponse> response = null;
try {
String memberId = getMemberIdByAuthorization(request);
dto.setMemberId(memberId);
- pileService.deleteReservation(dto);
+ pileReservationInfoService.deleteReservation(dto);
response = new RestApiResponse<>();
} catch (BusinessException e) {
- logger.error("修改预约充电状态error, params:{}", dto, e);
+ logger.error("删除预约error, params:{}", dto, e);
response = new RestApiResponse<>(e.getCode(), e.getMessage());
} catch (Exception e) {
- logger.error("修改预约充电状态error, params:{}", dto, e);
+ logger.error("删除预约error, params:{}", dto, e);
response = new RestApiResponse<>(ReturnCodeEnum.CODE_UPDATE_RESERVED_STATUS_ERROR);
}
- logger.info("修改预约充电状态params:{}, result:{}", dto, response);
+ logger.info("删除预约params:{}, result:{}", dto, response);
return response;
}
-
+ /**
+ * 根据充电桩查询预约信息
+ * http://localhost:8080/uniapp/personalPile/queryReservationInfo
+ */
+ @PostMapping("/queryReservationInfo")
+ public RestApiResponse> queryReservationInfo(HttpServletRequest request, @RequestBody PileReservationDTO dto) {
+ RestApiResponse> response = null;
+ try {
+ String memberId = getMemberIdByAuthorization(request);
+ dto.setMemberId(memberId);
+ PileReservationInfoVO vo = pileReservationInfoService.queryReservationInfo(dto);
+ response = new RestApiResponse<>(vo);
+ } catch (BusinessException e) {
+ logger.error("根据充电桩查询预约状态error, params:{}", dto, e);
+ response = new RestApiResponse<>(e.getCode(), e.getMessage());
+ } catch (Exception e) {
+ logger.error("根据充电桩查询预约状态error, params:{}", dto, e);
+ response = new RestApiResponse<>(ReturnCodeEnum.CODE_QUERY_RESERVATION_STATUS_ERROR);
+ }
+ logger.info("根据充电桩查询预约状态params:{}, result:{}", dto, response);
+ return response;
+ }
}
diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java
index 765b38bb6..a7a2f25ff 100644
--- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java
+++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java
@@ -557,12 +557,29 @@ public class OrderService {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
}
+ String pileSn = orderBasicInfo.getPileSn();
+ String connectorCode = orderBasicInfo.getConnectorCode();
+
+ // 异步发送获取实时数据指令
+ if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.IN_THE_CHARGING.getValue())) {
+ CompletableFuture.runAsync(() -> {
+ try {
+ pileRemoteService.getRealTimeMonitorData(pileSn, connectorCode);
+ } catch (Exception e) {
+ log.error("异步发送获取实时数据指令error", e);
+ }
+ });
+ }
+
vo.setOrderCode(orderBasicInfo.getOrderCode());
- vo.setPileSn(orderBasicInfo.getPileSn());
- vo.setConnectorCode(orderBasicInfo.getConnectorCode());
- vo.setPileConnectorCode(orderBasicInfo.getPileSn() + orderBasicInfo.getConnectorCode());
+ vo.setPileSn(pileSn);
+ vo.setConnectorCode(connectorCode);
+ vo.setPileConnectorCode(pileSn + connectorCode);
String orderStatus = orderBasicInfo.getOrderStatus();
vo.setOrderStatus(orderStatus);
+ // 订单状态描述
+ String orderStatusDescribe = orderBasicInfoService.transformOrderStatusDescribe(orderStatus, orderBasicInfo.getPayStatus());
+ vo.setOrderStatusDescribe(orderStatusDescribe);
if (Objects.nonNull(orderBasicInfo.getChargeStartTime())) {
vo.setStartChargingTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, orderBasicInfo.getChargeStartTime()));
}
@@ -583,9 +600,6 @@ public class OrderService {
if (StringUtils.isNotBlank(String.valueOf(stationInfo.getOccupyFee()))) {
vo.setOccupyFee(stationInfo.getOccupyFee());
}
- // 订单状态描述
- String orderStatusDescribe = orderBasicInfoService.transformOrderStatusDescribe(orderStatus, orderBasicInfo.getPayStatus());
- vo.setOrderStatusDescribe(orderStatusDescribe);
// 获取充电桩枪口信息
PileConnectorDetailVO pileConnectorDetailVO = pileService.queryPileConnectorDetail(vo.getPileConnectorCode());
@@ -661,19 +675,6 @@ public class OrderService {
return vo;
}
- /**
- * 小程序订单详情V2
- *
- * @param orderCode
- * @return
- */
- public UniAppOrderDetailVO getUniAppOrderDetailV2(String orderCode) {
- UniAppOrderDetailVO resultVO = new UniAppOrderDetailVO();
-
-
- return resultVO;
- }
-
/**
* 根据订单号查询充电桩启动状态
*
diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java
index a125815ee..96d879290 100644
--- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java
+++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java
@@ -20,7 +20,6 @@ import com.jsowell.pile.util.SnUtils;
import com.jsowell.pile.service.*;
import com.jsowell.pile.transaction.dto.PileTransactionDTO;
import com.jsowell.pile.transaction.service.TransactionService;
-import com.jsowell.pile.vo.PileReservedVO;
import com.jsowell.pile.vo.base.ConnectorInfoVO;
import com.jsowell.pile.vo.base.MerchantInfoVO;
import com.jsowell.pile.vo.base.PileInfoVO;
@@ -40,7 +39,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
-import java.sql.Time;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
@@ -339,7 +337,7 @@ public class PileService {
*/
public void adminIssuePile(PileMemberBindingDTO dto) {
// 通过前端传的手机号查询是否有此用户
- MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(dto.getPhoneNumber(), dto.getMerchantId());
+ MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(dto.getPhoneNumber(), dto.getFirstLevelMerchantId());
if (memberBasicInfo == null) {
// 为空说明此用户未注册平台账号
throw new BusinessException(ReturnCodeEnum.CODE_USER_IS_NOT_REGISTER);
@@ -377,7 +375,7 @@ public class PileService {
PileMemberRelation info = new PileMemberRelation();
info.setPileSn(dto.getPileSn());
info.setMemberId(memberBasicInfo.getMemberId());
- info.setType("2");
+ info.setType(Constants.TWO);
pileMemberRelationService.insertPileMemberRelation(info);
}
}
@@ -390,7 +388,7 @@ public class PileService {
public PersonPileRealTimeVO getConnectorRealTimeInfo(QueryPersonPileDTO dto) {
// 根据memberId查出该用户 正在充电、个人桩启动(白名单支付方式)的订单号
OrderBasicInfo orderBasicInfo = OrderBasicInfo.builder()
- .memberId(dto.getMemberId())
+ // .memberId(dto.getMemberId())
.orderStatus(OrderStatusEnum.IN_THE_CHARGING.getValue())
.pileConnectorCode(dto.getPileConnectorCode())
.payMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue()) // 3- 白名单支付
@@ -399,7 +397,6 @@ public class PileService {
if (basicInfo == null){
throw new BusinessException(ReturnCodeEnum.CODE_NO_CHARGING_ORDER_ERROR);
}
- String orderCode = basicInfo.getOrderCode();
// 根据订单号从redis中获取实时数据信息(默认时间倒叙排列,所以取第一条)
List chargingRealTimeData = orderBasicInfoService.getChargingRealTimeData(basicInfo.getTransactionCode());
if (CollectionUtils.isEmpty(chargingRealTimeData)) {
@@ -414,6 +411,8 @@ public class PileService {
.instantCurrent(realTimeMonitorData.getOutputCurrent())
.instantVoltage(realTimeMonitorData.getOutputVoltage())
.instantPower(realTimeMonitorData.getOutputPower())
+ .status(orderBasicInfo.getOrderStatus())
+ .soc(realTimeMonitorData.getSOC())
.build();
return vo;
}
@@ -569,60 +568,6 @@ public class PileService {
}
}
- public int createReserved(CreateReservedDTO dto) {
- PileReservationInfo reservedInfo = new PileReservationInfo();
- reservedInfo.setMemberId(dto.getMemberId());
- reservedInfo.setPileSn(dto.getPileSn());
- reservedInfo.setPileConnectorCode(dto.getPileConnectorCode());
- reservedInfo.setStatus(Constants.ZERO); // 默认未生效
- // reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime()));
- reservedInfo.setStartTime(Time.valueOf(dto.getStartTime()));
- // reservedInfo.setEndTime(DateUtils.parseDate(dto.getEndTime()));
- if (StringUtils.isNotBlank(dto.getEndTime())) {
- reservedInfo.setEndTime(Time.valueOf(dto.getEndTime()));
- }
- if (StringUtils.isNotBlank(dto.getFreq())) {
- reservedInfo.setReservationType("recurring");
- reservedInfo.setFreq(dto.getFreq());
- } else {
- reservedInfo.setReservationType("single");
- reservedInfo.setFreq(null);
- }
- reservedInfo.setCreateBy(dto.getMemberId());
- pileReservationInfoService.insertSelective(reservedInfo);
- return reservedInfo.getId();
- }
-
- public PageResponse queryReservedList(PileReservationDTO dto) {
- int pageNo = dto.getPageNo() == null ? Constants.one : dto.getPageNo();
- int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize();
- PageHelper.startPage(pageNo, pageSize);
- List list = pileReservationInfoService.getReservationsByMemberIdAndPileSn(dto.getMemberId(), dto.getPileSn());
- PageInfo pageInfo = new PageInfo<>(list);
-
- PageResponse pageResponse = new PageResponse();
- pageResponse.setPageNum(pageInfo.getPageNum());
- pageResponse.setPageSize(pageInfo.getPageSize());
- pageResponse.setPages(pageInfo.getPages());
- pageResponse.setTotal(pageInfo.getTotal());
-
- List resultList = Lists.newArrayList();
- for (PileReservationInfo reservedInfo : pageInfo.getList()) {
- resultList.add(
- PileReservedVO.builder()
- .reservedId(reservedInfo.getId() + "")
- .pileSn(reservedInfo.getPileSn())
- .startTime(reservedInfo.getStartTime().toString())
- .endTime(reservedInfo.getEndTime().toString())
- .freq(reservedInfo.getFreq())
- .status(reservedInfo.getStatus())
- .build()
- );
- }
- pageResponse.setList(resultList);
- return pageResponse;
- }
-
public void deleteReservation(PileReservationDTO dto) {
pileReservationInfoService.deleteReservation(dto);
}
@@ -656,4 +601,5 @@ public class PileService {
// System.out.println(i);
return String.valueOf(i);
}
+
}
diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java
index 6bf4fb91e..437ea31b8 100644
--- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java
+++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java
@@ -111,4 +111,14 @@ public class OrderPileOccupyController extends BaseController {
// {
// return toAjax(orderPileOccupyService.deleteByPrimaryKey(ids));
// }
+
+ /**
+ * 重新计算占桩金额
+ * retryCalculateOccupyPileOrderAmount
+ */
+ @PreAuthorize("@ss.hasPermi('pile:occupy:edit')")
+ @PostMapping("/retryCalculateOccupyPileOrderAmount")
+ public AjaxResult retryCalculateOccupyPileOrderAmount(@RequestBody MakeOrderFreeDTO dto) {
+ return toAjax(orderPileOccupyService.retryCalculateOccupyPileOrderAmount(dto.getOccupyCode()));
+ }
}
diff --git a/jsowell-admin/src/main/resources/application.yml b/jsowell-admin/src/main/resources/application.yml
index de9bc248c..a11aaecb3 100644
--- a/jsowell-admin/src/main/resources/application.yml
+++ b/jsowell-admin/src/main/resources/application.yml
@@ -106,6 +106,7 @@ weixin:
sendMsg:
startChargingTmpId: BGgZe98QHr0I1S1GrtGps0y3uhvURtQNkbMAzI2D8g8
stopChargingTmpId: UyBPbADlZfsCj89rh_xvfR2ZP1iwtmPcMFA0sUOJwog
+ startupResultTmpId: BGgZe98QHr0I1S1GrtGps-Av8-Y6WoD2Ny8DZWvdhoQ
#Sim卡信息
xunzhong:
diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java
index 7885257f1..71a3f4076 100644
--- a/jsowell-admin/src/test/java/SpringBootTestController.java
+++ b/jsowell-admin/src/test/java/SpringBootTestController.java
@@ -260,6 +260,17 @@ public class SpringBootTestController {
@Autowired
private PileReservationInfoService pileReservationInfoService;
+ @Test
+ public void personPileStopChargingTest() {
+ String memberId = "84085683";
+ String pileConnectorCode = "8823000000141001";
+ PersonPileStopChargingDTO dto = PersonPileStopChargingDTO.builder()
+ .memberId(memberId)
+ .pileConnectorCode(pileConnectorCode)
+ .build();
+ pileReservationInfoService.personPileStopCharging(dto);
+ }
+
@Test
public void selectMemberPlateNumberRelationTest() {
String memberId = "25950857";
diff --git a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java
index 8b67ff87c..81349b3fc 100644
--- a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java
+++ b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java
@@ -71,8 +71,11 @@ public enum YKCFrameTypeCode {
BILLING_TEMPLATE_SETTING_CODE(0x58, "计费模型设置"),
BILLING_TEMPLATE_SETTING_ANSWER_CODE(0x57, "计费模型设置应答"),
- RESERVE_CHARGING_CODE(0x60, "预约充电设置"),
- RESERVE_CHARGING_ANSWER_CODE(0x59, "预约充电设置响应"),
+ RESERVATION_CHARGING_CODE(0x60, "预约充电设置"),
+ RESERVATION_CHARGING_ANSWER_CODE(0x59, "预约充电设置响应"), // RESERVATION
+
+ RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE(0x64, "预约充电启动结果上传响应"), // 平台响应
+ RESERVATION_CHARGING_STARTUP_RESULT_CODE(0x65, "预约充电启动结果上传"), // 桩 -> 平台
GROUND_LOCK_DATA_UPLOAD_CODE(0x61, "地锁数据上送"),
REMOTE_CONTROL_GROUND_LOCK_LIFTING_CODE(0x62, "遥控地锁升降"),
@@ -167,8 +170,12 @@ public enum YKCFrameTypeCode {
// 交易记录
TRANSACTION_RECORDS(TRANSACTION_RECORDS_CODE.getCode(), TRANSACTION_RECORDS_CONFIRM_CODE.getCode()),
// 远程账户更新
- REMOTE_ACCOUNT_BALANCE_UPDATE(REMOTE_ACCOUNT_BALANCE_UPDATE_CODE.getCode(), REMOTE_ACCOUNT_BALANCE_UPDATE_ANSWER_CODE.getCode());
+ REMOTE_ACCOUNT_BALANCE_UPDATE(REMOTE_ACCOUNT_BALANCE_UPDATE_CODE.getCode(), REMOTE_ACCOUNT_BALANCE_UPDATE_ANSWER_CODE.getCode()),
+ // 预约充电启动结果
+ RESERVATION_CHARGING_STARTUP_RESULT(RESERVATION_CHARGING_STARTUP_RESULT_CODE.getCode(), RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE.getCode()),
+
+ ;
// 请求帧类型
private int requestFrameType;
diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java
index 72c8b2676..f877b4d3a 100644
--- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java
+++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java
@@ -153,7 +153,7 @@ public enum ReturnCodeEnum {
CODE_USER_HAS_BEEN_THIS_PILE("00400004", "此用户已绑定该桩,请检查!"),
- CODE_NO_CHARGING_ORDER_ERROR("00400005", "当前无正在充电的订单"),
+ CODE_NO_CHARGING_ORDER_ERROR("00400005", "当前无正在充电的记录"),
CODE_NO_REAL_TIME_INFO("00400006", "未查到充电枪口实时信息"),
@@ -179,6 +179,12 @@ public enum ReturnCodeEnum {
CODE_RESERVATION_ALREADY_EXISTS_ERROR("00400017", "已经存在生效中的预约,请关闭后再试"),
+ CODE_PERSON_PILE_STOP_CHARGING_ERROR("00400018", "个人桩停止充电异常"),
+
+ CODE_QUERY_RESERVATION_STATUS_ERROR("00400019", "根据充电桩查询预约状态异常"),
+
+ CODE_START_PERSONAL_PILE_CHARGING_ERROR("00400020", "个人桩启动充电异常"),
+
/* 个人桩 end */
CODE_THIS_CARNO_HAS_BEEN_BINDING("00500001", "当前车牌号已经绑定,请检查!"),
diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingHandler.java
similarity index 83%
rename from jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java
rename to jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingHandler.java
index b77bcb6df..ea06e0a96 100644
--- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java
+++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingHandler.java
@@ -12,9 +12,9 @@ import org.springframework.stereotype.Component;
*/
@Slf4j
@Component
-public class ReserveChargingHandler extends AbstractHandler{
+public class ReservationChargingHandler extends AbstractHandler{
- private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVE_CHARGING_CODE.getBytes());
+ private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_CODE.getBytes());
@Override
public void afterPropertiesSet() throws Exception {
diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingResponseHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingResponseHandler.java
new file mode 100644
index 000000000..97ef357c2
--- /dev/null
+++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingResponseHandler.java
@@ -0,0 +1,70 @@
+package com.jsowell.netty.handler.yunkuaichong;
+
+import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
+import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
+import com.jsowell.common.util.BytesUtil;
+import com.jsowell.common.util.YKCUtils;
+import com.jsowell.netty.factory.YKCOperateFactory;
+import io.netty.channel.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 预约充电响应
+ */
+@Slf4j
+@Component
+public class ReservationChargingResponseHandler extends AbstractHandler{
+
+ private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_ANSWER_CODE.getBytes());
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ YKCOperateFactory.register(type, this);
+ }
+
+ @Override
+ public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, Channel channel) {
+ // log.info("[====远程更新应答====] param:{}, channel:{}", JSON.toJSONString(ykcDataProtocol), channel.toString());
+ // 消息体
+ byte[] msgBody = ykcDataProtocol.getMsgBody();
+
+ int startIndex = 0;
+ int length = 16;
+
+ // 交易流水号
+ byte[] transactionCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String transactionCode = BytesUtil.bcd2Str(transactionCodeByteArr);
+
+ // 桩编码
+ startIndex += length;
+ length = 7;
+ byte[] pileSnByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String pileSn = BytesUtil.bcd2Str(pileSnByteArr);
+
+ // 保存时间
+ saveLastTimeAndCheckChannel(pileSn, channel);
+
+ // 枪口号
+ startIndex += length;
+ length = 1;
+ byte[] connectorCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String connectorCode = BytesUtil.bcd2Str(connectorCodeByteArr);
+
+ // 启动结果
+ startIndex += length;
+ length = 1;
+ byte[] resultCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String resultCode = BytesUtil.bcd2Str(resultCodeByteArr);
+
+ // 失败原因
+ startIndex += length;
+ length = 1;
+ byte[] failedReasonByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String failedReason = BytesUtil.bcd2Str(failedReasonByteArr);
+
+ log.info("0x59预约充电响应, 交易流水号:{}, 桩SN:{}, 枪口号:{}, 结果:{}, 失败原因:{}",
+ transactionCode, pileSn, connectorCode, resultCode, failedReason);
+ return null;
+ }
+}
diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java
new file mode 100644
index 000000000..ba3cd3944
--- /dev/null
+++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java
@@ -0,0 +1,105 @@
+package com.jsowell.netty.handler.yunkuaichong;
+
+import com.alibaba.fastjson2.JSON;
+import com.google.common.primitives.Bytes;
+import com.jsowell.common.constant.Constants;
+import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
+import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
+import com.jsowell.common.util.BytesUtil;
+import com.jsowell.common.util.YKCUtils;
+import com.jsowell.netty.factory.YKCOperateFactory;
+import com.jsowell.pile.dto.ReservationChargingStartupResult;
+import com.jsowell.pile.service.PileBasicInfoService;
+import io.netty.channel.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 预约充电启动结果上送
+ */
+@Slf4j
+@Component
+public class ReservationChargingStartupResultHandler extends AbstractHandler{
+
+ private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_STARTUP_RESULT_CODE.getBytes());
+
+ @Autowired
+ private PileBasicInfoService pileBasicInfoService;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ YKCOperateFactory.register(type, this);
+ }
+
+ @Override
+ public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, Channel channel) {
+ log.info("[===预约充电启动结果上送===] param:{}, channel:{}", JSON.toJSONString(ykcDataProtocol), channel.toString());
+ // 消息体
+ byte[] msgBody = ykcDataProtocol.getMsgBody();
+
+ int startIndex = 0;
+ int length = 16;
+
+ // 交易流水号
+ byte[] transactionCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String transactionCode = BytesUtil.bcd2Str(transactionCodeByteArr);
+
+ // 桩编码
+ startIndex += length;
+ length = 7;
+ byte[] pileSnByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String pileSn = BytesUtil.bcd2Str(pileSnByteArr);
+
+ // 保存时间
+ saveLastTimeAndCheckChannel(pileSn, channel);
+
+ // 枪号
+ startIndex += length;
+ length = 1;
+ byte[] connectorCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String connectorCode = BytesUtil.bcd2Str(connectorCodeByteArr);
+
+ // vin
+ startIndex += length;
+ length = 17;
+ byte[] vinCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String vinCode = BytesUtil.bcd2Str(vinCodeByteArr);
+
+ // 启动结果
+ startIndex += length;
+ length = 1;
+ byte[] startupResultByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String startupResult = BytesUtil.bcd2Str(startupResultByteArr);
+
+ // 失败原因
+ startIndex += length;
+ length = 1;
+ byte[] failReasonByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String failReason = BytesUtil.bcd2Str(failReasonByteArr);
+
+ log.info("[===预约充电启动结果上送===]交易流水号:{}, 桩编号:{}, 枪号:{}, vin:{}, 启动结果:{}, 失败原因:{}",
+ transactionCode, pileSn, connectorCode, vinCode, startupResult, failReason);
+
+
+ ReservationChargingStartupResult chargingStartupResult = ReservationChargingStartupResult.builder()
+ .transactionCode(transactionCode)
+ .pileSn(pileSn)
+ .connectorCode(connectorCode)
+ .vinCode(vinCode)
+ .startupResult(startupResult)
+ .failReason(failReason)
+ .build();
+ pileBasicInfoService.startupResult(chargingStartupResult);
+
+
+ /*
+ 应答
+ 确认结果 0x00 成功 0x01 失败
+ */
+ byte[] confirmResultBytes = Constants.zeroByteArray;
+ byte[] concatMsgBody = Bytes.concat(transactionCodeByteArr, pileSnByteArr, connectorCodeByteArr, confirmResultBytes);
+
+ return getResult(ykcDataProtocol, concatMsgBody);
+ }
+}
diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java
deleted file mode 100644
index 65d2600c2..000000000
--- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.jsowell.netty.handler.yunkuaichong;
-
-import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
-import com.jsowell.common.util.YKCUtils;
-import com.jsowell.netty.factory.YKCOperateFactory;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 预约充电响应
- */
-@Slf4j
-@Component
-public class ReserveChargingResponseHandler extends AbstractHandler{
-
- private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVE_CHARGING_ANSWER_CODE.getBytes());
-
- @Override
- public void afterPropertiesSet() throws Exception {
- YKCOperateFactory.register(type, this);
- }
-}
diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java
index 8caae9a3a..7bf8a722c 100644
--- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java
+++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java
@@ -330,8 +330,8 @@ public class TransactionRecordsRequestHandler extends AbstractHandler {
int length = 16;
// 交易流水号
- byte[] orderCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
- String transactionCode = BytesUtil.bcd2Str(orderCodeByteArr);
+ byte[] transactionCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
+ String transactionCode = BytesUtil.bcd2Str(transactionCodeByteArr);
// 桩编码
startIndex += length;
@@ -582,7 +582,7 @@ public class TransactionRecordsRequestHandler extends AbstractHandler {
2022年12月15日11点28分发现返回 01非法账单,充电桩会持续上传交易记录,后面产生的交易记录被阻塞
*/
byte[] confirmResultBytes = Constants.zeroByteArray;
- byte[] concatMsgBody = Bytes.concat(orderCodeByteArr, confirmResultBytes);
+ byte[] concatMsgBody = Bytes.concat(transactionCodeByteArr, confirmResultBytes);
return getResult(ykcDataProtocol, concatMsgBody);
}
@@ -597,7 +597,7 @@ public class TransactionRecordsRequestHandler extends AbstractHandler {
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
if (StringUtils.equals(pileBasicInfo.getBusinessType(), Constants.TWO)) {
personalChargingRecordService.processPersonalChargingRecord(data);
- return;
+ // return;
}
String transactionCode = data.getTransactionCode();
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservationInfo.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservationInfo.java
index 2cc088337..a911a1a84 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservationInfo.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservationInfo.java
@@ -3,6 +3,7 @@ package com.jsowell.pile.domain;
import java.sql.Time;
import java.util.Date;
import lombok.AllArgsConstructor;
+import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@@ -14,6 +15,7 @@ import lombok.experimental.SuperBuilder;
@Data
@Accessors(chain = true)
@SuperBuilder
+@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PileReservationInfo {
@@ -47,6 +49,11 @@ public class PileReservationInfo {
*/
private String reservationType;
+ /**
+ * 验证身份(1-是; 0-否)
+ */
+ private String verifyIdentity;
+
/**
* 预约开始时间
*/
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/ReservationChargingCommand.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/ReservationChargingCommand.java
index 95bef6804..078557ede 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/ReservationChargingCommand.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/ReservationChargingCommand.java
@@ -46,6 +46,11 @@ public class ReservationChargingCommand {
*/
private String reservationType;
+ /**
+ * 身份验证
+ */
+ private String verifyIdentity;
+
/**
* vin1
*/
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java
index 64a96d440..d13ae5ec5 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java
@@ -40,6 +40,11 @@ public class CreateReservedDTO {
*/
private String freq;
+ /**
+ * 验证身份(1-是; 0-否)
+ */
+ private String verifyIdentity;
+
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.JSON_STYLE)
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PersonPileStopChargingDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PersonPileStopChargingDTO.java
new file mode 100644
index 000000000..8f275fa29
--- /dev/null
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PersonPileStopChargingDTO.java
@@ -0,0 +1,24 @@
+package com.jsowell.pile.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class PersonPileStopChargingDTO {
+ private String memberId;
+ private String firstLevelMerchantId;
+
+ private String pileSn;
+
+ private String ConnectorCode;
+
+ /**
+ * 桩枪口号
+ */
+ private String pileConnectorCode;
+}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java
index 8bfa748f0..d3a5d1e5a 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java
@@ -38,5 +38,5 @@ public class PileMemberBindingDTO {
/**
* 一级运营商id
*/
- private String merchantId;
+ private String firstLevelMerchantId;
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java
index 056097d81..7e28dbab9 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java
@@ -23,11 +23,31 @@ public class PileReservationDTO {
*/
private String status;
+ /**
+ * 验证身份(1-是; 0-否)
+ */
+ private String verifyIdentity;
+
/**
* 桩编号
*/
private String pileSn;
+ /**
+ * 充电桩枪口编号
+ */
+ private String pileConnectorCode;
+
+ /**
+ * 开始时间 hh:mm:ss
+ */
+ private String startTime;
+
+ /**
+ * 结束时间 hh:mm:ss
+ */
+ private String endTime;
+
private Integer pageNo;
private Integer pageSize;
@@ -38,6 +58,11 @@ public class PileReservationDTO {
.append("memberId", memberId)
.append("reservedId", reservedId)
.append("status", status)
+ .append("pileSn", pileSn)
+ .append("startTime", startTime)
+ .append("endTime", endTime)
+ .append("pageNo", pageNo)
+ .append("pageSize", pageSize)
.toString();
}
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/ReservationChargingStartupResult.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/ReservationChargingStartupResult.java
new file mode 100644
index 000000000..089788305
--- /dev/null
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/ReservationChargingStartupResult.java
@@ -0,0 +1,42 @@
+package com.jsowell.pile.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class ReservationChargingStartupResult {
+ /**
+ * 交易流水号
+ */
+ private String transactionCode;
+
+ /**
+ * 桩编号
+ */
+ private String pileSn;
+
+ /**
+ * 枪口号
+ */
+ private String connectorCode;
+
+ /**
+ * vin
+ */
+ private String vinCode;
+
+ /**
+ * 启动结果
+ */
+ private String startupResult;
+
+ /**
+ * 失败原因
+ */
+ private String failReason;
+}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservationInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservationInfoMapper.java
index da44e5ff2..fa7939072 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservationInfoMapper.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileReservationInfoMapper.java
@@ -34,4 +34,6 @@ public interface PileReservationInfoMapper {
List findByMemberIdAndPileSn(@Param("memberId") String memberId, @Param("pileSn") String pileSn);
PileReservationInfo selectActiveReservationByPileConnectorCode(String pileConnectorCode);
+
+ PileReservationInfo selectByPileConnectorCode(String pileConnectorCode);
}
\ No newline at end of file
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java
index 306c8f817..80d99d371 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java
@@ -66,6 +66,8 @@ public interface OrderPileOccupyService{
void stopOccupyPileOrder(OrderPileOccupy orderPileOccupy);
+ int retryCalculateOccupyPileOrderAmount(String occupyCode);
+
/**
* 通过memberid查询挂起状态订单
* @param memberId
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java
index 4d9653b0c..2c1e5a179 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java
@@ -3,6 +3,7 @@ package com.jsowell.pile.service;
import java.util.List;
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
+import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.domain.PersonalChargingRecord;
public interface PersonalChargingRecordService{
@@ -35,4 +36,6 @@ public interface PersonalChargingRecordService{
* @param data
*/
void processPersonalChargingRecord(TransactionRecordsData data);
+
+ void processPersonalChargingRecord(OrderBasicInfo orderBasicInfo);
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java
index e049d2d21..d0ff490df 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java
@@ -2,10 +2,7 @@ package com.jsowell.pile.service;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.pile.domain.PileBasicInfo;
-import com.jsowell.pile.dto.IndexQueryDTO;
-import com.jsowell.pile.dto.QueryPileDTO;
-import com.jsowell.pile.dto.ReplaceMerchantStationDTO;
-import com.jsowell.pile.dto.StartPersonPileDTO;
+import com.jsowell.pile.dto.*;
import com.jsowell.pile.thirdparty.ConnectorInfo;
import com.jsowell.pile.thirdparty.EquipmentInfo;
import com.jsowell.pile.thirdparty.ZDLConnectorInfo;
@@ -222,4 +219,6 @@ public interface PileBasicInfoService {
List getConnectorListForZDL(String pileSn);
String startPersonalPileCharging(StartPersonPileDTO dto);
+
+ void startupResult(ReservationChargingStartupResult chargingStartupResult);
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java
index 193cad20b..60cd18d25 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java
@@ -72,7 +72,6 @@ public class PileRemoteService {
.build();
ykcPushCommandService.pushGetRealTimeMonitorDataCommand(command);
}
-
}
/**
@@ -95,7 +94,7 @@ public class PileRemoteService {
log.warn("远程启动充电, 充电桩编号和枪口号不能为空");
return;
}
- log.info("=====平台下发指令=====: 远程启动充电, 桩号:{}, 枪口号:{}", pileSn, connectorCode);
+ log.info("【=====平台下发指令=====】: 远程启动充电, 桩号:{}, 枪口号:{}", pileSn, connectorCode);
StartChargingCommand startChargingCommand = StartChargingCommand.builder()
.pileSn(pileSn)
.connectorCode(connectorCode)
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java
index 516535ae4..6f04543cd 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java
@@ -2,8 +2,12 @@ package com.jsowell.pile.service;
import java.util.List;
+import com.jsowell.common.core.page.PageResponse;
+import com.jsowell.pile.dto.CreateReservedDTO;
+import com.jsowell.pile.dto.PersonPileStopChargingDTO;
import com.jsowell.pile.dto.PileReservationDTO;
import com.jsowell.pile.domain.PileReservationInfo;
+import com.jsowell.pile.vo.PileReservationInfoVO;
public interface PileReservationInfoService {
int deleteByPrimaryKey(Integer id);
@@ -55,5 +59,17 @@ public interface PileReservationInfoService {
void cancelOneTimeReservation(String pileConnectorCode);
void deleteReservation(PileReservationDTO dto);
+
+ int createReservation(CreateReservedDTO dto);
+
+ PageResponse queryReservationList(PileReservationDTO dto);
+
+ void updateReservationStatus(PileReservationDTO dto);
+
+ void updateReservation(PileReservationDTO dto);
+
+ void personPileStopCharging(PersonPileStopChargingDTO dto);
+
+ PileReservationInfoVO queryReservationInfo(PileReservationDTO dto);
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java
index fcfa82324..3dbd24fc4 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java
@@ -282,6 +282,26 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService {
orderPileOccupyMapper.updateByPrimaryKeySelective(orderPileOccupy);
}
+ @Override
+ public int retryCalculateOccupyPileOrderAmount(String occupyCode) {
+ OrderPileOccupy orderPileOccupy = queryByOccupyCode(occupyCode);
+ // 计算金额
+ BigDecimal orderAmount = calculateOccupyPileOrderAmount(orderPileOccupy);
+
+ if (orderAmount.compareTo(BigDecimal.ZERO) > 0) {
+ // 需要支付金额,订单挂起
+ orderPileOccupy.setStatus(Constants.TWO); // 2-订单挂起
+ } else {
+ // 订单金额为0
+ orderPileOccupy.setPayStatus(Constants.TWO); // 2-无需支付
+ orderPileOccupy.setStatus(Constants.ONE); // 1-订单完成
+ }
+ orderPileOccupy.setOrderAmount(orderAmount);
+ // 更新数据库
+ int i = orderPileOccupyMapper.updateByPrimaryKeySelective(orderPileOccupy);
+ return i;
+ }
+
/**
* 计算占桩订单金额
* calculateTheAmountOfTheOccupancyOrder
@@ -325,8 +345,8 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService {
dto.setStartTime(DateUtils.formatDateTime(startTime));
dto.setEndTime(DateUtils.formatDateTime(endTime));
List orderListVOS = orderBasicInfoService.queryOrderByOccupyTime(dto);
- log.info("查询会员在占用时段内有没有充电订单, 占桩订单编号:{}, 占桩开始时间:{}, 占桩结束时间:{}, result:{}",
- occupyCode, DateUtils.formatDateTime(startTime), DateUtils.formatDateTime(endTime), JSON.toJSONString(orderListVOS));
+ log.info("查询会员在占用时段内有没有充电订单, 占桩订单编号:{}, memberId:{}, stationId:{}, 占桩开始时间:{}, 占桩结束时间:{}, result:{}",
+ occupyCode, orderPileOccupy.getMemberId(), orderPileOccupy.getStationId(), DateUtils.formatDateTime(startTime), DateUtils.formatDateTime(endTime), JSON.toJSONString(orderListVOS));
/*
计算充电时长
*/
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java
index 757b753b9..cd8a45f8f 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java
@@ -1,8 +1,9 @@
package com.jsowell.pile.service.impl;
+import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
-import com.jsowell.common.util.Cp56Time2a.Cp56Time2aUtil;
import com.jsowell.common.util.DateUtils;
+import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.service.PileBasicInfoService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -82,8 +83,7 @@ public class PersonalChargingRecordServiceImpl implements PersonalChargingRecord
}
/**
- * 处理个人桩充电记录
- *
+ * 收到交易记录时, 处理个人桩充电记录
* @param data
*/
@Override
@@ -133,4 +133,48 @@ public class PersonalChargingRecordServiceImpl implements PersonalChargingRecord
personalChargingRecordMapper.insertOrUpdateSelective(chargingRecord);
}
+ /**
+ * 一键启动时, 处理个人桩充电记录
+ * @param orderBasicInfo
+ */
+ @Override
+ public void processPersonalChargingRecord(OrderBasicInfo orderBasicInfo) {
+ // 根据交易流水号查询,如果数据库没有就入库
+ PersonalChargingRecord chargingRecord = new PersonalChargingRecord();
+
+ // 处理数据
+ chargingRecord.setTransactionCode(orderBasicInfo.getTransactionCode());
+ chargingRecord.setStatus(Constants.ONE);
+ chargingRecord.setMemberId(orderBasicInfo.getMemberId());
+ chargingRecord.setStationId(orderBasicInfo.getStationId());
+ chargingRecord.setMerchantId(orderBasicInfo.getMerchantId());
+ chargingRecord.setPileSn(orderBasicInfo.getPileSn());
+ chargingRecord.setConnectorCode(orderBasicInfo.getConnectorCode());
+ chargingRecord.setPileConnectorCode(orderBasicInfo.getPileConnectorCode());
+ chargingRecord.setLogicCard(orderBasicInfo.getLogicCard());
+ chargingRecord.setVinCode(orderBasicInfo.getVinCode());
+ chargingRecord.setStartMode(orderBasicInfo.getStartMode());
+ chargingRecord.setPlateNumber(orderBasicInfo.getPlateNumber());
+ chargingRecord.setChargeStartTime(orderBasicInfo.getChargeStartTime());
+ chargingRecord.setChargeEndTime(orderBasicInfo.getChargeEndTime());
+ chargingRecord.setStartType(orderBasicInfo.getStartType());
+ chargingRecord.setReservationStartTime(orderBasicInfo.getReservedStartTime());
+ chargingRecord.setReservationEndTime(orderBasicInfo.getReservedEndTime());
+ chargingRecord.setStartSoc(orderBasicInfo.getStartSoc());
+ chargingRecord.setEndSoc(null);
+ // BigDecimal sharpUsedElectricity = new BigDecimal(data.getSharpUsedElectricity());
+ // chargingRecord.setSharpUsedElectricity(sharpUsedElectricity);
+ // BigDecimal peakUsedElectricity = new BigDecimal(data.getPeakUsedElectricity());
+ // chargingRecord.setPeakUsedElectricity(peakUsedElectricity);
+ // BigDecimal flatUsedElectricity = new BigDecimal(data.getFlatUsedElectricity());
+ // chargingRecord.setFlatUsedElectricity(flatUsedElectricity);
+ // BigDecimal valleyUsedElectricity = new BigDecimal(data.getValleyUsedElectricity());
+ // chargingRecord.setValleyUsedElectricity(valleyUsedElectricity);
+ // BigDecimal totalUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity);
+ // chargingRecord.setTotalUsedElectricity(totalUsedElectricity);
+ // chargingRecord.setReason(data.getStopReasonMsg());
+ // 创建或更新
+ personalChargingRecordMapper.insertOrUpdateSelective(chargingRecord);
+ }
+
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java
index 0c8baba83..10a7f37fb 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java
@@ -18,10 +18,7 @@ import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.PileConnectorInfo;
import com.jsowell.pile.domain.PileModelInfo;
import com.jsowell.pile.domain.PileSimInfo;
-import com.jsowell.pile.dto.IndexQueryDTO;
-import com.jsowell.pile.dto.QueryPileDTO;
-import com.jsowell.pile.dto.ReplaceMerchantStationDTO;
-import com.jsowell.pile.dto.StartPersonPileDTO;
+import com.jsowell.pile.dto.*;
import com.jsowell.pile.mapper.PileBasicInfoMapper;
import com.jsowell.pile.service.*;
import com.jsowell.pile.service.programlogic.AbstractProgramLogic;
@@ -37,6 +34,7 @@ import com.jsowell.pile.vo.uniapp.customer.GroundLockInfoVO;
import com.jsowell.pile.vo.uniapp.customer.PersonalPileInfoVO;
import com.jsowell.pile.vo.uniapp.customer.PileConnectorDetailVO;
import com.jsowell.pile.vo.web.*;
+import com.jsowell.wxpay.service.WxAppletRemoteService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.RandomStringUtils;
@@ -89,6 +87,9 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService {
@Autowired
private PileReservationInfoService pileReservationInfoService;
+ @Autowired
+ private WxAppletRemoteService wxAppletRemoteService;
+
/**
* 查询设备管理
*
@@ -1211,4 +1212,13 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService {
String orderCode = orderLogic.startPersonalPileCharging(dto);
return orderCode;
}
+
+ /**
+ * 预约充电启动结果
+ */
+ @Override
+ public void startupResult(ReservationChargingStartupResult chargingStartupResult) {
+ // 小程序通知
+ wxAppletRemoteService.reservationStartupResultSendMsg();
+ }
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java
index acee2f8a0..33f709e77 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java
@@ -1,6 +1,8 @@
package com.jsowell.pile.service.impl;
+import com.google.common.collect.Lists;
import com.jsowell.common.util.DateUtils;
+import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.PileMemberRelation;
import com.jsowell.pile.mapper.PileMemberRelationMapper;
import com.jsowell.pile.service.PileConnectorInfoService;
@@ -108,10 +110,12 @@ public class PileMemberRelationServiceImpl implements PileMemberRelationService
@Override
public List selectPileMemberRelationByPileSn(String pileSn) {
+ if (StringUtils.isBlank(pileSn)) {
+ return Lists.newArrayList();
+ }
PileMemberRelation pileMemberRelation = new PileMemberRelation();
pileMemberRelation.setPileSn(pileSn);
return selectPileMemberRelationList(pileMemberRelation);
}
-
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java
index 0e3117c54..1aad1138e 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java
@@ -1,18 +1,26 @@
package com.jsowell.pile.service.impl;
+import com.alibaba.fastjson2.JSON;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
+import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
+import com.jsowell.common.core.page.PageResponse;
+import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.StringUtils;
+import com.jsowell.pile.domain.PileMemberRelation;
import com.jsowell.pile.domain.ykcCommond.ReservationChargingCommand;
+import com.jsowell.pile.dto.CreateReservedDTO;
+import com.jsowell.pile.dto.PersonPileStopChargingDTO;
import com.jsowell.pile.dto.PileReservationDTO;
import com.jsowell.pile.dto.StartPersonPileDTO;
-import com.jsowell.pile.service.MemberPlateNumberRelationService;
-import com.jsowell.pile.service.PileBasicInfoService;
-import com.jsowell.pile.service.PileRemoteService;
+import com.jsowell.pile.service.*;
+import com.jsowell.pile.vo.PileReservationInfoVO;
import com.jsowell.pile.vo.uniapp.customer.MemberPlateNumberVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -20,15 +28,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.sql.Date;
import java.sql.Time;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
+import java.util.stream.Collectors;
import com.jsowell.pile.mapper.PileReservationInfoMapper;
import com.jsowell.pile.domain.PileReservationInfo;
-import com.jsowell.pile.service.PileReservationInfoService;
@Slf4j
@Service
@@ -46,6 +56,12 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic
@Autowired
private MemberPlateNumberRelationService memberPlateNumberRelationService;
+ @Autowired
+ private PileMemberRelationService pileMemberRelationService;
+
+ @Autowired
+ private RedisCache redisCache;
+
@Override
public int deleteByPrimaryKey(Integer id) {
return pileReservationInfoMapper.deleteByPrimaryKey(id);
@@ -63,6 +79,11 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic
@Override
public int insertOrUpdateSelective(PileReservationInfo record) {
+ if (record.getId() == null) {
+ record.setCreateTime(DateUtils.getNowDate());
+ } else {
+ record.setUpdateTime(DateUtils.getNowDate());
+ }
return pileReservationInfoMapper.insertOrUpdateSelective(record);
}
@@ -106,24 +127,28 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic
return pileReservationInfoMapper.findByMemberIdAndPileSn(memberId, pileSn);
}
+ public PileReservationInfo selectByPileConnectorCode(String pileConnectorCode) {
+ return pileReservationInfoMapper.selectByPileConnectorCode(pileConnectorCode);
+ }
+
/**
* 启用预约/开启预约/启动预约
*/
@Override
public void activateReserved(PileReservationDTO dto) {
// 查询其他生效中的预约
- List infoList = pileReservationInfoMapper.findByMemberIdAndPileSnAndStatus(dto.getMemberId(), dto.getPileSn(), "1");
- if (CollectionUtils.isNotEmpty(infoList)) {
- throw new BusinessException(ReturnCodeEnum.CODE_RESERVATION_ALREADY_EXISTS_ERROR);
- }
+ // List infoList = pileReservationInfoMapper.findByMemberIdAndPileSnAndStatus(dto.getMemberId(), dto.getPileSn(), "1");
+ // if (CollectionUtils.isNotEmpty(infoList)) {
+ // throw new BusinessException(ReturnCodeEnum.CODE_RESERVATION_ALREADY_EXISTS_ERROR);
+ // }
PileReservationInfo pileReservationInfo = pileReservationInfoMapper.selectByPrimaryKey(Integer.parseInt(dto.getReservedId()));
if (pileReservationInfo == null) {
return;
}
- if (!StringUtils.equals(dto.getMemberId(), pileReservationInfo.getMemberId())) {
- return;
- }
+ // if (!StringUtils.equals(dto.getMemberId(), pileReservationInfo.getMemberId())) {
+ // return;
+ // }
pileReservationInfo.setStatus(Constants.ONE);
// 保存之前,校验时间是否重叠
int i = saveReservation(pileReservationInfo);
@@ -151,6 +176,7 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic
.connectorCode(pileReservationInfo.getPileConnectorCode().replace(pileReservationInfo.getPileSn(), ""))
.operation("01")
.reservationType(type)
+ .verifyIdentity(pileReservationInfo.getVerifyIdentity())
.vin1(vinCodes.get(0))
.vin2(vinCodes.get(1))
.vin3(vinCodes.get(2))
@@ -171,9 +197,9 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic
if (pileReservationInfo == null) {
return;
}
- if (!StringUtils.equals(dto.getMemberId(), pileReservationInfo.getMemberId())) {
- return;
- }
+ // if (!StringUtils.equals(dto.getMemberId(), pileReservationInfo.getMemberId())) {
+ // return;
+ // }
// 校验通过可以修改预约
pileReservationInfo.setStatus(Constants.ZERO);
int i = pileReservationInfoMapper.updateByPrimaryKeySelective(pileReservationInfo);
@@ -201,6 +227,7 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic
.connectorCode(pileReservationInfo.getPileConnectorCode().replace(pileReservationInfo.getPileSn(), ""))
.operation("02")
.reservationType(type)
+ .verifyIdentity(pileReservationInfo.getVerifyIdentity())
.vin1(vinCodes.get(0))
.vin2(vinCodes.get(1))
.vin3(vinCodes.get(2))
@@ -291,5 +318,217 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic
pileReservationInfo.setDelFlag(DelFlagEnum.DELETE.getValue());
pileReservationInfoMapper.updateByPrimaryKey(pileReservationInfo);
}
+
+ @Override
+ public int createReservation(CreateReservedDTO dto) {
+ PileReservationInfo reservedInfo = selectByPileConnectorCode(dto.getPileConnectorCode());
+ if (reservedInfo == null) {
+ reservedInfo = new PileReservationInfo();
+ reservedInfo.setCreateBy(dto.getMemberId());
+ } else {
+ reservedInfo.setUpdateBy(dto.getMemberId());
+ }
+ reservedInfo.setMemberId(dto.getMemberId());
+ reservedInfo.setPileSn(dto.getPileSn());
+ reservedInfo.setPileConnectorCode(dto.getPileConnectorCode());
+ reservedInfo.setStatus(Constants.ONE); // 默认生效
+ // reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime()));
+ reservedInfo.setStartTime(Time.valueOf(dto.getStartTime()));
+ // reservedInfo.setEndTime(DateUtils.parseDate(dto.getEndTime()));
+ if (StringUtils.isNotBlank(dto.getEndTime())) {
+ reservedInfo.setEndTime(Time.valueOf(dto.getEndTime()));
+ }
+
+ // 2024年7月25日14点36分, 此段代码注释掉, 采用默认设置
+ // if (StringUtils.isNotBlank(dto.getFreq())) {
+ // reservedInfo.setReservationType("recurring");
+ // reservedInfo.setFreq(dto.getFreq());
+ // } else {
+ // reservedInfo.setReservationType("single");
+ // reservedInfo.setFreq(null);
+ // }
+
+ // 默认每天
+ reservedInfo.setReservationType("recurring");
+ reservedInfo.setFreq("daily");
+
+ this.insertOrUpdateSelective(reservedInfo);
+ return reservedInfo.getId();
+ }
+
+ @Override
+ public PageResponse queryReservationList(PileReservationDTO dto) {
+ int pageNo = dto.getPageNo() == null ? Constants.one : dto.getPageNo();
+ int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize();
+ PageHelper.startPage(pageNo, pageSize);
+ List list = this.getReservationsByMemberIdAndPileSn(dto.getMemberId(), dto.getPileSn());
+ PageInfo pageInfo = new PageInfo<>(list);
+
+ PageResponse pageResponse = new PageResponse();
+ pageResponse.setPageNum(pageInfo.getPageNum());
+ pageResponse.setPageSize(pageInfo.getPageSize());
+ pageResponse.setPages(pageInfo.getPages());
+ pageResponse.setTotal(pageInfo.getTotal());
+
+ List resultList = Lists.newArrayList();
+ for (PileReservationInfo reservedInfo : pageInfo.getList()) {
+ resultList.add(
+ PileReservationInfoVO.builder()
+ // .reservationId(reservedInfo.getId() + "")
+ .pileSn(reservedInfo.getPileSn())
+ .startTime(reservedInfo.getStartTime().toString())
+ .endTime(reservedInfo.getEndTime().toString())
+ // .freq(reservedInfo.getFreq())
+ .status(reservedInfo.getStatus())
+ .build()
+ );
+ }
+ pageResponse.setList(resultList);
+ return pageResponse;
+ }
+
+ /**
+ * 修改预约状态
+ * @param dto
+ */
+ @Override
+ public void updateReservationStatus(PileReservationDTO dto) {
+ if (StringUtils.equals(dto.getStatus(), Constants.ZERO)) {
+ // 停用
+ this.deactivateReserved(dto);
+ } else if (StringUtils.equals(dto.getStatus(), Constants.ONE)) {
+ // 启用
+ this.activateReserved(dto);
+ }
+ }
+
+ /**
+ * 修改预约充电信息
+ * @param dto
+ */
+ @Override
+ public void updateReservation(PileReservationDTO dto) {
+ PileReservationInfo pileReservationInfo = pileReservationInfoMapper.selectByPrimaryKey(Integer.valueOf(dto.getReservedId()));
+ if (pileReservationInfo == null) {
+ return;
+ }
+
+ /**
+ * 操作
+ * 0x01:启动 0x02:取消 0x03:修改
+ */
+ String operation = "03";
+
+ if (StringUtils.isNotBlank(dto.getStartTime())) {
+ pileReservationInfo.setStartTime(Time.valueOf(dto.getStartTime()));
+ operation = "03";
+ }
+ if (StringUtils.isNotBlank(dto.getEndTime())) {
+ pileReservationInfo.setEndTime(Time.valueOf(dto.getEndTime()));
+ operation = "03";
+ }
+ if (StringUtils.isNotBlank(dto.getStatus())) {
+ pileReservationInfo.setStatus(dto.getStatus());
+ if (StringUtils.equals(dto.getStatus(), Constants.ZERO)) {
+ // 停用
+ operation = "02";
+ } else if (StringUtils.equals(dto.getStatus(), Constants.ONE)) {
+ // 启用
+ operation = "01";
+ }
+ }
+ if (StringUtils.isNotBlank(dto.getVerifyIdentity())) {
+ pileReservationInfo.setVerifyIdentity(dto.getVerifyIdentity());
+ }
+ pileReservationInfo.setUpdateBy(dto.getMemberId());
+ this.insertOrUpdateSelective(pileReservationInfo);
+
+ // 查询会员的绑定vin列表 2024年7月30日11点04分 以当前请求会员的VIN为准
+ List plateNumberVOList = memberPlateNumberRelationService.selectMemberPlateNumberRelation(dto.getMemberId());
+ List vinCodes = Lists.newArrayList();
+ int count = 0;
+ for (MemberPlateNumberVO vo : plateNumberVOList) {
+ if (count < 3 && StringUtils.isNotBlank(vo.getVinCode())) {
+ vinCodes.add(vo.getVinCode());
+ count++;
+ }
+ }
+ // 如果 vinCodes 的数量少于 3,用 "0" 补足
+ while (vinCodes.size() < 3) {
+ vinCodes.add("");
+ }
+
+ String type = StringUtils.equals(pileReservationInfo.getReservationType(), "single") ? "00" : "01";
+
+ // 发送指令
+ ReservationChargingCommand command = ReservationChargingCommand.builder()
+ .transactionCode(Constants.ILLEGAL_TRANSACTION_CODE)
+ .pileSn(pileReservationInfo.getPileSn())
+ .connectorCode(pileReservationInfo.getPileConnectorCode().replace(pileReservationInfo.getPileSn(), ""))
+ .operation(operation)
+ .reservationType(type)
+ .verifyIdentity(pileReservationInfo.getVerifyIdentity())
+ .vin1(vinCodes.get(0))
+ .vin2(vinCodes.get(1))
+ .vin3(vinCodes.get(2))
+ .reservedStartTime(pileReservationInfo.getStartTime().toLocalTime())
+ .reservedEndTime(pileReservationInfo.getEndTime().toLocalTime())
+ .amount(Constants.WHITELIST_DEFAULT_AMOUNT)
+ .build();
+ pileRemoteService.reservationCharging(command);
+ }
+
+ /**
+ * 个人桩停止充电
+ * @param dto
+ */
+ @Override
+ public void personPileStopCharging(PersonPileStopChargingDTO dto) {
+ String pileConnectorCode = dto.getPileConnectorCode();
+ String pileSn = StringUtils.substring(pileConnectorCode, 0, pileConnectorCode.length() - 2);
+ String connectorCode = StringUtils.substring(pileConnectorCode, pileConnectorCode.length() - 2, pileConnectorCode.length());
+ // 查询个人桩信息
+ List pileMemberRelations = pileMemberRelationService.selectPileMemberRelationByPileSn(pileSn);
+ Map> listMap = pileMemberRelations.stream()
+ .collect(Collectors.groupingBy(PileMemberRelation::getType, Collectors.mapping(PileMemberRelation::getMemberId, Collectors.toList())));
+ log.info("个人桩:{}, 使用者信息:{}", pileConnectorCode, JSON.toJSONString(listMap));
+ // 发送请求的用户有没有权限停止充电
+ boolean stopFlag = false;
+ List pileManager = listMap.get("1");
+ List pileUsers = listMap.get("2");
+
+ if (CollectionUtils.isNotEmpty(pileManager) && CollectionUtils.containsAny(pileManager, dto.getMemberId())) {
+ log.info("memberId:() 为管理员");
+ stopFlag = true;
+ }
+ if (CollectionUtils.isNotEmpty(pileUsers) && CollectionUtils.containsAny(pileUsers, dto.getMemberId())) {
+ log.info("memberId:() 为用户");
+ stopFlag = true;
+ }
+
+ if (stopFlag) {
+ String pileIsChargingKey = CacheConstants.PILE_IS_CHARGING + pileSn + connectorCode;
+ String redisResult = redisCache.getCacheObject(pileIsChargingKey);
+ // 发送停止充电指令
+ log.info("发送停止指令, pileSn:{}, connectorCode:{}, transactionCode:{}", pileSn, connectorCode, redisResult);
+ pileRemoteService.remoteStopCharging(pileSn, connectorCode, redisResult);
+ }
+ }
+
+ @Override
+ public PileReservationInfoVO queryReservationInfo(PileReservationDTO dto) {
+ PileReservationInfo pileReservationInfo = pileReservationInfoMapper.selectByPileConnectorCode(dto.getPileConnectorCode());
+ PileReservationInfoVO build = PileReservationInfoVO.builder()
+ .reservedId(pileReservationInfo.getId() + "")
+ .pileSn(pileReservationInfo.getPileSn())
+ .pileConnectorCode(pileReservationInfo.getPileConnectorCode())
+ .startTime(pileReservationInfo.getStartTime().toString())
+ .endTime(pileReservationInfo.getEndTime().toString())
+ .verifyIdentity(pileReservationInfo.getVerifyIdentity())
+ // .freq(pileReservationInfo.getFreq())
+ .status(pileReservationInfo.getStatus())
+ .build();
+ return build;
+ }
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java
index 9a26bc84b..20867b799 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java
@@ -20,7 +20,6 @@ import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
-import org.aspectj.weaver.ast.Var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -59,7 +58,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_RESTART_CODE.getBytes()),
YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_CONTROL_START_CODE.getBytes()),
YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_STOP_CHARGING_CODE.getBytes()),
- YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVE_CHARGING_CODE.getBytes())
+ YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_CODE.getBytes())
);
/**
@@ -183,7 +182,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
}
/**
- * 发送停止ch
+ * 发送停止充电
*
* @param command
*/
@@ -254,7 +253,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
// push消息
boolean result = this.push(msg, pileSn, YKCFrameTypeCode.REMOTE_ISSUE_QRCODE_CODE);
- log.info("=====平台下发指令===== pileSn:{}, 下发二维码,地址为:{}", pileSn, qrCodePrefix);
+ log.info("【=====平台下发指令=====】 pileSn:{}, 下发二维码,地址为:{}", pileSn, qrCodePrefix);
}
/**
@@ -330,7 +329,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
// 额定功率
String ratedPower = pileModelInfoVO.getRatedPower();
- int i = Integer.parseInt(ratedPower);
+ // int i = Integer.parseInt(ratedPower);
// byte[] ratedPowerByteArr = Base64.getDecoder().decode(ratedPower);
byte[] ratedPowerByteArr = BytesUtil.ensureLength(Constants.zeroByteArray, 2);
@@ -506,6 +505,10 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
String reservationType = command.getReservationType();
byte[] reservationTypeByteArr = BytesUtil.str2Bcd(reservationType);
+ // 身份验证
+ String verifyIdentity = command.getVerifyIdentity();
+ byte[] verifyIdentityByteArr = BytesUtil.str2Bcd(verifyIdentity);
+
// VIN1
String vin1 = command.getVin1();
byte[] vin1ByteArr = BytesUtil.str2Asc(vin1);
@@ -533,12 +536,12 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService {
// 拼装msg信息
byte[] msg = Bytes.concat(transactionCodeArr, pileSnByteArr, connectorCodeByteArr, operateByteArr,
- reservationTypeByteArr, vin1ByteArr, vin2ByteArr, vin3ByteArr,
+ reservationTypeByteArr, verifyIdentityByteArr, vin1ByteArr, vin2ByteArr, vin3ByteArr,
reservedStartTimeByteArr, reservedEndTimeByteArr, amountByteArr);
- this.push(msg, pileSn, YKCFrameTypeCode.RESERVE_CHARGING_CODE);
+ this.push(msg, pileSn, YKCFrameTypeCode.RESERVATION_CHARGING_CODE);
- log.info("=====平台下发指令=====: 预约充电指令, 交易流水号:{}, 桩编号:{}, 枪口号:{}, 操作:{}, 开始时间:{}, 结束时间:{}, 启动金额:{}",
- transactionCode, pileSn, connectorCode, operation, DateUtils.formatDateTime(reservedStartTime), DateUtils.formatDateTime(reservedEndTime), amount);
+ log.info("【=====平台下发指令=====】: 预约充电指令, 交易流水号:{}, 桩编号:{}, 枪口号:{}, 操作:{}, 身份验证:{}, 开始时间:{}, 结束时间:{}, 启动金额:{}",
+ transactionCode, pileSn, connectorCode, operation, verifyIdentity, DateUtils.formatDateTime(reservedStartTime), DateUtils.formatDateTime(reservedEndTime), amount);
}
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java
index cb750df5d..a9ffca059 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java
@@ -105,7 +105,10 @@ public abstract class AbstractProgramLogic implements InitializingBean {
protected MemberGroupService memberGroupService;
@Autowired
- private PileStationWhitelistService pileStationWhitelistService;
+ protected PileStationWhitelistService pileStationWhitelistService;
+
+ @Autowired
+ protected PersonalChargingRecordService personalChargingRecordService;
@Autowired
protected RedisCache redisCache;
@@ -475,6 +478,10 @@ public abstract class AbstractProgramLogic implements InitializingBean {
BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额
for (OrderPayRecord record : payRecordList) {
+ if (!StringUtils.equals(record.getPayMode(), OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())) {
+ // 不是本金支付, 进行下一个循环
+ continue;
+ }
List paymentInfos = orderPayRecordService.parseDeductionRecord(record.getDeductionRecord());
for (PaymentInfo object : paymentInfos) {
String paymentId = object.getPaymentId();
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java
index 12bec2532..de933a2b3 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java
@@ -718,7 +718,8 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
// 查支付记录
List payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
// 根据payMode分组
- Map> payRecordMap = payRecordList.stream().collect(Collectors.groupingBy(OrderPayRecord::getPayMode));
+ Map> payRecordMap = payRecordList.stream()
+ .collect(Collectors.groupingBy(OrderPayRecord::getPayMode));
// 获取本金支付的记录
List principalPayRecordList = payRecordMap.get(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue());
BigDecimal principalPay = null;
@@ -737,7 +738,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
// 计算需要退回的金额
Map returnAmountMap = calculateReturnAmount(principalPay, giftPay, orderAmount, discountAmount);
logger.info("结算订单:{}, 剩余金额退回余额, 订单消费金额:{}, 本金支付金额:{}, 赠送支付金额:{}, 退回金额map:{}",
- orderCode, orderAmount, principalPay, null, JSON.toJSONString(returnAmountMap));
+ orderCode, orderAmount, principalPay, giftPay, JSON.toJSONString(returnAmountMap));
// 需要退回本金的金额
BigDecimal returnPrincipal = returnAmountMap.get("returnPrincipal");
@@ -843,7 +844,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
if (!b) {
throw new BusinessException("00600006", "个人桩启动失败,无启动权限");
}
- String orderCode;
+
// 生成订单
GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO();
generateOrderDTO.setMemberId(dto.getMemberId());
@@ -852,18 +853,28 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
generateOrderDTO.setStartType(dto.getStartType());
generateOrderDTO.setPileSn(pileSn);
generateOrderDTO.setConnectorCode(connectorCode);
+
+ OrderBasicInfo orderBasicInfo;
try {
- OrderBasicInfo orderBasicInfo = generateOrder(generateOrderDTO);
- orderCode = orderBasicInfo.getOrderCode();
+ orderBasicInfo = generateOrder(generateOrderDTO);
} catch (ParseException e) {
throw new RuntimeException(e);
}
// 支付订单
PayOrderDTO payOrderDTO = new PayOrderDTO();
- payOrderDTO.setOrderCode(orderCode);
+ payOrderDTO.setOrderCode(orderBasicInfo.getOrderCode());
payOrderDTO.setPayMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue());
payOrderDTO.setMemberId(dto.getMemberId());
payOrder(payOrderDTO);
- return orderCode;
+
+ // 插入个人桩充电记录表
+ try {
+ personalChargingRecordService.processPersonalChargingRecord(orderBasicInfo);
+ } catch (Exception e) {
+ logger.error("插入个人桩充电记录表error, orderCode:{}, transactionCode:{}",
+ orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode());
+ }
+
+ return orderBasicInfo.getOrderCode();
}
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java
index 9b554e160..147db42fd 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java
@@ -687,24 +687,35 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
// 查支付记录
List payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
- Map payRecordMap = payRecordList.stream()
- .collect(Collectors.toMap(OrderPayRecord::getPayMode, Function.identity(), (k1, k2) -> k1));
- // 取出本金支付金额
- BigDecimal principalPay = null;
+ // 根据payMode分组
+ Map> payRecordMap = payRecordList.stream()
+ .collect(Collectors.groupingBy(OrderPayRecord::getPayMode));
// 获取本金支付的记录
- OrderPayRecord principalPayRecord = payRecordMap.get(Constants.ONE);
- if (principalPayRecord != null) {
- principalPay = principalPayRecord.getPayAmount();
+ List principalPayRecordList = payRecordMap.get(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue());
+ BigDecimal principalPay = null;
+ if (CollectionUtils.isNotEmpty(principalPayRecordList)) {
+ principalPay = principalPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
}
+ // 获取赠送金支付的记录
+ List giftPayRecordList = payRecordMap.get(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue());
+ BigDecimal giftPay = null;
+ if (CollectionUtils.isNotEmpty(giftPayRecordList)) {
+ giftPay = giftPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ }
+
+ BigDecimal discountAmount = orderBasicInfo.getDiscountAmount() == null ? BigDecimal.ZERO : orderBasicInfo.getDiscountAmount();
+
// 计算需要退回的金额
- Map returnAmountMap = calculateReturnAmount(principalPay, null, orderAmount);
+ Map returnAmountMap = calculateReturnAmount(principalPay, giftPay, orderAmount, discountAmount);
logger.info("结算订单:{}, 剩余金额退回余额, 订单消费金额:{}, 本金支付金额:{}, 赠送支付金额:{}, 退回金额map:{}",
- orderCode, orderAmount, principalPay, null, JSON.toJSONString(returnAmountMap));
+ orderCode, orderAmount, principalPay, giftPay, JSON.toJSONString(returnAmountMap));
// 需要退回本金的金额
BigDecimal returnPrincipal = returnAmountMap.get("returnPrincipal");
+ // 需要退回赠送金的金额
+ BigDecimal returnGift = returnAmountMap.get("returnGift");
// 更新会员钱包/余额退回到钱包
UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder()
@@ -712,6 +723,7 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
.type(MemberWalletEnum.TYPE_IN.getValue()) // 进账
.subType(MemberWalletEnum.SUBTYPE_ORDER_SETTLEMENT_REFUND.getValue()) // 订单结算退款
.updatePrincipalBalance(returnPrincipal)
+ .updateGiftBalance(returnGift)
.relatedOrderCode(orderCode)
.build();
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservationInfoVO.java
similarity index 71%
rename from jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java
rename to jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservationInfoVO.java
index 3e7387c15..4e32f9d39 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservationInfoVO.java
@@ -7,7 +7,7 @@ import lombok.Setter;
@Getter
@Setter
@Builder
-public class PileReservedVO {
+public class PileReservationInfoVO {
private String reservedId;
/**
@@ -15,6 +15,11 @@ public class PileReservedVO {
*/
private String pileSn;
+ /**
+ * 充电桩枪口编号
+ */
+ private String pileConnectorCode;
+
/**
* 预约开始时间
*/
@@ -28,11 +33,16 @@ public class PileReservedVO {
/**
* 周期性预约的频率,对于单次预约,该字段可以为 NULL。可能的值包括 daily, weekly, monthly
*/
- private String freq;
+ // private String freq;
/**
* 状态(0-未生效;1-生效)
*/
private String status;
+ /**
+ * 验证身份(1-是; 0-否)
+ */
+ private String verifyIdentity;
+
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileRealTimeVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileRealTimeVO.java
index 7c258178c..d0b081dd5 100644
--- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileRealTimeVO.java
+++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileRealTimeVO.java
@@ -45,4 +45,14 @@ public class PersonPileRealTimeVO {
* 实时功率
*/
private String instantPower;
+
+ /**
+ * 枪口状态
+ */
+ private String status;
+
+ /**
+ * soc
+ */
+ private String soc;
}
diff --git a/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java
index e8f5897f4..ee2f9f9e6 100644
--- a/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java
+++ b/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java
@@ -72,19 +72,14 @@ public class WxAppletRemoteService {
@Value("${weixin.sendMsg.stopChargingTmpId}")
private String stopChargingTmpId;
+ @Value("${weixin.sendMsg.startupResultTmpId}")
+ private String startupResultTmpId;
/**
* 获取accessToken
*
* @return
*/
public String getAccessToken() {
- // String appid = Constants.APP_ID;
- // String secret = Constants.APP_SECRET;
-
- // 这里我是从配置文件中取得appid和appsecret
- // appid = properties.getAppId();
- // secret = properties.getAppSecret();
-
//查询token是否存在
String redisKey = CacheConstants.ACCESS_TOKEN + appid;
// 使用缓存先查询AccessToken是否存在
@@ -236,7 +231,6 @@ public class WxAppletRemoteService {
return uniAppSendMsg(msgInfo);
}
-
/**
* 停止充电发送消息
* @param dto
@@ -281,7 +275,15 @@ public class WxAppletRemoteService {
}
/**
- * 小程序发送消息方法
+ * 预约充电结果小程序服务通知
+ */
+ public Map reservationStartupResultSendMsg() {
+ AppletTemplateMessageSendDTO msgInfo = new AppletTemplateMessageSendDTO();
+ return uniAppSendMsg(msgInfo);
+ }
+
+ /**
+ * 小程序发送消息方法/小程序通知/服务通知
* @param dto
* @return
*/
diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml
index ba6bbbd10..40c71f0b0 100644
--- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml
+++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml
@@ -2950,8 +2950,8 @@
where t1.del_flag = '0'
and `t1`.`member_id` = #{memberId,jdbcType=VARCHAR}
and `t1`.`station_id` = #{stationId,jdbcType=VARCHAR}
- and `t1`.`create_time` = ]]> #{endTime,jdbcType=VARCHAR}
- and `t1`.`update_time` #{startTime,jdbcType=VARCHAR}
+ and `t1`.`charge_start_time` #{endTime,jdbcType=VARCHAR}
+ and `t1`.`charge_end_time` = ]]> #{startTime,jdbcType=VARCHAR}