Merge branch 'dev' into dev-g

This commit is contained in:
Guoqs
2025-07-04 14:08:42 +08:00
22 changed files with 341 additions and 56 deletions

View File

@@ -405,4 +405,13 @@ public interface OrderBasicInfoMapper {
List<OrderVO> selectThirdPartyOrderList(@Param("dto") QueryStartChargeDTO dto);
LocalDateTime queryOrderCreateTimeByStationId(String id);
/**
* 根据参数查询订单基本信息
* @param stationIds
* @param startTime
* @param endTime
* @return
*/
List<OrderBasicInfo> getOrderBasicInfoByTimeInterval(@Param("stationIds") List<String> stationIds, @Param("startTime") String startTime, @Param("endTime") String endTime);
}

View File

@@ -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<PileStationVO> getStationSelectList(@Param("dto") QueryStationDTO dto);
List<StationSelectVO> getStationSelectList(@Param("dto") QueryStationDTO dto);
/**
* 宁夏交投查询充电站信息

View File

@@ -231,6 +231,8 @@ public interface OrderBasicInfoService{
OrderSplitResult verifyOrderConfirmAmount(List<String> paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException;
OrderSplitResult verifyOrderConfirmAmountWithCancelSplit(List<String> paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException;
/**
* 批量查询订单
* @param orderCodeList
@@ -573,4 +575,6 @@ public interface OrderBasicInfoService{
* @return
*/
Map<String, Object> verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception;
List<OrderBasicInfo> getOrderBasicInfoByTimeInterval(List<String> stationIds, String startTime, String endTime);
}

View File

@@ -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<PileStationVO> getStationSelectList(QueryStationDTO dto);
List<StationSelectVO> getStationSelectList(QueryStationDTO dto);
/**
* 宁夏交投查询站点信息

View File

@@ -2439,6 +2439,75 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
return result;
}
/**
* 校验订单分账金额(其他部分与上面方法一致,此方法仅加了撤销分账部分,只给临时接口用)
*
* @param paymentIds 支付id集合
* @param orderCode 订单编号
* @param settleAmount 结算金额
*/
@Override
public OrderSplitResult verifyOrderConfirmAmountWithCancelSplit(List<String> 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<PaymentConfirmInfo> 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<OrderBasicInfo> getOrderBasicInfoByTimeInterval(List<String> stationIds, String startTime, String endTime) {
return orderBasicInfoMapper.getOrderBasicInfoByTimeInterval(stationIds, startTime, endTime);
}
}

View File

@@ -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<PileStationVO> getStationSelectList(QueryStationDTO dto) {
public List<StationSelectVO> getStationSelectList(QueryStationDTO dto) {
AuthorizedDeptVO authorizedMap = UserUtils.getAuthorizedMap();
if (authorizedMap == null) {
// 为空表示没有权限,返回空数组

View File

@@ -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())) {

View File

@@ -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;
}

View File

@@ -3291,4 +3291,15 @@
LIMIT 1;
</select>
<select id="getOrderBasicInfoByTimeInterval" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from order_basic_info
where del_flag = '0'
and station_id in
<foreach collection="stationIds" item="stationId" open="(" separator="," close=")">
#{stationId,jdbcType=VARCHAR}
</foreach>
and create_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
</select>
</mapper>

View File

@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jsowell.pile.mapper.PileBasicInfoMapper">
<resultMap type="com.jsowell.pile.domain.PileBasicInfo" id="PileBasicInfoResult">
<result property="id" column="id" />
<result property="sn" column="sn" />
@@ -40,7 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectPileBasicInfoList" parameterType="com.jsowell.pile.domain.PileBasicInfo" resultMap="PileBasicInfoResult">
<include refid="selectPileBasicInfoVo"/>
<where>
<where>
<if test="sn != null and sn != ''"> and sn = #{sn}</if>
<if test="name != null and name != ''"> and name = #{name}</if>
<if test="businessType != null and businessType != ''"> and business_type = #{businessType}</if>
@@ -56,7 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="faultReason != null and faultReason != ''"> and fault_reason = #{faultReason}</if>
</where>
</select>
<select id="selectPileBasicInfoById" parameterType="Long" resultMap="PileBasicInfoResult">
<include refid="selectPileBasicInfoVo"/>
where id = #{id}
@@ -65,9 +65,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectPileBasicInfoBySn" resultMap="PileBasicInfoResult">
select <include refid="Base_Column_List"/>
from pile_basic_info
where sn = #{pileSn,jdbcType=VARCHAR}
where del_flag = '0'
and sn = #{pileSn,jdbcType=VARCHAR}
</select>
<insert id="insertPileBasicInfo" parameterType="com.jsowell.pile.domain.PileBasicInfo" useGeneratedKeys="true" keyProperty="id">
insert into pile_basic_info
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -145,7 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<delete id="deletePileBasicInfoByIds" parameterType="String">
delete from pile_basic_info where id in
delete from pile_basic_info where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
@@ -280,9 +281,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
t1.del_flag = '0'
and t1.id = #{id}
</select>
<select id="selectPileListByStationIds" resultType="com.jsowell.pile.vo.web.PileDetailVO">
select
select
t1.id as pileId,
t1.sn as pileSn
from
@@ -379,7 +380,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN pile_model_info t2 on t1.model_id = t2.id
LEFT JOIN pile_connector_info t3 on t1.sn = t3.pile_sn
WHERE
t1.station_id in
t1.station_id in
<foreach collection="stationIdList" item="item" open="(" separator="," close=")">
#{item,jdbcType=VARCHAR}
</foreach>
@@ -474,4 +475,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE
t1.station_id = #{stationId,jdbcType=VARCHAR}
</select>
</mapper>
</mapper>

View File

@@ -649,7 +649,7 @@
id = #{stationId,jdbcType=VARCHAR}
</update>
<select id="getStationSelectList" resultType="com.jsowell.pile.vo.web.PileStationVO">
<select id="getStationSelectList" resultType="com.jsowell.pile.vo.web.StationSelectVO">
select
t1.id,
t1.station_name as stationName