puzhibing
2026-03-21 c6d5c883a516577f89abc5972ed097d569245fc2
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java
@@ -38,10 +38,14 @@
import com.xiaopeng.operation.service.IXpGeoQueryEntityService;
import com.xiaopeng.operation.service.XpPointService;
import com.xiaopeng.operation.service.XpPricingService;
import com.xiaopeng.operation.job.base.QuartzManager;
import com.xiaopeng.operation.job.base.TimeJobType;
import com.xiaopeng.operation.job.jobs.DynamicPricingCheckJob;
import com.xiaopeng.operation.utils.XpPricingUtil;
import com.xiaopeng.operation.utils.holiday.HolidayUtil;
import com.xiaopeng.operation.utils.map.FastDistanceCalculator;
import com.xiaopeng.operation.vo.PricingPageListVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.stereotype.Service;
@@ -63,6 +67,7 @@
 * @author liu
 * @since 2026-02-03
 */
@Slf4j
@Service
public class XpPricingServiceImpl extends ServiceImpl<XpPricingMapper, XpPricing> implements XpPricingService {
@@ -762,6 +767,28 @@
        update.setDynamicPricingJson(dto.getDynamicPricingJson());
        update.setIsDynamicPrice(dto.getIsDynamicPrice());
        this.updateById(update);
        // 动态调价 Quartz 任务调度
        String jobName = DynamicPricingCheckJob.JOB_PREFIX + dto.getId();
        if (Integer.valueOf(1).equals(dto.getIsDynamicPrice())
                && StringUtils.isNotBlank(dto.getDynamicPricingJson())) {
            JSONObject dynamicJson = JSONObject.parseObject(dto.getDynamicPricingJson());
            Integer periodMinutes = dynamicJson.getInteger("num1");
            if (periodMinutes != null && periodMinutes > 0) {
                // 先移除可能存在的旧任务,再注册新任务(num1 分钟后首次执行)
                QuartzManager.removeJob(jobName, TimeJobType.DYNAMIC_PRICING_CHECK);
                Date triggerTime = new Date(System.currentTimeMillis() + periodMinutes * 60_000L);
                Map<String, Object> jobData = new HashMap<>();
                jobData.put("pricingId", dto.getId());
                QuartzManager.addJob(DynamicPricingCheckJob.class, jobName,
                        TimeJobType.DYNAMIC_PRICING_CHECK, triggerTime, jobData);
                log.info("动态调价任务已注册 pricingId={}, 供需计算周期={}分钟", dto.getId(), periodMinutes);
            }
        } else {
            // 关闭动态调价时,移除已存在的任务
            QuartzManager.removeJob(jobName, TimeJobType.DYNAMIC_PRICING_CHECK);
            log.info("动态调价任务已移除 pricingId={}", dto.getId());
        }
    }
    @Override