xuhy
2024-10-25 727bd67e564a447ced5d42e11e87315bd6ee5db4
Merge remote-tracking branch 'origin/master'
23个文件已修改
427 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java
@@ -114,5 +114,9 @@
    @ApiModelProperty(value = "已充电百分比")
    @TableField(exist = false)
    private Integer soc;
    @ApiModelProperty(value = "完整编号(桩号+抢号)")
    @TableField("fullNumber")
    private String fullNumber;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -5,6 +5,7 @@
import com.ruoyi.common.core.dto.ExchangeDto;
import com.ruoyi.order.api.feignClient.OrderClient;
import com.ruoyi.order.api.model.ChargingListQuery;
import com.ruoyi.order.api.model.TGrantVip;
import com.ruoyi.order.api.model.TShoppingOrder;
import com.ruoyi.order.api.model.TVipOrder;
import com.ruoyi.order.api.query.TActivityStatisticsQuery;
@@ -35,6 +36,11 @@
            @Override
            public R managementGiveVip(TGrantVip grantVip) {
                return R.fail("管理后台赠送会员:" + cause.getMessage());
            }
            @Override
            public R<List<Integer>> getSalesCountByGoodsId(String goodsIds) {
                return R.fail("根据商品订单ids查询销量:" + cause.getMessage());
            }
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -6,6 +6,7 @@
import com.ruoyi.common.core.dto.ExchangeDto;
import com.ruoyi.order.api.factory.OrderFallbackFactory;
import com.ruoyi.order.api.model.ChargingListQuery;
import com.ruoyi.order.api.model.TGrantVip;
import com.ruoyi.order.api.model.TShoppingOrder;
import com.ruoyi.order.api.model.TVipOrder;
import com.ruoyi.order.api.query.TActivityStatisticsQuery;
@@ -23,7 +24,8 @@
 */
@FeignClient(contextId = "OrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = OrderFallbackFactory.class)
public interface OrderClient {
    @PostMapping(value = "/t-charging-order/management/give/vip")
    public R managementGiveVip(@RequestBody TGrantVip grantVip);
    @GetMapping("/t-exchange-order/getSalesCountByGoodsIds/{goodsIds}")
    R<List<Integer>> getSalesCountByGoodsId(@PathVariable("goodsIds") String goodsIds);
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java
@@ -82,6 +82,14 @@
    @TableField("period_original_service_price")
    private BigDecimal periodOriginalServicePrice;
    
    @ApiModelProperty(value = "优惠券抵扣金额")
    @TableField("coupon_discount_amount")
    private BigDecimal couponDiscountAmount;
    @ApiModelProperty(value = "会员优惠金额")
    @TableField("vip_discount_amount")
    private BigDecimal vipDiscountAmount;
    @ApiModelProperty(value = "首次添加时间")
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java
@@ -14,6 +14,8 @@
public class ChargingBillListVO extends TChargingBill {
    @ApiModelProperty(value = "账单周期")
    private String billWeek;
    @ApiModelProperty(value = "账户类型名称")
    private String payTypeName;
    @ApiModelProperty(value = "充电时间 秒")
    private Integer chargingSecond;
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java
@@ -17,6 +17,8 @@
    @ApiModelProperty(value = "用户手机号")
    private String phone;
    @ApiModelProperty(value = "用户id")
    private Long appUserId;
    @ApiModelProperty(value = "参与类型 优惠券 会员抵扣 会员活动 赠送会员")
    private String type;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -100,7 +100,7 @@
     * @param user
     */
    @PostMapping("/user/addSysUser")
    R addSysUser(@RequestBody SysUser user);
    R<Long> addSysUser(@RequestBody SysUser user);
    
    
    /**
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -679,16 +679,16 @@
    @ResponseBody
    @PostMapping("/addSysUser")
    @Transactional(rollbackFor = Exception.class)
    public R addSysUser(@RequestBody SysUser user) {
    public R<Long> addSysUser(@RequestBody SysUser user) {
        if(StringUtils.isEmpty(user.getUserName())){
            user.setUserName(user.getPhonenumber());
        }
        if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){
            user.setNickName(user.getPhonenumber());
        }
        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
            throw new RuntimeException("手机号已开通账号");
        }
//        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
//            throw new RuntimeException("手机号已开通账号");
//        }
        if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) {
            throw new RuntimeException("登录账号已存在");
        }
@@ -702,7 +702,7 @@
        sysUserRole.setRoleId(user.getRoleId());
        sysUserRole.setUserId(user.getUserId());
        userRoleService.insertSysUserRole(sysUserRole);
        return R.ok();
        return R.ok(user.getUserId());
    }
    
    
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -19,6 +19,7 @@
import com.ruoyi.common.core.dto.PointChangeDto;
import com.ruoyi.common.core.enums.status.AppUserStatusEnum;
import com.ruoyi.common.core.utils.JwtUtils;
import com.ruoyi.common.core.utils.OrderCodeUtil;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -33,8 +34,10 @@
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.feignClient.ExchangeOrderClient;
import com.ruoyi.order.api.feignClient.OrderClient;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.model.TExchangeOrder;
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.dto.UnitListQueryDto;
@@ -51,6 +54,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -76,6 +80,8 @@
    private TAppUserService appUserService;
    @Resource
    private TAppUserTagService appUserTagService;
    @Autowired
    private OrderClient orderClient;
    @Resource
    private TAppUserVipDetailService tAppUserVipDetailService;
@@ -726,9 +732,31 @@
        } else if (giveVipDto.getType() == 3) {
            plusDay = 12;
        }
            BigDecimal bigDecimal = new BigDecimal("0");
            TVip info = vipClient.getInfo1(giveVipDto.getVipId()).getData();
        switch (giveVipDto.getType()){
            case 1:
                bigDecimal = bigDecimal.add(info.getMonthlyCard());
                break;
            case 2:
                bigDecimal = bigDecimal.add(info.getSeasonCard());
                break;
            case 3:
                bigDecimal = bigDecimal.add(info.getAnnualCard());
                break;
        }
        //增加vipDetail
        giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay,giveVipDto.getType());
        appUserService.updateById(nowUser);
        // 新增后台赠送记录
            TGrantVip tGrantVip = new TGrantVip();
            tGrantVip.setCode(OrderCodeUtil.getOrderCode("ZS"));
            tGrantVip.setAppUserId(nowUser.getId());
            tGrantVip.setVipId(giveVipDto.getVipId());
            tGrantVip.setOrderAmount(bigDecimal);
            tGrantVip.setCreateTime(LocalDateTime.now());
            tGrantVip.setAppUserId(nowUser.getId());
            orderClient.managementGiveVip(tGrantVip);
        }
        return R.ok();
    }
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -110,10 +110,8 @@
    @ApiOperation(value = "扫一扫后通过桩编号获取电站信息", tags = {"小程序-扫一扫"})
    public R<SiteInfoVO> getSiteInfoByNumber(@RequestParam("number") String number){
        SiteInfoVO siteInfoVO = new SiteInfoVO();
        String chargingPileCode = number.substring(0, number.length() - 2);
        String chargingGunCode = number.substring(number.length() - 2);
        TChargingPile one = chargingPileService.lambdaQuery().eq(TChargingPile::getCode, chargingPileCode).one();
        TChargingGun chargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, chargingGunCode).eq(TChargingGun::getChargingPileId, one.getId()));
        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());
        List<TAccountingStrategyDetail> list = accountingStrategyDetailService.lambdaQuery().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId1.getId()).list();
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.query.TChargingGunQuery;
import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
import com.ruoyi.chargingPile.dto.ChargeMonitoring;
@@ -39,6 +40,7 @@
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -61,6 +63,9 @@
    
    @Resource
    private RedisService redisService;
    @Resource
    private TFaultMessageService faultMessageService;
    @Autowired
@@ -218,10 +223,31 @@
        TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>()
                .eq(TChargingPile::getCode, code).eq(TChargingPile::getDelFlag, 0));
        if(null != chargingPile){
            if(chargingPile.getStatus() == 1){
                TFaultMessage faultMessage = new TFaultMessage();
                faultMessage.setSiteId(chargingPile.getSiteId());
                faultMessage.setChargingPileId(chargingPile.getId());
                faultMessage.setStatus(1);
                faultMessage.setDownTime(LocalDateTime.now());
                faultMessage.setCreateTime(LocalDateTime.now());
                faultMessage.setDelFlag(false);
                faultMessage.setContent("设备离线");
                faultMessageService.save(faultMessage);
            chargingPile.setStatus(0 == status ? 1 : 3);
            chargingPileService.updateById(chargingPile);
            }
            if(chargingPile.getStatus() != 1 && 0 == status){
                TFaultMessage one = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId()).isNull(TFaultMessage::getEndTime));
                if(null != one){
                    one.setEndTime(LocalDateTime.now());
                    faultMessageService.updateById(one);
                }
            }
            if(0 == status){
            redisService.getCacheMap("charging_pile_online").put(code, System.currentTimeMillis());
        }
    }
}
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -145,13 +145,15 @@
        user.setDelFlag("0");
        user.setRoleId(partner.getRoleId().longValue());
        user.setRoleType(2);
        //添加新数据
        this.save(partner);
        user.setObjectId(partner.getId());
        R r = sysUserClient.addSysUser(user);
        R<Long> r = sysUserClient.addSysUser(user);
        if(200 != r.getCode()){
            throw new RuntimeException(r.getMsg());
        }
        //添加新数据
        this.save(partner);
        user = sysUserClient.getSysUser(r.getData()).getData();
        user.setObjectId(partner.getId());
        sysUserClient.updateUser(user);
        return AjaxResult.success();
    }
    
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -136,8 +136,9 @@
        if(count > 0){
            return AjaxResult.error("接口编码已存在");
        }
        this.save(dto);
        TChargingPile chargingPile = chargingPileService.getById(dto.getChargingPileId());
        dto.setFullNumber(chargingPile.getCode() + dto.getCode());
        this.save(dto);
    
        //下发硬件充电二维码
        String code_prefix = "https://mxcd.zhinenganguan.com?No=";
@@ -173,8 +174,9 @@
        if(null != one && !dto.getId().equals(one.getId())){
            return AjaxResult.error("接口编码已存在");
        }
        this.updateById(dto);
        TChargingPile chargingPile = chargingPileService.getById(dto.getChargingPileId());
        dto.setFullNumber(chargingPile.getCode() + dto.getCode());
        this.updateById(dto);
    
        //下发硬件充电二维码
        String code_prefix = "https://mxcd.zhinenganguan.com?No=";
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -9,6 +9,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.chargingPile.api.model.TFaultMessage;
import com.ruoyi.chargingPile.api.query.BatchSetAccountingStrategy;
import com.ruoyi.chargingPile.api.query.PageChargingPileList;
import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
@@ -19,10 +20,7 @@
import com.ruoyi.chargingPile.dto.ChargingGunMonitoring;
import com.ruoyi.chargingPile.dto.GetChargingGunMonitoring;
import com.ruoyi.chargingPile.mapper.TChargingPileMapper;
import com.ruoyi.chargingPile.service.IPartnerService;
import com.ruoyi.chargingPile.service.ISiteService;
import com.ruoyi.chargingPile.service.TChargingGunService;
import com.ruoyi.chargingPile.service.TChargingPileService;
import com.ruoyi.chargingPile.service.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -51,6 +49,7 @@
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -104,6 +103,9 @@
    
    @Resource
    private RedisService redisService;
    @Resource
    private TFaultMessageService faultMessageService;
    
    
    
@@ -586,6 +588,19 @@
        }
        
        if(datas.size() > 0){
            for (TChargingPile data : datas) {
                if(data.getStatus() == 1){
                    TFaultMessage faultMessage = new TFaultMessage();
                    faultMessage.setSiteId(data.getSiteId());
                    faultMessage.setChargingPileId(data.getId());
                    faultMessage.setStatus(1);
                    faultMessage.setDownTime(LocalDateTime.now());
                    faultMessage.setCreateTime(LocalDateTime.now());
                    faultMessage.setDelFlag(false);
                    faultMessage.setContent("设备离线");
                    faultMessageService.save(faultMessage);
                }
            }
            this.updateBatchById(datas);
        }
    }
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java
@@ -25,6 +25,6 @@
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskMinute(){
        chargingPileService.updateStatus();
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -15,14 +15,11 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.order.api.model.ExportUidDto;
import com.ruoyi.order.api.model.TChargingBill;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.model.*;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
import com.ruoyi.order.api.vo.AccountListVO;
import com.ruoyi.order.api.vo.ChargingBillListVO;
import com.ruoyi.order.api.vo.ChargingBillVO;
import com.ruoyi.order.api.model.ChargingListQuery;
import com.ruoyi.order.api.vo.TOrderInvoiceVO;
import com.ruoyi.order.export.*;
import com.ruoyi.order.service.*;
@@ -30,6 +27,7 @@
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -40,6 +38,7 @@
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
@@ -231,6 +230,9 @@
            }
        }
    }
    @Autowired
    private TChargingOrderRefundService tChargingOrderRefundService;
    @ApiOperation(value = "下载-未出账", tags = {"管理后台-充电算账单"})
    @PutMapping("/download")
    public void download(@RequestBody ExportUidDto uid)
@@ -241,10 +243,9 @@
        TChargingBill byId = chargingBillService.getById(uid.getUid());
        ChargingBillExport chargingBillExport = new ChargingBillExport();
        chargingBillExport.setCode(byId.getCode());
        // todo 确认商户类型
        chargingBillExport.setAccountType("商户类型");
        chargingBillExport.setAccountType("微信商户");
        chargingBillExport.setType(byId.getType().toString());
        chargingBillExport.setBillType("月结");
        chargingBillExport.setBillType("月账单");
        LocalDateTime billTime = byId.getBillTime();
        // 将billTime 减去一个月 转化为yyyy-MM格式字符串
        billTime = billTime.minusMonths(1);
@@ -256,15 +257,26 @@
        if (!data.isEmpty()){
            chargingBillExport.setSiteName(data.get(0).getName());
        }
        // 根据账单的出账时间 查询上个月的充电订单
        LocalDateTime localDate = byId.getBillTime().minusMonths(1);
        // 账单周期
//        // 根据账单的出账时间 查询上个月的充电订单
//        LocalDateTime localDate = byId.getBillTime().minusMonths(1);
//        // 账单周期
//        // 获取 LocalDate 对象
//        LocalDate date = localDate.toLocalDate();
//        // 获取该月份的第一天
//        LocalDate firstDayOfMonth = date.withDayOfMonth(1);
         LocalDateTime localDate = byId.getBillTime().minusDays(1);
        // todo 临时修改为前一天
        // 获取 LocalDate 对象
        LocalDate date = localDate.toLocalDate();
        // 获取该月份的第一天
        LocalDate firstDayOfMonth = date.withDayOfMonth(1);
//            // 获取该月份的第一天
//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
//            // 获取该月份的最后一天
//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
        // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
        LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
        LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
        // 获取该月份的最后一天
        LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
//        LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
        QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                .between("create_time", firstDayOfMonth, lastDayOfMonth)
                .eq("status", 5)
@@ -274,10 +286,10 @@
        }
        BigDecimal paymentAmount = new BigDecimal("0");
        BigDecimal refundAmount = new BigDecimal("0");
        BigDecimal income = new BigDecimal("0");
        List<TChargingOrder> tChargingOrders = chargingOrderService.list(eq);
        // 累加支付金额
        BigDecimal bigDecimal = new BigDecimal("0");
        int i =1;
        for (TChargingOrder tChargingOrder : tChargingOrders) {
            // 账单信息
@@ -304,26 +316,43 @@
                    chargingBillPayExport.setPlatformPay("支付宝小程序支付");
            }
            chargingBillRefundExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
            chargingBillRefundExport.setCode(tChargingOrder.getCode());
            chargingBillRefundExport.setPayTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())));
            TChargingOrderRefund one = tChargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).one();
            if (one!=null){
                chargingBillRefundExport.setRechargeSerialNumber(one.getSerailNumber());
                chargingBillRefundExport.setCode(one.getCode());
                chargingBillRefundExport.setPayTime(tChargingOrder.getPayTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())):"");
            if (tChargingOrder.getRefundTime()!=null){
                chargingBillRefundExport.setRefundTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getRefundTime())));
            }
            chargingBillRefundExport.setRefundMoney(tChargingOrder.getRefundAmount().toString());
            chargingBillRefundExport.setRefundRemark(tChargingOrder.getRefundReason());
            chargingBillRefundExport.setRefundCode(tChargingOrder.getRefundCode());
            chargingBillRefundExport.setRefundSerialNumber(tChargingOrder.getRefundSerialNumber());
                chargingBillRefundExport.setRefundMoney(one.getRefundAmount().toString());
                chargingBillRefundExport.setRefundRemark(one.getRefundReason());
                chargingBillRefundExport.setRefundCode(one.getRefundCode());
                chargingBillRefundExport.setRefundSerialNumber(one.getRefundSerialNumber());
            chargingBillRefundExports.add(chargingBillRefundExport);
            }
            // 支付信息
            chargingBillPayExport.setId(i+"");
            chargingBillPayExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
            chargingBillPayExport.setCode(tChargingOrder.getCode());
            chargingBillPayExport.setPayTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())));
            chargingBillPayExport.setPaymentAmount(tChargingOrder.getPaymentAmount().toString());
            chargingBillPayExport.setPayTime(tChargingOrder.getPayTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())):"");
            chargingBillPayExport.setPaymentAmount(tChargingOrder.getOrderAmount().toString());
            chargingBillPayExport.setTotal("");
            chargingBillPayExports.add(chargingBillPayExport);
            i++;
            bigDecimal = bigDecimal.add(tChargingOrder.getOrderAmount());
        }
        if (!chargingBillPayExports.isEmpty()){
            chargingBillPayExports.get(0).setTotal(bigDecimal+"");
        }
        if (byId.getSiteId()==0){
            chargingBillExport.setSiteName("全站");
        }else{
            List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(byId.getSiteId())).getData();
            if (data1!=null&&(!data1.isEmpty())){
                String name = data1.get(0).getName();
                chargingBillExport.setSiteName(name);
            }
        }
        chargingBillExport.setPaymentAmount(paymentAmount);
        chargingBillExport.setRefundAmount(refundAmount);
@@ -332,9 +361,7 @@
        // 导出
        List<Map<String, Object>> sheetsList = new ArrayList<>();
        AtomicInteger atomicInteger = new AtomicInteger();
        for (int i1 = 0; i1 < 3; i1++) {
        for (int i1 = 1; i1 <= 3; i1++) {
            String sheetName="";
            switch (i1){
                case 1:
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -92,7 +92,8 @@
    private TokenService tokenService;
    @Autowired
    private TOrderEvaluateService orderEvaluateService;
    @Autowired
    private TGrantVipService tGrantVipService;
    @Resource
    private WxPaymentClient wxPaymentClient;
    
@@ -133,6 +134,15 @@
    @Resource
    private TOrderInvoiceService invoiceService;
    /**
     * 远程调用 增加管理后台赠送会员记录
     * @return
     */
    @ResponseBody
    @PostMapping(value = "/management/give/vip")
    public R managementGiveVip(@RequestBody TGrantVip grantVip) {
        return R.ok(tGrantVipService.save(grantVip));
    }
    /**
     * 远程调用根据枪id 查询最新的订单id 用户后台结束充电
@@ -790,16 +800,22 @@
        List<UploadRealTimeMonitoringData> data1 = uploadRealTimeMonitoringDataClient.getAll(mongoChargingOrderQuery).getData();
        List<ChargingOrderAndUploadRealTimeMonitoringDataDto> dtos = new ArrayList<>();
        Map<String,ChargingOrderVO> map  = new HashMap<>();
        for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data1) {
            ChargingOrderAndUploadRealTimeMonitoringDataDto dataDto = new ChargingOrderAndUploadRealTimeMonitoringDataDto();
            BeanUtils.copyProperties(uploadRealTimeMonitoringData,dataDto);
            ChargingOrderQuery dto = new ChargingOrderQuery();
            dto.setCode(uploadRealTimeMonitoringData.getTransaction_serial_number());
            TCharingOrderVO vo = chargingOrderService.chargingOrder(dto);
            if (!vo.getList().getRecords().isEmpty()) {
            ChargingOrderVO chargingOrderVO = vo.getList().getRecords().get(0);
            if (chargingOrderVO!=null) {
                BeanUtils.copyProperties(chargingOrderVO, dataDto);
            }
            dtos.add(dataDto);
            }else {
                continue;
            }
        }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -65,6 +65,13 @@
    private AppUserCarClient appUserCarClient;
    @Override
    public ChargingBillVO chargingBillList1(ChargingListQuery dto) {
        if (dto.getState()!=null){
            if (dto.getState()==1){
                dto.setState(2);
            }else {
                dto.setState(1);
            }
        }
        ChargingBillVO chargingBillVO = new ChargingBillVO();
        String startTime1 = null;
        String startTime2 = null;
@@ -256,8 +263,8 @@
                    serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
                }
                // 累加平台手续费
                if (tChargingOrder.getServiceCharge()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getServiceCharge().multiply(BigDecimal.valueOf(0.006))
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006))
                            .setScale(2,RoundingMode.HALF_DOWN));
                }
                // 累加平台分佣
@@ -289,7 +296,7 @@
            chargingBillListVO.setRefundAmount(refundAmount == null?BigDecimal.ZERO:orderAmount);
            chargingBillListVO.setElectrovalence(electrovalence == null?BigDecimal.ZERO:electrovalence);
            chargingBillListVO.setServiceCharge(serviceCharge == null?BigDecimal.ZERO:serviceCharge);
            chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount);
            chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount.setScale(2, RoundingMode.HALF_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())
@@ -345,8 +352,6 @@
            chargingBillVO.setCategory("");
            chargingBillVO.setExportList(tChargingOrders);
            for (TChargingOrder tChargingOrder : tChargingOrders) {
                // 累加实收金额 支付金额减去退款金额
                if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getPaymentAmount()!=null){
                    paymentAmountTotal = paymentAmountTotal.add(tChargingOrder.getPaymentAmount());
@@ -369,8 +374,8 @@
                    serviceChargeTotal = serviceChargeTotal.add(tChargingOrder.getServiceCharge());
                }
                // 累加平台手续费
                if (tChargingOrder.getServiceCharge()!=null){
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getServiceCharge().multiply(new BigDecimal("0.006")));
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006")));
                }
                // 累加平台分佣
                if (tChargingOrder.getSharingAmount()!=null){
@@ -391,13 +396,13 @@
            }
        }
        chargingBillVO.setChargingCapacity(chargingCapacityTotal);
        chargingBillVO.setPaymentAmount(paymentAmountTotal);
        chargingBillVO.setOrderAmount(orderAmountTotal);
        chargingBillVO.setElectrovalence(electrovalenceTotal);
        chargingBillVO.setServiceCharge(serviceChargeTotal);
        chargingBillVO.setPaymentAmount(paymentAmountTotal.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.setOrderCount(orderCount);
        chargingBillVO.setCommissionAmount(commissionAmountTotal);
        chargingBillVO.setSharingAmount(sharingAmountTotal);
        chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setDiscount(discountTotal);
@@ -407,6 +412,13 @@
    }
    @Override
    public ChargingBillVO chargingBillList(ChargingListQuery dto) {
        if (dto.getState()!=null){
            if (dto.getState()==1){
                dto.setState(2);
            }else {
                dto.setState(1);
            }
        }
        ChargingBillVO chargingBillVO = new ChargingBillVO();
        String startTime1 = null;
        String startTime2 = null;
@@ -488,8 +500,20 @@
            BigDecimal chargingCapacity = new BigDecimal("0");
            orderCount+=tChargingOrders.size();
            chargingBillVO.setCategory("");
            chargingBillListVO.setOrderCount(tChargingOrders.size());
            chargingBillVO.setExportList(tChargingOrders);
            for (TChargingOrder tChargingOrder : tChargingOrders) {
                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("支付宝商户");
                    }
                }
                List<Site> data = siteClient.getSiteByIds(Arrays.asList(tChargingOrder.getSiteId())).getData();
                if (!data.isEmpty()){
                    chargingBillVO.setSiteName(data.get(0).getName());
@@ -600,8 +624,8 @@
                serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
                }
                // 累加平台手续费
                if (tChargingOrder.getServiceCharge()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getServiceCharge().multiply(BigDecimal.valueOf(0.006)).setScale(2,RoundingMode.HALF_DOWN));
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006)));
                }
                // 累加平台分佣
                if (tChargingOrder.getSharingAmount()!=null){
@@ -624,8 +648,8 @@
            chargingBillListVO.setOrderAmount(orderAmount);
            chargingBillListVO.setElectrovalence(electrovalence);
            chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,RoundingMode.HALF_DOWN));
            chargingBillListVO.setCommissionAmount(commissionAmount);
            chargingBillListVO.setSharingAmount(sharingAmount);
            chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,RoundingMode.HALF_DOWN));
            chargingBillListVO.setSharingAmount(sharingAmount.setScale(2,RoundingMode.HALF_DOWN));
            chargingBillListVO.setChargingCapacity(chargingCapacity);
            switch (chargingBillListVO.getType()){
                case 1:
@@ -715,9 +739,9 @@
                    serviceChargeTotal = serviceChargeTotal.add(tChargingOrder.getServiceCharge());
                }
                // 累加平台手续费
                if (tChargingOrder.getServiceCharge()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getServiceCharge().multiply(new BigDecimal("0.006")).setScale(2, RoundingMode.HALF_DOWN));
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getServiceCharge().multiply(new BigDecimal("0.006")).setScale(2, RoundingMode.HALF_DOWN));
                if (tChargingOrder.getOrderAmount()!=null){
                    commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006")));
                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getOrderAmount().multiply(new BigDecimal("0.006")));
                }
                // 累加平台分佣
                if (tChargingOrder.getSharingAmount()!=null){
@@ -739,14 +763,14 @@
            }
        }
        chargingBillVO.setChargingCapacity(chargingCapacityTotal);
        chargingBillVO.setPaymentAmount(paymentAmountTotal);
        chargingBillVO.setOrderAmount(orderAmountTotal);
        chargingBillVO.setElectrovalence(electrovalenceTotal);
        chargingBillVO.setServiceCharge(serviceChargeTotal);
        chargingBillVO.setPaymentAmount(paymentAmountTotal.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.setOrderCount(orderCount);
        chargingBillVO.setCommissionAmount(commissionAmountTotal);
        chargingBillVO.setSharingAmount(sharingAmountTotal);
        chargingBillVO.setDiscount(discountTotal);
        chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, RoundingMode.HALF_DOWN));
        chargingBillVO.setDiscount(discountTotal.setScale(2, RoundingMode.HALF_DOWN));
        pageInfo.setRecords(list);
        chargingBillVO.setList(pageInfo);
        return chargingBillVO;
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -708,6 +708,9 @@
            preChargeCheck1.setStartupSuccess(2);
            order.setStatus(3);
            order.setStartTime(LocalDateTime.now());
            TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
            chargingGun.setStatus(4);
            chargingGunClient.updateChargingGunById(chargingGun);
        }
        redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
        this.updateById(order);
@@ -1275,12 +1278,12 @@
        List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
        for (ChargingOrderListVO chargingOrderListVO : list) {
            chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
            chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getOrderAmount());
            chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
            BigDecimal bigDecimal = new BigDecimal("0.006");
            if (chargingOrderListVO.getServiceCharge()!=null){
                chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getServiceCharge().multiply(bigDecimal));
            if (chargingOrderListVO.getOrderAmount()!=null){
                chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getOrderAmount().multiply(bigDecimal));
            }
            chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount().subtract(chargingOrderListVO.getResidualAmount()));
            chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount());
            chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
            List<Integer> integers = new ArrayList<>();
            integers.add(chargingOrderListVO.getSiteId());
@@ -1404,7 +1407,7 @@
        for (ChargingOrderListVO chargingOrderListVO : list1) {
            if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getElectricity());
            if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getOrderAmount());
            if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount());
            if (chargingOrderListVO.getElectrovalence()!=null)electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence());
            if (chargingOrderListVO.getServiceCharge()!=null)serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge());
            List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
@@ -1494,8 +1497,8 @@
        chargingOrderListInfoVO.setStatus(chargingOrder.getStatus());
        BigDecimal bigDecimal = new BigDecimal("0.006");
        if (chargingOrder.getServiceCharge()!=null){
            chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getServiceCharge().multiply(bigDecimal));
        if (chargingOrder.getOrderAmount()!=null){
            chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getOrderAmount().multiply(bigDecimal));
        }
        chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence());
        chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge());
@@ -1663,6 +1666,8 @@
        
        //获取订单的计费策略
        List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
        //开始处理计费明细数据和优惠数据
        chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
        for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
            Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
@@ -1705,22 +1710,23 @@
                BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
                BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
                BigDecimal serviceCharge = originalServicePrice;
                BigDecimal vipDiscountAmount = BigDecimal.ZERO;
                //计算优惠金额
                if(null != chargingOrder.getVipDiscount()){
                    vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.DOWN);
                    serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN);
                }
                chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
                chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
                chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
                chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
                chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount);
                chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
                chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
                
                BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice();
                BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice();
                periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice);
                periodServicePrice_total = periodServicePrice_total.add(periodServicePrice);
                total = total.add(periodElectricPrice.add(periodServicePrice));
                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) {
@@ -1743,12 +1749,7 @@
        //折扣金额
        BigDecimal discountAmount = BigDecimal.ZERO;
        if(null != chargingOrder.getVipDiscount()){
            //服务费折扣
            discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
            periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
            TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
            if(null != appUser.getVipId()){
                //判断会员是否还有充电优惠次数
                GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
                getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
@@ -1757,7 +1758,10 @@
                if(null != data && data.getChargeNum() > 0){
                    data.setChargeNum(data.getChargeNum() - 1);
                    appUserVipDetailClient.updateAppUserVipDetail(data);
                }
                //服务费折扣
                discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
                periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
                
                TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
                BigDecimal maximumDeduction = vip.getMaximumDeduction();
@@ -1766,8 +1770,8 @@
                    discountAmount = maximumDeduction;
                }
            }
            payAmount = payAmount.subtract(discountAmount);
        }
        payAmount = payAmount.subtract(discountAmount);
        
        TChargingOrder order = new TChargingOrder();
        order.setId(chargingOrder.getId());
@@ -1784,7 +1788,6 @@
        order.setStatus(5);
        order.setOrderAmount(orderAmount);
        order.setVipDiscountAmount(discountAmount);
        order.setServiceCharge(periodServicePrice_total);
        order.setElectrovalence(periodElectricPrice_total);
        order.setChargingCapacity(vo.getTotal_electricity());
        order.setElectricity(vo.getTotal_electricity());
@@ -1805,10 +1808,12 @@
                        refundAmount = refundAmount.add(periodServicePrice_total);
                        order.setCouponDiscountAmount(periodServicePrice_total);
                        payAmount = payAmount.subtract(periodServicePrice_total);
                        periodServicePrice_total = BigDecimal.ZERO;
                    }else{
                        refundAmount = refundAmount.add(couponDiscountAmount);
                        order.setCouponDiscountAmount(couponDiscountAmount);
                        payAmount = payAmount.subtract(couponDiscountAmount);
                        periodServicePrice_total = periodServicePrice_total.subtract(couponDiscountAmount);
                    }
                    
                    appCoupon.setStatus(2);
@@ -1830,10 +1835,12 @@
                        refundAmount = refundAmount.add(periodServicePrice_total);
                        order.setCouponDiscountAmount(periodServicePrice_total);
                        payAmount = payAmount.subtract(periodServicePrice_total);
                        periodServicePrice_total = BigDecimal.ZERO;
                    }else{
                        refundAmount = refundAmount.add(divide);
                        order.setCouponDiscountAmount(divide);
                        payAmount = payAmount.subtract(divide);
                        periodServicePrice_total = periodServicePrice_total.subtract(divide);
                    }
                    
                    appCoupon.setStatus(2);
@@ -1845,11 +1852,27 @@
                }
            }
        }
        order.setServiceCharge(periodServicePrice_total);
        order.setPaymentAmount(payAmount);
        order.setRefundAmount(refundAmount);
        order.setRefundStatus(1);
        this.updateById(order);
        chargingOrder = this.getById(order.getId());
        //开始将优惠券优惠的金额添加到明细中
        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()));
            for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
                BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
                BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(periodServicePrice_total, new MathContext(4, RoundingMode.HALF_EVEN)));
                periodServicePrice = periodServicePrice.subtract(multiply);
                chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice);
                chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply);
            }
            chargingOrderAccountingStrategyService.updateBatchById(list);
        }
        
        // 将枪状态重置为空闲
        TChargingGun chargingGun = new TChargingGun();
@@ -2058,7 +2081,7 @@
                    model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
                    WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
                    amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
                    amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
                    amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
                    amount.setCurrency("CNY");
                    model.setAmount(amount);
                    R<String> orderR = wxPaymentClient.refundOrderR(model);
@@ -2262,10 +2285,10 @@
            }
            if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){
                // 如果成功退款 那么减去退款金额
                paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()));
                paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount());
            }else{
                if (tChargingOrder.getPaymentAmount()!=null){
                    paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
                    paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount());
                }
            }
        }
@@ -2273,8 +2296,8 @@
        commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
        // 订单手续费 订单支付金额 - 退款金额*0.6%
        orderCommission = paymentAmount.multiply(new BigDecimal("0.006"));
        tSettlementConfirm.setSharingAmount(sharingAmount);
        tSettlementConfirm.setCommissionAmount(commissionAmount);
        tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN));
        tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN));
        tSettlementConfirm.setElectrovalence(electrovalence);
        // 服务费=总服务费-三费收费-交易手续费-交易手续费-服务费会员抵扣-服务费优惠券抵扣
        tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).subtract(sharingAmount).subtract(orderCommission).subtract(vipDiscount).subtract(couponDiscount));
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -117,6 +117,10 @@
        BigDecimal grantVip = new BigDecimal("0");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        for (TActivityStatisticslVO tActivityStatisticslVO : list1) {
            TAppUser data = appUserClient.getUserById(tActivityStatisticslVO.getAppUserId()).getData();
            if (data!=null){
                tActivityStatisticslVO.setPhone(data.getPhone());
            }
            // 判断享有了哪些类型
            switch (tActivityStatisticslVO.getOrderType()){
                case 1:
@@ -187,6 +191,7 @@
            }
        }
        for (TActivityStatisticslVO tActivityStatisticslVO : list) {
            // 判断享有了哪些类型
            switch (tActivityStatisticslVO.getOrderType()){
                case 1:
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -6,7 +6,9 @@
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.order.api.model.TChargingBill;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.service.TChargingBillService;
import com.ruoyi.order.service.TChargingOrderService;
import org.apache.logging.log4j.core.util.UuidUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -34,6 +36,8 @@
    private TChargingBillService chargingBillService;
    @Resource
    private SiteClient siteClient;
    @Resource
    private TChargingOrderService chargingOrderService;
    public static void main(String[] args) {
        LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
@@ -48,7 +52,7 @@
    // 每天凌晨12点执行的定时任务
@Scheduled(cron = "0 0 12 1 * ?")
@Scheduled(cron = "0 0 0 * * ?")
//@Scheduled(fixedRate = 60000)
    public void taskMonth() {
        try {
@@ -104,6 +108,11 @@
                        .collect(Collectors.joining()); // 将其连接成一个字符串
                tChargingBill2.setCode("JSD"+string+randomDigits2+(i+1) );
                tChargingBill2.setType(2);
                List<TChargingOrder> list = chargingOrderService.lambdaQuery()
                        .eq(TChargingOrder::getSiteId, collect.get(i)).list();
                if (list.isEmpty()){
                    continue;
                }
                tChargingBill2.setSiteId(collect.get(i));
                tChargingBill2.setBillTime(LocalDateTime.now());
                tChargingBill2.setBillType(1);
@@ -134,7 +143,7 @@
    }
    // 每天晚上23:59:59执行的定时任务
    @Scheduled(cron = "0 0 23 1 * ?")
    @Scheduled(cron = "0 0 23 * * ?")
    public void taskLastDay() {
        try {
            // 获取上个月的开始和结束日期
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -121,7 +121,6 @@
        title,
        `status`,
        order_amount,
        recharge_amount,
        payment_amount ,
        create_time,
        end_time,
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
@@ -49,6 +49,7 @@
        t9.vip_discount_amount as vipDiscountAmount,
        t9.payment_amount as paymentAmount,
        t9.create_time as createTime,
        t9.app_user_id as appUserId,
        1 as orderType
        from t_charging_order t9
        where t9.id = 0 limit 1
@@ -60,6 +61,7 @@
               t1.vip_discount_amount as vipDiscountAmount,
               t1.payment_amount as paymentAmount,
               t1.create_time as createTime,
            t1.app_user_id as appUserId,
               1 as orderType
            from t_charging_order t1
            where 1 = 1
@@ -67,10 +69,13 @@
                and t1.code  LIKE CONCAT('%',#{req.code},'%')
            </if>
            <if test="req.type != null and req.type != '' and req.type == 1">
                and t1.coupon_discount_amount  IS NOT NULL and t1.coupon_discount_amount  != 0
                and t1.coupon_discount_amount > 0
            </if>
            <if test="req.type != null and req.type != '' and req.type == 2">
                and t1.vip_discount_amount  IS NOT NULL and t1.vip_discount_amount  != 0
                and t1.vip_discount_amount > 0
            </if>
            <if test="req.type == null ">
                and (t1.vip_discount_amount > 0 or t1.coupon_discount_amount > 0)
            </if>
            <if test="null != req.userIds and req.userIds.size()>0" >
                and t1.app_user_id in
@@ -95,11 +100,12 @@
        <if test="req.orderType == null or req.orderType == 2">
        <if test="req.type == null or req.type == 1 or req.type == 2">
            union all
            select t2.code ,t2.order_amount as orderAmount,
            select t2.code ,t2.order_amount as paymentAmount,
            t2.coupon_discount_amount as couponDiscountAmount,
            t2.vip_discount_amount as vipDiscountAmount,
            t2.payment_amount as paymentAmount,
            t2.payment_amount as orderAmount,
            t2.create_time as createTime,
            t2.app_user_id as appUserId,
            2 as orderType
            from t_shopping_order t2
            where 1 = 1
@@ -136,6 +142,7 @@
                t3.discount_amount as vipDiscountAmount,
                t3.payment_amount as paymentAmount,
                t3.create_time as createTime,
                t3.app_user_id as appUserId,
                3 as orderType
                from t_vip_order t3
                where 1 = 1
@@ -144,7 +151,7 @@
                    and t3.code  LIKE CONCAT('%',#{req.code},'%')
                </if>
                <if test="req.type == null ">
                    and t3.discount_amount  IS NOT NULL and t3.discount_amount  != 0
                    and t3.discount_amount  > 0
                </if>
                <if test="null != req.userIds and req.userIds.size()>0" >
                    and t3.app_user_id in
@@ -167,6 +174,7 @@
                t4.discount_amount as vipDiscountAmount,
                t4.payment_amount as paymentAmount,
                t4.create_time as createTime,
                t4.app_user_id as appUserId,
                4 as orderType
                from t_vip_order t4
                where 1 = 1
@@ -175,7 +183,7 @@
                    and t4.code  LIKE CONCAT('%',#{req.code},'%')
                </if>
                <if test="req.type == null ">
                    and t4.discount_amount  IS NOT NULL and t4.discount_amount  != 0
                    and t4.discount_amount  > 0
                </if>
                <if test="null != req.userIds and req.userIds.size()>0" >
                    and t4.app_user_id in
@@ -198,6 +206,7 @@
                0 as vipDiscountAmount,
                0 as paymentAmount,
                t5.create_time as createTime,
                t5.app_user_id as appUserId,
                4 as orderType
                from t_grant_vip t5
                where 1 = 1