package com.xy.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xy.dto.DeviceChargingDto;
import com.xy.dto.DeviceChargingHistoryDto;
import com.xy.dto.DeviceInfoDto;
import com.xy.entity.DeviceCharging;
import com.xy.entity.DeviceChargingHistory;
import com.xy.entity.SysDictRedis;
import com.xy.job.DeviceChargingJob;
import com.xy.mapper.DeviceChargingMapper;
import com.xy.utils.*;
import com.xy.utils.enums.DictEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
import static com.xy.utils.PlusBeans.*;
/**
*
* 设备计费表 服务实现类
*
*
* @author lijin
* @since 2023-04-14
*/
@Service
@Api(tags = "设备计费表")
@AllArgsConstructor(onConstructor_ = @Lazy)
public class DeviceChargingServiceImpl extends ServiceImpl implements DeviceChargingService {
private DeviceChargingJob deviceChargingJob;
private DeviceChargingHistoryServiceImpl deviceChargingHistoryService;
@PostMapping("charging")
@ApiOperation("手动计费")
public R charging(@RequestBody @Validated DeviceChargingDto.Charging charging) {
List deviceIds = charging.getDeviceIds();
deviceChargingJob.deviceCharging(1, deviceIds.size(), deviceIds);
return R.ok();
}
@PostMapping("page")
@ApiOperation("分页查询")
public R> page(@RequestBody DeviceChargingDto.Page page) {
IPage iPage = baseMapper.page(toIPage(page.getPage()), page);
List records = iPage.getRecords();
if (Emptys.check(records)) {
Map stringSysDictRedisMap = SysDictUtils.get(DictEnum.DEVICE_CHARGING.getKey());
for (DeviceChargingDto.PageVo record : records) {
DeviceInfoDto.Vo deviceInfo = record.getDeviceInfo();
//封装最新计费历史信息
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper()
.eq(DeviceChargingHistory::getDeviceId, deviceInfo.getDeviceId())
.orderByDesc(DeviceChargingHistory::getCreateTime)
.last("limit 1");
DeviceChargingHistory deviceChargingHistory = deviceChargingHistoryService.getOne(lambdaQueryWrapper);
if (deviceChargingHistory != null) {
record.setDeviceChargingHistory(copy(DeviceChargingHistoryDto.Vo.class, deviceChargingHistory));
}
//封装计费标准金额
SysDictRedis sysDictRedis = stringSysDictRedisMap.get(deviceInfo.getDeviceType().toString());
if (sysDictRedis != null) {
record.setChargingMoney(Integer.valueOf(sysDictRedis.getValue()));
}
//封装缴费状态
DeviceChargingDto.Vo deviceCharging = record.getDeviceCharging();
if (deviceCharging != null) {
int contrast = DataTime.stringContrast(DataTime.toString(page.getThisTime()), DataTime.toString(deviceCharging.getTimeout()));
record.setChargingStatus(contrast < 0);
}
}
}
return R.ok(toPageBean(iPage));
}
}