lijin 2 nedēļas atpakaļ
vecāks
revīzija
db55276c86

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

@@ -0,0 +1,19 @@
+package com.xy.feign;
+
+import com.xy.service.DeviceAnnualFeeService;
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 设备年费表 feign
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface DeviceAnnualFeeFeign extends DeviceAnnualFeeService {
+
+}

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

@@ -0,0 +1,19 @@
+package com.xy.feign;
+
+import com.xy.service.DeviceAnnualFeeOrdersService;
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 设备年费订单表 feign
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface DeviceAnnualFeeOrdersFeign extends DeviceAnnualFeeOrdersService {
+
+}

+ 45 - 0
device-api-service/src/main/java/com/xy/entity/DeviceAnnualFee.java

@@ -0,0 +1,45 @@
+package com.xy.entity;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+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;
+
+/**
+ * <p>
+ * 设备年费表
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceAnnualFee对象", description="设备年费表")
+public class DeviceAnnualFee implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId
+    private Long id;
+
+    @ApiModelProperty(value = "商户id")
+    private Long mercId;
+
+    @ApiModelProperty(value = "设备id")
+    private Long deviceId;
+
+    @ApiModelProperty(value = "过期时间")
+    private LocalDateTime timeout;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+
+}

+ 57 - 0
device-api-service/src/main/java/com/xy/entity/DeviceAnnualFeeOrders.java

@@ -0,0 +1,57 @@
+package com.xy.entity;
+
+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 lijin
+ * @since 2025-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "DeviceAnnualFeeOrders对象", description = "设备年费订单表")
+public class DeviceAnnualFeeOrders implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId
+    private Long id;
+
+    @ApiModelProperty(value = "订单id")
+    private String ordersId;
+
+    @ApiModelProperty(value = "商户id")
+    private Long mercId;
+
+    @ApiModelProperty(value = "设备id")
+    private Long deviceId;
+
+    @ApiModelProperty(value = "购买年数")
+    private Integer size;
+
+    @ApiModelProperty(value = "金额")
+    private Integer money;
+
+    @ApiModelProperty(value = "支付状态")
+    private Boolean status;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+
+}

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

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.xy.entity.DeviceAnnualFee;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 设备年费表 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+public interface DeviceAnnualFeeMapper extends BaseMapper<DeviceAnnualFee> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.xy.entity.DeviceAnnualFeeOrders;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 设备年费订单表 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+public interface DeviceAnnualFeeOrdersMapper extends BaseMapper<DeviceAnnualFeeOrders> {
+
+}

+ 14 - 0
device-api-service/src/main/java/com/xy/mapper/mapper/DeviceAnnualFeeMapper.xml

@@ -0,0 +1,14 @@
+<?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.DeviceAnnualFeeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.xy.entity.DeviceAnnualFee">
+        <id column="id" property="id" />
+        <result column="merc_id" property="mercId" />
+        <result column="device_id" property="deviceId" />
+        <result column="timeout" property="timeout" />
+        <result column="create_time" property="createTime" />
+    </resultMap>
+
+</mapper>

+ 18 - 0
device-api-service/src/main/java/com/xy/mapper/mapper/DeviceAnnualFeeOrdersMapper.xml

@@ -0,0 +1,18 @@
+<?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.DeviceAnnualFeeOrdersMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.xy.entity.DeviceAnnualFeeOrders">
+        <id column="id" property="id" />
+        <result column="orders_id" property="ordersId" />
+        <result column="merc_id" property="mercId" />
+        <result column="device_id" property="deviceId" />
+        <result column="size" property="size" />
+        <result column="money" property="money" />
+        <result column="status" property="status" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 68 - 0
device-api-service/src/main/java/com/xy/service/DeviceAnnualFeeOrdersServiceImpl.java

@@ -0,0 +1,68 @@
+package com.xy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yitter.idgen.YitIdHelper;
+import com.xy.dto.DeviceAnnualFeeOrdersDto;
+import com.xy.entity.DeviceAnnualFee;
+import com.xy.entity.DeviceAnnualFeeOrders;
+import com.xy.mapper.DeviceAnnualFeeOrdersMapper;
+import com.xy.utils.Beans;
+import com.xy.utils.DataTime;
+import com.xy.utils.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+
+/**
+ * <p>
+ * 设备年费订单表 服务实现类
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+@Service
+@AllArgsConstructor
+@Api(tags = "设备年费订单表")
+public class DeviceAnnualFeeOrdersServiceImpl extends ServiceImpl<DeviceAnnualFeeOrdersMapper, DeviceAnnualFeeOrders> implements DeviceAnnualFeeOrdersService {
+
+    private DeviceAnnualFeeServiceImpl deviceAnnualFeeService;
+
+    @Override
+    @ApiOperation("购买")
+    public R pay(DeviceAnnualFeeOrdersDto.Pay pay) {
+        LocalDateTime now = LocalDateTime.now();
+        DeviceAnnualFeeOrders deviceAnnualFeeOrders = Beans.copy(DeviceAnnualFeeOrders.class, pay)
+                .setId(YitIdHelper.nextId())
+                .setCreateTime(now)
+                .setUpdateTime(now);
+        save(deviceAnnualFeeOrders);
+        return R.ok();
+    }
+
+    @Override
+    @ApiOperation("购买回调")
+    public R payNotice(DeviceAnnualFeeOrdersDto.PayNotice payNotice) {
+        DeviceAnnualFeeOrders deviceAnnualFeeOrders = getOne(new LambdaQueryWrapper<DeviceAnnualFeeOrders>()
+                .eq(DeviceAnnualFeeOrders::getOrdersId, payNotice.getOrderId())
+        );
+        if (deviceAnnualFeeOrders == null) {
+            return R.ok();
+        }
+        DeviceAnnualFee deviceAnnualFee = deviceAnnualFeeService.getOne(new LambdaQueryWrapper<DeviceAnnualFee>()
+                .eq(DeviceAnnualFee::getMercId, deviceAnnualFeeOrders.getMercId())
+                .eq(DeviceAnnualFee::getDeviceId, deviceAnnualFeeOrders.getDeviceId())
+        );
+        String timeout = DataTime.getStringAround(deviceAnnualFeeOrders.getSize(), 0, 0, 0, 0, 0, DataTime.toString(deviceAnnualFee.getTimeout()));
+        deviceAnnualFee.setTimeout(DataTime.toLocal(timeout));
+        deviceAnnualFeeService.updateById(deviceAnnualFee);
+        deviceAnnualFeeOrders.setStatus(true).setUpdateTime(LocalDateTime.now());
+        updateById(deviceAnnualFeeOrders);
+        return R.ok();
+    }
+}

+ 72 - 0
device-api-service/src/main/java/com/xy/service/DeviceAnnualFeeServiceImpl.java

@@ -0,0 +1,72 @@
+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.DeviceAnnualFeeDto;
+import com.xy.entity.DeviceAnnualFee;
+import com.xy.mapper.DeviceAnnualFeeMapper;
+import com.xy.utils.MercAuthUtils;
+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.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.time.LocalDateTime;
+
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+
+/**
+ * <p>
+ * 设备年费表 服务实现类
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+@Service
+@AllArgsConstructor
+@Api(tags = "设备年费表")
+public class DeviceAnnualFeeServiceImpl extends ServiceImpl<DeviceAnnualFeeMapper, DeviceAnnualFee> implements DeviceAnnualFeeService {
+
+    @PostMapping("check")
+    @ApiOperation("检查")
+    public R check(@RequestBody DeviceAnnualFeeDto.Check check) {
+        long count = count(new LambdaQueryWrapper<DeviceAnnualFee>()
+                .eq(DeviceAnnualFee::getDeviceId, check.getDeviceId())
+                .ge(DeviceAnnualFee::getTimeout, LocalDateTime.now())
+        );
+        if (count == 0) {
+            return R.fail("已欠费");
+        }
+        return R.ok();
+    }
+
+    @PostMapping("page")
+    @ApiOperation("分页查询")
+    public R<PageBean<DeviceAnnualFeeDto.Vo>> page(@RequestBody DeviceAnnualFeeDto.Page page) {
+        PageBean pageBean = page.getPage();
+        LambdaQueryWrapper<DeviceAnnualFee> lambdaQueryWrapper = new MybatisPlusQuery()
+                .eqWrapper(page, DeviceAnnualFee.class)
+                .ge(DeviceAnnualFee::getTimeout, page.getBeginTime())
+                .le(DeviceAnnualFee::getTimeout, page.getEndTime())
+                .build();
+        IPage<DeviceAnnualFee> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
+        return R.ok(toPageBean(DeviceAnnualFeeDto.Vo.class, iPage));
+    }
+
+    @PostMapping("mercPage")
+    @ApiOperation("商家分页查询")
+    public R<PageBean<DeviceAnnualFeeDto.Vo>> mercPage(@RequestBody DeviceAnnualFeeDto.Page page) {
+        page.setMercId(MercAuthUtils.getMercId());
+        return page(page);
+    }
+
+}

+ 38 - 4
device-api-service/src/main/java/com/xy/service/DeviceInfoServiceImpl.java

@@ -19,8 +19,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yitter.idgen.YitIdHelper;
 import com.xy.collections.list.JArrayList;
 import com.xy.collections.list.JList;
+import com.xy.collections.map.JHashMap;
 import com.xy.collections.map.JMap;
 import com.xy.config.DeviceThreadPoolConfig;
 import com.xy.consts.DictConsts;
@@ -53,7 +55,6 @@ import io.swagger.annotations.ApiOperation;
 import jodd.introspector.MapperFunction;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -130,6 +131,8 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
 
     private final DeviceCreateIdsServiceImpl deviceCreateIdsService;
 
+    private final DeviceAnnualFeeServiceImpl deviceAnnualFeeService;
+
 
     @Override
     @ApiOperation("设备列表-管理员")
@@ -903,6 +906,34 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
                 }
             }
         };
+        //新增设备年费
+        FunctionUtils.ParamsNoResult<List<DeviceInfo>> deviceAnnualFee = deviceInfos -> {
+            Map<String, SysDictRedis> stringSysDictRedisMap = SysDictUtils.get("merc_device_annual_fee");
+            if (stringSysDictRedisMap.isEmpty()) {
+                return;
+            }
+            JList<String> mercIds = new JHashMap<>(stringSysDictRedisMap).getValues().getProperty(SysDictRedis::getCode);
+            if (!mercIds.contains(String.valueOf(auth.getMercId()))) {
+                return;
+            }
+            LocalDateTime now = LocalDateTime.now();
+            deviceInfos.forEach(deviceInfo -> {
+                long count = deviceAnnualFeeService.count(new LambdaQueryWrapper<DeviceAnnualFee>()
+                        .eq(DeviceAnnualFee::getDeviceId, deviceInfo.getDeviceId())
+                        .eq(DeviceAnnualFee::getMercId, auth.getMercId())
+                );
+                if (count > 0) {
+                    return;
+                }
+                deviceAnnualFeeService.save(new DeviceAnnualFee()
+                        .setId(YitIdHelper.nextId())
+                        .setMercId(auth.getMercId())
+                        .setDeviceId(deviceInfo.getDeviceId())
+                        .setTimeout(now)
+                        .setCreateTime(now)
+                );
+            });
+        };
         check.run();
         Long mercId = auth.getMercId();
         String mercCode = auth.getMercCode();
@@ -992,6 +1023,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
         if (Emptys.check(deviceStatuses)) {
             deviceStatusService.updateBatchById(deviceStatuses);
         }
+        deviceAnnualFee.run(deviceInfos);
         return R.ok(Boolean.TRUE);
     }
 
@@ -1928,6 +1960,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
 
     /**
      * 设备统计PC端
+     *
      * @param page
      * @return
      */
@@ -1935,7 +1968,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
         DeviceInfoDto.PageCount count = new DeviceInfoDto.PageCount().setActiveNum(0).setOffLineNum(0).setTotal(0).setOnlineNum(0).setNoActiveNum(0);
 
         List<Long> myDeviceIds = page.getMyDeviceIds();
-        if(CollUtil.isEmpty(myDeviceIds)){
+        if (CollUtil.isEmpty(myDeviceIds)) {
             return count;
         }
         List<DeviceStatus> deviceStatuses = deviceStatusService.listByIds(page.getMyDeviceIds());
@@ -1956,10 +1989,11 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
                 .filter(device -> device.getActiveState() == 2)
                 .count();
         count.setNoActiveNum(unActiveNum.intValue());
-        count.setActiveNum(total-unActiveNum.intValue());
+        count.setActiveNum(total - unActiveNum.intValue());
         count.setTotal(total);
-        return  count;
+        return count;
     }
+
     public PageBean<DeviceInfoDto.Vo2> queryPage(DeviceInfoDto.Page page) {
         IPage<DeviceInfoQueryPage> iPage = baseMapper.queryPage(toIPage(page.getPage()), page);
         PageBean<DeviceInfoDto.Vo2> pageBean = toPageBean(DeviceInfoDto.Vo2.class, iPage);

+ 75 - 0
device-api/src/main/java/com/xy/dto/DeviceAnnualFeeDto.java

@@ -0,0 +1,75 @@
+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 javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 设备年费表
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+public class DeviceAnnualFeeDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class Check {
+
+        @NotNull(message = "deviceId不能为空")
+        @ApiModelProperty(value = "设备id", required = true)
+        private Long deviceId;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Page {
+
+        @ApiModelProperty(value = "分页对象", required = true)
+        private PageBean page;
+
+        @ApiModelProperty(value = "商户id")
+        private Long mercId;
+
+        @ApiModelProperty(value = "设备id")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "开始时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime beginTime;
+
+        @ApiModelProperty(value = "结束时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime endTime;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        private Long id;
+
+        @ApiModelProperty(value = "商户id")
+        private Long mercId;
+
+        @ApiModelProperty(value = "设备id")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "过期时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime timeout;
+
+        @ApiModelProperty(value = "创建时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime createTime;
+
+    }
+
+}

+ 96 - 0
device-api/src/main/java/com/xy/dto/DeviceAnnualFeeOrdersDto.java

@@ -0,0 +1,96 @@
+package com.xy.dto;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import com.xy.utils.PageBean;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 设备年费订单表
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+public class DeviceAnnualFeeOrdersDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class Pay {
+
+        @NotBlank(message = "orderId不能为空")
+        @ApiModelProperty("订单号")
+        private String orderId;
+
+        @NotNull(message = "mercId不能为空")
+        @ApiModelProperty(value = "商户id")
+        private Long mercId;
+
+        @NotNull(message = "deviceId不能为空")
+        @ApiModelProperty(value = "设备id")
+        private Long deviceId;
+
+        @NotNull(message = "size不能为空")
+        @ApiModelProperty(value = "购买年数")
+        private Integer size;
+
+        @NotNull(message = "money不能为空")
+        @ApiModelProperty(value = "金额")
+        private Integer money;
+
+        @ApiModelProperty(value = "备注")
+        private String note;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class PayNotice {
+
+        @NotBlank(message = "orderId不能为空")
+        private String orderId;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        private Long id;
+
+        @ApiModelProperty(value = "订单id")
+        private String ordersId;
+
+        @ApiModelProperty(value = "商户id")
+        private Long mercId;
+
+        @ApiModelProperty(value = "设备id")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "购买年数")
+        private Integer size;
+
+        @ApiModelProperty(value = "金额")
+        private Integer money;
+
+        @ApiModelProperty(value = "支付状态")
+        private Boolean status;
+
+        @ApiModelProperty(value = "创建时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime createTime;
+
+        @ApiModelProperty(value = "更新时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime updateTime;
+
+
+    }
+
+}

+ 38 - 0
device-api/src/main/java/com/xy/service/DeviceAnnualFeeOrdersService.java

@@ -0,0 +1,38 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.DeviceAnnualFeeOrdersDto;
+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;
+
+/**
+ * <p>
+ * 设备年费订单表 服务类
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+@RestMappingController("/device-annual-fee-orders")
+public interface DeviceAnnualFeeOrdersService {
+
+    /**
+     * 购买
+     *
+     * @param pay
+     * @return
+     */
+    @PostMapping("pay")
+    R pay(@RequestBody @Validated DeviceAnnualFeeOrdersDto.Pay pay);
+
+    /**
+     * 购买回调
+     *
+     * @param payNotice
+     * @return
+     */
+    @PostMapping("payNotice")
+    R payNotice(@RequestBody @Validated DeviceAnnualFeeOrdersDto.PayNotice payNotice);
+}

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

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 设备年费表 服务类
+ * </p>
+ *
+ * @author lijin
+ * @since 2025-02-28
+ */
+@RestMappingController("/device-annual-fee")
+public interface DeviceAnnualFeeService {
+
+}