|
|
@@ -0,0 +1,233 @@
|
|
|
+package com.sckw.transport.service;
|
|
|
+
|
|
|
+
|
|
|
+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.plugins.pagination.Page;
|
|
|
+import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
+import com.sckw.core.exception.BusinessPlatfromException;
|
|
|
+import com.sckw.core.model.constant.Global;
|
|
|
+import com.sckw.core.model.enums.ParkingChangeStrategyEnum;
|
|
|
+import com.sckw.core.utils.CollectionUtils;
|
|
|
+import com.sckw.core.utils.StringUtils;
|
|
|
+import com.sckw.core.web.response.result.PageDataResult;
|
|
|
+import com.sckw.system.api.RemoteSystemService;
|
|
|
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
|
|
|
+import com.sckw.transport.model.KwtParkingChargeStrategy;
|
|
|
+import com.sckw.transport.model.KwtParkingChargeStrategyUnit;
|
|
|
+import com.sckw.transport.model.ParkingChangeStrategySaveParam;
|
|
|
+import com.sckw.transport.model.param.ParkingChangeStrategyQueryParam;
|
|
|
+import com.sckw.transport.model.param.ParkingChangeStrategyResp;
|
|
|
+import com.sckw.transport.model.param.ParkingChangeStrategyUnitResp;
|
|
|
+import com.sckw.transport.model.param.ParkingChangeStrategyUnitSaveParam;
|
|
|
+import com.sckw.transport.repository.KwParkingChangeStrategyRepository;
|
|
|
+import com.sckw.transport.repository.KwParkingChangeStrategyUnitRepository;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Author: donglang
|
|
|
+ * Time: 2026-01-05
|
|
|
+ * Des: 收费策略 Service
|
|
|
+ * Version: 1.0
|
|
|
+ */
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class ParkingChangeStrategyService {
|
|
|
+
|
|
|
+
|
|
|
+ private final KwParkingChangeStrategyRepository parkingChangeStrategyRepository;
|
|
|
+ private final KwParkingChangeStrategyUnitRepository parkingChangeStrategyUnitRepository;
|
|
|
+
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
|
|
|
+ RemoteSystemService remoteSystemService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分页查询收费策略
|
|
|
+ * @param param
|
|
|
+ */
|
|
|
+ public PageDataResult<ParkingChangeStrategyResp> pageQueryChangeStrategy(ParkingChangeStrategyQueryParam param) {
|
|
|
+ log.info("分页查询收费策略:{}", JSON.toJSONString(param));
|
|
|
+ if (param.getEntId() == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "平台企业id不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //构建查询条件
|
|
|
+ LambdaQueryWrapper<KwtParkingChargeStrategy> wrapper = buildAndExecuteQuery(param);
|
|
|
+
|
|
|
+ //查询门卫订单
|
|
|
+ Page<KwtParkingChargeStrategy> pageByStatus = parkingChangeStrategyRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
|
|
|
+ List<KwtParkingChargeStrategy> records = pageByStatus.getRecords();
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ log.info("当前收费策略信息");
|
|
|
+ return PageDataResult.empty(param.getPageNum(), param.getPageSize());
|
|
|
+ }
|
|
|
+ List<ParkingChangeStrategyResp> changeStrategyRespList = getChangeStrategyPageResult(records);
|
|
|
+ return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), changeStrategyRespList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建查询条件并执行分页查询
|
|
|
+ */
|
|
|
+ private LambdaQueryWrapper<KwtParkingChargeStrategy> buildAndExecuteQuery(ParkingChangeStrategyQueryParam param) {
|
|
|
+ return Wrappers.<KwtParkingChargeStrategy>lambdaQuery()
|
|
|
+ .eq(param.getType() != null, KwtParkingChargeStrategy::getType, param.getType())
|
|
|
+ .like(StringUtils.isNotBlank(param.getStrategyName()), KwtParkingChargeStrategy::getStrategyName, param.getStrategyName())
|
|
|
+ .orderByDesc(KwtParkingChargeStrategy::getCreateBy);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取收费策略
|
|
|
+ * @param records
|
|
|
+ */
|
|
|
+ private List<ParkingChangeStrategyResp> getChangeStrategyPageResult(List<KwtParkingChargeStrategy> records) {
|
|
|
+ log.info("开始查询收费策略,param:{}", JSON.toJSONString(records));
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<ParkingChangeStrategyResp> changeStrategyList = records.stream()
|
|
|
+ .map(change -> {
|
|
|
+ ParkingChangeStrategyResp resp = new ParkingChangeStrategyResp();
|
|
|
+ resp.setId(change.getId());
|
|
|
+ resp.setStrategyName(change.getStrategyName());
|
|
|
+ resp.setType(change.getType());
|
|
|
+ resp.setTypeDesc(ParkingChangeStrategyEnum.geDesc(change.getType()));
|
|
|
+ resp.setMethod(change.getMethod());
|
|
|
+
|
|
|
+ if (Objects.equals(ParkingChangeStrategyEnum.BY_TON, change.getType())) {
|
|
|
+ resp.setMethodDesc(change.getMethod() + "元/吨");
|
|
|
+ } else if (Objects.equals(ParkingChangeStrategyEnum.BY_TIME, change.getType())) {
|
|
|
+ resp.setMethodDesc(change.getMethod() + "元/次");
|
|
|
+ } else {
|
|
|
+ resp.setMethodDesc(change.getMethod() + "元/月");
|
|
|
+ }
|
|
|
+ // 查询分配单位数量
|
|
|
+ List<KwtParkingChargeStrategyUnit> strategyUnitList = parkingChangeStrategyUnitRepository.queryByStrategyId(change.getId());
|
|
|
+ if (CollectionUtils.isEmpty(strategyUnitList)) {
|
|
|
+ resp.setEntNumber(0);
|
|
|
+ } else {
|
|
|
+ resp.setEntNumber(strategyUnitList.size());
|
|
|
+ }
|
|
|
+ resp.setStatus(change.getStatus());
|
|
|
+ resp.setRemark(change.getRemark());
|
|
|
+ resp.setCreateTime(change.getCreateTime());
|
|
|
+ return resp;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ log.info("收费策略查询结束,size:{}", JSON.toJSONString(changeStrategyList.size()));
|
|
|
+ return changeStrategyList;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存收费策略
|
|
|
+ * @param param
|
|
|
+ */
|
|
|
+ public void saveChangeStrategy(ParkingChangeStrategySaveParam param) {
|
|
|
+ log.info("保存收费策略,param:{}", JSON.toJSONString(param));
|
|
|
+ // 新增
|
|
|
+ if (param.getId() == null) {
|
|
|
+ KwtParkingChargeStrategy changeStrategy = new KwtParkingChargeStrategy();
|
|
|
+ changeStrategy.setStrategyName(param.getStrategyName());
|
|
|
+ changeStrategy.setType(param.getType());
|
|
|
+ changeStrategy.setMethod(param.getMethod());
|
|
|
+ changeStrategy.setStatus(1);
|
|
|
+ changeStrategy.setRemark(param.getRemark());
|
|
|
+ parkingChangeStrategyRepository.save(changeStrategy);
|
|
|
+ } else {
|
|
|
+ // 更新
|
|
|
+ KwtParkingChargeStrategy changeStrategy = parkingChangeStrategyRepository.getById(param.getId());
|
|
|
+ if (changeStrategy == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "收费策略不存在");
|
|
|
+ }
|
|
|
+ changeStrategy.setStrategyName(param.getStrategyName());
|
|
|
+ changeStrategy.setType(param.getType());
|
|
|
+ changeStrategy.setMethod(param.getMethod());
|
|
|
+ changeStrategy.setStatus(param.getStatus());
|
|
|
+ changeStrategy.setRemark(param.getRemark());
|
|
|
+ parkingChangeStrategyRepository.updateById(changeStrategy);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除收费策略
|
|
|
+ * @param id
|
|
|
+ */
|
|
|
+ public void deleteChangeStrategy(Long id) {
|
|
|
+ log.info("删除收费策略,id:{}", id);
|
|
|
+ // 新增
|
|
|
+ if (id == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "id不存在");
|
|
|
+ }
|
|
|
+ KwtParkingChargeStrategy changeStrategy = parkingChangeStrategyRepository.getById(id);
|
|
|
+ if (changeStrategy == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "收费策略不存在");
|
|
|
+ }
|
|
|
+ changeStrategy.setDelFlag(Global.YES);
|
|
|
+ parkingChangeStrategyRepository.updateById(changeStrategy);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询收费策略已分配单位
|
|
|
+ * @param id
|
|
|
+ * @return List<ParkingChangeStrategyUnitResp>
|
|
|
+ */
|
|
|
+ public List<ParkingChangeStrategyUnitResp> queryChangeStrategyEnt(Long id) {
|
|
|
+ log.info("查询收费策略已分配单位,id:{}", id);
|
|
|
+ List<KwtParkingChargeStrategyUnit> strategyUnitList = parkingChangeStrategyUnitRepository.queryByStrategyId(id);
|
|
|
+ if (CollectionUtils.isEmpty(strategyUnitList)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return strategyUnitList.stream()
|
|
|
+ .map(unit -> {
|
|
|
+ ParkingChangeStrategyUnitResp resp = new ParkingChangeStrategyUnitResp();
|
|
|
+ resp.setId(unit.getId());
|
|
|
+ resp.setStrategyId(id);
|
|
|
+ resp.setEntId(unit.getEntId());
|
|
|
+
|
|
|
+ // 查询企业名称
|
|
|
+ EntCacheResDto entCacheResDto = remoteSystemService.queryEntDetails(unit.getEntId());
|
|
|
+ resp.setEntName(entCacheResDto.getFirmName());
|
|
|
+ return resp;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存单位分配
|
|
|
+ * @param param
|
|
|
+ */
|
|
|
+ public void saveChangeStrategyEnt(ParkingChangeStrategyUnitSaveParam param) {
|
|
|
+ log.info("保存单位分配,param:{}", JSON.toJSONString(param));
|
|
|
+ // 如果企业id为空,删除所以的单位关联关系
|
|
|
+ if (CollectionUtils.isEmpty(param.getEntIds())) {
|
|
|
+ parkingChangeStrategyUnitRepository.deleteByStrategyId(param.getStrategyId());
|
|
|
+ } else {
|
|
|
+ parkingChangeStrategyUnitRepository.deleteByStrategyId(param.getStrategyId());
|
|
|
+ // 构建关联表实体列表
|
|
|
+ List<KwtParkingChargeStrategyUnit> insertList = param.getEntIds().stream()
|
|
|
+ .map(entId -> {
|
|
|
+ KwtParkingChargeStrategyUnit unit = new KwtParkingChargeStrategyUnit();
|
|
|
+ unit.setStrategyId(param.getStrategyId());
|
|
|
+ unit.setEntId(entId);
|
|
|
+ return unit;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 批量插入
|
|
|
+ parkingChangeStrategyUnitRepository.saveBatch(insertList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|