package com.xy.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yitter.idgen.YitIdHelper; import com.xy.device.EnumDeviceCharging; import com.xy.device.EnumDeviceChargingConfigType; import com.xy.dto.DeviceChargingConfigDto; import com.xy.dto.be.MercDto; import com.xy.entity.DeviceChargingConfig; import com.xy.error.CommRuntimeException; import com.xy.mapper.DeviceChargingConfigMapper; import com.xy.service.be.MercService; import com.xy.utils.Beans; import com.xy.utils.MybatisPlusQuery; import com.xy.utils.R; import com.xy.utils.SysDictUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Optional; import static com.xy.utils.Beans.copy; /** *

* 设备计费配置表 服务实现类 *

* * @author lijin * @since 2023-07-28 */ @Service @AllArgsConstructor @Api(tags = "设备计费配置表") public class DeviceChargingConfigServiceImpl extends ServiceImpl implements DeviceChargingConfigService { private MercService mercService; private DeviceAlgorithmChargingServiceImpl deviceAlgorithmChargingService; @PostMapping("list") @ApiOperation("集合查询") public R> list(@RequestBody @Validated DeviceChargingConfigDto.SelectList selectList) { MercDto.Vo merc = mercService.obj(new MercDto.Vo().setId(selectList.getMercId())).getData(); LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, DeviceChargingConfig.class) .in(DeviceChargingConfig::getDeviceType, selectList.getDeviceTypes()) .eq(DeviceChargingConfig::getMercCode, merc.getMercCode()) .build(); List list = list(lambdaQueryWrapper); return R.ok(Beans.copy(DeviceChargingConfigDto.Vo.class, list)); } @PostMapping("listByFeeConfig") @ApiOperation("设备管理费用配置查询") public R listByFeeConfig(@RequestBody @Validated DeviceChargingConfigDto.ListByFeeConfigDTO dto) { DeviceChargingConfigDto.DeviceManagerFeeConfigVO data = new DeviceChargingConfigDto.DeviceManagerFeeConfigVO(); List deviceTypes = dto.getDeviceTypes(); // 设备管理费-平台默认配置 List dmFeePlatforms = new ArrayList<>(); for (Integer type : deviceTypes) {// 默认年费,赠送天数 DeviceChargingConfigDto.DeviceManagerFeePlatformVO vo = new DeviceChargingConfigDto.DeviceManagerFeePlatformVO(); int defaultMoney = SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), String.valueOf(type), Integer.class); // 默认赠送天数 int giveDays = SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), EnumDeviceCharging.N_X.getCode(), Integer.class); vo.setDefFee(defaultMoney); vo.setDefGiveDay(giveDays); vo.setDeviceType(type); dmFeePlatforms.add(vo); } MercDto.Vo merc = mercService.obj(new MercDto.Vo().setId(dto.getMercId())).getData(); // 设备管理费-商家自定义费用 List dmFeeMercs = new ArrayList<>(); LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(dto, DeviceChargingConfig.class) .in(DeviceChargingConfig::getDeviceType, deviceTypes) .eq(DeviceChargingConfig::getMercCode, merc.getMercCode()) .build(); // 默认配置 type 2预充 1赠送天数 List list = list(lambdaQueryWrapper); if (CollUtil.isNotEmpty(list)) { for (DeviceChargingConfig dcc : list) { Integer type = dcc.getType(); Integer deviceType = dcc.getDeviceType(); // 预充 if (String.valueOf(type).equals(EnumDeviceChargingConfigType.N_2.getCode())) { int defaultMoney = SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), String.valueOf(deviceType), Integer.class); // 默认赠送天数 int giveDays = SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), EnumDeviceCharging.N_X.getCode(), Integer.class); DeviceChargingConfigDto.DeviceManagerFeeMercVO vo = new DeviceChargingConfigDto.DeviceManagerFeeMercVO(); BeanUtil.copyProperties(dcc, vo); vo.setDefFee(defaultMoney); vo.setDefGiveDay(giveDays); vo.setFee(dcc.getConfigValue()); Optional dcObj = list.stream() .filter(dc -> String.valueOf(dc.getType()).equals(EnumDeviceChargingConfigType.N_1.getCode())) .filter(dc -> dc.getDeviceType().intValue() == deviceType.intValue()) .findFirst(); vo.setGiveDay(dcObj.get().getConfigValue()); dmFeeMercs.add(vo); } } } data.setDmFeeMercs(dmFeeMercs); data.setDmFeePlatforms(dmFeePlatforms); return R.ok(data); } @PostMapping("save") @ApiOperation("添加") public R save(@RequestBody @Validated DeviceChargingConfigDto.Save save) { LocalDateTime now = LocalDateTime.now(); Integer deviceType = save.getDeviceType(); Long mercId = save.getMercId(); MercDto.Vo merc = R.feignCheckData(mercService.obj(new MercDto.Vo().setId(mercId))); String mercCode = merc.getMercCode(); DeviceChargingConfig dc = this.getOne(Wrappers.lambdaQuery() .eq(DeviceChargingConfig::getMercCode, mercCode) .eq(DeviceChargingConfig::getDeviceType, deviceType) .eq(DeviceChargingConfig::getType, EnumDeviceChargingConfigType.N_2.getCode()) ); if (dc != null) { throw new CommRuntimeException("该类型配置已存在,请勿重复添加!"); } // 默认赠送天数 int giveDays = SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), EnumDeviceCharging.N_X.getCode(), Integer.class); // 新增赠送天数 DeviceChargingConfig newDc = new DeviceChargingConfig().setDeviceType(deviceType).setConfigValue(giveDays).setMercCode(mercCode) .setType(Integer.valueOf(EnumDeviceChargingConfigType.N_1.getCode())).setCreateTime(now) .setUpdateTime(now).setMercCode(mercCode); save(newDc); DeviceChargingConfig saveInfo = copy(DeviceChargingConfig.class, save) .setCreateTime(now) .setUpdateTime(now).setMercCode(mercCode); save(saveInfo); return R.ok(); } @PostMapping("update") @ApiOperation("修改") public R update(@RequestBody @Validated DeviceChargingConfigDto.Update update) { // DeviceChargingConfig dcc = getById(update.getId()); DeviceChargingConfig updateInfo = copy(DeviceChargingConfig.class, update) .setUpdateTime(LocalDateTime.now()); updateById(updateInfo); return R.ok(); } @PostMapping("delete") @ApiOperation("删除") @Transactional(rollbackFor = Exception.class) public R delete(@RequestBody @Validated DeviceChargingConfigDto.Delete delete) { Long id = delete.getId(); DeviceChargingConfig dcc = getById(delete.getId()); DeviceChargingConfig one = getOne(Wrappers.lambdaQuery() .eq(DeviceChargingConfig::getMercCode, dcc.getMercCode()) .eq(DeviceChargingConfig::getDeviceType, dcc.getDeviceType()) .eq(DeviceChargingConfig::getType, Integer.valueOf(EnumDeviceChargingConfigType.N_1.getCode())) ); if (one != null) { removeById(one.getId()); } removeById(delete.getId()); return R.ok(); } @PostMapping("saveOrUpdate") @ApiOperation("添加或修改") public R saveOrUpdate(@RequestBody @Validated DeviceChargingConfigDto.SaveOrUpdate saveOrUpdate) { LocalDateTime now = LocalDateTime.now(); MercDto.Vo merc = mercService.obj(new MercDto.Vo().setId(saveOrUpdate.getMercId())).getData(); List values = saveOrUpdate.getConfigValues(); for (DeviceChargingConfigDto.SaveOrUpdate.ConfigValue value : values) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() .eq(DeviceChargingConfig::getMercCode, merc.getMercCode()) .eq(DeviceChargingConfig::getDeviceType, saveOrUpdate.getDeviceType()) .eq(DeviceChargingConfig::getType, value.getType()); DeviceChargingConfig deviceChargingConfig = getOne(lambdaQueryWrapper); if (deviceChargingConfig == null) { if (value.getConfigValue() == -1) { continue; } deviceChargingConfig = new DeviceChargingConfig() .setId(YitIdHelper.nextId()) .setMercCode(merc.getMercCode()) .setDeviceType(saveOrUpdate.getDeviceType()) .setConfigValue(value.getConfigValue()) .setNote(saveOrUpdate.getNote()) .setType(value.getType()) .setCreateTime(now) .setUpdateTime(now); save(deviceChargingConfig); } else { if (value.getConfigValue() == -1) { removeById(deviceChargingConfig.getId()); continue; } deviceChargingConfig.setConfigValue(value.getConfigValue()) .setNote(saveOrUpdate.getNote()) .setUpdateTime(now); updateById(deviceChargingConfig); } } return R.ok(); } @Override @ApiOperation("集合查询2") public R> list2(DeviceChargingConfigDto.SelectList selectList) { MercDto.Vo merc = mercService.obj(new MercDto.Vo().setId(selectList.getMercId())).getData(); List mercCodes = new ArrayList<>(); deviceAlgorithmChargingService.getMercCodes(merc.getMercCode(), mercCodes); LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, DeviceChargingConfig.class) .in(DeviceChargingConfig::getMercCode, mercCodes) .build() .orderByDesc(DeviceChargingConfig::getMercCode); List list = list(lambdaQueryWrapper); return R.ok(Beans.copy(DeviceChargingConfigDto.Vo.class, list)); } }