无关风月
2024-10-28 d6c8f09fd628bd0111de4ee7071844465df9adb1
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile
44个文件已修改
2个文件已添加
812 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserCar.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserSign.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TVip.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java 7 ●●●●● 补丁 | 查看 | 原始文档 | 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/factory/UploadRealTimeMonitoringDataFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/SignDayUtil.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserCar.java
@@ -33,6 +33,8 @@
    @TableId("id")
    private Long id;
    @TableField(exist = false)
    private String id_;
    @TableField(exist = false)
    private String uid;
    @ApiModelProperty(value = "app用户id")
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserSign.java
@@ -54,6 +54,8 @@
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
    @TableField(exist = false)
    private Integer continueDays;
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java
@@ -91,6 +91,9 @@
    @TableField(exist = false)
    private Integer type;
    @TableField(exist = false)
    private TVip vip;
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TVip.java
New file
@@ -0,0 +1,156 @@
package com.ruoyi.account.api.model;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.web.domain.BasePojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author 无关风月
 * @since 2024-08-06
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_vip")
@ApiModel(value="TVip对象", description="")
public class TVip extends BasePojo {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "会员名称")
    @TableField("name")
    private String name;
    @ApiModelProperty(value = "前端是否显示(0=否,1=是)")
    @TableField("reveal")
    private Integer reveal;
    @ApiModelProperty(value = "月卡价格")
    @TableField("monthly_card")
    private BigDecimal monthlyCard;
    @ApiModelProperty(value = "月卡显示(0=否,1=是)")
    @TableField("monthly_card_reveal")
    private Integer monthlyCardReveal;
    @ApiModelProperty(value = "月卡折扣")
    @TableField("monthly_card_discount")
    private BigDecimal monthlyCardDiscount;
    @ApiModelProperty(value = "月卡折扣开始时间")
    @TableField("monthly_card_discount_start")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime monthlyCardDiscountStart;
    @ApiModelProperty(value = "月卡折扣结束时间")
    @TableField("monthly_card_discount_end")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime monthlyCardDiscountEnd;
    @ApiModelProperty(value = "月卡折扣显示(0=否,1=是)")
    @TableField("monthly_card_discount_reveal")
    private Integer monthlyCardDiscountReveal;
    @ApiModelProperty(value = "季卡价格")
    @TableField("season_card")
    private BigDecimal seasonCard;
    @ApiModelProperty(value = "季卡显示(0=否,1=是)")
    @TableField("season_card_reveal")
    private Integer seasonCardReveal;
    @ApiModelProperty(value = "季卡折扣")
    @TableField("season_card_discount")
    private BigDecimal seasonCardDiscount;
    @ApiModelProperty(value = "季卡折扣开始时间")
    @TableField("season_card_discount_start")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime seasonCardDiscountStart;
    @ApiModelProperty(value = "季卡折扣结束时间")
    @TableField("season_card_discount_end")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime seasonCardDiscountEnd;
    @ApiModelProperty(value = "季卡折扣显示(0=否,1=是)")
    @TableField("season_card_discount_reveal")
    private Integer seasonCardDiscountReveal;
    @ApiModelProperty(value = "年卡价格")
    @TableField("annual_card")
    private BigDecimal annualCard;
    @ApiModelProperty(value = "年卡显示(0=否,1=是)")
    @TableField("annual_card_reveal")
    private Integer annualCardReveal;
    @ApiModelProperty(value = "年卡折扣")
    @TableField("annual_card_discount")
    private BigDecimal annualCardDiscount;
    @ApiModelProperty(value = "年卡折扣开始时间")
    @TableField("annual_card_discount_start")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime annualCardDiscountStart;
    @ApiModelProperty(value = "年卡折扣结束时间")
    @TableField("annual_card_discount_end")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime annualCardDiscountEnd;
    @ApiModelProperty(value = "年卡折扣显示(0=否,1=是)")
    @TableField("annual_card_discount_reveal")
    private Integer annualCardDiscountReveal;
    @ApiModelProperty(value = "折扣次数")
    @TableField("discount_times")
    private Integer discountTimes;
    @ApiModelProperty(value = "最高抵扣金额")
    @TableField("maximum_deduction")
    private BigDecimal maximumDeduction;
    @ApiModelProperty(value = "抵扣类型(1=服务费)")
    @TableField("deduction_type")
    private Integer deductionType;
    @ApiModelProperty(value = "优惠券[{\"id\":1,\"number\":1}]")
    @TableField("coupon")
    private String coupon;
    @ApiModelProperty(value = "双倍积分开关(0=否,1=是)")
    @TableField("double_integration")
    private Integer doubleIntegration;
    @ApiModelProperty(value = "商城专享价开关(0=否,1=是)")
    @TableField("mall_exclusive_price")
    private Integer mallExclusivePrice;
    @ApiModelProperty(value = "内部会员折扣")
    @TableField("discount")
    private BigDecimal discount;
    @ApiModelProperty(value = "添加的会员类型 1常规 2内部")
    @TableField("type")
    private Integer type;
    @ApiModelProperty(value = "优惠券名称和张数 后台列表展示使用")
    @TableField(exist = false)
    private String couponName;
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
@@ -37,12 +37,13 @@
    @TableField("app_user_id")
    private Long appUserId;
    @ApiModelProperty(value = "停车场名称")
    @TableField("name")
    private String name;
    @ApiModelProperty(value = "车牌号")
    @TableField("license_plate")
    private String licensePlate;
    @TableField(exist = false)
    private String name;
    
    @TableField(exist = false)
    private String uid;
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java
@@ -42,5 +42,5 @@
    @ApiModelProperty(value = "上次选择车辆品牌")
    private String vehicleBrand;
    @ApiModelProperty(value = "上次选择车辆id")
    private Long id;
    private String id;
}
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java
@@ -47,6 +47,11 @@
            public R<UploadRealTimeMonitoringPageData> getAll(MongoChargingOrderQuery mongoChargingOrderQuery) {
                return null;
            }
            @Override
            public R delete(String id) {
                return null;
            }
        };
    }
}
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java
@@ -46,4 +46,7 @@
    @PostMapping("/uploadRealTimeMonitoringData/getAll")
    R<UploadRealTimeMonitoringPageData> getAll(@RequestBody MongoChargingOrderQuery mongoChargingOrderQuery);
    @PostMapping("/uploadRealTimeMonitoringData/delete")
    R delete(@RequestParam("id") String id);
}
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
@@ -18,6 +18,8 @@
@Document(collection = "upload_real_time_monitoring_data") //指定要对应的文档名(表名)
@Accessors(chain = true)
public class UploadRealTimeMonitoringData extends BaseModel {
    @Id
    private String id;
    private String transaction_serial_number; // 交易流水号
    private String charging_pile_code; // 桩编码
    private String charging_gun_code; // 抢号
@@ -48,6 +50,9 @@
    private BigDecimal period_charging_degree;// @ApiModelProperty("时段充电度数")
    private Integer orderType; //1=充电订单(小程序),2=充电订单(刷卡))
    private Integer siteId;
    private Integer status; //状态(0=未知,1=等待中/已插枪,2=启动中,3=充电中,4=停止中,5=已结束)"
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java
@@ -105,5 +105,4 @@
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java
New file
@@ -0,0 +1,47 @@
package com.ruoyi.order.api.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author zhibing.pu
 * @Date 2024/9/3 14:00
 */
@Data
public class AccountingStrategyDetailOrderVo {
    @ApiModelProperty(value = "主键")
    private Integer id;
    @ApiModelProperty(value = "策略id")
    private Integer accountingStrategyId;
    @ApiModelProperty(value = "阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)")
    private Integer type;
    @ApiModelProperty(value = "开始时间")
    private String startTime;
    @ApiModelProperty(value = "结束时间")
    private String endTime;
    @ApiModelProperty(value = "电价")
    private BigDecimal electrovalence;
    @ApiModelProperty(value = "服务费")
    private BigDecimal serviceCharge;
    @ApiModelProperty(value = "原价服务费")
    private BigDecimal costServiceCharge;
    @ApiModelProperty(value = "充电订单id")
    private Long chargingOrderId;
    private Long start;
    private Long end;
    private BigDecimal chargingCapacity;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -7,10 +7,7 @@
import com.ruoyi.system.api.factory.SysUserFallbackFactory;
import com.ruoyi.system.api.model.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.*;
import javax.management.relation.Role;
import java.util.List;
@@ -22,7 +19,7 @@
    R<List<CompanyUserListVo>> getSysUserFromCompanyId(@RequestBody CompanySysUserReq companySysUserReq);
    @PostMapping("/user/getSysUser")
    R<SysUser> getSysUser(Long userId);
    R<SysUser> getSysUser(@RequestParam("userId")Long userId);
    @PostMapping("/user/updateSysUser")
    R<Boolean>  updateSysUser(@RequestBody SysUser sysUser);
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -354,7 +354,7 @@
    }
    @PostMapping("/getSysUser")
    public R<SysUser> getSysUser(@RequestBody Long userId) {
    public R<SysUser> getSysUser(@RequestParam("userId") Long userId) {
        try {
            SysUser sysUser = userService.selectUserById(userId);
            return R.ok(sysUser);
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -122,13 +122,13 @@
                // 没有充电订单 展示最新添加的车辆
                data.setLicensePlate(cars.get(0).getLicensePlate());
                data.setVehicleBrand(cars.get(0).getVehicleBrand());
                data.setId(cars.get(0).getId());
                data.setId(cars.get(0).getId().toString());
            }else{
                for (TAppUserCar car : cars) {
                    if (car.getId().equals(data1)){
                        data.setLicensePlate(car.getLicensePlate());
                        data.setVehicleBrand(car.getVehicleBrand());
                        data.setId(car.getId());
                        data.setId(car.getId().toString());
                    }
                }
            }
@@ -164,6 +164,7 @@
    public R<List<TAppUserCar>> carList() {
        List<TAppUserCar> appUserId = appUserCarService.list(new QueryWrapper<TAppUserCar>()
                .eq("app_user_id",tokenService.getLoginUserApplet().getUserId()));
        appUserId.forEach(s->s.setId_(s.getId().toString()));
        return R.ok(appUserId);
    }
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -40,6 +40,7 @@
import com.ruoyi.order.api.model.TGrantVip;
import com.ruoyi.other.api.domain.*;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.dto.UnitListQueryDto;
import com.ruoyi.other.api.feignClient.IntegralRuleClient;
import com.ruoyi.other.api.feignClient.OtherClient;
@@ -705,7 +706,7 @@
    @ApiOperation(value = "优惠卷详情(1可使用2不可用)", tags = {"小程序-个人中心"})
    @GetMapping(value = "/user/coupon/getById")
    @PostMapping(value = "/user/coupon/getById")
    public R<TAppCoupon> couponGetById(@RequestParam("id")Long id) {
        TAppCoupon appCoupon = appCouponService.getById(id);
        appCoupon.setUid(id.toString());
@@ -736,13 +737,13 @@
            TVip info = vipClient.getInfo1(giveVipDto.getVipId()).getData();
        switch (giveVipDto.getType()){
            case 1:
                bigDecimal = bigDecimal.add(info.getMonthlyCard());
                bigDecimal = bigDecimal.add(info.getMonthlyCard()==null?new BigDecimal(0):info.getMonthlyCard());
                break;
            case 2:
                bigDecimal = bigDecimal.add(info.getSeasonCard());
                bigDecimal = bigDecimal.add(info.getSeasonCard()==null?new BigDecimal(0):info.getSeasonCard());
                break;
            case 3:
                bigDecimal = bigDecimal.add(info.getAnnualCard());
                bigDecimal = bigDecimal.add(info.getAnnualCard()==null?new BigDecimal(0):info.getAnnualCard());
                break;
        }
            //增加vipDetail
@@ -964,6 +965,10 @@
                .eq(TAppUserSign::getAppUserId, userId)
                .orderByDesc(TAppUserSign::getSignDay)
                .list();
        for (TAppUserSign signRecord : signRecords) {
            int i = signDayUtil.calculateContinuousSignDays1(signRecord.getAppUserId(), signRecord.getSignDay());
            signRecord.setContinueDays(i);
        }
        return R.ok(signRecords);
    }
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java
@@ -1,15 +1,16 @@
package com.ruoyi.account.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.account.api.dto.SendCouponDto;
import com.ruoyi.account.api.model.TAppUserVipDetail;
import com.ruoyi.account.api.model.TVip;
import com.ruoyi.account.api.vo.GetAppUserVipDetail;
import com.ruoyi.account.service.TAppUserVipDetailService;
import com.ruoyi.account.util.VipInfoDto;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.dto.VipCouponDto;
import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.feignClient.VipClient;
@@ -62,9 +63,11 @@
        for (TAppUserVipDetail tAppUserVipDetail : list) {
            if(null != tAppUserVipDetail.getVipId()){
                TVip data = vipClient.getInfo1(tAppUserVipDetail.getVipId()).getData();
                tAppUserVipDetail.setVipName(data.getName());
                tAppUserVipDetail.setType(data.getType());
                TVip tVip = JSONObject.parseObject(tAppUserVipDetail.getVipJson(), TVip.class);
//                TVip data = vipClient.getInfo1(tAppUserVipDetail.getVipId()).getData();
                tAppUserVipDetail.setVipName(tVip.getName());
                tAppUserVipDetail.setType(tVip.getType());
                tAppUserVipDetail.setVip(tVip);
            }
        }
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java
@@ -72,8 +72,8 @@
            }
        }
        appUser.setAvatar(StringUtils.hasLength(appletUserDecodeData.getAvatarUrl())?appletUserDecodeData.getAvatarUrl():"http://221.182.45.100:8090/2024-10-26/logo.png");
        appUser.setName(StringUtils.hasLength(appletUserDecodeData.getNickName())?appletUserDecodeData.getNickName():RptUtils.around(appletUserDecodeData.getPhoneNumber(),3,4));
        appUser.setAvatar(StringUtils.hasLength(appUser.getAvatar())?appUser.getAvatar():"http://221.182.45.100:8090/2024-10-26/logo.png");
        appUser.setName(StringUtils.hasLength(appUser.getName())?appUser.getName():RptUtils.around(appletUserDecodeData.getPhoneNumber(),3,4));
        appUser.setCity(appletUserDecodeData.getCity());
        appUser.setProvince(appletUserDecodeData.getProvince());
        appUser.setWxOpenid(appletUserDecodeData.getOpenId());
@@ -116,8 +116,8 @@
            }
        }
        appUser.setAliOpenid(response.getOpenId());
        appUser.setAvatar("http://221.182.45.100:8090/2024-10-26/logo.png");
        appUser.setName(RptUtils.around(phone,3,4));
        appUser.setAvatar(StringUtils.hasLength(appUser.getAvatar())?appUser.getAvatar():"http://221.182.45.100:8090/2024-10-26/logo.png");
        appUser.setName(StringUtils.hasLength(appUser.getName())?appUser.getName():RptUtils.around(phone,3,4));
        this.saveOrUpdate(appUser);
        if(Objects.nonNull(inviteUserId)){
            inviteUserService.saveInviteUser(appUser.getId(), inviteUserId);
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/SignDayUtil.java
@@ -4,7 +4,9 @@
import cn.hutool.core.date.DateUtil;
import com.ruoyi.account.api.model.TAppUserSign;
import com.ruoyi.account.service.TAppUserSignService;
import org.springframework.cglib.core.Local;
import org.springframework.stereotype.Component;
import sun.rmi.server.LoaderHandler;
import javax.annotation.Resource;
import java.time.LocalDate;
@@ -48,6 +50,31 @@
        return calculateMaxContinuousSignDays(signDays);
    }
    public int calculateContinuousSignDays1(Long userId, LocalDate date) {
        DateTime startOfMonth = DateUtil.beginOfMonth(new Date());
//        DateTime endOfMonth = DateUtil.endOfMonth(new Date());
        // 获取用户的所有签到记录
        List<TAppUserSign> signRecords = signService.lambdaQuery()
                .between(TAppUserSign::getSignDay, startOfMonth, date)
                .eq(TAppUserSign::getAppUserId, userId)
                .orderByDesc(TAppUserSign::getSignDay)
                .list();
        // 如果没有签到记录,则返回0
        if (signRecords.isEmpty()) {
            return 0;
        }
        // 将签到日期转换为 LocalDate 列表,并按照日期排序
        List<LocalDate> signDays = signRecords.stream()
                .map(TAppUserSign::getSignDay)
                .sorted()
                .collect(Collectors.toList());
        // 计算连续签到的最大天数
        return calculateMaxContinuousSignDays(signDays);
    }
    /**
     * 根据签到日期列表计算连续签到的最大天数
     * @param signDays 签到日期列表
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -123,33 +123,16 @@
        SiteInfoVO siteInfoVO = new SiteInfoVO();
        TChargingGun chargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getFullNumber, number));
        TChargingPile one = chargingPileService.getById(chargingGun.getChargingPileId());
        Site byId = siteService.getById(one.getSiteId());
        TAccountingStrategy byId1 = accountingStrategyService.getById(byId.getAccountingStrategyId());
        Site byId = siteService.getById(chargingGun.getSiteId());
        TAccountingStrategy byId1 = accountingStrategyService.getById(chargingGun.getAccountingStrategyId());
        List<TAccountingStrategyDetail> list = accountingStrategyDetailService.lambdaQuery().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId1.getId()).list();
        list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
        for (TAccountingStrategyDetail tAccountingStrategyDetail : list) {
            // 当前时间属于那个阶段 取哪个阶段的电价
            if(DateUtils.string2LocalTime(tAccountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
                    && DateUtils.string2LocalTime(tAccountingStrategyDetail.getEndTime() + ("23:59:59".equals(tAccountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){
                siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP));
                if(null != byId1.getDiscount()){
                    siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                }else{
                    // 获取当前登录用户id
                    Long userId = tokenService.getLoginUserApplet().getUserId();
                    // 根据id查询用户信息
                    TAppUser appUser = appUserClient.getUserById(userId).getData();
                    if(Objects.nonNull(appUser)){
                        TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                        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());
                        }
                    }else {
                        siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence());
                    }
                }
                siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().setScale(4, BigDecimal.ROUND_HALF_UP));
                siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().setScale(4, BigDecimal.ROUND_HALF_UP));
            }
        }
        siteInfoVO.setChargingGunId(chargingGun.getId());
@@ -176,25 +159,8 @@
            // 当前时间属于那个阶段 取哪个阶段的电价
            if(DateUtils.string2LocalTime(tAccountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
                    && DateUtils.string2LocalTime(tAccountingStrategyDetail.getEndTime() + ("23:59:59".equals(tAccountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){
                siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP));
                if(null != byId1.getDiscount()){
                    siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
                }else{
                    // 获取当前登录用户id
                    Long userId = tokenService.getLoginUserApplet().getUserId();
                    // 根据id查询用户信息
                    TAppUser appUser = appUserClient.getUserById(userId).getData();
                    if(Objects.nonNull(appUser)){
                        TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                        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());
                        }
                    }else {
                        siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence());
                    }
                }
                siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().setScale(4, BigDecimal.ROUND_HALF_UP));
                siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().setScale(4, BigDecimal.ROUND_HALF_UP));
            }
        }
        siteInfoVO.setChargingPileId(one.getId());
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -327,7 +327,7 @@
    @PostMapping(value = "/auth/pageList")
    public AjaxResult<PageInfo<TAccountingStrategyVO>> authPageList(@RequestBody TAccountingStrategyQuery query) {
        return AjaxResult.ok(accountingStrategyService.pageList(query));
        return AjaxResult.ok(accountingStrategyService.pageList1(query));
    }
    
@@ -361,9 +361,12 @@
                    byId.setSiteId(one.getSiteId());
                    //将site表对应的模板id修改为新的这个
                    Site byId1 = siteService.getById(one.getSiteId());
                    if (byId1!=null) {
                    byId1.setAccountingStrategyId(byId.getId());
                    siteService.updateById(byId1);
                }
                    accountingStrategyService.removeById(one.getId());
                }
                //硬件
                List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, byId.getSiteId()).list();
                for (TChargingPile tChargingPile : list) {
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -225,10 +225,10 @@
        if(null != chargingPile){
            //充电桩正常,返回异常,处理充电桩状态和添加故障记录
            if(chargingPile.getStatus() == 1 && 1 == status){
                TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId())
                List<TFaultMessage> faultMessages = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId())
                        .eq(TFaultMessage::getStatus, 2).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime));
                if(null == faultMessage){
                    faultMessage = new TFaultMessage();
                if(faultMessages.isEmpty()){
                    TFaultMessage faultMessage = new TFaultMessage();
                    faultMessage.setSiteId(chargingPile.getSiteId());
                    faultMessage.setChargingPileId(chargingPile.getId());
                    faultMessage.setStatus(2);
@@ -238,20 +238,40 @@
                    faultMessage.setContent("设备故障");
                    faultMessageService.save(faultMessage);
                    chargingPile.setStatus(0 == status ? 1 : 3);
                    chargingPileService.updateById(chargingPile);
                    TChargingPile chargingPile1 = new TChargingPile();
                    chargingPile1.setId(chargingPile.getId());
                    chargingPile1.setStatus(3);
                    chargingPileService.updateById(chargingPile1);
                    List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()));
                    for (TChargingGun chargingGun : list1) {
                        TChargingGun chargingGun1 = new TChargingGun();
                        chargingGun1.setId(chargingGun.getId());
                        chargingGun1.setStatus(7);
                        chargingGunService.updateById(chargingGun1);
                    }
                }
            }
            if(chargingPile.getStatus() != 1 && 0 == status){
                TFaultMessage one = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId())
                List<TFaultMessage> list = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId())
                        .isNull(TFaultMessage::getEndTime));
                if(null != one){
                    one.setEndTime(LocalDateTime.now());
                    faultMessageService.updateById(one);
                if(!list.isEmpty()){
                    list.forEach(s->s.setEndTime(LocalDateTime.now()));
                    faultMessageService.updateBatchById(list);
                }
                chargingPile.setStatus(0 == status ? 1 : 3);
                chargingPileService.updateById(chargingPile);
                TChargingPile chargingPile1 = new TChargingPile();
                chargingPile1.setId(chargingPile.getId());
                chargingPile1.setStatus(1);
                chargingPileService.updateById(chargingPile1);
                List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()));
                for (TChargingGun chargingGun : list1) {
                    TChargingGun chargingGun1 = new TChargingGun();
                    chargingGun1.setId(chargingGun.getId());
                    chargingGun1.setStatus(2);
                    chargingGunService.updateById(chargingGun1);
                }
            }
            if(0 == status){
                Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online");
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java
@@ -28,6 +28,7 @@
     * @return
     */
    List<TAccountingStrategyVO> pageList(@Param("query") TAccountingStrategyQuery query, @Param("pageInfo")PageInfo<TAccountingStrategyVO> pageInfo);
    List<TAccountingStrategyVO> pageList1(@Param("query") TAccountingStrategyQuery query, @Param("pageInfo")PageInfo<TAccountingStrategyVO> pageInfo);
    
    
    /**
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java
@@ -24,6 +24,7 @@
     * @return
     */
    PageInfo<TAccountingStrategyVO> pageList(TAccountingStrategyQuery query);
    PageInfo<TAccountingStrategyVO> pageList1(TAccountingStrategyQuery query);
    
    /**
     * 获取平台添加的计费策略
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -375,7 +375,7 @@
                child.put("selected", collect.contains(siteMenu.getMenuId()));
                list2.add(child);
            }
            menu.put("selected", list2.size() > 0 ? true : false);
            menu.put("selected", collect.contains(tSiteMenu.getMenuId()));
            menu.put("child", list2);
            list1.add(menu);
        }
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -293,7 +293,9 @@
            TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
            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()));
                    }
                });
            }
        }
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
@@ -64,6 +64,28 @@
        pageInfo.setRecords(list);
        return pageInfo;
    }
    @Override
    public PageInfo<TAccountingStrategyVO> pageList1(TAccountingStrategyQuery query) {
        PageInfo<TAccountingStrategyVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
        List<TAccountingStrategyVO> list = this.baseMapper.pageList1(query,pageInfo);
        List<Integer> parentIds = list.stream().map(TAccountingStrategyVO::getId).collect(Collectors.toList());
        for (TAccountingStrategyVO tAccountingStrategyVO : list) {
            SysUser data = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData();
            tAccountingStrategyVO.setUserName(data.getNickName());
            if (tAccountingStrategyVO.getFirstUserId()!=null){
                SysUser first = sysUserClient.getSysUser(tAccountingStrategyVO.getFirstUserId()).getData();
                tAccountingStrategyVO.setFirstUserName(first==null?null:first.getNickName());
            }
            if (tAccountingStrategyVO.getTwoUserId()!=null){
                SysUser two = sysUserClient.getSysUser(tAccountingStrategyVO.getTwoUserId()).getData();
                tAccountingStrategyVO.setTwoUserName(two==null?null:two.getNickName());
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
    
    
    /**
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -586,24 +586,29 @@
    @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);
            }
                TChargingPile chargingPile1 = new TChargingPile();
                chargingPile1.setId(chargingPile.getId());
                chargingPile1.setStatus(2);
                this.updateById(chargingPile1);
                List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()));
                for (TChargingGun chargingGun : list1) {
                    TChargingGun chargingGun1 = new TChargingGun();
                    chargingGun1.setId(chargingGun.getId());
                    chargingGun1.setStatus(1);
                    chargingGunService.updateById(chargingGun1);
        }
        
        if(datas.size() > 0){
            for (TChargingPile data : datas) {
                TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, data.getId())
                //添加记录
                TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId())
                        .eq(TFaultMessage::getStatus, 1).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime));
                if(null == faultMessage){
                    faultMessage = new TFaultMessage();
                    faultMessage.setSiteId(data.getSiteId());
                    faultMessage.setChargingPileId(data.getId());
                    faultMessage.setSiteId(chargingPile.getSiteId());
                    faultMessage.setChargingPileId(chargingPile.getId());
                    faultMessage.setStatus(1);
                    faultMessage.setDownTime(LocalDateTime.now());
                    faultMessage.setCreateTime(LocalDateTime.now());
@@ -612,7 +617,6 @@
                    faultMessageService.save(faultMessage);
                }
            }
            this.updateBatchById(datas);
        }
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
@@ -154,13 +154,14 @@
            a.service_charge AS serviceCharge,
            a.electrovalence AS electrovalenceOriginal,
            (a.electrovalence+a.service_charge) AS electrovalence,
            (a.electrovalence + (a.service_charge*b.discount)) AS vipElectrovalence
            (a.electrovalence + (a.service_charge*(CASE WHEN b.discount IS NULL THEN 1 ELSE b.discount END))) AS vipElectrovalence
        from
            t_accounting_strategy_detail a
        left join
                t_accounting_strategy b on (a.accounting_strategy_id = b.id)
        where b.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
        AND DATE_FORMAT(NOW(), '%H:%i:%s') between a.start_time and a.end_time) tasd on (ts.accounting_strategy_id = tasd.accounting_strategy_id)
        AND DATE_FORMAT(NOW(), '%H:%i:%s') between a.start_time and
        CASE WHEN a.end_time = '00:00' THEN '23:59:59' ELSE a.end_time END) tasd on (ts.accounting_strategy_id = tasd.accounting_strategy_id)
        <where>
            <if test="null != query.name and '' != query.name">
                and ts.`name` like CONCAT('%', #{query.name}, '%')
@@ -288,19 +289,20 @@
        a.service_charge AS serviceCharge,
        a.electrovalence AS electrovalenceOriginal,
        (a.electrovalence+a.service_charge) AS electrovalence,
        (a.electrovalence+(a.service_charge*b.discount)) AS vipElectrovalence
        (a.electrovalence+(a.service_charge*(CASE WHEN b.discount IS NULL THEN 1 ELSE b.discount END))) AS vipElectrovalence
        from
        t_accounting_strategy_detail a
        left join
        t_accounting_strategy b on (a.accounting_strategy_id = b.id)
        where b.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
        AND DATE_FORMAT(NOW(), '%H:%i:%s') between a.start_time and a.end_time) tasd on (ts.accounting_strategy_id = tasd.accounting_strategy_id)
        AND DATE_FORMAT(NOW(), '%H:%i:%s') between a.start_time AND
        CASE WHEN a.end_time = '00:00' THEN '23:59:59' ELSE a.end_time END) tasd on (ts.accounting_strategy_id = tasd.accounting_strategy_id)
        <where>
            <if test="null != query.name and '' != query.name">
                and ts.`name` like CONCAT('%', #{query.name}, '%')
            </if>
            <if test="null != query.cityCode and '' != query.cityCode">
                and ts.cityCode = #{query.cityCode}
                and ts.city_code = #{query.cityCode}
            </if>
            AND ts.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
            AND ts.status = ${@com.ruoyi.common.core.enums.status.SiteStatusEnum@NORMAL_USE.getCode()}
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
@@ -43,6 +43,25 @@
        ORDER BY create_time DESC
    </select>
    <select id="pageList1" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO">
        SELECT
        id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,user_id,parent_id
        FROM t_accounting_strategy
        <where>
            <if test="query.name != null and query.name != ''">
                AND `name` LIKE concat('%',#{query.name}, '%')
            </if>
            <if test="query.auditStatus != null">
                AND audit_status = #{query.auditStatus}
            </if>
            AND site_id IS NULL
            AND (parent_id IS NULL OR audit_status = 1 OR audit_status = 2)
            AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
        </where>
        ORDER BY create_time DESC
    </select>
    
    
    <select id="getPlatformAccountingStrategy" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO">
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java
@@ -51,6 +51,7 @@
        parkingRecord.setCode(code);
        parkingRecord.setVehicleColor(order.getPlateColor());
        TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
        parkingRecord.setName(data.getName());
        parkingRecord.setParkingLotId(data.getId());
        parkingRecord.setInParkingTime(LocalDateTime.parse(order.getEnterDateTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        parkingRecord.setStatus(1);
@@ -101,6 +102,7 @@
        parkingRecord.setCode(code);
        parkingRecord.setVehicleColor(order.getPlatecolor());
        TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
        parkingRecord.setName(data.getName());
        parkingRecord.setParkingLotId(data.getId());
        parkingRecord.setInParkingTime(LocalDateTime.parse(order.getEntertime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        parkingRecord.setStatus(1);
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java
@@ -79,6 +79,12 @@
        return R.ok(list);
    }
    @PostMapping(value = "/delete")
    public R delete(@RequestParam String id) throws ParseException {
        uploadRealTimeMonitoringDataService.delete(id);
        return R.ok();
    }
    
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java
@@ -25,4 +25,5 @@
     */
    UploadRealTimeMonitoringData getLastDataById(String transaction_serial_number);
    void delete(String id);
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
@@ -108,6 +108,10 @@
        long totalElements = mongoTemplate.count(query, UploadRealTimeMonitoringData.class);
        // 设置分页
        Pageable pageable = PageRequest.of(mongoChargingOrderQuery.getPageCurr(), mongoChargingOrderQuery.getPageSize());
        query.with(pageable);
@@ -115,9 +119,6 @@
        List<UploadRealTimeMonitoringData> uploadRealTimeMonitoringData = mongoTemplate.find(
                query
                , UploadRealTimeMonitoringData.class);
        long totalElements = mongoTemplate.count(query, UploadRealTimeMonitoringData.class);
        UploadRealTimeMonitoringPageData uploadRealTimeMonitoringPageData = new UploadRealTimeMonitoringPageData();
        uploadRealTimeMonitoringPageData.setCount(totalElements);
@@ -138,4 +139,10 @@
        return mongoTemplate.findOne(query, UploadRealTimeMonitoringData.class);
    }
    @Override
    public void delete(String id) {
        UploadRealTimeMonitoringData byId = findById(id.toString());
        mongoTemplate.remove(byId);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java
@@ -201,7 +201,7 @@
                    uploadRealTimeMonitoringData.setElectrovalence_all(accountingStrategyDetail.getElectrovalence());
                    uploadRealTimeMonitoringData.setService_charge(accountingStrategyDetail.getServiceCharge());
                    if (Objects.nonNull(data)) {
                        uploadRealTimeMonitoringData.setLast_time(data.getLast_time());
                        data.setLast_time(new Date());
                        uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount().subtract(data.getPaid_amount()));
                        uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree().subtract(data.getCharging_degree()));
                        uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
@@ -214,8 +214,8 @@
                    uploadRealTimeMonitoringData.setOrderType(chargingOrder.getOrderType());
                    uploadRealTimeMonitoringData.setSiteId(chargingOrder.getSiteId());
                    uploadRealTimeMonitoringData.setStatus(chargingOrder.getStatus());
                    uploadRealTimeMonitoringData.setStartTime(chargingOrder.getStartTime());
                    uploadRealTimeMonitoringData.setEndTime(chargingOrder.getEndTime());
//                    uploadRealTimeMonitoringData.setStartTime(chargingOrder.getStartTime());
//                    uploadRealTimeMonitoringData.setEndTime(chargingOrder.getEndTime());
                    int i = uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData);
                    if(i == 0){
                        log.error("数据存储mongo失败");
@@ -224,47 +224,6 @@
                    UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery();
                    BeanUtils.copyProperties(uploadRealTimeMonitoringData, query);
                    chargingOrderClient.chargeMonitoring(query);
                    GetChargingGunByCode code = new GetChargingGunByCode();
                    code.setCharging_pile_code(uploadRealTimeMonitoringDataMessage.getCharging_pile_code());
                    code.setCharging_gun_code(uploadRealTimeMonitoringDataMessage.getCharging_gun_code());
                    TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
                    if(Objects.nonNull(chargingGun)){
                        // 存储状态信息
                        TFaultMessage faultMessage = new TFaultMessage();
                        if(uploadRealTimeMonitoringDataMessage.getCharging_gun_status().equals(0) || uploadRealTimeMonitoringDataMessage.getCharging_gun_status().equals(1)){
                            faultMessage.setSiteId(chargingGun.getSiteId());
                            faultMessage.setChargingPileId(chargingGun.getChargingPileId());
                            faultMessage.setChargingGunId(chargingGun.getId());
                            switch (uploadRealTimeMonitoringDataMessage.getCharging_gun_status()){
                                case 0:
                                    faultMessage.setStatus(1);
                                    chargingGun.setStatus(1);
                                    break;
                                case 1:
                                    faultMessage.setStatus(2);
                                    chargingGun.setStatus(7);
                                    break;
                            }
                            faultMessage.setDownTime(LocalDateTime.now());
                            faultMessageClient.createFaultMessage(faultMessage);
                        }else {
                            switch (uploadRealTimeMonitoringDataMessage.getCharging_gun_status()){
                                case 2:
                                    chargingGun.setStatus(2);
                                    break;
                                case 3:
                                    chargingGun.setStatus(4);
                                    break;
                            }
                            // 空闲 充电 查询是否该设备之前存在离线记录或者故障记录
                            faultMessage = faultMessageClient.getFaultMessageByGunId(chargingGun.getId()).getData();
                            if(Objects.nonNull(faultMessage)){
                                faultMessage.setEndTime(LocalDateTime.now());
                                faultMessageClient.updateFaultMessage(faultMessage);
                            }
                        }
                        chargingGunClient.updateChargingGunById(chargingGun);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
@@ -375,6 +334,13 @@
                TransactionRecordMessageVO vo = new TransactionRecordMessageVO();
                BeanUtils.copyProperties(transactionRecordMessage,vo);
                chargingOrderClient.endChargeBillingCharge(vo);
                // 添加实时上传记录结束记录
                // 查询mogondb上一条数据
                UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(transactionRecordMessage.getTransaction_serial_number());
                UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData();
                BeanUtils.copyProperties(data,uploadRealTimeMonitoringData);
                uploadRealTimeMonitoringData.setStatus(5);
                uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData);
                break;
            case SendTagConstant.UPDATE_BALANCE_REPLY:
                UpdateBalanceReplyMessage updateBalanceReplyMessage = message.getUpdateBalanceReplyMessage();
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -348,7 +348,6 @@
    public AjaxResult<ChargingOrderInfoVO> chargingOrderInfo(String strategyId) {
        TChargingOrder byId = chargingOrderService.getById(strategyId);
        ChargingOrderInfoVO chargingOrderInfoVO = new ChargingOrderInfoVO();
        chargingOrderInfoVO.setCdElectronic(byId.getCurrent()!=null?byId.getCurrent().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
        chargingOrderInfoVO.setCdVoltage(byId.getVoltage()!=null?byId.getVoltage().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
        chargingOrderInfoVO.setSurplus(byId.getTotalElectricity()!=null?byId.getTotalElectricity().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
@@ -841,6 +840,13 @@
    
    
    
    @ResponseBody
    @GetMapping(value = "/watch/deletes")
    @ApiOperation(value = "监控订单-删除", tags = {"管理后台-订单管理"})
    public R watchChargingOrder(@RequestParam String id) {
        uploadRealTimeMonitoringDataClient.delete(id);
        return R.ok();
    }
    
    /**
     * 处理充电订单实时监控数据相关的业务逻辑
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
@@ -1,9 +1,11 @@
package com.ruoyi.order.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.model.TOrderEvaluate;
import com.ruoyi.order.api.model.TOrderEvaluateTag;
import com.ruoyi.order.api.query.TOrderEvaluateQuery;
import com.ruoyi.order.api.vo.SiteDetailEvaluateVO;
import com.ruoyi.order.api.vo.TOrderEvaluateVO;
@@ -11,12 +13,14 @@
import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
import com.ruoyi.order.dto.OrderEvaluateVo;
import com.ruoyi.order.service.TOrderEvaluateService;
import com.ruoyi.order.service.TOrderEvaluateTagService;
import com.ruoyi.order.vo.ReplyEvaluationVO;
import com.ruoyi.other.api.vo.TEvaluationTagVO;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
@@ -35,6 +39,11 @@
    @Autowired
    private TOrderEvaluateService orderEvaluateService;
    @Resource
    private TOrderEvaluateTagService orderEvaluateTagService;
    @ApiOperation(tags = {"小程序-订单评价"},value = "充电订单评价标签及数量查询")
@@ -69,6 +78,7 @@
    public AjaxResult delOrderEvaluate(@PathVariable("id") Long id){
        TOrderEvaluate orderEvaluate = orderEvaluateService.getById(id);
        orderEvaluateService.removeById(orderEvaluate);
        orderEvaluateTagService.remove(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, id));
        return AjaxResult.success();
    }
    
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -82,6 +82,13 @@
    private SysUserClient sysUserClient;
    @Resource
    private TShoppingOrderRefundService shoppingOrderRefundService;
    @Resource
    private AppUserAddressClient appUserAddressClient;
    /**
     * 远程管理后台取消订单后退款回调
     */
@@ -350,8 +357,7 @@
        return AjaxResult.success(list);
    }
    @Resource
    private AppUserAddressClient appUserAddressClient;
    @PostMapping("/create")
    public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto) {
        TShoppingOrder shoppingOrder = new TShoppingOrder();
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -50,6 +50,7 @@
import com.ruoyi.order.vo.EndOfChargePageInfo;
import com.ruoyi.other.api.domain.*;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.feignClient.*;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
@@ -65,10 +66,12 @@
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.crypto.MacSpi;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
@@ -656,10 +659,107 @@
        
        log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString());
        sendMessageClient.platformStartCharging(platformStartCharging);
        //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
        Long id = chargingOrder.getId();
        //执行5分钟的定时任务检测
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        scheduler.scheduleAtFixedRate(()->{
            if(timingDetection(id)){
                scheduler.shutdown();
            }
        }, 5, 1, TimeUnit.SECONDS);
        return AjaxResult.success();
    }
    
    /**
     * 定时检测mongodb数据库数据
     * @param id
     * @return
     */
    public boolean timingDetection(Long id){
        TChargingOrder chargingOrder = this.getById(id);
        if(chargingOrder.getStatus() != 2){
            return true;
        }
        String code = chargingOrder.getCode();
        String key = "AQJC_" + chargingOrder.getChargingGunId();
        List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
        if(null == data || data.size() == 0){
            return false;
        }
        log.error(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
        if(data.size() != 0){
            PlatformStartChargingReply platformStartChargingReply = data.get(1);
            Integer startup_result = platformStartChargingReply.getStartup_result();
            Integer failure_cause = platformStartChargingReply.getFailure_cause();
            Integer counter = counter_map.get(code);
            PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
            //5分钟内还未插枪则取消充电,退回金额。
            if(failure_cause == 5 && (null == counter || counter < 300)){
                counter = (null == counter ? 0 : counter) + 1;
                counter_map.put(code, counter);
                //启动失败
                preChargeCheck1.setStartupSuccess(3);
                preChargeCheck1.setFailureCause(failure_cause);
                redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
                return false;
            }
            //清除计时器中的无效数据
            counter_map.remove(code);
            TChargingOrder order = new TChargingOrder();
            order.setId(id);
            order.setAppUserId(chargingOrder.getAppUserId());
            if(0 == startup_result){
                //启动失败
                preChargeCheck1.setStartupSuccess(3);
                preChargeCheck1.setFailureCause(failure_cause);
                //启动失败后取消订单,退款操作
                refund(code);
                order.setStatus(-1);
                order.setEndMode(0);
            }else{
                //启动成功
                preChargeCheck1.setStartupSuccess(2);
                order.setStatus(3);
                order.setStartTime(LocalDateTime.now());
            }
            this.updateById(order);
            redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
            return true;
        }else{
            Integer counter = boot_failed_map.get(code);
            log.error(code + ":-------------------未上传开启充电结果-------------------" + counter);
            PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
            //5分钟内未启动成功,退回金额。
            if(null == counter || counter < 300){
                counter = (null == counter ? 0 : counter) + 1;
                boot_failed_map.put(code, counter);
                //启动失败
                preChargeCheck1.setStartupSuccess(3);
                preChargeCheck1.setFailureCause(0);
                redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
                return false;
            }
            //清除计时器中的无效数据
            boot_failed_map.remove(code);
            TChargingOrder order = new TChargingOrder();
            order.setId(id);
            order.setAppUserId(chargingOrder.getAppUserId());
            //启动失败
            preChargeCheck1.setStartupSuccess(3);
            preChargeCheck1.setFailureCause(0);
            //启动失败后取消订单,退款操作
            refund(code);
            order.setStatus(-1);
            order.setEndMode(0);
            this.updateById(order);
            redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
            return true;
        }
    }
    
    
    /**
@@ -798,7 +898,10 @@
        one.setRefundTime(LocalDateTime.now());
        chargingOrderRefundService.updateById(one);
        
        TChargingOrder chargingOrder = this.getById(one.getChargingOrderId());
        TChargingOrder order = this.getById(one.getChargingOrderId());
        TChargingOrder chargingOrder = new TChargingOrder();
        chargingOrder.setId(one.getChargingOrderId());
        chargingOrder.setAppUserId(order.getAppUserId());
        chargingOrder.setRefundStatus(2);
        chargingOrder.setRefundSerialNumber(refund_id);
        chargingOrder.setRefundTime(LocalDateTime.now());
@@ -866,14 +969,17 @@
    @Override
    @GlobalTransactional(rollbackFor = Exception.class)
    public AjaxResult stopCharging(String id) {
        TChargingOrder chargingOrder = this.getById(id);
        Integer status = chargingOrder.getStatus();
        TChargingOrder order = this.getById(id);
        Integer status = order.getStatus();
        if(status != 3){
            return AjaxResult.error("还未开始充电");
        }
        if(status == 4 || status == 5){
            return AjaxResult.error("不能重复操作");
        }
        TChargingOrder chargingOrder = new TChargingOrder();
        chargingOrder.setId(Long.valueOf(id));
        chargingOrder.setAppUserId(order.getAppUserId());
        chargingOrder.setEndTime(LocalDateTime.now());
        chargingOrder.setEndMode(1);
        this.updateById(chargingOrder);
@@ -1681,6 +1787,8 @@
        
        //开始处理计费明细数据和优惠数据
        chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
        SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
        for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
            Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
            try {
@@ -1709,15 +1817,77 @@
                    continue;
                }
                BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
                AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
                BeanUtils.copyProperties(strategyDetail, vo1);
                vo1.setStart(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime());
                vo1.setEnd(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime());
                vo1.setChargingCapacity(sharp_peak_charge);
                lists.add(vo1);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e);
            } catch (NoSuchMethodException e) {
                throw new RuntimeException(e);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        }
        Collections.sort(lists, new Comparator<AccountingStrategyDetailOrderVo>() {
            public int compare(AccountingStrategyDetailOrderVo s1, AccountingStrategyDetailOrderVo s2) {
                return s1.getStart() < s2.getStart() ? -1 : s1.getStart() == s2.getStart() ? 0 : 1;
            }
        });
        if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
            List<AccountingStrategyDetailOrderVo> list1 = new ArrayList<>(lists);
            for (AccountingStrategyDetailOrderVo orderVo : list1) {
                Calendar start = Calendar.getInstance();
                start.setTimeInMillis(orderVo.getStart());
                start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
                orderVo.setStart(start.getTimeInMillis());
                Calendar end = Calendar.getInstance();
                end.setTimeInMillis(orderVo.getEnd());
                end.set(Calendar.DAY_OF_YEAR, end.get(Calendar.DAY_OF_YEAR) + 1);
                orderVo.setEnd(end.getTimeInMillis());
            }
            lists.addAll(list1);
        }
        //开始处理明细
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
        SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
        Date start = null;
        Date end = null;
        try {
            start = sdf3.parse(vo.getStart_time());
            end = sdf3.parse(vo.getEnd_time());
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        System.err.println(start.getTime() + "\n" + end.getTime() + "\n" + lists.get(0).getStart() + "\n" + lists.get(0).getEnd());
        for (AccountingStrategyDetailOrderVo strategyDetail : lists) {
            BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
                TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
                chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
                chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
                chargingOrderAccountingStrategy.setType(strategyDetail.getType());
                chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
                chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
                chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
                chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
                chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
            if(start.getTime() >= strategyDetail.getStart()){
                chargingOrderAccountingStrategy.setStartTime(sdf2.format(start));
            }else{
                chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
            }
            if(end.getTime() >= strategyDetail.getEnd()){
                chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
            }else{
                chargingOrderAccountingStrategy.setEndTime(sdf2.format(end));
            }
                //已充电总度数
                BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
                BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
@@ -1739,14 +1909,8 @@
                periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
                periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
                total = total.add(electrovalenc.add(originalServicePrice));
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e);
            } catch (NoSuchMethodException e) {
                throw new RuntimeException(e);
            }
        }
        
        
        //原金额
@@ -1876,9 +2040,10 @@
        BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
        if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
            List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
            BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
                BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
                BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(periodServicePrice_total, new MathContext(4, RoundingMode.HALF_EVEN)));
                BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
                periodServicePrice = periodServicePrice.subtract(multiply);
                chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice);
                chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
@@ -139,14 +139,15 @@
        tagList = tagList.stream().sorted(Comparator.comparing(TEvaluationTagVO::getTagCount).reversed()).collect(Collectors.toList());
        // 统计有图,好评,中差评数量
        long imgUrlCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class)
                .isNotNull(TOrderEvaluate::getImgUrl));
        packageTagCount(imgUrlCount,"有图",tagList);
                .isNotNull(TOrderEvaluate::getImgUrl)
                .ne(TOrderEvaluate::getImgUrl,""));
        packageTagCount(imgUrlCount,"有图",2,tagList);
        long goodCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class)
                .ge(TOrderEvaluate::getMark,4));
        packageTagCount(goodCount,"好评",tagList);
        packageTagCount(goodCount,"好评",3,tagList);
        long badCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class)
                .le(TOrderEvaluate::getMark,3));
        packageTagCount(badCount,"中差评",tagList);
        packageTagCount(badCount,"中差评",4,tagList);
        return tagList;
    }
@@ -172,9 +173,11 @@
                orderEvaluateVO.setName(appUser.getName());
                orderEvaluateVO.setAvatar(appUser.getAvatar());
            }
            if(Objects.nonNull(orderEvaluateVO.getAppUserCarId())){
            TAppUserCar appUserCar = appUserCars.stream().filter(car -> car.getId().equals(Long.parseLong(String.valueOf(orderEvaluateVO.getAppUserCarId())))).findFirst().orElse(null);
            if(Objects.nonNull(appUserCar)){
                orderEvaluateVO.setCarName(appUserCar.getVehicleBrand());
                }
            }
        });
        pageInfo.setRecords(list);
@@ -206,6 +209,11 @@
                        List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagIds).getData();
                        tOrderEvaluateVO.setOrderEvaluateTags(data);
                    }
                    TAppUser data = appUserClient.getUserById(tOrderEvaluateVO.getAppUserId()).getData();
                    if(Objects.nonNull(data)){
                        tOrderEvaluateVO.setName(data.getName());
                        tOrderEvaluateVO.setAvatar(data.getAvatar());
                    }
                }
            }
            siteDetailEvaluateVO.setOrderEvaluateVOS(collect);
@@ -219,11 +227,12 @@
     * @param name
     * @param tagList
     */
    private void packageTagCount(Long count,String name,List<TEvaluationTagVO> tagList){
    private void packageTagCount(Long count,String name,Integer type,List<TEvaluationTagVO> tagList){
        if(count>0){
            TEvaluationTagVO evaluationTagVO = new TEvaluationTagVO();
            evaluationTagVO.setName(name);
            evaluationTagVO.setTagCount(Integer.parseInt(String.valueOf(count)));
            evaluationTagVO.setType(type);
            tagList.add(evaluationTagVO);
        }
    }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
@@ -218,6 +218,8 @@
                BigDecimal payMoney = tChargingOrder.getStatus() < 4 ? tChargingOrder.getRechargeAmount() : tChargingOrder.getPaymentAmount();
                myChargingOrderList.setPayMoney(payMoney);
                myChargingOrderList.setCreateTime(tChargingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss")));
                myChargingOrderList.setElectricCharge(tChargingOrder.getElectrovalence());
                myChargingOrderList.setServiceCharge(tChargingOrder.getServiceCharge());
                chargingOrder.add(myChargingOrderList);
            }
            myOrderInvoiceInfo.setChargingOrder(chargingOrder);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.order.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;
@@ -315,7 +316,7 @@
        MyShoppingOrderInfo info = new MyShoppingOrderInfo();
        info.setId(id);
        info.setStatus(shoppingOrder.getStatus());
        TAppUserAddress userAddress = appUserAddressClient.getAppUserAddressById(shoppingOrder.getAppUserAddressId()).getData();
        TAppUserAddress userAddress = JSON.parseObject(shoppingOrder.getAddressJson(), TAppUserAddress.class);
        info.setConsignee(userAddress.getName());
        info.setPhone(userAddress.getPhone());
        info.setAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getAddress() + userAddress.getHouseNumber());
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -62,7 +62,7 @@
        </if>
    </select>
    <select id="getNoInvoicedOrder" resultMap="BaseResultMap">
        select * from t_charging_order where del_flag = 0 and status = 5 and recharge_payment_status = 2 and payment_amount is not null and app_user_id = #{appUserId}
        select * from t_charging_order where del_flag = 0 and status = 5 and recharge_payment_status = 2 and payment_amount is not null and app_user_id = #{appUserId} and refund_status is null
        <if test="null != month and '' != month">
            and DATE_FORMAT(end_time, '%Y-%m') = #{month}
        </if>
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml
@@ -40,6 +40,7 @@
                <choose>
                    <when test="query.tagType == 2">
                        AND toe.img_url IS NOT NULL
                        AND toe.img_url != ''
                    </when>
                    <when test="query.tagType == 3">
                        AND toe.mark &gt;= 4
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
@@ -203,7 +203,7 @@
    
    
    <select id="getNoInvoicedOrder" resultMap="BaseResultMap">
        select * from t_shopping_order where del_flag = 0 and payment_status = 2 and status = 3 and app_user_id = #{appUserId}
        select * from t_shopping_order where del_flag = 0 and payment_status = 2 and status = 3 and app_user_id = #{appUserId} and refund_status is null
        <if test="null != month and '' != month">
            and DATE_FORMAT(create_time, '%Y-%m') = #{month}
        </if>
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -351,10 +351,11 @@
            //调起支付
            PaymentOrder paymentOrder = new PaymentOrder();
            paymentOrder.setCode(shopOrder.getCode());
            paymentOrder.setAmount(exchangeDto.getOrderPrice());
            paymentOrder.setAmount(exchangeDto.getPayPrice());
            paymentOrder.setOpenId(user.getWxOpenid());
            paymentOrder.setDescription("购买商品");
            R<Map<String, Object>> mapR = wxPaymentClient.orderPay(paymentOrder);
            mapR.getData().put("orderId",shopOrder.getId().toString());
            return    mapR;
        }else {
            //todo 罗 支付宝支付
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
@@ -60,7 +60,6 @@
    @Override
    public PageInfo<TGoods> pageList1(AppGoodQuery basePage) {
        GoodsDTO dto = new GoodsDTO();
        dto.setType(2);
        dto.setStatus(1);
        dto.setPageCurr(basePage.getPageCurr());
        dto.setPageSize(basePage.getPageSize());
@@ -81,7 +80,7 @@
        }
        String string = stringBuilder.toString();
        // 订单号加上商品类型
        String res = string+"-"+dto.getType();
        String res = string+"-"+basePage.getType();
        List<Integer> data = orderClient.getSalesCountByGoodsId(res).getData();
        for (int i = 0; i < list.size(); i++) {