Pu Zhibing
2025-01-17 c80c0184b6e560d41d5aa5691874e07b681fa18f
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
@@ -3,22 +3,21 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TAccountingStrategy;
import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO;
import com.ruoyi.chargingPile.api.model.*;
import com.ruoyi.chargingPile.api.vo.StrategyPriceVO;
import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO;
import com.ruoyi.chargingPile.service.ISiteService;
import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService;
import com.ruoyi.chargingPile.service.TAccountingStrategyService;
import com.ruoyi.chargingPile.service.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalTime;
import java.util.List;
import java.util.Objects;
@@ -36,12 +35,16 @@
public class TAccountingStrategyDetailController {
    private final ISiteService siteService;
    private final TChargingPileService chargingPileService;
    private final TChargingGunService chargingGunService;
    private final TAccountingStrategyService accountingStrategyService;
    private final TAccountingStrategyDetailService accountingStrategyDetailService;
    @Autowired
    public TAccountingStrategyDetailController(ISiteService siteService, TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) {
    public TAccountingStrategyDetailController(ISiteService siteService, TChargingPileService chargingPileService, TChargingGunService chargingGunService, TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) {
        this.siteService = siteService;
        this.chargingPileService = chargingPileService;
        this.chargingGunService = chargingGunService;
        this.accountingStrategyService = accountingStrategyService;
        this.accountingStrategyDetailService = accountingStrategyDetailService;
    }
@@ -70,6 +73,15 @@
    }
    /**
     * 通过站点id查询当前时间段计费策略展示
     */
    @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "通过枪id查询当前时间段计费策略展示")
    @GetMapping(value = "/queryStrategyByGunIdAndTime")
    public AjaxResult<List<TAccountingStrategyDetailVO>> queryStrategyByGunIdAndTime(@RequestParam("gunId") Integer gunId) {
        return AjaxResult.ok(accountingStrategyDetailService.queryStrategyByGunIdAndTime(gunId));
    }
    /**
     * 价格说明金额返回,会员开通金额说明
     */
    @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "价格说明金额返回,会员开通金额说明")
@@ -79,17 +91,135 @@
    }
    
    
    /**
     * 获取当前有效的计费模板
     * @param accountingStrategyId
     * 通过站点id查询当前时段使用的策略明细
     * @param siteId
     * @return
     */
    @PostMapping("/getNowData")
    public R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId){
        TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(new LambdaQueryWrapper<TAccountingStrategyDetail>()
                .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId)
    @GetMapping("/getDetailBySiteId")
    public R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId){
        Site site = siteService.getById(siteId);
        TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId());
        List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery()
                .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()));
        list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
        for (TAccountingStrategyDetail accountingStrategyDetail : list) {
            if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
                    && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime() + ("23:59:59".equals(accountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){
                return R.ok(accountingStrategyDetail);
            }
        }
        return R.ok();
    }
    /**
     * 通过桩id查询当前时段使用的策略明细
     * @param code 设备编号
     * @return
     */
    @GetMapping("/getDetailByCode")
    public R<TAccountingStrategyDetail> getDetailByCode(@RequestParam("code") String code){
        // 查询桩
        TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class)
                .eq(TChargingPile::getCode,code).eq(TChargingPile::getDelFlag, 0)
                .last("LIMIT 1"));
        if(Objects.isNull(chargingPile)){
            return R.fail("未查询到该桩设备");
        }
        TChargingGun chargingGun = chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class)
                .eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0)
                .last("LIMIT 1"));
        TAccountingStrategy accountingStrategy = accountingStrategyService.getById(chargingGun.getAccountingStrategyId());
        TAccountingStrategyDetail one = null;
        if(Objects.nonNull(accountingStrategy)){
            List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery()
                    .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()));
            list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
            for (TAccountingStrategyDetail accountingStrategyDetail : list) {
                if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
                        && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime() + ("23:59:59".equals(accountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){
                    return R.ok(accountingStrategyDetail);
                }
            }
        }else {
            Site site = siteService.getById(chargingPile.getSiteId());
            accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId());
            List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery()
                    .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()));
            list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
            for (TAccountingStrategyDetail accountingStrategyDetail : list) {
                if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
                        && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime() + ("23:59:59".equals(accountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){
                    return R.ok(accountingStrategyDetail);
                }
            }
        }
        return R.ok();
    }
    /**
     * 校验充电桩计费模版是否准确
     * @param
     * @return
     */
    @PostMapping("/checkChargingStrategy")
    public R<Boolean> checkChargingStrategy(@RequestBody CheckChargingStrategyDTO dto){
        // 查询桩
        TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class)
                .eq(TChargingPile::getCode,dto.getCode()).eq(TChargingPile::getDelFlag, 0)
                .last("LIMIT 1"));
        if(Objects.isNull(chargingPile)){
            return R.ok(false);
        }
        Site site = siteService.getById(chargingPile.getSiteId());
        TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId());
        TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery()
                .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())
                .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time"));
        return R.ok(one);
        return R.ok(dto.getStrategyDetailId().equals(one.getId()));
    }
    /**
     * 根据计费策略主表id策略明细
     * @param id
     * @return
     */
    @GetMapping("/getListByAccountingStrategyId")
    public R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(@RequestParam("id") Integer id){
        List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, id));
        return R.ok(list);
    }
    /**
     * 通过桩编号查询当前使用的策略明细列表
     * @param code
     * @return
     */
    @GetMapping("/getDetailListByCode")
    public R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code){
        // 查询桩
        TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class)
                .eq(TChargingPile::getCode,code).eq(TChargingPile::getDelFlag, 0)
                .last("LIMIT 1"));
        if(Objects.isNull(chargingPile)){
            return R.fail("未查询到该桩设备");
        }
        TChargingGun chargingGun = chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class)
                .eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0)
                .last("LIMIT 1"));
        TAccountingStrategy accountingStrategy = accountingStrategyService.getById(chargingGun.getAccountingStrategyId());
        if(Objects.nonNull(accountingStrategy)){
            List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery()
                    .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()));
            return R.ok(accountingStrategyDetails);
        }else {
            Site site = siteService.getById(chargingPile.getSiteId());
            accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId());
            List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery()
                    .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()));
            return R.ok(accountingStrategyDetails);
        }
    }
}