luodangjia
2024-11-02 858d8b41a967c6267760aca0ae4bbfccc3b81654
Merge remote-tracking branch 'origin/master'
35个文件已修改
620 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/结算汇总.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/账户结算账单.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
@@ -36,6 +36,10 @@
    @ApiModelProperty(value = "用户id")
    @TableField("app_user_id")
    private Long appUserId;
    @ApiModelProperty(value = "订单标题")
    @TableField("title")
    private String title;
    @ApiModelProperty(value = "停车场名称")
    @TableField("name")
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java
@@ -124,7 +124,7 @@
            }
            @Override
            public R<String> setupBillingModel1(String deviceId) {
            public R<String> setupBillingModel1(String deviceId, String json) {
                return R.fail("远程更新硬件:" + throwable.getMessage());
            }
        };
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java
@@ -9,6 +9,8 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * 充电服务
 * @author ruoyi
@@ -176,7 +178,7 @@
    public R<String> platformRemoteUpdate(@RequestBody PlatformRemoteUpdate platformRemoteUpdate);
    @PostMapping("/iot/setupBillingModel")
    public R<String> setupBillingModel1(@RequestParam("deviceId") String deviceId);
    public R<String> setupBillingModel1(@RequestParam("deviceId") String deviceId, @RequestParam("json") String json);
ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -6,4 +6,5 @@
com.ruoyi.integration.api.factory.PlatformStopChargingReplyFallbackFactory
com.ruoyi.integration.api.factory.SwitchwayGateFallbackFactory
com.ruoyi.integration.api.factory.IotInterfaceFallbackFactory
com.ruoyi.integration.api.factory.SecurityDetectionFallbackFactory
com.ruoyi.integration.api.factory.SecurityDetectionFallbackFactory
com.ruoyi.integration.api.factory.BmsDemandAndChargerExportationFallbackFactory
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -34,7 +34,9 @@
    @ApiModelProperty(value = "序号")
    @TableField(exist = false)
    private Integer xuhao;
    @ApiModelProperty(value = "退款描述")
    @TableField(exist = false)
    private String refundContent;
    @ApiModelProperty(value = "订单编号")
    @TableField("code")
    private String code;
@@ -206,6 +208,9 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField("refund_time")
    private LocalDateTime refundTime;
    @ApiModelProperty(value = "退款成功时间")
    @TableField(exist = false)
    private String refundTime1;
    @ApiModelProperty(value = "总电量")
    @TableField("total_electricity")
    private BigDecimal totalElectricity;
@@ -232,6 +237,9 @@
    @ApiModelProperty(value = "支付方式")
    @TableField(exist = false)
    private String rechargePaymentType1;
    @ApiModelProperty(value = "支付平台")
    @TableField(exist = false)
    private String payPlatform;
    @ApiModelProperty(value = "充电启动方式")
    @TableField(exist = false)
    private String chargingType;
@@ -244,6 +252,9 @@
    @ApiModelProperty(value = "充电费用")
    @TableField(exist = false)
    private String totalAmount;
    @ApiModelProperty(value = "合计")
    @TableField(exist = false)
    private BigDecimal total;
    @ApiModelProperty(value = "优惠抵扣")
    @TableField(exist = false)
    private String discount;
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java
@@ -40,6 +40,7 @@
    @TableField("refund_code")
    private String refundCode;
    @ApiModelProperty(value = "退款金额")
    @TableField("refund_amount")
    private BigDecimal refundAmount;
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
@@ -101,6 +101,12 @@
    @ApiModelProperty(value = "承担金额")
    @TableField("proportion_money")
    private BigDecimal proportionMoney;
    @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例")
    @TableField(exist = false)
    private String proportionPartnerString;
    @ApiModelProperty(value = "平台充电服务费根据合同约定分成比例")
    @TableField(exist = false)
    private String proportionMoneyString;
    @ApiModelProperty(value = "本期结算电费总金额 (实际电费转账)")
    @TableField("total_electronic")
    private BigDecimal totalElectronic;
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.model.TChargingBill;
import com.ruoyi.order.api.model.TChargingOrder;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -27,5 +28,7 @@
    private BigDecimal sharingAmount;
    @ApiModelProperty(value = "列表数据")
    private PageInfo<ChargingBillListVO> list;
    @ApiModelProperty(value = "导出数据")
    private List<TChargingOrder> orderList;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java
@@ -17,6 +17,8 @@
    @ApiModelProperty(value = "订单状态")
    private Integer status;
    @ApiModelProperty(value = "充值支付方式(1=微信,2=支付宝)")
    private Integer rechargePaymentType;
    @ApiModelProperty(value = "充值支付状态(1=待支付,2=已支付)")
    private Integer rechargePaymentStatus;
    @ApiModelProperty(value = "电站id")
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -137,11 +137,11 @@
        BigDecimal vipElectrovalence = data.getVipElectrovalence();
        // 计算预付金额能充多少度普通电
        BigDecimal divide1 = money.divide(electrovalence, 2, BigDecimal.ROUND_HALF_UP);
        // 计算冲会员电能充多少度会员电
        BigDecimal divide = money.divide(vipElectrovalence, 2, BigDecimal.ROUND_HALF_UP);
        BigDecimal subtract = divide.subtract(divide1);
        // 计算冲会员充电需要多少钱
        BigDecimal vipMoney = divide1.multiply(vipElectrovalence).setScale(2,BigDecimal.ROUND_HALF_UP);
//        BigDecimal subtract = divide.subtract(divide1);
        // 优惠金额
        data.setMoney(subtract.multiply(electrovalence.subtract(vipElectrovalence)).setScale(2, BigDecimal.ROUND_HALF_UP));
        data.setMoney(electrovalence.multiply(divide1).subtract(vipMoney).setScale(2, BigDecimal.ROUND_DOWN));
        return AjaxResult.ok(data);
    }
    /**
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java
@@ -55,21 +55,24 @@
        getAppUserVipDetail.setVipId(user.getVipId());
        R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
        TAppUserVipDetail data1 = appUserVipDetail.getData();
        String vipJson = data1.getVipJson();
        TVip vip = JSON.parseObject(vipJson, TVip.class);
        // 查询邀请用户获得积分配置
        TIntegralRule integralRule = integralRuleClient.getSet().getData();
        JSONObject jsonObject = JSONObject.parseObject(integralRule.getInviteUsersToEarnPoints());
        TInviteUser inviteUser = new TInviteUser();
        inviteUser.setAppUserId(beInvitedAppUserId);
        inviteUser.setBeInvitedAppUserId(appUserId);
        inviteUser.setCreateTime(LocalDateTime.now());
        if(Objects.nonNull(vip) && vip.getDoubleIntegration() == 1){
            inviteUser.setAward(jsonObject.getInteger("num1")*2);
        if(Objects.nonNull(data1)){
            String vipJson = data1.getVipJson();
            TVip vip = JSON.parseObject(vipJson, TVip.class);
            if(Objects.nonNull(vip) && vip.getDoubleIntegration() == 1){
                inviteUser.setAward(jsonObject.getInteger("num1")*2);
            }else {
                inviteUser.setAward(jsonObject.getInteger("num1"));
            }
        }else {
            inviteUser.setAward(jsonObject.getInteger("num1"));
        }
        inviteUser.setAppUserId(beInvitedAppUserId);
        inviteUser.setBeInvitedAppUserId(appUserId);
        inviteUser.setCreateTime(LocalDateTime.now());
        this.save(inviteUser);
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -144,6 +144,11 @@
                Long userId = tokenService.getLoginUserApplet().getUserId();
                // 根据id查询用户信息
                TAppUser appUser = appUserClient.getUserById(userId).getData();
                if(Objects.nonNull(byId1.getDiscount())){
                    siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                }else {
                    siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                }
                if(Objects.nonNull(appUser)){
//                    TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                    GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
@@ -151,15 +156,13 @@
                    getAppUserVipDetail.setVipId(appUser.getVipId());
                    R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
                    TAppUserVipDetail data1 = appUserVipDetail.getData();
                    String vipJson = data1.getVipJson();
                    TVip vip = JSON.parseObject(vipJson, TVip.class);
                    if(Objects.nonNull(vip) && vip.getType() == 2){
                        siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence()));
                    }else {
                        siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                    if(Objects.nonNull(data1)){
                        String vipJson = data1.getVipJson();
                        TVip vip = JSON.parseObject(vipJson, TVip.class);
                        if(Objects.nonNull(vip) && vip.getType() == 2){
                            siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence()));
                        }
                    }
                }else {
                    siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP));
                }
            }
        }
@@ -192,6 +195,11 @@
                Long userId = tokenService.getLoginUserApplet().getUserId();
                // 根据id查询用户信息
                TAppUser appUser = appUserClient.getUserById(userId).getData();
                if(Objects.nonNull(byId1.getDiscount())){
                    siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                }else {
                    siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                }
                if(Objects.nonNull(appUser)){
//                    TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                    GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
@@ -199,15 +207,13 @@
                    getAppUserVipDetail.setVipId(appUser.getVipId());
                    R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
                    TAppUserVipDetail data1 = appUserVipDetail.getData();
                    String vipJson = data1.getVipJson();
                    TVip vip = JSON.parseObject(vipJson, TVip.class);
                    if(Objects.nonNull(vip) && vip.getType() == 2){
                        siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence()));
                    }else{
                        siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                    if(Objects.nonNull(data1)){
                        String vipJson = data1.getVipJson();
                        TVip vip = JSON.parseObject(vipJson, TVip.class);
                        if(Objects.nonNull(vip) && vip.getType() == 2){
                            siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence()));
                        }
                    }
                }else {
                    siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP));
                }
            }
        }
@@ -405,8 +411,9 @@
    @ApiOperation(value = "获取站点列表", tags = {"小程序-站点管理-地图导航站点"})
    @PostMapping("/getMapSiteList")
    public AjaxResult<List<SiteVO>> getMapSiteList(@Validated @RequestBody SiteQuery query){
        return AjaxResult.success(siteService.getMapSiteList(query));
    public AjaxResult<List<SiteVO>> getMapSiteList(@Validated @RequestBody SiteQuery query, HttpServletRequest request){
        int isLogin = StringUtils.isEmpty(SecurityUtils.getToken(request)) ? 0 : 1;
        return AjaxResult.success(siteService.getMapSiteList(query,isLogin));
    }
    @ApiOperation(value = "获取站点详细信息", tags = {"小程序-站点管理-站点详情"})
    @PostMapping("/getDetailById")
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -1,6 +1,8 @@
package com.ruoyi.chargingPile.controller;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.chargingPile.api.dto.TAccountingStrategyDTO;
@@ -90,7 +92,7 @@
    @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理", "管理后台-充电桩信息"},value = "查询计费策略明细列表")
    @GetMapping(value = "/queryAccountingStrategyDetailByStrategyId")
    public AjaxResult<List<TAccountingStrategyDetailVO>> queryAccountingStrategyDetailByStrategyId(@RequestParam("strategyId") Integer strategyId) {
        List<TAccountingStrategyDetailVO> list = accountingStrategyDetailService.queryAccountingStrategyDetailByStrategyId(strategyId);
        List<TAccountingStrategyDetailVO> list = accountingStrategyDetailService.queryMangementAccountingStrategyDetailByStrategyId(strategyId);
        list.forEach(detail -> {
            detail.setTotalPrice(detail.getElectrovalence().add(detail.getServiceCharge()));
        });
@@ -119,16 +121,16 @@
        Long userId = SecurityUtils.getLoginUser().getUserid();
        dto.setUserId(userId);
        accountingStrategyService.save(dto);
        // 添加明细
        dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId()));
        accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails());
        if(null != dto.getSiteId()){
            //下发硬件数据
            List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, dto.getSiteId()).eq(TChargingPile::getDelFlag, 0).list();
            for (TChargingPile tChargingPile : list) {
                integrationClient.setupBillingModel1(tChargingPile.getCode());
                integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(dto.getAccountingStrategyDetails()));
            }
        }
        // 添加明细
        dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId()));
        accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails());
        return AjaxResult.ok(dto.getId());
    }
@@ -202,7 +204,7 @@
            //下发硬件数据
            List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, dto.getSiteId()).eq(TChargingPile::getDelFlag, 0).list();
            for (TChargingPile tChargingPile : list) {
                integrationClient.setupBillingModel1(tChargingPile.getCode());
                integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(dto.getAccountingStrategyDetails()));
            }
        }
        return AjaxResult.success();
@@ -270,8 +272,9 @@
                String twoUserName = sysUserClient.getSysUser(accountingStrategy.getTwoUserId()).getData().getNickName();
                accountingStrategyVO.setTwoUserName(twoUserName);
            }
            if(null != children.getUserId()){
                String userName = sysUserClient.getSysUser(children.getUserId()).getData().getNickName();
            TAccountingStrategy accountingStrategy1 = accountingStrategyService.getById(id);
            if(null != accountingStrategy1.getUserId()){
                String userName = sysUserClient.getSysUser(accountingStrategy1.getUserId()).getData().getNickName();
                accountingStrategyVO.setUserName(userName);
            }
            accountingStrategyVO.setAccountingStrategyDetailList(accountingStrategyDetailService.list(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
@@ -379,9 +382,11 @@
                    accountingStrategyService.removeById(one.getId());
                }
                //硬件
                List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId.getId()));
                List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, byId.getSiteId()).list();
                for (TChargingPile tChargingPile : list) {
                    integrationClient.setupBillingModel1(tChargingPile.getCode());
                    integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails));
                }
            }
        }else {
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -101,6 +101,7 @@
    @Resource
    private AppUserCarClient appUserCarClient;
    @Autowired
    public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService, RedisService redisService) {
        this.applyChargingPileService = applyChargingPileService;
@@ -269,10 +270,10 @@
    @ApiOperation(value = "下载-已出账", tags = {"管理后台-充电算账单"})
    @PutMapping("/downloadBill")
    @Log(title = "【充电算账单】下载算账单", businessType = BusinessType.EXPORT)
    public R downloadBill(@RequestBody ExportUidDto uid, HttpServletResponse response)
    public R downloadBill(@RequestBody String uid, HttpServletResponse response)
    {
        ChargingListQuery chargingListQuery = new ChargingListQuery();
        chargingListQuery.setUid(uid.getUid());
        chargingListQuery.setUid(uid);
        chargingListQuery.setPageCurr(1);
        chargingListQuery.setPageSize(99999);
        ChargingBillVO data = chargingOrderClient.chargingBillListR(chargingListQuery).getData();
@@ -314,6 +315,28 @@
    {   dto.setPageCurr(1);
        dto.setPageSize(99999999);
        AccountListVO data = orderClient.accountBillList(dto).getData();
        List<TChargingOrder> collect = data.getOrderList().stream().distinct().collect(Collectors.toList());
        int i = 1;
        BigDecimal bigDecimal = new BigDecimal("0");
        for (TChargingOrder chargingOrder : collect) {
            bigDecimal = bigDecimal.add(chargingOrder.getPaymentAmount());
            if (chargingOrder.getRechargePaymentType()!=null){
                switch (chargingOrder.getRechargePaymentType()){
                    case 1:
                        chargingOrder.setPayPlatform("微信");
                        chargingOrder.setRechargePaymentType1("微信小程序支付");
                        break;
                    case 2:
                        chargingOrder.setPayPlatform("支付宝");
                        chargingOrder.setRechargePaymentType1("支付宝小程序支付");
                        break;
                }
            }
            chargingOrder.setXuhao(i);
            i++;
        }
        collect.get(0).setTotal(bigDecimal);
        try {
            response.setCharacterEncoding(Constants.UTF8);
            response.setContentType("application/vnd.ms-excel");
@@ -331,7 +354,7 @@
            try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
                WriteSheet writeSheet = EasyExcel.writerSheet().build();
                FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
                excelWriter.fill(new FillWrapper("data1", data.getList().getRecords()), fillConfig, writeSheet);
                excelWriter.fill(new FillWrapper("data1", collect), fillConfig, writeSheet);
                excelWriter.finish();
            } catch (Exception e) {
                return R.fail("excel导出失败!");
@@ -348,8 +371,6 @@
    public R downloadSettlementTotal(@RequestBody ExportUidDto uid,HttpServletResponse response)
    {
        SettlementTotalVO data = chargingOrderClient.settlementTotalR(uid.getTime()).getData();
        try {
            response.setCharacterEncoding(Constants.UTF8);
            response.setContentType("application/vnd.ms-excel");
@@ -524,9 +545,18 @@
            if (chargingOrder.getCode()!=null){
                List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
                if (data6!=null && !data6.isEmpty()){
                    // 第一条数据soc为开始 最后一条数据soc为结束soc
                    settlementExportVO.setStartSoc(data6.get(0).getSoc()+"%");
                    settlementExportVO.setEndSoc(data6.get(data6.size()-1).getSoc()+"%");
                    int min = 100;
                    int max = 0;
                    for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
                        if (uploadRealTimeMonitoringData.getSoc()>max){
                            max = uploadRealTimeMonitoringData.getSoc();
                        }
                        if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){
                            min = uploadRealTimeMonitoringData.getSoc();
                        }
                    }
                    settlementExportVO.setEndSoc(max+"");
                    settlementExportVO.setStartSoc(min+"");
                }
            }
            settlementExportVO.setIsSoc("否");
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -232,6 +232,9 @@
        }
        TChargingGun tChargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getFullNumber, (pile_code + gun_code)).eq(TChargingGun::getDelFlag, 0));
        if(null != tChargingGun){
            charging_pile_online.put(tChargingGun.getFullNumber(), System.currentTimeMillis());
            redisService.setCacheMap("charging_gun_online", charging_pile_online);
            TChargingPile chargingPile = chargingPileService.getById(tChargingGun.getChargingPileId());
            //枪处于离线或者故障,返回状态为正常,则修改其状态
            if(0 == status && tChargingGun.getStatus() != 2){
@@ -281,11 +284,6 @@
                faultMessage.setContent("设备故障");
                faultMessageService.save(faultMessage);
            }
            if(1 != status){
                charging_pile_online.put(tChargingGun.getFullNumber(), System.currentTimeMillis());
                redisService.setCacheMap("charging_gun_online", charging_pile_online);
            }
            if(2 == status){
                TChargingOrderVo order = new TChargingOrderVo();
                order.setChargingPileId(tChargingGun.getChargingPileId());
@@ -312,6 +310,13 @@
                    tChargingGun1.setStatus(3);
                    chargingGunService.updateById(tChargingGun1);
                }
                List<TFaultMessage> list = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingGunId, tChargingGun.getId())
                        .isNull(TFaultMessage::getEndTime));
                if(!list.isEmpty()){
                    list.forEach(s->s.setEndTime(LocalDateTime.now()));
                    faultMessageService.updateBatchById(list);
                }
            }
        }
    }
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
@@ -204,7 +204,7 @@
            List<Map<String, Object>> charMap = new ArrayList<>();
            // 生成从 "00:00" 到 "23:00" 的时间数据
            // 生成从 "00:00" 到 "23:00" 的时间数据-------
            for (int hour = 0; hour < 24; hour++) {
                String time = String.format("%02d:00", hour);
                Map<String, Object> mapWithTimeValue = findMapWithTimeValue(maps, time);
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
@@ -96,5 +96,5 @@
     * @param query
     * @return
     */
    List<SiteVO> getMapSiteList(SiteQuery query);
    List<SiteVO> getMapSiteList(SiteQuery query,Integer isLogin);
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java
@@ -23,6 +23,12 @@
     * @return
     */
    List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId);
    /**
     * 查询计费策略明细列表---后台
     * @param strategyId
     * @return
     */
    List<TAccountingStrategyDetailVO> queryMangementAccountingStrategyDetailByStrategyId(Integer strategyId);
    /**
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -9,10 +9,7 @@
import com.ruoyi.account.api.model.TAppUserVipDetail;
import com.ruoyi.account.api.vo.GetAppUserVipDetail;
import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.chargingPile.api.model.TParkingLot;
import com.ruoyi.chargingPile.api.model.*;
import com.ruoyi.chargingPile.api.query.GetSiteList;
import com.ruoyi.chargingPile.api.query.SiteDetailQuery;
import com.ruoyi.chargingPile.api.query.SiteQuery;
@@ -87,6 +84,9 @@
    private IntegrationClient integrationClient;
    @Resource
    private AppUserVipDetailClient vipDetailClient;
    @Resource
    private TAccountingStrategyDetailService accountingStrategyDetailService;
    
    
    /**
@@ -293,29 +293,32 @@
    public PageInfo<SiteVO> pageList(SiteQuery query,Integer isLogin) {
        TAppUser appUser = null;
        // 获取当前登录用户id
        Long userId = tokenService.getLoginUserApplet().getUserId();
        TAppUserVipDetail data1 = null;
        if(isLogin == 1){
            Long userId = tokenService.getLoginUserApplet().getUserId();
            // 根据id查询用户信息
            appUser = appUserClient.getUserById(userId).getData();
            GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
            getAppUserVipDetail.setAppUserId(userId);
            getAppUserVipDetail.setVipId(appUser.getVipId());
            R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
            data1 = appUserVipDetail.getData();
        }
        PageInfo<SiteVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
        List<SiteVO> list = this.baseMapper.pageList(query,pageInfo);
        if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){
            // 查询会员信息
//            TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
            GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
            getAppUserVipDetail.setAppUserId(userId);
            getAppUserVipDetail.setVipId(appUser.getVipId());
            R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
            TAppUserVipDetail data1 = appUserVipDetail.getData();
            String vipJson = data1.getVipJson();
            TVip vip = JSON.parseObject(vipJson, TVip.class);
            if(Objects.nonNull(vip) && vip.getType() == 2){
                list.forEach(item -> {
                    if(Objects.nonNull(vip.getDiscount())){
                        item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal()));
                    }
                });
            if(Objects.nonNull(data1)){
                String vipJson = data1.getVipJson();
                TVip vip = JSON.parseObject(vipJson, TVip.class);
                if(Objects.nonNull(vip) && vip.getType() == 2){
                    list.forEach(item -> {
                        if(Objects.nonNull(vip.getDiscount())){
                            item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal()));
                        }
                    });
                }
            }
        }
        pageInfo.setRecords(list);
@@ -386,31 +389,36 @@
    }
    @Override
    public List<SiteVO> getMapSiteList(SiteQuery query) {
    public List<SiteVO> getMapSiteList(SiteQuery query,Integer isLogin) {
        if(StringUtils.isEmpty(query.getLon()) || StringUtils.isEmpty(query.getLat())){
            return new ArrayList<>();
        }
        TAppUser appUser = null;
        // 获取当前登录用户id
        Long userId = tokenService.getLoginUserApplet().getUserId();
        // 根据id查询用户信息
        TAppUser appUser = appUserClient.getUserById(userId).getData();
        List<SiteVO> list = this.baseMapper.getMapSiteList(query);
        if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){
            // 查询会员信息
//            TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
        TAppUserVipDetail data1 = null;
        if(isLogin == 1){
            Long userId = tokenService.getLoginUserApplet().getUserId();
            // 根据id查询用户信息
            appUser = appUserClient.getUserById(userId).getData();
            GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
            getAppUserVipDetail.setAppUserId(userId);
            getAppUserVipDetail.setVipId(appUser.getVipId());
            R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
            TAppUserVipDetail data1 = appUserVipDetail.getData();
            String vipJson = data1.getVipJson();
            TVip vip = JSON.parseObject(vipJson, TVip.class);
            if(Objects.nonNull(vip) && vip.getType() == 2){
                list.forEach(item -> {
                    item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal()));
                });
            data1 = appUserVipDetail.getData();
        }
        List<SiteVO> list = this.baseMapper.getMapSiteList(query);
        if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){
            // 查询会员信息
//            TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
            if(Objects.nonNull(data1)){
                String vipJson = data1.getVipJson();
                TVip vip = JSON.parseObject(vipJson, TVip.class);
                if(Objects.nonNull(vip) && vip.getType() == 2){
                    list.forEach(item -> {
                        item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal()));
                    });
                }
            }
        }
        return list;
@@ -430,14 +438,17 @@
        this.updateById(site);
        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getSiteId, id).eq(TChargingGun::getDelFlag, 0));
        for (TChargingGun tChargingGun : list) {
            tChargingGun.setAccountingStrategyId(accountingStrategyId);
            TChargingGun tChargingGun1 = new TChargingGun();
            tChargingGun1.setId(tChargingGun.getId());
            tChargingGun1.setAccountingStrategyId(accountingStrategyId);
            chargingGunService.updateById(tChargingGun1);
        }
        chargingGunService.updateBatchById(list);
        
        //下发硬件数据
        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId));
        List<TChargingPile> list1 = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, id).eq(TChargingPile::getDelFlag, 0).list();
        for (TChargingPile tChargingPile : list1) {
            integrationClient.setupBillingModel1(tChargingPile.getCode());
            integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails));
        }
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -61,6 +61,28 @@
    private AppUserVipDetailClient vipDetailClient;
    @Override
    public List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId) {
        List<TAccountingStrategyDetailVO> tAccountingStrategyDetailVOS = this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId);
        Long userId = tokenService.getLoginUserApplet().getUserId();
        TAppUser appUser = appUserClient.getUserById(userId).getData();
        for (TAccountingStrategyDetailVO tAccountingStrategyDetailVO : tAccountingStrategyDetailVOS) {
            GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
            getAppUserVipDetail.setAppUserId(userId);
            getAppUserVipDetail.setVipId(appUser.getVipId());
            R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
            TAppUserVipDetail data1 = appUserVipDetail.getData();
            if(Objects.nonNull(data1)){
                String vipJson = data1.getVipJson();
                TVip vip = JSON.parseObject(vipJson, TVip.class);
                if(Objects.nonNull(vip) && vip.getType() == 2){
                    tAccountingStrategyDetailVO.setDiscount(vip.getDiscount().divide(new BigDecimal(10)));
                }
            }
        }
        return tAccountingStrategyDetailVOS;
    }
    @Override
    public List<TAccountingStrategyDetailVO> queryMangementAccountingStrategyDetailByStrategyId(Integer strategyId) {
        return this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId);
    }
@@ -86,8 +108,11 @@
            getAppUserVipDetail.setVipId(appUser.getVipId());
            R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
            TAppUserVipDetail data1 = appUserVipDetail.getData();
            String vipJson = data1.getVipJson();
            TVip vip = JSON.parseObject(vipJson, TVip.class);
            TVip vip = null;
            if(Objects.nonNull(data1)){
                String vipJson = data1.getVipJson();
                vip = JSON.parseObject(vipJson, TVip.class);
            }
            TAccountingStrategyDetailVO accountingStrategyDetailVO;
            TAccountingStrategyDetailVO accountingStrategyDetailNext;
@@ -102,6 +127,7 @@
            if(Objects.nonNull(vip)) {
                if (vip.getType() == 2) {
                    accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(vip.getDiscount())));
                    accountingStrategyDetailVO.setDiscount(vip.getDiscount().divide(new BigDecimal(10)));
                    accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(vip.getDiscount())));
                } else {
                    if(Objects.isNull(accountingStrategy.getDiscount())){
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -1,15 +1,13 @@
package com.ruoyi.chargingPile.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserCarClient;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.chargingPile.api.dto.PageChargingPileListDTO;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.chargingPile.api.model.TFaultMessage;
import com.ruoyi.chargingPile.api.model.*;
import com.ruoyi.chargingPile.api.query.BatchSetAccountingStrategy;
import com.ruoyi.chargingPile.api.query.PageChargingPileList;
import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
@@ -111,6 +109,9 @@
    
    @Resource
    private IntegrationClient integrationClient;
    @Resource
    private TAccountingStrategyDetailService accountingStrategyDetailService;
    
    
    
@@ -286,12 +287,18 @@
        List<Integer> id = setAccountingStrategy.getId();
        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, id).eq(TChargingGun::getDelFlag, 0));
        for (TChargingGun tChargingGun : list) {
            tChargingGun.setAccountingStrategyId(setAccountingStrategy.getAccountingStrategyId());
            TChargingGun tChargingGun1 = new TChargingGun();
            tChargingGun1.setId(tChargingGun.getId());
            tChargingGun1.setAccountingStrategyId(setAccountingStrategy.getAccountingStrategyId());
            chargingGunService.updateById(tChargingGun1);
        }
        chargingGunService.updateBatchById(list);
        Integer accountingStrategyId = setAccountingStrategy.getAccountingStrategyId();
        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>()
                .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId).orderByAsc(TAccountingStrategyDetail::getStartTime));
        //下发硬件更新计费模板
        for (TChargingPile chargingPile : this.listByIds(id)) {
            integrationClient.setupBillingModel1(chargingPile.getCode());
        List<TChargingPile> tChargingPiles = this.listByIds(id);
        for (TChargingPile chargingPile : tChargingPiles) {
            integrationClient.setupBillingModel1(chargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails));
        }
        
    }
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml
@@ -105,7 +105,7 @@
            </foreach>
        </if>
        <if test="null != query.name and '' != query.name">
            and CONCAT(b.number, a.name) like CONCAT('%', #{query.name}, '%')
            and CONCAT(b.name, a.name) like CONCAT('%', #{query.name}, '%')
        </if>
    </select>
</mapper>
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/结算汇总.xlsx
Binary files differ
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/账户结算账单.xlsx
Binary files differ
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx
Binary files differ
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java
@@ -33,8 +33,8 @@
     */
    @ResponseBody
    @PostMapping("/getCoupon")
    public BaseResponse<GetCouponResp> getCoupon(@RequestBody GetCouponReq req){
        log.warn("停车获取优惠券请求参数:{}" + JSON.toJSONString(req));
    public BaseResponse<GetCouponResp> getCoupon(GetCouponReq req){
        log.warn("停车获取优惠券请求参数:{}", JSON.toJSONString(req));
        GetCouponResp coupon = couponService.getCoupon(req);
        return BaseResponse.ok(coupon);
    }
@@ -47,8 +47,8 @@
     */
    @ResponseBody
    @PostMapping("/usedCoupon")
    public BaseResponse usedCoupon(@RequestBody UsedCoupon req){
        log.warn("停车使用优惠券请求参数:{}" + JSON.toJSONString(req));
    public BaseResponse usedCoupon(UsedCoupon req){
        log.warn("停车使用优惠券请求参数:{}", JSON.toJSONString(req));
        couponService.usedCoupon(req);
        return BaseResponse.ok();
    }
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java
@@ -28,7 +28,7 @@
    @ResponseBody
    @PostMapping("/cloudParkingInOrder")
    public BaseResponse cloudParkingInOrder(@RequestBody CloudParkingOrder order){
        log.warn("云停车入场请求参数:{}" + JSON.toJSONString(order));
        log.warn("云停车入场请求参数:{}", JSON.toJSONString(order));
        parkingOrderService.cloudParkingInOrder(order);
        return BaseResponse.ok();
    }
@@ -41,7 +41,7 @@
    @ResponseBody
    @PostMapping("/cloudParkingOutOrder")
    public BaseResponse cloudParkingOutOrder(@RequestBody CloudParkingOrder order){
        log.warn("云停车出场请求参数:{}" + JSON.toJSONString(order));
        log.warn("云停车出场请求参数:{}", JSON.toJSONString(order));
        parkingOrderService.cloudParkingOutOrder(order);
        return BaseResponse.ok();
    }
@@ -54,7 +54,7 @@
    @ResponseBody
    @PostMapping("/cloudParkingSpace")
    public BaseResponse cloudParkingSpace(@RequestBody CloudParkingSpace parkingSpace){
        log.warn("云停车实时车位请求参数:{}" + JSON.toJSONString(parkingSpace));
        log.warn("云停车实时车位请求参数:{}", JSON.toJSONString(parkingSpace));
        parkingOrderService.cloudParkingSpace(parkingSpace);
        return BaseResponse.ok();
    }
@@ -68,7 +68,7 @@
    @ResponseBody
    @PostMapping("/offlineParkingInOrder")
    public BaseResponse offlineParkingInOrder(@RequestBody OfflineParkingOrder order){
        log.warn("线下停车场入场请求参数:{}" + JSON.toJSONString(order));
        log.warn("线下停车场入场请求参数:{}", JSON.toJSONString(order));
        parkingOrderService.offlineParkingInOrder(order);
        OfflineParkingResponse offlineParkingResponse = new OfflineParkingResponse();
        offlineParkingResponse.setCode(0);
@@ -85,7 +85,7 @@
    @ResponseBody
    @PostMapping("/offlineParkingOutOrder")
    public BaseResponse offlineParkingOutOrder(@RequestBody OfflineParkingOrder order){
        log.warn("线下停车场出场请求参数:{}" + JSON.toJSONString(order));
        log.warn("线下停车场出场请求参数:{}", JSON.toJSONString(order));
        parkingOrderService.offlineParkingOutOrder(order);
        OfflineParkingResponse offlineParkingResponse = new OfflineParkingResponse();
        offlineParkingResponse.setCode(0);
@@ -102,7 +102,7 @@
    @ResponseBody
    @PostMapping("/offlineParkingSpace")
    public BaseResponse offlineParkingSpace(@RequestBody OfflineParkingSpace parkingSpace){
        log.warn("线下停车场实时车位请求参数:{}" + JSON.toJSONString(parkingSpace));
        log.warn("线下停车场实时车位请求参数:{}", JSON.toJSONString(parkingSpace));
        parkingOrderService.offlineParkingSpace(parkingSpace);
        return BaseResponse.ok();
    }
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java
@@ -53,8 +53,8 @@
        TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
        parkingRecord.setName(data.getName());
        parkingRecord.setParkingLotId(data.getId());
        LocalDateTime parse = LocalDateTime.parse(order.getEnterDateTime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ"));
        parse.plusDays(8);
        LocalDateTime parse = LocalDateTime.parse(order.getEnterDateTime(), DateTimeFormatter.ISO_DATE_TIME);
        parse = parse.plusHours(8);
        parkingRecord.setInParkingTime(parse);
        parkingRecord.setStatus(1);
        parkingRecord.setCreateTime(LocalDateTime.now());
@@ -72,8 +72,8 @@
        query.setLicensePlate(order.getPlate());
        query.setStatus(1);
        TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData();
        LocalDateTime parse = LocalDateTime.parse(order.getLeaveDateTime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ"));
        parse.plusDays(8);
        LocalDateTime parse = LocalDateTime.parse(order.getLeaveDateTime(), DateTimeFormatter.ISO_DATE_TIME);
        parse = parse.plusHours(8);
        parkingRecord.setOutParkingTime(parse);
        parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime()));
        parkingRecord.setOrderAmount(new BigDecimal(order.getReceivable()));
@@ -81,6 +81,8 @@
        parkingRecord.setPayType(order.getPayType());
        BigDecimal payment = new BigDecimal(order.getPayment());
        parkingRecord.setStatus(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 3);
        parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1);
        parkingRecord.setTitle("【停车缴费】" + payment + "元");
        parkingRecordClient.updateParkingRecord(parkingRecord);
    }
    
@@ -108,8 +110,8 @@
        TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
        parkingRecord.setName(data.getName());
        parkingRecord.setParkingLotId(data.getId());
        LocalDateTime parse = LocalDateTime.parse(order.getEntertime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ"));
        parse.plusDays(8);
        LocalDateTime parse = LocalDateTime.parse(order.getEntertime(), DateTimeFormatter.ISO_DATE_TIME);
        parse = parse.plusHours(8);
        parkingRecord.setInParkingTime(parse);
        parkingRecord.setStatus(1);
        parkingRecord.setCreateTime(LocalDateTime.now());
@@ -127,12 +129,16 @@
        query.setLicensePlate(order.getPlatenumber());
        query.setStatus(1);
        TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData();
        LocalDateTime parse = LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ"));
        parse.plusDays(8);
        LocalDateTime parse = LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ISO_DATE_TIME);
        parse = parse.plusHours(8);
        parkingRecord.setOutParkingTime(parse);
        parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime()));
        parkingRecord.setOrderAmount(new BigDecimal(order.getMoney()));
        parkingRecord.setPayment(new BigDecimal(order.getMoney()));
        BigDecimal payment = new BigDecimal(order.getMoney());
        parkingRecord.setStatus(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 3);
        parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1);
        parkingRecord.setTitle("【停车缴费】" + payment + "元");
        parkingRecordClient.updateParkingRecord(parkingRecord);
    }
    
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -382,18 +382,17 @@
    @ApiOperation(value = "计费模型设置",tags = {"硬件接口"})
    @PostMapping(value = "/setupBillingModel")
    public R setupBillingModel(@RequestParam("deviceId") String deviceId) {
    public R setupBillingModel(@RequestParam("deviceId") String deviceId, @RequestParam("json") String json) {
        SetupBillingModel setupBillingModel = new SetupBillingModel();
        List<TAccountingStrategyDetail> accountingStrategyDetails = JSON.parseArray(json, TAccountingStrategyDetail.class);
        // 计费模型
        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(deviceId).getData();
        Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
        // 价格设置
        AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply();
        StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
        // 时段设置
        StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
        TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(deviceId).getData();
        acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString());
        acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetails.get(0).getAccountingStrategyId().toString());
        acquisitionBillingModeReply.setCharging_pile_code(deviceId);
        acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO);
        BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -74,13 +74,14 @@
        ChargingBillVO res = chargingBillService.chargingBillList1(dto);
        List<ChargingBillListVO> records = res.getList().getRecords();
        accountListVO.setBillCount(records.size());
        accountListVO.setTotalAmount(res.getOrderAmount().subtract(res.getRefundAmount())
                .subtract(res.getCommissionAmount()).subtract(res.getSharingAmount()));
        accountListVO.setPaymentAmount(res.getPaymentAmount());
        accountListVO.setRefundAmount(res.getRefundAmount());
        accountListVO.setCommissionAmount(res.getCommissionAmount());
        accountListVO.setSharingAmount(res.getSharingAmount());
        accountListVO.setTotalAmount(res.getPaymentAmount().subtract(res.getRefundAmount())
                .subtract(res.getCommissionAmount().setScale(2,BigDecimal.ROUND_DOWN)).subtract(res.getSharingAmount()).setScale(2, BigDecimal.ROUND_DOWN));
        accountListVO.setPaymentAmount(res.getPaymentAmount().setScale(2, BigDecimal.ROUND_DOWN));
        accountListVO.setRefundAmount(res.getRefundAmount().setScale(2, BigDecimal.ROUND_DOWN));
        accountListVO.setCommissionAmount(res.getCommissionAmount().setScale(2, BigDecimal.ROUND_DOWN));
        accountListVO.setSharingAmount(res.getSharingAmount().setScale(2, BigDecimal.ROUND_DOWN));
        accountListVO.setList(res.getList());
        accountListVO.setOrderList(res.getExportList());
        return R.ok(accountListVO);
    }
    @PostMapping(value = "/chargingBillList")
@@ -292,7 +293,7 @@
        int i =1;
        for (TChargingOrder tChargingOrder : tChargingOrders) {
            // 账单信息
            paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount());
            paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
            // 退款信息
            ChargingBillRefundExport chargingBillRefundExport = new ChargingBillRefundExport();
@@ -337,7 +338,7 @@
            chargingBillPayExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
            chargingBillPayExport.setCode(tChargingOrder.getCode());
            chargingBillPayExport.setPayTime(tChargingOrder.getPayTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())):"");
            chargingBillPayExport.setPaymentAmount(tChargingOrder.getOrderAmount().toString());
            chargingBillPayExport.setPaymentAmount(tChargingOrder.getChargeAmount().toString());
            chargingBillPayExport.setTotal("");
            chargingBillPayExports.add(chargingBillPayExport);
            i++;
@@ -354,13 +355,11 @@
                String name = data1.get(0).getName();
                chargingBillExport.setSiteName(name);
            }
        }
        chargingBillExport.setPaymentAmount(paymentAmount);
        chargingBillExport.setRefundAmount(refundAmount);
        chargingBillExport.setIncome(paymentAmount.subtract(refundAmount));
        chargingBillExports.add(chargingBillExport);
        // 导出
        List<Map<String, Object>> sheetsList = new ArrayList<>();
        for (int i1 = 1; i1 <= 3; i1++) {
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -58,6 +58,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
@@ -112,6 +113,8 @@
    @ApiOperation(value = "充电时段统计-导出", tags = {"管理后台-财务结算"})
    @PutMapping("/export")
    public void export(@RequestBody ChargingListQuery dto) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        ChargingOrderTimeVO res = chargingOrderService.chargingList(dto);
        List<TChargingOrderExport> tChargingOrderExports = new ArrayList<>();
        List<ChargingOrderListVO> exportList = res.getList().getRecords();
@@ -149,10 +152,22 @@
            tChargingOrderExport.setOrderClassification("1");
            tChargingOrderExport.setStartType("扫码");
            tChargingOrderExport.setOne("小程序");
            tChargingOrderExport.setTwo("小程序");
            tChargingOrderExport.setCreateTime(chargingOrderListVO.getCreateTime()+"");
            tChargingOrderExport.setStartTime(chargingOrderListVO.getStartTime()+"");
            tChargingOrderExport.setEndTime(chargingOrderListVO.getEndTime()+"");
            if (chargingOrderListVO.getRechargePaymentType()!=null){
                switch (chargingOrderListVO.getRechargePaymentType()){
                    case 1:
                        tChargingOrderExport.setTwo("微信小程序");
                        break;
                    case 2:
                        tChargingOrderExport.setTwo("支付宝小程序");
                        break;
                }
            }
            String s1 = DateUtils.localDateTimeToString(chargingOrderListVO.getCreateTime());
            String s2 = DateUtils.localDateTimeToString(chargingOrderListVO.getStartTime());
            String s3 = DateUtils.localDateTimeToString(chargingOrderListVO.getEndTime());
            tChargingOrderExport.setCreateTime(s1);
            tChargingOrderExport.setStartTime(s2);
            tChargingOrderExport.setEndTime(s3);
            tChargingOrderExport.setRechargePaymentStatus(chargingOrderListVO.getRechargePaymentStatus()+"");
            tChargingOrderExport.setType("充电订单");
            tChargingOrderExport.setChargingType("单桩双充");
@@ -174,7 +189,7 @@
                BigDecimal size = new BigDecimal(stageCost.size());
                for (TChargingOrderAccountingStrategy tChargingOrderAccountingStrategy : stageCost) {
                    bigDecimal1 = bigDecimal1.add(tChargingOrderAccountingStrategy.getElectrovalence());
                    bigDecimal1 = bigDecimal1.add(tChargingOrderAccountingStrategy.getPeriodElectricPrice());
                    bigDecimal2 = bigDecimal2.add(tChargingOrderAccountingStrategy.getPeriodServicePrice());
                    bigDecimal3 = bigDecimal3.add(tChargingOrderAccountingStrategy.getPeriodOriginalServicePrice());
                }
@@ -205,7 +220,6 @@
                    tChargingOrderExport.setVipType(data1.getName());
                }
            }
//            tChargingOrderExport.setVipType();
            tChargingOrderExport.setIsPlus(chargingOrderListVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0?"是":"否");
            if (data3!=null){
                tChargingOrderExport.setRealName(data3.getName());
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -10,6 +10,7 @@
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.order.api.model.TChargingOrder;
@@ -37,6 +38,7 @@
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -77,6 +79,7 @@
            }
        }
        ChargingBillVO chargingBillVO = new ChargingBillVO();
        List<TChargingOrder> tChargingOrders1 = new ArrayList<>();
        String startTime1 = null;
        String startTime2 = null;
        if (StringUtils.hasLength(dto.getStartTime())){
@@ -98,12 +101,8 @@
        BigDecimal sharingAmountTotal = new BigDecimal("0");
        BigDecimal chargingCapacityTotal = new BigDecimal("0");
        BigDecimal discountTotal = new BigDecimal("0");
        BigDecimal refundAmount = new BigDecimal("0");
        int orderCount = 0;
        for (ChargingBillListVO chargingBillListVO : list) {
            if (chargingBillListVO.getType()==2){
                continue;
            }
            String temp = "";
            String temp1 = "";
            switch (chargingBillListVO.getType()){
@@ -160,6 +159,7 @@
            BigDecimal commissionAmount = new BigDecimal("0");
            BigDecimal sharingAmount = new BigDecimal("0");
            BigDecimal chargingCapacity = new BigDecimal("0");
            BigDecimal refundAmount = new BigDecimal("0");
            orderCount+=tChargingOrders.size();
            chargingBillVO.setCategory("");
            chargingBillVO.setExportList(tChargingOrders);
@@ -173,6 +173,16 @@
                if (data1!=null && data2!=null){
                    tChargingOrder.setTerminalName(data1.getName()+data2.getName());
                    tChargingOrder.setTerminalCode(data2.getCode());
                }
                if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==1){
                    chargingBillListVO.setPayTypeName("微信商户");
                }
                if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==2){
                    if (StringUtils.hasLength(chargingBillListVO.getPayTypeName())){
                        chargingBillListVO.setPayTypeName("微信商户+支付宝商户");
                    }else{
                        chargingBillListVO.setPayTypeName("支付宝商户");
                    }
                }
                tChargingOrder.setOrderClassification1("线上订单");
                tChargingOrder.setRechargePaymentType1("预付");
@@ -300,19 +310,16 @@
                chargingBillVO.setPaymentAmount(BigDecimal.ZERO);
            }
            chargingBillListVO.setOrderAmount(chargingBillVO.getPaymentAmount().subtract(chargingBillVO.getRefundAmount()==null?BigDecimal.ZERO:chargingBillVO.getRefundAmount()));
            chargingBillListVO.setPaymentAmount(paymentAmount);
            chargingBillListVO.setOrderAmount(orderAmount == null?BigDecimal.ZERO:orderAmount.subtract(sharingAmount).subtract(commissionAmount));
            chargingBillListVO.setOrderAmount(paymentAmount == null?BigDecimal.ZERO:orderAmount.subtract(sharingAmount).subtract(commissionAmount));
            chargingBillListVO.setRefundAmount(refundAmount == null?BigDecimal.ZERO:refundAmount);
            chargingBillListVO.setElectrovalence(electrovalence == null?BigDecimal.ZERO:electrovalence);
            chargingBillListVO.setServiceCharge(serviceCharge == null?BigDecimal.ZERO:serviceCharge);
            chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount.setScale(2, RoundingMode.HALF_DOWN));
            chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount.setScale(2,BigDecimal.ROUND_DOWN));
            chargingBillListVO.setSharingAmount(sharingAmount == null?BigDecimal.ZERO:sharingAmount);
            chargingBillListVO.setChargingCapacity(chargingCapacity == null?BigDecimal.ZERO:chargingCapacity);
            chargingBillListVO.setBillMoney(chargingBillListVO.getPaymentAmount().subtract(chargingBillListVO.getRefundAmount()==null?BigDecimal.ZERO:chargingBillListVO.getRefundAmount()
                            .subtract(commissionAmount).subtract(sharingAmount))
                    .subtract(chargingBillListVO.getCommissionAmount()==null?BigDecimal.ZERO:chargingBillListVO.getCommissionAmount())
                    .subtract(chargingBillListVO.getSharingAmount()==null?BigDecimal.ZERO:chargingBillListVO.getSharingAmount()));
            chargingBillListVO.setBillMoney(paymentAmount.subtract(refundAmount==null?BigDecimal.ZERO:refundAmount)
                            .subtract(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN)).subtract(sharingAmount).setScale(2, BigDecimal.ROUND_DOWN));
            switch (chargingBillListVO.getType()){
                case 1:
                    chargingBillListVO.setSiteName("全站");
@@ -330,6 +337,9 @@
            chargingBillListVO.setChargingSecond(chargingSecond);
        }
        for (ChargingBillListVO chargingBillListVO : list1) {
            if (chargingBillListVO.getType()==2){
                continue;
            }
            LocalDateTime billTime = chargingBillListVO.getBillTime();
            // 将其转化为yyyy-MM格式字符串
            chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
@@ -359,6 +369,7 @@
                eq.eq("site_id", chargingBillListVO.getSiteId());
            }
            List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq);
            tChargingOrders1.addAll(tChargingOrders);
            orderCount+=tChargingOrders.size();
            chargingBillVO.setCategory("");
            chargingBillVO.setExportList(tChargingOrders);
@@ -379,6 +390,10 @@
                        .eq(TChargingOrderRefund::getRefundStatus, 2).list();
                for (TChargingOrderRefund tChargingOrderRefund : list2) {
                    refundAmountTotal =refundAmountTotal.add(tChargingOrderRefund.getRefundAmount());
                    tChargingOrder.setRefundAmount(tChargingOrderRefund.getRefundAmount());
                    tChargingOrder.setRefundContent(tChargingOrderRefund.getRefundReason());
                    tChargingOrder.setRefundCode(tChargingOrderRefund.getRefundCode());
                    tChargingOrder.setRefundTime1(DateUtils.localDateTimeToString(tChargingOrderRefund.getRefundTime()));
                }
                // 累加累计服务费
                if (tChargingOrder.getServiceCharge()!=null){
@@ -386,7 +401,7 @@
                }
                // 累加平台手续费
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006")));
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")));
                }
                // 累加平台分佣
                if (tChargingOrder.getSharingAmount()!=null){
@@ -407,16 +422,16 @@
            }
        }
        chargingBillVO.setChargingCapacity(chargingCapacityTotal);
        chargingBillVO.setPaymentAmount(paymentAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setPaymentAmount(paymentAmountTotal);
        chargingBillVO.setOrderAmount(paymentAmountTotal.subtract(refundAmountTotal).subtract(commissionAmountTotal).subtract(sharingAmountTotal));
        chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setElectrovalence(electrovalenceTotal);
        chargingBillVO.setServiceCharge(serviceChargeTotal);
        chargingBillVO.setOrderCount(orderCount);
        chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setCommissionAmount(commissionAmountTotal);
        chargingBillVO.setSharingAmount(sharingAmountTotal);
        chargingBillVO.setDiscount(discountTotal);
        chargingBillVO.setRefundAmount(refundAmountTotal);
        chargingBillVO.setExportList(tChargingOrders1);
        pageInfo.setRecords(list);
        chargingBillVO.setList(pageInfo);
        return chargingBillVO;
@@ -631,7 +646,7 @@
                }
                // 累加平台手续费
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006)));
                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006)));
                }
                // 累加平台分佣
                if (tChargingOrder.getSharingAmount()!=null){
@@ -650,12 +665,12 @@
            String timeString = String.format("%d小时%d分钟%d秒", hours, minutes, seconds);
            chargingBillVO.setChargingTime(timeString);
            chargingBillListVO.setPaymentAmount(paymentAmount);
            chargingBillListVO.setPaymentAmount(orderAmount.subtract(commissionAmount).subtract(sharingAmount).setScale(2,BigDecimal.ROUND_DOWN));
            chargingBillListVO.setOrderAmount(orderAmount);
            chargingBillListVO.setElectrovalence(electrovalence);
            chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,RoundingMode.HALF_DOWN));
            chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,RoundingMode.HALF_DOWN));
            chargingBillListVO.setSharingAmount(sharingAmount.setScale(2,RoundingMode.HALF_DOWN));
            chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,BigDecimal.ROUND_DOWN));
            chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN));
            chargingBillListVO.setSharingAmount(sharingAmount.setScale(2,BigDecimal.ROUND_DOWN));
            chargingBillListVO.setChargingCapacity(chargingCapacity);
            switch (chargingBillListVO.getType()){
                case 1:
@@ -742,8 +757,8 @@
                }
                // 累加平台手续费
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006")));
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006")));
                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")));
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")));
                }
                // 累加平台分佣
                if (tChargingOrder.getSharingAmount()!=null){
@@ -765,14 +780,14 @@
            }
        }
        chargingBillVO.setChargingCapacity(chargingCapacityTotal);
        chargingBillVO.setPaymentAmount(orderAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setOrderAmount(orderAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setPaymentAmount(orderAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setOrderAmount(orderAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setOrderCount(orderCount);
        chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setDiscount(discountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setDiscount(discountTotal.setScale(2, BigDecimal.ROUND_DOWN));
        pageInfo.setRecords(list);
        chargingBillVO.setList(pageInfo);
        return chargingBillVO;
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -284,9 +284,18 @@
        if(null != dataList){
            //在MongoDB中获取数据
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
            List<String> time = dataList.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList());
            List<BigDecimal> outputVoltage = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList());
            List<BigDecimal> outputCurrent = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList());
            List<UploadRealTimeMonitoringData> dataLists = new ArrayList<>();
            String t = "";
            for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : dataList) {
                if(!sdf.format(uploadRealTimeMonitoringData.getCreate_time()).equals(t)){
                    dataLists.add(uploadRealTimeMonitoringData);
                    t = sdf.format(uploadRealTimeMonitoringData.getCreate_time());
                }
            }
            List<String> time = dataLists.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList());
            List<BigDecimal> outputVoltage = dataLists.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList());
            List<BigDecimal> outputCurrent = dataLists.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList());
            List<Map<String, Object>> currentAndVoltage = new ArrayList<>();
            for (int i = 0; i < time.size(); i++) {
                Map<String, Object> map = new HashMap<>();
@@ -299,8 +308,8 @@
            }
            myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
            //在MongoDB中获取数据
            List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
            List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
            List<Integer> soc = dataLists.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
            List<BigDecimal> po = dataLists.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
            List<Map<String, Object>> power = new ArrayList<>();
            for (int i = 0; i < time.size(); i++) {
                Map<String, Object> map = new HashMap<>();
@@ -452,7 +461,6 @@
        chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
        chargingOrder.setOrderSource(0);
        chargingOrder.setTitle("【充电桩充电】" + chargingPile.getNumber() + "号桩/" + tChargingGun.getCode() + "号枪");
        chargingOrder.setStatus(1);
        
        Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
        Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -1290,9 +1298,9 @@
                payOrderDto.setFinalAmount(payOrderDto.getOrderAmount());
            }
            if (payOrderDto.getType()==1&&payOrderDto.getStatus()==3){
                payOrderDto.setFinalAmount(payOrderDto.getRechargeAmount());
                payOrderDto.setOrderAmount(payOrderDto.getRechargeAmount());
                payOrderDto.setPaymentAmount(payOrderDto.getRechargeAmount());
                payOrderDto.setFinalAmount(payOrderDto.getOrderAmount());
                payOrderDto.setOrderAmount(payOrderDto.getOrderAmount());
                payOrderDto.setPaymentAmount(payOrderDto.getOrderAmount());
            }
        }
        pageInfo.setRecords(list);
@@ -1404,7 +1412,7 @@
            chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
            BigDecimal bigDecimal = new BigDecimal("0.006");
            if (chargingOrderListVO.getOrderAmount()!=null){
                chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getOrderAmount().multiply(bigDecimal));
                chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getPaymentAmount().multiply(bigDecimal));
            }
            chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
            chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
@@ -1432,10 +1440,20 @@
            // 获取开始SOC 结束soc
            if (chargingOrderListVO.getCode()!=null){
                List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData();
            if (data6!=null && !data6.isEmpty()){
                    // 第一条数据soc为开始 最后一条数据soc为结束soc
                    chargingOrderListVO.setEndSoc(data6.get(0).getSoc().toString());
                    chargingOrderListVO.setStartSoc(data6.get(data6.size()-1).getSoc().toString());
                int min = 100;
                int max = 0;
                for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
                    if (uploadRealTimeMonitoringData.getSoc()>max){
                        max = uploadRealTimeMonitoringData.getSoc();
                    }
                    if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){
                        min = uploadRealTimeMonitoringData.getSoc();
                    }
                }
                    chargingOrderListVO.setEndSoc(max+"");
                    chargingOrderListVO.setStartSoc(min+"");
                }
            }
@@ -1798,7 +1816,7 @@
        
        //获取订单的计费策略
        List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
        accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59");
        //开始处理计费明细数据和优惠数据
        chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
        SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -2075,7 +2093,7 @@
        if(null != integralRule){
            TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
            Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
            Integer integral = payAmount.multiply(new BigDecimal(num1)).intValue();
            Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
            if(null != appUser.getVipId()){
                TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                Integer doubleIntegration = vip.getDoubleIntegration();
@@ -2563,15 +2581,12 @@
            if (tChargingOrder.getCouponDiscountAmount()!=null){
                couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
            }
            if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){
                // 如果成功退款 那么减去退款金额
            if (tChargingOrder.getPaymentAmount()!=null){
                paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount());
            }else{
                if (tChargingOrder.getPaymentAmount()!=null){
                    paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount());
                }
            }
        }
        // 三方交易手续费 三方收费*0.6%
        commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
        // 订单手续费 订单支付金额 - 退款金额*0.6%
@@ -2579,7 +2594,7 @@
        tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN));
        tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN));
        tSettlementConfirm.setElectrovalence(electrovalence.setScale(2, RoundingMode.HALF_DOWN));
        tSettlementConfirm.setServiceCharge(serviceCharge.setScale(2, RoundingMode.HALF_DOWN));
        tSettlementConfirm.setServiceCharge(serviceCharge.subtract(orderCommission).setScale(2, RoundingMode.HALF_DOWN));
        tSettlementConfirm.setOrderCommission(orderCommission);
        tSettlementConfirm.setVipDiscount(vipDiscount);
        tSettlementConfirm.setCouponDiscount(couponDiscount);
@@ -2591,6 +2606,8 @@
        tSettlementConfirm.setType(dto.getType());
        if (dto.getState() == 2){
            tSettlementConfirm.setServiceMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean())
                    .subtract(dto.getMaintain()).multiply(dto.getServicePartner()));
            tSettlementConfirm.setSupplyElectronic(dto.getSupplyElectronic());
            tSettlementConfirm.setVenue(dto.getVenue());
            tSettlementConfirm.setMetering(dto.getMetering());
@@ -2605,24 +2622,26 @@
            tSettlementConfirm.setTotalService(dto.getTotalService());
            tSettlementConfirm.setRemark(dto.getRemark());
            tSettlementConfirm.setServicePartner(dto.getServicePartner());
            tSettlementConfirm.setServiceMoney(dto.getServiceMoney());
            BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner().multiply(new BigDecimal("0.01")));
            BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner());
            BigDecimal subtract9 = new BigDecimal("1").subtract(dto.getServicePartner());
            // 总电损费用
            BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, RoundingMode.HALF_DOWN);
            // 平台承担电损
            BigDecimal subtract1 = divide.subtract(tSettlementConfirm.getProportionMoney());
            BigDecimal multiply = dto.getServiceMoney().multiply(subtract);
            BigDecimal subtract2 = multiply.subtract(subtract1);
            tSettlementConfirm.setNewMoney(subtract2);
            tSettlementConfirm.setNewMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean())
                    .subtract(dto.getMaintain()).multiply(subtract9).subtract(subtract1));
            tSettlementConfirm.setTotalService(dto.getTotalService());
            tSettlementConfirm.setServiceRemark(dto.getServiceRemark());
            tSettlementConfirm.setDistribution(dto.getDistribution());
            tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge()));
            tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getMetering()));
            tSettlementConfirm.setProfitMoney(chargingElectronic.add(serviceCharge).subtract(tSettlementConfirm.getCost()));
            tSettlementConfirm.setNewSettlement(subtract2.subtract(tSettlementConfirm.getCost()));
            tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getSupplyElectronic()));
            tSettlementConfirm.setProfitMoney(tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost()));
            tSettlementConfirm.setNewSettlement(tSettlementConfirm.getProfitMoney().add(tSettlementConfirm.getCost()));
            tSettlementConfirm.setServiceMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean())
                    .subtract(dto.getMaintain()).multiply(dto.getServicePartner()));
            tSettlementConfirmMapper.insert(tSettlementConfirm);
        }
        return tSettlementConfirm;
@@ -2630,18 +2649,22 @@
    @Override
    public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) {
        String startTime = null;
        String endTime = null;
        if (StringUtils.hasLength(dto.getStartTime())){
            dto.setType(1);
            String[] split = dto.getStartTime().split(" - ");
            dto.setStartTime(split[0]);
            dto.setEndTime(split[1]);
            startTime = split[0];
            endTime = split[1];
        }
        if (StringUtils.hasLength(dto.getEndTime())){
            dto.setType(2);
            String[] split = dto.getStartTime().split(" - ");
            dto.setStartTime(split[0]);
            dto.setEndTime(split[1]);
            String[] split = dto.getEndTime().split(" - ");
            startTime = split[0];
            endTime = split[1];
        }
        dto.setStartTime(startTime);
        dto.setEndTime(endTime);
        PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
        List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
        for (TSettlementConfirm tSettlementConfirm : list) {
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -933,7 +933,7 @@
            from t_charging_order
            where 1=1
        AND  del_flag = 0
        AND recharge_payment_status = 2
        AND recharge_payment_status = 2 and status = 5
            <if test="siteIds != null and siteIds.size() > 0">
                and site_id IN
                <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
@@ -10,9 +10,9 @@
        </if>
    </select>
    <select id="settlementList" resultType="com.ruoyi.order.api.model.TSettlementConfirm">
select t1.* from
                t_settlement_confirm t1
where 1=1
        select t1.* from
            t_settlement_confirm t1
        where 1=1
        <if test="req.partnerId != null ">
            and t1.partner_id = #{req.partnerId}
        </if>
@@ -21,14 +21,14 @@
        </if>
        <if test="req.type == 1 ">
            <if test="req.startTime != null and req.startTime!=''">
                and (t1.start_time between #{req.startTime} and #{req.endTime}
                and (t1.start_time between #{req.startTime} and #{req.endTime})
            </if>
        </if>
        <if test="req.type == 2 ">
            <if test="req.startTime != null and req.startTime!=''">
                and (t1.end_time between #{req.startTime} and #{req.endTime}
                and (t1.end_time between #{req.startTime} and #{req.endTime})
            </if>
        </if>
    and t1.del_flag = 0
        and t1.del_flag = 0
    </select>
</mapper>