Explorar el Código

Merge branch 'SIM卡'

hechunping hace 6 meses
padre
commit
660e102a49

+ 19 - 0
device-api-cloud/src/main/java/com/xy/feign/DeviceSimPickRecordsFeign.java

@@ -0,0 +1,19 @@
+package com.xy.feign;
+
+import com.xy.service.DeviceSimPickRecordsService;
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 物联网卡加油包记录 feign
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024-08-22
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface DeviceSimPickRecordsFeign extends DeviceSimPickRecordsService {
+
+}

+ 6 - 0
device-api-service/pom.xml

@@ -132,6 +132,12 @@
             <version>1.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.xy</groupId>
+            <artifactId>xy-sim</artifactId>
+            <version>1.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 80 - 0
device-api-service/src/main/java/com/xy/entity/DeviceSimPickRecords.java

@@ -0,0 +1,80 @@
+package com.xy.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 物联网卡加油包记录
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024-08-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceSimPickRecords对象", description="物联网卡加油包记录")
+public class DeviceSimPickRecords implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "设备ID")
+    private Long deviceId;
+
+    @ApiModelProperty(value = "商户ID")
+    private Long mercId;
+
+    @ApiModelProperty(value = "iccid")
+    private String iccid;
+
+    @ApiModelProperty(value = "运营商")
+    private String icp;
+
+    @ApiModelProperty(value = "加油包名称")
+    private String name;
+
+    @ApiModelProperty(value = "金额")
+    private Integer amount;
+
+    @ApiModelProperty(value = "加油包编号")
+    private String packCode;
+
+    @ApiModelProperty(value = "支付状态")
+    private String payStatus;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long updateUser;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+
+}

+ 16 - 0
device-api-service/src/main/java/com/xy/mapper/DeviceSimPickRecordsMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.xy.entity.DeviceSimPickRecords;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 物联网卡加油包记录 Mapper 接口
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024-08-22
+ */
+public interface DeviceSimPickRecordsMapper extends BaseMapper<DeviceSimPickRecords> {
+
+}

+ 22 - 0
device-api-service/src/main/java/com/xy/mapper/mapper/DeviceSimPickRecordsMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xy.mapper.DeviceSimPickRecordsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.xy.entity.DeviceSimPickRecords">
+        <result column="id" property="id" />
+        <result column="device_id" property="deviceId" />
+        <result column="merc_id" property="mercId" />
+        <result column="iccid" property="iccid" />
+        <result column="icp" property="icp" />
+        <result column="name" property="name" />
+        <result column="amount" property="amount" />
+        <result column="pack_code" property="packCode" />
+        <result column="status" property="status" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 84 - 0
device-api-service/src/main/java/com/xy/service/DeviceSimPickRecordsServiceImpl.java

@@ -0,0 +1,84 @@
+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.DeviceSimPickRecordsDto;
+import com.xy.entity.DeviceSimPickRecords;
+import com.xy.mapper.DeviceSimPickRecordsMapper;
+import com.xy.utils.Emptys;
+import com.xy.utils.MybatisPlusQuery;
+import com.xy.utils.PageBean;
+import com.xy.utils.R;
+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.List;
+
+import static com.xy.utils.Beans.copy;
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+
+/**
+* <p>
+* 物联网卡加油包记录 服务实现类
+* </p>
+*
+* @author hechunping
+* @since 2024-08-22
+*/
+@Service
+@AllArgsConstructor
+@Api(tags = "物联网卡加油包记录")
+public class DeviceSimPickRecordsServiceImpl extends ServiceImpl<DeviceSimPickRecordsMapper, DeviceSimPickRecords> implements DeviceSimPickRecordsService {
+
+    @PostMapping("obj")
+    @ApiOperation("对象查询")
+    public R<DeviceSimPickRecordsDto.Vo> obj(@RequestBody DeviceSimPickRecordsDto.Vo vo) {
+        DeviceSimPickRecordsDto.SelectList selectList = copy(DeviceSimPickRecordsDto.SelectList.class, vo);
+        List<DeviceSimPickRecordsDto.Vo> list = list(selectList).getData();
+        if(Emptys.check(list)) {
+            return R.ok(list.get(0));
+        }
+        return R.ok();
+    }
+
+    @PostMapping("list")
+    @ApiOperation("集合查询")
+    public R<List<DeviceSimPickRecordsDto.Vo>> list(@RequestBody DeviceSimPickRecordsDto.SelectList selectList) {
+        LambdaQueryWrapper<DeviceSimPickRecords> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, DeviceSimPickRecords.class).build();
+        List<DeviceSimPickRecords> list = list(lambdaQueryWrapper);
+        return R.ok(copy(DeviceSimPickRecordsDto.Vo.class, list));
+    }
+
+    @PostMapping("page")
+    @ApiOperation("分页查询")
+    public R<PageBean<DeviceSimPickRecordsDto.Vo>> page(@RequestBody DeviceSimPickRecordsDto.Page page) {
+        PageBean pageBean = page.getPage();
+        LambdaQueryWrapper<DeviceSimPickRecords> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceSimPickRecords.class).build();
+        IPage<DeviceSimPickRecords> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
+        return R.ok(toPageBean(DeviceSimPickRecordsDto.Vo.class, iPage));
+    }
+
+    @PostMapping("save")
+    @ApiOperation("添加")
+    public R save(@RequestBody @Validated DeviceSimPickRecordsDto.Save save) {
+        DeviceSimPickRecords saveInfo = copy(DeviceSimPickRecords.class, save);
+        save(saveInfo);
+        return R.ok();
+    }
+
+    @PostMapping("update")
+    @ApiOperation("修改")
+    public R update(@RequestBody @Validated DeviceSimPickRecordsDto.Update update) {
+        DeviceSimPickRecords updateInfo = copy(DeviceSimPickRecords.class, update);
+        updateById(updateInfo);
+        return R.ok();
+    }
+}

+ 59 - 0
device-api-service/src/main/java/com/xy/service/SimInfoServiceImpl.java

@@ -0,0 +1,59 @@
+package com.xy.service;
+
+import com.xy.dto.SimInfoDto;
+import com.xy.service.factory.sim.SimInfoFactory;
+import com.xy.utils.FactoryUtils;
+import com.xy.utils.R;
+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.RequestBody;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 物联网卡服务
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024/8/20
+ */
+@Service
+@AllArgsConstructor
+@Api(tags = "物联网卡服务")
+public class SimInfoServiceImpl implements SimInfoService {
+
+    @Override
+    @ApiOperation("物联网卡信息")
+    public R<SimInfoDto.InfoVo> info(@RequestBody @Validated SimInfoDto.BaseDto dto) {
+        return FactoryUtils.getServiceRoute(SimInfoFactory.class, dto.getIsp()).info(dto);
+    }
+
+    @Override
+    @ApiOperation("刷新网络")
+    public R<String> refreshNet(@RequestBody @Validated SimInfoDto.RefreshNetDto dto) {
+        return FactoryUtils.getServiceRoute(SimInfoFactory.class,dto.getIsp()).refreshNet(dto);
+    }
+
+    @Override
+    @ApiOperation("机卡重绑")
+    public R<String> bindAgain(@RequestBody @Validated SimInfoDto.BindAgainDto dto) {
+        return FactoryUtils.getServiceRoute(SimInfoFactory.class,dto.getIsp()).bindAgain(dto);
+    }
+
+    @Override
+    @ApiOperation("加油包列表")
+    public R<List<SimInfoDto.PackListVo>> packList(@RequestBody @Validated SimInfoDto.BaseDto dto) {
+        return FactoryUtils.getServiceRoute(SimInfoFactory.class,dto.getIsp()).packList();
+    }
+
+    @Override
+    @ApiOperation("购买加油包")
+    public R<String> buyPack(@RequestBody @Validated SimInfoDto.BuyPackDto dto)  {
+        return FactoryUtils.getServiceRoute(SimInfoFactory.class,dto.getIsp()).buyPack(dto);
+    }
+
+}

+ 52 - 0
device-api-service/src/main/java/com/xy/service/factory/sim/SimInfoFactory.java

@@ -0,0 +1,52 @@
+package com.xy.service.factory.sim;
+
+import com.xy.dto.SimInfoDto;
+import com.xy.utils.R;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Sim物联网卡接口
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024/8/20
+ */
+public interface SimInfoFactory {
+    /**
+     * 卡状态查询
+     * @param dto
+     * @return
+     */
+    R<SimInfoDto.InfoVo> info(SimInfoDto.BaseDto dto);
+
+
+    /**
+     * 刷新网络 断开、恢复
+     * @param dto
+     * @return
+     */
+    R<String> refreshNet(SimInfoDto.RefreshNetDto dto);
+
+    /**
+     * 机卡重绑
+     * @param dto
+     * @return
+     */
+    R<String> bindAgain(SimInfoDto.BindAgainDto dto);
+
+
+    /**
+     * 购买加油包
+     * @param dto
+     * @return
+     */
+    R<String> buyPack(SimInfoDto.BuyPackDto dto);
+
+    /**
+     * 加油包列表
+     * @return
+     */
+    R<List<SimInfoDto.PackListVo>> packList();
+}

+ 204 - 0
device-api-service/src/main/java/com/xy/service/factory/sim/impl/CtWingFactoryImpl.java

@@ -0,0 +1,204 @@
+package com.xy.service.factory.sim.impl;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.xy.Enum.ctwing.BindTypeEnum;
+import com.xy.annotate.Factory;
+import com.xy.config.DeviceThreadPoolConfig;
+import com.xy.dto.CtWingDto;
+import com.xy.dto.CtWingVo;
+import com.xy.dto.DeviceSimPickRecordsDto;
+import com.xy.dto.SimInfoDto;
+import com.xy.entity.DeviceInfo;
+import com.xy.entity.SysDictRedis;
+import com.xy.service.DeviceInfoServiceImpl;
+import com.xy.service.DeviceSimPickRecordsServiceImpl;
+import com.xy.service.factory.sim.SimInfoFactory;
+import com.xy.utils.*;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 电信
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024/8/20
+ */
+@Slf4j
+@Factory(type = "电信")
+@AllArgsConstructor
+public class CtWingFactoryImpl implements SimInfoFactory {
+    private final DeviceSimPickRecordsServiceImpl simPickRecordsService;
+
+    private final DeviceInfoServiceImpl deviceInfoService;
+
+    /**
+     * 三码查询
+     *
+     * @param iccid
+     * @return
+     */
+    @SneakyThrows
+    private CtWingVo.TelephonePlusVo telephonePlus(String iccid) {
+        CtWingDto.TelephonePlusDto telephonePlusDto = new CtWingDto.TelephonePlusDto();
+        telephonePlusDto.setIccid(iccid);
+        CtWingVo.TelephonePlusVo vo = CtWingUtils.getTelephonePlus(telephonePlusDto);
+        return vo;
+    }
+
+
+    @Override
+    @SneakyThrows
+    public R<SimInfoDto.InfoVo> info(SimInfoDto.BaseDto dto) {
+        //三码查询
+        CtWingVo.TelephonePlusVo telephonePlusVo = telephonePlus(dto.getIccid());
+        if (!"0".equals(telephonePlusVo.getResultCode())) {
+            return R.fail("三码查询错误!");
+        }
+        SimInfoDto.InfoVo vo = new SimInfoDto.InfoVo();
+        vo.setIccid(telephonePlusVo.getIccid())
+                .setImsi(telephonePlusVo.getImsi())
+                .setAccessNumber(telephonePlusVo.getAccessNumber());
+        //卡主状态查询
+        FunctionUtils.NoParamsNoResult queryCardMainStatus = () -> {
+            CtWingDto.CardMainStatusDto cardMainStatusDto = new CtWingDto.CardMainStatusDto();
+            cardMainStatusDto.setAccessNumber(telephonePlusVo.getAccessNumber());
+            CtWingVo.CardMainStatusVo cardMainStatusVo = CtWingUtils.queryCardMainStatus(cardMainStatusDto);
+            vo.setCreateDate(cardMainStatusVo.getServCreateDate())
+                    .setActiveDate(cardMainStatusVo.getServActiveDate())
+                    .setNetBlockStatus(cardMainStatusVo.getNetBlockStatusName())
+                    .setSimStatus(cardMainStatusVo.getOperatorDefinitionStatusName());
+        };
+        //在线状态
+        FunctionUtils.NoParamsNoResult qryOnlineStatus = () -> {
+            CtWingDto.AccessNumberOrIccid accessNumberOrIccid = new CtWingDto.AccessNumberOrIccid().setIccid(telephonePlusVo.getIccid());
+            CtWingVo.OnlineStatusVo onlineStatusVo = CtWingUtils.qryOnlineStatus(accessNumberOrIccid);
+            vo.setImei(onlineStatusVo.getImei())
+                    .setProvince(onlineStatusVo.getProvince())
+                    .setOnlineStatus(onlineStatusVo.getOnlineStatusDesc())
+                    .setOnlineStartTime(onlineStatusVo.getStartTime())
+                    .setOnlineEndTime(onlineStatusVo.getEndTime())
+            ;
+        };
+        //当月流量使用总量
+        FunctionUtils.NoParamsNoResult queryTraffic = () -> {
+            CtWingDto.AccessNumberOrIccid accessNumberOrIccid = new CtWingDto.AccessNumberOrIccid().setIccid(telephonePlusVo.getIccid());
+            CtWingVo.TrafficVo trafficVo = CtWingUtils.queryTraffic(accessNumberOrIccid);
+            vo.setCurrMonthUseFlow(trafficVo.getTotalBytesCnt());
+        };
+        ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.DEVICE_COMMON_POLL, 3)
+                .execute(() -> {
+                    queryCardMainStatus.run();
+                })
+                .execute(() -> {
+                    qryOnlineStatus.run();
+                })
+                .execute(() -> {
+                    queryTraffic.run();
+                }).end();
+        return R.ok(vo);
+    }
+
+    @Override
+    @SneakyThrows
+    public R<String> refreshNet(SimInfoDto.RefreshNetDto dto) {
+        //三码查询
+        CtWingVo.TelephonePlusVo telephonePlusVo = telephonePlus(dto.getIccid());
+        if (!"0".equals(telephonePlusVo.getResultCode())) {
+            return R.fail("三码查询错误!");
+        }
+        String action = dto.getAction() ? "ADD" : "DEL";
+        CtWingDto.SingleCutNetDto singleCutNetDto = new CtWingDto.SingleCutNetDto()
+                .setAccessNumber(telephonePlusVo.getAccessNumber())
+                .setAction(action);
+        CtWingVo.BaseVo baseVo = CtWingUtils.singleCutNet(singleCutNetDto);
+        log.info("刷新网络,参数 {},操作人:{}",JSONUtil.toJsonStr(singleCutNetDto),AuthorizeUtils.getLoginId(Long.class));
+        if ("0".equals(baseVo.getResultCode())) {
+            log.info("刷新网络成功 {}",dto.getIccid());
+            return R.ok("处理成功!");
+        } else {
+            log.info("刷新网络失败 {},错误描述 {}",dto.getIccid(),baseVo.getResultMsg());
+            return R.fail(baseVo.getResultMsg());
+        }
+    }
+
+    @Override
+    @SneakyThrows
+    public R<String> bindAgain(SimInfoDto.BindAgainDto dto) {
+        CtWingDto.ImeiReRecordDto imeiReRecordDto = new CtWingDto.ImeiReRecordDto();
+        imeiReRecordDto.setBindType(BindTypeEnum.T_1.getCode()).setImei(dto.getImei()).setIccid(dto.getIccid());
+        CtWingVo.BaseVo baseVo = CtWingUtils.imeiReRecord(imeiReRecordDto);
+        log.info("机卡绑定,参数 {},操作人:{}",JSONUtil.toJsonStr(imeiReRecordDto),AuthorizeUtils.getLoginId(Long.class));
+        if ("0".equals(baseVo.getResultCode())) {
+            log.info("机卡绑定成功 {}",dto.getIccid());
+            return R.ok("处理成功!");
+        } else {
+            log.info("机卡绑定失败 {},错误描述 {}",dto.getIccid(),baseVo.getResultMsg());
+            return R.fail(baseVo.getResultMsg());
+        }
+    }
+
+    @Override
+    @SneakyThrows
+    public R<String> buyPack(SimInfoDto.BuyPackDto dto) {
+        //查询设备
+        DeviceInfo deviceInfo = deviceInfoService.getById(dto.getDeviceId());
+        //查询字典
+        SysDictRedis sysDictRedis = SysDictUtils.get("sim-packs-ctwing", dto.getPackCode());
+        JSONObject jsonObject = JSONUtil.parseObj(sysDictRedis.getValue());
+        String name = jsonObject.getStr("name");
+        String icp = jsonObject.getStr("icp");
+        Integer money = jsonObject.getInt("money");
+
+        CtWingDto.OrderRFPFlowDto orderRFPFlowDto = new CtWingDto.OrderRFPFlowDto();
+        orderRFPFlowDto.setFlowValue(dto.getPackCode()).setIccid(dto.getIccid());
+        CtWingVo.BaseVo baseVo = CtWingUtils.orderRFPFlow(orderRFPFlowDto);
+        if ("0".equals(baseVo.getResultCode())) {
+            //保存记录
+            DeviceSimPickRecordsDto.Save recordsDto = new DeviceSimPickRecordsDto.Save()
+                    .setPackCode(dto.getPackCode())
+                    .setIcp(dto.getIsp())
+                    .setIccid(dto.getIccid())
+                    .setName(name)
+                    .setAmount(money)
+                    .setDeviceId(dto.getDeviceId())
+                    .setMercId(deviceInfo.getMercId());
+            simPickRecordsService.save(recordsDto);
+            return R.ok("订购成功!");
+        } else {
+            return R.fail(baseVo.getResultMsg());
+        }
+    }
+
+    @Override
+    public R<List<SimInfoDto.PackListVo>> packList() {
+        Map<String, SysDictRedis> dict = SysDictUtils.get("sim-packs-ctwing");
+        List<SimInfoDto.PackListVo> voList = new ArrayList<>();
+        if (Emptys.check(dict)) {
+            dict.forEach((k, v) -> {
+                JSONObject jsonObject = JSONUtil.parseObj(v.getValue());
+                String name = jsonObject.get("name").toString();
+                String icp = jsonObject.get("icp").toString();
+                Integer money = Integer.valueOf(jsonObject.get("money").toString());
+                SimInfoDto.PackListVo vo = new SimInfoDto.PackListVo()
+                        .setPackCode(v.getCode())
+                        .setDesc(v.getMsg())
+                        .setName(name)
+                        .setIcp(icp)
+                        .setMoney(money);
+                voList.add(vo);
+            });
+        }
+
+        return R.ok(voList);
+    }
+
+
+}

+ 35 - 0
device-api-service/src/main/java/com/xy/service/factory/sim/impl/SimInfoFactoryRoute.java

@@ -0,0 +1,35 @@
+package com.xy.service.factory.sim.impl;
+
+import com.xy.annotate.FactoryRoute;
+import com.xy.error.CommRuntimeException;
+import com.xy.service.factory.sim.SimInfoFactory;
+import com.xy.utils.FactoryUtils;
+import lombok.AllArgsConstructor;
+
+/**
+ * <p>
+ * Sim物联网卡工厂路由
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024/8/20
+ */
+@AllArgsConstructor
+@FactoryRoute(interfaceClass = SimInfoFactory.class)
+public class SimInfoFactoryRoute implements FactoryUtils.RouteService {
+
+    @Override
+    public String route(Object object) {
+        String isp = String.valueOf(object).trim();
+        String route = "";
+        switch (isp) {
+            case "电信":
+            case "中国电信":
+                route = "电信";
+                break;
+            default:
+                throw new CommRuntimeException("接口不支持!");
+        }
+        return route;
+    }
+}

+ 122 - 0
device-api/src/main/java/com/xy/dto/DeviceSimPickRecordsDto.java

@@ -0,0 +1,122 @@
+package com.xy.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xy.utils.PageBean;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 物联网卡加油包记录
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024-08-22
+ */
+public class DeviceSimPickRecordsDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class SelectList extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Page extends Vo {
+
+        @ApiModelProperty(value = "分页对象", required = true)
+        private PageBean page;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Save {
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "iccid")
+        private String iccid;
+
+        @ApiModelProperty(value = "运营商")
+        private String icp;
+
+        @ApiModelProperty(value = "加油包名称")
+        private String name;
+
+        @ApiModelProperty(value = "金额")
+        private Integer amount;
+
+        @ApiModelProperty(value = "加油包编号")
+        private String packCode;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Update {
+        @ApiModelProperty(value = "支付状态")
+        private String payStatus;
+
+        @ApiModelProperty(value = "备注")
+        private String remark;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty(value = "ID")
+        private Long id;
+
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "iccid")
+        private String iccid;
+
+        @ApiModelProperty(value = "运营商")
+        private String icp;
+
+        @ApiModelProperty(value = "加油包名称")
+        private String name;
+
+        @ApiModelProperty(value = "金额")
+        private Integer amount;
+
+        @ApiModelProperty(value = "加油包编号")
+        private String packCode;
+
+        @ApiModelProperty(value = "支付状态")
+        private String payStatus;
+
+        @ApiModelProperty(value = "创建人")
+        private Long createUser;
+
+        @ApiModelProperty(value = "创建时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime createTime;
+
+        @ApiModelProperty(value = "更新人")
+        private Long updateUser;
+
+        @ApiModelProperty(value = "更新时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime updateTime;
+
+        @ApiModelProperty(value = "备注")
+        private String remark;
+
+    }
+
+}

+ 125 - 0
device-api/src/main/java/com/xy/dto/SimInfoDto.java

@@ -0,0 +1,125 @@
+package com.xy.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+
+public class SimInfoDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class BaseDto {
+        @NotBlank(message = "iccid 不能为空")
+        @ApiModelProperty(value = "iccid", required = true)
+        private String iccid;
+
+        @ApiModelProperty(value = "运营商")
+        private String isp;
+
+        public String getIccid() {
+            if (iccid.length() > 20) {
+                iccid = iccid.substring(0, 20);
+            }
+            return iccid;
+        }
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class InfoVo {
+        @ApiModelProperty("iccid")
+        private String iccid;
+
+        @ApiModelProperty("imsi")
+        private String imsi;
+
+        @ApiModelProperty("号码")
+        private String accessNumber;
+
+        @ApiModelProperty("激活时间")
+        private String activeDate;
+
+        @ApiModelProperty("开卡时间")
+        private String createDate;
+
+        @ApiModelProperty("断网状态")
+        private String netBlockStatus;
+
+        @ApiModelProperty("卡状态")
+        private String simStatus;
+
+        @ApiModelProperty("在线状态")
+        private String onlineStatus;
+
+        @ApiModelProperty("省份名称")
+        private String province;
+
+        @ApiModelProperty("imei")
+        private String imei;
+
+
+        @ApiModelProperty("最近一次上线时间")
+        private String onlineStartTime;
+
+        @ApiModelProperty("最近一次下线时间")
+        private String onlineEndTime;
+        //流量套餐,使用情况
+
+        @ApiModelProperty("当月流量使用总量")
+        private String currMonthUseFlow;
+
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class RefreshNetDto extends BaseDto {
+
+        @NotNull(message = "操作 不能为空")
+        @ApiModelProperty(value = "操作 true为联网,false为断网", required = true)
+        private Boolean action;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class BindAgainDto extends BaseDto {
+        @ApiModelProperty("设备码")
+        private String imei;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class BuyPackDto extends BaseDto {
+        @NotBlank(message = "订购包CODE 不能为空")
+        @ApiModelProperty(value = "订购包CODE", required = true)
+        private String packCode;
+
+        @NotBlank(message = "订购包CODE 不能为空")
+        @ApiModelProperty(value = "设备ID", required = true)
+        private Long deviceId;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class PackListVo {
+        @ApiModelProperty(value = "订购包CODE")
+        private String packCode;
+
+        @ApiModelProperty(value = "描述")
+        private String desc;
+
+        @ApiModelProperty(value = "名称")
+        private String name;
+
+        @ApiModelProperty(value = "运营商")
+        private String icp;
+
+        @ApiModelProperty(value = "金额")
+        private Integer money;
+    }
+
+}

+ 16 - 0
device-api/src/main/java/com/xy/service/DeviceSimPickRecordsService.java

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 物联网卡加油包记录 服务类
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024-08-22
+ */
+@RestMappingController("/device-sim-pick-records")
+public interface DeviceSimPickRecordsService {
+
+}

+ 36 - 0
device-api/src/main/java/com/xy/service/SimInfoService.java

@@ -0,0 +1,36 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.SimInfoDto;
+import com.xy.utils.R;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 物联网卡服务接口
+ * </p>
+ *
+ * @author hechunping
+ * @since 2024/8/20
+ */
+@RestMappingController("sim-info")
+public interface SimInfoService {
+    @PostMapping("info")
+    R<SimInfoDto.InfoVo> info(@RequestBody @Validated SimInfoDto.BaseDto dto);
+
+    @PostMapping("refreshNet")
+    R<String> refreshNet(@RequestBody @Validated SimInfoDto.RefreshNetDto dto);
+
+    @PostMapping("bindAgain")
+    R<String> bindAgain(@RequestBody @Validated SimInfoDto.BindAgainDto dto);
+
+    @PostMapping("packList")
+    R<List<SimInfoDto.PackListVo>> packList(@RequestBody @Validated SimInfoDto.BaseDto dto);
+
+    @PostMapping("buyPack")
+    R<String> buyPack(@RequestBody @Validated SimInfoDto.BuyPackDto dto);
+}

+ 1 - 1
device-start/src/main/resources/bootstrap.yml

@@ -10,7 +10,7 @@ cloud:
   center:
     url: 119.96.213.127:9007
     config:
-      shared-configs: redis.yaml,mysql.yaml,xxl-job.yaml,algorithm.yaml,xy-oss.yaml,alipay.yaml,cloudwalk.yaml,magic-api.yaml,knife4j.yaml,tyai.yaml
+      shared-configs: redis.yaml,mysql.yaml,xxl-job.yaml,algorithm.yaml,xy-oss.yaml,alipay.yaml,cloudwalk.yaml,magic-api.yaml,knife4j.yaml,tyai.yaml,sim-api.yaml
       name: device
   service:
     name: dev-device