Merge branch 'dev-new' into dev-new-rabbitmq

# Conflicts:
#	jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java
#	jsowell-admin/src/test/java/SpringBootTestController.java
This commit is contained in:
Guoqs
2024-11-16 14:27:13 +08:00
31 changed files with 1560 additions and 1191 deletions

View File

@@ -0,0 +1,117 @@
package com.jsowell.api.thirdparty;
import com.alibaba.fastjson2.JSON;
import com.jsowell.common.annotation.Anonymous;
import com.jsowell.common.enums.thirdparty.ThirdPartyReturnCodeEnum;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.pile.thirdparty.CommonParamsDTO;
import com.jsowell.thirdparty.lianlian.common.CommonResult;
import com.jsowell.thirdparty.platform.service.ThirdPartyPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* 甘肃省平台Controller
*
* @author Lemon
* @Date 2024/11/9 13:22:05
*/
@Anonymous
@RestController
@RequestMapping("/gansu")
public class GanSuController extends ThirdPartyBaseController{
private final String platformName = "甘肃省平台";
@Autowired
@Qualifier("ganSuPlatformServiceImpl")
private ThirdPartyPlatformService platformLogic;
/**
* getToken
*/
@PostMapping("/v1/query_token")
public CommonResult<?> queryToken(@RequestBody CommonParamsDTO dto) {
// logger.info("{}-请求令牌 params:{}", platformName, JSON.toJSONString(dto));
try {
Map<String, String> map = platformLogic.queryToken(dto);
logger.info("{}-请求令牌, params:{}, result:{}", platformName, JSON.toJSONString(dto), JSON.toJSONString(map));
return CommonResult.success(0, "请求令牌成功!", map.get("Data"), map.get("Sig"));
} catch (Exception e) {
logger.error("{}-获取token接口, 异常, params:{}", platformName, JSON.toJSONString(dto), e);
return CommonResult.failed("获取token发生异常");
}
}
/**
* 查询充电站信息
* query_stations_info
*/
@PostMapping("/v1/query_stations_info")
public CommonResult<?> query_stations_info(HttpServletRequest request, @RequestBody CommonParamsDTO dto) {
logger.info("{}-查询充电站信息 params:{}", platformName, JSON.toJSONString(dto));
try {
// 校验令牌
if (!verifyToken(request.getHeader("Authorization"))) {
// 校验失败
return CommonResult.failed(ThirdPartyReturnCodeEnum.TOKEN_ERROR);
}
// 校验签名
if (!verifySignature(dto)) {
// 签名错误
return CommonResult.failed(ThirdPartyReturnCodeEnum.SIGN_ERROR);
}
// 解析入参
QueryStationInfoDTO queryStationInfoDTO = parseParamsDTO(dto, QueryStationInfoDTO.class);
// 执行逻辑
Map<String, String> map = platformLogic.queryStationsInfo(queryStationInfoDTO);
return CommonResult.success(0, "查询充电站信息成功!", map.get("Data"), map.get("Sig"));
} catch (Exception e) {
logger.info("{}-查询充电站信息 error:", platformName, e);
}
return CommonResult.failed("查询充电站信息发生异常");
}
/**
* 查询充电站状态信息
* query_station_status
*/
@PostMapping("/v1/query_station_status")
public CommonResult<?> queryStationStatus(HttpServletRequest request, @RequestBody CommonParamsDTO dto) {
logger.info("{}-查询充电站状态信息 params:{}", platformName, JSON.toJSONString(dto));
try {
// 校验令牌
if (!verifyToken(request.getHeader("Authorization"))) {
// 校验失败
return CommonResult.failed(ThirdPartyReturnCodeEnum.TOKEN_ERROR);
}
// 校验签名
if (!verifySignature(dto)) {
// 签名错误
return CommonResult.failed(ThirdPartyReturnCodeEnum.SIGN_ERROR);
}
// 解析入参
QueryStationInfoDTO queryStationInfoDTO = parseParamsDTO(dto, QueryStationInfoDTO.class);
// 执行逻辑
Map<String, String> map = platformLogic.queryStationStatus(queryStationInfoDTO);
return CommonResult.success(0, "查询充电站状态信息成功!", map.get("Data"), map.get("Sig"));
} catch (Exception e) {
logger.error("{}-查询充电站状态信息 error:", platformName, e);
}
return CommonResult.failed("查询充电站状态信息发生异常");
}
}

View File

@@ -97,7 +97,7 @@ public class NeiMengGuController extends ThirdPartyBaseController {
*/
@PostMapping("/v1/supervise_query_stations_info")
public CommonResult<?> queryStationsInfo(HttpServletRequest request, @RequestBody CommonParamsDTO dto) {
logger.info("{}-查询运营商信息 params:{}", platformName, JSON.toJSONString(dto));
logger.info("{}-查询充换电站信息 params:{}", platformName, JSON.toJSONString(dto));
try {
// 校验令牌
boolean verifyToken = verifyToken(request.getHeader("Authorization"));
@@ -105,7 +105,6 @@ public class NeiMengGuController extends ThirdPartyBaseController {
// 校验失败
return CommonResult.failed(ThirdPartyReturnCodeEnum.TOKEN_ERROR);
}
// 校验签名
if (!verifySignature(dto)) {
// 签名错误
@@ -113,11 +112,11 @@ public class NeiMengGuController extends ThirdPartyBaseController {
}
QueryStationInfoDTO paramDTO = parseParamsDTO(dto, QueryStationInfoDTO.class);
Map<String, String> map = platformLogic.queryStationsInfo(paramDTO);
logger.info("{}-查询运营商信息 result:{}", platformName, JSON.toJSONString(map));
return CommonResult.success(0, "请求令牌成功!", map.get("Data"), map.get("Sig"));
logger.info("{}-查询充换电站信息 result:{}", platformName, JSON.toJSONString(map));
return CommonResult.success(0, "成功!", map.get("Data"), map.get("Sig"));
} catch (Exception e) {
logger.error("{}-查询运营商信息 异常", platformName, e);
return CommonResult.failed("查询运营商信息发生异常");
logger.error("{}-查询充换电站信息 异常", platformName, e);
return CommonResult.failed("查询充换电站信息发生异常");
}
}

View File

@@ -28,7 +28,7 @@ import java.util.Map;
@RequestMapping("/suzhou")
public class SuZhouPlatformController extends ThirdPartyBaseController{
private final String platformName = "苏州平台";
private final String platformName = "苏州平台";
@Autowired
@Qualifier("suZhouPlatformServiceImpl")

View File

@@ -1,6 +1,7 @@
package com.jsowell.api.uniapp.customer;
import com.alibaba.fastjson2.JSON;
import com.google.common.collect.ImmutableMap;
import com.jsowell.adapay.dto.BalancePaymentRequestDTO;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.common.annotation.Anonymous;
@@ -596,4 +597,56 @@ public class TempController extends BaseController {
rabbitTemplate.convertAndSend(dto.getExchange(), dto.getRoutingKey(), dto.getData());
return new RestApiResponse<>();
}
/* 计算订单耗电量
* dto.setStationId("657");
* dto.setStartTime("2024-10-23 00:00:00");
* dto.setEndTime("2024-11-07 23:59:59");
*/
@PostMapping("/calculateOrderElectricity")
public RestApiResponse<?> calculateOrderElectricity(@RequestBody QueryOrderDTO dto) {
RestApiResponse<?> response;
try {
tempService.calculateOrderElectricity(dto);
response = new RestApiResponse<>();
} catch (Exception e) {
logger.error("计算订单耗电量error", e);
response = new RestApiResponse<>();
}
return response;
}
/**
* 校验订单是否为并充订单
* https://localhost:8080/temp/checkCombinedChargingOrder
*/
@PostMapping("/checkCombinedChargingOrder")
public RestApiResponse<?> checkCombinedChargingOrder(@RequestBody QueryOrderDTO dto) {
RestApiResponse<?> response;
try {
Map<String, List<String>> map = tempService.checkCombinedChargingOrder(dto.getOrderCodeList());
response = new RestApiResponse<>(map);
} catch (Exception e) {
logger.error("校验订单是否为并充订单error", e);
response = new RestApiResponse<>();
}
return response;
}
/**
* 并充订单数据修正
* https://localhost:8080/temp/correctCombinedChargingOrder
*/
@PostMapping("/correctCombinedChargingOrder")
public RestApiResponse<?> correctCombinedChargingOrder(@RequestBody QueryOrderDTO dto) {
RestApiResponse<?> response;
try {
List<String> list = tempService.correctCombinedChargingOrder(dto);
response = new RestApiResponse<>(ImmutableMap.of("correctOrderCodeList", list));
} catch (Exception e) {
logger.error("校验订单是否为并充订单error", e);
response = new RestApiResponse<>();
}
return response;
}
}

View File

@@ -1,6 +1,7 @@
package com.jsowell.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -13,15 +14,18 @@ import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.adapay.vo.OrderSplitResult;
import com.jsowell.adapay.vo.PaymentInfo;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.adapay.AdapayStatusEnum;
import com.jsowell.common.enums.ykc.*;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.*;
import com.jsowell.pile.dto.ApplyRefundDTO;
import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.dto.SettleOrderReportDTO;
import com.jsowell.pile.mapper.OrderBasicInfoMapper;
import com.jsowell.pile.mapper.PileMsgRecordMapper;
import com.jsowell.pile.service.*;
import com.jsowell.pile.vo.web.ClearingBillVO;
import com.jsowell.pile.vo.web.OrderListVO;
@@ -31,11 +35,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -77,6 +83,37 @@ public class TempService {
@Autowired
private MemberAdapayRecordService memberAdapayRecordService;
@Autowired
private PileMsgRecordMapper pileMsgRecordMapper;
@Autowired
private OrderDetailService orderDetailService;
@Autowired
private OrderMonitorDataService orderMonitorDataService;
@Autowired
private RedisCache redisCache;
/**
* 计算订单耗电量
* 内蒙古站点
*/
public void calculateOrderElectricity(QueryOrderDTO dto) {
// 根据站点id查询充电桩列表
// List<String> pileSnList = Lists.newArrayList("88240000006708", "88240000006709", "88240000006713", "88240000006714");
// 查询充电桩的订单列表
List<OrderListVO> orderListVOS = orderBasicInfoService.selectOrderBasicInfoList(dto);
logger.info("查询订单列表:{}", JSON.toJSONString(orderListVOS));
// 根据充电桩编号,查询报文
for (OrderListVO orderVO : orderListVOS) {
String pileSn = orderVO.getPileSn();
List<PileMsgRecord> pileFeedList = pileMsgRecordMapper.getPileFeedList(pileSn);
}
//
}
/**
* 手动接口执行订单分账逻辑
*/
@@ -551,4 +588,127 @@ public class TempService {
}
logger.info("{} - {} 期间,共有{}笔支付单存在剩余金额, 共计:{}list:{}", dto.getStartTime(), dto.getEndTime(), paymentIdList.size(), total, JSON.toJSONString(paymentIdList));
}
/**
* 校验是否为并充订单
*/
public Map<String, List<String>> checkCombinedChargingOrder(List<String> orderCodeList) throws BaseAdaPayException {
Map<String, List<String>> resultMap = Maps.newHashMap();
List<String> combinedChargingOrderList = Lists.newArrayList();
List<String> notCombinedChargingOrderList = Lists.newArrayList();
List<String> noDataOrderList = Lists.newArrayList();
for (String orderCode : orderCodeList) {
// 查询orderMonitorData
OrderMonitorData orderMonitorData = orderMonitorDataService.selectByOrderCode(orderCode);
if (orderMonitorData == null) {
logger.info("订单:{}不存在", orderCode);
noDataOrderList.add(orderCode);
continue;
}
JSONArray jsonArray = JSONArray.parseArray(orderMonitorData.getMonitorData());
List<BigDecimal> orderOutputCurrentList = Lists.newArrayList();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String outputCurrent = jsonObject.getString("outputCurrent");
orderOutputCurrentList.add(new BigDecimal(outputCurrent));
}
// 如果orderOutputCurrentList中任意一值大于250判定为并充订单
if (orderOutputCurrentList.stream().anyMatch(current -> current.compareTo(new BigDecimal("250")) > 0)) {
combinedChargingOrderList.add(orderCode);
} else {
notCombinedChargingOrderList.add(orderCode);
}
}
resultMap.put("combinedChargingOrderList", combinedChargingOrderList);
resultMap.put("notCombinedChargingOrderList", notCombinedChargingOrderList);
resultMap.put("noDataOrderList", noDataOrderList);
return resultMap;
}
/**
* 修正并充订单数据
* @param dto
*/
@Transactional(rollbackFor = Exception.class)
public List<String> correctCombinedChargingOrder(QueryOrderDTO dto) {
List<String> orderCodeList = dto.getOrderCodeList();
logger.info("修正并充订单数据工具,订单号:{}", JSON.toJSONString(orderCodeList));
// 查询临时表,不要重复修正
String redisKey = "correct_combined_charging_order";
List<String> redisResult = redisCache.getCacheList(redisKey);
if (CollectionUtils.isNotEmpty(redisResult)) {
logger.info("修正并充订单数据工具, 已修正订单:{}", JSON.toJSONString(redisResult));
// 过滤掉已修正的订单
orderCodeList.removeAll(redisResult);
logger.info("修正并充订单数据工具. 过滤掉已修正的订单剩余:{}", JSON.toJSONString(orderCodeList));
}
if (CollectionUtils.isEmpty(orderCodeList)) {
logger.info("修正并充订单数据工具, 无需要修正的订单");
return Lists.newArrayList();
}
BigDecimal multiple = new BigDecimal("2");
// 查询订单主表数据
List<OrderBasicInfo> orderBasicInfos = orderBasicInfoService.queryOrderList(orderCodeList);
for (OrderBasicInfo orderBasicInfo : orderBasicInfos) {
orderBasicInfo.setOrderAmount(orderBasicInfo.getOrderAmount().multiply(multiple));
orderBasicInfo.setVirtualAmount(orderBasicInfo.getVirtualAmount().multiply(multiple));
orderBasicInfo.setUpdateTime(DateUtils.getNowDate());
}
// 查询订单详情数据
List<OrderDetail> orderDetailList = orderBasicInfoService.getOrderDetailList(orderCodeList);
for (OrderDetail orderDetail : orderDetailList) {
// 订单总用电量
orderDetail.setTotalUsedElectricity(orderDetail.getTotalUsedElectricity().multiply(multiple));
// 订单总电费金额
orderDetail.setTotalElectricityAmount(orderDetail.getTotalElectricityAmount().multiply(multiple));
// 订单总服务费金额
orderDetail.setTotalServiceAmount(orderDetail.getTotalServiceAmount().multiply(multiple));
// 订单总金额
orderDetail.setTotalOrderAmount(orderDetail.getTotalOrderAmount().multiply(multiple));
// 尖时段
if (orderDetail.getSharpUsedElectricity() != null && orderDetail.getSharpUsedElectricity().compareTo(BigDecimal.ZERO) > 0) {
orderDetail.setSharpUsedElectricity(orderDetail.getSharpUsedElectricity().multiply(multiple));
// orderDetail.setSharpAmount(orderDetail.getSharpAmount().multiply(multiple));
orderDetail.setSharpAmount(orderDetail.getSharpPrice().multiply(orderDetail.getSharpUsedElectricity()));
}
// 峰时段
if (orderDetail.getPeakUsedElectricity() != null && orderDetail.getPeakUsedElectricity().compareTo(BigDecimal.ZERO) > 0) {
orderDetail.setPeakUsedElectricity(orderDetail.getPeakUsedElectricity().multiply(multiple));
// orderDetail.setPeakAmount(orderDetail.getPeakAmount().multiply(multiple));
orderDetail.setPeakAmount(orderDetail.getPeakPrice().multiply(orderDetail.getPeakUsedElectricity()));
}
// 平时段
if (orderDetail.getFlatUsedElectricity() != null && orderDetail.getFlatUsedElectricity().compareTo(BigDecimal.ZERO) > 0) {
orderDetail.setFlatUsedElectricity(orderDetail.getFlatUsedElectricity().multiply(multiple));
// orderDetail.setFlatAmount(orderDetail.getFlatAmount().multiply(multiple));
orderDetail.setFlatAmount(orderDetail.getFlatPrice().multiply(orderDetail.getFlatUsedElectricity()));
}
// 谷时段
if (orderDetail.getValleyUsedElectricity() != null && orderDetail.getValleyUsedElectricity().compareTo(BigDecimal.ZERO) > 0) {
orderDetail.setValleyUsedElectricity(orderDetail.getValleyUsedElectricity().multiply(multiple));
// orderDetail.setValleyAmount(orderDetail.getValleyAmount().multiply(multiple));
orderDetail.setValleyAmount(orderDetail.getValleyPrice().multiply(orderDetail.getValleyUsedElectricity()));
}
orderDetail.setUpdateTime(DateUtils.getNowDate());
}
// 更新数据库
int updateCount = 0;
if (CollectionUtils.isNotEmpty(orderBasicInfos)) {
updateCount = orderBasicInfoService.updateBatch(orderBasicInfos);
}
if (CollectionUtils.isNotEmpty(orderDetailList)) {
orderDetailService.updateBatch(orderDetailList);
}
if (orderCodeList.size() == updateCount) {
logger.info("修正并充订单数据工具, 修正成功, 订单号:{}", JSON.toJSONString(orderCodeList));
Map<String, List<String>> redisMap = Maps.newHashMap();
redisMap.put(redisKey, orderCodeList);
redisCache.batchSetCacheList(redisMap, 300, TimeUnit.DAYS);
}
return orderCodeList;
}
}