xuhy
2024-10-10 a9de601f87f633f71b6e531da0b61da8665d6383
Merge remote-tracking branch 'origin/master'
2 文件已重命名
18个文件已修改
2个文件已添加
325 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java
@@ -66,17 +66,20 @@
    @TableField("start_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "会员结束时间")
    @TableField("end_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;
    @TableField("create_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "已赠送的月份")
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java
@@ -56,6 +56,12 @@
            public R<TChargingPile> getChargingPileById(Integer id) {
                return R.fail(throwable.getMessage());
            }
            @Override
            public void updateChargingPileStatus(String code, Integer status) {
                log.error("修改充电桩状态失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
@@ -49,4 +49,13 @@
    
    @PostMapping("/t-charging-pile/getChargingPileById/{id}")
    R<TChargingPile> getChargingPileById(@PathVariable("id") Integer id);
    /**
     * 修改充电桩状态
     * @param code
     * @param status
     */
    @PostMapping("/t-charging-pile/updateChargingPileStatus")
    void updateChargingPileStatus(@RequestParam("code") String code, @RequestParam("status") Integer status);
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java
@@ -14,6 +14,8 @@
    private String name;
    @ApiModelProperty(value = "桩id")
    private Integer chargingPileId;
    @ApiModelProperty(value = "站点id")
    private Integer siteId;
    @ApiModelProperty(value = "桩编号")
    private String number;
    @ApiModelProperty(value = "充电枪id")
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java
@@ -16,4 +16,8 @@
     * 充电枪编号
     */
    private String charging_gun_code;
    /**
     * 充电结束时间
     */
    private String end_time;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -140,14 +140,19 @@
            }
    
            @Override
            public void securityDetection(SecurityDetection securityDetection) {
            public void securityDetection(SecurityDetectionVO securityDetection) {
                log.error("修改安全检测数据失败:" + throwable.getMessage());
            }
    
            @Override
            public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) {
            public void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message) {
                log.error("远程启动充电应答失败:" + throwable.getMessage());
            }
            @Override
            public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply) {
                log.error("停止充电应答处理失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -177,13 +177,12 @@
                                             @RequestParam("out_trade_no") String tradeState,
                                             @RequestParam("out_trade_no") String success_time);
    
    //todo 待监听完成后调用此方法
    /**
     * 修改安全检测数据
     * @param securityDetection
     */
    @PostMapping("/t-charging-order/securityDetection")
    void securityDetection(@RequestBody SecurityDetection securityDetection);
    void securityDetection(@RequestBody SecurityDetectionVO securityDetection);
    
    
    /**
@@ -191,5 +190,13 @@
     * @param message
     */
    @PostMapping("/t-charging-order/startChargeSuccessfully")
    void startChargeSuccessfully(PlatformStartChargingReplyMessage message);
    void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message);
    /**
     * 停止充电应答处理
     * @param platformStopChargingReply
     */
    @PostMapping("/t-charging-order/terminateSuccessfulResponse")
    void terminateSuccessfulResponse(@RequestBody PlatformStopChargingReplyVO platformStopChargingReply);
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java
File was renamed from ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessage.java
@@ -7,7 +7,7 @@
 * @Date 2024/10/8 17:16
 */
@Data
public class PlatformStartChargingReplyMessage {
public class PlatformStartChargingReplyMessageVO {
    private String transaction_serial_number; // 交易流水号
    private String charging_pile_code; // 桩编码
    private String charging_gun_code; // 抢号
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.order.api.vo;
import lombok.Data;
/**
 * 远程停机命令回复
 **/
@Data
public class PlatformStopChargingReplyVO {
    private String charging_pile_code; // 桩编码
    private String charging_gun_code; // 抢号
    private Integer stop_result; // 停止结果(0:失败,1:成功)
    private Integer failure_cause; // 失败原因(0:无,1:设备编号不匹配,2:枪未处于充电状态,3:其他)
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java
File was renamed from ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetection.java
@@ -3,7 +3,7 @@
import lombok.Data;
@Data
public class SecurityDetection {
public class SecurityDetectionVO {
    private String transaction_serial_number; // 交易流水号
    private String charging_pile_code; // 桩编码
    private String charging_gun_code; // 抢号
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -109,6 +109,7 @@
        TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData();
        SiteInfoVO data = chargingPileClient.getSiteInfoByNumber1(chargingPile.getCode().toString()).getData();
        data.setChargingGunId(id);
        data.setSiteId(chargingGun.getId());
        data.setChargeMode(chargingGun.getChargeMode());
        List<TAppUserCar> cars = appUserCarService.list(new QueryWrapper<TAppUserCar>()
                .eq("app_user_id",tokenService.getLoginUserApplet().getUserId())
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -964,7 +964,7 @@
        boolean doubleVip = false;
        if (one!=null){
             TVip tVip = JSONObject.parseObject(one.getVipJson(), TVip.class);
             if (tVip.getDoubleIntegration()==1){
             if (tVip.getDoubleIntegration()!=null&&tVip.getDoubleIntegration()==1){
                 doubleVip = true;
             }
        }
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -25,6 +25,7 @@
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.log.enums.OperatorType;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.other.api.domain.TVip;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -38,7 +39,9 @@
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -55,12 +58,9 @@
    private final TChargingPileService chargingPileService;
    private final TChargingGunService chargingGunService;
    @Resource
    private TAccountingStrategyService accountingStrategyService;
    @Resource
    private TAccountingStrategyDetailService accountingStrategyDetailService;
    @Resource
    private RedisService redisService;
    @Autowired
@@ -205,6 +205,23 @@
        TChargingPile chargingPile = chargingPileService.getById(id);
        return R.ok(chargingPile);
    }
    /**
     * 更新充电桩状态
     * @param code
     * @param status
     */
    @ResponseBody
    @PostMapping("/updateChargingPileStatus")
    public void updateChargingPileStatus(@RequestParam("code") String code, @RequestParam("status") Integer status){
        TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>()
                .eq(TChargingPile::getCode, code).eq(TChargingPile::getDelFlag, 0));
        if(null != chargingPile){
            chargingPile.setStatus(0 == status ? 1 : 3);
            chargingPileService.updateById(chargingPile);
            redisService.getCacheMap("charging_pile_online").put(code, System.currentTimeMillis());
        }
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java
@@ -106,5 +106,11 @@
     * @return
     */
    PageInfo<ChargingGunMonitoring> getChargingGunMonitoring(GetChargingGunMonitoring query);
    /**
     * 定时任务修改充电桩状态
     */
    void updateStatus();
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -27,6 +27,7 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.integration.api.feignClient.IotInterfaceClient;
import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
@@ -100,6 +101,9 @@
    
    @Resource
    private IotInterfaceClient iotInterfaceClient;
    @Resource
    private RedisService redisService;
    
    
    
@@ -544,4 +548,26 @@
        }
        return pageInfo.setRecords(chargingGunMonitoring);
    }
    /**
     * 定时任务修改充电桩状态
     */
    @Override
    public void updateStatus() {
        List<TChargingPile> list = this.list(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getDelFlag, 0));
        List<TChargingPile> datas = new ArrayList();
        Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online");
        for (TChargingPile chargingPile : list) {
            Long time = (Long) charging_pile_online.get(chargingPile.getCode());
            if(null != time && System.currentTimeMillis() - time > 60000){
                chargingPile.setStatus(2);
                datas.add(chargingPile);
            }
        }
        if(datas.size() > 0){
            this.updateBatchById(datas);
        }
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java
New file
@@ -0,0 +1,30 @@
package com.ruoyi.chargingPile.util;
import com.ruoyi.chargingPile.service.TChargingPileService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
 * 定时任务工具类
 */
@Component
public class TaskUtil {
    @Resource
    private TChargingPileService chargingPileService;;
    /**
     * 每隔一分钟去处理的定时任务
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskMinute(){
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java
@@ -10,6 +10,8 @@
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Service
@@ -39,8 +41,9 @@
     */
    @Override
    public PlatformStopChargingReply getPlatformStopChargingReply(GetPlatformStopChargingReply query) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List<PlatformStopChargingReply> platformStopChargingReplies = mongoTemplate.find(new Query().addCriteria(Criteria.where("charging_pile_code").is(query.getCharging_pile_code())
                .and("charging_gun_code").is(query.getCharging_gun_code())), PlatformStopChargingReply.class);
                .and("charging_gun_code").is(query.getCharging_gun_code()).and("create_time").lte(sdf.format(new Date())).and("create_time").gte(query.getEnd_time())), PlatformStopChargingReply.class);
        return platformStopChargingReplies.size() > 0 ? platformStopChargingReplies.get(0) : null;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java
@@ -6,6 +6,7 @@
import com.ruoyi.integration.rocket.model.PlatformStartChargingReplyMessage;
import com.ruoyi.integration.rocket.util.EnhanceMessageHandler;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@@ -44,7 +45,7 @@
        BeanUtils.copyProperties(message,platformStartChargingReply);
        platformStartChargingReplyService.create(platformStartChargingReply);
        // 业务处理
        com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage();
        PlatformStartChargingReplyMessageVO message1 = new PlatformStartChargingReplyMessageVO();
        BeanUtils.copyProperties(message, message1);
        chargingOrderClient.startChargeSuccessfully(message1);
    }
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.feignClient.FaultMessageClient;
import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
import com.ruoyi.chargingPile.api.model.TChargingGun;
@@ -18,6 +19,9 @@
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO;
import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO;
import com.ruoyi.order.api.vo.SecurityDetectionVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@@ -112,6 +116,14 @@
    private QrCodeDeliveryReplyService qrCodeDeliveryReplyService;
    @Autowired
    private SecurityDetectionService securityDetectionService;
    @Resource
    private ChargingPileClient chargingPileClient;
    @StreamListener("input")
    @Override
    protected void handleMessage(ChargingMessage message) throws Exception {
@@ -135,6 +147,8 @@
                Ping ping = new Ping();
                BeanUtils.copyProperties(pingMessage,ping);
                pingService.create(ping);
                chargingPileClient.updateChargingPileStatus(pingMessage.getCharging_pile_code(), pingMessage.getCharging_gun_status());
                break;
            case SendTagConstant.END_CHARGE:
                EndChargeMessage endChargeMessage = message.getEndChargeMessage();
@@ -316,7 +330,7 @@
                BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply);
                platformStartChargingReplyService.create(platformStartChargingReply);
                // 业务处理
                com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage();
                PlatformStartChargingReplyMessageVO message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO();
                BeanUtils.copyProperties(platformStartChargingReplyMessage, message1);
                chargingOrderClient.startChargeSuccessfully(message1);
                break;
@@ -327,6 +341,9 @@
                PlatformStopChargingReply platformStopChargingReply = new PlatformStopChargingReply();
                BeanUtils.copyProperties(platformStopChargingReplyMessage,platformStopChargingReply);
                platformStopChargingReplyService.create(platformStopChargingReply);
                PlatformStopChargingReplyVO platformStopChargingReply1 = new PlatformStopChargingReplyVO();
                BeanUtils.copyProperties(platformStopChargingReply, platformStopChargingReply1);
                chargingOrderClient.terminateSuccessfulResponse(platformStopChargingReply1);
                break;
            case SendTagConstant.TRANSACTION_RECORD:
                TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage();
@@ -427,7 +444,7 @@
                SecurityDetection securityDetection = new SecurityDetection();
                BeanUtils.copyProperties(securityDetectionMessage,securityDetection);
                securityDetectionService.create(securityDetection);
                com.ruoyi.order.api.vo.SecurityDetection securityDetection1 = new com.ruoyi.order.api.vo.SecurityDetection();
                SecurityDetectionVO securityDetection1 = new SecurityDetectionVO();
                BeanUtils.copyProperties(securityDetection, securityDetection1);
                chargingOrderClient.securityDetection(securityDetection1);
                break;
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -53,6 +53,7 @@
import com.ruoyi.order.dto.OrderEvaluateVo;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.service.*;
import com.ruoyi.order.service.impl.TChargingOrderServiceImpl;
import com.ruoyi.order.util.PreviousSixMonths;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
@@ -63,6 +64,8 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.models.auth.In;
import jdk.nashorn.internal.runtime.ListAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import io.swagger.annotations.ApiOperation;
@@ -94,6 +97,8 @@
@RestController
@RequestMapping("/t-charging-order")
public class TChargingOrderController {
    private Logger log = LoggerFactory.getLogger(TChargingOrderController.class);
    @Resource
    private TChargingOrderService chargingOrderService;
@@ -465,7 +470,7 @@
     */
    @ResponseBody
    @PostMapping(value = "/securityDetection")
    public void securityDetection(@RequestBody SecurityDetection securityDetection){
    public void securityDetection(@RequestBody SecurityDetectionVO securityDetection){
        chargingOrderService.securityDetection(securityDetection);
    }
    
@@ -475,8 +480,8 @@
     */
    @ResponseBody
    @PostMapping(value = "/startChargeSuccessfully")
    public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessage message){
        System.err.println("远程启动应答:" + message);
    public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessageVO message){
        log.error("-------------------远程启动充电请求应答-------------------:" + message);
        chargingOrderService.startChargeSuccessfully(message);
    }
    
@@ -556,6 +561,20 @@
    public AjaxResult stopCharging(@PathVariable String id) {
        return chargingOrderService.stopCharging(id);
    }
    /**
     * 停止充电应答处理逻辑
     * @param platformStopChargingReply
     */
    @PostMapping("/terminateSuccessfulResponse")
    public void terminateSuccessfulResponse(@RequestBody PlatformStopChargingReplyVO platformStopChargingReply){
        log.error("-------------------远程停止充电请求应答-------------------:" + platformStopChargingReply);
        chargingOrderService.terminateSuccessfulResponse(platformStopChargingReply);
    }
    @ResponseBody
    @GetMapping(value = "/six/charge")
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -17,10 +17,6 @@
import com.ruoyi.order.api.vo.*;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
@@ -83,14 +79,14 @@
     * 安全检测数据
     * @param securityDetection
     */
    void securityDetection(SecurityDetection securityDetection);
    void securityDetection(SecurityDetectionVO securityDetection);
    
    
    /**
     * 启动充电应发
     * @param message
     */
    void startChargeSuccessfully(PlatformStartChargingReplyMessage message);
    void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message);
    
    
    /**
@@ -119,6 +115,15 @@
     * @return
     */
    AjaxResult stopCharging(String id);
    /**
     * 停止充电应答结果处理
     * @param platformStopChargingReply
     */
    void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply);
    TCharingOrderVO chargingOrder(ChargingOrderQuery dto);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -38,7 +38,7 @@
import com.ruoyi.order.api.query.SettlementListQuery;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.*;
import com.ruoyi.order.api.vo.SecurityDetection;
import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.mapper.TChargingOrderMapper;
import com.ruoyi.order.mapper.TSettlementConfirmMapper;
@@ -627,6 +627,9 @@
                }
            }
        }
        electrovalence = electrovalence.setScale(2, RoundingMode.HALF_EVEN);
        discountAmount = discountAmount.setScale(2, RoundingMode.HALF_EVEN);
        chargingOrder.setChargeAmount(electrovalence);
        chargingOrder.setVipDiscountAmount(discountAmount);
        this.updateById(chargingOrder);
@@ -762,7 +765,7 @@
     * @param securityDetection
     */
    @Override
    public void securityDetection(SecurityDetection securityDetection){
    public void securityDetection(SecurityDetectionVO securityDetection){
        GetChargingGunByCode code = new GetChargingGunByCode();
        code.setCharging_pile_code(securityDetection.getCharging_pile_code());
        code.setCharging_gun_code(securityDetection.getCharging_gun_code());
@@ -782,7 +785,7 @@
     * @param message
     */
    @Override
    public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) {
    public void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message) {
        Integer startup_result = message.getStartup_result();
        Integer failure_cause = message.getFailure_cause();
        TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, message.getTransaction_serial_number()));
@@ -955,9 +958,13 @@
    public AjaxResult stopCharging(String id) {
        TChargingOrder chargingOrder = this.getById(id);
        Integer status = chargingOrder.getStatus();
        if(status != 3){
            return AjaxResult.error("还未开始充电");
        }
        if(status == 4 || status == 5){
            return AjaxResult.error("不能重复操作");
        }
        chargingOrder.setEndTime(LocalDateTime.now());
        chargingOrder.setStatus(4);
        chargingOrder.setEndMode(1);
        this.updateById(chargingOrder);
@@ -1018,7 +1025,7 @@
                }
            }
        }
        String code1 = chargingOrder.getCode();
        
        //异步线程处理停机
        ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
@@ -1030,12 +1037,17 @@
            platformStopCharging.setCharging_pile_code(chargingPile.getCode());
            platformStopCharging.setCharging_gun_code(chargingGun.getCode());
            sendMessageClient.platformStopCharging(platformStopCharging);
            log.error(code1 + ":-------------------远程停止充电请求-------------------");
            log.error(platformStopCharging.toString());
            //开始查询停机应答,成功后开始计费费用
            for (int i = 0; i < 60; i++) {
                GetPlatformStopChargingReply query = new GetPlatformStopChargingReply();
                query.setCharging_gun_code(chargingGun.getCode());
                query.setCharging_pile_code(chargingPile.getCode());
                query.setEnd_time(chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData();
                log.error(code1 + ":-------------------查询远程停止充电应答-------------------");
                log.error(reply.toString());
                if(null == reply){
                    try {
                        Thread.sleep(1000);
@@ -1044,7 +1056,12 @@
                    }
                    continue;
                }
                TChargingOrder chargingOrder1 = this.getById(id);
                if(chargingOrder1.getStatus() != 3){
                    break;
                }
                if(0 == reply.getStop_result()){
                    String failure_cause = "";
                    switch (reply.getFailure_cause()){
@@ -1061,8 +1078,13 @@
                            failure_cause = "其他";
                            break;
                    }
                    log.error("停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause);
                    throw new RuntimeException(failure_cause);
                    log.error(code1 + ":停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    continue;
                }
                // 将枪状态重置为空闲
@@ -1070,6 +1092,7 @@
                chargingGunClient.updateChargingGunById(chargingGun);
                //计算费用,处理退款
                endCharge(chargingOrder);
                log.error(code1 + ":-------------------远程停止充电请求成功-------------------");
                break;
            }
        });
@@ -1126,8 +1149,56 @@
        return AjaxResult.success();
    }
    /**
     * 停止充电应答结果处理
     * @param platformStopChargingReply
     */
    @Override
    public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply){
        GetChargingGunByCode code = new GetChargingGunByCode();
        code.setCharging_gun_code(platformStopChargingReply.getCharging_gun_code());
        code.setCharging_pile_code(platformStopChargingReply.getCharging_pile_code());
        TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
        TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGun.getId())
                .orderByDesc(TChargingOrder::getEndTime).eq(TChargingOrder::getRechargePaymentStatus, 2).last(" limit 0, 1"));
        if(null != order && order.getStatus() != 3){
            return;
        }
        String code1 = order.getCode();
        if(0 == platformStopChargingReply.getStop_result()){
            String failure_cause = "";
            switch (platformStopChargingReply.getFailure_cause()){
                case 0:
                    failure_cause = "无";
                    break;
                case 1:
                    failure_cause = "设备编号不匹配";
                    break;
                case 2:
                    failure_cause = "枪未处于充电状态";
                    break;
                case 3:
                    failure_cause = "其他";
                    break;
            }
            log.error(code1 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause);
            return;
        }
        // 将枪状态重置为空闲
        chargingGun.setStatus(2);
        chargingGunClient.updateChargingGunById(chargingGun);
        //计算费用,处理退款
        endCharge(order);
    }
    /**
     * 手动结束后的费用计算和退款逻辑
     */