diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java index 615aa880b..f8d840cda 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java @@ -25,6 +25,7 @@ import com.jsowell.pile.vo.uniapp.customer.MemberBalanceVO; import com.jsowell.pile.vo.web.PileStationVO; import com.jsowell.service.OrderService; import com.jsowell.service.TempService; +import com.jsowell.thirdparty.platform.dto.PushOrderDTO; import org.apache.commons.collections4.CollectionUtils; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; @@ -877,4 +878,35 @@ public class TempController extends BaseController { } return response; } + + @PostMapping("/retrySendOrderData2Mq") + public RestApiResponse retrySendOrderData2Mq(@RequestBody QueryOrderDTO dto) { + RestApiResponse response; + try { + tempService.sendOrderData2Mq(dto.getOrderCode()); + response = new RestApiResponse<>(); + } catch (Exception e) { + logger.error("重试分账接口error,", e); + response = new RestApiResponse<>(e); + } + return response; + } + + /** + * 根据时间区间批量推送订单 + * @param dto + * @return + */ + @PostMapping("/pushOrderInfoBatch") + public RestApiResponse pushOrderInfoBatch(@RequestBody PushOrderDTO dto) { + RestApiResponse response = null; + try { + tempService.pushOrderInfoBatch(dto); + response = new RestApiResponse<>(); + } catch (Exception e) { + logger.error("青海平台推送订单信息 error", e); + } + logger.info("青海平台推送订单信息 result:{}", response); + return response; + } } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index 64a1ef1a4..e6f79d192 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -22,6 +22,7 @@ import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; +import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; @@ -34,7 +35,13 @@ import com.jsowell.pile.service.programlogic.AbstractProgramLogic; import com.jsowell.pile.service.programlogic.ProgramLogicFactory; import com.jsowell.pile.transaction.dto.OrderTransactionDTO; import com.jsowell.pile.transaction.service.TransactionService; +import com.jsowell.pile.vo.ThirdPartySecretInfoVO; +import com.jsowell.pile.vo.base.StationInfoVO; +import com.jsowell.pile.vo.uniapp.business.BusinessOrderDetailInfoVO; import com.jsowell.pile.vo.web.*; +import com.jsowell.thirdparty.common.CommonService; +import com.jsowell.thirdparty.platform.dto.PushOrderDTO; +import com.jsowell.thirdparty.service.ThirdpartySecretInfoService; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -117,6 +124,15 @@ public class TempService { @Autowired private OrderUnsplitRecordService orderUnsplitRecordService; + @Autowired + private ThirdpartySecretInfoService thirdpartySecretInfoService; + + @Autowired + private ThirdPartyStationRelationService thirdPartyStationRelationService; + + @Autowired + private CommonService commonService; + /** * 计算订单耗电量 * 内蒙古站点 @@ -1187,5 +1203,55 @@ public class TempService { logger.info("debugOrder结束, resultMap:{}", JSONObject.toJSONString(resultMap)); return resultMap; } + + public void sendOrderData2Mq(String orderCode) { + // 通过订单编号查询订单信息 + OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); + OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderCode); + if (orderBasicInfo == null || orderDetail == null) { + return; + } + // 发送消息 + AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() + .orderCode(orderBasicInfo.getOrderCode()) + .merchantId(orderBasicInfo.getMerchantId()) + .stationId(orderBasicInfo.getStationId()) + .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 + .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 + .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 + .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 + .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 + .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 + .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 + .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 + .build(); + + rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); + } + + /** + * 根据时间区间批量推送订单 + * @param dto + * @return + */ + public void pushOrderInfoBatch(PushOrderDTO dto) { + // 根据type查出对接的stationIds + List stationInfoVOS = thirdPartyStationRelationService.selectStationList(dto.getThirdPartyType()); + + List stationIds = stationInfoVOS.stream() + .map(StationInfoVO::getStationId) + .collect(Collectors.toList()); + + // 批量查询需要推送的订单 + List orderInfos = orderBasicInfoService.getOrderBasicInfoByTimeInterval(stationIds, dto.getStartTime(), dto.getEndTime()); + + if (CollectionUtils.isEmpty(orderInfos)) { + return; + } + orderInfos.forEach(orderBasicInfo -> { + // 推送第三方平台 + commonService.commonPushOrderInfoV2(orderBasicInfo); + }); + } } diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileStationInfoController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileStationInfoController.java index b2ff53216..474cef698 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileStationInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileStationInfoController.java @@ -7,7 +7,6 @@ import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.domain.AjaxResult; import com.jsowell.common.core.page.TableDataInfo; import com.jsowell.common.enums.BusinessType; -import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; @@ -16,7 +15,6 @@ import com.jsowell.common.util.poi.ExcelUtil; import com.jsowell.pile.domain.PileStationInfo; import com.jsowell.pile.domain.ThirdpartyParkingConfig; import com.jsowell.pile.dto.FastCreateStationDTO; -import com.jsowell.pile.dto.PushStationInfoDTO; import com.jsowell.pile.dto.QueryStationDTO; import com.jsowell.pile.dto.ThirdPartyStationRelationDTO; import com.jsowell.pile.dto.amap.EditAmapFlagDTO; @@ -27,6 +25,7 @@ import com.jsowell.pile.service.ThirdPartySettingInfoService; import com.jsowell.pile.service.ThirdPartyStationRelationService; import com.jsowell.pile.vo.base.ThirdPartyStationRelationVO; import com.jsowell.pile.vo.web.PileStationVO; +import com.jsowell.pile.vo.web.StationSelectVO; import com.jsowell.service.PileService; import com.jsowell.thirdparty.amap.service.AMapService; import com.jsowell.thirdparty.common.CommonService; @@ -36,7 +35,6 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; -import java.util.stream.Collectors; /** * 充电站信息Controller @@ -89,7 +87,7 @@ public class PileStationInfoController extends BaseController { public TableDataInfo getStationSelectList(QueryStationDTO dto) { logger.info("dto:{}", JSON.toJSONString(dto)); startPage(); - List list = pileStationInfoService.getStationSelectList(dto); + List list = pileStationInfoService.getStationSelectList(dto); return getDataTable(list); } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java index d51604c02..b0d7924bf 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java @@ -114,6 +114,12 @@ public class PileChannelEntity { return null; } + // public static String getPileSnByCtx(ChannelHandlerContext ctx) { + // for (HashMap.Entry entry : manager.entrySet()) { + // + // } + // } + /** * 打印 */ diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java index c1515f446..0f3b94334 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java @@ -213,6 +213,8 @@ public class YKCUtils { // 保存桩号和channel的关系 PileChannelEntity.checkChannel(pileSn, ctx); + + // PileChannelEntity.checkChannelV2(pileSn, ctx); } /** diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java index 514244d2d..c949ad9a7 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java @@ -69,6 +69,8 @@ public abstract class AbstractYkcHandler implements InitializingBean { // 保存桩号和channel的关系 PileChannelEntity.checkChannel(pileSn, ctx); + + // PileChannelEntity.checkChannelV2(pileSn, ctx); } /** diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java index 6da634de2..4192eb946 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/NettyServerManager.java @@ -55,12 +55,13 @@ public class NettyServerManager implements CommandLineRunner { // .option(ChannelOption.SO_BACKLOG, 128) // 默认128 .option(ChannelOption.SO_BACKLOG, 1024) .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) // 启用池化内存分配器 + .option(ChannelOption.SO_RCVBUF, 64 * 1024) // .option(ChannelOption.SO_REUSEADDR, true) .childOption(ChannelOption.SO_KEEPALIVE, true) // 保持连接 // .childOption(ChannelOption.SO_RCVBUF, 64 * 1024) // 接收缓冲区 - .childOption(ChannelOption.SO_RCVBUF, 1024 * 1024) // 接收缓冲区 - // .childOption(ChannelOption.SO_SNDBUF, 64 * 1024) // 发送缓冲区 - .childOption(ChannelOption.SO_SNDBUF, 1024 * 1024) // 发送缓冲区 + // .childOption(ChannelOption.SO_RCVBUF, 1024 * 1024) // 接收缓冲区 + .childOption(ChannelOption.SO_SNDBUF, 64 * 1024) // 发送缓冲区 + // .childOption(ChannelOption.SO_SNDBUF, 1024 * 1024) // 发送缓冲区 .childOption(ChannelOption.TCP_NODELAY, true) // 禁用 Nagle 算法 .childOption(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(32 * 1024, 64 * 1024)) // 写缓冲水位 .childOption(ChannelOption.SO_REUSEADDR, true) diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java index ce1bd6964..72f0339bf 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/yunkuaichong/NettyServerHandler.java @@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.net.InetSocketAddress; +import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; @@ -40,7 +41,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { */ private static final ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(); - private final List notPrintFrameTypeList = Lists.newArrayList("0x03"); // "0x03" + private final List notPrintFrameTypeList = Lists.newArrayList(""); // "0x03" /** * 有客户端连接服务器会触发此函数 @@ -149,8 +150,10 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { // 响应客户端 ByteBuf buffer = ctx.alloc().buffer().writeBytes(response); this.channelWrite(channel.id(), buffer); + // 获取桩号 + String pileSn = PileChannelEntity.getPileSnByChannelId(ctx.channel().id().asLongText()); // 批量响应客户端 - // this.channelWriteBatch(ctx, buffer); + this.channelWriteBatch(pileSn, buffer); if (!CollectionUtils.containsAny(notPrintFrameTypeList, frameType)) { // 应答帧类型 byte[] responseFrameTypeBytes = YKCFrameTypeCode.PlatformAnswersRelation.getResponseFrameTypeBytes(frameTypeBytes); @@ -172,7 +175,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { * @param ctx * @param msg */ - private void channelWriteBatch(String pileSn, ChannelHandlerContext ctx, Object msg) { + private void channelWriteBatch(String pileSn, Object msg) { // 获取该桩下的所有channel List list = PileChannelEntity.pileMap.get(pileSn); if(CollectionUtils.isEmpty(list)) { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index ffe3dc643..09ae7ba91 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -405,4 +405,13 @@ public interface OrderBasicInfoMapper { List selectThirdPartyOrderList(@Param("dto") QueryStartChargeDTO dto); LocalDateTime queryOrderCreateTimeByStationId(String id); + + /** + * 根据参数查询订单基本信息 + * @param stationIds + * @param startTime + * @param endTime + * @return + */ + List getOrderBasicInfoByTimeInterval(@Param("stationIds") List stationIds, @Param("startTime") String startTime, @Param("endTime") String endTime); } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileStationInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileStationInfoMapper.java index 52bcc3997..390b0a1bc 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileStationInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileStationInfoMapper.java @@ -9,6 +9,7 @@ import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryStationInfoDTO; import com.jsowell.pile.vo.base.ThirdPartyStationInfoVO; import com.jsowell.pile.vo.ningxiajiaotou.NXJTStationInfoVO; import com.jsowell.pile.vo.web.PileStationVO; +import com.jsowell.pile.vo.web.StationSelectVO; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -111,7 +112,7 @@ public interface PileStationInfoMapper { * @param dto * @return */ - List getStationSelectList(@Param("dto") QueryStationDTO dto); + List getStationSelectList(@Param("dto") QueryStationDTO dto); /** * 宁夏交投查询充电站信息 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index ae7f93b07..3f03c2afb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -231,6 +231,8 @@ public interface OrderBasicInfoService{ OrderSplitResult verifyOrderConfirmAmount(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException; + OrderSplitResult verifyOrderConfirmAmountWithCancelSplit(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException; + /** * 批量查询订单 * @param orderCodeList @@ -573,4 +575,6 @@ public interface OrderBasicInfoService{ * @return */ Map verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception; + + List getOrderBasicInfoByTimeInterval(List stationIds, String startTime, String endTime); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileStationInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileStationInfoService.java index a86adf2ad..d14a31e52 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileStationInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileStationInfoService.java @@ -2,18 +2,20 @@ package com.jsowell.pile.service; import com.jsowell.common.core.page.PageResponse; import com.jsowell.pile.domain.PileStationInfo; -import com.jsowell.pile.domain.UserFrequentedStationInfo; -import com.jsowell.pile.dto.*; +import com.jsowell.pile.dto.FastCreateStationDTO; +import com.jsowell.pile.dto.QueryStationDTO; +import com.jsowell.pile.dto.QueryStationInfoDTO; import com.jsowell.pile.dto.amap.GetStationInfoDTO; import com.jsowell.pile.dto.business.StationBusinessAnalyzeInfoDTO; import com.jsowell.pile.dto.business.StationStatisticsInfoDTO; import com.jsowell.pile.dto.lutongyunting.BindParkingPlatformDTO; import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryStationInfoDTO; -import com.jsowell.pile.vo.uniapp.business.StationBusinessAnalyzeInfoVO; import com.jsowell.pile.vo.base.ThirdPartyStationInfoVO; import com.jsowell.pile.vo.ningxiajiaotou.NXJTStationInfoVO; +import com.jsowell.pile.vo.uniapp.business.StationBusinessAnalyzeInfoVO; import com.jsowell.pile.vo.uniapp.business.StationStatisticsInfosVO; import com.jsowell.pile.vo.web.PileStationVO; +import com.jsowell.pile.vo.web.StationSelectVO; import java.util.List; @@ -155,7 +157,7 @@ public interface PileStationInfoService { /** * 查询充电站下拉列表 */ - List getStationSelectList(QueryStationDTO dto); + List getStationSelectList(QueryStationDTO dto); /** * 宁夏交投查询站点信息 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 89dfdc78d..fe14725b5 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -2439,6 +2439,75 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return result; } + /** + * 校验订单分账金额(其他部分与上面方法一致,此方法仅加了撤销分账部分,只给临时接口用) + * + * @param paymentIds 支付id集合 + * @param orderCode 订单编号 + * @param settleAmount 结算金额 + */ + @Override + public OrderSplitResult verifyOrderConfirmAmountWithCancelSplit(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException { + // 分账金额 + BigDecimal totalConfirmAmt = BigDecimal.ZERO; + // 手续费 + BigDecimal feeAmt = BigDecimal.ZERO; + // 通过支付id查询分账情况 + for (String paymentId : paymentIds) { + QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO(); + dto.setPaymentId(paymentId); + dto.setWechatAppId(wechatAppId); + QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto); + if (response != null) { + List confirms = response.getPaymentConfirms(); + if (CollectionUtils.isNotEmpty(confirms)) { + for (PaymentConfirmInfo confirm : confirms) { + // 校验分账是否撤销 + if (queryConfirmReverseStatus(confirm.getId(), wechatAppId)) { + logger.info("支付确认id:" + confirm.getId() + "撤销了。。。"); + continue; + } + // 如果没有撤销,先撤销分账,再重新进行分账 + adapayService.createConfirmReverse(confirm.getId(), wechatAppId); + + JSONObject jsonObject = JSON.parseObject(confirm.getDescription()); + if (StringUtils.equals(jsonObject.getString("orderCode"), orderCode)) { + // 订单号对的上,累计分账金额 + BigDecimal confirmAmt = new BigDecimal(confirm.getConfirmAmt()); + BigDecimal confirmedAmt = new BigDecimal(confirm.getConfirmedAmt()); + BigDecimal orderConfirmedAmt = confirmedAmt.compareTo(BigDecimal.ZERO) == 0 + ? confirmedAmt + : confirmAmt; + totalConfirmAmt = totalConfirmAmt.add(orderConfirmedAmt); + feeAmt = feeAmt.add(new BigDecimal(confirm.getFeeAmt())); + } + } + } + } + } + + OrderSplitResult result = new OrderSplitResult(); + result.setOrderCode(orderCode); + result.setSettleAmt(settleAmount.toString()); + result.setConfirmAmt(totalConfirmAmt.toString()); + if (totalConfirmAmt.compareTo(BigDecimal.ZERO) == 0) { + feeAmt = BigDecimal.ZERO; + } + result.setFeeAmt(feeAmt.toString()); + String status; + // 如果确认金额和结算金额相等,返回succeeded,其他情况返回PENDING + if (settleAmount.compareTo(totalConfirmAmt) == 0) { + // 返回succeeded 标识该笔订单已经完成了分账,不要再次执行分账 + status = AdapayStatusEnum.SUCCEEDED.getValue(); + } else { + status = AdapayStatusEnum.PENDING.getValue(); + } + result.setStatus(status); + logger.info("校验订单分账金额-orderCode:{}, 分账结果:{}", orderCode, JSON.toJSONString(result)); + return result; + } + + /** * 查询分账撤销状态 */ @@ -5240,5 +5309,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return map; } + + @Override + public List getOrderBasicInfoByTimeInterval(List stationIds, String startTime, String endTime) { + return orderBasicInfoMapper.getOrderBasicInfoByTimeInterval(stationIds, startTime, endTime); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java index 6c2b1e563..47cc2b637 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java @@ -37,6 +37,7 @@ import com.jsowell.pile.vo.uniapp.business.StationOrderQuantityInfoVO; import com.jsowell.pile.vo.uniapp.business.StationStatisticsInfosVO; import com.jsowell.pile.vo.uniapp.customer.CurrentTimePriceDetails; import com.jsowell.pile.vo.web.PileStationVO; +import com.jsowell.pile.vo.web.StationSelectVO; import com.jsowell.system.service.SysDeptService; import com.jsowell.system.service.SysUserService; import lombok.extern.slf4j.Slf4j; @@ -424,15 +425,18 @@ public class PileStationInfoServiceImpl implements PileStationInfoService { } // 2024年8月16日14点15分 天地图坐标转高德坐标 - String stationLng = pileStationInfo.getStationLng(); - String stationLat = pileStationInfo.getStationLat(); - if (StringUtils.isNotBlank(stationLng) && StringUtils.isNotBlank(stationLat)) { - // 获取经纬度 - CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToGcj02(Double.parseDouble(stationLng), Double.parseDouble(stationLat)); - pileStationInfo.setStationLng(String.format("%.6f", coordinate.getLng())); - pileStationInfo.setStationLat(String.format("%.6f", coordinate.getLat())); - log.info("天地图坐标:{}, 转高德坐标:{}", stationLng + ", " + stationLat, pileStationInfo.getStationLng() + ", " + pileStationInfo.getStationLat()); - } + // String stationLng = pileStationInfo.getStationLng(); + // String stationLat = pileStationInfo.getStationLat(); + + // 2025-07-01 存到数据库的经纬度数据不再进行转换,直接入库 + + // if (StringUtils.isNotBlank(stationLng) && StringUtils.isNotBlank(stationLat)) { + // // 获取经纬度 + // CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToGcj02(Double.parseDouble(stationLng), Double.parseDouble(stationLat)); + // pileStationInfo.setStationLng(String.format("%.6f", coordinate.getLng())); + // pileStationInfo.setStationLat(String.format("%.6f", coordinate.getLat())); + // log.info("天地图坐标:{}, 转高德坐标:{}", stationLng + ", " + stationLat, pileStationInfo.getStationLng() + ", " + pileStationInfo.getStationLat()); + // } pileStationInfo.setUpdateBy(SecurityUtils.getUsername()); pileStationInfo.setUpdateTime(DateUtils.getNowDate()); @@ -837,7 +841,7 @@ public class PileStationInfoServiceImpl implements PileStationInfoService { * @return */ @Override - public List getStationSelectList(QueryStationDTO dto) { + public List getStationSelectList(QueryStationDTO dto) { AuthorizedDeptVO authorizedMap = UserUtils.getAuthorizedMap(); if (authorizedMap == null) { // 为空表示没有权限,返回空数组 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 dabefb71b..3ec6236ee 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 @@ -556,21 +556,26 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { dto.setOrderDetail(orderDetail); transactionService.doUpdateOrder(dto); - // 组装after参数 - AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() - .orderCode(orderBasicInfo.getOrderCode()) - .merchantId(orderBasicInfo.getMerchantId()) - .stationId(orderBasicInfo.getStationId()) - .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 - .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 - .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 - .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 - .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 - .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 - .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 - .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 - .build(); - rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); + try { + // 组装after参数 + AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() + .orderCode(orderBasicInfo.getOrderCode()) + .merchantId(orderBasicInfo.getMerchantId()) + .stationId(orderBasicInfo.getStationId()) + .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 + .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 + .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 + .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 + .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 + .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 + .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 + .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 + .build(); + // 发送到rabbitMQ + rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); + } catch (Exception e) { + logger.error("【{}】-结算订单V2, 发送到rabbitMQ异常", this.getClass().getSimpleName(), e); + } // 将卡/vin状态解锁 if (!StringUtils.equals("0000000000000000", data.getLogicCard())) { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/StationSelectVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/StationSelectVO.java new file mode 100644 index 000000000..8806d9088 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/StationSelectVO.java @@ -0,0 +1,28 @@ +package com.jsowell.pile.vo.web; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 站点管理列表反参 + * + * @author JS-ZZA + * @date 2022/9/1 13:28 + */ +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class StationSelectVO { + /** + * 站点id + */ + private String id; + + /** + * 站点名称 + */ + private String stationName; +} diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index ba628b96c..4a677e0ee 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3291,4 +3291,15 @@ LIMIT 1; + diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml index 357de38fc..47c4d8298 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -40,7 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + select from pile_basic_info - where sn = #{pileSn,jdbcType=VARCHAR} + where del_flag = '0' + and sn = #{pileSn,jdbcType=VARCHAR} - + insert into pile_basic_info @@ -145,7 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from pile_basic_info where id in + delete from pile_basic_info where id in #{id} @@ -280,9 +281,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" t1.del_flag = '0' and t1.id = #{id} - + - \ No newline at end of file + diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileStationInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileStationInfoMapper.xml index 2988c1731..4d2e7ac5f 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileStationInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileStationInfoMapper.xml @@ -649,7 +649,7 @@ id = #{stationId,jdbcType=VARCHAR} - select t1.id, t1.station_name as stationName diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/PushOrderDTO.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/PushOrderDTO.java new file mode 100644 index 000000000..235406240 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/PushOrderDTO.java @@ -0,0 +1,26 @@ +package com.jsowell.thirdparty.platform.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 推送订单DTO + * + * @author Lemon + * @Date 2025/7/4 13:31:28 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PushOrderDTO { + private String thirdPartyType; + + private String orderCodeList; + + private String startTime; + + private String endTime; +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChangZhouPlatformServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChangZhouPlatformServiceImpl.java index 04bf08ac4..296fab613 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChangZhouPlatformServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChangZhouPlatformServiceImpl.java @@ -57,6 +57,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.CompletableFuture; @Service @Slf4j @@ -878,10 +879,19 @@ public class ChangZhouPlatformServiceImpl implements ThirdPartyPlatformService { OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); if (orderBasicInfo == null) { SuccStat = 1; + }else { + //调用推送订单信息 + CompletableFuture.runAsync(() -> { + try { + Thread.sleep(500); + notificationChargeOrderInfo(orderCode , thirdPartySecretInfoVO); + } catch (Exception e) { + log.error("订单:{} 推送error, ", orderCode, e); + } + }); + } map.put("SuccStat", SuccStat); - //调用推送订单信息 - notificationChargeOrderInfo(orderCode, thirdPartySecretInfoVO); return ThirdPartyPlatformUtils.generateResultMap(map, thirdPartySecretInfoVO); diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/WeiWangKuaiDianPlatformServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/WeiWangKuaiDianPlatformServiceImpl.java index 2a303be5c..6085178a3 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/WeiWangKuaiDianPlatformServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/WeiWangKuaiDianPlatformServiceImpl.java @@ -832,9 +832,9 @@ public class WeiWangKuaiDianPlatformServiceImpl implements ThirdPartyPlatformSer .startChargeSeqStat(Integer.parseInt(orderInfo.getOrderStatus())) // 订单状态 .connectorID(orderInfo.getPileConnectorCode()) // 枪口编码 .connectorStatus(info.getStatus()) // 枪口状态 - .currentA(info.getCurrent()) // 电流 - .voltageA(info.getVoltage()) // 电压 - .soc(new BigDecimal(info.getSOC())) + .currentA(current) // 电流 + .voltageA(voltage) // 电压 + .soc(new BigDecimal(soc)) .startTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, orderInfo.getChargeStartTime())) // 开始时间 .endTime(DateUtils.getDateTime()) // 本次采样时间 .totalPower(info.getChargingDegree()) // 累计充电量