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.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xy.device.EnumSimConfig;
import com.xy.dto.MercFeeConfigAlgorithmTypeDto;
import com.xy.dto.MercFeeConfigDto;
import com.xy.dto.MercFeeConfigSimCardDto;
import com.xy.dto.be.MercDto;
import com.xy.entity.MercFeeConfigSimCard;
import com.xy.error.CommRuntimeException;
import com.xy.mapper.MercFeeConfigSimCardMapper;
import com.xy.service.be.MercService;
import com.xy.utils.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
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.ArrayList;
import java.util.List;
import static com.xy.utils.Beans.copy;
import static com.xy.utils.PlusBeans.toIPage;
import static com.xy.utils.PlusBeans.toPageBean;
/**
*
* 商户流量卡费配置扩展 服务实现类
*
*
* @author 谭斌
* @since 2024-04-07
*/
@Service
@AllArgsConstructor
@Api(tags = "商户流量卡费配置扩展")
public class MercFeeConfigSimCardServiceImpl extends ServiceImpl implements MercFeeConfigSimCardService {
private MercService mercService;
private DeviceAlgorithmChargingServiceImpl deviceAlgorithmChargingService;
private MercFeeConfigService mercFeeConfigService;
@PostMapping("obj")
@ApiOperation("对象查询")
public R obj(@RequestBody MercFeeConfigSimCardDto.Vo vo) {
MercFeeConfigSimCardDto.SelectList selectList = copy(MercFeeConfigSimCardDto.SelectList.class, vo);
List list = list(selectList).getData();
if (Emptys.check(list)) {
return R.ok(list.get(0));
}
return R.ok();
}
@PostMapping("list")
@ApiOperation("集合查询")
public R> list(@RequestBody MercFeeConfigSimCardDto.SelectList selectList) {
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, MercFeeConfigSimCard.class).build();
List list = list(lambdaQueryWrapper);
return R.ok(copy(MercFeeConfigSimCardDto.Vo.class, list));
}
@PostMapping("page")
@ApiOperation("分页查询")
public R> page(@RequestBody MercFeeConfigSimCardDto.Page page) {
PageBean pageBean = page.getPage();
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, MercFeeConfigSimCard.class).build();
IPage iPage = page(toIPage(pageBean), lambdaQueryWrapper);
return R.ok(toPageBean(MercFeeConfigSimCardDto.Vo.class, iPage));
}
@PostMapping("listByFeeConfig")
@ApiOperation("流量卡费用配置查询")
public R listByFeeConfig(@RequestBody @Validated MercFeeConfigAlgorithmTypeDto.ListByFeeConfigDTO dto) {
MercFeeConfigSimCardDto.DeviceSimConfigVO data = new MercFeeConfigSimCardDto.DeviceSimConfigVO();
Long mercId = dto.getMercId();
MercDto.Vo merc = R.feignCheckData(mercService.obj(new MercDto.Vo().setId(mercId)));
//查询默认算法信息
//流量卡费-平台默认配置
List deviceSimPlatformList = new ArrayList<>();
Integer money = SysDictUtils.getValue(EnumSimConfig.Code.CODE.getCode(), EnumSimConfig.money.getCode(), Integer.class);
String name = SysDictUtils.getValue(EnumSimConfig.Code.CODE.getCode(), EnumSimConfig.name.getCode(), String.class);
Integer expireDay = SysDictUtils.getValue(EnumSimConfig.Code.CODE.getCode(), EnumSimConfig.N_200.getCode(), Integer.class);
deviceSimPlatformList.add(new MercFeeConfigSimCardDto.DeviceSimPlatformVO().setName(name).setExpireDay(expireDay).setMoney(money));
// 设备管理费-商家自定义费用
List deviceSimMercList = new ArrayList<>();
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(dto, MercFeeConfigSimCard.class)
.eq(MercFeeConfigSimCard::getMercId, merc.getId())
.build();
//默认配置 type 2预充 1赠送天数
List list = list(lambdaQueryWrapper);
if (CollUtil.isNotEmpty(list)) {
for (MercFeeConfigSimCard cfg : list) {
MercFeeConfigSimCardDto.DeviceSimMercVO deviceSimMercVO = BeanUtil.copyProperties(cfg, MercFeeConfigSimCardDto.DeviceSimMercVO.class);
deviceSimMercVO.setName(name).setExpireDay(expireDay).setMoney(money);
deviceSimMercList.add(deviceSimMercVO);
}
}
data.setDeviceSimPlatformList(deviceSimPlatformList);
data.setDeviceSimMercList(deviceSimMercList);
return R.ok(data);
}
@PostMapping("paySimCardFee")
@ApiOperation("流量卡费用")
public R> paySimCardFee(@RequestBody @Validated MercFeeConfigAlgorithmTypeDto.SimPayQueryDTO dto) {
Long mercId = dto.getMercId();
MercDto.Vo merc = R.feignCheckData(mercService.obj(new MercDto.Vo().setId(mercId)));
String mercCode = merc.getMercCode();
List mercCodes = new ArrayList<>();
deviceAlgorithmChargingService.getMercCodes(mercCode, mercCodes);
//查询默认算法信息
//流量卡费-平台默认配置
Integer money = SysDictUtils.getValue(EnumSimConfig.Code.CODE.getCode(), EnumSimConfig.money.getCode(), Integer.class);
String name = SysDictUtils.getValue(EnumSimConfig.Code.CODE.getCode(), EnumSimConfig.name.getCode(), String.class);
//佣金配置查询
MercFeeConfigDto.FeeConfigByMercVO mercFeeConfig = R.feignCheckData(mercFeeConfigService.getFeeConfigByMerc(new MercFeeConfigDto.FeeConfigByMerc().setMercCode(merc.getMercCode())));
// 设备管理费-商家自定义费用
List deviceSimMercList = new ArrayList<>();
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(dto, MercFeeConfigSimCard.class)
.in(MercFeeConfigSimCard::getMercCode, mercCodes)
.build();
List list = list(lambdaQueryWrapper);
if (CollUtil.isNotEmpty(list)) {
for (MercFeeConfigSimCard cfg : list) {
MercFeeConfigSimCardDto.DeviceSimPayVO deviceSimMercVO = BeanUtil.copyProperties(cfg, MercFeeConfigSimCardDto.DeviceSimPayVO.class);
deviceSimMercVO.setName(name).setMoney(cfg.getExtraMoney() + mercFeeConfig.getFeeSimcard());
deviceSimMercList.add(deviceSimMercVO);
}
} else {
MercFeeConfigSimCardDto.DeviceSimPayVO deviceSimMercVO = new MercFeeConfigSimCardDto.DeviceSimPayVO();
deviceSimMercVO.setName(name).setMoney(money + mercFeeConfig.getFeeSimcard());
deviceSimMercList.add(deviceSimMercVO);
}
return R.ok(deviceSimMercList);
}
@Override
@ApiOperation("商户自定义流量卡费用")
public R> listByMerc(MercFeeConfigAlgorithmTypeDto.SimPayQueryDTO dto) {
Long mercId = dto.getMercId();
MercDto.Vo merc = R.feignCheckData(mercService.obj(new MercDto.Vo().setId(mercId)));
String mercCode = merc.getMercCode();
List mercCodes = new ArrayList<>();
deviceAlgorithmChargingService.getMercCodes(mercCode, mercCodes);
//查询默认算法信息
//流量卡费-平台默认配置
Integer money = SysDictUtils.getValue(EnumSimConfig.Code.CODE.getCode(), EnumSimConfig.money.getCode(), Integer.class);
String name = SysDictUtils.getValue(EnumSimConfig.Code.CODE.getCode(), EnumSimConfig.name.getCode(), String.class);
// 设备管理费-商家自定义费用
List deviceSimMercList = new ArrayList<>();
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(dto, MercFeeConfigSimCard.class)
.in(MercFeeConfigSimCard::getMercCode, mercCodes)
.build();
List list = list(lambdaQueryWrapper);
if (CollUtil.isNotEmpty(list)) {
for (MercFeeConfigSimCard cfg : list) {
MercFeeConfigSimCardDto.DeviceSimPayVO deviceSimMercVO = BeanUtil.copyProperties(cfg, MercFeeConfigSimCardDto.DeviceSimPayVO.class);
deviceSimMercVO.setName(name).setMoney(money + cfg.getExtraMoney());
deviceSimMercList.add(deviceSimMercVO);
}
}
return R.ok(deviceSimMercList);
}
@PostMapping("save")
@ApiOperation("添加")
public R save(@RequestBody @Validated MercFeeConfigSimCardDto.Save save) {
Long mercId = save.getMercId();
MercFeeConfigSimCard mc = this.getOne(Wrappers.lambdaQuery()
.eq(MercFeeConfigSimCard::getMercId, mercId)
);
if (mc != null) {
throw new CommRuntimeException("该类型配置已存在,请勿重复添加!");
}
MercFeeConfigSimCard saveInfo = copy(MercFeeConfigSimCard.class, save);
save(saveInfo);
return R.ok();
}
@PostMapping("update")
@ApiOperation("修改")
public R update(@RequestBody @Validated MercFeeConfigSimCardDto.Update update) {
MercFeeConfigSimCard updateInfo = copy(MercFeeConfigSimCard.class, update);
updateById(updateInfo);
return R.ok();
}
@PostMapping("delete")
@ApiOperation("删除")
public R delete(@RequestBody @Validated MercFeeConfigSimCardDto.Delete delete) {
removeById(delete.getId());
return R.ok();
}
}