李进 1 рік тому
батько
коміт
c97483e997

+ 18 - 0
device-api-cloud/src/main/java/com/xy/feign/DeviceSimChargeFeign.java

@@ -0,0 +1,18 @@
+package com.xy.feign;
+
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 设备流量卡充值表 feign
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface DeviceSimChargeFeign {
+
+}

+ 18 - 0
device-api-cloud/src/main/java/com/xy/feign/DeviceSimFeign.java

@@ -0,0 +1,18 @@
+package com.xy.feign;
+
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 设备流量卡 feign
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface DeviceSimFeign {
+
+}

+ 50 - 0
device-api-service/src/main/java/com/xy/entity/DeviceSim.java

@@ -0,0 +1,50 @@
+package com.xy.entity;
+
+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 2023-10-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceSim对象", description="设备流量卡")
+public class DeviceSim implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "类型")
+    private Integer type;
+
+    @ApiModelProperty(value = "激活时间")
+    private LocalDateTime activateTime;
+
+    @ApiModelProperty(value = "过期时间")
+    private LocalDateTime timeout;
+
+    @ApiModelProperty(value = "最后续费时间")
+    private LocalDateTime lastRenewalTime;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+
+}

+ 62 - 0
device-api-service/src/main/java/com/xy/entity/DeviceSimCharge.java

@@ -0,0 +1,62 @@
+package com.xy.entity;
+
+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 2023-10-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceSimCharge对象", description="设备流量卡充值表")
+public class DeviceSimCharge implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "订单id")
+    private String orderId;
+
+    @ApiModelProperty(value = "流量卡id")
+    private String simId;
+
+    @ApiModelProperty(value = "商户id")
+    private Long mercId;
+
+    @ApiModelProperty(value = "金额")
+    private Integer money;
+
+    @ApiModelProperty(value = "数量")
+    private Integer size;
+
+    @ApiModelProperty(value = "支付方式")
+    private Integer payType;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "备注")
+    private String note;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+
+}

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

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.entity.DeviceSimCharge;
+
+/**
+ * <p>
+ * 设备流量卡充值表 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+public interface DeviceSimChargeMapper extends BaseMapper<DeviceSimCharge> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.entity.DeviceSim;
+
+/**
+ * <p>
+ * 设备流量卡 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+public interface DeviceSimMapper extends BaseMapper<DeviceSim> {
+
+}

+ 24 - 0
device-api-service/src/main/java/com/xy/service/DeviceSimChargeServiceImpl.java

@@ -0,0 +1,24 @@
+package com.xy.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.entity.DeviceSimCharge;
+import com.xy.mapper.DeviceSimChargeMapper;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 设备流量卡充值表 服务实现类
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+@Service
+@AllArgsConstructor
+@Api(tags = "设备流量卡充值表")
+public class DeviceSimChargeServiceImpl extends ServiceImpl<DeviceSimChargeMapper, DeviceSimCharge> implements DeviceSimChargeService {
+
+}

+ 90 - 0
device-api-service/src/main/java/com/xy/service/DeviceSimServiceImpl.java

@@ -0,0 +1,90 @@
+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.collections.list.JArrayList;
+import com.xy.collections.list.JList;
+import com.xy.collections.map.JMap;
+import com.xy.dto.DeviceSimDto;
+import com.xy.entity.DeviceSim;
+import com.xy.entity.DeviceSimCharge;
+import com.xy.mapper.DeviceSimMapper;
+import com.xy.utils.DataTime;
+import com.xy.utils.Emptys;
+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;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 设备流量卡 服务实现类
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+@Service
+@AllArgsConstructor
+@Api(tags = "设备流量卡")
+public class DeviceSimServiceImpl extends ServiceImpl<DeviceSimMapper, DeviceSim> implements DeviceSimService {
+
+    private DeviceSimChargeServiceImpl deviceSimChargeService;
+
+    @Override
+    @ApiOperation("购买")
+    public R pay(DeviceSimDto.Pay pay) {
+        LocalDateTime now = LocalDateTime.now();
+        List<DeviceSimDto.Pay.DeviceSimCharge> deviceSimCharges = pay.getDeviceSimCharges();
+        List<DeviceSimCharge> deviceSimChargess = new ArrayList<>(deviceSimCharges.size());
+        deviceSimCharges.forEach(deviceSimCharge -> {
+            DeviceSimCharge deviceSimChargeInfo = new DeviceSimCharge()
+                    .setId(YitIdHelper.nextId())
+                    .setOrderId(pay.getOrderId())
+                    .setSimId(deviceSimCharge.getSimId())
+                    .setMercId(pay.getMercId())
+                    .setMoney(deviceSimCharge.getMoney())
+                    .setSize(deviceSimCharge.getSize())
+                    .setPayType(pay.getPayType())
+                    .setNote(pay.getNote())
+                    .setCreateTime(now)
+                    .setUpdateTime(now);
+            deviceSimChargess.add(deviceSimChargeInfo);
+        });
+        deviceSimChargeService.saveBatch(deviceSimChargess);
+        return R.ok();
+    }
+
+    @Override
+    @ApiOperation("购买回调")
+    public R payNotice(DeviceSimDto.PayNotice payNotice) {
+        //查询设备流量卡充值表
+        List<DeviceSimCharge> list = deviceSimChargeService.list(new LambdaQueryWrapper<DeviceSimCharge>().eq(DeviceSimCharge::getOrderId, payNotice.getOrderId()));
+        if (!Emptys.check(list)) {
+            return R.ok();
+        }
+        //查询设备流量卡
+        JList<DeviceSimCharge> deviceSimCharges = new JArrayList<>(list);
+        JMap<String, DeviceSimCharge> deviceSimChargesJMaps = deviceSimCharges.toMap(DeviceSimCharge::getSimId).cover();
+        List<DeviceSim> deviceSims = listByIds(deviceSimCharges.getProperty(DeviceSimCharge::getSimId));
+        //循环处理
+        LocalDateTime now = LocalDateTime.now();
+        deviceSims.forEach(deviceSim -> {
+            DeviceSimCharge deviceSimCharge = deviceSimChargesJMaps.get(deviceSim.getId());
+            String newTimeout = deviceSimCharge.getPayType() == 100 ? DataTime.getStringAround(0, 0, deviceSimCharge.getSize(), 0, 0, 0)
+                    : DataTime.getStringAround(deviceSimCharge.getSize(), 0, 0, 0, 0, 0);
+            deviceSim.setTimeout(DataTime.toLocal(newTimeout))
+                    .setLastRenewalTime(now)
+                    .setUpdateTime(now);
+        });
+        updateBatchById(deviceSims);
+        return R.ok();
+    }
+}

+ 62 - 0
device-api/src/main/java/com/xy/dto/DeviceSimChargeDto.java

@@ -0,0 +1,62 @@
+package com.xy.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 设备流量卡充值表
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+public class DeviceSimChargeDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty(value = "id")
+        private Long id;
+
+        @ApiModelProperty(value = "订单id")
+        private String orderId;
+
+        @ApiModelProperty(value = "流量卡id")
+        private String simId;
+
+        @ApiModelProperty(value = "商户id")
+        private Long mercId;
+
+        @ApiModelProperty(value = "金额")
+        private Integer money;
+
+        @ApiModelProperty(value = "数量")
+        private Integer size;
+
+        @ApiModelProperty(value = "支付方式")
+        private Integer payType;
+
+        @ApiModelProperty(value = "状态")
+        private Integer status;
+
+        @ApiModelProperty(value = "备注")
+        private String note;
+
+        @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;
+
+
+    }
+
+}

+ 104 - 0
device-api/src/main/java/com/xy/dto/DeviceSimDto.java

@@ -0,0 +1,104 @@
+package com.xy.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 设备流量卡
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+public class DeviceSimDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class Pay {
+
+        @NotBlank(message = "orderId不能为空")
+        @ApiModelProperty("订单号")
+        private String orderId;
+
+        @NotNull(message = "mercId不能为空")
+        @ApiModelProperty(value = "商户id")
+        private Long mercId;
+
+        @NotEmpty(message = "deviceSimCharges不能为空")
+        @ApiModelProperty("续费信息")
+        private List<DeviceSimCharge> deviceSimCharges;
+
+        @NotNull(message = "payType不能为空")
+        @ApiModelProperty(value = "支付类型 2=支付宝 3=微信 100=赠送")
+        private Integer payType;
+
+        @ApiModelProperty(value = "备注")
+        private String note;
+
+        @Data
+        @Accessors(chain = true)
+        public static class DeviceSimCharge {
+
+            @ApiModelProperty("流量卡id")
+            private String simId;
+
+            @ApiModelProperty("购买数/赠送数 单位:年/天")
+            private Integer size;
+
+            @ApiModelProperty("金额")
+            private Integer money;
+        }
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class PayNotice {
+
+        @NotBlank(message = "orderId不能为空")
+        private String orderId;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty(value = "id")
+        private String id;
+
+        @ApiModelProperty(value = "类型")
+        private Integer type;
+
+        @ApiModelProperty(value = "激活时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime activateTime;
+
+        @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 lastRenewalTime;
+
+        @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;
+
+
+    }
+
+}

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

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 设备流量卡充值表 服务类
+ * </p>
+ *
+ * @author lijin
+ * @since 2023-10-16
+ */
+@RestMappingController("/device-sim-charge")
+public interface DeviceSimChargeService {
+
+}

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

@@ -0,0 +1,38 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.DeviceSimDto;
+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 2023-10-16
+ */
+@RestMappingController("/device-sim")
+public interface DeviceSimService {
+
+    /**
+     * 购买
+     *
+     * @param pay
+     * @return
+     */
+    @PostMapping("pay")
+    R pay(@RequestBody @Validated DeviceSimDto.Pay pay);
+
+    /**
+     * 购买回调
+     *
+     * @param payNotice
+     * @return
+     */
+    @PostMapping("payNotice")
+    R payNotice(@RequestBody @Validated DeviceSimDto.PayNotice payNotice);
+}