Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	device-start/pom.xml
李进 vor 2 Jahren
Ursprung
Commit
edf2adb6e8

+ 36 - 0
.gitignore

@@ -0,0 +1,36 @@
+HELP.md
+target/
+generate/
+log/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 12 - 0
device-api-cloud/pom.xml

@@ -10,6 +10,18 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>device-api-cloud</artifactId>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>6</source>
+                    <target>6</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
     <dependencies>
         <dependency>

+ 20 - 0
device-start/pom.xml

@@ -17,6 +17,26 @@
             <artifactId>device-api-service</artifactId>
             <version>1.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.xy</groupId>
+            <artifactId>authorize-api-cloud</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- torna swagger 插件 -->
+        <dependency>
+            <groupId>cn.torna</groupId>
+            <artifactId>swagger-plugin</artifactId>
+            <version>1.2.14</version>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 39 - 0
device-start/src/main/java/com/xy/controller/demo/DemoController.java

@@ -0,0 +1,39 @@
+package com.xy.controller.demo;
+
+
+import com.xy.controller.demo.common.ServerResponseEntity;
+import com.xy.controller.demo.param.DemoDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.Extension;
+import io.swagger.annotations.ExtensionProperty;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@RestController
+@RequestMapping("order")
+@Api(value = "订单模块", position = 0)
+public class DemoController {
+
+    @ApiOperation(value = "提交订单信息,application/json", notes = "提交订单信息,application/json", extensions = {
+            // 指定维护人
+            @Extension(name = "author", properties = {
+                    @ExtensionProperty(name = "谭斌", value = "")
+            }),
+            // 指定错误码
+            @Extension(name = "code", properties = {
+                    @ExtensionProperty(name = "100001", value = "id错误"),
+                    @ExtensionProperty(name = "100002", value = "错误描述2"),
+                    @ExtensionProperty(name = "100003", value = "错误描述3")
+            })
+    })
+    @PostMapping("create")
+    public ServerResponseEntity<DemoDTO> create(@RequestBody DemoDTO orderDTO) {
+        return ServerResponseEntity.success(orderDTO);
+    }
+
+
+}

+ 335 - 0
device-start/src/main/java/com/xy/controller/demo/common/ResponseEnum.java

@@ -0,0 +1,335 @@
+package com.xy.controller.demo.common;
+
+
+public enum ResponseEnum {
+
+    /**
+     * ok
+     */
+    OK("00000", "ok"),
+
+    /**
+     * 用于直接显示提示用户的错误,内容由输入内容决定
+     */
+    SHOW_FAIL("A00001", ""),
+
+    /**
+     * 方法参数没有校验,内容由输入内容决定
+     */
+    METHOD_ARGUMENT_NOT_VALID("A00002", ""),
+
+    /**
+     * 无法读取获取请求参数
+     */
+    HTTP_MESSAGE_NOT_READABLE("A00003", "请求参数格式有误"),
+
+    /**
+     * 未授权
+     */
+    UNAUTHORIZED("A00004", "请登录"),
+
+    /**
+     * 服务器出了点小差
+     */
+    EXCEPTION("A00005", "服务器出了点小差"),
+
+    /**
+     * 数据异常
+     */
+    DATA_ERROR("A00007", "数据异常,请刷新后重新操作"),
+
+    /**
+     * 一些需要登录的接口,而实际上因为前端无法知道token是否已过期,导致token已失效时, 应该返回一个状态码,告诉前端token已经失效了,及时清理
+     */
+    CLEAN_TOKEN("A00008", "clean token"),
+
+    /**
+     * 刷新token已过期
+     */
+    REFRESH_TOKEN_EXIST("A00009", "refresh token exist"),
+
+    /**
+     * 数据不完整
+     */
+    DATA_INCOMPLETE("A00010", "数据不完整"),
+
+    /**
+     *
+     */
+    OPERATION_NOT_ALLOWED("A00011", "不允许当前操作"),
+
+
+    /**
+     * 01开头代表活动
+     * 活动未在进行中
+     */
+    ACTIVITY_NOT_ONGOING("A01000", "活动未在未发布或未在进行中"),
+
+    /**
+     * 该活动信息不存在
+     */
+    ACTIVITY_NON_EXISTENT("A01001", "该活动信息不存在"),
+
+    /**
+     * 活动仅未发布和下线情况下能编辑
+     */
+    ACTIVITY_CANNOT_EDIT("A01002", "活动仅未发布和下线情况下能编辑"),
+
+    /**
+     * 活动仅未发布和下线情况下能编辑
+     */
+    ACTIVITY_CANNOT_DELETE("A01003", "活动未发布情况下可删除"),
+
+    /**
+     * 活动仅未上线和已下线情况下可发布
+     */
+    ACTIVITY_CANNOT_PUBLISH("A01004", "活动仅未上线和已下线情况下可发布"),
+
+    /**
+     * 活动上线时分类ID不能为空
+     */
+    ACTIVITY_TYPE_NON_EXISTENT("A01005", "活动上线时分类ID不能为空"),
+
+    /**
+     * 修改活动状态定时任务创建失败
+     */
+    ACTIVITY_STATUS_JOB("A01006", "修改活动状态定时任务创建失败"),
+
+    /**
+     * 该活动不能进行当前操作
+     */
+    ACTIVITY_CANNOT_OPERATE("A01007", "该活动不能进行当前操作"),
+
+    /**
+     * 该活动不能进行终止操作操作
+     */
+    ACTIVITY_CANNOT_TERMINATE("A01008", "该活动不能进行终止操作操作"),
+
+    /**
+     * 活动删除定时任务失败
+     */
+    ACTIVITY_JOB_DELETE_FAIL("A01009", "活动删除定时任务失败"),
+
+    /**
+     * 活动已下线
+     */
+    ACTIVITY_OFFLINE("A01010", "活动已下线"),
+
+    /**
+     * 02开头代表票种
+     * 超出票种时间范围
+     */
+    TICKET_EXCEED_RANGE("A02000", "超出该票种购买时间范围"),
+
+
+    /**
+     * 超出票种购买数量
+     */
+    TICKET_COUNT_RANGE("A02001", "超出票种购买数量"),
+
+    /**
+     * 票种数据异常
+     */
+    TICKET_DATA_ERROR("A02002", "未知网络原因未能成功购买票据"),
+
+    /**
+     * 库存不足,票种库存不足
+     */
+    NOT_STOCK("A02003", "票种库存不足"),
+
+    /**
+     * 票种信息不能为空
+     */
+    TICKET_NULL("A02004", "票种信息不能为空"),
+
+    /**
+     * 已达到当前最高参与人数
+     */
+    TICKET_EXCEED("A02005", "已达到当前最高参与人数"),
+
+    /**
+     * 超出购买限制
+     */
+    TICKET_EXCEED_MAX("A02005", "超出购买限制"),
+
+    /**
+     * 票种库存异常
+     */
+    TICKET_STOCK_ERROR("A02006", "票种库存异常"),
+
+    /**
+     * 03开头代表活动场次
+     * 超出活动场次时间范围
+     */
+    SCREENING_EXCEED_RANGE("A03000", "超出活动场次时间范围"),
+
+    /**
+     * 请勿重复提交订单, 1.当前端遇到该异常时,说明前端防多次点击没做好 2.提示用户 订单已发生改变,请勿重复下单
+     */
+    REPEAT_ORDER("A03002", "please don't repeat order"),
+
+    /**
+     * 订单已过期,当前端看到该状态码的时候,提示订单信息已过期,请重新确认后提交,此时用户点击确定,前端刷新页面。
+     */
+    ORDER_EXPIRED("A03003", "order expired"),
+
+    /**
+     * 订单已支付,无法取消订单
+     */
+    ORDER_PAYED("A03007", "order payed"),
+
+    /**
+     * 订单未发货,无法确认收货
+     */
+    ORDER_NO_DELIVERY("A03008", "order no delivery"),
+
+    /**
+     * 活动场次状态定时任务创建失败
+     */
+    SCREENING_STATUS_JOB("A03009", "活动场次状态定时任务创建失败"),
+
+    /**
+     * 活动场次删除定时任务失败
+     */
+    SCREENING_JOB_DELETE_FAIL("A03010", "活动场次删除定时任务失败"),
+
+    /**
+     * 场次信息不能为空
+     */
+    SCREENING_NULL("A03011", "场次信息不能为空"),
+
+    /**
+     * 该当场次已结束
+     */
+    SCREENING_ENDED("A03012", "该当场次已结束"),
+
+    /**
+     * Banner图片最多上传五张
+     */
+    BANNER_IMG_MAXSIZE("A03013", "Banner图片最多上传五张"),
+
+    /**
+     * 当前状态不可执行该操作
+     */
+    BANNER_STATUS_ILLEGALITY("A03014", "Banner当前状态不可执行该操作"),
+
+    /**
+     * 当前bannner只剩一张不可删除
+     */
+    BANNER_NOT_DELE("A03021", "当前bannner只剩一张不可删除"),
+
+
+    BANNER_NOT_LINE("A03022", "当前上线bannner只剩一张不可下线"),
+
+    ADVERTISEMENT_NOT_LINE("A03023", "仅允许上线一个开屏广告"),
+
+    ADVERTISEMENT_NOT_DELETE("A03024", "上线广告不允许删除"),
+
+    CHOICENESS_MAXSIZE("A03015", "精选推荐最多6个产品"),
+
+    CHOICENESS_STATUS_ILLEGALIT("A03016", "当前状态不可执行该操作"),
+
+    /**
+     * 订单未支付
+     */
+    ORDER_NOT_PAYED("A03012", "order not payed"),
+
+
+    /**
+     * 订单支付失败
+     */
+    PAY_OREDER_FAIL("A03013", "微信统一支付失败"),
+
+    /**
+     * 没有查询权限
+     */
+    REFUND_NOT_PERMISSION("A03024", "refund not permission"),
+
+
+    /**
+     * 04开头代表订单
+     */
+    ORDER_NOT_EXIST("A04000", "订单不存在"),
+
+    /**
+     * 订单已支付,无法取消订单
+     */
+    ORDER_PAID("A04001", "只有未支付的订单能发起支付"),
+
+    /**
+     * 订单已失败
+     */
+    ORDER_HAS_FAILED("A04013", "未知网络原因订单未能生成"),
+
+
+    /**
+     * 撤销失败 当前状态不允许此操作
+     */
+    REFUND_STATUS_CHECK("A04034", "当前订单状态不允许此操作"),
+
+    /**
+     * 撤销失败 未找到相关活动信息
+     */
+    REFUND_NOT_ACTIVITY("A04035", "失败,未找到相关活动信息"),
+
+    /**
+     * 撤销失败,超出可退款时间范围
+     */
+    REFUND_TIME_RANGE("A04036", "失败,已超过可退款时间范围"),
+
+    /**
+     * 撤销失败 票卷信息有误
+     */
+    REFUND_NOT_TICKET("A04037", "票卷信息有误不请核查后进行操作"),
+
+    /**
+     * 撤销失败,票卷状态不符合
+     */
+    REFUND_STATUS_TICKET("A04038", "票卷已使用或已失效"),
+
+    REFUND_MAX_COUNT("A04039", "该订单已超过最大申请次数"),
+
+    REFUND_FILL_MESSAGE("A04040", "请填写原因"),
+
+    REFUND_ORDER_NOT("A04041", "0元单无需退款"),
+
+    /**
+     * 有些时候第三方系统授权之后,会有个临时的key,比如小程序的session_key
+     * 这个异常代表session_key过期,前端遇到这个问题的时候,应该再次调用社交登录的接口,刷新session_key
+     */
+    BIZ_TEMP_SESSION_KEY_EXPIRE("A04002", "biz temp session key expire"),
+
+    /**
+     * 账号未注册,前端看到这个状态码,弹出选择框,提示用户账号未注册,是否进入注册页面,用户选择是,进入注册页面
+     */
+    ACCOUNT_NOT_REGISTER("A04003", "account not register");
+
+    private final String code;
+
+    private final String msg;
+
+    public String value() {
+        return code;
+    }
+
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    ResponseEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResponseEnum{" + "code='" + code + '\'' + ", msg='" + msg + '\'' + "} "
+                + super.toString();
+    }
+
+}

+ 139 - 0
device-start/src/main/java/com/xy/controller/demo/common/ServerResponseEntity.java

@@ -0,0 +1,139 @@
+package com.xy.controller.demo.common;
+
+import cn.hutool.core.util.ObjectUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Serializable;
+
+/***
+ * 响应数据封装
+ * @author 谭斌
+ * @date 2022/11/21 16:12
+ */
+public class ServerResponseEntity<T> implements Serializable {
+
+    private static final Logger log = LoggerFactory.getLogger(ServerResponseEntity.class);
+
+    /**
+     * 状态码
+     */
+    private String code;
+
+    /**
+     * 信息
+     */
+    private String message;
+
+    /**
+     * 数据
+     */
+    private T data;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public boolean isSuccess() {
+        return ObjectUtil.equals(ResponseEnum.OK.value(), this.code);
+    }
+
+    @Override
+    public String toString() {
+        return "ServerResponseEntity{" + "code=" + code + ", message='" + message + '\'' + ", data=" + data
+                + '}';
+    }
+
+    public static <T> ServerResponseEntity<T> success(T data, String msg) {
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setCode(ResponseEnum.OK.value());
+        serverResponseEntity.setData(data);
+        serverResponseEntity.setMessage(msg);
+        return serverResponseEntity;
+    }
+
+    public static <T> ServerResponseEntity<T> success(T data) {
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setData(data);
+        serverResponseEntity.setCode(ResponseEnum.OK.value());
+        return serverResponseEntity;
+    }
+
+    public static <T> ServerResponseEntity<T> success() {
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setCode(ResponseEnum.OK.value());
+        serverResponseEntity.setMessage(ResponseEnum.OK.getMsg());
+        return serverResponseEntity;
+    }
+
+    /**
+     * 前端显示失败消息
+     *
+     * @param msg 失败消息
+     * @return
+     */
+    public static <T> ServerResponseEntity<T> showFailMsg(String msg) {
+        log.error(msg);
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setMessage(msg);
+        serverResponseEntity.setCode(ResponseEnum.SHOW_FAIL.value());
+        return serverResponseEntity;
+    }
+
+    public static <T> ServerResponseEntity<T> fail(ResponseEnum responseEnum) {
+        log.error(responseEnum.toString());
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setMessage(responseEnum.getMsg());
+        serverResponseEntity.setCode(responseEnum.value());
+        return serverResponseEntity;
+    }
+
+    public static <T> ServerResponseEntity<T> fail(ResponseEnum responseEnum, T data) {
+        log.error(responseEnum.toString());
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setMessage(responseEnum.getMsg());
+        serverResponseEntity.setCode(responseEnum.value());
+        serverResponseEntity.setData(data);
+        return serverResponseEntity;
+    }
+
+    public static <T> ServerResponseEntity<T> failMsg(ResponseEnum responseEnum, String errMsg) {
+        log.error("failMsg:{}", errMsg);
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setMessage(errMsg);
+        serverResponseEntity.setCode(responseEnum.value());
+        serverResponseEntity.setData(null);
+        return serverResponseEntity;
+    }
+
+
+    public static <T> ServerResponseEntity<T> transform(
+            ServerResponseEntity<?> oldServerResponseEntity) {
+        ServerResponseEntity<T> serverResponseEntity = new ServerResponseEntity<>();
+        serverResponseEntity.setMessage(oldServerResponseEntity.getMessage());
+        serverResponseEntity.setCode(oldServerResponseEntity.getCode());
+        log.error(serverResponseEntity.toString());
+        return serverResponseEntity;
+    }
+
+}

+ 13 - 0
device-start/src/main/java/com/xy/controller/demo/param/DemoDTO.java

@@ -0,0 +1,13 @@
+package com.xy.controller.demo.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class DemoDTO {
+    @ApiModelProperty(value = "订单id", example = "aaaa", position = 0)
+    private String orderNo;
+
+    @ApiModelProperty(value = "备注", example = "订单", position = 1)
+    private String remark;
+}

+ 18 - 0
device-start/src/main/resources/torna.json

@@ -0,0 +1,18 @@
+{
+  // 开启推送
+  "enable": true,
+  // 扫描package,多个用;隔开
+  "basePackage": "com.xy.controller",
+  // 推送URL,IP端口对应Torna服务器
+  "url": "http://119.96.213.127:9010/api",
+  // 模块token
+  "token": "814140ffc92545bcb9fef4dd8d8c99ff",
+  // 调试环境,格式:环境名称,调试路径,多个用"|"隔开
+  "debugEnv": "test,http://127.0.0.1:8088",
+  // 推送人
+  "author": "tb",
+  // 打开调试:true/false
+  "debug": true,
+  // 是否替换文档,true:替换,false:不替换(追加)。默认:true
+  "isReplace": true
+}

+ 17 - 0
device-start/src/test/java/com/xy/DocPushTest.java

@@ -0,0 +1,17 @@
+package com.xy;
+
+import cn.torna.swaggerplugin.SwaggerPlugin;
+
+/**
+ * 推送swagger文档
+ *
+ * @author thc
+ */
+public class DocPushTest {
+    public static void main(String[] args) {
+        SwaggerPlugin.pushDoc();
+        // 默认查找resources下的torna.json
+        // 可复制一份用来区分不同环境,然后参数传文件名称
+        //SwaggerPlugin.pushDoc("torna-test.json");
+    }
+}