Browse Source

项目迁移

pruple_boy 10 months ago
commit
68aaf06d54
100 changed files with 6273 additions and 0 deletions
  1. 33 0
      .gitignore
  2. BIN
      .mvn/wrapper/maven-wrapper.jar
  3. 2 0
      .mvn/wrapper/maven-wrapper.properties
  4. BIN
      javax/JimiProClasses.jar
  5. BIN
      javax/activation.jar
  6. BIN
      javax/axis-ant.jar
  7. BIN
      javax/axis.jar
  8. BIN
      javax/bsf.jar
  9. BIN
      javax/castor-0.9.5.2.jar
  10. BIN
      javax/commons-codec-1.2.jar
  11. 60 0
      javax/commons-discovery-0.2.LICENSE
  12. BIN
      javax/commons-discovery-0.2.jar
  13. 176 0
      javax/commons-httpclient-3.0-rc2.LICENSE
  14. BIN
      javax/commons-httpclient-3.0-rc2.jar
  15. 202 0
      javax/commons-logging-1.0.4.LICENSE
  16. BIN
      javax/commons-logging-1.0.4.jar
  17. BIN
      javax/commons-net-1.0.0-dev.jar
  18. 56 0
      javax/endorsed/xercesImpl-2.6.2.LICENSE
  19. BIN
      javax/endorsed/xercesImpl-2.6.2.jar
  20. 56 0
      javax/endorsed/xml-apis-2.6.2.LICENSE
  21. BIN
      javax/endorsed/xml-apis-2.6.2.jar
  22. BIN
      javax/httpunit.jar
  23. BIN
      javax/ibmjsse.jar
  24. BIN
      javax/javax.jms.jar
  25. BIN
      javax/jaxrpc.jar
  26. BIN
      javax/junit-3.8.1.jar
  27. 48 0
      javax/log4j-1.2.8.LICENSE
  28. BIN
      javax/log4j-1.2.8.jar
  29. 20 0
      javax/log4j.properties
  30. BIN
      javax/mailapi_1_3_1.jar
  31. BIN
      javax/saaj.jar
  32. BIN
      javax/servlet.jar
  33. 86 0
      javax/wsdl4j-1.5.1.LICENSE
  34. BIN
      javax/wsdl4j-1.5.1.jar
  35. 308 0
      mvnw
  36. 205 0
      mvnw.cmd
  37. 322 0
      pom.xml
  38. 17 0
      src/main/java/com/shulead/datasync/DatasyncApplication.java
  39. 40 0
      src/main/java/com/shulead/datasync/bo/ClassBO.java
  40. 42 0
      src/main/java/com/shulead/datasync/bo/Response.java
  41. 24 0
      src/main/java/com/shulead/datasync/bo/StudentBO.java
  42. 30 0
      src/main/java/com/shulead/datasync/config/Configuration.java
  43. 85 0
      src/main/java/com/shulead/datasync/controller/DataSyncController.java
  44. 22 0
      src/main/java/com/shulead/datasync/entity/MClass.java
  45. 17 0
      src/main/java/com/shulead/datasync/entity/MClassDetail.java
  46. 16 0
      src/main/java/com/shulead/datasync/entity/MClassUnit.java
  47. 16 0
      src/main/java/com/shulead/datasync/entity/MEmployee.java
  48. 14 0
      src/main/java/com/shulead/datasync/entity/MManageAreaGroupDetail.java
  49. 18 0
      src/main/java/com/shulead/datasync/entity/MOrganization.java
  50. 31 0
      src/main/java/com/shulead/datasync/entity/MParent.java
  51. 17 0
      src/main/java/com/shulead/datasync/entity/MPriceList.java
  52. 17 0
      src/main/java/com/shulead/datasync/entity/MPriceListDetail.java
  53. 176 0
      src/main/java/com/shulead/datasync/entity/MStudent.java
  54. 54 0
      src/main/java/com/shulead/datasync/entity/ManageAreaGroup.java
  55. 17 0
      src/main/java/com/shulead/datasync/entity/SDictionary.java
  56. 68 0
      src/main/java/com/shulead/datasync/entity/UfHzqy.java
  57. 16 0
      src/main/java/com/shulead/datasync/entity/User.java
  58. 25 0
      src/main/java/com/shulead/datasync/entity/ViewPortalClassConsociation.java
  59. 145 0
      src/main/java/com/shulead/datasync/manager/ClassManager.java
  60. 625 0
      src/main/java/com/shulead/datasync/manager/DataSyncManager.java
  61. 23 0
      src/main/java/com/shulead/datasync/manager/MEmployeeManager.java
  62. 25 0
      src/main/java/com/shulead/datasync/manager/ManageAreaGroupManager.java
  63. 123 0
      src/main/java/com/shulead/datasync/manager/StudentManager.java
  64. 26 0
      src/main/java/com/shulead/datasync/manager/UfHzqyManager.java
  65. 26 0
      src/main/java/com/shulead/datasync/manager/ViewPortalClassConsociationManager.java
  66. 164 0
      src/main/java/com/shulead/datasync/manager/YiDaManager.java
  67. 14 0
      src/main/java/com/shulead/datasync/mapper/MClassDetailMapper.java
  68. 14 0
      src/main/java/com/shulead/datasync/mapper/MClassMapper.java
  69. 14 0
      src/main/java/com/shulead/datasync/mapper/MClassUnitMapper.java
  70. 14 0
      src/main/java/com/shulead/datasync/mapper/MEmployeeMapper.java
  71. 14 0
      src/main/java/com/shulead/datasync/mapper/MManageAreaGroupDetailMapper.java
  72. 15 0
      src/main/java/com/shulead/datasync/mapper/MOrganizationMapper.java
  73. 17 0
      src/main/java/com/shulead/datasync/mapper/MParentMapper.java
  74. 14 0
      src/main/java/com/shulead/datasync/mapper/MPriceListDetailMapper.java
  75. 14 0
      src/main/java/com/shulead/datasync/mapper/MPriceListMapper.java
  76. 17 0
      src/main/java/com/shulead/datasync/mapper/MStudentMapper.java
  77. 55 0
      src/main/java/com/shulead/datasync/mapper/ManageAreaGroupMapper.java
  78. 14 0
      src/main/java/com/shulead/datasync/mapper/SDictionaryMapper.java
  79. 16 0
      src/main/java/com/shulead/datasync/mapper/UfHzqyMapper.java
  80. 14 0
      src/main/java/com/shulead/datasync/mapper/UserMapper.java
  81. 14 0
      src/main/java/com/shulead/datasync/mapper/ViewPortalClassConsociationMapper.java
  82. 120 0
      src/main/java/com/shulead/datasync/portalcoupon/CreatePortalCoupon.java
  83. 120 0
      src/main/java/com/shulead/datasync/portalcoupon/CreatePortalCouponResponse.java
  84. 547 0
      src/main/java/com/shulead/datasync/portalcoupon/PortalCouponParams.java
  85. 14 0
      src/main/java/com/shulead/datasync/portalcoupon/PortalCouponWS.java
  86. 60 0
      src/main/java/com/shulead/datasync/portalcoupon/PortalCouponWSProxy.java
  87. 16 0
      src/main/java/com/shulead/datasync/portalcoupon/Portalcoupon.java
  88. 146 0
      src/main/java/com/shulead/datasync/portalcoupon/PortalcouponLocator.java
  89. 197 0
      src/main/java/com/shulead/datasync/portalcoupon/PortalcouponSoapBindingStub.java
  90. 248 0
      src/main/java/com/shulead/datasync/portalcoupon/Result.java
  91. 120 0
      src/main/java/com/shulead/datasync/portalprice/CreatePortalPriceResponse.java
  92. 37 0
      src/main/java/com/shulead/datasync/portalprice/Main.java
  93. 16 0
      src/main/java/com/shulead/datasync/portalprice/PortalPrice.java
  94. 132 0
      src/main/java/com/shulead/datasync/portalprice/PortalPriceLocator.java
  95. 266 0
      src/main/java/com/shulead/datasync/portalprice/PortalPriceParams.java
  96. 199 0
      src/main/java/com/shulead/datasync/portalprice/PortalPriceSoapBindingStub.java
  97. 15 0
      src/main/java/com/shulead/datasync/portalprice/PortalPriceWS.java
  98. 69 0
      src/main/java/com/shulead/datasync/portalprice/PortalPriceWSProxy.java
  99. 198 0
      src/main/java/com/shulead/datasync/portalprice/Result.java
  100. 0 0
      src/main/java/com/shulead/datasync/task/InitDataTask.java

+ 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/

BIN
.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.9.6/apache-maven-3.9.6-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar

BIN
javax/JimiProClasses.jar


BIN
javax/activation.jar


BIN
javax/axis-ant.jar


BIN
javax/axis.jar


BIN
javax/bsf.jar


BIN
javax/castor-0.9.5.2.jar


BIN
javax/commons-codec-1.2.jar


+ 60 - 0
javax/commons-discovery-0.2.LICENSE

@@ -0,0 +1,60 @@
+/*
+ * $Header$
+ * $Revision: 261199 $
+ * $Date: 2005-04-22 07:42:41 -0700 (Fri, 22 Apr 2005) $
+ *
+ * ====================================================================
+ *
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ *    any, must include the following acknowlegement:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowlegement may appear in the software itself,
+ *    if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Commons", and "Apache Software
+ *    Foundation" must not be used to endorse or promote products derived
+ *    from this software without prior written permission. For written
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ *    nor may "Apache" appear in their names without prior written
+ *    permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */

BIN
javax/commons-discovery-0.2.jar


+ 176 - 0
javax/commons-httpclient-3.0-rc2.LICENSE

@@ -0,0 +1,176 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS

BIN
javax/commons-httpclient-3.0-rc2.jar


+ 202 - 0
javax/commons-logging-1.0.4.LICENSE

@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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
+
+       http://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.

BIN
javax/commons-logging-1.0.4.jar


BIN
javax/commons-net-1.0.0-dev.jar


+ 56 - 0
javax/endorsed/xercesImpl-2.6.2.LICENSE

@@ -0,0 +1,56 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ *
+ * Copyright (c) 1999-2004 The Apache Software Foundation.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:  
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written 
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation and was
+ * originally based on software copyright (c) 1999, International
+ * Business Machines, Inc., http://www.ibm.com.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */

BIN
javax/endorsed/xercesImpl-2.6.2.jar


+ 56 - 0
javax/endorsed/xml-apis-2.6.2.LICENSE

@@ -0,0 +1,56 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ *
+ * Copyright (c) 1999-2004 The Apache Software Foundation.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:  
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written 
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation and was
+ * originally based on software copyright (c) 1999, International
+ * Business Machines, Inc., http://www.ibm.com.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */

BIN
javax/endorsed/xml-apis-2.6.2.jar


BIN
javax/httpunit.jar


BIN
javax/ibmjsse.jar


BIN
javax/javax.jms.jar


BIN
javax/jaxrpc.jar


BIN
javax/junit-3.8.1.jar


+ 48 - 0
javax/log4j-1.2.8.LICENSE

@@ -0,0 +1,48 @@
+/*
+ * ============================================================================
+ *                   The Apache Software License, Version 1.1
+ * ============================================================================
+ * 
+ *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of  source code must  retain the above copyright  notice,
+ *    this list of conditions and the following disclaimer.
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * 3. The end-user documentation included with the redistribution, if any, must
+ *    include  the following  acknowledgment:  "This product includes  software
+ *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+ *    Alternately, this  acknowledgment may  appear in the software itself,  if
+ *    and wherever such third-party acknowledgments normally appear.
+ * 
+ * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
+ *    endorse  or promote  products derived  from this  software without  prior
+ *    written permission. For written permission, please contact
+ *    apache@apache.org.
+ * 
+ * 5. Products  derived from this software may not  be called "Apache", nor may
+ *    "Apache" appear  in their name,  without prior written permission  of the
+ *    Apache Software Foundation.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * This software  consists of voluntary contributions made  by many individuals
+ * on  behalf of the Apache Software  Foundation.  For more  information on the 
+ * Apache Software Foundation, please see <http://www.apache.org/>.
+ *
+ */

BIN
javax/log4j-1.2.8.jar


+ 20 - 0
javax/log4j.properties

@@ -0,0 +1,20 @@
+# Set root category priority to INFO and its only appender to CONSOLE.
+log4j.rootCategory=INFO, CONSOLE
+#log4j.rootCategory=INFO, CONSOLE, LOGFILE
+
+# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
+log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
+
+# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.Threshold=INFO
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
+
+# LOGFILE is set to be a File appender using a PatternLayout.
+log4j.appender.LOGFILE=org.apache.log4j.FileAppender
+log4j.appender.LOGFILE.File=axis.log
+log4j.appender.LOGFILE.Append=true
+log4j.appender.LOGFILE.Threshold=INFO
+log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
+log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

BIN
javax/mailapi_1_3_1.jar


BIN
javax/saaj.jar


BIN
javax/servlet.jar


File diff suppressed because it is too large
+ 86 - 0
javax/wsdl4j-1.5.1.LICENSE


BIN
javax/wsdl4j-1.5.1.jar


+ 308 - 0
mvnw

@@ -0,0 +1,308 @@
+#!/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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.2.0
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   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 /usr/local/etc/mavenrc ] ; then
+    . /usr/local/etc/mavenrc
+  fi
+
+  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
+        JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
+      else
+        JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=$(java-config --jre-home)
+  fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -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 "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
+    JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); 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="$(\unset -f command 2>/dev/null; \command -v 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
+
+# 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/.." || exit 1; pwd)
+    fi
+    # end of workaround
+  done
+  printf '%s' "$(cd "$basedir" || exit 1; pwd)"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    # Remove \r in case we run on Windows within Git Bash
+    # and check out the repository with auto CRLF management
+    # enabled. Otherwise, we may read lines that are delimited with
+    # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
+    # splitting rules.
+    tr -s '\r\n' ' ' < "$1"
+  fi
+}
+
+log() {
+  if [ "$MVNW_VERBOSE" = true ]; then
+    printf '%s\n' "$1"
+  fi
+}
+
+BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
+log "$MAVEN_PROJECTBASEDIR"
+
+##########################################################################################
+# 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.
+##########################################################################################
+wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
+if [ -r "$wrapperJarPath" ]; then
+    log "Found $wrapperJarPath"
+else
+    log "Couldn't find $wrapperJarPath, downloading it ..."
+
+    if [ -n "$MVNW_REPOURL" ]; then
+      wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    else
+      wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    fi
+    while IFS="=" read -r key value; do
+      # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
+      safeValue=$(echo "$value" | tr -d '\r')
+      case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
+      esac
+    done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+    log "Downloading from: $wrapperUrl"
+
+    if $cygwin; then
+      wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
+    fi
+
+    if command -v wget > /dev/null; then
+        log "Found wget ... using wget"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        else
+            wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        log "Found curl ... using curl"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        else
+            curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        fi
+    else
+        log "Falling back to using Java to download"
+        javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaSource=$(cygpath --path --windows "$javaSource")
+          javaClass=$(cygpath --path --windows "$javaClass")
+        fi
+        if [ -e "$javaSource" ]; then
+            if [ ! -e "$javaClass" ]; then
+                log " - Compiling MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/javac" "$javaSource")
+            fi
+            if [ -e "$javaClass" ]; then
+                log " - Running MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+# If specified, validate the SHA-256 sum of the Maven wrapper jar file
+wrapperSha256Sum=""
+while IFS="=" read -r key value; do
+  case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
+  esac
+done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+if [ -n "$wrapperSha256Sum" ]; then
+  wrapperSha256Result=false
+  if command -v sha256sum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  elif command -v shasum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  else
+    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
+    echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
+    exit 1
+  fi
+  if [ $wrapperSha256Result = false ]; then
+    echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
+    echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
+    echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
+    exit 1
+  fi
+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 "$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
+
+# shellcheck disable=SC2086 # safe args
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  $MAVEN_DEBUG_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 205 - 0
mvnw.cmd

@@ -0,0 +1,205 @@
+@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 Apache Maven Wrapper startup batch script, version 3.2.0
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@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 "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\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 WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET WRAPPER_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 WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %WRAPPER_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('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
+SET WRAPPER_SHA_256_SUM=""
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
+)
+IF NOT %WRAPPER_SHA_256_SUM%=="" (
+    powershell -Command "&{"^
+       "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
+       "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
+       "  Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
+       "  Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
+       "  Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
+       "  exit 1;"^
+       "}"^
+       "}"
+    if ERRORLEVEL 1 goto error
+)
+
+@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 "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\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%
+
+cmd /C exit /B %ERROR_CODE%

+ 322 - 0
pom.xml

@@ -0,0 +1,322 @@
+<?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>3.2.5</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.shulead</groupId>
+    <artifactId>datasync</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>datasync</name>
+    <description>datasync</description>
+    <properties>
+        <java.version>21</java.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
+            <version>3.5.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.yulichang</groupId>
+            <artifactId>mybatis-plus-join-boot-starter</artifactId>
+            <version>1.4.12</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dingtalk</artifactId>
+            <version>2.1.17</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.fastjson2</groupId>
+            <artifactId>fastjson2</artifactId>
+            <version>2.0.49</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/com.baomidou/dynamic-datasource-spring-boot-starter -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
+            <version>4.3.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.27</version>
+        </dependency>
+
+        <!--引入第三方jaxrpc jar -->
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/activation.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>axis</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/axis.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>axis-ant</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/axis-ant.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>bsf</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/bsf.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>castor</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/castor-0.9.5.2.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/commons-codec-1.2.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>commons-discovery</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/commons-discovery-0.2.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/commons-httpclient-3.0-rc2.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/commons-logging-1.0.4.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/commons-net-1.0.0-dev.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>httpunit</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/httpunit.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>ibmjsse</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/ibmjsse.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>jms</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/javax.jms.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>jaxrpc</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/jaxrpc.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>JimiProClasses</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/JimiProClasses.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>junit</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/junit-3.8.1.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/log4j-1.2.8.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>mailapi</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/mailapi_1_3_1.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>saaj</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/saaj.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>servlet</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/servlet.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>wsdl4j</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/wsdl4j-1.5.1.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml</groupId>
+            <artifactId>xml-apis</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/javax/axis.jar</systemPath>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+<!--        <resources>-->
+<!--            <resource>-->
+<!--                <directory>libs</directory> &lt;!&ndash; 指定引入包的位置 一般写lib就可以 &ndash;&gt;-->
+<!--                <targetPath>/BOOT-INF/lib/</targetPath> &lt;!&ndash; 指定打包后的位置 一般写/BOOT-INF/lib/ 即可 &ndash;&gt;-->
+<!--                <includes>-->
+<!--                    <include>activation.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>axis.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>axis-ant.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>bsf.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>castor-0.9.5.2.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>commons-codec-1.2.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>commons-discovery-0.2.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>commons-httpclient-3.0-rc2.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>commons-logging-1.0.4.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>commons-net-1.0.0-dev.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>httpunit.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>ibmjsse.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>javax.jms.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>jaxrpc.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>JimiProClasses.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>junit-3.8.1.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>log4j-1.2.8.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>mailapi_1_3_1.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>saaj.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>servlet.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>wsdl4j-1.5.1.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                    <include>xml-apis-2.6.2.jar</include> &lt;!&ndash; jar包名称 &ndash;&gt;-->
+<!--                </includes>-->
+<!--            </resource>-->
+<!--            <resource>-->
+<!--                <directory>src/main/resources</directory> &lt;!&ndash; 指定打包时的资源路径(由于自己引入了本地jar所以需要指定一下位置,如果没有引入本地jar就不必配置系统会自动把maven引入的jar打包) &ndash;&gt;-->
+<!--                <includes>-->
+<!--                    <include>**/*.*</include> &lt;!&ndash; 打包路径下的文件 这里*代表模糊匹配 &ndash;&gt;-->
+<!--                </includes>-->
+<!--                <filtering>false</filtering>-->
+<!--            </resource>-->
+<!--        </resources>-->
+    </build>
+    <repositories>
+        <repository>
+            <id>maven_central</id>
+            <name>Maven Central</name>
+            <url>https://repo.maven.apache.org/maven2/</url>
+        </repository>
+    </repositories>
+</project>

+ 17 - 0
src/main/java/com/shulead/datasync/DatasyncApplication.java

@@ -0,0 +1,17 @@
+package com.shulead.datasync;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@MapperScan("com.shulead.datasync.mapper")
+@EnableScheduling
+public class DatasyncApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(DatasyncApplication.class, args);
+    }
+
+}

+ 40 - 0
src/main/java/com/shulead/datasync/bo/ClassBO.java

@@ -0,0 +1,40 @@
+package com.shulead.datasync.bo;
+
+import lombok.Data;
+
+/**
+ * @Classname ClassBO
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:12
+ * @Created by liuxiangshun
+ */
+@Data
+public class ClassBO {
+    private Long id;
+    private String className;
+    /**
+     * 课时费
+     */
+    private Double lessonFee;
+
+    /**
+     * 总课时费
+     */
+    private Double totalLessonFee;
+
+    /**
+     * 总期数
+     */
+    private Long totalInstalments;
+
+    /**
+     * 总价
+     */
+    private Double totalPrice;
+
+    /**
+     * 类型
+     */
+    private String type;
+}

+ 42 - 0
src/main/java/com/shulead/datasync/bo/Response.java

@@ -0,0 +1,42 @@
+package com.shulead.datasync.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Classname Response
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/13 10:00
+ * @Created by liuxiangshun
+ */
+@Data
+public class Response implements Serializable {
+    private static final long serialVersionUID = -6145302222777770089L;
+
+    private Integer code;
+
+    private String msg;
+
+    private Boolean success;
+
+    private Object data;
+
+    public static Response success(Object data) {
+        Response response = new Response();
+        response.setCode(200);
+        response.setSuccess(true);
+        response.setData(data);
+        return response;
+    }
+
+    public static Response fail(Object data) {
+        Response response = new Response();
+        response.setCode(500);
+        response.setSuccess(false);
+        response.setData(data);
+        response.setMsg("系统异常");
+        return response;
+    }
+}

+ 24 - 0
src/main/java/com/shulead/datasync/bo/StudentBO.java

@@ -0,0 +1,24 @@
+package com.shulead.datasync.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Classname StudentBO
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/30 10:23
+ * @Created by liuxiangshun
+ */
+@Data
+public class StudentBO implements Serializable {
+    private static final long serialVersionUID = 2890520343509735111L;
+    private Long id;
+    private String studentName;
+    private String parentName;
+    private String mobile;
+    private String orgName;
+    private String schoolArea;
+    private String schoolAreaCode;
+}

+ 30 - 0
src/main/java/com/shulead/datasync/config/Configuration.java

@@ -0,0 +1,30 @@
+package com.shulead.datasync.config;
+
+import org.springframework.context.annotation.Bean;
+import com.aliyun.teaopenapi.models.*;
+
+/**
+ * @Classname Configration
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/7 10:20
+ * @Created by liuxiangshun
+ */
+@org.springframework.context.annotation.Configuration
+public class Configuration {
+    @Bean("yiDaClient")
+    public com.aliyun.dingtalkyida_1_0.Client getClient() throws Exception {
+        Config config = new Config();
+        config.protocol = "https";
+        config.regionId = "central";
+        return new com.aliyun.dingtalkyida_1_0.Client(config);
+    }
+
+    @Bean("authClient")
+    public com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception {
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
+        config.protocol = "https";
+        config.regionId = "central";
+        return new com.aliyun.dingtalkoauth2_1_0.Client(config);
+    }
+}

+ 85 - 0
src/main/java/com/shulead/datasync/controller/DataSyncController.java

@@ -0,0 +1,85 @@
+package com.shulead.datasync.controller;
+
+import cn.hutool.core.exceptions.ExceptionUtil;
+import com.shulead.datasync.bo.Response;
+import com.shulead.datasync.manager.DataSyncManager;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Classname DataSyncController
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 10:10
+ * @Created by liuxiangshun
+ */
+@Slf4j
+@RestController
+@RequestMapping("/datasync")
+public class DataSyncController {
+    @Resource
+    private DataSyncManager dataSyncManager;
+
+    @GetMapping("init/student/{start}/{limit}")
+    public Boolean initStudent(@PathVariable("start") Long start, @PathVariable("limit") Integer limit) {
+        new Thread(() -> dataSyncManager.initSyncStudent(start, limit)).start();
+        return true;
+    }
+
+    @GetMapping("init/class/{start}/{limit}")
+    public Boolean initClass(@PathVariable("start") Long start, @PathVariable("limit") Integer limit) {
+        new Thread(() -> dataSyncManager.initSyncClass(start, limit)).start();
+        return true;
+    }
+
+    @GetMapping("init/hzqu")
+    public Boolean initHzqy() {
+        new Thread(() -> dataSyncManager.initSyncHzqy()).start();
+        return true;
+    }
+
+    @GetMapping("init/consociation")
+    public Boolean initConsociation() {
+        new Thread(() -> dataSyncManager.initSyncConsociation()).start();
+        return true;
+    }
+
+    @GetMapping("getStudentByMobile/{mobile}")
+    public Response getStudentByMobile(@PathVariable String mobile) {
+        return Response.success(dataSyncManager.getStudentByMobile(mobile));
+    }
+
+    @GetMapping("createHz06/{id}")
+    public Response createHz06(@PathVariable String id) {
+        try {
+            return Response.success(dataSyncManager.createHz06(id, "FORM-040619C0CE6744EDA4154B4BBBF1843F49JY"));
+        } catch (Exception e) {
+            log.error(ExceptionUtil.getMessage(e));
+            return Response.fail(null);
+        }
+    }
+
+    @GetMapping("createHz06School/{id}")
+    public Response createHz06School(@PathVariable String id) {
+        try {
+            return Response.success(dataSyncManager.createHz06School(id, "FORM-3326B8C175744D73B8580505401D2C5FCFOZ"));
+        } catch (Exception e) {
+            log.error(ExceptionUtil.getMessage(e));
+            return Response.fail(null);
+        }
+    }
+
+    @GetMapping("createCoupon/{id}")
+    public Response createCoupon(@PathVariable String id) {
+        try {
+            return Response.success(dataSyncManager.createCoupon(id, "FORM-6BE5643A8A4142BBB1A7F7CE90F50E787NAF"));
+        } catch (Exception e) {
+            log.error(ExceptionUtil.getMessage(e));
+            return Response.fail(null);
+        }
+    }
+}

+ 22 - 0
src/main/java/com/shulead/datasync/entity/MClass.java

@@ -0,0 +1,22 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Classname MClass
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 13:52
+ * @Created by liuxiangshun
+ */
+@Data
+public class MClass {
+    private Long id;
+    private String className;
+    private Integer classType;
+    private Date updatedDate;
+    private Long installmentNums;
+    private Integer brandId;
+}

+ 17 - 0
src/main/java/com/shulead/datasync/entity/MClassDetail.java

@@ -0,0 +1,17 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname MClassDetail
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:06
+ * @Created by liuxiangshun
+ */
+@Data
+public class MClassDetail {
+    private Long id;
+    private Long classId;
+    private Long classUnitId;
+}

+ 16 - 0
src/main/java/com/shulead/datasync/entity/MClassUnit.java

@@ -0,0 +1,16 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname MClassUnit
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 13:54
+ * @Created by liuxiangshun
+ */
+@Data
+public class MClassUnit {
+    private Long id;
+    private String classUnitName;
+}

+ 16 - 0
src/main/java/com/shulead/datasync/entity/MEmployee.java

@@ -0,0 +1,16 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname MEmployee
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/13 20:25
+ * @Created by liuxiangshun
+ */
+@Data
+public class MEmployee {
+    private Long id;
+    private String mobliephone;
+}

+ 14 - 0
src/main/java/com/shulead/datasync/entity/MManageAreaGroupDetail.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname MManageAreaGroupDetail
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/10 10:47
+ * @Created by liuxiangshun
+ */
+@Data
+public class MManageAreaGroupDetail {
+}

+ 18 - 0
src/main/java/com/shulead/datasync/entity/MOrganization.java

@@ -0,0 +1,18 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class MOrganization implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 7117005748511910981L;
+    private Long id;
+
+    private String orgCode;
+
+    private String orgName;
+}

+ 31 - 0
src/main/java/com/shulead/datasync/entity/MParent.java

@@ -0,0 +1,31 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class MParent implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 8469318933137593960L;
+
+    private Long id;
+
+    /**
+    * family_id
+    */
+    private Long familyId;
+
+    /**
+    * 手机
+    */
+    private String mobile;
+
+    /**
+    * 名称
+    */
+    private String parentName;
+}

+ 17 - 0
src/main/java/com/shulead/datasync/entity/MPriceList.java

@@ -0,0 +1,17 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname MPriceList
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 13:56
+ * @Created by liuxiangshun
+ */
+@Data
+public class MPriceList {
+    private Long id;
+    private Long classId;
+    private Double price;
+}

+ 17 - 0
src/main/java/com/shulead/datasync/entity/MPriceListDetail.java

@@ -0,0 +1,17 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname MPriceListDetail
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:03
+ * @Created by liuxiangshun
+ */
+@Data
+public class MPriceListDetail {
+    private Long id;
+    private Long classDetailId;
+    private Double price;
+}

+ 176 - 0
src/main/java/com/shulead/datasync/entity/MStudent.java

@@ -0,0 +1,176 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class MStudent implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 3012045638501853093L;
+
+    private Long id;
+
+    /**
+    * family_id
+    */
+    private Long familyId;
+
+    /**
+    * 客户状态
+    */
+    private Integer status;
+
+    /**
+    * student_name
+    */
+    private String studentName;
+
+    /**
+    * english_name
+    */
+    private String englishName;
+
+    /**
+    * age
+    */
+    private Integer age;
+
+    /**
+    * sex
+    */
+    private Integer sex;
+
+    /**
+    * student_birthday
+    */
+    private Date studentBirthday;
+
+    /**
+    * student_no
+    */
+    private String studentNo;
+
+    /**
+    * org_id
+    */
+    private Long orgId;
+
+    /**
+    * school_id
+    */
+    private Integer schoolId;
+
+    /**
+    * read_grade
+    */
+    private Integer readGrade;
+
+    /**
+    * read_school
+    */
+    private String readSchool;
+
+    /**
+    * learn_background
+    */
+    private String learnBackground;
+
+    /**
+    * english_basis
+    */
+    private String englishBasis;
+
+    /**
+    * sign_reason
+    */
+    private Integer signReason;
+
+    /**
+    * memo
+    */
+    private String memo;
+
+    /**
+    * 创建时间
+    */
+    private Date createdDate;
+
+    /**
+    * created_by
+    */
+    private String createdBy;
+
+    /**
+    * updated_date
+    */
+    private Date updatedDate;
+
+    /**
+    * updated_by
+    */
+    private String updatedBy;
+
+    /**
+    * 0/1 0:未删除,1:已删除
+    */
+    private Integer deleteFlag;
+
+    /**
+    * relation
+    */
+    private Integer relation;
+
+    /**
+    * 学生状态
+    */
+    private Integer studentStatus;
+
+    /**
+    * 是否重点
+    */
+    private Integer isFocus;
+
+    /**
+    * 领语堂学生主键
+    */
+    private String bmsId;
+
+    /**
+    * 接口标识:0-内部,1-接口,2-历史数据迁移
+    */
+    private Integer isInterface;
+
+    /**
+    * 数据同步时间
+    */
+    private Date syncTime;
+
+    /**
+    * 渠道ID
+    */
+    private Integer channelId;
+
+    /**
+    * 已使用课时数
+    */
+    private Integer useClassHour;
+
+    /**
+    * 结课日期
+    */
+    private Date endCourseDate;
+
+    /**
+    * visit_time
+    */
+    private Date visitTime;
+
+    /**
+    * 品牌ID
+    */
+    private Integer brandId;
+}

+ 54 - 0
src/main/java/com/shulead/datasync/entity/ManageAreaGroup.java

@@ -0,0 +1,54 @@
+package com.shulead.datasync.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @Classname ManageAreaGroupBO
+ * @Description 合作区域
+ * @Version 1.0.0
+ * @Date 2024/5/10 10:50
+ * @Created by liuxiangshun
+ */
+@Data
+@TableName("m_manage_area_group_detail")
+public class ManageAreaGroup {
+    //管理组id
+    private Long	areaGroupId;
+    //机构id
+    private Long	orgId;
+    /**
+     * 区域代码
+     */
+    private String	orgCode;
+    /**
+     * 合作区域
+     */
+    private String	orgName;
+    //机构属性10直营/20合作
+    private Long	orgAssociate;
+    /**
+     * 投资人手机号
+     */
+    private String	investEmployeeMobile;
+    /**
+     * 运营顾问手机
+     */
+    private String	busAdviserMobile;
+    /**
+     * 学术督导手机号
+     */
+    private String	learnDirectEmployeeMobile;
+    /**
+     * 学术主管手机
+     */
+    private String learnEmployeeMobile;
+
+    private String updateTime;
+
+    /**
+     * 运营主管手机号
+     */
+    private String busEmployeeMobile;
+
+}

+ 17 - 0
src/main/java/com/shulead/datasync/entity/SDictionary.java

@@ -0,0 +1,17 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname SDictionary
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 15:05
+ * @Created by liuxiangshun
+ */
+@Data
+public class SDictionary {
+    private String type;
+    private Long value;
+    private String valueName;
+}

+ 68 - 0
src/main/java/com/shulead/datasync/entity/UfHzqy.java

@@ -0,0 +1,68 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Classname UfHzqy
+ * @Description T合作区域
+ * @Version 1.0.0
+ * @Date 2024/5/13 17:00
+ * @Created by liuxiangshun
+ */
+@Data
+public class UfHzqy {
+
+    private Long id;
+
+    /**
+     * 合作区域
+     */
+    private String hz;
+
+    /**
+     * 区域代码
+     */
+    private String qydm;
+
+    /**
+     * 运营顾问
+     */
+    private Integer yygw;
+
+    /**
+     * 运营主管
+     */
+    private Integer yyzg;
+
+    /**
+     * 投资人
+     */
+    private Integer tzr;
+
+    /**
+     * 封存状态
+     */
+    private Integer fczt;
+
+    /**
+     * 学术督导
+     */
+    private Integer xsdd;
+
+    /**
+     * 学术主管
+     */
+    private Integer xszg;
+
+    /**
+     * 合作区域(分部)
+     */
+    private Integer hzqyfb;
+
+    /**
+     * 更新时间
+     */
+    private String gxsj;
+}

+ 16 - 0
src/main/java/com/shulead/datasync/entity/User.java

@@ -0,0 +1,16 @@
+package com.shulead.datasync.entity;
+
+import lombok.Data;
+
+/**
+ * @Classname User
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/11 15:45
+ * @Created by liuxiangshun
+ */
+@Data
+public class User {
+    private String referenceUnionId;
+    private Long orgId;
+}

+ 25 - 0
src/main/java/com/shulead/datasync/entity/ViewPortalClassConsociation.java

@@ -0,0 +1,25 @@
+package com.shulead.datasync.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * @Classname viewPortalClassConsociation
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/11 14:30
+ * @Created by liuxiangshun
+ */
+@Data
+public class ViewPortalClassConsociation {
+    private Long orgId;
+    private String orgCode;
+    private String orgName;
+    private String className;
+    private Long classId;
+    private String classTypeName;
+    @TableField("totalClassFees")
+    private Double totalClassFees;
+    private Double price;
+    private Long installmentNums;
+}

+ 145 - 0
src/main/java/com/shulead/datasync/manager/ClassManager.java

@@ -0,0 +1,145 @@
+package com.shulead.datasync.manager;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.shulead.datasync.bo.ClassBO;
+import com.shulead.datasync.entity.*;
+import com.shulead.datasync.mapper.*;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Classname ClassManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:10
+ * @Created by liuxiangshun
+ */
+@Component
+public class ClassManager {
+    @Resource
+    private MClassMapper mClassMapper;
+
+    @Resource
+    private MClassDetailMapper mClassDetailMapper;
+
+    @Resource
+    private MClassUnitMapper mClassUnitMapper;
+
+    @Resource
+    private MPriceListDetailMapper mPriceListDetailMapper;
+
+    @Resource
+    private MPriceListMapper mPriceListMapper;
+
+    @Resource
+    private SDictionaryMapper sDictionaryMapper;
+
+    public List<ClassBO> pageClass(Long startId, Integer limit) {
+        // 查询班级信息
+        LambdaQueryWrapper<MClass> classWrapper = Wrappers.lambdaQuery(MClass.class)
+                .ge(MClass::getId, startId)
+                .orderByAsc(MClass::getId)
+                .last("limit " + limit);
+        List<MClass> classList = mClassMapper.selectList(classWrapper);
+        // 构建 classBO
+        List<ClassBO> classBOList = new ArrayList<>();
+        for (MClass mClass : classList) {
+            ClassBO classBO = new ClassBO();
+            classBO.setId(mClass.getId());
+            classBO.setClassName(mClass.getClassName());
+            classBO.setLessonFee(getFee(mClass.getId(), "课时费"));
+            classBO.setTotalLessonFee(getFee(mClass.getId(), "总课时费"));
+            classBO.setTotalInstalments(mClass.getInstallmentNums());
+            LambdaQueryWrapper<MPriceList> priceListWrapper = Wrappers.lambdaQuery(MPriceList.class)
+                    .eq(MPriceList::getClassId, mClass.getId());
+            List<MPriceList> priceLists = mPriceListMapper.selectList(priceListWrapper);
+            if (CollectionUtils.isNotEmpty(priceLists)) {
+                double sum = priceLists.stream().mapToDouble(MPriceList::getPrice).sum();
+                classBO.setTotalPrice(sum);
+            }
+            LambdaQueryWrapper<SDictionary> sDictionaryWrapper = Wrappers.lambdaQuery(SDictionary.class)
+                    .eq(SDictionary::getType, "classtype")
+                    .eq(SDictionary::getValue, mClass.getClassType());
+            SDictionary sDictionary = sDictionaryMapper.selectOne(sDictionaryWrapper);
+            if (sDictionary != null) {
+                classBO.setType(sDictionary.getValueName());
+            }
+            classBOList.add(classBO);
+        }
+        return classBOList;
+    }
+
+    public List<ClassBO> getClassByUpdateDate(Date beginDate, Date endDate) {
+        // 查询班级信息
+        LambdaQueryWrapper<MClass> classWrapper = Wrappers.lambdaQuery(MClass.class)
+                .ge(MClass::getUpdatedDate, beginDate)
+                .le(MClass::getUpdatedDate, endDate);
+        List<MClass> classList = mClassMapper.selectList(classWrapper);
+        // 构建 classBO
+        List<ClassBO> classBOList = new ArrayList<>();
+        for (MClass mClass : classList) {
+            ClassBO classBO = new ClassBO();
+            classBO.setId(mClass.getId());
+            classBO.setClassName(mClass.getClassName());
+            classBO.setLessonFee(getFee(mClass.getId(), "课时费"));
+            classBO.setTotalLessonFee(getFee(mClass.getId(), "总课时费"));
+            classBO.setTotalInstalments(mClass.getInstallmentNums());
+            LambdaQueryWrapper<MPriceList> priceListWrapper = Wrappers.lambdaQuery(MPriceList.class)
+                    .eq(MPriceList::getClassId, mClass.getId());
+            List<MPriceList> priceLists = mPriceListMapper.selectList(priceListWrapper);
+            if (CollectionUtils.isNotEmpty(priceLists)) {
+                double sum = priceLists.stream().mapToDouble(MPriceList::getPrice).sum();
+                classBO.setTotalPrice(sum);
+            }
+            LambdaQueryWrapper<SDictionary> sDictionaryWrapper = Wrappers.lambdaQuery(SDictionary.class)
+                    .eq(SDictionary::getType, "classtype")
+                    .eq(SDictionary::getValue, mClass.getClassType());
+            SDictionary sDictionary = sDictionaryMapper.selectOne(sDictionaryWrapper);
+            if (sDictionary != null) {
+                classBO.setType(sDictionary.getValueName());
+            }
+            classBOList.add(classBO);
+        }
+        return classBOList;
+    }
+
+    public Double getFee(Long classId, String unitName) {
+        // 查询 class_detail
+        LambdaQueryWrapper<MClassDetail> classDetailWrapper = Wrappers.lambdaQuery(MClassDetail.class)
+                .eq(MClassDetail::getClassId, classId);
+        List<MClassDetail> classDetailList = mClassDetailMapper.selectList(classDetailWrapper);
+        List<Long> classUnitIdList = classDetailList.stream().map(MClassDetail::getClassUnitId).toList();
+        if (CollectionUtils.isNotEmpty(classUnitIdList)) {
+            // 查询课时费
+            LambdaQueryWrapper<MClassUnit> classUnitWrapper1 = Wrappers.lambdaQuery(MClassUnit.class)
+                    .in(MClassUnit::getId, classUnitIdList)
+                    .eq(MClassUnit::getClassUnitName, unitName);
+            List<MClassUnit> classUnitList1 = mClassUnitMapper.selectList(classUnitWrapper1);
+            if (CollectionUtils.isNotEmpty(classUnitList1)) {
+                Set<Long> lessonFeeIds = classUnitList1.stream().map(MClassUnit::getId).collect(Collectors.toSet());
+                List<Long> lessonFeeClassDetailIds = classDetailList.stream().filter(mClassDetail -> lessonFeeIds.contains(mClassDetail.getClassUnitId())).map(MClassDetail::getId).toList();
+                if (CollectionUtils.isNotEmpty(lessonFeeClassDetailIds)) {
+                    LambdaQueryWrapper<MPriceListDetail> priceListDetailWrapper1 = Wrappers.lambdaQuery(MPriceListDetail.class)
+                            .in(MPriceListDetail::getClassDetailId, lessonFeeClassDetailIds);
+                    List<MPriceListDetail> priceListDetailList = mPriceListDetailMapper.selectList(priceListDetailWrapper1);
+                    if (CollectionUtils.isNotEmpty(priceListDetailList)) {
+                        return priceListDetailList.stream().mapToDouble(MPriceListDetail::getPrice).sum();
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    public MClass getById(Long id) {
+        return mClassMapper.selectById(id);
+    }
+}

+ 625 - 0
src/main/java/com/shulead/datasync/manager/DataSyncManager.java

@@ -0,0 +1,625 @@
+package com.shulead.datasync.manager;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.util.DateUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.shulead.datasync.bo.ClassBO;
+import com.shulead.datasync.bo.StudentBO;
+import com.shulead.datasync.entity.MClass;
+import com.shulead.datasync.entity.UfHzqy;
+import com.shulead.datasync.entity.ViewPortalClassConsociation;
+import com.shulead.datasync.portalcoupon.PortalCouponParams;
+import com.shulead.datasync.portalcoupon.PortalCouponWSProxy;
+import com.shulead.datasync.portalprice.PortalPriceParams;
+import com.shulead.datasync.portalprice.PortalPriceWSProxy;
+import com.shulead.datasync.portalprice.Result;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.rmi.RemoteException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @Classname DataSyncManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/7 10:01
+ * @Created by liuxiangshun
+ */
+@Slf4j
+@Component
+public class DataSyncManager {
+    @Resource
+    private YiDaManager yiDaManager;
+
+    @Resource
+    private StudentManager studentManager;
+
+    @Resource
+    private ClassManager classManager;
+
+    @Resource
+    private MEmployeeManager employeeManager;
+
+    @Resource
+    private UfHzqyManager ufHzqyManager;
+
+    @Resource
+    private ViewPortalClassConsociationManager viewPortalClassConsociationManager;
+
+    private final AtomicLong startId = new AtomicLong(251805);
+
+    public void syncStudent(List<StudentBO> studentBOList) {
+        String formUuId = "FORM-E4CF1445F81E486E8DBCDF85F240E57CFALF";
+        for (StudentBO studentBO : studentBOList) {
+            JSONArray searchConditions = new JSONArray();
+            JSONObject searchCondition = new JSONObject();
+            searchCondition.put("key", "textField_lvc4dfk4");
+            searchCondition.put("value", studentBO.getId().toString());
+            searchCondition.put("type", "TEXT");
+            searchCondition.put("operator", "eq");
+            searchCondition.put("componentName", "TextField");
+            searchConditions.add(searchCondition);
+
+            JSONObject instance = new JSONObject();
+            instance.put("textField_lvc4dfk4", studentBO.getId());
+            instance.put("textField_ltwr5u40", studentBO.getParentName());
+            instance.put("textField_ltwr5u3z", studentBO.getStudentName());
+            instance.put("textField_ltwr5u49", studentBO.getMobile());
+            instance.put("textField_ltwr5u4a", studentBO.getOrgName());
+            instance.put("textField_lup9gnlf", studentBO.getSchoolArea());
+            YiDaManager.YiDaResponse response = yiDaManager.createOrUpdateInstance(formUuId, searchConditions.toJSONString(), instance.toJSONString());
+            if (!response.getOk()) {
+                log.error("同步学生信息失败,studentBO:{}, response:{}", JSON.toJSONString(studentBO), JSON.toJSONString(response));
+            }
+        }
+    }
+
+    public void syncClass(List<ClassBO> classBOList) {
+        String formUuId = "FORM-AE935E52ABC54CC9B8E0BF6965472FD1WZLU";
+        for (ClassBO classBO : classBOList) {
+            JSONArray searchConditions = new JSONArray();
+            JSONObject searchCondition = new JSONObject();
+            searchCondition.put("key", "textField_lvc4ncmx");
+            searchCondition.put("value", classBO.getId().toString());
+            searchCondition.put("type", "TEXT");
+            searchCondition.put("operator", "eq");
+            searchCondition.put("componentName", "TextField");
+            searchConditions.add(searchCondition);
+
+            JSONObject instance = new JSONObject();
+            instance.put("textField_lvc4ncmx", classBO.getId());
+            instance.put("numberField_lty2c63v", classBO.getLessonFee());
+            instance.put("textField_lty2c63q", classBO.getClassName());
+            instance.put("numberField_lup7xnj6", classBO.getTotalPrice());
+            instance.put("numberField_lup7xnj7", classBO.getTotalLessonFee());
+            instance.put("textField_lty2c63t", classBO.getType());
+            instance.put("numberField_lty2c63u", classBO.getTotalInstalments());
+            YiDaManager.YiDaResponse response = yiDaManager.createOrUpdateInstance(formUuId, searchConditions.toJSONString(), instance.toJSONString());
+            if (!response.getOk()) {
+                log.error("同步班型信息失败, classBO:{}, response:{}", JSON.toJSONString(classBO), JSON.toJSONString(response));
+            }
+        }
+    }
+
+    public void syncHzqy(List<UfHzqy> ufHzqyList) {
+        String formUuId = "FORM-11B80FC621CA4DB9A35364CFBFF7287538KR";
+        for (UfHzqy ufHzqy : ufHzqyList) {
+            JSONArray searchConditions = new JSONArray();
+            JSONObject searchCondition = new JSONObject();
+            searchCondition.put("key", "textField_lvc4ktjc");
+            searchCondition.put("value", ufHzqy.getId().toString());
+            searchCondition.put("type", "TEXT");
+            searchCondition.put("operator", "eq");
+            searchCondition.put("componentName", "TextField");
+            searchConditions.add(searchCondition);
+
+            JSONObject instance = new JSONObject();
+            instance.put("textField_lvc4ktjc", ufHzqy.getId().toString());
+            // 区域代码
+            instance.put("textField_lu295ft6", ufHzqy.getQydm());
+            // 合作区域
+            instance.put("textField_lu295ft5", ufHzqy.getHz());
+            // 运营主管
+//            Integer yyzg = ufHzqy.getYyzg();
+//            MEmployee yyzge = employeeManager.getById(yyzg);
+//            if (null != yyzge) {
+//                String mobliephone = yyzge.getMobliephone();
+//                if (StringUtils.isNotBlank(mobliephone)) {
+//                    // 查询 userId
+//                    String userId = yiDaManager.getUserIdByPhone(mobliephone);
+//                    if (StringUtils.isNotBlank(userId)) {
+//                        instance.put("employeeField_lut8rnei", userId);
+//                    }
+//                }
+//            }
+            // 运营顾问
+//            Integer yygw = ufHzqy.getYygw();
+//            MEmployee yygwe = employeeManager.getById(yygw);
+//            if (null != yygwe) {
+//                String mobliephone = yygwe.getMobliephone();
+//                if (StringUtils.isNotBlank(mobliephone)) {
+//                    // 查询 userId
+//                    String userId = yiDaManager.getUserIdByPhone(mobliephone);
+//                    if (StringUtils.isNotBlank(userId)) {
+//                        instance.put("employeeField_lut8rneh", userId);
+//                    }
+//                }
+//            }
+            // 封存状态
+            Integer fczt = ufHzqy.getFczt();
+            instance.put("selectField_lu295fta", fczt);
+
+            // 投资人
+//            Integer tzr = ufHzqy.getTzr();
+//            MEmployee tzre = employeeManager.getById(tzr);
+//            if (null != tzre) {
+//                String mobliephone = tzre.getMobliephone();
+//                if (StringUtils.isNotBlank(mobliephone)) {
+//                    // 查询 userId
+//                    String userId = yiDaManager.getUserIdByPhone(mobliephone);
+//                    if (StringUtils.isNotBlank(userId)) {
+//                        instance.put("employeeField_lut8rnej", userId);
+//                    }
+//                }
+//            }
+
+            // 学术主管
+//            Integer xszg = ufHzqy.getXszg();
+//            MEmployee xszge = employeeManager.getById(xszg);
+//            if (null != xszge) {
+//                String mobliephone = xszge.getMobliephone();
+//                if (StringUtils.isNotBlank(mobliephone)) {
+//                    // 查询 userId
+//                    String userId = yiDaManager.getUserIdByPhone(mobliephone);
+//                    if (StringUtils.isNotBlank(userId)) {
+//                        instance.put("employeeField_lut8rnel", userId);
+//                    }
+//                }
+//            }
+
+            // 学术督导
+//            Integer xsdd = ufHzqy.getXsdd();
+//            MEmployee xsdde = employeeManager.getById(xsdd);
+//            if (null != xsdde) {
+//                String mobliephone = xsdde.getMobliephone();
+//                if (StringUtils.isNotBlank(mobliephone)) {
+//                    // 查询 userId
+//                    String userId = yiDaManager.getUserIdByPhone(mobliephone);
+//                    if (StringUtils.isNotBlank(userId)) {
+//                        instance.put("employeeField_lut8rnek", userId);
+//                    }
+//                }
+//            }
+            YiDaManager.YiDaResponse response = yiDaManager.createOrUpdateInstance(formUuId, searchConditions.toJSONString(), instance.toJSONString());
+            if (!response.getOk()) {
+                log.error("同步合作信息失败, classBO:{}, response:{}", JSON.toJSONString(ufHzqy), JSON.toJSONString(response));
+            }
+        }
+    }
+
+    public void syncConsociation(List<ViewPortalClassConsociation> consociationList) {String formUuId = "FORM-13BBF743604942DCAD251E5E7FE381142ZBZ";
+        for (ViewPortalClassConsociation consociation : consociationList) {
+            JSONArray searchConditions = new JSONArray();
+            JSONObject orgIdSearchCondition = new JSONObject();
+            orgIdSearchCondition.put("key", "textField_lvc4kk54");
+            orgIdSearchCondition.put("value", consociation.getOrgId().toString());
+            orgIdSearchCondition.put("type", "TEXT");
+            orgIdSearchCondition.put("operator", "eq");
+            orgIdSearchCondition.put("componentName", "TextField");
+            searchConditions.add(orgIdSearchCondition);
+
+            JSONObject classIdSearchCondition = new JSONObject();
+            classIdSearchCondition.put("key", "textField_lw641zsq");
+            classIdSearchCondition.put("value", consociation.getClassId().toString());
+            classIdSearchCondition.put("type", "TEXT");
+            classIdSearchCondition.put("operator", "eq");
+            classIdSearchCondition.put("componentName", "TextField");
+            searchConditions.add(classIdSearchCondition);
+
+            JSONObject instance = new JSONObject();
+            instance.put("textField_lvc4kk54", consociation.getOrgId().toString());
+            instance.put("textField_lw641zsq", consociation.getClassId().toString());
+            instance.put("numberField_lut8lygt", consociation.getPrice());
+            instance.put("numberField_lv3bo57w", consociation.getTotalClassFees());
+            instance.put("textField_ltxtb30x", consociation.getClassName());
+            instance.put("textField_lv3a47f5", consociation.getClassTypeName());
+            instance.put("textField_lw62gk49", consociation.getInstallmentNums().toString());
+            instance.put("textField_lw62gk48", consociation.getOrgName());
+            instance.put("textField_lw62gk47", consociation.getOrgCode());
+            YiDaManager.YiDaResponse response = yiDaManager.createOrUpdateInstance(formUuId, searchConditions.toJSONString(), instance.toJSONString());
+            if (!response.getOk()) {
+                log.error("同步合作价格信息失败, classBO:{}, response:{}", JSON.toJSONString(consociation), JSON.toJSONString(response));
+            }
+        }
+    }
+
+    public void initSyncStudent(Long start, Integer limit) {
+        if (null == limit) {
+            limit = 1000;
+        }
+
+        Integer finalLimit = limit;
+
+        for (int i = 0; i < 10; i++) {
+            new Thread(() -> {
+                List<StudentBO> studentBOS = studentManager.pageStudent(startId.getAndAdd(finalLimit), finalLimit);
+                while (CollectionUtils.isNotEmpty(studentBOS)) {
+                    syncStudent(studentBOS);
+                    studentBOS = studentManager.pageStudent(startId.getAndAdd(finalLimit), finalLimit);
+                }
+            }).start();
+        }
+    }
+
+    public void initSyncClass(Long start, Integer limit) {
+        if (null == limit) {
+            limit = 1000;
+        }
+        List<ClassBO> classBOList = classManager.pageClass(start, limit);
+        while (CollectionUtils.isNotEmpty(classBOList)) {
+            syncClass(classBOList);
+            start += limit;
+            classBOList = classManager.pageClass(start, limit);
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    public void initSyncHzqy() {
+        List<UfHzqy> ufHzqies = ufHzqyManager.findAll();
+        syncHzqy(ufHzqies);
+    }
+
+    public void initSyncConsociation() {
+        List<ViewPortalClassConsociation> consociations = viewPortalClassConsociationManager.findAll();
+        syncConsociation(consociations);
+    }
+
+    public StudentBO getStudentByMobile(String mobile) {
+        return studentManager.getStudentByMobile(mobile);
+    }
+
+    public Object createHz06(String id, String formUuId) {
+        // 获取实例
+        YiDaManager.YiDaResponse hz06Response = yiDaManager.getFormInstanceById(formUuId, id);
+        if (!hz06Response.getOk() || null == hz06Response.getData()) {
+            return null;
+        }
+        List<JSONObject> hz06DataList = JSONArray.parseArray(hz06Response.getData().toString(), JSONObject.class);
+        if (CollectionUtils.isEmpty(hz06DataList)) {
+            return null;
+        }
+        // 转化为map
+        Map<String, JSONObject> hz06Map = hz06DataList.stream().collect(Collectors.toMap(jsonObject -> jsonObject.getString("fieldId"), Function.identity()));
+        // 获取公司信息
+        JSONObject companyJsonObject = hz06Map.get("associationFormField_ltse8sq4");
+        JSONObject companyFieldDataJsonObject = companyJsonObject.getObject("fieldData", JSONObject.class);
+        JSONArray companyValueJsonArray = companyFieldDataJsonObject.getJSONArray("value");
+        String companyCode = companyValueJsonArray.getJSONObject(0).getString("subTitle");
+//        JSONObject companyJsonObject = hz06Map.get("associationFormField_luhuq5nz");
+//        JSONObject companyFieldDataJsonObject = companyJsonObject.getObject("fieldData", JSONObject.class);
+//        JSONArray companyValueJsonArray = companyFieldDataJsonObject.getJSONArray("value");
+//        String companyFormUuid = companyValueJsonArray.getJSONObject(0).getString("formUuid");
+//        String companyInstanceId = companyValueJsonArray.getJSONObject(0).getString("instanceId");
+//        YiDaManager.YiDaResponse companyResponse = yiDaManager.getFormInstanceById(companyFormUuid, companyInstanceId);
+//        if (!companyResponse.getOk() || null == companyResponse.getData()) {
+//            return null;
+//        }
+//
+//        List<JSONObject> companyList = JSONArray.parseArray(companyResponse.getData().toString(), JSONObject.class);
+//        if (CollectionUtils.isEmpty(companyList)) {
+//            return null;
+//        }
+//        // 转化为map
+//        Map<String, JSONObject> companyMap = companyList.stream().collect(Collectors.toMap(jsonObject -> jsonObject.getString("fieldId"), Function.identity()));
+//        String companyCode = companyMap.get("textField_lu84158s").getJSONObject("fieldData").getString("value");
+
+        // 获取班级信息
+        JSONArray classValues = hz06Map.get("tableField_ltse8sqr").getJSONObject("fieldData").getJSONArray("value");
+        if (CollectionUtils.isEmpty(classValues)) {
+            return null;
+        }
+        for (int i = 0; i < classValues.size(); i++) {
+            JSONArray classValue = classValues.getJSONArray(i);
+            Map<String, JSONObject> classValueMap = new HashMap<>();
+            for (int j = 0; j < classValue.size(); j++) {
+                String fieldId = classValue.getJSONObject(j).getString("fieldId");
+                classValueMap.put(fieldId, classValue.getJSONObject(j));
+            }
+            JSONObject classValueJsonObject = classValueMap.get("associationFormField_ltse8squ");
+            String classFormUuid = classValueJsonObject.getJSONObject("fieldData").getJSONArray("value").getJSONObject(0).getString("formUuid");
+            String classInstanceId = classValueJsonObject.getJSONObject("fieldData").getJSONArray("value").getJSONObject(0).getString("instanceId");
+            YiDaManager.YiDaResponse classResponse = yiDaManager.getFormInstanceById(classFormUuid, classInstanceId);
+            List<JSONObject> classList = JSONArray.parseArray(classResponse.getData().toString(), JSONObject.class);
+            Map<String, JSONObject> classMap = classList.stream().collect(Collectors.toMap(jsonObject -> jsonObject.getString("fieldId"), Function.identity()));
+            JSONObject classIdJsonObject = classMap.get("textField_lw641zsq");
+            if (null == classIdJsonObject) {
+                continue;
+            }
+            String classId = classIdJsonObject.getJSONObject("fieldData").getString("value");
+            if (StringUtils.isEmpty(classId)) {
+                continue;
+            }
+
+            PortalPriceParams portalPriceParams = new PortalPriceParams();
+            // 书本费
+            String bookFees = classValueMap.get("numberField_ltse8sqy").getJSONObject("fieldData").getString("value");
+            bookFees = StringUtils.isBlank(bookFees) ? "0" : bookFees;
+            portalPriceParams.setBookFees(bookFees);
+            // 班级 id
+            portalPriceParams.setClassId(classId);
+            // 阶段 id
+            String classLevelId = classValueMap.get("textField_lwirthrf").getJSONObject("fieldData").getString("value");
+            portalPriceParams.setClassLevelId(classLevelId);
+            // 公司 code
+            portalPriceParams.setCompanyCode(companyCode);
+            // 实施日期
+            JSONObject dateFieldJsonObject = hz06Map.get("dateField_ltse8sq6");
+            if (null != dateFieldJsonObject) {
+                JSONObject dateFieldData = dateFieldJsonObject.getJSONObject("fieldData");
+                if (null != dateFieldData) {
+                    Long value = dateFieldData.getLong("value");
+                    if (null != value) {
+                        String effectiveDate = DateUtils.format(new Date(value), "yyyy-MM-dd HH:mm:ss");
+                        portalPriceParams.setEffectiveDate(effectiveDate);
+                    }
+                }
+            }
+
+            // 总课时费
+            String totalClassFees = classValueMap.get("numberField_ltse8sqx").getJSONObject("fieldData").getString("value");
+            totalClassFees = StringUtils.isBlank(totalClassFees) ? "0" : totalClassFees;
+            portalPriceParams.setTotalClassFees(totalClassFees);
+
+            // 类型
+            String type = classValueMap.get("textField_lw7kek23").getJSONObject("fieldData").getString("value");
+            String nurseFees = classValueMap.get("numberField_lwokgua1").getJSONObject("fieldData").getString("value");
+            nurseFees = StringUtils.isBlank(nurseFees) ? "0" : nurseFees;
+            if ("全天".equals(type)) {
+                // 保育费
+                portalPriceParams.setNurseFees(nurseFees);
+                // 总费用费
+                portalPriceParams.setTotalFees((Double.parseDouble(bookFees) + Double.parseDouble(nurseFees) + Double.parseDouble(totalClassFees)) + "");
+            } else {
+                // 保育费
+                portalPriceParams.setNurseFees("0");
+                // 总费用
+                portalPriceParams.setTotalFees((Double.parseDouble(bookFees) + Double.parseDouble(totalClassFees)) + "");
+            }
+
+            PortalPriceParams[] params = new PortalPriceParams[1];
+            params[0] = portalPriceParams;
+
+            PortalPriceWSProxy portalPriceWSProxy = new PortalPriceWSProxy();
+
+            try {
+                Result result = portalPriceWSProxy.createPortalPrice(params);
+                System.out.println(result);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return null;
+    }
+
+    public Object createHz06School(String id, String formUuId) {
+        // 获取实例
+        YiDaManager.YiDaResponse hz06Response = yiDaManager.getFormInstanceById(formUuId, id);
+        if (!hz06Response.getOk() || null == hz06Response.getData()) {
+            return null;
+        }
+        List<JSONObject> hz06DataList = JSONArray.parseArray(hz06Response.getData().toString(), JSONObject.class);
+        if (CollectionUtils.isEmpty(hz06DataList)) {
+            return null;
+        }
+        // 转化为map
+        Map<String, JSONObject> hz06Map = hz06DataList.stream().collect(Collectors.toMap(jsonObject -> jsonObject.getString("fieldId"), Function.identity()));
+        // 获取公司信息
+        JSONObject companyJsonObject = hz06Map.get("associationFormField_ltse8sq4");
+        JSONObject companyFieldDataJsonObject = companyJsonObject.getObject("fieldData", JSONObject.class);
+        JSONArray companyValueJsonArray = companyFieldDataJsonObject.getJSONArray("value");
+        String companyCode = companyValueJsonArray.getJSONObject(0).getString("subTitle");
+//        JSONObject companyJsonObject = hz06Map.get("associationFormField_luhuq5nz");
+//        JSONObject companyFieldDataJsonObject = companyJsonObject.getObject("fieldData", JSONObject.class);
+//        JSONArray companyValueJsonArray = companyFieldDataJsonObject.getJSONArray("value");
+//        String companyFormUuid = companyValueJsonArray.getJSONObject(0).getString("formUuid");
+//        String companyInstanceId = companyValueJsonArray.getJSONObject(0).getString("instanceId");
+//        YiDaManager.YiDaResponse companyResponse = yiDaManager.getFormInstanceById(companyFormUuid, companyInstanceId);
+//        if (!companyResponse.getOk() || null == companyResponse.getData()) {
+//            return null;
+//        }
+//
+//        List<JSONObject> companyList = JSONArray.parseArray(companyResponse.getData().toString(), JSONObject.class);
+//        if (CollectionUtils.isEmpty(companyList)) {
+//            return null;
+//        }
+//        // 转化为map
+//        Map<String, JSONObject> companyMap = companyList.stream().collect(Collectors.toMap(jsonObject -> jsonObject.getString("fieldId"), Function.identity()));
+//        String companyCode = companyMap.get("textField_lu84158s").getJSONObject("fieldData").getString("value");
+
+        // 获取班级信息
+        JSONArray classValues = hz06Map.get("tableField_ltse8sqr").getJSONObject("fieldData").getJSONArray("value");
+        if (CollectionUtils.isEmpty(classValues)) {
+            return null;
+        }
+        for (int i = 0; i < classValues.size(); i++) {
+            JSONArray classValue = classValues.getJSONArray(i);
+            Map<String, JSONObject> classValueMap = new HashMap<>();
+            for (int j = 0; j < classValue.size(); j++) {
+                String fieldId = classValue.getJSONObject(j).getString("fieldId");
+                classValueMap.put(fieldId, classValue.getJSONObject(j));
+            }
+            JSONObject classValueJsonObject = classValueMap.get("associationFormField_ltse8squ");
+            String classFormUuid = classValueJsonObject.getJSONObject("fieldData").getJSONArray("value").getJSONObject(0).getString("formUuid");
+            String classInstanceId = classValueJsonObject.getJSONObject("fieldData").getJSONArray("value").getJSONObject(0).getString("instanceId");
+            YiDaManager.YiDaResponse classResponse = yiDaManager.getFormInstanceById(classFormUuid, classInstanceId);
+            List<JSONObject> classList = JSONArray.parseArray(classResponse.getData().toString(), JSONObject.class);
+            Map<String, JSONObject> classMap = classList.stream().collect(Collectors.toMap(jsonObject -> jsonObject.getString("fieldId"), Function.identity()));
+            JSONObject classIdJsonObject = classMap.get("textField_lw641zsq");
+            if (null == classIdJsonObject) {
+                continue;
+            }
+            String classId = classIdJsonObject.getJSONObject("fieldData").getString("value");
+            if (StringUtils.isEmpty(classId)) {
+                continue;
+            }
+
+            PortalPriceParams portalPriceParams = new PortalPriceParams();
+            // 书本费
+            String bookFees = classValueMap.get("numberField_ltse8sqy").getJSONObject("fieldData").getString("value");
+            bookFees = StringUtils.isBlank(bookFees) ? "0" : bookFees;
+            portalPriceParams.setBookFees(bookFees);
+            // 班级 id
+            portalPriceParams.setClassId(classId);
+            // 阶段 id
+            String classLevelId = classValueMap.get("textField_lwok80hx").getJSONObject("fieldData").getString("value");
+            portalPriceParams.setClassLevelId(classLevelId);
+            // 公司 code
+            portalPriceParams.setCompanyCode(companyCode);
+            // 实施日期
+            JSONObject dateFieldJsonObject = hz06Map.get("dateField_ltse8sq6");
+            if (null != dateFieldJsonObject) {
+                JSONObject dateFieldData = dateFieldJsonObject.getJSONObject("fieldData");
+                if (null != dateFieldData) {
+                    Long value = dateFieldData.getLong("value");
+                    if (null != value) {
+                        String effectiveDate = DateUtils.format(new Date(value), "yyyy-MM-dd HH:mm:ss");
+                        portalPriceParams.setEffectiveDate(effectiveDate);
+                    }
+                }
+            }
+            // 类型
+            String type = classValueMap.get("textField_lwooo6bu").getJSONObject("fieldData").getString("value");
+
+            String nurseFees = classValueMap.get("numberField_lwokgua1").getJSONObject("fieldData").getString("value");
+            nurseFees = StringUtils.isBlank(nurseFees) ? "0" : nurseFees;
+            // 总课时费
+            String totalClassFees = classValueMap.get("numberField_ltse8sqv").getJSONObject("fieldData").getString("value");
+            totalClassFees = StringUtils.isBlank(totalClassFees) ? "0" : totalClassFees;
+            portalPriceParams.setTotalClassFees(totalClassFees);
+
+            if ("全天".equals(type)) {
+                // 保育费
+                portalPriceParams.setNurseFees(nurseFees);
+                // 总课时费
+                portalPriceParams.setTotalFees((Double.parseDouble(bookFees) + Double.parseDouble(nurseFees) + Double.parseDouble(totalClassFees)) + "");
+            } else {
+                // 总课时费
+                portalPriceParams.setNurseFees("0");
+                portalPriceParams.setTotalFees((Double.parseDouble(bookFees) + Double.parseDouble(totalClassFees)) + "");
+            }
+
+            PortalPriceParams[] params = new PortalPriceParams[1];
+            params[0] = portalPriceParams;
+
+            PortalPriceWSProxy portalPriceWSProxy = new PortalPriceWSProxy();
+
+            try {
+                Result result = portalPriceWSProxy.createPortalPrice(params);
+                System.out.println(result);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return null;
+    }
+
+    public Object createCoupon(String id, String formUuId) {
+        YiDaManager.YiDaResponse couponResponse = yiDaManager.getFormInstanceById(formUuId, id);
+        if (!couponResponse.getOk() || null == couponResponse.getData()) {
+            return null;
+        }
+        List<JSONObject> couponDataList = JSONArray.parseArray(couponResponse.getData().toString(), JSONObject.class);
+        if (CollectionUtils.isEmpty(couponDataList)) {
+            return null;
+        }
+        // 转化为map
+        Map<String, JSONObject> couponMap = couponDataList.stream().collect(Collectors.toMap(jsonObject -> jsonObject.getString("fieldId"), Function.identity()));
+
+        // 获取 processCode
+        String processCode = couponMap.get("serialNumberField_ltwejsxb").getJSONObject("fieldData").getString("value");
+
+        // 获取优惠券类型id
+        String valueStr = couponMap.get("textField_lwr7fmw7").getJSONObject("fieldData").getString("value");
+
+        // 获取优惠券类型名称
+        String valueName = couponMap.get("selectField_ltwj8vk5").getJSONObject("fieldData").getString("value");
+
+        // 获取申请人工号
+        String applicantCode = couponMap.get("textField_lu2cry3a").getJSONObject("fieldData").getString("value");
+
+        // 获取申请人名称
+        String applicantName = couponMap.get("employeeField_lu2cry34").getJSONObject("fieldData").getJSONArray("value").getJSONObject(0).getString("label");
+
+        // 获取优惠券
+        JSONArray couponValues = couponMap.get("tableField_ltwj8vke").getJSONObject("fieldData").getJSONArray("value");
+        if (CollectionUtils.isEmpty(couponValues)) {
+            return null;
+        }
+
+        for (int i = 0; i < couponValues.size(); i++) {
+            JSONArray couponValue = couponValues.getJSONArray(i);
+            Map<String, JSONObject> couponValueMap = new HashMap<>();
+            for (int j = 0; j < couponValue.size(); j++) {
+                String fieldId = couponValue.getJSONObject(j).getString("fieldId");
+                couponValueMap.put(fieldId, couponValue.getJSONObject(j));
+            }
+
+            // 获取折扣金额
+            String discountAmt = couponValueMap.get("numberField_ltwj8vkt").getJSONObject("fieldData").getString("value");
+            discountAmt = StringUtils.isBlank(discountAmt) ? "0" : discountAmt;
+
+            // 获取学生 id
+            String studentId = couponValueMap.get("textField_lwrx4sxc").getJSONObject("fieldData").getString("value");
+
+            // 获取手机号
+            String mobile = couponValueMap.get("textField_ltwj8vkf").getJSONObject("fieldData").getString("value");
+
+            // 获取 classId
+            String classId = couponValueMap.get("textField_lwr8xfcu").getJSONObject("fieldData").getString("value");
+
+            // 根据 id 查询 brandId
+            MClass mClass = classManager.getById(Long.parseLong(classId));
+            String brandId = mClass.getBrandId() == null ? "" : mClass.getBrandId().toString();
+
+            // 获取 orgCode
+            String orgCode = couponValueMap.get("textField_lx1gtlsk").getJSONObject("fieldData").getString("value");
+
+            PortalCouponWSProxy proxy = new PortalCouponWSProxy();
+            PortalCouponParams params = new PortalCouponParams();
+            params.setProcessCode(processCode);   // 未找到
+            params.setValueStr(valueStr);  // 优惠券类型
+            params.setOrgCode(orgCode);   // 不确定
+            params.setBrandId(brandId);  // 没有放进去
+            params.setValueName(valueName); // 优惠券类型
+            params.setApplicantCode(applicantCode); // 申请人
+            params.setApplicantName(applicantName);  // 申请人
+            params.setDiscountAmt(discountAmt); // 折扣金额
+            params.setStudentId(studentId);  // 学生 id
+            params.setMobile(mobile);  // 手机号
+            params.setClassId(classId);  // 班级 id
+            params.setApplicableNum("0");
+            try {
+                com.shulead.datasync.portalcoupon.Result result =  proxy.createPortalCoupon(params);
+                System.out.println("..");
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return null;
+    }
+}

+ 23 - 0
src/main/java/com/shulead/datasync/manager/MEmployeeManager.java

@@ -0,0 +1,23 @@
+package com.shulead.datasync.manager;
+
+import com.shulead.datasync.entity.MEmployee;
+import com.shulead.datasync.mapper.MEmployeeMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Classname MEmployeeManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/13 20:28
+ * @Created by liuxiangshun
+ */
+@Component
+public class MEmployeeManager {
+    @Resource
+    private MEmployeeMapper employeeMapper;
+
+    public MEmployee getById(Integer id) {
+        return employeeMapper.selectById(id);
+    }
+}

+ 25 - 0
src/main/java/com/shulead/datasync/manager/ManageAreaGroupManager.java

@@ -0,0 +1,25 @@
+package com.shulead.datasync.manager;
+
+import com.shulead.datasync.entity.ManageAreaGroup;
+import com.shulead.datasync.mapper.ManageAreaGroupMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Classname ManageAreaGroupManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/11 15:12
+ * @Created by liuxiangshun
+ */
+@Component
+public class ManageAreaGroupManager {
+    @Resource
+    private ManageAreaGroupMapper manageAreaGroupMapper;
+
+    public List<ManageAreaGroup> findAll() {
+        return manageAreaGroupMapper.findAll();
+    }
+}

+ 123 - 0
src/main/java/com/shulead/datasync/manager/StudentManager.java

@@ -0,0 +1,123 @@
+package com.shulead.datasync.manager;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.shulead.datasync.bo.StudentBO;
+import com.shulead.datasync.entity.MOrganization;
+import com.shulead.datasync.entity.MParent;
+import com.shulead.datasync.entity.MStudent;
+import com.shulead.datasync.mapper.MOrganizationMapper;
+import com.shulead.datasync.mapper.MParentMapper;
+import com.shulead.datasync.mapper.MStudentMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @Classname StudentManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/30 11:05
+ * @Created by liuxiangshun
+ */
+@Component
+public class StudentManager {
+    @Resource
+    private MStudentMapper mStudentMapper;
+
+    @Resource
+    private MParentMapper mParentMapper;
+
+    @Resource
+    private MOrganizationMapper mOrganizationMapper;
+
+    public List<StudentBO> pageStudent(Long startId, Integer limit) {
+        LambdaQueryWrapper<MStudent> wrapper = Wrappers.lambdaQuery(MStudent.class)
+                .ge(MStudent::getId, startId)
+                .orderByAsc(MStudent::getId)
+                .last("limit " + limit);
+
+        List<MStudent> students = mStudentMapper.selectList( wrapper);
+
+        if (CollectionUtils.isEmpty(students)) {
+            return Collections.emptyList();
+        }
+
+        List<Long> familyIds = students.stream().map(MStudent::getFamilyId).filter(Objects::nonNull).toList();
+
+        List<Long> orgIds = students.stream().map(MStudent::getOrgId).filter(Objects::nonNull).toList();
+
+        LambdaQueryWrapper<MParent> parentWrapper = Wrappers.lambdaQuery(MParent.class)
+                .in(MParent::getFamilyId, familyIds);
+        List<MParent> parents = mParentMapper.selectList(parentWrapper);
+        Map<Long, MParent> parentMap = parents.stream().collect(Collectors.toMap(MParent::getFamilyId, Function.identity(), (oldValue, newValue) -> oldValue));
+
+        LambdaQueryWrapper<MOrganization> organizationWrapper = Wrappers.lambdaQuery(MOrganization.class)
+                .in(MOrganization::getId, orgIds);
+        List<MOrganization> organizations = mOrganizationMapper.selectList(organizationWrapper);
+        Map<Long, MOrganization> organizationMap = organizations.stream().collect(Collectors.toMap(MOrganization::getId, Function.identity(), (oldValue, newValue) -> oldValue));
+
+        return students.stream().map(student -> buildStudentBO(student, parentMap, organizationMap)).toList();
+    }
+
+    private StudentBO buildStudentBO(MStudent student, Map<Long, MParent> parentMap, Map<Long, MOrganization> organizationMap) {
+        StudentBO studentBO = new StudentBO();
+        studentBO.setId(student.getId());
+        studentBO.setStudentName(student.getStudentName());
+        MParent parent = parentMap.get(student.getFamilyId());
+        if (null != parent) {
+            studentBO.setParentName(parent.getParentName());
+            studentBO.setMobile(parent.getMobile());
+        }
+        MOrganization organization = organizationMap.get(student.getOrgId());
+        if (null != organization) {
+            studentBO.setOrgName(organization.getOrgName());
+            studentBO.setSchoolArea(organization.getOrgName());
+        }
+        return studentBO;
+    }
+
+    public StudentBO getStudentByMobile(String mobile) {
+        LambdaQueryWrapper<MParent> wrapper = Wrappers.lambdaQuery(MParent.class)
+                .eq(MParent::getMobile, mobile)
+                .last("limit 1");
+        MParent parent = mParentMapper.selectOne(wrapper);
+
+        if (null == parent) {
+            return null;
+        }
+
+        LambdaQueryWrapper<MStudent> wrapper1 = Wrappers.lambdaQuery(MStudent.class)
+                .eq(MStudent::getFamilyId, parent.getFamilyId())
+                .last("limit 1");
+        MStudent mStudent = mStudentMapper.selectOne(wrapper1);
+
+        if (null == mStudent) {
+            return null;
+        }
+
+        LambdaQueryWrapper<MOrganization> wrapper2 = Wrappers.lambdaQuery(MOrganization.class)
+                .eq(MOrganization::getId, mStudent.getOrgId())
+                .last("limit 1");
+        MOrganization organization = mOrganizationMapper.selectOne(wrapper2);
+
+        if (null == organization) {
+            return null;
+        }
+
+        StudentBO studentBO = new StudentBO();
+        studentBO.setId(mStudent.getId());
+        studentBO.setStudentName(mStudent.getStudentName());
+        studentBO.setParentName(parent.getParentName());
+        studentBO.setMobile(parent.getMobile());
+        studentBO.setOrgName(organization.getOrgName());
+        studentBO.setSchoolArea(organization.getOrgName());
+        studentBO.setSchoolAreaCode(organization.getOrgCode());
+        return studentBO;
+    }
+}

+ 26 - 0
src/main/java/com/shulead/datasync/manager/UfHzqyManager.java

@@ -0,0 +1,26 @@
+package com.shulead.datasync.manager;
+
+import com.shulead.datasync.entity.UfHzqy;
+import com.shulead.datasync.mapper.UfHzqyMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Classname UfHzqyManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/13 17:15
+ * @Created by liuxiangshun
+ */
+@Component
+public class UfHzqyManager {
+    @Resource
+    private UfHzqyMapper ufHzqyMapper;
+
+    public List<UfHzqy> findAll() {
+        List<UfHzqy> ufHzqies = ufHzqyMapper.selectList(null);
+        return ufHzqies;
+    }
+}

+ 26 - 0
src/main/java/com/shulead/datasync/manager/ViewPortalClassConsociationManager.java

@@ -0,0 +1,26 @@
+package com.shulead.datasync.manager;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.shulead.datasync.entity.ViewPortalClassConsociation;
+import com.shulead.datasync.mapper.ViewPortalClassConsociationMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Classname ViewPortalClassConsociationManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/11 14:37
+ * @Created by liuxiangshun
+ */
+@Component
+public class ViewPortalClassConsociationManager {
+    @Resource
+    private ViewPortalClassConsociationMapper viewPortalClassConsociationMapper;
+
+    public List<ViewPortalClassConsociation> findAll() {
+        return viewPortalClassConsociationMapper.selectList(null);
+    }
+}

+ 164 - 0
src/main/java/com/shulead/datasync/manager/YiDaManager.java

@@ -0,0 +1,164 @@
+package com.shulead.datasync.manager;
+
+import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody;
+import com.aliyun.dingtalkyida_1_0.models.*;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
+import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
+import com.taobao.api.ApiException;
+import jakarta.annotation.Resource;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Classname YiDaManager
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/7 10:39
+ * @Created by liuxiangshun
+ */
+@Slf4j
+@Component
+public class YiDaManager {
+    @Resource
+    private com.aliyun.dingtalkyida_1_0.Client yiDaClient;
+
+    @Resource
+    private com.aliyun.dingtalkoauth2_1_0.Client authClient;
+
+    public YiDaResponse createOrUpdateInstance(String formUuId, String searchCondition, String instance) {
+        CreateOrUpdateFormDataHeaders createOrUpdateFormDataHeaders = new CreateOrUpdateFormDataHeaders();
+        createOrUpdateFormDataHeaders.xAcsDingtalkAccessToken = getAccessToken();
+        CreateOrUpdateFormDataRequest createOrUpdateFormDataRequest = new CreateOrUpdateFormDataRequest()
+                .setNoExecuteExpression(false)
+                .setFormUuid(formUuId)
+                .setSearchCondition(searchCondition)
+                .setAppType("APP_VCTRP6227CC8368NDOID")
+                .setFormDataJson(instance)
+                .setSystemToken("5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3")
+                .setUserId("332051151139376769");
+        try {
+            yiDaClient.createOrUpdateFormDataWithOptions(createOrUpdateFormDataRequest, createOrUpdateFormDataHeaders, new RuntimeOptions());
+        } catch (TeaException err) {
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                YiDaResponse yiDaResponse = new YiDaResponse();
+                yiDaResponse.setOk(false);
+                yiDaResponse.setCode(err.getCode());
+                yiDaResponse.setMessage(err.getMessage());
+                return yiDaResponse;
+            }
+
+        } catch (Exception _err) {
+            TeaException err = new TeaException(_err.getMessage(), _err);
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+                YiDaResponse yiDaResponse = new YiDaResponse();
+                yiDaResponse.setOk(false);
+                yiDaResponse.setCode(err.getCode());
+                yiDaResponse.setMessage(err.getMessage());
+                return yiDaResponse;
+            }
+        }
+        YiDaResponse yiDaResponse = new YiDaResponse();
+        yiDaResponse.setOk(true);
+        return yiDaResponse;
+    }
+
+    public String getAccessToken() {
+        com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest()
+                .setAppKey("dingwnds0gg0vpbu44cd")
+                .setAppSecret("B7tDWb3hPjP4rksRd_PqOsOVBv6QWY6F9gvn1X2aIoAIMFchRGw69aDeHly-6XXn");
+        try {
+            GetAccessTokenResponseBody body = authClient.getAccessToken(getAccessTokenRequest).getBody();
+            return body.getAccessToken();
+        } catch (TeaException err) {
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+                log.error("code:{}, message:{}", err.getCode(), err.getMessage());
+            }
+
+        } catch (Exception _err) {
+            TeaException err = new TeaException(_err.getMessage(), _err);
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+                log.error("code:{}, message:{}", err.getCode(), err.getMessage());
+            }
+
+        }
+        return null;
+    }
+
+    public String getUserIdByPhone(String phone) {
+        try {
+            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
+            OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
+            req.setMobile(phone);
+            OapiV2UserGetbymobileResponse rsp = client.execute(req, getAccessToken());
+            OapiV2UserGetbymobileResponse.UserGetByMobileResponse result = rsp.getResult();
+            if (null != result) {
+                return result.getUserid();
+            }
+        } catch (ApiException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public YiDaResponse getFormInstanceById(String formUuid, String formInstanceId) {
+        BatchGetFormDataByIdListHeaders batchGetFormDataByIdListHeaders = new BatchGetFormDataByIdListHeaders();
+        batchGetFormDataByIdListHeaders.xAcsDingtalkAccessToken = getAccessToken();
+        BatchGetFormDataByIdListRequest batchGetFormDataByIdListRequest = new BatchGetFormDataByIdListRequest()
+                .setFormUuid(formUuid)
+                .setAppType("APP_VCTRP6227CC8368NDOID")
+                .setSystemToken("5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3")
+                .setFormInstanceIdList(java.util.Arrays.asList(
+                        formInstanceId
+                ))
+                .setNeedFormInstanceValue(true)
+                .setUserId("332051151139376769");
+        YiDaResponse yiDaResponse = new YiDaResponse();
+        yiDaResponse.setOk(true);
+        try {
+            BatchGetFormDataByIdListResponse response = yiDaClient.batchGetFormDataByIdListWithOptions(batchGetFormDataByIdListRequest, batchGetFormDataByIdListHeaders, new RuntimeOptions());
+            List<BatchGetFormDataByIdListResponseBody.BatchGetFormDataByIdListResponseBodyResult> result = response.getBody().getResult();
+            if (CollectionUtils.isNotEmpty(result)) {
+                yiDaResponse.setData(result.getFirst().getInstanceValue());
+            }
+            return yiDaResponse;
+        } catch (TeaException err) {
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+                yiDaResponse.setOk(false);
+                yiDaResponse.setCode(err.getCode());
+                yiDaResponse.setMessage(err.getMessage());
+                return yiDaResponse;
+            }
+
+        } catch (Exception _err) {
+            TeaException err = new TeaException(_err.getMessage(), _err);
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+                yiDaResponse.setOk(false);
+                yiDaResponse.setCode(err.getCode());
+                yiDaResponse.setMessage(err.getMessage());
+                return yiDaResponse;
+            }
+        }
+        return yiDaResponse;
+    }
+
+    @Data
+    public static class YiDaResponse {
+        private Boolean ok;
+        private String code;
+        private String message;
+        private Object data;
+    }
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/MClassDetailMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.MClassDetail;
+
+/**
+ * @Classname MClassDetailMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:08
+ * @Created by liuxiangshun
+ */
+public interface MClassDetailMapper extends BaseMapper<MClassDetail> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/MClassMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.MClass;
+
+/**
+ * @Classname MClassMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:07
+ * @Created by liuxiangshun
+ */
+public interface MClassMapper extends BaseMapper<MClass> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/MClassUnitMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.MClassUnit;
+
+/**
+ * @Classname MClassUnitMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:08
+ * @Created by liuxiangshun
+ */
+public interface MClassUnitMapper extends BaseMapper<MClassUnit> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/MEmployeeMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.MEmployee;
+
+/**
+ * @Classname MEmployeeMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/13 20:27
+ * @Created by liuxiangshun
+ */
+public interface MEmployeeMapper extends BaseMapper<MEmployee> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/MManageAreaGroupDetailMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.MManageAreaGroupDetail;
+
+/**
+ * @Classname MManageAreaGroupDetailMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/10 10:48
+ * @Created by liuxiangshun
+ */
+public interface MManageAreaGroupDetailMapper extends BaseMapper<MManageAreaGroupDetail> {
+}

+ 15 - 0
src/main/java/com/shulead/datasync/mapper/MOrganizationMapper.java

@@ -0,0 +1,15 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.shulead.datasync.entity.MOrganization;
+
+/**
+ * @Classname MOrganization
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/30 14:42
+ * @Created by liuxiangshun
+ */
+public interface MOrganizationMapper extends BaseMapper<MOrganization> {
+}

+ 17 - 0
src/main/java/com/shulead/datasync/mapper/MParentMapper.java

@@ -0,0 +1,17 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.shulead.datasync.entity.MParent;
+
+/**
+ * @Classname MParentMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/30 14:42
+ * @Created by liuxiangshun
+ */
+@DS("cos")
+public interface MParentMapper extends BaseMapper<MParent> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/MPriceListDetailMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.MPriceListDetail;
+
+/**
+ * @Classname MPriceListDetailMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:09
+ * @Created by liuxiangshun
+ */
+public interface MPriceListDetailMapper extends BaseMapper<MPriceListDetail> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/MPriceListMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.MPriceList;
+
+/**
+ * @Classname MPriceListMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 14:09
+ * @Created by liuxiangshun
+ */
+public interface MPriceListMapper extends BaseMapper<MPriceList> {
+}

+ 17 - 0
src/main/java/com/shulead/datasync/mapper/MStudentMapper.java

@@ -0,0 +1,17 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.shulead.datasync.entity.MStudent;
+
+/**
+ * @Classname MStudentMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/29 15:18
+ * @Created by liuxiangshun
+ */
+@DS("cos")
+public interface MStudentMapper extends BaseMapper<MStudent> {
+}

+ 55 - 0
src/main/java/com/shulead/datasync/mapper/ManageAreaGroupMapper.java

@@ -0,0 +1,55 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.ManageAreaGroup;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * @Classname ManageAreaGroupMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/11 15:10
+ * @Created by liuxiangshun
+ */
+public interface ManageAreaGroupMapper extends BaseMapper<ManageAreaGroup> {
+    @Select("SELECT\n" +
+            "    a.area_group_id,\n" +
+            "    b.id as org_id,\n" +
+            "    b.org_code,\n" +
+            "    b.org_name,\n" +
+            "    b.org_associate,\n" +
+            "    me1.mobliephone as  invest_employee_mobile,\n" +
+            "    me2.mobliephone as bus_adviser_mobile,\n" +
+            "    me3.mobliephone as learn_direct_employee_mobile,\n" +
+            "    me5.mobliephone as learn_employee_mobile,\n" +
+            "    me7.mobliephone as bus_employee_mobile,\n" +
+            "    DATE_FORMAT(a.updated_date,'%Y-%m-%d %H:%i:%S') as update_time\n" +
+            "FROM\n" +
+            "    m_manage_area_group_detail a,\n" +
+            "    m_organization b,\n" +
+            "    m_employee me1,\n" +
+            "    m_employee me2,\n" +
+            "    m_employee me3,\n" +
+            "    m_employee me5,\n" +
+            "    m_manage_area_group c,\n" +
+            "    m_employee me7\n" +
+            "WHERE\n" +
+            "    a.org_id = b.id\n" +
+            "    and a.invest_employee_id = me1.id\n" +
+            "    and a.bus_adviser_employee_id = me2.id\n" +
+            "    and a.learn_direct_employee_id = me3.id\n" +
+            "    and a.learn_employee_id = me5.id\n" +
+            "    and a.area_group_id = c.id\n" +
+            "    and c.bus_employee_id = me7.id\n" +
+            "    and a.delete_flag = 0\n" +
+            "    and c.delete_flag = 0\n" +
+            "    and me1.delete_flag = 0\n" +
+            "    and me2.delete_flag = 0\n" +
+            "    and me3.delete_flag = 0\n" +
+            "    and me5.delete_flag = 0\n" +
+            "    and me7.delete_flag = 0")
+    List<ManageAreaGroup> findAll();
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/SDictionaryMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.SDictionary;
+
+/**
+ * @Classname SDictionaryMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/8 15:06
+ * @Created by liuxiangshun
+ */
+public interface SDictionaryMapper extends BaseMapper<SDictionary> {
+}

+ 16 - 0
src/main/java/com/shulead/datasync/mapper/UfHzqyMapper.java

@@ -0,0 +1,16 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.UfHzqy;
+
+/**
+ * @Classname UfHzqyMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/13 17:14
+ * @Created by liuxiangshun
+ */
+@DS("ecology")
+public interface UfHzqyMapper extends BaseMapper<UfHzqy> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/UserMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.User;
+
+/**
+ * @Classname User
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/11 15:46
+ * @Created by liuxiangshun
+ */
+public interface UserMapper extends BaseMapper<User> {
+}

+ 14 - 0
src/main/java/com/shulead/datasync/mapper/ViewPortalClassConsociationMapper.java

@@ -0,0 +1,14 @@
+package com.shulead.datasync.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shulead.datasync.entity.ViewPortalClassConsociation;
+
+/**
+ * @Classname ViewPortalClassConsociationMapper
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/5/11 14:36
+ * @Created by liuxiangshun
+ */
+public interface ViewPortalClassConsociationMapper extends BaseMapper<ViewPortalClassConsociation> {
+}

+ 120 - 0
src/main/java/com/shulead/datasync/portalcoupon/CreatePortalCoupon.java

@@ -0,0 +1,120 @@
+/**
+ * CreatePortalCoupon.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public class CreatePortalCoupon implements java.io.Serializable {
+    private PortalCouponParams params;
+
+    public CreatePortalCoupon() {
+    }
+
+    public CreatePortalCoupon(
+           PortalCouponParams params) {
+           this.params = params;
+    }
+
+
+    /**
+     * Gets the params value for this CreatePortalCoupon.
+     *
+     * @return params
+     */
+    public PortalCouponParams getParams() {
+        return params;
+    }
+
+
+    /**
+     * Sets the params value for this CreatePortalCoupon.
+     *
+     * @param params
+     */
+    public void setParams(PortalCouponParams params) {
+        this.params = params;
+    }
+
+    private Object __equalsCalc = null;
+    public synchronized boolean equals(Object obj) {
+        if (!(obj instanceof CreatePortalCoupon)) return false;
+        CreatePortalCoupon other = (CreatePortalCoupon) obj;
+        if (obj == null) return false;
+        if (this == obj) return true;
+        if (__equalsCalc != null) {
+            return (__equalsCalc == obj);
+        }
+        __equalsCalc = obj;
+        boolean _equals;
+        _equals = true &&
+            ((this.params==null && other.getParams()==null) ||
+             (this.params!=null &&
+              this.params.equals(other.getParams())));
+        __equalsCalc = null;
+        return _equals;
+    }
+
+    private boolean __hashCodeCalc = false;
+    public synchronized int hashCode() {
+        if (__hashCodeCalc) {
+            return 0;
+        }
+        __hashCodeCalc = true;
+        int _hashCode = 1;
+        if (getParams() != null) {
+            _hashCode += getParams().hashCode();
+        }
+        __hashCodeCalc = false;
+        return _hashCode;
+    }
+
+    // Type metadata
+    private static org.apache.axis.description.TypeDesc typeDesc =
+        new org.apache.axis.description.TypeDesc(CreatePortalCoupon.class, true);
+
+    static {
+        typeDesc.setXmlType(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "createPortalCoupon"));
+        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("params");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "params"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "portalCouponParams"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+    }
+
+    /**
+     * Return type metadata object
+     */
+    public static org.apache.axis.description.TypeDesc getTypeDesc() {
+        return typeDesc;
+    }
+
+    /**
+     * Get Custom Serializer
+     */
+    public static org.apache.axis.encoding.Serializer getSerializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanSerializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+    /**
+     * Get Custom Deserializer
+     */
+    public static org.apache.axis.encoding.Deserializer getDeserializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanDeserializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+}

+ 120 - 0
src/main/java/com/shulead/datasync/portalcoupon/CreatePortalCouponResponse.java

@@ -0,0 +1,120 @@
+/**
+ * CreatePortalCouponResponse.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public class CreatePortalCouponResponse implements java.io.Serializable {
+    private Result _return;
+
+    public CreatePortalCouponResponse() {
+    }
+
+    public CreatePortalCouponResponse(
+           Result _return) {
+           this._return = _return;
+    }
+
+
+    /**
+     * Gets the _return value for this CreatePortalCouponResponse.
+     *
+     * @return _return
+     */
+    public Result get_return() {
+        return _return;
+    }
+
+
+    /**
+     * Sets the _return value for this CreatePortalCouponResponse.
+     *
+     * @param _return
+     */
+    public void set_return(Result _return) {
+        this._return = _return;
+    }
+
+    private Object __equalsCalc = null;
+    public synchronized boolean equals(Object obj) {
+        if (!(obj instanceof CreatePortalCouponResponse)) return false;
+        CreatePortalCouponResponse other = (CreatePortalCouponResponse) obj;
+        if (obj == null) return false;
+        if (this == obj) return true;
+        if (__equalsCalc != null) {
+            return (__equalsCalc == obj);
+        }
+        __equalsCalc = obj;
+        boolean _equals;
+        _equals = true &&
+            ((this._return==null && other.get_return()==null) ||
+             (this._return!=null &&
+              this._return.equals(other.get_return())));
+        __equalsCalc = null;
+        return _equals;
+    }
+
+    private boolean __hashCodeCalc = false;
+    public synchronized int hashCode() {
+        if (__hashCodeCalc) {
+            return 0;
+        }
+        __hashCodeCalc = true;
+        int _hashCode = 1;
+        if (get_return() != null) {
+            _hashCode += get_return().hashCode();
+        }
+        __hashCodeCalc = false;
+        return _hashCode;
+    }
+
+    // Type metadata
+    private static org.apache.axis.description.TypeDesc typeDesc =
+        new org.apache.axis.description.TypeDesc(CreatePortalCouponResponse.class, true);
+
+    static {
+        typeDesc.setXmlType(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "createPortalCouponResponse"));
+        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("_return");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "return"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "result"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+    }
+
+    /**
+     * Return type metadata object
+     */
+    public static org.apache.axis.description.TypeDesc getTypeDesc() {
+        return typeDesc;
+    }
+
+    /**
+     * Get Custom Serializer
+     */
+    public static org.apache.axis.encoding.Serializer getSerializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanSerializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+    /**
+     * Get Custom Deserializer
+     */
+    public static org.apache.axis.encoding.Deserializer getDeserializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanDeserializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+}

+ 547 - 0
src/main/java/com/shulead/datasync/portalcoupon/PortalCouponParams.java

@@ -0,0 +1,547 @@
+/**
+ * PortalCouponParams.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public class PortalCouponParams implements java.io.Serializable {
+    private String applicantCode;
+
+    private String applicantName;
+
+    private String brandId;
+
+    private String discountAmt;
+
+    private String mobile;
+
+    private String orgCode;
+
+    private String orgId;
+
+    private String processCode;
+
+    private String studentId;
+
+    private String studentName;
+
+    private String valueName;
+
+    private String valueStr;
+
+    private String classId;;      // 班型id  2019-12-16 add
+
+    private String applicableNum;// 期数; 2019-12-16 add
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getApplicableNum() {
+		return applicableNum;
+	}
+
+	public void setApplicableNum(String applicableNum) {
+		this.applicableNum = applicableNum;
+	}
+
+    public PortalCouponParams() {
+    }
+
+    public PortalCouponParams(
+           String applicantCode,
+           String applicantName,
+           String brandId,
+           String discountAmt,
+           String mobile,
+           String orgCode,
+           String orgId,
+           String processCode,
+           String studentId,
+           String studentName,
+           String valueName,
+           String valueStr) {
+           this.applicantCode = applicantCode;
+           this.applicantName = applicantName;
+           this.brandId = brandId;
+           this.discountAmt = discountAmt;
+           this.mobile = mobile;
+           this.orgCode = orgCode;
+           this.orgId = orgId;
+           this.processCode = processCode;
+           this.studentId = studentId;
+           this.studentName = studentName;
+           this.classId = classId;
+           this.applicableNum = applicableNum;
+    }
+
+
+    /**
+     * Gets the applicantCode value for this PortalCouponParams.
+     *
+     * @return applicantCode
+     */
+    public String getApplicantCode() {
+        return applicantCode;
+    }
+
+
+    /**
+     * Sets the applicantCode value for this PortalCouponParams.
+     *
+     * @param applicantCode
+     */
+    public void setApplicantCode(String applicantCode) {
+        this.applicantCode = applicantCode;
+    }
+
+
+    /**
+     * Gets the applicantName value for this PortalCouponParams.
+     *
+     * @return applicantName
+     */
+    public String getApplicantName() {
+        return applicantName;
+    }
+
+
+    /**
+     * Sets the applicantName value for this PortalCouponParams.
+     *
+     * @param applicantName
+     */
+    public void setApplicantName(String applicantName) {
+        this.applicantName = applicantName;
+    }
+
+
+    /**
+     * Gets the brandId value for this PortalCouponParams.
+     *
+     * @return brandId
+     */
+    public String getBrandId() {
+        return brandId;
+    }
+
+
+    /**
+     * Sets the brandId value for this PortalCouponParams.
+     *
+     * @param brandId
+     */
+    public void setBrandId(String brandId) {
+        this.brandId = brandId;
+    }
+
+
+    /**
+     * Gets the discountAmt value for this PortalCouponParams.
+     *
+     * @return discountAmt
+     */
+    public String getDiscountAmt() {
+        return discountAmt;
+    }
+
+
+    /**
+     * Sets the discountAmt value for this PortalCouponParams.
+     *
+     * @param discountAmt
+     */
+    public void setDiscountAmt(String discountAmt) {
+        this.discountAmt = discountAmt;
+    }
+
+
+    /**
+     * Gets the mobile value for this PortalCouponParams.
+     *
+     * @return mobile
+     */
+    public String getMobile() {
+        return mobile;
+    }
+
+
+    /**
+     * Sets the mobile value for this PortalCouponParams.
+     *
+     * @param mobile
+     */
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+
+    /**
+     * Gets the orgCode value for this PortalCouponParams.
+     *
+     * @return orgCode
+     */
+    public String getOrgCode() {
+        return orgCode;
+    }
+
+
+    /**
+     * Sets the orgCode value for this PortalCouponParams.
+     *
+     * @param orgCode
+     */
+    public void setOrgCode(String orgCode) {
+        this.orgCode = orgCode;
+    }
+
+
+    /**
+     * Gets the orgId value for this PortalCouponParams.
+     *
+     * @return orgId
+     */
+    public String getOrgId() {
+        return orgId;
+    }
+
+
+    /**
+     * Sets the orgId value for this PortalCouponParams.
+     *
+     * @param orgId
+     */
+    public void setOrgId(String orgId) {
+        this.orgId = orgId;
+    }
+
+
+    /**
+     * Gets the processCode value for this PortalCouponParams.
+     *
+     * @return processCode
+     */
+    public String getProcessCode() {
+        return processCode;
+    }
+
+
+    /**
+     * Sets the processCode value for this PortalCouponParams.
+     *
+     * @param processCode
+     */
+    public void setProcessCode(String processCode) {
+        this.processCode = processCode;
+    }
+
+
+    /**
+     * Gets the studentId value for this PortalCouponParams.
+     *
+     * @return studentId
+     */
+    public String getStudentId() {
+        return studentId;
+    }
+
+
+    /**
+     * Sets the studentId value for this PortalCouponParams.
+     *
+     * @param studentId
+     */
+    public void setStudentId(String studentId) {
+        this.studentId = studentId;
+    }
+
+
+    /**
+     * Gets the studentName value for this PortalCouponParams.
+     *
+     * @return studentName
+     */
+    public String getStudentName() {
+        return studentName;
+    }
+
+
+    /**
+     * Sets the studentName value for this PortalCouponParams.
+     *
+     * @param studentName
+     */
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+
+    /**
+     * Gets the valueName value for this PortalCouponParams.
+     *
+     * @return valueName
+     */
+    public String getValueName() {
+        return valueName;
+    }
+
+
+    /**
+     * Sets the valueName value for this PortalCouponParams.
+     *
+     * @param valueName
+     */
+    public void setValueName(String valueName) {
+        this.valueName = valueName;
+    }
+
+
+    /**
+     * Gets the valueStr value for this PortalCouponParams.
+     *
+     * @return valueStr
+     */
+    public String getValueStr() {
+        return valueStr;
+    }
+
+
+    /**
+     * Sets the valueStr value for this PortalCouponParams.
+     *
+     * @param valueStr
+     */
+    public void setValueStr(String valueStr) {
+        this.valueStr = valueStr;
+    }
+
+    private Object __equalsCalc = null;
+    public synchronized boolean equals(Object obj) {
+        if (!(obj instanceof PortalCouponParams)) return false;
+        PortalCouponParams other = (PortalCouponParams) obj;
+        if (obj == null) return false;
+        if (this == obj) return true;
+        if (__equalsCalc != null) {
+            return (__equalsCalc == obj);
+        }
+        __equalsCalc = obj;
+        boolean _equals;
+        _equals = true &&
+            ((this.applicantCode==null && other.getApplicantCode()==null) ||
+             (this.applicantCode!=null &&
+              this.applicantCode.equals(other.getApplicantCode()))) &&
+            ((this.applicantName==null && other.getApplicantName()==null) ||
+             (this.applicantName!=null &&
+              this.applicantName.equals(other.getApplicantName()))) &&
+            ((this.brandId==null && other.getBrandId()==null) ||
+             (this.brandId!=null &&
+              this.brandId.equals(other.getBrandId()))) &&
+            ((this.discountAmt==null && other.getDiscountAmt()==null) ||
+             (this.discountAmt!=null &&
+              this.discountAmt.equals(other.getDiscountAmt()))) &&
+            ((this.mobile==null && other.getMobile()==null) ||
+             (this.mobile!=null &&
+              this.mobile.equals(other.getMobile()))) &&
+            ((this.orgCode==null && other.getOrgCode()==null) ||
+             (this.orgCode!=null &&
+              this.orgCode.equals(other.getOrgCode()))) &&
+            ((this.orgId==null && other.getOrgId()==null) ||
+             (this.orgId!=null &&
+              this.orgId.equals(other.getOrgId()))) &&
+            ((this.processCode==null && other.getProcessCode()==null) ||
+             (this.processCode!=null &&
+              this.processCode.equals(other.getProcessCode()))) &&
+            ((this.studentId==null && other.getStudentId()==null) ||
+             (this.studentId!=null &&
+              this.studentId.equals(other.getStudentId()))) &&
+            ((this.studentName==null && other.getStudentName()==null) ||
+             (this.studentName!=null &&
+              this.studentName.equals(other.getStudentName()))) &&
+            ((this.valueName==null && other.getValueName()==null) ||
+             (this.valueName!=null &&
+              this.valueName.equals(other.getValueName()))) &&
+            ((this.valueStr==null && other.getValueStr()==null) ||
+             (this.valueStr!=null &&
+              this.valueStr.equals(other.getValueStr())));
+        __equalsCalc = null;
+        return _equals;
+    }
+
+    private boolean __hashCodeCalc = false;
+    public synchronized int hashCode() {
+        if (__hashCodeCalc) {
+            return 0;
+        }
+        __hashCodeCalc = true;
+        int _hashCode = 1;
+        if (getApplicantCode() != null) {
+            _hashCode += getApplicantCode().hashCode();
+        }
+        if (getApplicantName() != null) {
+            _hashCode += getApplicantName().hashCode();
+        }
+        if (getBrandId() != null) {
+            _hashCode += getBrandId().hashCode();
+        }
+        if (getDiscountAmt() != null) {
+            _hashCode += getDiscountAmt().hashCode();
+        }
+        if (getMobile() != null) {
+            _hashCode += getMobile().hashCode();
+        }
+        if (getOrgCode() != null) {
+            _hashCode += getOrgCode().hashCode();
+        }
+        if (getOrgId() != null) {
+            _hashCode += getOrgId().hashCode();
+        }
+        if (getProcessCode() != null) {
+            _hashCode += getProcessCode().hashCode();
+        }
+        if (getStudentId() != null) {
+            _hashCode += getStudentId().hashCode();
+        }
+        if (getStudentName() != null) {
+            _hashCode += getStudentName().hashCode();
+        }
+        if (getValueName() != null) {
+            _hashCode += getValueName().hashCode();
+        }
+        if (getValueStr() != null) {
+            _hashCode += getValueStr().hashCode();
+        }
+        __hashCodeCalc = false;
+        return _hashCode;
+    }
+
+    // Type metadata
+    private static org.apache.axis.description.TypeDesc typeDesc =
+        new org.apache.axis.description.TypeDesc(PortalCouponParams.class, true);
+
+    static {
+        typeDesc.setXmlType(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "portalCouponParams"));
+        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("applicantCode");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "applicantCode"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("applicantName");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "applicantName"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("brandId");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "brandId"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("discountAmt");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "discountAmt"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("mobile");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "mobile"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("orgCode");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "orgCode"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("orgId");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "orgId"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("processCode");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "processCode"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("studentId");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "studentId"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("studentName");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "studentName"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("valueName");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "valueName"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("valueStr");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "valueStr"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+    }
+
+    /**
+     * Return type metadata object
+     */
+    public static org.apache.axis.description.TypeDesc getTypeDesc() {
+        return typeDesc;
+    }
+
+    /**
+     * Get Custom Serializer
+     */
+    public static org.apache.axis.encoding.Serializer getSerializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanSerializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+    /**
+     * Get Custom Deserializer
+     */
+    public static org.apache.axis.encoding.Deserializer getDeserializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanDeserializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+}

+ 14 - 0
src/main/java/com/shulead/datasync/portalcoupon/PortalCouponWS.java

@@ -0,0 +1,14 @@
+/**
+ * PortalCouponWS.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public interface PortalCouponWS extends java.rmi.Remote {
+    Result createPortalCoupon(PortalCouponParams params) throws java.rmi.RemoteException;
+
+    //public com.rise.cos.sales.webservice.Result createPortalCoupon(com.rise.cos.sales.webservice.UserTest params) throws java.rmi.RemoteException;
+}

+ 60 - 0
src/main/java/com/shulead/datasync/portalcoupon/PortalCouponWSProxy.java

@@ -0,0 +1,60 @@
+package com.shulead.datasync.portalcoupon;
+
+public class PortalCouponWSProxy implements PortalCouponWS {
+  private String _endpoint = null;
+  private PortalCouponWS portalCouponWS = null;
+
+  public PortalCouponWSProxy() {
+    _initPortalCouponWSProxy();
+  }
+
+  public PortalCouponWSProxy(String endpoint) {
+    _endpoint = endpoint;
+    _initPortalCouponWSProxy();
+  }
+
+  private void _initPortalCouponWSProxy() {
+    try {
+      portalCouponWS = (new PortalcouponLocator()).getPortalCouponWSImplPort();
+      if (portalCouponWS != null) {
+        if (_endpoint != null)
+          ((javax.xml.rpc.Stub)portalCouponWS)._setProperty("javax.xml.rpc.service.endpoint.address", _endpoint);
+        else
+          _endpoint = (String)((javax.xml.rpc.Stub)portalCouponWS)._getProperty("javax.xml.rpc.service.endpoint.address");
+      }
+
+    }
+    catch (javax.xml.rpc.ServiceException serviceException) {}
+  }
+
+  public String getEndpoint() {
+    return _endpoint;
+  }
+
+  public void setEndpoint(String endpoint) {
+    _endpoint = endpoint;
+    if (portalCouponWS != null)
+      ((javax.xml.rpc.Stub)portalCouponWS)._setProperty("javax.xml.rpc.service.endpoint.address", _endpoint);
+
+  }
+
+  public PortalCouponWS getPortalCouponWS() {
+    if (portalCouponWS == null)
+      _initPortalCouponWSProxy();
+    return portalCouponWS;
+  }
+
+  public Result createPortalCoupon(PortalCouponParams params) throws java.rmi.RemoteException{
+    if (portalCouponWS == null)
+      _initPortalCouponWSProxy();
+    return portalCouponWS.createPortalCoupon(params);
+  }
+
+public String sendPost(String ht05url, String jsons) {
+	// TODO Auto-generated method stub
+	return null;
+}
+
+
+
+}

+ 16 - 0
src/main/java/com/shulead/datasync/portalcoupon/Portalcoupon.java

@@ -0,0 +1,16 @@
+/**
+ * Portalcoupon.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public interface Portalcoupon extends javax.xml.rpc.Service {
+    public String getPortalCouponWSImplPortAddress();
+
+    public PortalCouponWS getPortalCouponWSImplPort() throws javax.xml.rpc.ServiceException;
+
+    public PortalCouponWS getPortalCouponWSImplPort(java.net.URL portAddress) throws javax.xml.rpc.ServiceException;
+}

+ 146 - 0
src/main/java/com/shulead/datasync/portalcoupon/PortalcouponLocator.java

@@ -0,0 +1,146 @@
+/**
+ * PortalcouponLocator.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public class PortalcouponLocator extends org.apache.axis.client.Service implements Portalcoupon {
+
+    public PortalcouponLocator() {
+    }
+
+
+    public PortalcouponLocator(org.apache.axis.EngineConfiguration config) {
+        super(config);
+    }
+
+    public PortalcouponLocator(String wsdlLoc, javax.xml.namespace.QName sName) throws javax.xml.rpc.ServiceException {
+        super(wsdlLoc, sName);
+    }
+
+    // Use to get a proxy class for PortalCouponWSImplPort
+    //private java.lang.String PortalCouponWSImplPort_address = "http://online.webservice.risechina.com/cos-webservice-web/webservice/portalcoupon";
+//    private String PortalCouponWSImplPort_address = "http://123.59.147.57:18024/cos-webservice/webservice/portalcoupon"; //正式环境
+    private String PortalCouponWSImplPort_address = "http://10.42.122.194:9008/cos-webservice-web/webservice/portalcoupon"; // 测试环境
+    //private java.lang.String PortalCouponWSImplPort_address = "http://10.19.158.102:9001/cos-webservice/webservice/portalcoupon";
+    //private java.lang.String PortalCouponWSImplPort_address = "http://10.10.10.172:9008/cos-webservice-web/webservice/portalcoupon";
+
+    public String getPortalCouponWSImplPortAddress() {
+        return PortalCouponWSImplPort_address;
+    }
+
+    // The WSDD service name defaults to the port name.
+    private String PortalCouponWSImplPortWSDDServiceName = "PortalCouponWSImplPort";
+
+    public String getPortalCouponWSImplPortWSDDServiceName() {
+        return PortalCouponWSImplPortWSDDServiceName;
+    }
+
+    public void setPortalCouponWSImplPortWSDDServiceName(String name) {
+        PortalCouponWSImplPortWSDDServiceName = name;
+    }
+
+    public PortalCouponWS getPortalCouponWSImplPort() throws javax.xml.rpc.ServiceException {
+       java.net.URL endpoint;
+        try {
+            endpoint = new java.net.URL(PortalCouponWSImplPort_address);
+        }
+        catch (java.net.MalformedURLException e) {
+            throw new javax.xml.rpc.ServiceException(e);
+        }
+        return getPortalCouponWSImplPort(endpoint);
+    }
+
+    public PortalCouponWS getPortalCouponWSImplPort(java.net.URL portAddress) throws javax.xml.rpc.ServiceException {
+        try {
+            PortalcouponSoapBindingStub _stub = new PortalcouponSoapBindingStub(portAddress, this);
+            _stub.setPortName(getPortalCouponWSImplPortWSDDServiceName());
+            return _stub;
+        }
+        catch (org.apache.axis.AxisFault e) {
+            return null;
+        }
+    }
+
+    public void setPortalCouponWSImplPortEndpointAddress(String address) {
+        PortalCouponWSImplPort_address = address;
+    }
+
+    /**
+     * For the given interface, get the stub implementation.
+     * If this service has no port for the given interface,
+     * then ServiceException is thrown.
+     */
+    public java.rmi.Remote getPort(Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
+        try {
+            if (PortalCouponWS.class.isAssignableFrom(serviceEndpointInterface)) {
+                PortalcouponSoapBindingStub _stub = new PortalcouponSoapBindingStub(new java.net.URL(PortalCouponWSImplPort_address), this);
+                _stub.setPortName(getPortalCouponWSImplPortWSDDServiceName());
+                return _stub;
+            }
+        }
+        catch (Throwable t) {
+            throw new javax.xml.rpc.ServiceException(t);
+        }
+        throw new javax.xml.rpc.ServiceException("There is no stub implementation for the interface:  " + (serviceEndpointInterface == null ? "null" : serviceEndpointInterface.getName()));
+    }
+
+    /**
+     * For the given interface, get the stub implementation.
+     * If this service has no port for the given interface,
+     * then ServiceException is thrown.
+     */
+    public java.rmi.Remote getPort(javax.xml.namespace.QName portName, Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
+        if (portName == null) {
+            return getPort(serviceEndpointInterface);
+        }
+        String inputPortName = portName.getLocalPart();
+        if ("PortalCouponWSImplPort".equals(inputPortName)) {
+            return getPortalCouponWSImplPort();
+        }
+        else  {
+            java.rmi.Remote _stub = getPort(serviceEndpointInterface);
+            ((org.apache.axis.client.Stub) _stub).setPortName(portName);
+            return _stub;
+        }
+    }
+
+    public javax.xml.namespace.QName getServiceName() {
+        return new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "portalcoupon");
+    }
+
+    private java.util.HashSet ports = null;
+
+    public java.util.Iterator getPorts() {
+        if (ports == null) {
+            ports = new java.util.HashSet();
+            ports.add(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "PortalCouponWSImplPort"));
+        }
+        return ports.iterator();
+    }
+
+    /**
+    * Set the endpoint address for the specified port name.
+    */
+    public void setEndpointAddress(String portName, String address) throws javax.xml.rpc.ServiceException {
+
+if ("PortalCouponWSImplPort".equals(portName)) {
+            setPortalCouponWSImplPortEndpointAddress(address);
+        }
+        else
+{ // Unknown Port Name
+            throw new javax.xml.rpc.ServiceException(" Cannot set Endpoint Address for Unknown Port" + portName);
+        }
+    }
+
+    /**
+    * Set the endpoint address for the specified port name.
+    */
+    public void setEndpointAddress(javax.xml.namespace.QName portName, String address) throws javax.xml.rpc.ServiceException {
+        setEndpointAddress(portName.getLocalPart(), address);
+    }
+
+}

+ 197 - 0
src/main/java/com/shulead/datasync/portalcoupon/PortalcouponSoapBindingStub.java

@@ -0,0 +1,197 @@
+/**
+ * PortalcouponSoapBindingStub.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public class PortalcouponSoapBindingStub extends org.apache.axis.client.Stub implements PortalCouponWS {
+    private java.util.Vector cachedSerClasses = new java.util.Vector();
+    private java.util.Vector cachedSerQNames = new java.util.Vector();
+    private java.util.Vector cachedSerFactories = new java.util.Vector();
+    private java.util.Vector cachedDeserFactories = new java.util.Vector();
+
+    static org.apache.axis.description.OperationDesc [] _operations;
+
+    static {
+        _operations = new org.apache.axis.description.OperationDesc[1];
+        _initOperationDesc1();
+    }
+
+    private static void _initOperationDesc1(){
+        org.apache.axis.description.OperationDesc oper;
+        org.apache.axis.description.ParameterDesc param;
+        oper = new org.apache.axis.description.OperationDesc();
+        oper.setName("createPortalCoupon");
+        param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "params"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "portalCouponParams"), PortalCouponParams.class, false, false);
+        param.setOmittable(true);
+        oper.addParameter(param);
+        oper.setReturnType(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "result"));
+        oper.setReturnClass(Result.class);
+        oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
+        oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
+        oper.setUse(org.apache.axis.constants.Use.LITERAL);
+        _operations[0] = oper;
+
+    }
+
+    public PortalcouponSoapBindingStub() throws org.apache.axis.AxisFault {
+         this(null);
+    }
+
+    public PortalcouponSoapBindingStub(java.net.URL endpointURL, javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
+         this(service);
+         super.cachedEndpoint = endpointURL;
+    }
+
+    public PortalcouponSoapBindingStub(javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
+        if (service == null) {
+            super.service = new org.apache.axis.client.Service();
+        } else {
+            super.service = service;
+        }
+        ((org.apache.axis.client.Service)super.service).setTypeMappingVersion("1.2");
+            Class cls;
+            javax.xml.namespace.QName qName;
+            javax.xml.namespace.QName qName2;
+            Class beansf = org.apache.axis.encoding.ser.BeanSerializerFactory.class;
+            Class beandf = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;
+            Class enumsf = org.apache.axis.encoding.ser.EnumSerializerFactory.class;
+            Class enumdf = org.apache.axis.encoding.ser.EnumDeserializerFactory.class;
+            Class arraysf = org.apache.axis.encoding.ser.ArraySerializerFactory.class;
+            Class arraydf = org.apache.axis.encoding.ser.ArrayDeserializerFactory.class;
+            Class simplesf = org.apache.axis.encoding.ser.SimpleSerializerFactory.class;
+            Class simpledf = org.apache.axis.encoding.ser.SimpleDeserializerFactory.class;
+            Class simplelistsf = org.apache.axis.encoding.ser.SimpleListSerializerFactory.class;
+            Class simplelistdf = org.apache.axis.encoding.ser.SimpleListDeserializerFactory.class;
+            qName = new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "createPortalCoupon");
+            cachedSerQNames.add(qName);
+            cls = CreatePortalCoupon.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "createPortalCouponResponse");
+            cachedSerQNames.add(qName);
+            cls = CreatePortalCouponResponse.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "portalCouponParams");
+            cachedSerQNames.add(qName);
+            cls = PortalCouponParams.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "result");
+            cachedSerQNames.add(qName);
+            cls = Result.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+    }
+
+    protected org.apache.axis.client.Call createCall() throws java.rmi.RemoteException {
+        try {
+            org.apache.axis.client.Call _call = super._createCall();
+            if (super.maintainSessionSet) {
+                _call.setMaintainSession(super.maintainSession);
+            }
+            if (super.cachedUsername != null) {
+                _call.setUsername(super.cachedUsername);
+            }
+            if (super.cachedPassword != null) {
+                _call.setPassword(super.cachedPassword);
+            }
+            if (super.cachedEndpoint != null) {
+                _call.setTargetEndpointAddress(super.cachedEndpoint);
+            }
+            if (super.cachedTimeout != null) {
+                _call.setTimeout(super.cachedTimeout);
+            }
+            if (super.cachedPortName != null) {
+                _call.setPortName(super.cachedPortName);
+            }
+            java.util.Enumeration keys = super.cachedProperties.keys();
+            while (keys.hasMoreElements()) {
+                String key = (String) keys.nextElement();
+                _call.setProperty(key, super.cachedProperties.get(key));
+            }
+            // All the type mapping information is registered
+            // when the first call is made.
+            // The type mapping information is actually registered in
+            // the TypeMappingRegistry of the service, which
+            // is the reason why registration is only needed for the first call.
+            synchronized (this) {
+                if (firstCall()) {
+                    // must set encoding style before registering serializers
+                    _call.setEncodingStyle(null);
+                    for (int i = 0; i < cachedSerFactories.size(); ++i) {
+                        Class cls = (Class) cachedSerClasses.get(i);
+                        javax.xml.namespace.QName qName =
+                                (javax.xml.namespace.QName) cachedSerQNames.get(i);
+                        Object x = cachedSerFactories.get(i);
+                        if (x instanceof Class) {
+                            Class sf = (Class)
+                                 cachedSerFactories.get(i);
+                            Class df = (Class)
+                                 cachedDeserFactories.get(i);
+                            _call.registerTypeMapping(cls, qName, sf, df, false);
+                        }
+                        else if (x instanceof javax.xml.rpc.encoding.SerializerFactory) {
+                            org.apache.axis.encoding.SerializerFactory sf = (org.apache.axis.encoding.SerializerFactory)
+                                 cachedSerFactories.get(i);
+                            org.apache.axis.encoding.DeserializerFactory df = (org.apache.axis.encoding.DeserializerFactory)
+                                 cachedDeserFactories.get(i);
+                            _call.registerTypeMapping(cls, qName, sf, df, false);
+                        }
+                    }
+                }
+            }
+            return _call;
+        }
+        catch (Throwable _t) {
+            throw new org.apache.axis.AxisFault("Failure trying to get the Call object", _t);
+        }
+    }
+
+    public Result createPortalCoupon(PortalCouponParams params) throws java.rmi.RemoteException {
+        if (super.cachedEndpoint == null) {
+            throw new org.apache.axis.NoEndPointException();
+        }
+        org.apache.axis.client.Call _call = createCall();
+        _call.setOperation(_operations[0]);
+        _call.setUseSOAPAction(true);
+        _call.setSOAPActionURI("");
+        _call.setEncodingStyle(null);
+        _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
+        _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
+        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
+        _call.setOperationName(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "createPortalCoupon"));
+
+        setRequestHeaders(_call);
+        setAttachments(_call);
+ try {        Object _resp = _call.invoke(new Object[] {params});
+
+        if (_resp instanceof java.rmi.RemoteException) {
+            throw (java.rmi.RemoteException)_resp;
+        }
+        else {
+            extractAttachments(_call);
+            try {
+                return (Result) _resp;
+            } catch (Exception _exception) {
+                return (Result) org.apache.axis.utils.JavaUtils.convert(_resp, Result.class);
+            }
+        }
+  } catch (org.apache.axis.AxisFault axisFaultException) {
+  throw axisFaultException;
+}
+    }
+
+}

+ 248 - 0
src/main/java/com/shulead/datasync/portalcoupon/Result.java

@@ -0,0 +1,248 @@
+/**
+ * Result.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalcoupon;
+
+public class Result implements java.io.Serializable {
+    private String code;
+
+    private String errorInfo;
+
+    private String msg;
+
+    private Object[] result;
+
+    public Result() {
+    }
+
+    public Result(
+           String code,
+           String errorInfo,
+           String msg,
+           Object[] result) {
+           this.code = code;
+           this.errorInfo = errorInfo;
+           this.msg = msg;
+           this.result = result;
+    }
+
+
+    /**
+     * Gets the code value for this Result.
+     *
+     * @return code
+     */
+    public String getCode() {
+        return code;
+    }
+
+
+    /**
+     * Sets the code value for this Result.
+     *
+     * @param code
+     */
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+
+    /**
+     * Gets the errorInfo value for this Result.
+     *
+     * @return errorInfo
+     */
+    public String getErrorInfo() {
+        return errorInfo;
+    }
+
+
+    /**
+     * Sets the errorInfo value for this Result.
+     *
+     * @param errorInfo
+     */
+    public void setErrorInfo(String errorInfo) {
+        this.errorInfo = errorInfo;
+    }
+
+
+    /**
+     * Gets the msg value for this Result.
+     *
+     * @return msg
+     */
+    public String getMsg() {
+        return msg;
+    }
+
+
+    /**
+     * Sets the msg value for this Result.
+     *
+     * @param msg
+     */
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+
+    /**
+     * Gets the result value for this Result.
+     *
+     * @return result
+     */
+    public Object[] getResult() {
+        return result;
+    }
+
+
+    /**
+     * Sets the result value for this Result.
+     *
+     * @param result
+     */
+    public void setResult(Object[] result) {
+        this.result = result;
+    }
+
+    public Object getResult(int i) {
+        return this.result[i];
+    }
+
+    public void setResult(int i, Object _value) {
+        this.result[i] = _value;
+    }
+
+    private Object __equalsCalc = null;
+    public synchronized boolean equals(Object obj) {
+        if (!(obj instanceof Result)) return false;
+        Result other = (Result) obj;
+        if (obj == null) return false;
+        if (this == obj) return true;
+        if (__equalsCalc != null) {
+            return (__equalsCalc == obj);
+        }
+        __equalsCalc = obj;
+        boolean _equals;
+        _equals = true &&
+            ((this.code==null && other.getCode()==null) ||
+             (this.code!=null &&
+              this.code.equals(other.getCode()))) &&
+            ((this.errorInfo==null && other.getErrorInfo()==null) ||
+             (this.errorInfo!=null &&
+              this.errorInfo.equals(other.getErrorInfo()))) &&
+            ((this.msg==null && other.getMsg()==null) ||
+             (this.msg!=null &&
+              this.msg.equals(other.getMsg()))) &&
+            ((this.result==null && other.getResult()==null) ||
+             (this.result!=null &&
+              java.util.Arrays.equals(this.result, other.getResult())));
+        __equalsCalc = null;
+        return _equals;
+    }
+
+    private boolean __hashCodeCalc = false;
+    public synchronized int hashCode() {
+        if (__hashCodeCalc) {
+            return 0;
+        }
+        __hashCodeCalc = true;
+        int _hashCode = 1;
+        if (getCode() != null) {
+            _hashCode += getCode().hashCode();
+        }
+        if (getErrorInfo() != null) {
+            _hashCode += getErrorInfo().hashCode();
+        }
+        if (getMsg() != null) {
+            _hashCode += getMsg().hashCode();
+        }
+        if (getResult() != null) {
+            for (int i=0;
+                 i<java.lang.reflect.Array.getLength(getResult());
+                 i++) {
+                Object obj = java.lang.reflect.Array.get(getResult(), i);
+                if (obj != null &&
+                    !obj.getClass().isArray()) {
+                    _hashCode += obj.hashCode();
+                }
+            }
+        }
+        __hashCodeCalc = false;
+        return _hashCode;
+    }
+
+    // Type metadata
+    private static org.apache.axis.description.TypeDesc typeDesc =
+        new org.apache.axis.description.TypeDesc(Result.class, true);
+
+    static {
+        typeDesc.setXmlType(new javax.xml.namespace.QName("http://webservice.sales.cos.rise.com/", "result"));
+        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("code");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "code"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("errorInfo");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "errorInfo"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("msg");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "msg"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+        elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("result");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "result"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "anyType"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(true);
+        elemField.setMaxOccursUnbounded(true);
+        typeDesc.addFieldDesc(elemField);
+    }
+
+    /**
+     * Return type metadata object
+     */
+    public static org.apache.axis.description.TypeDesc getTypeDesc() {
+        return typeDesc;
+    }
+
+    /**
+     * Get Custom Serializer
+     */
+    public static org.apache.axis.encoding.Serializer getSerializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanSerializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+    /**
+     * Get Custom Deserializer
+     */
+    public static org.apache.axis.encoding.Deserializer getDeserializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanDeserializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+}

+ 120 - 0
src/main/java/com/shulead/datasync/portalprice/CreatePortalPriceResponse.java

@@ -0,0 +1,120 @@
+/**
+ * CreatePortalPriceResponse.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalprice;
+
+public class CreatePortalPriceResponse implements java.io.Serializable {
+    private Result _return;
+
+    public CreatePortalPriceResponse() {
+    }
+
+    public CreatePortalPriceResponse(
+           Result _return) {
+           this._return = _return;
+    }
+
+
+    /**
+     * Gets the _return value for this CreatePortalPriceResponse.
+     *
+     * @return _return
+     */
+    public Result get_return() {
+        return _return;
+    }
+
+
+    /**
+     * Sets the _return value for this CreatePortalPriceResponse.
+     *
+     * @param _return
+     */
+    public void set_return(Result _return) {
+        this._return = _return;
+    }
+
+    private Object __equalsCalc = null;
+    public synchronized boolean equals(Object obj) {
+        if (!(obj instanceof CreatePortalPriceResponse)) return false;
+        CreatePortalPriceResponse other = (CreatePortalPriceResponse) obj;
+        if (obj == null) return false;
+        if (this == obj) return true;
+        if (__equalsCalc != null) {
+            return (__equalsCalc == obj);
+        }
+        __equalsCalc = obj;
+        boolean _equals;
+        _equals = true &&
+            ((this._return==null && other.get_return()==null) ||
+             (this._return!=null &&
+              this._return.equals(other.get_return())));
+        __equalsCalc = null;
+        return _equals;
+    }
+
+    private boolean __hashCodeCalc = false;
+    public synchronized int hashCode() {
+        if (__hashCodeCalc) {
+            return 0;
+        }
+        __hashCodeCalc = true;
+        int _hashCode = 1;
+        if (get_return() != null) {
+            _hashCode += get_return().hashCode();
+        }
+        __hashCodeCalc = false;
+        return _hashCode;
+    }
+
+    // Type metadata
+    private static org.apache.axis.description.TypeDesc typeDesc =
+        new org.apache.axis.description.TypeDesc(CreatePortalPriceResponse.class, true);
+
+    static {
+        typeDesc.setXmlType(new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "createPortalPriceResponse"));
+        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
+        elemField.setFieldName("_return");
+        elemField.setXmlName(new javax.xml.namespace.QName("", "return"));
+        elemField.setXmlType(new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "result"));
+        elemField.setMinOccurs(0);
+        elemField.setNillable(false);
+        typeDesc.addFieldDesc(elemField);
+    }
+
+    /**
+     * Return type metadata object
+     */
+    public static org.apache.axis.description.TypeDesc getTypeDesc() {
+        return typeDesc;
+    }
+
+    /**
+     * Get Custom Serializer
+     */
+    public static org.apache.axis.encoding.Serializer getSerializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanSerializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+    /**
+     * Get Custom Deserializer
+     */
+    public static org.apache.axis.encoding.Deserializer getDeserializer(
+           String mechType,
+           Class _javaType,
+           javax.xml.namespace.QName _xmlType) {
+        return
+          new  org.apache.axis.encoding.ser.BeanDeserializer(
+            _javaType, _xmlType, typeDesc);
+    }
+
+}

+ 37 - 0
src/main/java/com/shulead/datasync/portalprice/Main.java

@@ -0,0 +1,37 @@
+package com.shulead.datasync.portalprice;
+
+import java.rmi.RemoteException;
+
+/**
+ * @Classname ${NAME}
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/28 17:48
+ * @Created by liuxiangshun
+ */
+public class Main {
+    public static void main(String[] args) {
+        PortalPriceParams portalPriceParams = new PortalPriceParams();
+        portalPriceParams.setBookFees("100");
+        portalPriceParams.setClassFees("200");
+        portalPriceParams.setClassId("1");
+        portalPriceParams.setClassLevelId("1");
+        portalPriceParams.setCompanyCode("HZ00");
+        portalPriceParams.setEffectiveDate("2024-05-05 00:00:00");
+        portalPriceParams.setNurseFees("300");
+        portalPriceParams.setTotalClassFees("400");
+        portalPriceParams.setTotalFees("600");
+
+        PortalPriceParams[] params = new PortalPriceParams[1];
+        params[0] = portalPriceParams;
+
+        PortalPriceWSProxy portalPriceWSProxy = new PortalPriceWSProxy();
+
+        try {
+            Result result = portalPriceWSProxy.createPortalPrice(params);
+            System.out.println(result);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 16 - 0
src/main/java/com/shulead/datasync/portalprice/PortalPrice.java

@@ -0,0 +1,16 @@
+/**
+ * PortalPrice.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalprice;
+
+public interface PortalPrice extends javax.xml.rpc.Service {
+    String getPortalPriceWSImplPortAddress();
+
+    PortalPriceWS getPortalPriceWSImplPort() throws javax.xml.rpc.ServiceException;
+
+    PortalPriceWS getPortalPriceWSImplPort(java.net.URL portAddress) throws javax.xml.rpc.ServiceException;
+}

+ 132 - 0
src/main/java/com/shulead/datasync/portalprice/PortalPriceLocator.java

@@ -0,0 +1,132 @@
+package com.shulead.datasync.portalprice;
+
+import org.apache.axis.AxisFault;
+import org.apache.axis.EngineConfiguration;
+import org.apache.axis.client.Service;
+import org.apache.axis.client.Stub;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ServiceException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.rmi.Remote;
+import java.util.HashSet;
+import java.util.Iterator;
+
+/**
+ * @Classname PortalPriceLocator
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/28 18:42
+ * @Created by liuxiangshun
+ */
+public class PortalPriceLocator extends Service implements PortalPrice {
+//    private String PortalPriceWSImplPort_address = "http://123.59.147.57:18024/cos-webservice/webservice/PortalPrice";
+    private String PortalPriceWSImplPort_address = "http://10.42.122.194:9008/cos-webservice-web/webservice/PortalPrice";
+    private String PortalPriceWSImplPortWSDDServiceName = "PortalPriceWSImplPort";
+    private HashSet ports = null;
+
+    public PortalPriceLocator() {
+    }
+
+    public PortalPriceLocator(EngineConfiguration config) {
+        super(config);
+    }
+
+    public PortalPriceLocator(String wsdlLoc, QName sName) throws ServiceException {
+        super(wsdlLoc, sName);
+    }
+
+    public String getPortalPriceWSImplPortAddress() {
+        return this.PortalPriceWSImplPort_address;
+    }
+
+    public String getPortalPriceWSImplPortWSDDServiceName() {
+        return this.PortalPriceWSImplPortWSDDServiceName;
+    }
+
+    public void setPortalPriceWSImplPortWSDDServiceName(String name) {
+        this.PortalPriceWSImplPortWSDDServiceName = name;
+    }
+
+    public PortalPriceWS getPortalPriceWSImplPort() throws ServiceException {
+        URL endpoint;
+        try {
+            endpoint = new URL(this.PortalPriceWSImplPort_address);
+        } catch (MalformedURLException var3) {
+            MalformedURLException e = var3;
+            throw new ServiceException(e);
+        }
+
+        return this.getPortalPriceWSImplPort(endpoint);
+    }
+
+    public PortalPriceWS getPortalPriceWSImplPort(URL portAddress) throws ServiceException {
+        try {
+            PortalPriceSoapBindingStub _stub = new PortalPriceSoapBindingStub(portAddress, this);
+            _stub.setPortName(this.getPortalPriceWSImplPortWSDDServiceName());
+            return _stub;
+        } catch (AxisFault var3) {
+            return null;
+        }
+    }
+
+    public void setPortalPriceWSImplPortEndpointAddress(String address) {
+        this.PortalPriceWSImplPort_address = address;
+    }
+
+    public Remote getPort(Class serviceEndpointInterface) throws ServiceException {
+        try {
+            if (PortalPriceWS.class.isAssignableFrom(serviceEndpointInterface)) {
+                PortalPriceSoapBindingStub _stub = new PortalPriceSoapBindingStub(new URL(this.PortalPriceWSImplPort_address), this);
+                _stub.setPortName(this.getPortalPriceWSImplPortWSDDServiceName());
+                return _stub;
+            }
+        } catch (Throwable var3) {
+            Throwable t = var3;
+            throw new ServiceException(t);
+        }
+
+        throw new ServiceException("There is no stub implementation for the interface:  " + (serviceEndpointInterface == null ? "null" : serviceEndpointInterface.getName()));
+    }
+
+    public Remote getPort(QName portName, Class serviceEndpointInterface) throws ServiceException {
+        if (portName == null) {
+            return this.getPort(serviceEndpointInterface);
+        } else {
+            String inputPortName = portName.getLocalPart();
+            if ("PortalPriceWSImplPort".equals(inputPortName)) {
+                return this.getPortalPriceWSImplPort();
+            } else {
+                Remote _stub = this.getPort(serviceEndpointInterface);
+                ((Stub)_stub).setPortName(portName);
+                return _stub;
+            }
+        }
+    }
+
+    public QName getServiceName() {
+        return new QName("http://webservice.promotions.cos.rise.com/", "PortalPrice");
+    }
+
+    public Iterator getPorts() {
+        if (this.ports == null) {
+            this.ports = new HashSet();
+            this.ports.add(new QName("http://webservice.promotions.cos.rise.com/", "PortalPriceWSImplPort"));
+        }
+
+        return this.ports.iterator();
+    }
+
+    public void setEndpointAddress(String portName, String address) throws ServiceException {
+        if ("PortalPriceWSImplPort".equals(portName)) {
+            this.setPortalPriceWSImplPortEndpointAddress(address);
+        } else {
+            throw new ServiceException(" Cannot set Endpoint Address for Unknown Port" + portName);
+        }
+    }
+
+    public void setEndpointAddress(QName portName, String address) throws ServiceException {
+        this.setEndpointAddress(portName.getLocalPart(), address);
+    }
+}

File diff suppressed because it is too large
+ 266 - 0
src/main/java/com/shulead/datasync/portalprice/PortalPriceParams.java


+ 199 - 0
src/main/java/com/shulead/datasync/portalprice/PortalPriceSoapBindingStub.java

@@ -0,0 +1,199 @@
+/**
+ * PortalPriceSoapBindingStub.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
+ */
+
+package com.shulead.datasync.portalprice;
+
+public class PortalPriceSoapBindingStub extends org.apache.axis.client.Stub implements PortalPriceWS {
+    private java.util.Vector cachedSerClasses = new java.util.Vector();
+    private java.util.Vector cachedSerQNames = new java.util.Vector();
+    private java.util.Vector cachedSerFactories = new java.util.Vector();
+    private java.util.Vector cachedDeserFactories = new java.util.Vector();
+
+    static org.apache.axis.description.OperationDesc [] _operations;
+
+    static {
+        _operations = new org.apache.axis.description.OperationDesc[1];
+        _initOperationDesc1();
+    }
+
+    private static void _initOperationDesc1(){
+        org.apache.axis.description.OperationDesc oper;
+        org.apache.axis.description.ParameterDesc param;
+        oper = new org.apache.axis.description.OperationDesc();
+        oper.setName("createPortalPrice");
+        param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "params"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "portalPriceParams"), PortalPriceParams[].class, false, false);
+        param.setOmittable(true);
+        oper.addParameter(param);
+        oper.setReturnType(new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "result"));
+        oper.setReturnClass(Result.class);
+        oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
+        oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
+        oper.setUse(org.apache.axis.constants.Use.LITERAL);
+        _operations[0] = oper;
+
+    }
+
+    public PortalPriceSoapBindingStub() throws org.apache.axis.AxisFault {
+         this(null);
+    }
+
+    public PortalPriceSoapBindingStub(java.net.URL endpointURL, javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
+         this(service);
+         super.cachedEndpoint = endpointURL;
+    }
+
+    public PortalPriceSoapBindingStub(javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
+        if (service == null) {
+            super.service = new org.apache.axis.client.Service();
+        } else {
+            super.service = service;
+        }
+        ((org.apache.axis.client.Service)super.service).setTypeMappingVersion("1.2");
+            Class cls;
+            javax.xml.namespace.QName qName;
+            javax.xml.namespace.QName qName2;
+            Class beansf = org.apache.axis.encoding.ser.BeanSerializerFactory.class;
+            Class beandf = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;
+            Class enumsf = org.apache.axis.encoding.ser.EnumSerializerFactory.class;
+            Class enumdf = org.apache.axis.encoding.ser.EnumDeserializerFactory.class;
+            Class arraysf = org.apache.axis.encoding.ser.ArraySerializerFactory.class;
+            Class arraydf = org.apache.axis.encoding.ser.ArrayDeserializerFactory.class;
+            Class simplesf = org.apache.axis.encoding.ser.SimpleSerializerFactory.class;
+            Class simpledf = org.apache.axis.encoding.ser.SimpleDeserializerFactory.class;
+            Class simplelistsf = org.apache.axis.encoding.ser.SimpleListSerializerFactory.class;
+            Class simplelistdf = org.apache.axis.encoding.ser.SimpleListDeserializerFactory.class;
+            qName = new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "createPortalPrice");
+            cachedSerQNames.add(qName);
+            cls = PortalPriceParams[].class;
+            cachedSerClasses.add(cls);
+            qName = new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "portalPriceParams");
+            qName2 = new javax.xml.namespace.QName("", "params");
+            cachedSerFactories.add(new org.apache.axis.encoding.ser.ArraySerializerFactory(qName, qName2));
+            cachedDeserFactories.add(new org.apache.axis.encoding.ser.ArrayDeserializerFactory());
+
+            qName = new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "createPortalPriceResponse");
+            cachedSerQNames.add(qName);
+            cls = CreatePortalPriceResponse.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "portalPriceParams");
+            cachedSerQNames.add(qName);
+            cls = PortalPriceParams.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "result");
+            cachedSerQNames.add(qName);
+            cls = Result.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+    }
+
+    protected org.apache.axis.client.Call createCall() throws java.rmi.RemoteException {
+        try {
+            org.apache.axis.client.Call _call = super._createCall();
+            if (super.maintainSessionSet) {
+                _call.setMaintainSession(super.maintainSession);
+            }
+            if (super.cachedUsername != null) {
+                _call.setUsername(super.cachedUsername);
+            }
+            if (super.cachedPassword != null) {
+                _call.setPassword(super.cachedPassword);
+            }
+            if (super.cachedEndpoint != null) {
+                _call.setTargetEndpointAddress(super.cachedEndpoint);
+            }
+            if (super.cachedTimeout != null) {
+                _call.setTimeout(super.cachedTimeout);
+            }
+            if (super.cachedPortName != null) {
+                _call.setPortName(super.cachedPortName);
+            }
+            java.util.Enumeration keys = super.cachedProperties.keys();
+            while (keys.hasMoreElements()) {
+                String key = (String) keys.nextElement();
+                _call.setProperty(key, super.cachedProperties.get(key));
+            }
+            // All the type mapping information is registered
+            // when the first call is made.
+            // The type mapping information is actually registered in
+            // the TypeMappingRegistry of the service, which
+            // is the reason why registration is only needed for the first call.
+            synchronized (this) {
+                if (firstCall()) {
+                    // must set encoding style before registering serializers
+                    _call.setEncodingStyle(null);
+                    for (int i = 0; i < cachedSerFactories.size(); ++i) {
+                        Class cls = (Class) cachedSerClasses.get(i);
+                        javax.xml.namespace.QName qName =
+                                (javax.xml.namespace.QName) cachedSerQNames.get(i);
+                        Object x = cachedSerFactories.get(i);
+                        if (x instanceof Class) {
+                            Class sf = (Class)
+                                 cachedSerFactories.get(i);
+                            Class df = (Class)
+                                 cachedDeserFactories.get(i);
+                            _call.registerTypeMapping(cls, qName, sf, df, false);
+                        }
+                        else if (x instanceof javax.xml.rpc.encoding.SerializerFactory) {
+                            org.apache.axis.encoding.SerializerFactory sf = (org.apache.axis.encoding.SerializerFactory)
+                                 cachedSerFactories.get(i);
+                            org.apache.axis.encoding.DeserializerFactory df = (org.apache.axis.encoding.DeserializerFactory)
+                                 cachedDeserFactories.get(i);
+                            _call.registerTypeMapping(cls, qName, sf, df, false);
+                        }
+                    }
+                }
+            }
+            return _call;
+        }
+        catch (Throwable _t) {
+            throw new org.apache.axis.AxisFault("Failure trying to get the Call object", _t);
+        }
+    }
+
+    public Result createPortalPrice(PortalPriceParams[] params) throws java.rmi.RemoteException {
+        if (super.cachedEndpoint == null) {
+            throw new org.apache.axis.NoEndPointException();
+        }
+        org.apache.axis.client.Call _call = createCall();
+        _call.setOperation(_operations[0]);
+        _call.setUseSOAPAction(true);
+        _call.setSOAPActionURI("");
+        _call.setEncodingStyle(null);
+        _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
+        _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
+        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
+        _call.setOperationName(new javax.xml.namespace.QName("http://webservice.promotions.cos.rise.com/", "createPortalPrice"));
+
+        setRequestHeaders(_call);
+        setAttachments(_call);
+ try {        Object _resp = _call.invoke(new Object[] {params});
+
+        if (_resp instanceof java.rmi.RemoteException) {
+            throw (java.rmi.RemoteException)_resp;
+        }
+        else {
+            extractAttachments(_call);
+            try {
+                return (Result) _resp;
+            } catch (Exception _exception) {
+                return (Result) org.apache.axis.utils.JavaUtils.convert(_resp, Result.class);
+            }
+        }
+  } catch (org.apache.axis.AxisFault axisFaultException) {
+  throw axisFaultException;
+}
+    }
+
+}

+ 15 - 0
src/main/java/com/shulead/datasync/portalprice/PortalPriceWS.java

@@ -0,0 +1,15 @@
+package com.shulead.datasync.portalprice;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+/**
+ * @Classname PortalPriceWS
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/28 18:38
+ * @Created by liuxiangshun
+ */
+public interface PortalPriceWS extends Remote {
+    Result createPortalPrice(PortalPriceParams[] var1) throws RemoteException;
+}

+ 69 - 0
src/main/java/com/shulead/datasync/portalprice/PortalPriceWSProxy.java

@@ -0,0 +1,69 @@
+package com.shulead.datasync.portalprice;
+
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.Stub;
+import java.rmi.RemoteException;
+
+/**
+ * @Classname PortalPriceWSProxy
+ * @Description TODO
+ * @Version 1.0.0
+ * @Date 2024/4/28 18:35
+ * @Created by liuxiangshun
+ */
+public class PortalPriceWSProxy implements PortalPriceWS {
+    private String _endpoint = null;
+    private PortalPriceWS portalPriceWS = null;
+
+    public PortalPriceWSProxy() {
+        this._initPortalPriceWSProxy();
+    }
+
+    public PortalPriceWSProxy(String endpoint) {
+        this._endpoint = endpoint;
+        this._initPortalPriceWSProxy();
+    }
+
+    private void _initPortalPriceWSProxy() {
+        try {
+            this.portalPriceWS = (new PortalPriceLocator()).getPortalPriceWSImplPort();
+            if (this.portalPriceWS != null) {
+                if (this._endpoint != null) {
+                    ((Stub)this.portalPriceWS)._setProperty("javax.xml.rpc.service.endpoint.address", this._endpoint);
+                } else {
+                    this._endpoint = (String)((Stub)this.portalPriceWS)._getProperty("javax.xml.rpc.service.endpoint.address");
+                }
+            }
+        } catch (ServiceException var2) {
+        }
+
+    }
+
+    public String getEndpoint() {
+        return this._endpoint;
+    }
+
+    public void setEndpoint(String endpoint) {
+        this._endpoint = endpoint;
+        if (this.portalPriceWS != null) {
+            ((Stub)this.portalPriceWS)._setProperty("javax.xml.rpc.service.endpoint.address", this._endpoint);
+        }
+
+    }
+
+    public PortalPriceWS getPortalPriceWS() {
+        if (this.portalPriceWS == null) {
+            this._initPortalPriceWSProxy();
+        }
+
+        return this.portalPriceWS;
+    }
+
+    public Result createPortalPrice(PortalPriceParams[] params) throws RemoteException {
+        if (this.portalPriceWS == null) {
+            this._initPortalPriceWSProxy();
+        }
+
+        return this.portalPriceWS.createPortalPrice(params);
+    }
+}

File diff suppressed because it is too large
+ 198 - 0
src/main/java/com/shulead/datasync/portalprice/Result.java


+ 0 - 0
src/main/java/com/shulead/datasync/task/InitDataTask.java


Some files were not shown because too many files changed in this diff