فهرست منبع

青港开放接口

leichao 1 سال پیش
والد
کامیت
05953f4f7d
72فایلهای تغییر یافته به همراه5009 افزوده شده و 0 حذف شده
  1. 33 0
      .gitignore
  2. 118 0
      .idea/qg-springboot.iml
  3. 118 0
      .mvn/wrapper/MavenWrapperDownloader.java
  4. 0 0
      .mvn/wrapper/maven-wrapper.jar
  5. 2 0
      .mvn/wrapper/maven-wrapper.properties
  6. 17 0
      Dockerfile
  7. 310 0
      mvnw
  8. 182 0
      mvnw.cmd
  9. 103 0
      pom.xml
  10. 20 0
      src/main/java/com/sy/ImportExeclDemoApplication.java
  11. 82 0
      src/main/java/com/sy/controller/GoodsController.java
  12. 98 0
      src/main/java/com/sy/controller/OrdersController.java
  13. 77 0
      src/main/java/com/sy/entity/Category.java
  14. 122 0
      src/main/java/com/sy/entity/Goods.java
  15. 48 0
      src/main/java/com/sy/entity/GoodsUnit.java
  16. 286 0
      src/main/java/com/sy/entity/Orders.java
  17. 154 0
      src/main/java/com/sy/entity/OrdersGoods.java
  18. 73 0
      src/main/java/com/sy/entity/OrdersGoodsDel.java
  19. 46 0
      src/main/java/com/sy/entity/RetreatGoods.java
  20. 178 0
      src/main/java/com/sy/entity/Shop.java
  21. 73 0
      src/main/java/com/sy/entity/ShopPayConfig.java
  22. 82 0
      src/main/java/com/sy/entity/ShopPaymentRecord.java
  23. 30 0
      src/main/java/com/sy/entity/Spec.java
  24. 71 0
      src/main/java/com/sy/entity/TRefundLog.java
  25. 19 0
      src/main/java/com/sy/entity/goodsVoDto/GoodsDelVo.java
  26. 13 0
      src/main/java/com/sy/entity/goodsVoDto/GoodsInfoVo.java
  27. 28 0
      src/main/java/com/sy/entity/goodsVoDto/GoodsVoInParameter.java
  28. 18 0
      src/main/java/com/sy/entity/orderVoDto/OrderInParameter.java
  29. 23 0
      src/main/java/com/sy/entity/orderVoDto/OrdersDTO.java
  30. 13 0
      src/main/java/com/sy/entity/orderVoDto/OrdersGoodsRefundLogInfoDTO.java
  31. 33 0
      src/main/java/com/sy/entity/orderVoDto/OrdersStatementOfAccount.java
  32. 26 0
      src/main/java/com/sy/entity/orderVoDto/OrdersVo.java
  33. 537 0
      src/main/java/com/sy/enums/ResultCode.java
  34. 133 0
      src/main/java/com/sy/enums/ResultUtil.java
  35. 13 0
      src/main/java/com/sy/listener/MyEventListener.java
  36. 13 0
      src/main/java/com/sy/mapper/goods/CategoryMapper.java
  37. 16 0
      src/main/java/com/sy/mapper/goods/GoodsMapper.java
  38. 10 0
      src/main/java/com/sy/mapper/goods/GoodsUnitMapper.java
  39. 10 0
      src/main/java/com/sy/mapper/goods/SpecMapper.java
  40. 12 0
      src/main/java/com/sy/mapper/orders/OrdersGoodsDelMapper.java
  41. 12 0
      src/main/java/com/sy/mapper/orders/OrdersGoodsMapper.java
  42. 28 0
      src/main/java/com/sy/mapper/orders/OrdersMapper.java
  43. 27 0
      src/main/java/com/sy/mapper/orders/RetreatGoodsMapper.java
  44. 23 0
      src/main/java/com/sy/mapper/orders/ShopPaymentRecordMapper.java
  45. 15 0
      src/main/java/com/sy/mapper/orders/TRefundLogMapper.java
  46. 15 0
      src/main/java/com/sy/mapper/users/ShopMapper.java
  47. 13 0
      src/main/java/com/sy/mapper/users/ShopPayConfigMapper.java
  48. 31 0
      src/main/java/com/sy/service/CategoryService.java
  49. 91 0
      src/main/java/com/sy/service/GoodsService.java
  50. 10 0
      src/main/java/com/sy/service/GoodsUnitService.java
  51. 26 0
      src/main/java/com/sy/service/OrdersGoodsDelService.java
  52. 24 0
      src/main/java/com/sy/service/OrdersGoodsService.java
  53. 206 0
      src/main/java/com/sy/service/OrdersService.java
  54. 106 0
      src/main/java/com/sy/service/RetreatGoodsService.java
  55. 21 0
      src/main/java/com/sy/service/ShopPayConfigService.java
  56. 25 0
      src/main/java/com/sy/service/ShopPaymentRecordService.java
  57. 46 0
      src/main/java/com/sy/service/ShopService.java
  58. 11 0
      src/main/java/com/sy/service/SpecService.java
  59. 70 0
      src/main/java/com/sy/service/TRefundLogService.java
  60. 127 0
      src/main/java/com/sy/utils/ChineseCharacterUtil.java
  61. 45 0
      src/main/java/com/sy/utils/CreateUuid.java
  62. 178 0
      src/main/java/com/sy/utils/ECDSASigner.java
  63. 70 0
      src/main/java/com/sy/utils/ImportExcelUtils.java
  64. 116 0
      src/main/java/com/sy/utils/Utils.java
  65. 42 0
      src/main/java/com/sy/utils/vo/ResultMessage.java
  66. 37 0
      src/main/resources/application.yml
  67. 117 0
      src/main/resources/mapper/OrdersMapper.xml
  68. 24 0
      src/main/resources/mapper/RetreatGoodsMapper.xml
  69. 39 0
      src/main/resources/mapper/ShopPaymentRecordMapper.xml
  70. 43 0
      src/main/resources/static/upload.html
  71. 131 0
      src/test/java/com/sy/QgSdkTests.java
  72. BIN
      test.txt

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.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/

+ 118 - 0
.idea/qg-springboot.iml

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.14.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.14.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.46" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.46" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.46" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.19.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.9.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.22" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.9.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.2" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.7" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.5.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.20" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.postgresql:postgresql:42.2.20" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.9" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.3.0" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
+    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.0" level="project" />
+    <orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />
+  </component>
+</module>

+ 118 - 0
.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+            + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

+ 0 - 0
.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

+ 17 - 0
Dockerfile

@@ -0,0 +1,17 @@
+# 基于Java官方镜像
+FROM openjdk:11-jre-slim
+
+# 在镜像中创建一个目录存放我们的应用
+VOLUME /tmp
+
+# 将jar包添加到容器中并更名为app.jar
+ADD target/import-execl-demo-0.0.1-SNAPSHOT.jar app.jar
+
+# 暴露容器内的端口给外部访问
+EXPOSE 8081
+
+# 定义环境变量
+ENV JAVA_OPTS=""
+
+# 在容器启动时运行Spring Boot应用
+ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar

+ 310 - 0
mvnw

@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 182 - 0
mvnw.cmd

@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%

+ 103 - 0
pom.xml

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.0</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.yuwen</groupId>
+    <artifactId>import-execl-demo</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>import-execl-demo</name>
+    <description>Demo project for Spring Boot</description>
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- mybatis -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>3.5.2</version>
+        </dependency>
+
+        <!-- lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <!-- 导入excel相关 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.9</version>
+        </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.9</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.1</version>
+        </dependency>
+
+        <!--汉字转换为拼音-->
+        <dependency>
+            <groupId>com.belerweb</groupId>
+            <artifactId>pinyin4j</artifactId>
+            <version>2.5.0</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>qg-goods-order-account-sdk</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 20 - 0
src/main/java/com/sy/ImportExeclDemoApplication.java

@@ -0,0 +1,20 @@
+package com.sy;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@SpringBootApplication
+@ComponentScan(value = "com.sy.*")
+@MapperScan(basePackages = "com.sy.*")
+@EnableTransactionManagement
+public class ImportExeclDemoApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ImportExeclDemoApplication.class, args);
+        System.out.println("Spring Boot应用启动成功!");
+    }
+
+}

+ 82 - 0
src/main/java/com/sy/controller/GoodsController.java

@@ -0,0 +1,82 @@
+package com.sy.controller;
+
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.sy.entity.goodsVoDto.GoodsVoInParameter;
+import com.sy.service.GoodsService;
+import com.sy.utils.ECDSASigner;
+import com.sy.utils.vo.ResultMessage;
+import com.sy.enums.ResultUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+import static com.sy.utils.ECDSASigner.publicSig;
+
+/**
+ * (Goods)表控制层
+ *
+ * @author makejava
+ * @since 2023-12-28 06:05:06
+ */
+@RestController
+@Slf4j
+@RequestMapping("/goods")
+public class GoodsController {
+    /**
+     *
+     *
+     *
+     * 服务对象
+     */
+    @Autowired
+    private GoodsService goodsService;
+
+    @PostMapping("/push")
+    public ResultMessage<Object> batchInsertGoods(@RequestBody Map<String, Object> params) {
+        if (params.containsKey("salePrice")) {
+            BigDecimal bigDecimal = new BigDecimal(String.valueOf(params.get("salePrice")));
+            BigDecimal stripped = bigDecimal.stripTrailingZeros();
+            params.put("salePrice",stripped);
+        }
+        log.info("请求的接口:/push/   params:{}",params.toString());
+        boolean verify = ECDSASigner.verify(params,publicSig);
+        if (!verify){
+            return ResultUtil.error(304,"签名异常!!");
+        }
+        GoodsVoInParameter goodsVoInParameter =new GoodsVoInParameter();
+        if (params.get("shopId")==null||params.get("goodsId")==null) {
+            return ResultUtil.error(304,"shopId或goodsId为空,请检查");
+        }
+        goodsVoInParameter.setShopId(String.valueOf(params.get("shopId")));
+        goodsVoInParameter.setGoodsId(String.valueOf(params.get("goodsId")));
+        if (params.get("goodsName")!= null) {
+            goodsVoInParameter.setGoodsName(String.valueOf(params.get("goodsName")));
+        }
+        if (params.get("imgUrl")!= null) {
+            goodsVoInParameter.setImgUrl(String.valueOf(params.get("imgUrl")));
+        }
+        if (params.get("barCode")!= null) {
+            goodsVoInParameter.setBarCode(String.valueOf(params.get("barCode")));
+        }
+        if (params.get("specs")!= null) {
+            goodsVoInParameter.setSpecs(String.valueOf(params.get("specs")));
+        }
+        if (params.get("salePrice")!= null) {
+            goodsVoInParameter.setSalePrice(new BigDecimal(String.valueOf(params.get("salePrice"))));
+        }
+        if (params.get("stock")!= null) {
+            goodsVoInParameter.setStock(new BigDecimal(String.valueOf(params.get("stock"))));
+        }
+        if (params.get("status")!= null) {
+            goodsVoInParameter.setStatus(Integer.valueOf(String.valueOf(params.get("status"))));
+        }
+        return ResultUtil.data(goodsService.batchGoods(goodsVoInParameter));
+    }
+
+}
+

+ 98 - 0
src/main/java/com/sy/controller/OrdersController.java

@@ -0,0 +1,98 @@
+package com.sy.controller;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sy.entity.orderVoDto.OrderInParameter;
+import com.sy.enums.ResultUtil;
+import com.sy.service.OrdersService;
+import com.sy.service.RetreatGoodsService;
+import com.sy.service.TRefundLogService;
+import com.sy.utils.ECDSASigner;
+import com.sy.utils.vo.ResultMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.jdbc.Null;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Map;
+
+import static com.sy.utils.ECDSASigner.publicSig;
+
+/**
+ * (orders)表控制层
+ *
+ * @author xxxxx
+ */
+@RestController
+@Slf4j
+@RequestMapping("/order")
+public class OrdersController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private OrdersService ordersService;
+
+    @Autowired
+    RetreatGoodsService retreatGoodsService;
+
+    /**
+     * 订单
+     */
+    @PostMapping("/list")
+    public ResultMessage<Object> getOrders(@RequestBody Map<String, Object> params){
+        log.info("请求的接口:/orders/   params:{}",params.toString());
+        if (!ECDSASigner.verify(params, publicSig)){
+            return ResultUtil.error(304,"签名异常!!");
+        }
+        OrderInParameter argument = getArgument(params);
+        return ResultUtil.data(ordersService.getAllByPayAt(argument));
+    }
+
+    /**
+     * 对账
+     */
+    @PostMapping("/profit/separate/list")
+    public ResultMessage<Object> getOrdersAccount(@RequestBody Map<String, Object> params){
+        log.info("请求的接口:/profit/   params:{}",params.toString());
+        if (!ECDSASigner.verify(params,publicSig)){
+            return ResultUtil.error(304,"签名异常!!");
+        }
+        OrderInParameter argument = getArgument(params);
+        return ResultUtil.data(ordersService.getOrdersStatementOfAccount(argument));
+    }
+
+    /**
+     * 退款
+     */
+    @PostMapping("/refund/list")
+    public ResultMessage<Object> selectRefundList(@RequestBody Map<String, Object> params)  {
+        log.info("请求的接口:/refund/   params:{}",params.toString());
+        if (!ECDSASigner.verify(params,publicSig)){
+            return ResultUtil.error(304,"签名异常!!");
+        }
+        OrderInParameter argument = getArgument(params);
+        return ResultUtil.data(retreatGoodsService.getListOrderTRefundLog(argument));
+    }
+
+
+
+    /**
+     * 用于测试访问服务器接口是否正常
+     */
+    @PostMapping("testOrders")
+    public ResultMessage<Object> getTest(@RequestBody OrderInParameter orderInParameter){
+        return ResultUtil.data(ordersService.getTest());
+    }
+
+    protected OrderInParameter getArgument(Map<String, Object> params){
+        OrderInParameter orderInParameter = new OrderInParameter();
+        orderInParameter.setShopId((String) params.get("shopId"));
+        orderInParameter.setEndTimestamp(Long.valueOf(String.valueOf(params.get("endTimestamp"))));
+        orderInParameter.setStartTimestamp( Long.valueOf(String.valueOf(params.get("startTimestamp"))));
+        return orderInParameter;
+    }
+}

+ 77 - 0
src/main/java/com/sy/entity/Category.java

@@ -0,0 +1,77 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@TableName(value = "category")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Category {
+    @TableId(value = "sn", type = IdType.AUTO)
+    private Integer sn;
+
+    @TableField(value = "id")
+    private String id;
+
+    @TableField(value = "name")
+    private String name;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "orders")
+    private Integer orders;
+
+    @TableField(value = "status")
+    private Integer status;
+
+    @TableField(value = "create_at")
+    private Date createAt;
+
+    @TableField(value = "update_at")
+    private Date updateAt;
+
+    @TableField(value = "start_date")
+    private String startDate;
+
+    @TableField(value = "end_date")
+    private String endDate;
+
+    @TableField(value = "start_time")
+    private String startTime;
+
+    @TableField(value = "end_time")
+    private String endTime;
+
+    @TableField(value = "holiday")
+    private Integer holiday;
+
+    @TableField(value = "week_day")
+    private String weekDay;
+
+    @TableField(value = "is_datetime")
+    private Integer isDatetime;
+
+    public Category getSort(String shopId,Integer sn) {
+        Category category = new Category();
+        category.setSn(sn);
+        category.setId("0001");
+        category.setName("青港商品");
+        category.setShopId(shopId);
+        category.setOrders(1);
+        category.setStatus(1);
+        category.setCreateAt(new Date());
+        category.setUpdateAt(new Date());
+        category.setHoliday(0);
+        category.setIsDatetime(1);
+        return category;
+    }
+}

+ 122 - 0
src/main/java/com/sy/entity/Goods.java

@@ -0,0 +1,122 @@
+package com.sy.entity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.sy.entity.goodsVoDto.GoodsVoInParameter;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * (Goods)表实体类
+ *
+ * @author makejava
+ * @since 2023-12-28 06:05:06
+ */
+@SuppressWarnings("serial")
+@Repository
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "goods")
+public class Goods {
+
+    private String id;
+
+    private String cateId="0001";
+
+    private String name;
+
+    private Integer orders=0;
+
+    private BigDecimal discount= BigDecimal.valueOf(10);
+
+    private BigDecimal stock= BigDecimal.valueOf(0);
+
+    private BigDecimal price;
+
+    private Integer status=1;
+
+    private String unit;
+
+    private String pic;
+
+    private String shopId;
+
+    private String tagName;
+
+    private String specName;
+
+    private Integer limited=0;
+
+    private Integer printWay=1;
+
+    private String remark;
+
+    private String operatorId="baac742a-b99f-11ea-b57b-0242ac12000f";//要通过用户查询谁修改的!!!!   我直接写死
+
+    private String operatorName;//同上
+
+    private Date createAt=new Date();
+
+    private Date updateAt=new Date();
+
+    private Integer stockAuto=0;
+
+    private BigDecimal stockAutoNum= BigDecimal.valueOf(0);
+
+    private Integer lx=0;
+
+    private String printScheme;
+
+    private BigDecimal takeoutPackFee= BigDecimal.valueOf(0);
+
+    private String shorthand;
+
+    private BigDecimal drawPercent= BigDecimal.valueOf(0);
+
+    private Integer isStockWarn=0;
+
+    private BigDecimal stockWarnNum= BigDecimal.valueOf(0);
+
+    private Integer isSpecCate=0;
+
+    private String specCateId;
+
+    private Integer isCountMinimumCharge=0;
+
+    private BigDecimal takeoutPrice= BigDecimal.valueOf(0);
+
+    private BigDecimal takeoutDiscount= BigDecimal.valueOf(10);
+
+    private String pic1;
+
+    private String pic2;
+
+    private String pic3;
+
+    private String pic4;
+
+    private Integer isBuyerSee=1;
+
+    private Integer isJoinOrderDiscount=1;
+
+    private String barcode;
+
+    private Integer isUseStock=0;
+
+    private Integer isOpenStockSystem=0;
+
+    private Integer isMoreUnit=0;
+
+    private Integer isTakeoutGoods=1;
+
+    private Integer isInshopGoods=1;
+
+    private Integer isThirdTicket=0;
+
+}
+

+ 48 - 0
src/main/java/com/sy/entity/GoodsUnit.java

@@ -0,0 +1,48 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import lombok.Data;
+
+@Data
+@TableName(value = "goods_unit")
+public class GoodsUnit {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "goods_id")
+    private String goodsId;
+
+    @TableField(value = "unit")
+    private String unit;
+
+    @TableField(value = "barcode")
+    private String barcode;
+
+    @TableField(value = "price")
+    private BigDecimal price;
+
+    @TableField(value = "discount")
+    private BigDecimal discount=BigDecimal.valueOf(0.0);
+
+    @TableField(value = "takeout_price")
+    private BigDecimal takeoutPrice=BigDecimal.valueOf(0);
+
+    @TableField(value = "takeout_discount")
+    private BigDecimal takeoutDiscount=BigDecimal.valueOf(10);
+
+    @TableField(value = "takeout_pack_fee")
+    private BigDecimal takeoutPackFee=BigDecimal.valueOf(0.0);
+
+    @TableField(value = "is_cost_unit")
+    private Integer isCostUnit=0;
+
+    @TableField(value = "unit_conversion_rate")
+    private BigDecimal unitConversionRate=BigDecimal.valueOf(1);
+}

+ 286 - 0
src/main/java/com/sy/entity/Orders.java

@@ -0,0 +1,286 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "orders")
+public class Orders {
+    @TableId(value = "id", type = IdType.INPUT)
+    private String id;
+
+    @TableField(value = "\"number\"")
+    private String number;
+
+    @TableField(value = "total_fee")
+    private BigDecimal totalFee;
+
+    @TableField(value = "other_fee")
+    private BigDecimal otherFee;
+
+    @TableField(value = "reduce_fee")
+    private BigDecimal reduceFee;
+
+    @TableField(value = "buyer_discount")
+    private BigDecimal buyerDiscount;
+
+    @TableField(value = "pay_fee")
+    private BigDecimal payFee;
+
+    @TableField(value = "pay_status")
+    private Integer payStatus;
+
+    @TableField(value = "payment")
+    private String payment;
+
+    @TableField(value = "\"status\"")
+    private Integer status;
+
+    @TableField(value = "status_add")
+    private Integer statusAdd;
+
+    @TableField(value = "is_ring")
+    private Integer isRing;
+
+    @TableField(value = "people_num")
+    private Integer peopleNum;
+
+    @TableField(value = "remark")
+    private String remark;
+
+    @TableField(value = "buyer_id")
+    private String buyerId;
+
+    @TableField(value = "buyer_name")
+    private String buyerName;
+
+    @TableField(value = "buyer_pay")
+    private Integer buyerPay;
+
+    @TableField(value = "openid")
+    private String openid;
+
+    @TableField(value = "board_id")
+    private String boardId;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "shop_name")
+    private String shopName;
+
+    @TableField(value = "operator_id")
+    private String operatorId;
+
+    @TableField(value = "operator_name")
+    private String operatorName;
+
+    @TableField(value = "create_at")
+    private Date createAt;
+
+    @TableField(value = "update_at")
+    private Date updateAt;
+
+    @TableField(value = "pay_lock")
+    private Integer payLock;
+
+    @TableField(value = "pay_at")
+    private Date payAt;
+
+    @TableField(value = "\"source\"")
+    private Integer source;
+
+    @TableField(value = "reduce_opt_id")
+    private String reduceOptId;
+
+    @TableField(value = "reduce_opt_name")
+    private String reduceOptName;
+
+    @TableField(value = "canju_fee")
+    private BigDecimal canjuFee;
+
+    @TableField(value = "canju_name")
+    private String canjuName;
+
+    @TableField(value = "retreat_fee")
+    private BigDecimal retreatFee;
+
+    @TableField(value = "pay_fee_first")
+    private BigDecimal payFeeFirst;
+
+    @TableField(value = "goods_amount")
+    private BigDecimal goodsAmount;
+
+    @TableField(value = "is_huiyuan_xd")
+    private Integer isHuiyuanXd;
+
+    @TableField(value = "pay_select")
+    private String paySelect;
+
+    @TableField(value = "code")
+    private String code;
+
+    @TableField(value = "order_flag")
+    private String orderFlag;
+
+    @TableField(value = "open_staff_name")
+    private String openStaffName;
+
+    @TableField(value = "open_staff_id")
+    private String openStaffId;
+
+    @TableField(value = "fee_type")
+    private Integer feeType;
+
+    @TableField(value = "consume_rate")
+    private BigDecimal consumeRate;
+
+    @TableField(value = "timing_scheme_type")
+    private Integer timingSchemeType;
+
+    @TableField(value = "timing_scheme_id")
+    private String timingSchemeId;
+
+    @TableField(value = "open_at")
+    private Date openAt;
+
+    @TableField(value = "end_at")
+    private Date endAt;
+
+    @TableField(value = "is_minimum_charge")
+    private Integer isMinimumCharge;
+
+    @TableField(value = "minimum_charge")
+    private BigDecimal minimumCharge;
+
+    @TableField(value = "is_coupon")
+    private Integer isCoupon;
+
+    @TableField(value = "is_exchange_goods")
+    private Integer isExchangeGoods;
+
+    @TableField(value = "is_include_goods")
+    private Integer isIncludeGoods;
+
+    @TableField(value = "coupon_fee")
+    private BigDecimal couponFee;
+
+    @TableField(value = "withdrawal_rate")
+    private BigDecimal withdrawalRate;
+
+    @TableField(value = "withdrawal_fee")
+    private BigDecimal withdrawalFee;
+
+    @TableField(value = "withdrawal_service_charge")
+    private BigDecimal withdrawalServiceCharge;
+
+    @TableField(value = "order_discount")
+    private BigDecimal orderDiscount;
+
+    @TableField(value = "discount_opt_id")
+    private String discountOptId;
+
+    @TableField(value = "discount_opt_name")
+    private String discountOptName;
+
+    @TableField(value = "total_fee_tmp")
+    private BigDecimal totalFeeTmp;
+
+    @TableField(value = "yh_type")
+    private String yhType;
+
+    @TableField(value = "del_small_change")
+    private BigDecimal delSmallChange;
+
+    @TableField(value = "cumulative_other_fee")
+    private BigDecimal cumulativeOtherFee;
+
+    @TableField(value = "pay_person_type")
+    private String payPersonType;
+
+    @TableField(value = "pay_person_name")
+    private String payPersonName;
+
+    @TableField(value = "pay_person_id")
+    private String payPersonId;
+
+    @TableField(value = "merge_sub_pay_fee")
+    private BigDecimal mergeSubPayFee;
+
+    @TableField(value = "merge_sub_total_fee")
+    private BigDecimal mergeSubTotalFee;
+
+    @TableField(value = "merge_sub_other_fee")
+    private BigDecimal mergeSubOtherFee;
+
+    @TableField(value = "merge_sub_canju_fee")
+    private BigDecimal mergeSubCanjuFee;
+
+    @TableField(value = "merge_sub_retreat_fee")
+    private BigDecimal mergeSubRetreatFee;
+
+    @TableField(value = "area_board_name")
+    private String areaBoardName;
+
+    @TableField(value = "other_fee_tmp")
+    private BigDecimal otherFeeTmp;
+
+    @TableField(value = "area_id")
+    private String areaId;
+
+    @TableField(value = "member_name")
+    private String memberName;
+
+    @TableField(value = "member_phone")
+    private String memberPhone;
+
+    @TableField(value = "pay_lock_at")
+    private Date payLockAt;
+
+    @TableField(value = "timing_status")
+    private Integer timingStatus;
+
+    @TableField(value = "cancel_order_person")
+    private String cancelOrderPerson;
+
+    @TableField(value = "is_del_small_change")
+    private Integer isDelSmallChange;
+
+    @TableField(value = "pay_fee_tmp")
+    private BigDecimal payFeeTmp;
+
+    @TableField(value = "pay_fee_origin")
+    private BigDecimal payFeeOrigin;
+
+    @TableField(value = "merge_total_pay_fee")
+    private BigDecimal mergeTotalPayFee;
+
+    @TableField(value = "payment1_name")
+    private String payment1Name;
+
+    @TableField(value = "payment1_fee")
+    private BigDecimal payment1Fee;
+
+    @TableField(value = "payment2_name")
+    private String payment2Name;
+
+    @TableField(value = "payment2_fee")
+    private BigDecimal payment2Fee;
+
+    @TableField(value = "speed_type")
+    private String speedType;
+
+    @TableField(value = "is_third_ticket")
+    private Integer isThirdTicket;
+
+    @TableField(value = "third_ticket_name")
+    private String thirdTicketName;
+
+    @TableField(value = "third_ticket_fee")
+    private BigDecimal thirdTicketFee;
+}

+ 154 - 0
src/main/java/com/sy/entity/OrdersGoods.java

@@ -0,0 +1,154 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "orders_goods")
+public class OrdersGoods {
+    @TableId(value = "id", type = IdType.INPUT)
+    private String id;
+
+    @TableField(value = "order_id")
+    private String orderId;
+
+    @TableField(value = "goods_id")
+    private String goodsId;
+
+    @TableField(value = "goods_pic")
+    private String goodsPic;
+
+    @TableField(value = "goods_name")
+    private String goodsName;
+
+    @TableField(value = "goods_price_o")
+    private BigDecimal goodsPriceO;
+
+    @TableField(value = "goods_price")
+    private BigDecimal goodsPrice;
+
+    @TableField(value = "goods_total_price")
+    private BigDecimal goodsTotalPrice;
+
+    @TableField(value = "goods_unit")
+    private String goodsUnit;
+
+    @TableField(value = "num")
+    private Integer num;
+
+    @TableField(value = "isover")
+    private Integer isover;
+
+    @TableField(value = "isnum")
+    private Integer isnum;
+
+    @TableField(value = "print_way")
+    private Integer printWay;
+
+    @TableField(value = "print_count")
+    private Integer printCount;
+
+    @TableField(value = "remark")
+    private String remark;
+
+    @TableField(value = "cate_name")
+    private String cateName;
+
+    @TableField(value = "cate_id")
+    private String cateId;
+
+    @TableField(value = "create_at")
+    private Date createAt;
+
+    @TableField(value = "goods_amount")
+    private BigDecimal goodsAmount;
+
+    @TableField(value = "source")
+    private Integer source;
+
+    @TableField(value = "operator_id")
+    private String operatorId;
+
+    @TableField(value = "operator_name")
+    private String operatorName;
+
+    @TableField(value = "ismust")
+    private Integer ismust;
+
+    @TableField(value = "lx")
+    private Integer lx;
+
+    @TableField(value = "is_wait_call")
+    private Integer isWaitCall;
+
+    @TableField(value = "print_scheme")
+    private String printScheme;
+
+    @TableField(value = "goods_cheap_fee")
+    private BigDecimal goodsCheapFee;
+
+    @TableField(value = "items_con")
+    private String itemsCon;
+
+    @TableField(value = "draw_percent")
+    private BigDecimal drawPercent;
+
+    @TableField(value = "is_count_minimum_charge")
+    private Integer isCountMinimumCharge;
+
+    @TableField(value = "goods_remark")
+    private String goodsRemark;
+
+    @TableField(value = "goods_price_c")
+    private BigDecimal goodsPriceC;
+
+    @TableField(value = "goods_price_d")
+    private BigDecimal goodsPriceD;
+
+    @TableField(value = "goods_total_price_tmp")
+    private BigDecimal goodsTotalPriceTmp;
+
+    @TableField(value = "is_join_order_discount")
+    private Integer isJoinOrderDiscount;
+
+    @TableField(value = "goods_flag")
+    private String goodsFlag;
+
+    @TableField(value = "goods_total_price_o")
+    private BigDecimal goodsTotalPriceO;
+
+    @TableField(value = "is_use_stock")
+    private Integer isUseStock;
+
+    @TableField(value = "is_open_stock_system")
+    private Integer isOpenStockSystem;
+
+    @TableField(value = "cost_unit")
+    private String costUnit;
+
+    @TableField(value = "goods_amount_of_cost_unit")
+    private BigDecimal goodsAmountOfCostUnit;
+
+    @TableField(value = "sale_price")
+    private BigDecimal salePrice;
+
+    @TableField(value = "unit_conversion_rate")
+    private BigDecimal unitConversionRate;
+
+    @TableField(value = "is_give")
+    private Integer isGive;
+
+    @TableField(value = "tmp_goods_fee")
+    private BigDecimal tmpGoodsFee;
+
+    @TableField(value = "tmp_goods_total_fee")
+    private BigDecimal tmpGoodsTotalFee;
+
+    @TableField(value = "is_third_ticket")
+    private Integer isThirdTicket;
+}

+ 73 - 0
src/main/java/com/sy/entity/OrdersGoodsDel.java

@@ -0,0 +1,73 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "orders_goods_del")
+public class OrdersGoodsDel {
+    @TableId(value = "id", type = IdType.INPUT)
+    private String id;
+
+    @TableField(value = "pc")
+    private String pc;
+
+    @TableField(value = "order_id")
+    private String orderId;
+
+    @TableField(value = "goods_id")
+    private String goodsId;
+
+    @TableField(value = "goods_pic")
+    private String goodsPic;
+
+    @TableField(value = "goods_name")
+    private String goodsName;
+
+    @TableField(value = "goods_price")
+    private BigDecimal goodsPrice;
+
+    @TableField(value = "goods_total_price")
+    private BigDecimal goodsTotalPrice;
+
+    @TableField(value = "goods_amount")
+    private BigDecimal goodsAmount;
+
+    @TableField(value = "goods_unit")
+    private String goodsUnit;
+
+    @TableField(value = "print_scheme")
+    private String printScheme;
+
+    @TableField(value = "remark")
+    private String remark;
+
+    @TableField(value = "cate_name")
+    private String cateName;
+
+    @TableField(value = "cate_id")
+    private String cateId;
+
+    @TableField(value = "create_at")
+    private Date createAt;
+
+    @TableField(value = "lx")
+    private Integer lx;
+
+    @TableField(value = "items_con")
+    private String itemsCon;
+
+    @TableField(value = "goods_amount_of_cost_unit")
+    private BigDecimal goodsAmountOfCostUnit;
+
+    @TableField(value = "sale_price")
+    private BigDecimal salePrice;
+
+    @TableField(value = "is_use_stock")
+    private Integer isUseStock;
+}

+ 46 - 0
src/main/java/com/sy/entity/RetreatGoods.java

@@ -0,0 +1,46 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "retreat_goods")
+public class RetreatGoods {
+    @TableId(value = "id", type = IdType.INPUT)
+    private String id;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "order_id")
+    private String orderId;
+
+    @TableField(value = "pay_status")
+    private Integer payStatus;
+
+    @TableField(value = "retreat_remark")
+    private String retreatRemark;
+
+    @TableField(value = "pay_fee")
+    private String payFee;
+
+    @TableField(value = "fee")
+    private BigDecimal fee;
+
+    @TableField(value = "operator_id")
+    private String operatorId;
+
+    @TableField(value = "operator_name")
+    private String operatorName;
+
+    @TableField(value = "create_at")
+    private Date createAt;
+
+    @TableField(value = "refund_type")
+    private String refundType;
+}

+ 178 - 0
src/main/java/com/sy/entity/Shop.java

@@ -0,0 +1,178 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "shop")
+public class Shop {
+    @TableId(value = "id", type = IdType.INPUT)
+    private String id;
+
+    @TableField(value = "name")
+    private String name;
+
+    @TableField(value = "logo")
+    private String logo;
+
+    @TableField(value = "b_license")
+    private String bLicense;
+
+    @TableField(value = "license")
+    private String license;
+
+    @TableField(value = "contacts")
+    private String contacts;
+
+    @TableField(value = "tel")
+    private String tel;
+
+    @TableField(value = "mobile")
+    private String mobile;
+
+    @TableField(value = "province")
+    private String province;
+
+    @TableField(value = "city")
+    private String city;
+
+    @TableField(value = "area")
+    private String area;
+
+    @TableField(value = "address")
+    private String address;
+
+    @TableField(value = "lng")
+    private BigDecimal lng;
+
+    @TableField(value = "lat")
+    private BigDecimal lat;
+
+    @TableField(value = "shop_hours")
+    private String shopHours;
+
+    @TableField(value = "parking")
+    private String parking;
+
+    @TableField(value = "net")
+    private String net;
+
+    @TableField(value = "runing")
+    private Integer runing;
+
+    @TableField(value = "status")
+    private Integer status;
+
+    @TableField(value = "start_at")
+    private Date startAt;
+
+    @TableField(value = "end_at")
+    private Date endAt;
+
+    @TableField(value = "fee")
+    private BigDecimal fee;
+
+    @TableField(value = "url_admin")
+    private String urlAdmin;
+
+    @TableField(value = "url_web")
+    private String urlWeb;
+
+    @TableField(value = "remark")
+    private String remark;
+
+    @TableField(value = "boss_id")
+    private String bossId;
+
+    @TableField(value = "user_id")
+    private String userId;
+
+    @TableField(value = "operator_id")
+    private String operatorId;
+
+    @TableField(value = "operator_name")
+    private String operatorName;
+
+    @TableField(value = "create_at")
+    private Date createAt;
+
+    @TableField(value = "update_at")
+    private Date updateAt;
+
+    @TableField(value = "pro_city")
+    private String proCity;
+
+    @TableField(value = "\"online\"")
+    private Integer online;
+
+    @TableField(value = "last_on_time")
+    private Date lastOnTime;
+
+    @TableField(value = "last_off_time")
+    private Date lastOffTime;
+
+    @TableField(value = "commission")
+    private BigDecimal commission;
+
+    @TableField(value = "withdraw")
+    private BigDecimal withdraw;
+
+    @TableField(value = "admin_name")
+    private String adminName;
+
+    @TableField(value = "logo_m")
+    private String logoM;
+
+    @TableField(value = "appid")
+    private String appid;
+
+    @TableField(value = "off_line")
+    private Integer offLine;
+
+    @TableField(value = "is_work_time")
+    private Integer isWorkTime;
+
+    @TableField(value = "work_time")
+    private String workTime;
+
+    @TableField(value = "tk_open")
+    private Integer tkOpen;
+
+    @TableField(value = "tk_msg")
+    private String tkMsg;
+
+    @TableField(value = "tk_open_after")
+    private Integer tkOpenAfter;
+
+    @TableField(value = "tk_msg_after")
+    private String tkMsgAfter;
+
+    @TableField(value = "operation_mode")
+    private Integer operationMode;
+
+    @TableField(value = "shop_type")
+    private String shopType;
+
+    @TableField(value = "is_today_business")
+    private Integer isTodayBusiness;
+
+    @TableField(value = "is_annual_fee")
+    private Integer isAnnualFee;
+
+    @TableField(value = "is_allow_digital_currency")
+    private Integer isAllowDigitalCurrency;
+
+    @TableField(value = "is_allow_use_stock_system")
+    private Integer isAllowUseStockSystem;
+
+    @TableField(value = "is_allow_use_private_takeout")
+    private Integer isAllowUsePrivateTakeout;
+
+    @TableField(value = "markers")
+    private String markers;
+}

+ 73 - 0
src/main/java/com/sy/entity/ShopPayConfig.java

@@ -0,0 +1,73 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "shop_pay_config")
+public class ShopPayConfig {
+    @TableId(value = "id", type = IdType.INPUT)
+    private Integer id;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "third_company")
+    private String thirdCompany;
+
+    @TableField(value = "update_at")
+    private Date updateAt;
+
+    @TableField(value = "allinpay_appid")
+    private String allinpayAppid;
+
+    @TableField(value = "allinpay_cusid")
+    private String allinpayCusid;
+
+    @TableField(value = "allinpay_private_key")
+    private String allinpayPrivateKey;
+
+    @TableField(value = "allinpay_md5_key")
+    private String allinpayMd5Key;
+
+    @TableField(value = "allinpay_qrid")
+    private String allinpayQrid;
+
+    @TableField(value = "allinpay_rate")
+    private BigDecimal allinpayRate;
+
+    @TableField(value = "allinpay_settlement_time")
+    private String allinpaySettlementTime;
+
+    @TableField(value = "adapay_appid")
+    private String adapayAppid;
+
+    @TableField(value = "adapay_api_key")
+    private String adapayApiKey;
+
+    @TableField(value = "adapay_private_key")
+    private String adapayPrivateKey;
+
+    @TableField(value = "adapay_rate")
+    private BigDecimal adapayRate;
+
+    @TableField(value = "adapay_settlement_time")
+    private String adapaySettlementTime;
+
+    @TableField(value = "lakala_term_no")
+    private String lakalaTermNo;
+
+    @TableField(value = "lakala_merchant_no")
+    private String lakalaMerchantNo;
+
+    @TableField(value = "lakala_rate")
+    private BigDecimal lakalaRate;
+
+    @TableField(value = "lakala_settlement_time")
+    private String lakalaSettlementTime;
+}

+ 82 - 0
src/main/java/com/sy/entity/ShopPaymentRecord.java

@@ -0,0 +1,82 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "shop_payment_record")
+public class ShopPaymentRecord {
+    @TableId(value = "order_id", type = IdType.INPUT)
+    private String orderId;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "is_member")
+    private Integer isMember;
+
+    @TableField(value = "pay_person_type")
+    private String payPersonType;
+
+    @TableField(value = "pay_person_name")
+    private String payPersonName;
+
+    @TableField(value = "pay_at")
+    private Date payAt;
+
+    @TableField(value = "cash")
+    private BigDecimal cash;
+
+    @TableField(value = "bank")
+    private BigDecimal bank;
+
+    @TableField(value = "\"free\"")
+    private BigDecimal free;
+
+    @TableField(value = "zjdcodecard")
+    private BigDecimal zjdcodecard;
+
+    @TableField(value = "membercard")
+    private BigDecimal membercard;
+
+    @TableField(value = "keepamount")
+    private BigDecimal keepamount;
+
+    @TableField(value = "other")
+    private BigDecimal other;
+
+    @TableField(value = "weixin")
+    private BigDecimal weixin;
+
+    @TableField(value = "alipay")
+    private BigDecimal alipay;
+
+    @TableField(value = "yunshanfu")
+    private BigDecimal yunshanfu;
+
+    @TableField(value = "digitalcurrency")
+    private BigDecimal digitalcurrency;
+
+    @TableField(value = "allinpay")
+    private BigDecimal allinpay;
+
+    @TableField(value = "adapay")
+    private BigDecimal adapay;
+
+    @TableField(value = "return_cash")
+    private BigDecimal returnCash;
+
+    @TableField(value = "return_origin")
+    private BigDecimal returnOrigin;
+
+    @TableField(value = "create_at")
+    private Date createAt;
+
+    @TableField(value = "lakala")
+    private BigDecimal lakala;
+}

+ 30 - 0
src/main/java/com/sy/entity/Spec.java

@@ -0,0 +1,30 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import lombok.Data;
+
+@Data
+@TableName(value = "spec")
+public class Spec {
+    @TableId(value = "id", type = IdType.INPUT)
+    private Integer id;
+
+    @TableField(value = "\"name\"")
+    private String name;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "spec_price")
+    private BigDecimal specPrice;
+
+    @TableField(value = "spec_cate_id")
+    private Integer specCateId;
+
+    @TableField(value = "orders")
+    private Integer orders;
+}

+ 71 - 0
src/main/java/com/sy/entity/TRefundLog.java

@@ -0,0 +1,71 @@
+package com.sy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+@TableName(value = "t_refund_log")
+public class TRefundLog {
+    @TableId(value = "id", type = IdType.INPUT)
+    private Integer id;
+
+    @TableField(value = "shop_id")
+    private String shopId;
+
+    @TableField(value = "order_id")
+    private String orderId;
+
+    @TableField(value = "order_number")
+    private String orderNumber;
+
+    @TableField(value = "refund_fee")
+    private BigDecimal refundFee;
+
+    @TableField(value = "return_service_charge")
+    private BigDecimal returnServiceCharge;
+
+    @TableField(value = "trade_type")
+    private String tradeType;
+
+    @TableField(value = "payment")
+    private String payment;
+
+    @TableField(value = "refund_person")
+    private String refundPerson;
+
+    @TableField(value = "refund_status")
+    private Integer refundStatus;
+
+    @TableField(value = "refund_explain")
+    private String refundExplain;
+
+    @TableField(value = "refund_at")
+    private Timestamp refundAt;
+
+    @TableField(value = "third_name")
+    private String thirdName;
+
+    @TableField(value = "third_shop_flag")
+    private String thirdShopFlag;
+
+    @TableField(value = "refund_trade_no")
+    private String refundTradeNo;
+
+    @TableField(value = "origin_to_third_no")
+    private String originToThirdNo;
+
+    @TableField(value = "origin_third_back_no")
+    private String originThirdBackNo;
+
+    @TableField(value = "third_return_code")
+    private String thirdReturnCode;
+
+    @TableField(value = "third_return_msg")
+    private String thirdReturnMsg;
+}

+ 19 - 0
src/main/java/com/sy/entity/goodsVoDto/GoodsDelVo.java

@@ -0,0 +1,19 @@
+package com.sy.entity.goodsVoDto;
+
+import com.sy.entity.orderVoDto.OrdersGoodsRefundLogInfoDTO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.List;
+
+@Data
+public class GoodsDelVo {
+    private String refundId;
+    private String shopId;//收银系统门店id
+    private String orderId;//订单id
+    private BigDecimal count;//订单商品数量
+    private BigDecimal amount;//订单总金额
+    private Long refundTime;//订单创建时间
+    private List<OrdersGoodsRefundLogInfoDTO> goodsInfo;
+}

+ 13 - 0
src/main/java/com/sy/entity/goodsVoDto/GoodsInfoVo.java

@@ -0,0 +1,13 @@
+package com.sy.entity.goodsVoDto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GoodsInfoVo {
+    private String goodsId;
+    private BigDecimal price;
+    private BigDecimal count;
+    private BigDecimal amount;
+}

+ 28 - 0
src/main/java/com/sy/entity/goodsVoDto/GoodsVoInParameter.java

@@ -0,0 +1,28 @@
+package com.sy.entity.goodsVoDto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GoodsVoInParameter {
+
+    private String shopId;//收银系统门店唯一id
+
+    private String goodsId;//青港商品id
+
+    private String goodsName;//商品名称
+
+    private String imgUrl;//商品主图url
+
+    private String barCode;//商品条码
+
+    private String specs;//商品规格
+
+    private BigDecimal salePrice;//商品单价
+
+    private BigDecimal stock;//商品库存
+
+    private Integer status;//商品状态
+
+}

+ 18 - 0
src/main/java/com/sy/entity/orderVoDto/OrderInParameter.java

@@ -0,0 +1,18 @@
+package com.sy.entity.orderVoDto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+
+@Data
+public class OrderInParameter {
+
+
+    private Long startTimestamp;
+
+    private Long endTimestamp;
+
+    private String shopId;
+}

+ 23 - 0
src/main/java/com/sy/entity/orderVoDto/OrdersDTO.java

@@ -0,0 +1,23 @@
+package com.sy.entity.orderVoDto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OrdersDTO {
+
+    //订单号
+    private String orderId;
+    //订单创建时间  毫秒时间戳
+    private Long orderCreateTime;
+    //平台抽成费率
+    private BigDecimal platformSeparateRate;
+    //订单总金额
+    private BigDecimal amount;
+    //门店收入
+    private BigDecimal shopIncome;
+    //平台分成收入
+    private BigDecimal platformIncome;
+
+}

+ 13 - 0
src/main/java/com/sy/entity/orderVoDto/OrdersGoodsRefundLogInfoDTO.java

@@ -0,0 +1,13 @@
+package com.sy.entity.orderVoDto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OrdersGoodsRefundLogInfoDTO {
+    private String goodsId;//青港系统商品id
+    private BigDecimal price;//退货价格	实际退款的单价
+    private BigDecimal count;//商品数量
+    private BigDecimal amount;//退款总金额
+}

+ 33 - 0
src/main/java/com/sy/entity/orderVoDto/OrdersStatementOfAccount.java

@@ -0,0 +1,33 @@
+package com.sy.entity.orderVoDto;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class OrdersStatementOfAccount {
+    //店铺id
+    private String shopId;
+    //统计日期
+    private String statisticsDate;
+    //统计时间段内总订单数量
+    private Integer orderCount;
+    //销售总额
+    private BigDecimal amount;
+    //线上支付总额	微信、支付宝等线上渠道
+    private BigDecimal  onlineAmount;
+    //现金总收取	现金渠道
+    private BigDecimal offlineAmount;
+    //平台抽成费率
+    private BigDecimal platformSeparateRate;
+    //平台分润总额
+    private BigDecimal platformAmount;
+    //门店营收总额
+    private BigDecimal shopAmount;
+
+    List<OrdersDTO> orderDetailList;
+}

+ 26 - 0
src/main/java/com/sy/entity/orderVoDto/OrdersVo.java

@@ -0,0 +1,26 @@
+package com.sy.entity.orderVoDto;
+
+
+import com.sy.entity.Orders;
+import com.sy.entity.OrdersGoods;
+import com.sy.entity.goodsVoDto.GoodsInfoVo;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.List;
+
+@Data
+public class OrdersVo {
+
+    private String orderId;
+    private String shopId;
+    private BigDecimal count;
+    private BigDecimal amount;
+    private BigDecimal payAmount;
+    private String createTime;
+    private String paymentTime;
+    private String paymentType;
+    private String paymentUser;
+    private List<GoodsInfoVo> goodsInfo;
+}

+ 537 - 0
src/main/java/com/sy/enums/ResultCode.java

@@ -0,0 +1,537 @@
+package com.sy.enums;
+
+/**
+ * 返回状态码
+ * 第一位 1:商品;2:用户;3:交易,4:促销,5:店铺,6:页面,7:设置,8:其他
+ *
+ * @author Chopper
+ * @since 2020/4/8 1:36 下午
+ */
+public enum ResultCode {
+
+    /**
+     * 成功状态码
+     */
+    SUCCESS(200, "成功"),
+
+    /**
+     * 失败返回码
+     */
+    ERROR(400, "服务器繁忙,请稍后重试"),
+
+    /**
+     * 失败返回码
+     */
+    DEMO_SITE_EXCEPTION(4001, "演示站点禁止使用"),
+    /**
+     * 参数异常
+     */
+    PARAMS_ERROR(4002, "参数异常"),
+
+
+    /**
+     * 系统异常
+     */
+    WECHAT_CONNECT_NOT_EXIST(1001, "微信联合登录未配置"),
+    VERIFICATION_EXIST(1002, "验证码服务异常"),
+    LIMIT_ERROR(1003, "访问过于频繁,请稍后再试"),
+    ILLEGAL_REQUEST_ERROR(1004, "非法请求,请重新刷新页面操作"),
+    IMAGE_FILE_EXT_ERROR(1005, "不支持图片格式"),
+    FILE_NOT_EXIST_ERROR(1011, "上传文件不能为空"),
+    FILE_TYPE_NOT_SUPPORT(1010, "不支持上传的文件类型!"),
+    PLATFORM_NOT_SUPPORTED_IM(1006, "平台未开启IM"),
+    STORE_NOT_SUPPORTED_IM(1007, "店铺未开启IM"),
+    UNINITIALIZED_PASSWORD(1008, "非初始化密码,无法进行初始化设置"),
+    /**
+     * 分类
+     */
+    CATEGORY_NOT_EXIST(10001, "商品分类不存在"),
+    CATEGORY_NAME_IS_EXIST(10002, "该分类名称已存在"),
+    CATEGORY_PARENT_NOT_EXIST(10003, "该分类名称已存在"),
+    CATEGORY_BEYOND_THREE(10004, "最多为三级分类,添加失败"),
+    CATEGORY_HAS_CHILDREN(10005, "此类别下存在子类别不能删除"),
+    CATEGORY_HAS_GOODS(10006, "此类别下存在商品不能删除"),
+    CATEGORY_SAVE_ERROR(10007, "此类别下存在商品不能删除"),
+    CATEGORY_PARAMETER_NOT_EXIST(10012, "分类绑定参数组不存在"),
+    CATEGORY_PARAMETER_SAVE_ERROR(10008, "分类绑定参数组添加失败"),
+    CATEGORY_PARAMETER_UPDATE_ERROR(10009, "分类绑定参数组添加失败"),
+    CATEGORY_DELETE_FLAG_ERROR(10010, "子类状态不能与父类不一致!"),
+    CATEGORY_COMMISSION_RATE_ERROR(10011, "分类的佣金不正确!"),
+
+    /**
+     * 商品
+     */
+    GOODS_ERROR(11001, "商品异常,请稍后重试"),
+    GOODS_NOT_EXIST(11001, "商品已下架"),
+    GOODS_NAME_ERROR(11002, "商品名称不正确,名称应为2-50字符"),
+    GOODS_UNDER_ERROR(11003, "商品下架失败"),
+    GOODS_UPPER_ERROR(11004, "商品上架失败"),
+    GOODS_AUTH_ERROR(11005, "商品审核失败"),
+    POINT_GOODS_ERROR(11006, "积分商品业务异常,请稍后重试"),
+    POINT_GOODS_NOT_EXIST(11020, "积分商品不存在"),
+    POINT_GOODS_CATEGORY_EXIST(11021, "当前积分商品分类已存在"),
+    GOODS_SKU_SN_ERROR(11007, "商品SKU货号不能为空"),
+    GOODS_SKU_PRICE_ERROR(11008, "商品SKU价格不能小于等于0"),
+    GOODS_SKU_COST_ERROR(11009, "商品SKU成本价不能小于等于0"),
+    GOODS_SKU_WEIGHT_ERROR(11010, "商品重量不能为负数"),
+    GOODS_SKU_QUANTITY_ERROR(11011, "商品库存数量不能为负数"),
+    GOODS_SKU_QUANTITY_NOT_ENOUGH(11011, "商品库存不足"),
+    MUST_HAVE_GOODS_SKU(11012, "规格必须要有一个!"),
+    MUST_HAVE_SALES_MODEL(11022, "销售模式为批发时必须要有批发规则!"),
+
+    HAVE_INVALID_SALES_MODEL(11023, "批发规则存在小于等于0的无效数据!"),
+    MUST_HAVE_GOODS_SKU_VALUE(11024, "规格值不能为空!"),
+    DO_NOT_MATCH_WHOLESALE(11025, "批发商品购买数量不能低于起拍量!"),
+    GOODS_NOT_ERROR(11026, "商品不存在"),
+
+    GOODS_PARAMS_ERROR(11013, "商品参数错误,刷新后重试"),
+    PHYSICAL_GOODS_NEED_TEMP(11014, "实物商品需选择配送模板"),
+    VIRTUAL_GOODS_NOT_NEED_TEMP(11015, "虚拟商品无需选择配送模板"),
+    GOODS_NOT_EXIST_STORE(11017, "当前用户无权操作此商品"),
+    GOODS_TYPE_ERROR(11016, "需选择商品类型"),
+
+    /**
+     * 参数
+     */
+    PARAMETER_SAVE_ERROR(12001, "参数添加失败"),
+    PARAMETER_UPDATE_ERROR(12002, "参数编辑失败"),
+
+    /**
+     * 规格
+     */
+    SPEC_SAVE_ERROR(13001, "规格修改失败"),
+    SPEC_UPDATE_ERROR(13002, "规格修改失败"),
+    SPEC_DELETE_ERROR(13003, "分类已经绑定此规格,请先解除关联"),
+
+    /**
+     * 品牌
+     */
+    BRAND_SAVE_ERROR(14001, "品牌添加失败"),
+    BRAND_UPDATE_ERROR(14002, "品牌修改失败"),
+    BRAND_DISABLE_ERROR(14003, "品牌禁用失败"),
+    BRAND_DELETE_ERROR(14004, "品牌删除失败"),
+    BRAND_NAME_EXIST_ERROR(20002, "品牌名称重复!"),
+    BRAND_USE_DISABLE_ERROR(20003, "分类已经绑定品牌,请先解除关联"),
+    BRAND_BIND_GOODS_ERROR(20005, "品牌已经绑定商品,请先解除关联"),
+    BRAND_NOT_EXIST(20004, "品牌不存在"),
+
+    /**
+     * 用户
+     */
+    USER_EDIT_SUCCESS(20001, "用户修改成功"),
+    USER_NOT_EXIST(20002, "用户不存在"),
+    USER_NOT_LOGIN(20003, "用户未登录"),
+    USER_AUTH_EXPIRED(20004, "用户已退出,请重新登录"),
+    USER_AUTHORITY_ERROR(20005, "权限不足"),
+    USER_CONNECT_LOGIN_ERROR(20006, "未找到登录信息"),
+    USER_EXIST(20008, "该用户名或手机号已被注册"),
+    USER_PHONE_NOT_EXIST(20009, "手机号不存在"),
+    USER_PASSWORD_ERROR(20010, "密码不正确"),
+    USER_NOT_PHONE(20011, "非当前用户的手机号"),
+    USER_CONNECT_ERROR(20012, "联合第三方登录,授权信息错误"),
+    USER_RECEIPT_REPEAT_ERROR(20013, "会员发票信息重复"),
+    USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"),
+    USER_EDIT_ERROR(20015, "用户修改失败"),
+    USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"),
+    USER_COLLECTION_EXIST(20017, "无法重复收藏"),
+    USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"),
+    USER_NOT_BINDING(20020, "未绑定用户"),
+    USER_AUTO_REGISTER_ERROR(20021, "自动注册失败,请稍后重试"),
+    USER_OVERDUE_CONNECT_ERROR(20022, "授权信息已过期,请重新授权/登录"),
+    USER_CONNECT_BANDING_ERROR(20023, "当前联合登陆方式,已绑定其他账号,需进行解绑操作"),
+    USER_CONNECT_NOT_EXIST_ERROR(20024, "暂无联合登陆信息,无法实现一键注册功能,请点击第三方登录进行授权"),
+    USER_POINTS_ERROR(20024, "用户积分不足"),
+    CLERK_SUPPER(20025, "店主无法操作"),
+    CLERK_SAVE_ERROR(20026, "店员保存失败"),
+    CLERK_NOT_FOUND_ERROR(20027, "店员不存在"),
+    USER_STATUS_ERROR(20028, "用户已禁用"),
+    CLERK_USER_ERROR(20029, "此账户已经绑定其他店铺"),
+    CLERK_ALREADY_EXIT_ERROR(20030, "店员已经存在"),
+    CLERK_DISABLED_ERROR(20031, "店员已禁用"),
+    CLERK_CURRENT_SUPPER(20032, "无法删除当前登录店员"),
+    CANT_EDIT_CLERK_SHOPKEEPER(20033, "无法在店员管理编辑店员信息"),
+    /**
+     * 权限
+     */
+    PERMISSION_DEPARTMENT_ROLE_ERROR(21001, "角色已绑定部门,请逐个删除"),
+    PERMISSION_USER_ROLE_ERROR(21002, "角色已绑定管理员,请逐个删除"),
+    PERMISSION_MENU_ROLE_ERROR(21003, "菜单已绑定角色,请先删除或编辑角色"),
+    PERMISSION_DEPARTMENT_DELETE_ERROR(21004, "部门已经绑定管理员,请先删除或编辑管理员"),
+    PERMISSION_BEYOND_TEN(21005, "最多可以设置10个角色"),
+    PERMISSION_NOT_FOUND_ERROR(21006, "部门不存在"),
+    PERMISSION_ROLE_NOT_FOUND_ERROR(21007, "角色不存在"),
+    PERMISSION_CLERK_BAND_ERROR(21008, "此手机号码已绑定其他店铺 "),
+
+
+    /**
+     * 分销
+     */
+    DISTRIBUTION_CLOSE(22000, "分销功能关闭"),
+    DISTRIBUTION_NOT_EXIST(22001, "分销员不存在"),
+    DISTRIBUTION_IS_APPLY(22002, "分销员已申请,无需重复提交"),
+    DISTRIBUTION_AUDIT_ERROR(22003, "审核分销员失败"),
+    DISTRIBUTION_RETREAT_ERROR(22004, "分销员清退失败"),
+    DISTRIBUTION_CASH_NOT_EXIST(22005, "分销员提现记录不存在"),
+    DISTRIBUTION_GOODS_DOUBLE(22006, "不能重复添加分销商品"),
+    DISTRIBUTION_IS_NO_APPLY(22007, "分销员未通过审核,不可修改渠道号和佣金比例"),
+
+    /**
+     * 购物车
+     */
+    CART_ERROR(30001, "读取结算页的购物车异常"),
+    CART_NUM_ERROR(30010, "购买数量必须大于0"),
+    CART_PINTUAN_NOT_EXIST_ERROR(30002, "拼团活动已关闭,请稍后重试"),
+    CART_PINTUAN_LIMIT_ERROR(30003, "购买数量超过拼团活动限制数量"),
+    SHIPPING_NOT_APPLY(30005, "购物商品不支持当前收货地址配送"),
+
+    /**
+     * 订单
+     */
+    ORDER_ERROR(31001, "创建订单异常,请稍后重试"),
+    ORDER_NOT_EXIST(31002, "订单不存在"),
+    ORDER_DELIVERED_ERROR(31003, "订单状态错误,无法进行确认收货"),
+    ORDER_UPDATE_PRICE_ERROR(31004, "已支付的订单不能修改金额"),
+    ORDER_LOGISTICS_ERROR(31005, "物流错误"),
+    ORDER_DELIVER_ERROR(31006, "物流错误"),
+    ORDER_NOT_USER(31007, "非当前会员的订单"),
+    ORDER_TAKE_ERROR(31008, "当前订单无法核销"),
+    MEMBER_ADDRESS_NOT_EXIST(31009, "订单无收货地址,请先配置收货地址"),
+    STORE_ADDRESS_NOT_EXIST(31009, "订单没有自提地址,请先选择自提地址"),
+    ORDER_DELIVER_NUM_ERROR(31010, "没有待发货的订单"),
+    ORDER_NOT_SUPPORT_DISTRIBUTION(31011, "购物车中包含不支持配送的商品,请重新选择收货地址,或者重新选择商品"),
+    ORDER_NOT_EXIST_VALID(31041, "购物车中无有效商品,请检查购物车内商品,或者重新选择商品"),
+    ORDER_CAN_NOT_CANCEL(31012, "当前订单状态不可取消"),
+    ORDER_BATCH_DELIVER_ERROR(31013, "批量发货,文件读取失败"),
+    ORDER_ITEM_NOT_EXIST(31014, "当前订单项不存在!"),
+    POINT_NOT_ENOUGH(31015, "当前会员积分不足购买当前积分商品!"),
+    ORDER_LABEL_ORDER_ERROR(31016, "订单不能打印电子面单"),
+    ORDER_PRICE_ERROR(31017,"订单金额不能小于等于0"),
+    ORDER_PACKAGE_NOT_EXIST(31017, "当前订单包裹不存在!"),
+
+
+    /**
+     * 支付
+     */
+    PAY_UN_WANTED(32000, "当前订单不需要付款,返回订单列表等待系统订单出库即可"),
+    PAY_SUCCESS(32001, "支付成功"),
+    PAY_INCONSISTENT_ERROR(32002, "付款金额和应付金额不一致"),
+    PAY_DOUBLE_ERROR(32003, "订单已支付,不能再次进行支付"),
+    PAY_CASHIER_ERROR(32004, "收银台信息获取错误"),
+    PAY_ERROR(32005, "支付业务异常,请稍后重试"),
+    PAY_BAN(32006, "当前订单不需要付款,请返回订单列表重新操作"),
+    PAY_PARTIAL_ERROR(32007, "该订单已部分支付,请前往订单中心进行支付"),
+    PAY_NOT_SUPPORT(32008, "支付暂不支持"),
+    PAY_CLIENT_TYPE_ERROR(32009, "错误的客户端"),
+    PAY_POINT_ENOUGH(32010, "积分不足,不能兑换"),
+    PAY_NOT_EXIST_ORDER(32011, "支付订单不存在"),
+    CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"),
+    RECHARGE_PRICE_ERROR(32013, "充值金额错误"),
+
+    /**
+     * 售后
+     */
+    AFTER_SALES_NOT_PAY_ERROR(33001, "当前订单未支付,不能申请售后"),
+    AFTER_SALES_CANCEL_ERROR(33002, "当前售后单无法取消"),
+    AFTER_SALES_BAN(33003, "订单状态不允许申请售后,请联系平台或商家"),
+    AFTER_SALES_DOUBLE_ERROR(33004, "售后已审核,无法重复操作"),
+    AFTER_SALES_LOGISTICS_ERROR(33005, "物流公司错误,请重新选择"),
+    AFTER_STATUS_ERROR(33006, "售后状态错误,请刷新页面"),
+    RETURN_MONEY_OFFLINE_BANK_ERROR(33007, "当账号类型为银行转账时,银行信息不能为空"),
+    AFTER_SALES_PRICE_ERROR(33004, "申请退款金额错误"),
+    AFTER_GOODS_NUMBER_ERROR(33008, "申请售后商品数量错误"),
+
+    /**
+     * 投诉
+     */
+    COMPLAINT_ORDER_ITEM_EMPTY_ERROR(33100, "订单不存在"),
+    COMPLAINT_SKU_EMPTY_ERROR(33101, "商品已下架,如需投诉请联系平台客服"),
+    COMPLAINT_ERROR(33102, "投诉异常,请稍后重试"),
+    COMPLAINT_NOT_EXIT(33103, "当前投诉记录不存在"),
+    COMPLAINT_ARBITRATION_RESULT_ERROR(33104, "结束订单投诉时,仲裁结果不能为空"),
+    COMPLAINT_APPEAL_CONTENT_ERROR(33105, "商家申诉时,申诉内容不能为空"),
+    COMPLAINT_CANCEL_ERROR(33106, "申诉已完成,不需要进行取消申诉操作"),
+
+
+    /**
+     * 余额
+     */
+    WALLET_NOT_EXIT_ERROR(34000, "钱包不存在,请联系管理员"),
+    WALLET_INSUFFICIENT(34001, "余额不足以支付订单,请充值!"),
+    WALLET_WITHDRAWAL_INSUFFICIENT(34002, "可提现金额不足!"),
+    WALLET_WITHDRAWAL_FROZEN_AMOUNT_INSUFFICIENT(34006, "冻结金额不足,无法处理提现申请请求!"),
+    WALLET_ERROR_INSUFFICIENT(34003, "零钱提现失败!"),
+    WALLET_REMARK_ERROR(34004, "请填写审核备注!"),
+    WALLET_EXIT_ERROR(34005, "钱包已存在,无法重复创建"),
+    WALLET_APPLY_ERROR(34006, "提现申请异常!"),
+    WALLET_APPLY_MIN_PRICE_ERROR(34007, "提现最低提现金额错误!"),
+    WALLET_WITHDRAWAL_AMOUNT_ERROR(34008, "申请提现金额异常!"),
+    /**
+     * 评价
+     */
+    EVALUATION_DOUBLE_ERROR(35001, "无法重复提交评价"),
+
+    /**
+     * 活动
+     */
+    PROMOTION_GOODS_NOT_EXIT(40000, "当前促销商品不存在!"),
+    PROMOTION_GOODS_QUANTITY_NOT_EXIT(40020, "当前促销商品库存不足!"),
+    PROMOTION_GOODS_DO_NOT_JOIN_WHOLESALE(40050, "批发商品无法参加促销"),
+    PROMOTION_SAME_ACTIVE_EXIST(40001, "活动时间内已存在同类活动,请选择关闭、删除当前时段的活动"),
+    PROMOTION_START_TIME_ERROR(40002, "活动起始时间不能小于当前时间"),
+    PROMOTION_END_TIME_ERROR(40003, "活动结束时间不能小于当前时间"),
+    PROMOTION_TIME_ERROR(40004, "活动起始时间必须大于结束时间"),
+    PROMOTION_TIME_NOT_EXIST(40011, "活动起始时间和活动结束时间不能为空"),
+    PROMOTION_SAME_ERROR(40005, "当前时间段已存在相同活动!"),
+    PROMOTION_GOODS_ERROR(40006, "请选择要参与活动的商品"),
+    PROMOTION_STATUS_END(40007, "当前活动已停止"),
+    PROMOTION_UPDATE_ERROR(40008, "当前活动已开始/结束,无法编辑!"),
+    PROMOTION_ACTIVITY_GOODS_ERROR(40009, "当前活动已经开始无法添加商品"),
+    PROMOTION_ACTIVITY_ERROR(400010, "当前促销活动不存在"),
+    PROMOTION_LOG_EXIST(40011, "活动已参加,已发重复参加"),
+    APPLY_END_TIME_ERROR(40012, "参与截至时间不能小于当前时间,不能大于活动开始时间"),
+
+    /**
+     * 优惠券
+     */
+    COUPON_LIMIT_ERROR(41000, "超出领取限制"),
+    COUPON_EDIT_STATUS_SUCCESS(41001, "修改状态成功!"),
+    COUPON_CANCELLATION_SUCCESS(41002, "会员优惠券作废成功"),
+    COUPON_EXPIRED(41003, "优惠券已使用/已过期,不能使用"),
+    COUPON_EDIT_STATUS_ERROR(41004, "优惠券修改状态失败!"),
+    COUPON_RECEIVE_ERROR(41005, "当前优惠券已经被领取完了,下次要早点来哦"),
+    COUPON_NUM_INSUFFICIENT_ERROR(41006, "优惠券剩余领取数量不足"),
+    COUPON_NOT_EXIST(41007, "当前优惠券不存在"),
+    COUPON_LIMIT_NUM_LESS_THAN_0(41008, "领取限制数量不能为负数"),
+    COUPON_LIMIT_GREATER_THAN_PUBLISH(41009, "领取限制数量超出发行数量"),
+    COUPON_DISCOUNT_ERROR(41010, "优惠券折扣必须小于10且大于0"),
+    COUPON_SCOPE_TYPE_GOODS_ERROR(41011, "当前关联范围类型为指定商品时,商品列表不能为空"),
+    COUPON_SCOPE_TYPE_CATEGORY_ERROR(41012, "当前关联范围类型为部分商品分类时,范围关联的id不能为空"),
+    COUPON_SCOPE_TYPE_STORE_ERROR(41013, "当前关联范围类型为部分店铺分类时,范围关联的id不能为空"),
+    COUPON_SCOPE_ERROR(41014, "指定商品范围关联id无效!"),
+    COUPON_MEMBER_NOT_EXIST(41015, "没有当前会员优惠券"),
+    COUPON_MEMBER_STATUS_ERROR(41016, "当前会员优惠券已过期/作废无法变更状态!"),
+    COUPON_RANGE_ERROR(41017, "优惠券使用时间范围错误"),
+
+    SPECIAL_CANT_USE(41019, "特殊商品不能使用优惠券,不能使用"),
+
+    COUPON_SAVE_ERROR(41020, "保存优惠券失败"),
+    COUPON_DELETE_ERROR(41021, "删除优惠券失败"),
+    COUPON_ACTIVITY_NOT_EXIST(41022, "当前优惠券活动不存在"),
+    COUPON_ACTIVITY_SAVE_ERROR(41023, "保存优惠券活动失败"),
+    COUPON_ACTIVITY_MAX_NUM(41024, "优惠券活动赠券数量最多为5"),
+
+    COUPON_DO_NOT_RECEIVER(41030, "当前优惠券不允许主动领取"),
+
+    /**
+     * 拼团
+     */
+    PINTUAN_MANUAL_OPEN_SUCCESS(42001, "手动开启拼团活动成功"),
+    PINTUAN_MANUAL_CLOSE_SUCCESS(42002, "手动关闭拼团活动成功"),
+    PINTUAN_ADD_SUCCESS(42003, "添加拼团活动成功"),
+    PINTUAN_EDIT_SUCCESS(42004, "修改拼团活动成功"),
+    PINTUAN_DELETE_SUCCESS(42005, "删除拼团活动成功"),
+    PINTUAN_MANUAL_OPEN_ERROR(42006, "手动开启拼团活动失败"),
+    PINTUAN_MANUAL_CLOSE_ERROR(42007, "手动关闭拼团活动失败"),
+    PINTUAN_ADD_ERROR(42008, "添加拼团活动失败"),
+    PINTUAN_EDIT_ERROR(42009, "修改拼团活动失败"),
+    PINTUAN_EDIT_ERROR_ITS_OPEN(42019, "拼团活动已开启,无法修改拼团活动!"),
+    PINTUAN_DELETE_ERROR(42010, "删除拼团活动失败"),
+    PINTUAN_JOIN_ERROR(42011, "不能参与自己发起的拼团活动!"),
+    PINTUAN_LIMIT_NUM_ERROR(42012, "购买数量超过拼团活动限制数量!"),
+    PINTUAN_NOT_EXIST_ERROR(42013, "当前拼团活动不存在!"),
+    PINTUAN_GOODS_NOT_EXIST_ERROR(42014, "当前拼团商品不存在!"),
+
+    /**
+     * 满额活动
+     */
+    FULL_DISCOUNT_EDIT_SUCCESS(43001, "修改满优惠活动成功"),
+    FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"),
+    FULL_DISCOUNT_MODIFY_ERROR(43003, "当前编辑的满优惠活动已经开始或者已经结束,无法修改"),
+    FULL_DISCOUNT_NOT_EXIST_ERROR(43004, "当前要操作的满优惠活动不存在!"),
+    FULL_DISCOUNT_WAY_ERROR(43005, "请选择一种优惠方式!"),
+    FULL_DISCOUNT_GIFT_ERROR(43006, "请选择赠品!"),
+    FULL_DISCOUNT_COUPON_TIME_ERROR(43007, "赠送的优惠券有效时间必须在活动时间之内"),
+    FULL_DISCOUNT_MONEY_ERROR(43008, "请填写满减金额"),
+    FULL_DISCOUNT_MONEY_GREATER_THAN_MINUS(43009, "满减金额不能大于优惠门槛"),
+    FULL_RATE_NUM_ERROR(43010, "请填写打折数值"),
+
+    /**
+     * 直播
+     */
+    STODIO_GOODS_EXIST_ERROR(44001, "直播商品已存在"),
+    COMMODITY_ERROR(44002, "添加直播商品失败"),
+
+    /**
+     * 秒杀
+     */
+    SECKILL_NOT_START_ERROR(45000, "今日没有限时抢购活动,请明天再来看看吧。"),
+    SECKILL_NOT_EXIST_ERROR(45001, "当前参与的秒杀活动不存在!"),
+    SECKILL_APPLY_NOT_EXIST_ERROR(45010, "当前参与的秒杀活动不存在!"),
+    SECKILL_UPDATE_ERROR(45002, "当前秒杀活动活动已经开始,无法修改!"),
+    SECKILL_PRICE_ERROR(45003, "活动价格不能大于商品原价"),
+    SECKILL_TIME_ERROR(45004, "时刻参数异常"),
+    SECKILL_DELETE_ERROR(45005, "该秒杀活动活动的状态不能删除"),
+    SECKILL_OPEN_ERROR(45010, "该秒杀活动活动的状态不能删除"),
+    SECKILL_CLOSE_ERROR(45006, "该秒杀活动活动的状态不能关闭"),
+
+
+    /**
+     * 优惠券活动
+     */
+    COUPON_ACTIVITY_START_TIME_ERROR(46001, "活动时间小于当前时间,不能进行编辑删除操作"),
+    COUPON_ACTIVITY_MEMBER_ERROR(46002, "指定精准发券则必须指定会员,会员不可以为空"),
+    COUPON_ACTIVITY_ITEM_ERROR(46003, "优惠券活动必须指定优惠券,不能为空"),
+    COUPON_ACTIVITY_ITEM_MUST_NUM_ERROR(46004, "优惠券活动最多指定10个优惠券"),
+    COUPON_ACTIVITY_ITEM_NUM_ERROR(46005, "赠券数量必须大于0"),
+    COUPON_ACTIVITY_ITEM_NUM_MAX_VALUE_2(46006, "赠券数量最大为2"),
+
+    /**
+     * 其他促销
+     */
+    MEMBER_SIGN_REPEAT(47001, "请勿重复签到"),
+    POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "活动库存数量不能高于商品库存"),
+    POINT_GOODS_ACTIVE_STOCK_INSUFFICIENT(47003, "积分商品库存不足"),
+
+    /**
+     * 砍价活动
+     */
+    KANJIA_GOODS_ACTIVE_STOCK_ERROR(48001, "活动库存数量不能高于商品库存"),
+    KANJIA_GOODS_ACTIVE_PRICE_ERROR(48002, "最低购买金额不能高于商品金额"),
+    KANJIA_GOODS_ACTIVE_HIGHEST_PRICE_ERROR(48003, "最高砍价金额不能为0且不能超过商品金额"),
+    KANJIA_GOODS_ACTIVE_LOWEST_PRICE_ERROR(48004, "最低砍价金额不能为0且不能超过商品金额"),
+    KANJIA_GOODS_ACTIVE_HIGHEST_LOWEST_PRICE_ERROR(48005, "最低砍价金额不能高于最高砍价金额"),
+    KANJIA_GOODS_ACTIVE_SETTLEMENT_PRICE_ERROR(48006, "结算金额不能高于商品金额"),
+    KANJIA_GOODS_DELETE_ERROR(48007, "删除砍价商品异常"),
+    KANJIA_GOODS_UPDATE_ERROR(48012, "更新砍价商品异常"),
+    KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"),
+    KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"),
+    KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"),
+    KANJIA_ACTIVITY_NOT_PASS_ERROR(48011, "当前砍价未满足条件,不能进行购买"),
+    KANJIA_NUM_BUY_ERROR(48012, "砍价商品购买数量不正确"),
+    /**
+     * 店铺
+     */
+
+    STORE_NOT_EXIST(50001, "此店铺不存在"),
+    STORE_NAME_EXIST_ERROR(50002, "店铺名称已存在!"),
+    STORE_APPLY_DOUBLE_ERROR(50003, "已经拥有店铺!"),
+    STORE_NOT_OPEN(50004, "该会员未开通店铺"),
+    STORE_NOT_LOGIN_ERROR(50005, "未登录店铺"),
+    STORE_CLOSE_ERROR(50006, "店铺关闭,请联系管理员"),
+    STORE_DELIVER_GOODS_ADDRESS(50007,"请填写商家发货地址"),
+    FREIGHT_TEMPLATE_NOT_EXIST(50010, "当前模版不存在"),
+    STORE_STATUS_ERROR(50011, "店铺在申请中或审核中,请勿重复操作"),
+    STORE_DELIVER_ADDRESS_EXIST(50012,"请填写发货地址"),
+
+    /**
+     * 结算单
+     */
+    BILL_CHECK_ERROR(51001, "只有已出账结算单可以核对"),
+    BILL_COMPLETE_ERROR(51002, "只有已审核结算单可以支付"),
+
+    /**
+     * 文章
+     */
+    ARTICLE_CATEGORY_NAME_EXIST(60001, "文章分类名称已存在"),
+    ARTICLE_CATEGORY_PARENT_NOT_EXIST(60002, "文章分类父分类不存在"),
+    ARTICLE_CATEGORY_BEYOND_TWO(60003, "最多为二级分类,操作失败"),
+    ARTICLE_CATEGORY_DELETE_ERROR(60004, "该文章分类下存在子分类,不能删除"),
+    ARTICLE_CATEGORY_HAS_ARTICLE(60005, "该文章分类下存在文章,不能删除"),
+    ARTICLE_CATEGORY_NO_DELETION(60007, "默认文章分类不能进行删除"),
+    ARTICLE_NO_DELETION(60008, "默认文章不能进行删除"),
+
+
+    /**
+     * 页面
+     */
+    PAGE_NOT_EXIST(61001, "页面不存在"),
+    PAGE_OPEN_DELETE_ERROR(61002, "当前页面为开启状态,无法删除"),
+    PAGE_DELETE_ERROR(61003, "当前页面为唯一页面,无法删除"),
+    PAGE_RELEASE_ERROR(61004, "页面已发布,无需重复提交"),
+
+    /**
+     * 设置
+     */
+    SETTING_NOT_TO_SET(70001, "该参数不需要设置"),
+    ALIPAY_NOT_SETTING(70002, "支付宝支付未配置"),
+    ALIPAY_EXCEPTION(70003, "支付宝支付错误,请稍后重试"),
+    ALIPAY_PARAMS_EXCEPTION(70004, "支付宝参数异常"),
+    LOGISTICS_NOT_SETTING(70005, "您还未配置快递查询"),
+    LOGISTICS_CHECK_SETTING(70005, "操作失败,请检查您的快递鸟配置"),
+    ORDER_SETTING_ERROR(70006, "系统订单配置异常"),
+    ALI_SMS_SETTING_ERROR(70007, "您还未配置阿里云短信"),
+    SMS_SIGN_EXIST_ERROR(70008, "短信签名已存在"),
+
+    /**
+     * 站内信
+     */
+    NOTICE_NOT_EXIST(80001, "当前消息模板不存在"),
+    NOTICE_ERROR(80002, "修改站内信异常,请稍后重试"),
+    NOTICE_SEND_ERROR(80003, "发送站内信异常,请检查系统日志"),
+
+
+    /**
+     * OSS
+     */
+    OSS_NOT_EXIST(80101, "OSS未配置"),
+    OSS_EXCEPTION_ERROR(80102, "文件上传失败,请稍后重试"),
+    OSS_DELETE_ERROR(80103, "图片删除失败"),
+
+    /**
+     * 验证码
+     */
+    VERIFICATION_SEND_SUCCESS(80201, "短信验证码,发送成功"),
+    VERIFICATION_ERROR(80202, "验证失败"),
+    VERIFICATION_CODE_INVALID(80204, "验证码已失效,请重新校验"),
+    VERIFICATION_SMS_CHECKED_ERROR(80210, "短信验证码错误,请重新校验"),
+
+    /**
+     * 微信相关异常
+     */
+    WECHAT_CONNECT_NOT_SETTING(80300, "微信联合登陆信息未配置"),
+    WECHAT_PAYMENT_NOT_SETTING(80301, "微信支付信息未配置"),
+    WECHAT_QRCODE_ERROR(80302, "微信二维码生成异常"),
+    WECHAT_MP_MESSAGE_ERROR(80303, "微信小程序小消息订阅异常"),
+    WECHAT_JSAPI_SIGN_ERROR(80304, "微信JsApi签名异常"),
+    WECHAT_CERT_ERROR(80305, "证书获取失败"),
+    WECHAT_MP_MESSAGE_TMPL_ERROR(80306, "未能获取到微信模版消息id"),
+    WECHAT_ERROR(80307, "微信接口异常"),
+    APP_VERSION_EXIST(80307, "APP版本已存在"),
+
+    /**
+     * IM
+     */
+    IM_MESSAGE_ADD_ERROR(80400,"IM消息发送错误"),
+    IM_MESSAGE_EDIT_ERROR(80400,"IM消息更新错误"),
+
+    /**
+     * 其他
+     */
+    CUSTOM_WORDS_EXIST_ERROR(90000, "当前自定义分词已存在!"),
+    CUSTOM_WORDS_NOT_EXIST_ERROR(90001, "当前自定义分词不存在!"),
+    CUSTOM_WORDS_SECRET_KEY_ERROR(90002, "秘钥验证失败!"),
+    CONNECT_NOT_EXIST(90000, "登录方式不存在!"),
+    ELASTICSEARCH_INDEX_INIT_ERROR(90003, "索引初始化失败!"),
+    PURCHASE_ORDER_DEADLINE_ERROR(90004, "供求单,已超过报名截止时间"),
+    USER_ADD_ERROR(90005, "用户添加失败"),
+    INDEX_BUILDING(90005, "索引正在生成");
+
+
+    private final Integer code;
+    private final String message;
+
+
+    ResultCode(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer code() {
+        return this.code;
+    }
+
+    public String message() {
+        return this.message;
+    }
+
+}

+ 133 - 0
src/main/java/com/sy/enums/ResultUtil.java

@@ -0,0 +1,133 @@
+package com.sy.enums;
+
+import com.sy.utils.vo.ResultMessage;
+
+/**
+ * 返回结果工具类
+ *
+ * @author lili
+ */
+public class ResultUtil<T> {
+
+    /**
+     * 抽象类,存放结果
+     */
+    private final ResultMessage<T> resultMessage;
+    /**
+     * 正常响应
+     */
+    private static final Integer SUCCESS = 200;
+
+
+    /**
+     * 构造话方法,给响应结果默认值
+     */
+    public ResultUtil() {
+        resultMessage = new ResultMessage<>();
+        resultMessage.setSuccess(true);
+        resultMessage.setMessage("success");
+        resultMessage.setCode(SUCCESS);
+    }
+
+    /**
+     * 返回数据
+     *
+     * @param t 范型
+     * @return 消息
+     */
+    public ResultMessage<T> setData(T t) {
+        this.resultMessage.setResult(t);
+        return this.resultMessage;
+    }
+
+
+    /**
+     * 返回成功消息
+     *
+     * @param resultCode 返回码
+     * @return 返回成功消息
+     */
+    public ResultMessage<T> setSuccessMsg(ResultCode resultCode) {
+        this.resultMessage.setSuccess(true);
+        this.resultMessage.setMessage(resultCode.message());
+        this.resultMessage.setCode(resultCode.code());
+        return this.resultMessage;
+
+    }
+
+    /**
+     * 抽象静态方法,返回结果集
+     * @param t 范型
+     * @param <T>  范型
+     * @return 消息
+     */
+    public static <T> ResultMessage<T> data(T t) {
+        return new ResultUtil<T>().setData(t);
+    }
+
+    /**
+     * 返回成功
+     *
+     * @param resultCode 返回状态码
+     * @return 消息
+     */
+    public static <T> ResultMessage<T> success(ResultCode resultCode) {
+        return new ResultUtil<T>().setSuccessMsg(resultCode);
+    }
+
+    /**
+     * 返回成功
+     * @return 消息
+     */
+    public static <T> ResultMessage<T> success() {
+        return new ResultUtil<T>().setSuccessMsg(ResultCode.SUCCESS);
+    }
+
+    /**
+     * 返回失败
+     *
+     * @param resultCode 返回状态码
+     * @return 消息
+     */
+    public static <T> ResultMessage<T> error(ResultCode resultCode) {
+        return new ResultUtil<T>().setErrorMsg(resultCode);
+    }
+
+    /**
+     * 返回失败
+     *
+     * @param code 状态码
+     * @param msg  返回消息
+     * @return 消息
+     */
+    public static <T> ResultMessage<T> error(Integer code, String msg) {
+        return new ResultUtil<T>().setErrorMsg(code, msg);
+    }
+
+    /**
+     * 服务器异常 追加状态码
+     * @param resultCode 返回码
+     * @return 消息
+     */
+    public ResultMessage<T> setErrorMsg(ResultCode resultCode) {
+        this.resultMessage.setSuccess(false);
+        this.resultMessage.setMessage(resultCode.message());
+        this.resultMessage.setCode(resultCode.code());
+        return this.resultMessage;
+    }
+
+    /**
+     * 服务器异常 追加状态码
+     *
+     * @param code 状态码
+     * @param msg  返回消息
+     * @return 消息
+     */
+    public ResultMessage<T> setErrorMsg(Integer code, String msg) {
+        this.resultMessage.setSuccess(false);
+        this.resultMessage.setMessage(msg);
+        this.resultMessage.setCode(code);
+        return this.resultMessage;
+    }
+
+}

+ 13 - 0
src/main/java/com/sy/listener/MyEventListener.java

@@ -0,0 +1,13 @@
+package com.sy.listener;
+
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MyEventListener {
+    @EventListener(ApplicationReadyEvent.class)
+    public void handleApplicationReadyEvent() {
+        System.out.println("Spring Boot应用准备就绪!");
+    }
+}

+ 13 - 0
src/main/java/com/sy/mapper/goods/CategoryMapper.java

@@ -0,0 +1,13 @@
+package com.sy.mapper.goods;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.Category;
+import org.apache.ibatis.annotations.Select;
+
+@DS("goods")
+public interface CategoryMapper extends BaseMapper<Category> {
+    // 注意这里我们使用了具体的序列名 'public.category_sn_seq'
+    @Select("SELECT nextval('public.category_sn_seq')")
+    Integer getNextSequenceValue();
+}

+ 16 - 0
src/main/java/com/sy/mapper/goods/GoodsMapper.java

@@ -0,0 +1,16 @@
+package com.sy.mapper.goods;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.Goods;
+import com.sy.entity.OrdersGoodsDel;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+
+@DS("goods")
+public interface GoodsMapper extends BaseMapper<Goods> {
+
+}

+ 10 - 0
src/main/java/com/sy/mapper/goods/GoodsUnitMapper.java

@@ -0,0 +1,10 @@
+package com.sy.mapper.goods;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.GoodsUnit;
+import org.apache.ibatis.annotations.Mapper;
+
+@DS("goods")
+public interface GoodsUnitMapper extends BaseMapper<GoodsUnit> {
+}

+ 10 - 0
src/main/java/com/sy/mapper/goods/SpecMapper.java

@@ -0,0 +1,10 @@
+package com.sy.mapper.goods;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.Spec;
+import org.apache.ibatis.annotations.Mapper;
+
+@DS("goods")
+public interface SpecMapper extends BaseMapper<Spec> {
+}

+ 12 - 0
src/main/java/com/sy/mapper/orders/OrdersGoodsDelMapper.java

@@ -0,0 +1,12 @@
+package com.sy.mapper.orders;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.OrdersGoodsDel;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+@DS("orders")
+public interface OrdersGoodsDelMapper extends BaseMapper<OrdersGoodsDel> {
+
+}

+ 12 - 0
src/main/java/com/sy/mapper/orders/OrdersGoodsMapper.java

@@ -0,0 +1,12 @@
+package com.sy.mapper.orders;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.OrdersGoods;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+@DS("orders")
+public interface OrdersGoodsMapper extends BaseMapper<OrdersGoods> {
+
+}

+ 28 - 0
src/main/java/com/sy/mapper/orders/OrdersMapper.java

@@ -0,0 +1,28 @@
+package com.sy.mapper.orders;
+
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.Orders;
+import com.sy.entity.ShopPaymentRecord;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+@DS("orders")
+public interface OrdersMapper extends BaseMapper<Orders> {
+
+
+    @Select("SELECT * FROM orders " +
+            "WHERE shop_id=#{shopId,jdbcType=VARCHAR} " +
+            "and CAST(pay_at AS TIMESTAMP) >= CAST(#{startTime, jdbcType=TIMESTAMP} AS TIMESTAMP) " +
+            "AND CAST(pay_at AS TIMESTAMP) <= CAST(#{endTime, jdbcType=TIMESTAMP} AS TIMESTAMP)" +
+            "AND pay_status=1 AND status=20")
+    List<Orders> getOrdersByIdAndTimestampList(@Param("startTime") Timestamp startTime,
+                                                        @Param("endTime") Timestamp endTime,
+                                                        @Param("shopId") String shopId);
+
+
+}

+ 27 - 0
src/main/java/com/sy/mapper/orders/RetreatGoodsMapper.java

@@ -0,0 +1,27 @@
+package com.sy.mapper.orders;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.Orders;
+import com.sy.entity.RetreatGoods;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+@DS("orders")
+public interface RetreatGoodsMapper extends BaseMapper<RetreatGoods> {
+
+
+    @Select("SELECT * FROM retreat_goods " +
+            "WHERE shop_id=#{shopId,jdbcType=VARCHAR} " +
+            "and CAST(create_at AS TIMESTAMP) >= CAST(#{startTime, jdbcType=TIMESTAMP} AS TIMESTAMP) " +
+            "AND CAST(create_at AS TIMESTAMP) <= CAST(#{endTime, jdbcType=TIMESTAMP} AS TIMESTAMP)" +
+            "AND pay_status=1")
+    List<RetreatGoods> getRetreatGoodsByIdAndTimestampList(@Param("startTime") Timestamp startTime,
+                                               @Param("endTime") Timestamp endTime,
+                                               @Param("shopId") String shopId);
+
+}

+ 23 - 0
src/main/java/com/sy/mapper/orders/ShopPaymentRecordMapper.java

@@ -0,0 +1,23 @@
+package com.sy.mapper.orders;
+import java.sql.Timestamp;
+import java.util.Date;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.ShopPaymentRecord;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+@DS("orders")
+public interface ShopPaymentRecordMapper extends BaseMapper<ShopPaymentRecord> {
+
+    @Select("SELECT * FROM shop_payment_record " +
+            "WHERE shop_id=#{shopId,jdbcType=VARCHAR} " +
+            "and CAST(pay_at AS TIMESTAMP) >= CAST(#{startTime, jdbcType=TIMESTAMP} AS TIMESTAMP) " +
+            "AND CAST(pay_at AS TIMESTAMP) <= CAST(#{endTime, jdbcType=TIMESTAMP} AS TIMESTAMP)")
+    List<ShopPaymentRecord> getAllByPayAtAndShopIdBetween(@Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime, @Param("shopId") String shopId);
+
+
+}

+ 15 - 0
src/main/java/com/sy/mapper/orders/TRefundLogMapper.java

@@ -0,0 +1,15 @@
+package com.sy.mapper.orders;
+import java.util.Date;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.TRefundLog;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@DS("orders")
+public interface TRefundLogMapper extends BaseMapper<TRefundLog> {
+
+
+}

+ 15 - 0
src/main/java/com/sy/mapper/users/ShopMapper.java

@@ -0,0 +1,15 @@
+package com.sy.mapper.users;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.Shop;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@DS("users")
+public interface ShopMapper extends BaseMapper<Shop> {
+
+}

+ 13 - 0
src/main/java/com/sy/mapper/users/ShopPayConfigMapper.java

@@ -0,0 +1,13 @@
+package com.sy.mapper.users;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sy.entity.ShopPayConfig;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@DS("users")
+public interface ShopPayConfigMapper extends BaseMapper<ShopPayConfig> {
+
+}

+ 31 - 0
src/main/java/com/sy/service/CategoryService.java

@@ -0,0 +1,31 @@
+package com.sy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.sy.mapper.goods.CategoryMapper;
+import com.sy.entity.Category;
+
+
+@Service
+public class CategoryService {
+
+    @Autowired
+    CategoryMapper categoryMapper;
+    public int insertOrUpdate(Category sort) {
+        return categoryMapper.insert(sort);
+    }
+
+    public int getNextSequenceValue() {
+        return categoryMapper.getNextSequenceValue();
+    }
+
+    public Category exists(Category category) {
+        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(Category::getId, category.getId());
+        queryWrapper.and(wrapper -> wrapper.eq(Category::getShopId, category.getShopId()));
+
+        return categoryMapper.selectOne(queryWrapper);
+    }
+}

+ 91 - 0
src/main/java/com/sy/service/GoodsService.java

@@ -0,0 +1,91 @@
+package com.sy.service;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sy.entity.Category;
+import com.sy.entity.Goods;
+import com.sy.entity.GoodsUnit;
+import com.sy.entity.goodsVoDto.GoodsVoInParameter;
+import com.sy.mapper.goods.GoodsMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+
+/**
+ * (Goods)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-12-28 06:05:06
+ */
+@Service
+public class GoodsService {
+    @Autowired
+    private CategoryService categoryService;
+    @Autowired
+    GoodsMapper goodsMapper;
+
+    @Autowired
+    GoodsUnitService goodsUnitService;
+
+    @Transactional
+    public Integer batchGoods(GoodsVoInParameter goodsVoInParameter){
+        LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Goods::getId, goodsVoInParameter.getGoodsId());
+        Goods goodsUpdate = goodsMapper.selectOne(queryWrapper);
+        if (goodsUpdate != null) {
+            goodsUpdate.setName(goodsVoInParameter.getGoodsName());
+            goodsUpdate.setStatus(goodsVoInParameter.getStatus());
+            goodsUpdate.setPic(goodsVoInParameter.getImgUrl());
+            goodsUpdate.setBarcode(goodsVoInParameter.getBarCode());
+            goodsUpdate.setUnit(goodsVoInParameter.getSpecs());
+            goodsUpdate.setPrice(goodsVoInParameter.getSalePrice());
+            Integer integer = updateGoods(goodsUpdate,goodsVoInParameter);
+            return integer;
+        }else {
+            //根据店铺id创建通用类别
+            String shopId = goodsVoInParameter.getShopId();
+            Category category = new Category().getSort(shopId, categoryService.getNextSequenceValue() + 1);
+            Category exists = categoryService.exists(category);
+            if (exists == null) {
+                int i = categoryService.insertOrUpdate(category);
+            }
+            Goods goods = new Goods();
+            goods.setId(String.valueOf(goodsVoInParameter.getGoodsId()));
+            goods.setName(goodsVoInParameter.getGoodsName());
+            goods.setShopId(goodsVoInParameter.getShopId());
+            goods.setPic(goodsVoInParameter.getImgUrl());
+            goods.setBarcode(goodsVoInParameter.getBarCode());
+            goods.setUnit(goodsVoInParameter.getSpecs());
+            goods.setPrice(goodsVoInParameter.getSalePrice());
+            goods.setStock(goodsVoInParameter.getStock());
+            goods.setStatus(goodsVoInParameter.getStatus());
+            goods.setOperatorName("青港商户");
+            int insert = goodsMapper.insert(goods);
+            if (insert > 0) {
+                return 1;
+            }
+            return 0;
+        }
+    }
+
+    public Integer updateGoods(Goods goods,GoodsVoInParameter goodsVoInParameter) {
+        LambdaUpdateWrapper<Goods> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        if (goodsVoInParameter.getGoodsId() != null&&goodsVoInParameter.getShopId()!=null) {
+            lambdaUpdateWrapper.eq(Goods::getShopId, goodsVoInParameter.getShopId())
+                    .eq(Goods::getId,goodsVoInParameter.getGoodsId());// 设置更新条件
+            // 如果需要更新多个字段,可以继续使用 set 方法
+            int update = goodsMapper.update(goods, lambdaUpdateWrapper);
+            return update;
+        }
+        return 0;
+    }
+}
+

+ 10 - 0
src/main/java/com/sy/service/GoodsUnitService.java

@@ -0,0 +1,10 @@
+package com.sy.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sy.entity.GoodsUnit;
+import com.sy.mapper.goods.GoodsUnitMapper;
+@Service
+public class GoodsUnitService extends ServiceImpl<GoodsUnitMapper, GoodsUnit> {
+}

+ 26 - 0
src/main/java/com/sy/service/OrdersGoodsDelService.java

@@ -0,0 +1,26 @@
+package com.sy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import com.sy.mapper.orders.OrdersGoodsDelMapper;
+import com.sy.entity.OrdersGoodsDel;
+
+@Service
+public class OrdersGoodsDelService {
+
+    @Autowired
+    OrdersGoodsDelMapper ordersGoodsDelMapper;
+    public List<OrdersGoodsDel> getGoodsDel(String orderId){
+        if (orderId==null){
+            return null;
+        }
+        LambdaQueryWrapper<OrdersGoodsDel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(OrdersGoodsDel::getOrderId, orderId);
+        return ordersGoodsDelMapper.selectList(queryWrapper);
+    }
+
+}

+ 24 - 0
src/main/java/com/sy/service/OrdersGoodsService.java

@@ -0,0 +1,24 @@
+package com.sy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import com.sy.entity.OrdersGoods;
+import com.sy.mapper.orders.OrdersGoodsMapper;
+
+@Service
+public class OrdersGoodsService{
+
+    @Autowired
+    OrdersGoodsMapper ordersGoodsMapper;
+    public List<OrdersGoods> getOrderGoodsList(String goodsOrdersId) {
+        LambdaQueryWrapper<OrdersGoods> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(OrdersGoods::getOrderId, goodsOrdersId);
+        List<OrdersGoods> ordersGoods = ordersGoodsMapper.selectList(queryWrapper);
+        return ordersGoods ;
+    }
+}

+ 206 - 0
src/main/java/com/sy/service/OrdersService.java

@@ -0,0 +1,206 @@
+package com.sy.service;
+
+import com.sy.entity.*;
+import com.sy.entity.goodsVoDto.GoodsInfoVo;
+import com.sy.entity.orderVoDto.OrderInParameter;
+import com.sy.entity.orderVoDto.OrdersDTO;
+import com.sy.entity.orderVoDto.OrdersStatementOfAccount;
+import com.sy.entity.orderVoDto.OrdersVo;
+import com.sy.mapper.goods.GoodsMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+
+import java.sql.Timestamp;
+import java.util.*;
+;
+
+import com.sy.mapper.orders.OrdersMapper;
+
+
+import static com.sy.utils.Utils.*;
+import static com.sy.utils.Utils.getTimeStr;
+
+@Service
+public class OrdersService {
+
+    @Autowired
+    OrdersMapper ordersMapper;
+
+    @Autowired
+    OrdersGoodsService ordersGoodsService;
+
+    @Autowired
+    ShopService shopService;
+
+    @Autowired
+    ShopPayConfigService shopPayConfigService;
+
+    @Autowired
+    ShopPaymentRecordService shopPaymentRecordService;
+
+    public List<OrdersVo> getAllByPayAt(OrderInParameter orderInParameter) {
+        List<Orders> ordersList = getOrdersList(orderInParameter);
+        List<OrdersVo> ordersVos = new ArrayList<>();
+        for (Orders order : ordersList) {
+            OrdersVo ordersVo = new OrdersVo();
+            List<GoodsInfoVo> goodsInfo=new ArrayList<>();
+            List<OrdersGoods> orderGoodsList = ordersGoodsService.getOrderGoodsList(order.getId());
+            ordersVo.setOrderId(order.getId());
+            ordersVo.setShopId(order.getShopId());
+            ordersVo.setCount(order.getGoodsAmount());
+            ordersVo.setAmount(order.getPayFeeOrigin());
+            ordersVo.setPayAmount(order.getPayFee());
+            ordersVo.setCreateTime(String.valueOf(order.getCreateAt().getTime()));
+            ordersVo.setPaymentTime(String.valueOf(order.getPayAt().getTime()));
+            ordersVo.setPaymentType(order.getPayment());
+            ordersVo.setPaymentUser(order.getPayPersonName());
+
+            for (OrdersGoods orderGoods : orderGoodsList) {
+                GoodsInfoVo goodsInfoVo=new GoodsInfoVo();
+                goodsInfoVo.setGoodsId(orderGoods.getGoodsId());
+                goodsInfoVo.setPrice(orderGoods.getSalePrice());
+                goodsInfoVo.setCount(orderGoods.getGoodsAmount());
+                goodsInfoVo.setAmount(orderGoods.getGoodsTotalPrice());
+                goodsInfo.add(goodsInfoVo);
+            }
+            ordersVo.setGoodsInfo(goodsInfo);
+            ordersVos.add(ordersVo);
+        }
+
+        return ordersVos;
+    }
+
+
+    @Autowired
+    GoodsMapper goodsMapper;
+    public Goods getTest(){
+        return goodsMapper.selectById("05eb20dc-c38e-11eb-8816-0242ac170006");
+    }
+
+    public List<OrdersStatementOfAccount> getOrdersStatementOfAccount(OrderInParameter orderInParameter) {
+        if (orderInParameter == null) {
+            return null;
+        }
+        List<String> dayString = printDatesBetween(orderInParameter.getStartTimestamp(), orderInParameter.getEndTimestamp());
+        ArrayList<OrdersStatementOfAccount> ordersStatementOfAccounts = new ArrayList<>();
+        List<Shop> shopList = getShopList(orderInParameter, this.shopService);
+        BigDecimal number = new BigDecimal("0.01"); // 使用字符串来避免精度问题
+
+        for (String day : dayString){
+            //一天一天的统计
+            for (Shop Shop : shopList) {
+                OrdersStatementOfAccount ordersStatementOfAccount = new OrdersStatementOfAccount();
+                BigDecimal lakalaRate = shopPayConfigService.getShopPayConfigById(Shop.getId()).getLakalaRate();
+                ArrayList<String> startAndEndTimeStamps = getStartAndEndTimeStamps(day);
+                ArrayList<OrdersDTO> ordersDTOS = new ArrayList<>();
+                List<ShopPaymentRecord> shopPaymentRecordList = shopPaymentRecordService.getShopPaymentRecordListByDay(Shop.getId(),startAndEndTimeStamps);
+                //订单总营收  总付款-线上退款-线下退款
+                BigDecimal amount = BigDecimal.ZERO;
+                //线上支付总额	微信、支付宝等线上渠道
+                BigDecimal online_amount = BigDecimal.ZERO;
+                //现金总收取	现金渠道
+                BigDecimal offline_amount = BigDecimal.ZERO;
+                ordersStatementOfAccount.setPlatformSeparateRate(lakalaRate);
+                //记录订单数量
+                Integer countOrderSize=0;
+                for (ShopPaymentRecord shopPaymentRecord : shopPaymentRecordList) {
+                    Orders orders = ordersMapper.selectById(shopPaymentRecord.getOrderId());
+                    //订单金额如果为0  表示这个订单已经退款完毕 收徒为0 不需要统计
+                    if (String.valueOf(orders.getPayFee()).equals("0.00")) {
+                        continue;
+                    }
+                    countOrderSize++;
+                    amount=amount.add(orders.getPayFee());
+                    if(orders.getPayment().equals("cash")){
+                        offline_amount=offline_amount.add(shopPaymentRecord.getCash().subtract(shopPaymentRecord.getReturnCash()).subtract(shopPaymentRecord.getReturnOrigin()));
+                    }
+                    if(orders.getPayment().equals("weixin")){
+                        online_amount= online_amount.add(shopPaymentRecord.getWeixin().subtract(shopPaymentRecord.getReturnCash()).subtract(shopPaymentRecord.getReturnOrigin()));
+                    }
+                    if(orders.getPayment().equals("alipay")){
+                        online_amount= online_amount.add(shopPaymentRecord.getAlipay().subtract(shopPaymentRecord.getReturnCash()).subtract(shopPaymentRecord.getReturnOrigin()));
+                    }
+                    if(orders.getPayment().equals("YunShanFu")){
+                        online_amount=online_amount.add(shopPaymentRecord.getYunshanfu().subtract(shopPaymentRecord.getReturnCash()).subtract(shopPaymentRecord.getReturnOrigin()));
+                    }
+                    if(orders.getPayment().equals("membercard")){
+                        online_amount= online_amount.add(shopPaymentRecord.getMembercard().subtract(shopPaymentRecord.getReturnCash()).subtract(shopPaymentRecord.getReturnOrigin()));
+                    }
+                    if(orders.getPayment().equals("zjdcodecard")){
+                        online_amount= online_amount.add(shopPaymentRecord.getZjdcodecard().subtract(shopPaymentRecord.getReturnCash()).subtract(shopPaymentRecord.getReturnOrigin()));
+                    }
+                    if (orders.getPayment().equals("bank")) {
+                        online_amount=  online_amount.add(shopPaymentRecord.getBank().subtract(shopPaymentRecord.getReturnCash()).subtract(shopPaymentRecord.getReturnOrigin()));
+                    }
+                    if(orders.getPayment().equals("mixed")){
+                        //获取第一次支付方式
+                        if (orders.getPayment1Name().equals("cash")&&!orders.getPayment2Name().equals("cash")) {
+                            offline_amount=  offline_amount.add(orders.getPayment1Fee());
+                            online_amount= online_amount.add(orders.getPayment2Fee());
+                        }else if (orders.getPayment2Name().equals("cash")&&!orders.getPayment1Name().equals("cash")){ //第二次支付
+                            offline_amount=  offline_amount.add(orders.getPayment2Fee());
+                            online_amount=  online_amount.add(orders.getPayment1Fee());
+                        }else {
+                            online_amount= online_amount.add(orders.getPayment2Fee()).add(orders.getPayment1Fee());
+                        }
+                    }
+                    OrdersDTO ordersDTO=new OrdersDTO();
+                    ordersDTO.setOrderId(orders.getId());
+                    ordersDTO.setOrderCreateTime(orders.getCreateAt().getTime());
+                    ordersDTO.setPlatformSeparateRate(lakalaRate);
+                    ordersDTO.setAmount(orders.getPayFee());
+                    //门店收入等于 订单总营业额 *费率  比如费率百分之6.8  则需要转换  成0.068
+                    ordersDTO.setShopIncome(new BigDecimal(1).subtract(lakalaRate.multiply(number)).multiply(orders.getPayFee()));
+                    ordersDTO.setPlatformIncome(orders.getPayFee().multiply(lakalaRate.multiply(number)));
+                    ordersDTOS.add(ordersDTO);
+                }
+                ordersStatementOfAccount.setStatisticsDate(day);
+                ordersStatementOfAccount.setShopId(Shop.getId());
+                ordersStatementOfAccount.setOrderCount(countOrderSize);
+                ordersStatementOfAccount.setAmount(amount);
+                ordersStatementOfAccount.setOnlineAmount(online_amount);
+                ordersStatementOfAccount.setOfflineAmount(offline_amount);
+                ordersStatementOfAccount.setOrderDetailList(ordersDTOS);
+                ordersStatementOfAccount.setShopAmount(new BigDecimal(1).subtract(lakalaRate.multiply(number)).multiply(amount));
+                ordersStatementOfAccount.setPlatformAmount(lakalaRate.multiply(number).multiply(amount));
+                ordersStatementOfAccounts.add(ordersStatementOfAccount);
+            }
+
+        }
+
+        return ordersStatementOfAccounts;
+    }
+
+   public Orders  getByIdOrder(String orderId){
+        return ordersMapper.selectById(orderId);
+   }
+    private List<Orders>  getOrdersList(OrderInParameter orderInParameter) {
+        List<Orders> retreatGoodsList = new ArrayList<>();
+        List<Shop> qgShopAll = getShopList(orderInParameter, this.shopService);
+        for (Shop shop : qgShopAll) {
+            String startTime = getTimeStr(orderInParameter.getStartTimestamp());
+            String endTime = getTimeStr(orderInParameter.getEndTimestamp());
+            List<Orders> ordersList = ordersMapper.getOrdersByIdAndTimestampList(Timestamp.valueOf(startTime),Timestamp.valueOf(endTime), shop.getId());
+            retreatGoodsList.addAll(ordersList);
+        }
+
+        return retreatGoodsList;
+    }
+
+    static List<Shop> getShopList(OrderInParameter orderInParameter, ShopService shopService) {
+        List<Shop> qgShopAll=new ArrayList<>();
+        if (orderInParameter.getShopId() == null) {
+            List<Shop> qgShop = shopService.getShopQgList("qg");
+            qgShopAll.addAll(qgShop);
+        }
+        if (orderInParameter.getShopId()!= null) {
+            Shop shopOne = shopService.getShopOne(orderInParameter.getShopId());
+            qgShopAll.add(shopOne);
+        }
+        return qgShopAll;
+    }
+
+}

+ 106 - 0
src/main/java/com/sy/service/RetreatGoodsService.java

@@ -0,0 +1,106 @@
+package com.sy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sy.entity.Orders;
+import com.sy.entity.OrdersGoodsDel;
+import com.sy.entity.Shop;
+import com.sy.entity.goodsVoDto.GoodsDelVo;
+import com.sy.entity.orderVoDto.OrderInParameter;
+import com.sy.entity.orderVoDto.OrdersGoodsRefundLogInfoDTO;
+import com.sy.mapper.orders.OrdersMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.*;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sy.mapper.orders.RetreatGoodsMapper;
+import com.sy.entity.RetreatGoods;
+
+import static com.sy.utils.Utils.*;
+import static com.sy.utils.Utils.getTimeStr;
+
+@Service
+public class RetreatGoodsService extends ServiceImpl<RetreatGoodsMapper, RetreatGoods> {
+    @Autowired
+    OrdersGoodsDelService ordersGoodsDelService;
+    @Autowired
+    OrdersService ordersService;
+    @Autowired
+    OrdersMapper ordersMapper;
+    @Autowired
+    RetreatGoodsMapper retreatGoodsMapper;
+    @Autowired
+    ShopService shopService;
+
+    public List<RetreatGoods> retreatGoodsList(OrderInParameter orderInParameter){
+        List<RetreatGoods> retreatGoodsList = new ArrayList<>();
+        List<Shop> qgShopAll = OrdersService.getShopList(orderInParameter, this.shopService);
+        for (Shop shop : qgShopAll) {
+            String startTime = getTimeStr(orderInParameter.getStartTimestamp());
+            String endTime = getTimeStr(orderInParameter.getEndTimestamp());
+            List<RetreatGoods> retreatGoodsByIdAndTimestampList = retreatGoodsMapper.getRetreatGoodsByIdAndTimestampList(
+                    Timestamp.valueOf(startTime),
+                    Timestamp.valueOf(endTime), shop.getId());
+            if (retreatGoodsByIdAndTimestampList != null) {
+               retreatGoodsList.addAll(retreatGoodsByIdAndTimestampList);
+           }
+        }
+        return retreatGoodsList;
+    }
+
+    public List<GoodsDelVo> getListOrderTRefundLog(OrderInParameter orderInParameter) {
+        List<RetreatGoods> retreatGoodsList = retreatGoodsList(orderInParameter);
+
+        ArrayList<GoodsDelVo> maps = new ArrayList<>();
+        // 使用Map来组织数据
+        Map<String, List<RetreatGoods>> orderIdToGoodsMap = new HashMap<>();
+        // 遍历列表,根据orderId将数据放入Map
+        for (RetreatGoods retreatGoods : retreatGoodsList) {
+            String orderId = retreatGoods.getOrderId();
+            if (!orderIdToGoodsMap.containsKey(orderId)) {
+                // 如果Map中不存在这个orderId,则创建一个新的列表并放入Map
+                orderIdToGoodsMap.put(orderId, new ArrayList<>());
+            }
+            // 将RetreatGoods对象添加到对应orderId的列表中
+            orderIdToGoodsMap.get(orderId).add(retreatGoods);
+        }
+
+        for (Map.Entry<String, List<RetreatGoods>> entry : orderIdToGoodsMap.entrySet()) {
+            //通过key 查询明细
+            BigDecimal amountAll = BigDecimal.ZERO;//实际总退货金额
+            BigDecimal countAllGoods = BigDecimal.ZERO;//总退货数量
+            GoodsDelVo goodsDelVo = new GoodsDelVo();
+            List<OrdersGoodsRefundLogInfoDTO> goods_Info = new ArrayList<>();//明细
+            Orders byIdOrder = ordersService.getByIdOrder(entry.getKey());
+            List<OrdersGoodsDel> goodsDelList = ordersGoodsDelService.getGoodsDel(entry.getKey());
+            for (OrdersGoodsDel ordersGoodsDel : goodsDelList) {
+                OrdersGoodsRefundLogInfoDTO info = new OrdersGoodsRefundLogInfoDTO();
+
+                info.setPrice(ordersGoodsDel.getSalePrice());
+                info.setGoodsId(ordersGoodsDel.getGoodsId());
+                info.setCount(ordersGoodsDel.getGoodsAmount());
+                info.setAmount(ordersGoodsDel.getGoodsTotalPrice());
+                amountAll = amountAll.add(ordersGoodsDel.getSalePrice());
+                countAllGoods = countAllGoods.add(ordersGoodsDel.getGoodsAmount());
+                goods_Info.add(info);
+
+            }
+            goodsDelVo.setRefundId(entry.getKey());
+            goodsDelVo.setOrderId(entry.getKey());
+            goodsDelVo.setRefundTime(entry.getValue().get(0).getCreateAt().getTime());
+            goodsDelVo.setCount(countAllGoods);
+            goodsDelVo.setAmount(amountAll);
+            goodsDelVo.setGoodsInfo(goods_Info);
+            goodsDelVo.setShopId(byIdOrder.getShopId());
+            maps.add(goodsDelVo);
+
+        }
+
+
+        return maps;
+    }
+
+}

+ 21 - 0
src/main/java/com/sy/service/ShopPayConfigService.java

@@ -0,0 +1,21 @@
+package com.sy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.sy.entity.ShopPayConfig;
+import com.sy.mapper.users.ShopPayConfigMapper;
+@Service
+public class ShopPayConfigService {
+
+    @Autowired
+    ShopPayConfigMapper shopPayConfigMapper;
+    public ShopPayConfig getShopPayConfigById(String shopId){
+        QueryWrapper<ShopPayConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("shop_id",shopId);
+        // 执行查询,返回所有用户数据
+        ShopPayConfig shopPayConfig = shopPayConfigMapper.selectOne(queryWrapper);
+
+        return shopPayConfig;
+    }
+}

+ 25 - 0
src/main/java/com/sy/service/ShopPaymentRecordService.java

@@ -0,0 +1,25 @@
+package com.sy.service;
+
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.sql.Timestamp;
+
+import java.util.*;
+
+import com.sy.mapper.orders.ShopPaymentRecordMapper;
+import com.sy.entity.ShopPaymentRecord;
+
+
+@Service
+public class ShopPaymentRecordService {
+
+    @Autowired
+    ShopPaymentRecordMapper shopPaymentRecordMapper;
+    public List<ShopPaymentRecord> getShopPaymentRecordListByDay(String shopIdOne, ArrayList<String> date) {
+        List<ShopPaymentRecord> allByPayAtAndShopIdBetween = shopPaymentRecordMapper.getAllByPayAtAndShopIdBetween(Timestamp.valueOf(date.get(0)),
+                Timestamp.valueOf(date.get(1)), shopIdOne);
+        return allByPayAtAndShopIdBetween;
+    }
+}
+

+ 46 - 0
src/main/java/com/sy/service/ShopService.java

@@ -0,0 +1,46 @@
+package com.sy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.sy.entity.orderVoDto.OrderInParameter;
+import org.apache.ibatis.executor.ExecutorException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import com.sy.mapper.users.ShopMapper;
+import com.sy.entity.Shop;
+
+
+@Service
+public class ShopService {
+    @Autowired
+    ShopMapper shopMapper;
+
+    public List<Shop> getShopList(OrderInParameter orderInParameter) {
+        QueryWrapper<Shop> queryWrapper = new QueryWrapper<>();
+        if (orderInParameter.getShopId()!=null){
+            queryWrapper.eq("id",orderInParameter.getShopId());
+        }
+        // 执行查询,返回所有用户数据
+        return shopMapper.selectList(queryWrapper);
+    }
+
+    public List<Shop> getShopQgList(String ma) {
+        QueryWrapper<Shop> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("markers",ma);
+        // 执行查询,返回所有用户数据
+        return shopMapper.selectList(queryWrapper);
+    }
+
+
+    public Shop getShopOne(String shopId) {
+        if (shopId==null){
+             throw new RuntimeException("shopId为null") ;
+        }
+        QueryWrapper<Shop> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("id",shopId);
+        // 执行查询,返回所有用户数据
+        return shopMapper.selectOne(queryWrapper);
+    }
+}

+ 11 - 0
src/main/java/com/sy/service/SpecService.java

@@ -0,0 +1,11 @@
+package com.sy.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sy.mapper.goods.SpecMapper;
+import com.sy.entity.Spec;
+@Service
+public class SpecService extends ServiceImpl<SpecMapper, Spec> {
+
+}

+ 70 - 0
src/main/java/com/sy/service/TRefundLogService.java

@@ -0,0 +1,70 @@
+package com.sy.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sy.entity.Orders;
+import com.sy.entity.OrdersGoodsDel;
+import com.sy.entity.goodsVoDto.GoodsDelVo;
+import com.sy.entity.orderVoDto.OrderInParameter;
+import com.sy.entity.orderVoDto.OrdersGoodsRefundLogInfoDTO;
+import com.sy.mapper.orders.OrdersMapper;
+import org.aspectj.bridge.MessageWriter;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.*;
+import com.sy.entity.TRefundLog;
+import java.util.List;
+import com.sy.mapper.orders.TRefundLogMapper;
+
+import static com.sy.utils.Utils.convertStringToTimestamp;
+import static com.sy.utils.Utils.stringToTimestamp;
+
+@Service
+public class TRefundLogService {
+    @Autowired
+    OrdersGoodsDelService ordersGoodsDelService;
+    @Autowired
+    OrdersService ordersService;
+
+    @Autowired
+    OrdersMapper ordersMapper;
+    @Autowired
+    TRefundLogMapper tRefundLogMapper;
+//
+//    public List<GoodsDelVo> getListOrderTRefundLog(OrderInParameter orderInParameter){
+//        //查询出退款交易的详情
+//        LambdaQueryWrapper<TRefundLog> queryWrapper = new LambdaQueryWrapper<>();
+//        queryWrapper.between(TRefundLog::getRefundAt,convertStringToTimestamp( orderInParameter.getStartTimestamp()), convertStringToTimestamp(orderInParameter.getEndTimestamp()));
+//        if (orderInParameter.getShopId()!=null){
+//            queryWrapper.eq(TRefundLog::getShopId, orderInParameter.getShopId());
+//        }
+//        List<TRefundLog> tRefundLogs = tRefundLogMapper.selectList(queryWrapper);
+//        //通过订单id获取订单信息,订单信息获取商品详细  查询orders_goods_del表
+//        ArrayList<GoodsDelVo> maps = new ArrayList<>();
+//
+//        for (TRefundLog tRefundLog : tRefundLogs) {
+//            GoodsDelVo goodsDelVo = new GoodsDelVo();
+//            List<OrdersGoodsRefundLogInfoDTO>  refundLogInfoDTOS=new ArrayList<>();
+//            List<OrdersGoodsDel> goodsDel = ordersGoodsDelService.getGoodsDel(tRefundLog.getOrderId());
+//            for (OrdersGoodsDel ordersGoodsDel : goodsDel) {
+//                OrdersGoodsRefundLogInfoDTO ordersGoodsRefundLogInfoDTO= new OrdersGoodsRefundLogInfoDTO();
+//                ordersGoodsRefundLogInfoDTO.setGoods_id(ordersGoodsDel.getGoodsId());
+//                ordersGoodsRefundLogInfoDTO.setPrice(ordersGoodsDel.get);
+//
+//            }
+//            Orders order = ordersMapper.selectById(tRefundLog.getOrderId());
+//            if (order.getPayAt() == null) {
+//                continue;
+//            }
+//            goodsDelVo.setRefund_id(tRefundLog.getId());
+//            goodsDelVo.setShop_id(tRefundLog.getShopId());
+//            goodsDelVo.setOrder_id(tRefundLog.getOrderId());
+//            goodsDelVo.setCount(goodsDel.size());
+//            goodsDelVo.setAmount(tRefundLog.getRefundFee());
+//            goodsDelVo.setRefund_time(String.valueOf(tRefundLog.getRefundAt().getTime()));
+//            goodsDelVo.setGoodsInfo(goodsDel);
+//            maps.add(goodsDelVo);
+//        }
+//        return maps;
+//    }
+}

+ 127 - 0
src/main/java/com/sy/utils/ChineseCharacterUtil.java

@@ -0,0 +1,127 @@
+package com.sy.utils;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 获取首字母工具
+ *
+ * @author
+ * @Date
+ */
+public class ChineseCharacterUtil {
+
+    /**
+     *  获取汉字首字母或全拼大写字母
+     *
+     * @param chinese 汉字
+     * @param isFull  是否全拼 true:表示全拼 false表示:首字母
+     *
+     * @return 全拼或者首字母大写字符窜
+     */
+    public static String getUpperCase(String chinese,boolean isFull){
+        return convertHanzi2Pinyin(chinese,isFull).toUpperCase();
+    }
+
+    /**
+     * 获取汉字首字母或全拼小写字母
+     *
+     * @param chinese 汉字
+     * @param isFull 是否全拼 true:表示全拼 false表示:首字母
+     *
+     * @return 全拼或者首字母小写字符窜
+     */
+    public static  String getLowerCase(String chinese,boolean isFull){
+        return convertHanzi2Pinyin(chinese,isFull).toLowerCase();
+    }
+
+    /**
+     * 将汉字转成拼音
+     * <P>
+     * 取首字母或全拼
+     *
+     * @param chinaWord 汉字字符串
+     * @param isFull 是否全拼 true:表示全拼 false表示:首字母
+     *
+     * @return 拼音
+     */
+    static String convertHanzi2Pinyin(String chinaWord, boolean isFull){
+        /***
+         * ^[\u2E80-\u9FFF]+$ 匹配所有东亚区的语言
+         * ^[\u4E00-\u9FFF]+$ 匹配简体和繁体
+         * ^[\u4E00-\u9FA5]+$ 匹配简体
+         */
+        String regExp="^[\u4E00-\u9FFF]+$";
+        StringBuffer sb=new StringBuffer();
+        if(chinaWord==null||"".equals(chinaWord.trim())){
+            return "";
+        }
+        String pinyin="";
+        for(int i=0;i<chinaWord.length();i++){
+            char unit=chinaWord.charAt(i);
+            //是汉字,则转拼音
+            if(match(String.valueOf(unit),regExp)){
+                pinyin=convertSingleHanzi2Pinyin(unit);
+                if(isFull){
+                    sb.append(pinyin);
+                }
+                else{
+                    sb.append(pinyin.charAt(0));
+                }
+            }else{
+                sb.append(unit);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 将单个汉字转成拼音
+     *
+     * @param hanzi 汉字字符
+     *
+     * @return 拼音
+     */
+    private static String convertSingleHanzi2Pinyin(char hanzi){
+        HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
+        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+        String[] res;
+        StringBuffer sb=new StringBuffer();
+        try {
+            res = PinyinHelper.toHanyuPinyinStringArray(hanzi,outputFormat);
+            sb.append(res[0]);//对于多音字,只用第一个拼音
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "";
+        }
+        return sb.toString();
+    }
+
+    /***
+     * 匹配
+     * <P>
+     * 根据字符和正则表达式进行匹配
+     *
+     * @param str 源字符串
+     * @param regex 正则表达式
+     *
+     * @return true:匹配成功  false:匹配失败
+     */
+    private static boolean match(String str,String regex){
+        Pattern pattern=Pattern.compile(regex);
+        Matcher matcher=pattern.matcher(str);
+        return matcher.find();
+    }
+
+    /**
+     * 测试方法
+     */
+    public static void main(String[] args) {
+        System.out.println(convertHanzi2Pinyin("雷超是神",false));
+    }
+}
+
+

+ 45 - 0
src/main/java/com/sy/utils/CreateUuid.java

@@ -0,0 +1,45 @@
+package com.sy.utils;
+/**生成符合规则的uuid 形式为8-4-4-4-12的32个字符,加上“-”一共是36位*/
+
+import java.util.UUID;
+
+/**
+ * 123e4567-e89b-12d3-a456-556642440000
+ * xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
+ * **/
+public class CreateUuid {
+
+    public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f",
+            "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
+            "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
+            "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
+            "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
+            "W", "X", "Y", "Z" };
+
+
+    public static String generateTicket() {
+        String ticket = UUID.randomUUID().toString();
+        //ticket.replaceAll("-", "")
+        return ticket;
+    }
+
+    public static String generateShortUuid() {
+        //调用Java提供的生成随机字符串的对象:32位,十六进制,中间包含-
+        StringBuffer shortBuffer = new StringBuffer();
+        String uuid = UUID.randomUUID().toString().replace("-", "");
+
+        for (int i = 0; i < 8; i++) {                       //分为8组
+            String str = uuid.substring(i * 4, i * 4 + 4);  //每组4位
+            int x = Integer.parseInt(str, 16);              //将4位str转化为int 16进制下的表示
+
+            //用该16进制数取模62(十六进制表示为314(14即E)),结果作为索引取出字符
+            shortBuffer.append(chars[x % 0x3E]);
+        }
+        return shortBuffer.toString();
+    }
+
+    public static void main(String[] args) {
+        String s = CreateUuid.generateTicket();
+        System.out.println(s);
+    }
+}

+ 178 - 0
src/main/java/com/sy/utils/ECDSASigner.java

@@ -0,0 +1,178 @@
+package com.sy.utils;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+
+import java.math.BigDecimal;
+import java.security.*;
+import java.security.spec.ECGenParameterSpec;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+
+@Slf4j
+@Component
+public class ECDSASigner {
+    //public static final String publicSig="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwvbT7jUHDUbJzrU7oGPKIJhYw5DQ4xVMLqYcpUYeHIirlqghpXKpggeNmYVMYG6R2uJ7DmbajBU158ybMj70Gg==";
+    public static final String publicSig="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmU7b_sdeNNDxyQUYLhWDfdQtXRLO1WD1U9CYZKSZNk44OcVcEg0xKvMQ1m2OY2oLlql9ggs7SVqkzyJ6oFYiVg==";
+
+    public static final String privateKeySig="MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCAmNynvNAl5h9Pob6BldE1U1anv8orqMc4z15XW2BzBmg==";
+    private static final String SIGN = "sign";
+
+    private static final String TIMESTAMP = "timestamp";
+
+    private static final String ALGORITHM = "EC";
+
+    private static final String ALGORITHM_SPEC = "SHA256withECDSA";
+
+    public static void main(String[] args) throws InvalidAlgorithmParameterException, NoSuchAlgorithmException {
+        Map<String, Object> params = new HashMap<>();
+        params.put("startTimestamp",20240710);
+        params.put("endTimestamp", 20240715);
+        params.put("salePrice",12.0);
+        extracted(params);
+    }
+
+    public static Map<String, Object> extracted(Map<String, Object> params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
+//        KeyPair keyPair = generateKeyPair();
+//        String publicKeyBase64 = base64Encode(keyPair.getPublic().getEncoded());
+//        String privateKeyBase64 = base64Encode(keyPair.getPrivate().getEncoded());
+        if (params.containsKey("salePrice")) {
+            BigDecimal bigDecimal = new BigDecimal(String.valueOf(params.get("salePrice")));
+            BigDecimal stripped = bigDecimal.stripTrailingZeros();
+            params.put("salePrice",stripped);
+        }
+        String publicKeyBase64 =publicSig;
+        String privateKeyBase64 =privateKeySig;
+        log.info("公钥:[{}]", publicKeyBase64);
+        log.info("私钥:[{}]", privateKeyBase64);
+
+        params.put(TIMESTAMP, System.currentTimeMillis());
+        String sign = sign(params, privateKeyBase64);
+        log.info("sign:[{}]", sign);
+
+        params.put(SIGN, sign);
+        boolean verify = verify(params, publicKeyBase64);
+        log.info("verify:[{}]", verify);
+        return params;
+    }
+
+    /**
+     * 生成公私钥对
+     * @return
+     * @throws NoSuchAlgorithmException
+     * @throws InvalidAlgorithmParameterException
+     */
+    public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
+        KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
+        SecureRandom random = SecureRandom.getInstanceStrong();
+        ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1");
+        keyGen.initialize(ecSpec, random);
+        return keyGen.generateKeyPair();
+    }
+
+    /**
+     * 数据签名
+     * 签名异常时返回null
+     * @param params
+     * @param privateKeyBase64
+     * @returneption
+     */
+    public static String sign(Map<String, Object> params, String privateKeyBase64) {
+        try {
+            String originData = buildOriginData(params);
+            log.info("sign的:originData:[{}]", originData);
+            byte[] privateKeyBytes = base64Decode(privateKeyBase64);
+
+            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
+            KeyFactory kf = KeyFactory.getInstance(ALGORITHM);
+            PrivateKey privateKey = kf.generatePrivate(keySpec);
+            Signature privateSignature = Signature.getInstance(ALGORITHM_SPEC);
+            privateSignature.initSign(privateKey);
+            privateSignature.update(originData.getBytes());
+            byte[] signature = privateSignature.sign();
+            return base64Encode(signature);
+        } catch (NoSuchAlgorithmException | InvalidKeySpecException | InvalidKeyException | SignatureException e) {
+            log.error("sign error", e);
+        }
+        return null;
+    }
+
+    /**
+     * 验签
+     * @param params
+     * @param publicKeyBase64
+     * @return
+     */
+    public static boolean verify(Map<String, Object> params, String publicKeyBase64) {
+        try {
+            // 时间戳要求不超过60秒
+            long requestTimestamp = Long.parseLong(String.valueOf(params.get(TIMESTAMP)));
+            if (Math.abs(requestTimestamp - System.currentTimeMillis()) > 60_000) {
+                log.warn("verify fail, request timestamp time is over 60 seconds");
+                return false;
+            }
+
+            // sign参数不参与验签
+            String sign = String.valueOf(params.get(SIGN));
+
+            String originData = buildOriginData(params);
+            log.info("验证签名的:originData:[{}]", originData);
+            byte[] publicKeyBytes = base64Decode(publicKeyBase64);
+
+            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
+            KeyFactory kf = KeyFactory.getInstance(ALGORITHM);
+            PublicKey publicKey = kf.generatePublic(keySpec);
+            Signature publicSignature = Signature.getInstance(ALGORITHM_SPEC);
+            publicSignature.initVerify(publicKey);
+            publicSignature.update(originData.getBytes());
+             return publicSignature.verify(base64Decode(sign));
+        } catch (NoSuchAlgorithmException | InvalidKeySpecException | SignatureException | InvalidKeyException e) {
+            log.error("verify error", e);
+        }
+        return false;
+    }
+
+    private static String base64Encode(byte[] bytes) {
+        return Base64.getUrlEncoder().encodeToString(bytes);
+    }
+
+    private static byte[] base64Decode(String base64) {
+        return Base64.getUrlDecoder().decode(base64);
+    }
+
+    /**
+     * 参数根据key的ascii码从小到大排序,拼接为kv字符串
+     * eg: a123b456csuccesstimestamp1718976009243
+     * @param params
+     * @return
+     */
+    private static String buildOriginData(Map<String, Object> params) {
+        // 按照ascii码排序
+        Map<String, String> sortMap = new TreeMap<>();
+        params.forEach((k, v) -> {
+            if (!SIGN.equals(k)) {
+                if (v instanceof BigDecimal) {
+                    sortMap.put(k, ((BigDecimal) v).stripTrailingZeros().toPlainString());
+                } else {
+                    sortMap.put(k, String.valueOf(v));
+                }
+            }
+        });
+        StringBuffer originStr = new StringBuffer();
+        sortMap.forEach((k, v) -> {
+            if (StringUtils.isNotBlank(v) && !"null".equals(v)) {
+                originStr.append(k).append(v);
+            }
+        });
+        return originStr.toString();
+    }
+
+}

+ 70 - 0
src/main/java/com/sy/utils/ImportExcelUtils.java

@@ -0,0 +1,70 @@
+package com.sy.utils;
+
+import com.sy.entity.Goods;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.stereotype.Component;
+
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class ImportExcelUtils {
+
+
+    // 将表格中的数据添加到List集合中
+    public List<Goods> upload(String fileName, InputStream is,String shopId,String operatorName) throws Exception{
+        List<Goods> goodsList = new ArrayList<>();
+        Workbook workbook = getWorkbook(fileName,is);
+        int number = workbook.getNumberOfSheets(); // 获取sheet值
+        for (int i = 0; i < number; i++) {
+            Sheet sheet = workbook.getSheetAt(i); // 获取表格页码
+            if (sheet != null){
+                int rowNum = sheet.getLastRowNum(); // 获取该页表共有多少行
+                for (int j = 1; j <= rowNum; j++) {  // 一般来说第一行是标题,所以第二行开始读取
+                    Goods goods = new Goods();
+                    Row row = sheet.getRow(j); // 获取表格行
+                    row.getCell(0).setCellType(Cell.CELL_TYPE_STRING); // 将该单元格获取出来的值设为String类型
+                    goods.setBarcode(row.getCell(0).getStringCellValue()); // 获取表格单元格并给User设置值
+                    row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
+                    goods.setName(row.getCell(1).getStringCellValue());
+                    row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
+                    String stringCellValue = row.getCell(2).getStringCellValue();
+                    //方式一
+                    BigDecimal bigDecimal = new BigDecimal(stringCellValue);
+                    goods.setPrice(bigDecimal);
+                    row.getCell(3).setCellType(Cell.CELL_TYPE_STRING);
+                    goods.setUnit(row.getCell(3).getStringCellValue());
+                    goods.setId(CreateUuid.generateTicket());
+                    goods.setShorthand(ChineseCharacterUtil.convertHanzi2Pinyin(row.getCell(1).getStringCellValue(),false));
+                    goods.setShopId(shopId);
+                    goods.setOperatorName(operatorName);
+                    System.out.println(goods);
+                    goodsList.add(goods);
+                }
+            }
+        }
+        return goodsList;
+    }
+
+    // 判断传入的文件是哪种类型的excel文件
+    public Workbook getWorkbook(String fileName,InputStream is) throws Exception{
+        Workbook workbook = null;
+        String name = fileName.substring(fileName.lastIndexOf("."));
+        System.out.println(name);
+        if (".xls".equals(name)){
+            workbook = new HSSFWorkbook(is);
+        }else if (".xlsx".equals(name)){
+            workbook = new XSSFWorkbook(is);
+        }else {
+            throw new Exception(" 请上传.xls/.xlsx格式文件!");
+        }
+        return workbook;
+    }
+}

+ 116 - 0
src/main/java/com/sy/utils/Utils.java

@@ -0,0 +1,116 @@
+package com.sy.utils;
+
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+public class Utils {
+
+    public static ArrayList<String> getStartAndEndTimeStamps(String dateStr) {
+        ArrayList<String> dayStartEndTimeStamp=new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        try {
+            // 解析日期字符串
+            Date date = sdf.parse(dateStr);
+
+            // 构造开始时间
+            Calendar calStart = Calendar.getInstance();
+            calStart.setTime(date);
+            calStart.set(Calendar.HOUR_OF_DAY, 0);
+            calStart.set(Calendar.MINUTE, 0);
+            calStart.set(Calendar.SECOND, 0);
+            calStart.set(Calendar.MILLISECOND, 0);
+
+            // 构造结束时间
+            Calendar calEnd = Calendar.getInstance();
+            calEnd.setTime(date);
+            calEnd.set(Calendar.HOUR_OF_DAY, 23);
+            calEnd.set(Calendar.MINUTE, 59);
+            calEnd.set(Calendar.SECOND, 59);
+            calEnd.set(Calendar.MILLISECOND, 999); // 或者使用999999,取决于你需要的精度
+
+            // 格式化日期
+            SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+            String startTime = sdfDateTime.format(calStart.getTime());
+            String endTime = sdfDateTime.format(calEnd.getTime());
+            dayStartEndTimeStamp.add(startTime);
+            dayStartEndTimeStamp.add(endTime);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return dayStartEndTimeStamp;
+    }
+
+    public static String getTimeStr(Long Date) {
+        // 将时间戳转换为 Instant
+        Instant instant = Instant.ofEpochMilli(Date);
+
+        // 将 Instant 转换为特定时区的 ZonedDateTime
+        ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault()); // 使用系统默认时区
+        // 如果你需要使用其他时区,可以替换 ZoneId.systemDefault() 为相应的时区,例如 ZoneId.of("Asia/Shanghai")
+
+        // 定义日期时间格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
+
+        // 将 ZonedDateTime 转换为字符串
+        String formattedDateTime = zonedDateTime.format(formatter);
+
+        return formattedDateTime;
+    }
+
+
+    /**
+     * 输出开始日期到结束日期之间的每一天
+     *
+     * @param startDate 开始日期字符串(格式:yyyyMMdd)
+     * @param endDate 结束日期字符串(格式:yyyyMMdd)
+     */
+    public static List<String> printDatesBetween(Long startDate, Long endDate) {
+        List<String> strings = generateDateRange(startDate, endDate);
+        return strings;
+    }
+
+
+    public static List<String> generateDateRange(Long start, Long end) {
+        LocalDate startDate = LocalDate.parse(String.valueOf(start), DateTimeFormatter.ofPattern("yyyyMMdd"));
+        LocalDate endDate = LocalDate.parse(String.valueOf(end), DateTimeFormatter.ofPattern("yyyyMMdd"));
+
+        List<String> dateList = new ArrayList<>();
+        // 使用循环从startDate遍历到endDate(包含endDate)
+        for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
+            // 将LocalDate格式化为yyyyMMdd字符串并添加到列表中
+            dateList.add(date.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+        }
+        return dateList;
+    }
+
+    public static Timestamp convertStringToTimestamp(String dateString) {
+        // 将字符串解析为long类型的时间戳
+        long timestampMillis = Long.parseLong(dateString);
+        // 使用Instant类将毫秒数转换为Instant对象
+        Instant instant = Instant.ofEpochMilli(timestampMillis);
+        // 将Instant对象转换为LocalDateTime(需要指定时区,这里使用系统默认时区)
+        LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
+        // 将LocalDate对象格式化为yyyy-MM-dd格式的字符串
+        String formattedDate = localDate.toString();
+        try {
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            Date parsedDate = dateFormat.parse(formattedDate);
+            Timestamp timestamp = new Timestamp(parsedDate.getTime());
+            return timestamp;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public static Timestamp stringToTimestamp(String dateString){
+        long timestamp = Long.parseLong(dateString);
+        Instant instant = Instant.ofEpochSecond(timestamp);
+        LocalDateTime dateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
+        return Timestamp.valueOf(dateTime);
+    }
+}

+ 42 - 0
src/main/java/com/sy/utils/vo/ResultMessage.java

@@ -0,0 +1,42 @@
+package com.sy.utils.vo;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 前后端交互VO
+ *
+ * @author Chopper
+ */
+@Data
+public class ResultMessage<T> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 成功标志
+     */
+    private boolean success;
+
+    /**
+     * 消息
+     */
+    private String message;
+
+    /**
+     * 返回代码
+     */
+    private Integer code;
+
+    /**
+     * 时间戳
+     */
+    private long timestamp = System.currentTimeMillis();
+
+    /**
+     * 结果对象
+     */
+    private T result;
+}

+ 37 - 0
src/main/resources/application.yml

@@ -0,0 +1,37 @@
+server:
+  servlet:
+    context-path: /hnSy-qg-app
+  port: 8081
+
+spring:
+  datasource:
+    druid:
+      stat-view-servlet:
+        enabled: true
+    dynamic:
+      primary: goods
+      datasource:
+        goods:
+          url: jdbc:postgresql://47.104.78.200:54802/goods
+          username: postgres # 数据库名
+          password: hainsyDB # 数据库密码
+          driver-class-name: org.postgresql.Driver
+          hikari:
+            maximum-pool-size: 10
+            minimum-idle: 5
+        orders:
+          url: jdbc:postgresql://47.104.78.200:54802/orders
+          username: postgres # 数据库名
+          password: hainsyDB # 数据库密码
+          driver-class-name: org.postgresql.Driver
+          hikari:
+            maximum-pool-size: 10
+            minimum-idle: 5
+        users:
+          url: jdbc:postgresql://47.104.78.200:54802/user
+          username: postgres # 数据库名
+          password: hainsyDB # 数据库密码
+          driver-class-name: org.postgresql.Driver
+          hikari:
+            maximum-pool-size: 10
+            minimum-idle: 5

+ 117 - 0
src/main/resources/mapper/OrdersMapper.xml

@@ -0,0 +1,117 @@
+<?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.sy.mapper.orders.OrdersMapper">
+  <resultMap id="BaseResultMap" type="com.sy.entity.Orders">
+    <!--@mbg.generated-->
+    <!--@Table orders-->
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="number" jdbcType="VARCHAR" property="number" />
+    <result column="total_fee" jdbcType="NUMERIC" property="totalFee" />
+    <result column="other_fee" jdbcType="NUMERIC" property="otherFee" />
+    <result column="reduce_fee" jdbcType="NUMERIC" property="reduceFee" />
+    <result column="buyer_discount" jdbcType="NUMERIC" property="buyerDiscount" />
+    <result column="pay_fee" jdbcType="NUMERIC" property="payFee" />
+    <result column="pay_status" jdbcType="INTEGER" property="payStatus" />
+    <result column="payment" jdbcType="VARCHAR" property="payment" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="status_add" jdbcType="INTEGER" property="statusAdd" />
+    <result column="is_ring" jdbcType="INTEGER" property="isRing" />
+    <result column="people_num" jdbcType="INTEGER" property="peopleNum" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="buyer_id" jdbcType="VARCHAR" property="buyerId" />
+    <result column="buyer_name" jdbcType="VARCHAR" property="buyerName" />
+    <result column="buyer_pay" jdbcType="INTEGER" property="buyerPay" />
+    <result column="openid" jdbcType="VARCHAR" property="openid" />
+    <result column="board_id" jdbcType="VARCHAR" property="boardId" />
+    <result column="shop_id" jdbcType="VARCHAR" property="shopId" />
+    <result column="shop_name" jdbcType="VARCHAR" property="shopName" />
+    <result column="operator_id" jdbcType="VARCHAR" property="operatorId" />
+    <result column="operator_name" jdbcType="VARCHAR" property="operatorName" />
+    <result column="create_at" jdbcType="TIMESTAMP" property="createAt" />
+    <result column="update_at" jdbcType="TIMESTAMP" property="updateAt" />
+    <result column="pay_lock" jdbcType="INTEGER" property="payLock" />
+    <result column="pay_at" jdbcType="TIMESTAMP" property="payAt" />
+    <result column="source" jdbcType="INTEGER" property="source" />
+    <result column="reduce_opt_id" jdbcType="VARCHAR" property="reduceOptId" />
+    <result column="reduce_opt_name" jdbcType="VARCHAR" property="reduceOptName" />
+    <result column="canju_fee" jdbcType="NUMERIC" property="canjuFee" />
+    <result column="canju_name" jdbcType="VARCHAR" property="canjuName" />
+    <result column="retreat_fee" jdbcType="NUMERIC" property="retreatFee" />
+    <result column="pay_fee_first" jdbcType="NUMERIC" property="payFeeFirst" />
+    <result column="goods_amount" jdbcType="NUMERIC" property="goodsAmount" />
+    <result column="is_huiyuan_xd" jdbcType="INTEGER" property="isHuiyuanXd" />
+    <result column="pay_select" jdbcType="VARCHAR" property="paySelect" />
+    <result column="code" jdbcType="VARCHAR" property="code" />
+    <result column="order_flag" jdbcType="VARCHAR" property="orderFlag" />
+    <result column="open_staff_name" jdbcType="VARCHAR" property="openStaffName" />
+    <result column="open_staff_id" jdbcType="VARCHAR" property="openStaffId" />
+    <result column="fee_type" jdbcType="INTEGER" property="feeType" />
+    <result column="consume_rate" jdbcType="NUMERIC" property="consumeRate" />
+    <result column="timing_scheme_type" jdbcType="INTEGER" property="timingSchemeType" />
+    <result column="timing_scheme_id" jdbcType="VARCHAR" property="timingSchemeId" />
+    <result column="open_at" jdbcType="TIMESTAMP" property="openAt" />
+    <result column="end_at" jdbcType="TIMESTAMP" property="endAt" />
+    <result column="is_minimum_charge" jdbcType="INTEGER" property="isMinimumCharge" />
+    <result column="minimum_charge" jdbcType="NUMERIC" property="minimumCharge" />
+    <result column="is_coupon" jdbcType="INTEGER" property="isCoupon" />
+    <result column="is_exchange_goods" jdbcType="INTEGER" property="isExchangeGoods" />
+    <result column="is_include_goods" jdbcType="INTEGER" property="isIncludeGoods" />
+    <result column="coupon_fee" jdbcType="NUMERIC" property="couponFee" />
+    <result column="withdrawal_rate" jdbcType="NUMERIC" property="withdrawalRate" />
+    <result column="withdrawal_fee" jdbcType="NUMERIC" property="withdrawalFee" />
+    <result column="withdrawal_service_charge" jdbcType="NUMERIC" property="withdrawalServiceCharge" />
+    <result column="order_discount" jdbcType="NUMERIC" property="orderDiscount" />
+    <result column="discount_opt_id" jdbcType="VARCHAR" property="discountOptId" />
+    <result column="discount_opt_name" jdbcType="VARCHAR" property="discountOptName" />
+    <result column="total_fee_tmp" jdbcType="NUMERIC" property="totalFeeTmp" />
+    <result column="yh_type" jdbcType="VARCHAR" property="yhType" />
+    <result column="del_small_change" jdbcType="NUMERIC" property="delSmallChange" />
+    <result column="cumulative_other_fee" jdbcType="NUMERIC" property="cumulativeOtherFee" />
+    <result column="pay_person_type" jdbcType="VARCHAR" property="payPersonType" />
+    <result column="pay_person_name" jdbcType="VARCHAR" property="payPersonName" />
+    <result column="pay_person_id" jdbcType="VARCHAR" property="payPersonId" />
+    <result column="merge_sub_pay_fee" jdbcType="NUMERIC" property="mergeSubPayFee" />
+    <result column="merge_sub_total_fee" jdbcType="NUMERIC" property="mergeSubTotalFee" />
+    <result column="merge_sub_other_fee" jdbcType="NUMERIC" property="mergeSubOtherFee" />
+    <result column="merge_sub_canju_fee" jdbcType="NUMERIC" property="mergeSubCanjuFee" />
+    <result column="merge_sub_retreat_fee" jdbcType="NUMERIC" property="mergeSubRetreatFee" />
+    <result column="area_board_name" jdbcType="VARCHAR" property="areaBoardName" />
+    <result column="other_fee_tmp" jdbcType="NUMERIC" property="otherFeeTmp" />
+    <result column="area_id" jdbcType="VARCHAR" property="areaId" />
+    <result column="member_name" jdbcType="VARCHAR" property="memberName" />
+    <result column="member_phone" jdbcType="VARCHAR" property="memberPhone" />
+    <result column="pay_lock_at" jdbcType="TIMESTAMP" property="payLockAt" />
+    <result column="timing_status" jdbcType="INTEGER" property="timingStatus" />
+    <result column="cancel_order_person" jdbcType="VARCHAR" property="cancelOrderPerson" />
+    <result column="is_del_small_change" jdbcType="INTEGER" property="isDelSmallChange" />
+    <result column="pay_fee_tmp" jdbcType="NUMERIC" property="payFeeTmp" />
+    <result column="pay_fee_origin" jdbcType="NUMERIC" property="payFeeOrigin" />
+    <result column="merge_total_pay_fee" jdbcType="NUMERIC" property="mergeTotalPayFee" />
+    <result column="payment1_name" jdbcType="VARCHAR" property="payment1Name" />
+    <result column="payment1_fee" jdbcType="NUMERIC" property="payment1Fee" />
+    <result column="payment2_name" jdbcType="VARCHAR" property="payment2Name" />
+    <result column="payment2_fee" jdbcType="NUMERIC" property="payment2Fee" />
+    <result column="speed_type" jdbcType="VARCHAR" property="speedType" />
+    <result column="is_third_ticket" jdbcType="INTEGER" property="isThirdTicket" />
+    <result column="third_ticket_name" jdbcType="VARCHAR" property="thirdTicketName" />
+    <result column="third_ticket_fee" jdbcType="NUMERIC" property="thirdTicketFee" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, "number", total_fee, other_fee, reduce_fee, buyer_discount, pay_fee, pay_status, 
+    payment, "status", status_add, is_ring, people_num, remark, buyer_id, buyer_name, 
+    buyer_pay, openid, board_id, shop_id, shop_name, operator_id, operator_name, create_at, 
+    update_at, pay_lock, pay_at, "source", reduce_opt_id, reduce_opt_name, canju_fee, 
+    canju_name, retreat_fee, pay_fee_first, goods_amount, is_huiyuan_xd, pay_select, 
+    code, order_flag, open_staff_name, open_staff_id, fee_type, consume_rate, timing_scheme_type, 
+    timing_scheme_id, open_at, end_at, is_minimum_charge, minimum_charge, is_coupon, 
+    is_exchange_goods, is_include_goods, coupon_fee, withdrawal_rate, withdrawal_fee, 
+    withdrawal_service_charge, order_discount, discount_opt_id, discount_opt_name, total_fee_tmp, 
+    yh_type, del_small_change, cumulative_other_fee, pay_person_type, pay_person_name, 
+    pay_person_id, merge_sub_pay_fee, merge_sub_total_fee, merge_sub_other_fee, merge_sub_canju_fee, 
+    merge_sub_retreat_fee, area_board_name, other_fee_tmp, area_id, member_name, member_phone, 
+    pay_lock_at, timing_status, cancel_order_person, is_del_small_change, pay_fee_tmp, 
+    pay_fee_origin, merge_total_pay_fee, payment1_name, payment1_fee, payment2_name, 
+    payment2_fee, speed_type, is_third_ticket, third_ticket_name, third_ticket_fee
+  </sql>
+</mapper>

+ 24 - 0
src/main/resources/mapper/RetreatGoodsMapper.xml

@@ -0,0 +1,24 @@
+<?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.sy.mapper.orders.RetreatGoodsMapper">
+  <resultMap id="BaseResultMap" type="com.sy.entity.RetreatGoods">
+    <!--@mbg.generated-->
+    <!--@Table retreat_goods-->
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="shop_id" jdbcType="VARCHAR" property="shopId" />
+    <result column="order_id" jdbcType="VARCHAR" property="orderId" />
+    <result column="pay_status" jdbcType="INTEGER" property="payStatus" />
+    <result column="retreat_remark" jdbcType="VARCHAR" property="retreatRemark" />
+    <result column="pay_fee" jdbcType="VARCHAR" property="payFee" />
+    <result column="fee" jdbcType="NUMERIC" property="fee" />
+    <result column="operator_id" jdbcType="VARCHAR" property="operatorId" />
+    <result column="operator_name" jdbcType="VARCHAR" property="operatorName" />
+    <result column="create_at" jdbcType="TIMESTAMP" property="createAt" />
+    <result column="refund_type" jdbcType="VARCHAR" property="refundType" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, shop_id, order_id, pay_status, retreat_remark, pay_fee, fee, operator_id, operator_name, 
+    create_at, refund_type
+  </sql>
+</mapper>

+ 39 - 0
src/main/resources/mapper/ShopPaymentRecordMapper.xml

@@ -0,0 +1,39 @@
+<?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.sy.mapper.orders.ShopPaymentRecordMapper">
+  <resultMap id="BaseResultMap" type="com.sy.entity.ShopPaymentRecord">
+    <!--@mbg.generated-->
+    <!--@Table shop_payment_record-->
+    <id column="order_id" jdbcType="VARCHAR" property="orderId" />
+    <result column="shop_id" jdbcType="VARCHAR" property="shopId" />
+    <result column="is_member" jdbcType="INTEGER" property="isMember" />
+    <result column="pay_person_type" jdbcType="VARCHAR" property="payPersonType" />
+    <result column="pay_person_name" jdbcType="VARCHAR" property="payPersonName" />
+    <result column="pay_at" jdbcType="TIMESTAMP" property="payAt" />
+    <result column="cash" jdbcType="NUMERIC" property="cash" />
+    <result column="bank" jdbcType="NUMERIC" property="bank" />
+    <result column="free" jdbcType="NUMERIC" property="free" />
+    <result column="zjdcodecard" jdbcType="NUMERIC" property="zjdcodecard" />
+    <result column="membercard" jdbcType="NUMERIC" property="membercard" />
+    <result column="keepamount" jdbcType="NUMERIC" property="keepamount" />
+    <result column="other" jdbcType="NUMERIC" property="other" />
+    <result column="weixin" jdbcType="NUMERIC" property="weixin" />
+    <result column="alipay" jdbcType="NUMERIC" property="alipay" />
+    <result column="yunshanfu" jdbcType="NUMERIC" property="yunshanfu" />
+    <result column="digitalcurrency" jdbcType="NUMERIC" property="digitalcurrency" />
+    <result column="allinpay" jdbcType="NUMERIC" property="allinpay" />
+    <result column="adapay" jdbcType="NUMERIC" property="adapay" />
+    <result column="return_cash" jdbcType="NUMERIC" property="returnCash" />
+    <result column="return_origin" jdbcType="NUMERIC" property="returnOrigin" />
+    <result column="create_at" jdbcType="TIMESTAMP" property="createAt" />
+    <result column="lakala" jdbcType="NUMERIC" property="lakala" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    order_id, shop_id, is_member, pay_person_type, pay_person_name, pay_at, cash, bank, 
+    "free", zjdcodecard, membercard, keepamount, other, weixin, alipay, yunshanfu, digitalcurrency, 
+    allinpay, adapay, return_cash, return_origin, create_at, lakala
+  </sql>
+
+<!--auto generated by MybatisCodeHelper on 2024-07-15-->
+</mapper>

+ 43 - 0
src/main/resources/static/upload.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>上传文件</title>
+    <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
+    <script>
+        function upload(){
+           /* var shopId='shopId';
+            var operatorName='operatorName';*/
+            var shopId = document.getElementById('shopId').value;
+            var operatorName = document.getElementById('operatorName').value;
+            var formData = new FormData(); //创建一个formData对象实例
+            var excelFile = $("#uploadFile").get(0).files[0];
+            formData.append("excelFile",excelFile)
+            $.ajax({
+                url: "http://localhost:8081/upload?shopId="+shopId+"&operatorName="+operatorName,
+                data: formData,
+                type: 'post',
+                contentType:false, // 必须false才会自动加上正确的Content-Type
+                processData: false, // 必须false才会避开jQuery对 formdata 的默认处理,XMLHttpRequest会对 formdata 进行正确的处理
+                success: function (resp){
+                    console.log(resp);
+                }
+            })
+        }
+
+    </script>
+</head>
+<body>
+    <p>上传的文件</p>
+    <input multiple="multiple" type="file" id="uploadFile">
+    <br>
+    <p>商铺id</p>
+    <input  datatype="text" id="shopId">
+    <br>
+    <p>商铺名称</p>
+    <input  datatype="text" id="operatorName">
+    <br>
+    <p></p>
+    <button onclick="upload()">上传</button>
+</body>
+</html>

+ 131 - 0
src/test/java/com/sy/QgSdkTests.java

@@ -0,0 +1,131 @@
+package com.sy;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sy.utils.ECDSASigner;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+
+import java.math.BigDecimal;
+import java.nio.charset.Charset;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.sy.utils.ECDSASigner.*;
+
+
+@Slf4j
+@SpringBootTest
+@AutoConfigureMockMvc
+class QgSdkTests {
+
+    @Autowired
+    ECDSASigner ecdsaSigner;
+    @Autowired
+    private MockMvc mockMvc;
+    @Test
+    void orderList() throws Exception {
+        Map<String, Object> params = new HashMap<>();
+        params.put("startTimestamp","1721549280015");
+        params.put("endTimestamp", "1721605140015");
+        //params.put("shopId","20062910053879");
+        Map<String, Object> extracted = extracted(params);
+        // 遍历原始的Map,并将键和值作为Object类型添加到新的Map中
+        params.forEach((key, value) -> System.out.println("Key = " + key + ", Value = " + value));
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonString = objectMapper.writeValueAsString(extracted);
+        System.out.println(jsonString);
+        ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/order/list")
+                .contentType(MediaType.APPLICATION_JSON_VALUE)
+                .content(jsonString));
+        System.out.println(perform.andReturn().getResponse().getContentAsString(Charset.forName("utf-8")));
+    }
+
+    @Test
+    void profitSeparateList() throws Exception {
+        Map<String, Object> params = new HashMap<>();
+        params.put("startTimestamp","20240701");
+        params.put("endTimestamp", "20240717");
+        //params.put("shopId","19031816333414");
+        Map<String, Object> extracted = extracted(params);
+        // 遍历原始的Map,并将键和值作为Object类型添加到新的Map中
+        params.forEach((key, value) -> System.out.println("Key = " + key + ", Value = " + value));
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonString = objectMapper.writeValueAsString(extracted);
+        System.out.println(jsonString);
+        ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/order/profit/separate/list")
+                .contentType(MediaType.APPLICATION_JSON_VALUE)
+                .content(jsonString));
+        System.out.println(perform.andReturn().getResponse().getContentAsString(Charset.forName("utf-8")));
+    }
+
+    @Test
+    void refundList() throws Exception {
+        Map<String, Object> params = new HashMap<>();
+        params.put("startTimestamp","1720563978000");
+        params.put("endTimestamp", "1721174865743");
+        params.put("shopId","24071617124901");
+        Map<String, Object> extracted = extracted(params);
+        // 遍历原始的Map,并将键和值作为Object类型添加到新的Map中
+        params.forEach((key, value) -> System.out.println("Key = " + key + ", Value = " + value));
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonString = objectMapper.writeValueAsString(extracted);
+        System.out.println(jsonString);
+        ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/order/refund/list")
+                .contentType(MediaType.APPLICATION_JSON_VALUE)
+                .content(jsonString));
+        System.out.println(perform.andReturn().getResponse().getContentAsString(Charset.forName("utf-8")));
+    }
+
+
+
+    @Test
+    void goodsPush() throws Exception {
+        Map<String, Object> params = new HashMap<>();
+        params.put("goodsId",8);
+        //params.put("goodsName", "雷超测试海天酱油");
+        //params.put("imgUrl","https://qgdy-test.oss-cn-chengdu.aliyuncs.com/2763ff0e290c991ab2963e4a383d1917bb299ed13d7675977cb1a1721a8a48fd.png");
+        //params.put("barCode","6974063510285");
+        //params.put("specs","500g");
+        params.put("salePrice",new BigDecimal(14.00));
+        //params.put("stock",10);
+        params.put("status",1);
+        params.put("shopId","19031816333414");
+        Map<String, Object> extracted = extracted(params);
+        // 遍历原始的Map,并将键和值作为Object类型添加到新的Map中
+        params.forEach((key, value) -> System.out.println("Key = " + key + ", Value = " + value));
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonString = objectMapper.writeValueAsString(extracted);
+        System.out.println(jsonString);
+        ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/goods/push")
+                .contentType(MediaType.APPLICATION_JSON_VALUE)
+                .content(jsonString));
+        System.out.println(perform.andReturn().getResponse().getContentAsString(Charset.forName("utf-8")));
+    }
+
+
+
+    @Test
+    void test3333(){
+        BigDecimal number = new BigDecimal("13.00");
+        BigDecimal stripped = number.stripTrailingZeros();
+
+        System.out.println(stripped);
+        // 假设我们期望原始数字是一个整数或者小数点后都是零
+        if (stripped.compareTo(BigDecimal.valueOf(stripped.longValue())) == 0) {
+            System.out.println("The number has only zeros after the decimal point.");
+        } else {
+            System.out.println("The number has non-zero digits after the decimal point.");
+        }
+
+    }
+
+}

BIN
test.txt