Kaynağa Gözat

Merge remote-tracking branch 'origin/test' into test

hxl13994548489 1 yıl önce
ebeveyn
işleme
1c04895323
100 değiştirilmiş dosya ile 4699 ekleme ve 1157 silme
  1. 264 416
      insagent.iws
  2. 12 0
      pom.xml
  3. 61 19
      sql/Online.sql
  4. BIN
      sql/jar/crypto-kit-1.1.0-1.0.0.jar
  5. 3 0
      sql/jar/reeadmind
  6. BIN
      sql/jar/sunecm-url-encode-1.jar
  7. 6 2
      src/main/java/com/ydtech/components/TokenInterceptor.java
  8. 19 13
      src/main/java/com/ydtech/config/MvcConfig.java
  9. 16 21
      src/main/java/com/ydtech/config/properties/WechatOpenProperties.java
  10. 15 0
      src/main/java/com/ydtech/config/properties/YangGuangApiConfigurationProperties.java
  11. 17 0
      src/main/java/com/ydtech/config/scheduledConfig/ScheduledConfig.java
  12. 5 5
      src/main/java/com/ydtech/constants/InsuranceEnum.java
  13. 1 0
      src/main/java/com/ydtech/constants/InsuranceImageEnum.java
  14. 18 0
      src/main/java/com/ydtech/constants/enums/WechatOpenSystem.java
  15. 7 0
      src/main/java/com/ydtech/constants/enums/dict/insurance/TrafficManagementVehicleType.java
  16. 7 1
      src/main/java/com/ydtech/modules/admin/constants/SwitchConfig.java
  17. 26 0
      src/main/java/com/ydtech/modules/admin/constants/UserAgentStatus.java
  18. 2 2
      src/main/java/com/ydtech/modules/admin/constants/UserWorkStatus.java
  19. 32 4
      src/main/java/com/ydtech/modules/admin/controller/APPPartnerController.java
  20. 9 0
      src/main/java/com/ydtech/modules/admin/controller/AppCustomerManagementController.java
  21. 2 1
      src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java
  22. 3 3
      src/main/java/com/ydtech/modules/admin/controller/SysPartnerController.java
  23. 113 0
      src/main/java/com/ydtech/modules/admin/controller/SysUserAgentController.java
  24. 116 161
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  25. 36 17
      src/main/java/com/ydtech/modules/admin/controller/websocket/PCSocketServer.java
  26. 78 0
      src/main/java/com/ydtech/modules/admin/controller/websocket/SearchHttpAK.java
  27. 6 4
      src/main/java/com/ydtech/modules/admin/dao/SysAgencyLeaderMapper.java
  28. 8 0
      src/main/java/com/ydtech/modules/admin/dao/SysPartnerMapper.java
  29. 18 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserAgentTrackMapper.java
  30. 16 1
      src/main/java/com/ydtech/modules/admin/dao/SysUserBankCardMapper.java
  31. 42 30
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  32. 17 19
      src/main/java/com/ydtech/modules/admin/model/SysUser.java
  33. 45 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthDto.java
  34. 17 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthResultDto.java
  35. 30 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentSubmitDto.java
  36. 40 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentUserNewDto.java
  37. 44 0
      src/main/java/com/ydtech/modules/admin/model/dto/LocationResponse.java
  38. 5 0
      src/main/java/com/ydtech/modules/admin/model/dto/PartnerCountDto.java
  39. 9 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamDto.java
  40. 9 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamInfoDto.java
  41. 41 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamStaticDto.java
  42. 5 0
      src/main/java/com/ydtech/modules/admin/model/po/SysAmountAuditingEntity.java
  43. 119 0
      src/main/java/com/ydtech/modules/admin/model/po/SysUserAgentTrack.java
  44. 6 0
      src/main/java/com/ydtech/modules/admin/model/po/SysUserBankCard.java
  45. 3 0
      src/main/java/com/ydtech/modules/admin/model/vo/AAPLoginVo.java
  46. 1 1
      src/main/java/com/ydtech/modules/admin/model/vo/AppCustomerManagementQueryVo.java
  47. 5 0
      src/main/java/com/ydtech/modules/admin/model/vo/LevelPartnerVo.java
  48. 1 1
      src/main/java/com/ydtech/modules/admin/model/vo/PartnerCountVo.java
  49. 0 2
      src/main/java/com/ydtech/modules/admin/model/vo/SysUser2Vo.java
  50. 31 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysUserAgentVo.java
  51. 5 1
      src/main/java/com/ydtech/modules/admin/service/AppCustomerManagementService.java
  52. 4 1
      src/main/java/com/ydtech/modules/admin/service/SysPartnerService.java
  53. 10 0
      src/main/java/com/ydtech/modules/admin/service/SysSwitchConfigService.java
  54. 20 0
      src/main/java/com/ydtech/modules/admin/service/SysUserAgentTrackService.java
  55. 44 1
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  56. 210 5
      src/main/java/com/ydtech/modules/admin/service/impl/AppCustomerManagementImpl.java
  57. 20 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysAmountAuditingServiceImpl.java
  58. 234 92
      src/main/java/com/ydtech/modules/admin/service/impl/SysPartnerServiceImpl.java
  59. 1 1
      src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java
  60. 20 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysSwitchConfigServiceImpl.java
  61. 24 4
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserAccountServiceImpl.java
  62. 39 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserAgentTrackServiceImpl.java
  63. 404 27
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  64. 6 3
      src/main/java/com/ydtech/modules/admin/service/impl/WechatServiceImpl.java
  65. 59 0
      src/main/java/com/ydtech/modules/admin/utils/UserAgentTrackUtils.java
  66. 40 4
      src/main/java/com/ydtech/modules/esm/dao/EsmUserReferrerMapper.java
  67. 5 5
      src/main/java/com/ydtech/modules/esm/model/vo/EsmUserCountVO.java
  68. 14 1
      src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java
  69. 53 3
      src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java
  70. 1 2
      src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java
  71. 154 0
      src/main/java/com/ydtech/modules/fnc/controller/contract/ContractController.java
  72. 46 0
      src/main/java/com/ydtech/modules/fnc/controller/contract/ControllerTimer.java
  73. 19 0
      src/main/java/com/ydtech/modules/fnc/dao/contract/ContractFileMapper.java
  74. 50 0
      src/main/java/com/ydtech/modules/fnc/dao/contract/ContractMapper.java
  75. 36 0
      src/main/java/com/ydtech/modules/fnc/dao/contract/ContractSupplierMapper.java
  76. 126 0
      src/main/java/com/ydtech/modules/fnc/dto/contract/ContractDto.java
  77. 33 0
      src/main/java/com/ydtech/modules/fnc/dto/contract/ContractFileDto.java
  78. 38 0
      src/main/java/com/ydtech/modules/fnc/dto/contract/ContractSupplierDto.java
  79. 177 0
      src/main/java/com/ydtech/modules/fnc/entity/ContractEntity.java
  80. 75 0
      src/main/java/com/ydtech/modules/fnc/entity/ContractFileEntity.java
  81. 47 0
      src/main/java/com/ydtech/modules/fnc/entity/ContractSupplierEntity.java
  82. 0 2
      src/main/java/com/ydtech/modules/fnc/service/InsFeeAuditService.java
  83. 20 0
      src/main/java/com/ydtech/modules/fnc/service/contract/ContractFileService.java
  84. 79 0
      src/main/java/com/ydtech/modules/fnc/service/contract/ContractService.java
  85. 30 0
      src/main/java/com/ydtech/modules/fnc/service/contract/ContractSupplierService.java
  86. 44 0
      src/main/java/com/ydtech/modules/fnc/service/contract/impl/ContractFileServiceImpl.java
  87. 91 0
      src/main/java/com/ydtech/modules/fnc/service/contract/impl/ContractSupplierServiceImpl.java
  88. 486 0
      src/main/java/com/ydtech/modules/fnc/service/contract/impl/contractServiceImpl.java
  89. 0 189
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  90. 116 0
      src/main/java/com/ydtech/modules/fnc/vo/ContractVo.java
  91. 18 0
      src/main/java/com/ydtech/modules/inv/controller/InvAccountController.java
  92. 7 0
      src/main/java/com/ydtech/modules/inv/model/InvAccount.java
  93. 9 0
      src/main/java/com/ydtech/modules/inv/service/InvAccountService.java
  94. 5 0
      src/main/java/com/ydtech/modules/inv/service/impl/InvAccountServiceImpl.java
  95. 183 93
      src/main/java/com/ydtech/modules/inv/utils/CheckInsPlyComeUtils.java
  96. 48 0
      src/main/java/com/ydtech/modules/lg/PushLgLogUtils.java
  97. 30 0
      src/main/java/com/ydtech/modules/lg/PushRetry.java
  98. 70 0
      src/main/java/com/ydtech/modules/lg/SendUtils.java
  99. 7 0
      src/main/java/com/ydtech/modules/lg/dao/PushLgEntityMapper.java
  100. 56 0
      src/main/java/com/ydtech/modules/lg/model/PushLgEntity.java

+ 264 - 416
insagent.iws

@@ -1,418 +1,266 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-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
-
-  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.
--->
-<project version="4" relativePaths="false"> 
-  <component name="LvcsProjectConfiguration"> 
-    <option name="ADD_LABEL_ON_PROJECT_OPEN" value="true"/>  
-    <option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true"/>  
-    <option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true"/>  
-    <option name="ADD_LABEL_ON_PROJECT_MAKE" value="true"/>  
-    <option name="ADD_LABEL_ON_RUNNING" value="true"/>  
-    <option name="ADD_LABEL_ON_DEBUGGING" value="true"/>  
-    <option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true"/>  
-    <option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true"/> 
-  </component>  
-  <component name="PropertiesComponent"> 
-    <property name="MemberChooser.copyJavadoc" value="false"/>  
-    <property name="GoToClass.includeLibraries" value="false"/>  
-    <property name="MemberChooser.showClasses" value="true"/>  
-    <property name="MemberChooser.sorted" value="false"/>  
-    <property name="GoToFile.includeJavaFiles" value="false"/>  
-    <property name="GoToClass.toSaveIncludeLibraries" value="false"/> 
-  </component>  
-  <component name="ToolWindowManager"> 
-    <frame x="-4" y="-4" width="1032" height="746" extended-state="6"/>  
-    <editor active="false"/>  
-    <layout> 
-      <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7"/>  
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0"/>  
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1"/>  
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6"/>  
-      <window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2"/>  
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4"/>  
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0"/>  
-      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0"/>  
-      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3"/>  
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5"/> 
-    </layout> 
-  </component>  
-  <component name="ErrorTreeViewConfiguration"> 
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
-    <option name="HIDE_WARNINGS" value="false"/> 
-  </component>  
-  <component name="StructureViewFactory"> 
-    <option name="SORT_MODE" value="0"/>  
-    <option name="GROUP_INHERITED" value="true"/>  
-    <option name="AUTOSCROLL_MODE" value="true"/>  
-    <option name="SHOW_FIELDS" value="true"/>  
-    <option name="AUTOSCROLL_FROM_SOURCE" value="false"/>  
-    <option name="GROUP_GETTERS_AND_SETTERS" value="true"/>  
-    <option name="SHOW_INHERITED" value="false"/>  
-    <option name="HIDE_NOT_PUBLIC" value="false"/> 
-  </component>  
-  <component name="ProjectViewSettings"> 
-    <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5"/>  
-    <view id="ProjectPane"> 
-      <expanded_node type="directory" url="file://$PROJECT_DIR$"/> 
-    </view>  
-    <view id="SourcepathPane"/>  
-    <view id="ClasspathPane"/> 
-  </component>  
-  <component name="Commander"> 
-    <leftPanel view="Project"/>  
-    <rightPanel view="Project"/>  
-    <splitter proportion="0.5"/> 
-  </component>  
-  <component name="AspectsView"/>  
-  <component name="SelectInManager"/>  
-  <component name="HierarchyBrowserManager"> 
-    <option name="SHOW_PACKAGES" value="false"/>  
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
-    <option name="SORT_ALPHABETICALLY" value="false"/> 
-  </component>  
-  <component name="TodoView" selected-index="0"> 
-    <todo-panel id="selected-file"> 
-      <are-packages-shown value="false"/>  
-      <flatten-packages value="false"/>  
-      <is-autoscroll-to-source value="true"/> 
-    </todo-panel>  
-    <todo-panel id="all"> 
-      <are-packages-shown value="true"/>  
-      <flatten-packages value="false"/>  
-      <is-autoscroll-to-source value="true"/> 
-    </todo-panel> 
-  </component>  
-  <component name="editorManager"/>  
-  <component name="editorHistoryManager"/>  
-  <component name="DaemonCodeAnalyzer"> 
-    <disable_hints/> 
-  </component>  
-  <component name="InspectionManager"> 
-    <option name="AUTOSCROLL_TO_SOURCE" value="false"/>  
-    <option name="SPLITTER_PROPORTION" value="0.5"/>  
-    <profile name="Default"/> 
-  </component>  
-  <component name="BookmarkManager"/>  
-  <component name="DebuggerManager"> 
-    <line_breakpoints/>  
-    <exception_breakpoints> 
-      <breakpoint_any> 
-        <option name="NOTIFY_CAUGHT" value="true"/>  
-        <option name="NOTIFY_UNCAUGHT" value="true"/>  
-        <option name="ENABLED" value="false"/>  
-        <option name="SUSPEND_VM" value="true"/>  
-        <option name="COUNT_FILTER_ENABLED" value="false"/>  
-        <option name="COUNT_FILTER" value="0"/>  
-        <option name="CONDITION_ENABLED" value="false"/>  
-        <option name="CONDITION"/>  
-        <option name="LOG_ENABLED" value="false"/>  
-        <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
-        <option name="LOG_MESSAGE"/>  
-        <option name="CLASS_FILTERS_ENABLED" value="false"/>  
-        <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
-        <option name="SUSPEND_POLICY" value="SuspendAll"/> 
-      </breakpoint_any> 
-    </exception_breakpoints>  
-    <field_breakpoints/>  
-    <method_breakpoints/> 
-  </component>  
-  <component name="DebuggerSettings"> 
-    <option name="TRACING_FILTERS_ENABLED" value="true"/>  
-    <option name="TOSTRING_CLASSES_ENABLED" value="false"/>  
-    <option name="VALUE_LOOKUP_DELAY" value="700"/>  
-    <option name="DEBUGGER_TRANSPORT" value="0"/>  
-    <option name="FORCE_CLASSIC_VM" value="true"/>  
-    <option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false"/>  
-    <option name="SKIP_SYNTHETIC_METHODS" value="true"/>  
-    <option name="SKIP_CONSTRUCTORS" value="false"/>  
-    <option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread"/>  
-    <default_breakpoint_settings> 
-      <option name="NOTIFY_CAUGHT" value="true"/>  
-      <option name="NOTIFY_UNCAUGHT" value="true"/>  
-      <option name="WATCH_MODIFICATION" value="true"/>  
-      <option name="WATCH_ACCESS" value="true"/>  
-      <option name="WATCH_ENTRY" value="true"/>  
-      <option name="WATCH_EXIT" value="true"/>  
-      <option name="ENABLED" value="true"/>  
-      <option name="SUSPEND_VM" value="true"/>  
-      <option name="COUNT_FILTER_ENABLED" value="false"/>  
-      <option name="COUNT_FILTER" value="0"/>  
-      <option name="CONDITION_ENABLED" value="false"/>  
-      <option name="CONDITION"/>  
-      <option name="LOG_ENABLED" value="false"/>  
-      <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
-      <option name="LOG_MESSAGE"/>  
-      <option name="CLASS_FILTERS_ENABLED" value="false"/>  
-      <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
-      <option name="SUSPEND_POLICY" value="SuspendAll"/> 
-    </default_breakpoint_settings>  
-    <filter> 
-      <option name="PATTERN" value="com.sun.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="java.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="javax.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="org.omg.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="sun.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="junit.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter> 
-  </component>  
-  <component name="CompilerWorkspaceConfiguration"> 
-    <option name="COMPILE_IN_BACKGROUND" value="false"/>  
-    <option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true"/> 
-  </component>  
-  <component name="RunManager"> 
-    <activeType name="Application"/>  
-    <configuration selected="false" default="true" type="Applet" factoryName="Applet"> 
-      <module name=""/>  
-      <option name="MAIN_CLASS_NAME"/>  
-      <option name="HTML_FILE_NAME"/>  
-      <option name="HTML_USED" value="false"/>  
-      <option name="WIDTH" value="400"/>  
-      <option name="HEIGHT" value="300"/>  
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/>  
-      <option name="VM_PARAMETERS"/> 
-    </configuration>  
-    <configuration selected="false" default="true" type="Remote" factoryName="Remote"> 
-      <option name="USE_SOCKET_TRANSPORT" value="true"/>  
-      <option name="SERVER_MODE" value="false"/>  
-      <option name="SHMEM_ADDRESS" value="javadebug"/>  
-      <option name="HOST" value="localhost"/>  
-      <option name="PORT" value="5005"/> 
-    </configuration>  
-    <configuration selected="false" default="true" type="Application" factoryName="Application"> 
-      <option name="MAIN_CLASS_NAME"/>  
-      <option name="VM_PARAMETERS"/>  
-      <option name="PROGRAM_PARAMETERS"/>  
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
-      <module name=""/> 
-    </configuration>  
-    <configuration selected="false" default="true" type="JUnit" factoryName="JUnit"> 
-      <module name=""/>  
-      <option name="PACKAGE_NAME"/>  
-      <option name="MAIN_CLASS_NAME"/>  
-      <option name="METHOD_NAME"/>  
-      <option name="TEST_OBJECT" value="class"/>  
-      <option name="VM_PARAMETERS"/>  
-      <option name="PARAMETERS"/>  
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
-      <option name="ADDITIONAL_CLASS_PATH"/>  
-      <option name="TEST_SEARCH_SCOPE"> 
-        <value defaultName="wholeProject"/> 
-      </option> 
-    </configuration> 
-  </component>  
-  <component name="VcsManagerConfiguration"> 
-    <option name="ACTIVE_VCS_NAME" value=""/>  
-    <option name="STATE" value="0"/> 
-  </component>  
-  <component name="VssConfiguration"> 
-    <CheckoutOptions> 
-      <option name="COMMENT" value=""/>  
-      <option name="DO_NOT_GET_LATEST_VERSION" value="false"/>  
-      <option name="REPLACE_WRITABLE" value="false"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </CheckoutOptions>  
-    <CheckinOptions> 
-      <option name="COMMENT" value=""/>  
-      <option name="KEEP_CHECKED_OUT" value="false"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </CheckinOptions>  
-    <AddOptions> 
-      <option name="COMMENT" value=""/>  
-      <option name="STORE_ONLY_LATEST_VERSION" value="false"/>  
-      <option name="CHECK_OUT_IMMEDIATELY" value="false"/>  
-      <option name="FILE_TYPE" value="0"/> 
-    </AddOptions>  
-    <UndocheckoutOptions> 
-      <option name="MAKE_WRITABLE" value="false"/>  
-      <option name="REPLACE_LOCAL_COPY" value="0"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </UndocheckoutOptions>  
-    <DiffOptions> 
-      <option name="IGNORE_WHITE_SPACE" value="false"/>  
-      <option name="IGNORE_CASE" value="false"/> 
-    </DiffOptions>  
-    <GetOptions> 
-      <option name="REPLACE_WRITABLE" value="0"/>  
-      <option name="MAKE_WRITABLE" value="false"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </GetOptions>  
-    <option name="CLIENT_PATH" value=""/>  
-    <option name="SRCSAFEINI_PATH" value=""/>  
-    <option name="USER_NAME" value=""/>  
-    <option name="PWD" value=""/>  
-    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
-    <option name="SHOW_ADD_OPTIONS" value="true"/>  
-    <option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true"/>  
-    <option name="SHOW_DIFF_OPTIONS" value="true"/>  
-    <option name="SHOW_GET_OPTIONS" value="true"/>  
-    <option name="USE_EXTERNAL_DIFF" value="false"/>  
-    <option name="EXTERNAL_DIFF_PATH" value=""/>  
-    <option name="REUSE_LAST_COMMENT" value="false"/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
-  </component>  
-  <component name="CheckinPanelState"/>  
-  <component name="WebViewSettings"> 
-    <webview flattenPackages="false" showMembers="false" autoscrollToSource="false"/> 
-  </component>  
-  <component name="EjbViewSettings"> 
-    <EjbView showMembers="false" autoscrollToSource="false"/> 
-  </component>  
-  <component name="AppServerRunManager"/>  
-  <component name="StarteamConfiguration"> 
-    <option name="SERVER" value=""/>  
-    <option name="PORT" value="49201"/>  
-    <option name="USER" value=""/>  
-    <option name="PASSWORD" value=""/>  
-    <option name="PROJECT" value=""/>  
-    <option name="VIEW" value=""/>  
-    <option name="ALTERNATIVE_WORKING_PATH" value=""/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
-  </component>  
-  <component name="Cvs2Configuration"> 
-    <option name="ON_FILE_ADDING" value="0"/>  
-    <option name="ON_FILE_REMOVING" value="0"/>  
-    <option name="PRUNE_EMPTY_DIRECTORIES" value="true"/>  
-    <option name="SHOW_UPDATE_OPTIONS" value="true"/>  
-    <option name="SHOW_ADD_OPTIONS" value="true"/>  
-    <option name="SHOW_REMOVE_OPTIONS" value="true"/>  
-    <option name="MERGING_MODE" value="0"/>  
-    <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD"/>  
-    <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD"/>  
-    <option name="RESET_STICKY" value="false"/>  
-    <option name="CREATE_NEW_DIRECTORIES" value="true"/>  
-    <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv"/>  
-    <option name="PROCESS_UNKNOWN_FILES" value="false"/>  
-    <option name="PROCESS_DELETED_FILES" value="false"/>  
-    <option name="SHOW_EDIT_DIALOG" value="true"/>  
-    <option name="RESERVED_EDIT" value="false"/>  
-    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6"/>  
-    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
-    <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS"> 
-      <value> 
-        <option name="BRANCH" value=""/>  
-        <option name="DATE" value=""/>  
-        <option name="USE_BRANCH" value="false"/>  
-        <option name="USE_DATE" value="false"/> 
-      </value> 
-    </option>  
-    <option name="UPDATE_DATE_OR_REVISION_SETTINGS"> 
-      <value> 
-        <option name="BRANCH" value=""/>  
-        <option name="DATE" value=""/>  
-        <option name="USE_BRANCH" value="false"/>  
-        <option name="USE_DATE" value="false"/> 
-      </value> 
-    </option>  
-    <option name="SHOW_CHANGES_REVISION_SETTINGS"> 
-      <value> 
-        <option name="BRANCH" value=""/>  
-        <option name="DATE" value=""/>  
-        <option name="USE_BRANCH" value="false"/>  
-        <option name="USE_DATE" value="false"/> 
-      </value> 
-    </option>  
-    <option name="SHOW_OUTPUT" value="false"/>  
-    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false"/>  
-    <option name="UPDATE_GROUP_BY_PACKAGES" value="false"/>  
-    <option name="ADD_WATCH_INDEX" value="0"/>  
-    <option name="REMOVE_WATCH_INDEX" value="0"/>  
-    <option name="UPDATE_KEYWORD_SUBSTITUTION"/>  
-    <option name="MAKE_NEW_FILES_READONLY" value="false"/>  
-    <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0"/>  
-    <option name="TAG_AFTER_FILE_COMMIT" value="false"/>  
-    <option name="TAG_AFTER_FILE_COMMIT_NAME" value=""/>  
-    <option name="TAG_AFTER_PROJECT_COMMIT" value="false"/>  
-    <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value=""/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="FORCE_NON_EMPTY_COMMENT" value="false"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
-  </component>  
-  <component name="CvsTabbedWindow"/>  
-  <component name="SvnConfiguration"> 
-    <option name="USER" value=""/>  
-    <option name="PASSWORD" value=""/>  
-    <option name="AUTO_ADD_FILES" value="0"/>  
-    <option name="AUTO_DEL_FILES" value="0"/> 
-  </component>  
-  <component name="PerforceConfiguration"> 
-    <option name="PORT" value="magic:1666"/>  
-    <option name="USER" value=""/>  
-    <option name="PASSWORD" value=""/>  
-    <option name="CLIENT" value=""/>  
-    <option name="TRACE" value="false"/>  
-    <option name="PERFORCE_STATUS" value="true"/>  
-    <option name="CHANGELIST_OPTION" value="false"/>  
-    <option name="SYSTEMROOT" value=""/>  
-    <option name="P4_EXECUTABLE" value="p4"/>  
-    <option name="SHOW_BRANCH_HISTORY" value="false"/>  
-    <option name="GENERATE_COMMENT" value="false"/>  
-    <option name="SYNC_OPTION" value="Sync"/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="FORCE_NON_EMPTY_COMMENT" value="true"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
-  </component> 
+<project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="53f4ce76-8f52-4619-adfd-07826e7111a7" name="Changes" comment="代理人app开发">
+      <change beforePath="$PROJECT_DIR$/insagent.iws" beforeDir="false" afterPath="$PROJECT_DIR$/insagent.iws" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/controller/ChengTaiOrderApiController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/controller/ChengTaiOrderApiController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/controller/QuoteController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/controller/QuoteController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/entity/api/chengtai/request/InsurePremiumRequest.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/entity/api/chengtai/request/InsurePremiumRequest.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/entity/api/chengtai/response/InsurePremiumResponse.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/entity/api/chengtai/response/InsurePremiumResponse.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/entity/vo/ct/CtQuoteAccidentVo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/service/ChengTaiOrderApiService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/service/ChengTaiOrderApiService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/service/impl/ChengTaiOrderApiServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/service/impl/ChengTaiOrderApiServiceImpl.java" afterDir="false" />
+    </list>
+    <list id="bc6cb0c2-9167-463c-ac43-267792d14a4c" name="New changelist" comment="New changelist">
+      <change afterPath="$PROJECT_DIR$/qodana.yaml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/insagent.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/insagent.ipr" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/insagent.iws" beforeDir="false" afterPath="$PROJECT_DIR$/insagent.iws" afterDir="false" />
+    </list>
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="KubernetesApiPersistence">{}</component>
+  <component name="KubernetesApiProvider">{
+  &quot;isMigrated&quot;: true
+}</component>
+  <component name="LineStatusTrackerManager">
+    <file path="$PROJECT_DIR$/insagent.iws">
+      <ranges>
+        <range start1="1" end1="417" start2="1" end2="265" changelist="53f4ce76-8f52-4619-adfd-07826e7111a7" />
+        <range start1="418" end1="419" start2="266" end2="266" changelist="bc6cb0c2-9167-463c-ac43-267792d14a4c" />
+      </ranges>
+    </file>
+  </component>
+  <component name="MavenImportPreferences">
+    <option name="generalSettings">
+      <MavenGeneralSettings>
+        <option name="customMavenHome" value="D:\apache-maven-3.9.8" />
+        <option name="localRepository" value="D:\apache-maven-3.9.8\repo" />
+        <option name="mavenHomeTypeForPersistence" value="CUSTOM" />
+        <option name="userSettingsFile" value="D:\apache-maven-3.9.8\conf\settings.xml" />
+      </MavenGeneralSettings>
+    </option>
+  </component>
+  <component name="ProblemsViewState">
+    <option name="selectedTabId" value="CurrentFile" />
+  </component>
+  <component name="ProjectColorInfo">{
+  &quot;associatedIndex&quot;: 2
+}</component>
+  <component name="ProjectId" id="2oXovegNMCtkb5nu9fEuukn588V" />
+  <component name="ProjectViewState">
+    <option name="hideEmptyMiddlePackages" value="true" />
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "Application.SpringInsApplication.executor": "Debug",
+    "Maven.SpringInsApplication.executor": "Debug",
+    "Maven.insagent [clean,install,--non-recursive].executor": "Run",
+    "Maven.insagent [clean].executor": "Run",
+    "Maven.insagent [install,--non-recursive].executor": "Run",
+    "Maven.insagent [install].executor": "Run",
+    "Maven.insagent [package].executor": "Run",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "git-widget-placeholder": "test",
+    "kotlin-language-version-configured": "true",
+    "last_opened_file_path": "D:/ideaiu_project/dxService",
+    "node.js.detected.package.eslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "node.js.selected.package.tslint": "(autodetect)",
+    "nodejs_package_manager_path": "npm",
+    "project.structure.last.edited": "Global Libraries",
+    "project.structure.proportion": "0.15",
+    "project.structure.side.proportion": "0.41479635",
+    "settings.editor.selected.configurable": "project.propCompiler",
+    "vue.rearranger.settings.migration": "true"
+  }
+}]]></component>
+  <component name="ReactorSettings">
+    <option name="notificationShown" value="true" />
+  </component>
+  <component name="RunManager">
+    <configuration name="SpringInsApplication" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.ydtech.SpringInsApplication" />
+      <module name="insagent" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.ydtech.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="JetRunConfigurationType">
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType">
+      <option name="filePath" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <recent_temporary>
+      <list>
+        <item itemvalue="Application.SpringInsApplication" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SharedIndexes">
+    <attachedChunks>
+      <set>
+        <option value="bundled-jdk-9823dce3aa75-b114ca120d71-intellij.indexing.shared.core-IU-242.20224.387" />
+        <option value="bundled-js-predefined-d6986cc7102b-410509235cf1-JavaScript-IU-242.20224.387" />
+      </set>
+    </attachedChunks>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="53f4ce76-8f52-4619-adfd-07826e7111a7" name="Changes" comment="" />
+      <changelist id="bc6cb0c2-9167-463c-ac43-267792d14a4c" name="New changelist" comment="" />
+      <created>1731025512826</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1731025512826</updated>
+      <workItem from="1731025513988" duration="2700000" />
+      <workItem from="1731028251317" duration="37000" />
+      <workItem from="1731028294472" duration="3000" />
+      <workItem from="1731028308592" duration="371000" />
+      <workItem from="1731028689773" duration="136000" />
+      <workItem from="1731028834493" duration="17128000" />
+      <workItem from="1731284394559" duration="28432000" />
+      <workItem from="1731371502249" duration="24475000" />
+      <workItem from="1731457864520" duration="15321000" />
+      <workItem from="1731556015076" duration="8482000" />
+      <workItem from="1731630850533" duration="13069000" />
+      <workItem from="1731888634067" duration="15457000" />
+    </task>
+    <task id="LOCAL-00001" summary="代理人app开发">
+      <option name="closed" value="true" />
+      <created>1731458148781</created>
+      <option name="number" value="00001" />
+      <option name="presentableId" value="LOCAL-00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1731458148781</updated>
+    </task>
+    <option name="localTasksCounter" value="2" />
+    <servers />
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="3" />
+  </component>
+  <component name="UnknownFeatures">
+    <option featureType="dependencySupport" implementationName="java:org.springframework:spring-core" />
+    <option featureType="dependencySupport" implementationName="java:jakarta.validation:jakarta.validation-api" />
+    <option featureType="dependencySupport" implementationName="java:org.seleniumhq.selenium:selenium-java" />
+    <option featureType="dependencySupport" implementationName="java:io.projectreactor:reactor-core" />
+    <option featureType="dependencySupport" implementationName="java:org.springframework.data:spring-data-commons" />
+    <option featureType="dependencySupport" implementationName="executable:kubectl" />
+    <option featureType="dependencySupport" implementationName="java:org.hibernate.validator:hibernate-validator" />
+    <option featureType="dependencySupport" implementationName="java:javax.validation:validation-api" />
+    <option featureType="dependencySupport" implementationName="java:org.springframework:spring-webmvc" />
+    <option featureType="dependencySupport" implementationName="java:org.projectlombok:lombok" />
+    <option featureType="dependencySupport" implementationName="java:org.springframework:spring-websocket" />
+    <option featureType="dependencySupport" implementationName="executable:docker" />
+    <option featureType="dependencySupport" implementationName="java:io.reactivex.rxjava3:rxjava" />
+    <option featureType="dependencySupport" implementationName="java:org.thymeleaf:thymeleaf" />
+    <option featureType="dependencySupport" implementationName="java:org.springframework:spring-messaging" />
+    <option featureType="dependencySupport" implementationName="java:org.springframework.boot:spring-boot" />
+  </component>
+  <component name="Vcs.Log.History.Properties">
+    <option name="COLUMN_ID_ORDER">
+      <list>
+        <option value="Default.Root" />
+        <option value="Default.Author" />
+        <option value="Default.Date" />
+        <option value="Default.Subject" />
+        <option value="GitHub.CommitStatus" />
+      </list>
+    </option>
+  </component>
+  <component name="Vcs.Log.Tabs.Properties">
+    <option name="RECENT_FILTERS">
+      <map>
+        <entry key="User">
+          <value>
+            <list>
+              <RecentGroup>
+                <option name="FILTER_VALUES">
+                  <option value="Qchen" />
+                </option>
+              </RecentGroup>
+              <RecentGroup>
+                <option name="FILTER_VALUES">
+                  <option value="*" />
+                </option>
+              </RecentGroup>
+            </list>
+          </value>
+        </entry>
+      </map>
+    </option>
+    <option name="TAB_STATES">
+      <map>
+        <entry key="MAIN">
+          <value>
+            <State />
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+  <component name="VcsManagerConfiguration">
+    <MESSAGE value="代理人app开发" />
+    <MESSAGE value="New changelist" />
+    <option name="LAST_COMMIT_MESSAGE" value="New changelist" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java</url>
+          <line>346</line>
+          <option name="timeStamp" value="1" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java</url>
+          <line>356</line>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/ydtech/modules/admin/components/UnionPayRequestApiComponent.java</url>
+          <line>283</line>
+          <option name="timeStamp" value="3" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/ydtech/modules/admin/components/UnionPayRequestApiComponent.java</url>
+          <line>189</line>
+          <option name="timeStamp" value="5" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/ydtech/modules/admin/components/UnionPayRequestApiComponent.java</url>
+          <line>187</line>
+          <option name="timeStamp" value="6" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/ydtech/modules/order/controller/QuoteController.java</url>
+          <line>228</line>
+          <option name="timeStamp" value="14" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
+  </component>
 </project>

+ 12 - 0
pom.xml

@@ -104,6 +104,12 @@
             <version>3.2.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.belerweb</groupId>
+            <artifactId>pinyin4j</artifactId>
+            <version>2.5.0</version>
+        </dependency>
+
         <!-- Druid 依赖 log4j包 -->
         <dependency>
             <groupId>log4j</groupId>
@@ -667,6 +673,12 @@
 
 
 
+        <dependency>
+            <groupId>com.sunecm</groupId>
+            <artifactId>sunecm-url-encode-1</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
     </dependencies>
 
 

+ 61 - 19
sql/Online.sql

@@ -80,6 +80,39 @@ ALTER TABLE `agent`.`sys_user`
 -- 2024.11.1 --
 ALTER TABLE `agent`.`sys_user` ADD COLUMN `identity_time` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证有效期' AFTER `identity`;
 
+
+
+-- 2024.11.4  helixiao --
+
+ALTER TABLE `agent`.`sys_premium_details` ADD COLUMN `licenseno` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '车牌号';
+ALTER TABLE `agent`.`sys_premium_details` ADD COLUMN `source` tinyint DEFAULT NULL COMMENT '费用来源(1,2,3,4,5级)';
+
+-- 2024.11.11 dongxin --
+CREATE TABLE `sys_user_agent_track`  (
+                                         `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
+                                         `user_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户id',
+                                         `status` tinyint NULL DEFAULT NULL COMMENT '状态  0.注册 1.认证成功 2.认证失败 3.审核成功 4.审核失败',
+                                         `approve_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '审核人Id',
+                                         `approve_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '审核人',
+                                         `approve_mess` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '审核认证信息',
+                                         `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+                                         `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                         PRIMARY KEY (`id`) USING BTREE,
+                                         INDEX `idx_sys_user_track_user_id`(`user_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 571 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '个代用户认证审核轨迹表' ROW_FORMAT = DYNAMIC;
+
+
+
+
+
+-- 2024-11-15 协议修改时间格式--
+ALTER TABLE `agent`.`ptl_agreement`
+MODIFY COLUMN `start_date` datetime NOT NULL COMMENT '协议起期' AFTER `insurance_company_id`,
+MODIFY COLUMN `end_date` datetime NOT NULL COMMENT '协议止期' AFTER `start_date`;
+
+
+
+-- 2024-11-16 添加提现与银联api表 --
 CREATE TABLE `pay_payment_notice` (
                                       `id` bigint NOT NULL,
                                       `type` varchar(255) DEFAULT NULL COMMENT '通知类型',
@@ -93,22 +126,21 @@ CREATE TABLE `pay_payment_notice` (
                                       `create_time` datetime DEFAULT NULL COMMENT '创建时间',
                                       PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
 CREATE TABLE `pay_sign_callback` (
-                                     `id` int NOT NULL,
+                                     `id` bigint NOT NULL,
                                      `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '默认值:PRESIGN',
                                      `org_req_id` bigint DEFAULT NULL COMMENT '最后一次请求',
                                      `name` varchar(255) DEFAULT NULL,
                                      `mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
-                                     `id_card_no` varchar(255) DEFAULT NULL,
-                                     `bank_card_no` varchar(255) DEFAULT NULL,
-                                     `bank_name` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+                                     `id_card_no` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '身份证号',
+                                     `bank_card_no` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '银行卡号',
+                                     `bank_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '银行名称',
                                      `auth_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '认证状态:0-未实名1-已实名',
                                      `sign_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '签约状态:0-未签约1-已签约',
                                      `bind_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT ' 绑卡状态:0-未绑定1-已绑定',
+                                     `create_time` datetime DEFAULT NULL COMMENT '创建时间',
                                      PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户签约回调';
-
 CREATE TABLE `pay_ttqf_confirm` (
                                     `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
                                     `user_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户ID',
@@ -121,7 +153,6 @@ CREATE TABLE `pay_ttqf_confirm` (
                                     `create_time` datetime DEFAULT NULL COMMENT '创建时间',
                                     PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
 CREATE TABLE `pay_ttqf_log` (
                                 `id` varchar(255) NOT NULL,
                                 `user_id` varchar(255) DEFAULT NULL COMMENT '用户ID',
@@ -141,26 +172,37 @@ CREATE TABLE `pay_ttqf_log` (
                                 `confirm` tinyint(1) NOT NULL DEFAULT '0' COMMENT '确认打款1-已确认',
                                 `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建者',
                                 `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+                                `sys_amount_auditing_id` varchar(255) DEFAULT NULL,
                                 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 CREATE TABLE `pay_user_sign` (
                                  `id` bigint NOT NULL,
-                                 `user_id` varchar(255) DEFAULT NULL COMMENT '用户ID',
-                                 `sign` tinyint NOT NULL DEFAULT '0' COMMENT '签约1-是',
+                                 `user_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户ID',
+                                 `identity` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户身份证号',
+                                 `sign` tinyint NOT NULL DEFAULT '0' COMMENT '签约状态:0-未签约1-已签约',
+                                 `auth_status` tinyint DEFAULT '0' COMMENT '认证状态:0-未实名1-已实名',
                                  `online_payment` tinyint NOT NULL DEFAULT '0' COMMENT '线上支付1-是',
+                                 `create_time` datetime DEFAULT NULL,
                                  PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
--- 2024.11.1  xuqiang --
-
--- 2024.11.4  helixiao --
-
-ALTER TABLE `agent`.`sys_premium_details` ADD COLUMN `licenseno` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '车牌号';
-ALTER TABLE `agent`.`sys_premium_details` ADD COLUMN `source` tinyint DEFAULT NULL COMMENT '费用来源(1,2,3,4,5级)';
-
-
-
-
+CREATE TABLE `push_lg_data` (
+                                `id` bigint NOT NULL,
+                                `application_time` datetime DEFAULT NULL,
+                                `business_umber` varchar(255) DEFAULT NULL,
+                                `payee` varchar(255) DEFAULT NULL,
+                                `payee_id` varchar(36) DEFAULT NULL,
+                                `receiving_account` varchar(255) DEFAULT NULL,
+                                `extract_money` decimal(10,2) DEFAULT NULL,
+                                `service_charge` decimal(10,2) DEFAULT NULL,
+                                `extract_status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+                                `push_status` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+                                `msg` longtext,
+                                `send_number` int DEFAULT NULL,
+                                PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='推送提现 记录到零工系统';
 
+ALTER TABLE `agent`.`sys_amount_auditing` ADD COLUMN `approval` tinyint(1) NULL DEFAULT 0 COMMENT '是否自动审批1-是' AFTER `account_id`;
 
+--  --

BIN
sql/jar/crypto-kit-1.1.0-1.0.0.jar


+ 3 - 0
sql/jar/reeadmind

@@ -9,4 +9,7 @@ mvn install:install-file -Dfile=E:\data\ttqf\ttqf-api-sdk\ttqf-api-sdk\target\tt
 
 mvn install:install-file -Dfile=E:\data\ttqf\ttqf-api-sdk\ttqf-api-sdk\target\crypto-kit-1.0.0-SNAPSHOT.jar -DgroupId=com.ipaynow.jiaxin -DartifactId=crypto-kit-1.1.0  -Dversion=1.0.0  -Dpackaging=jar
 
+-- 阳光
+mvn install:install-file -Dfile=sunecm-url-encode-1.jar -DgroupId=com.sunecm -DartifactId=sunecm-url-encode-1  -Dversion=1.0.0  -Dpackaging=jar
+
 

BIN
sql/jar/sunecm-url-encode-1.jar


+ 6 - 2
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -92,11 +92,14 @@ public class TokenInterceptor {
         notMatchList.add("/sysSys/sysList");//登录2  去除验证
         notMatchList.add("/pcWebsocket/*");//pcwebsocket
         notMatchList.add("/websocket/*");//APPwebsocket
-        notMatchList.add("/user/saveUserInfo");
-        notMatchList.add("/user/updateUserInfo/*");
+        notMatchList.add("/user/saveUserInfoByPartner");
+        notMatchList.add("/user/saveTeamLeader");
+        notMatchList.add("/user/updateUserInfo1/*");
         notMatchList.add("/user/**");
         notMatchList.add("/user/saveTeamLeader");
         notMatchList.add("/ins/taskImage/uploadFileByPartner");
+        notMatchList.add("/APPPartner/loginWechat");
+        notMatchList.add("/APPPartner/loginAlipay");
 
         /**
          * 天天企赋api接口回调
@@ -104,6 +107,7 @@ public class TokenInterceptor {
         notMatchList.add("/ttqf/paymentNotice");
         notMatchList.add("/ttqf/userSign");
         notMatchList.add("/ttqf/aa/*");
+        notMatchList.add("/ttqf/**");
 
         return new SaInterceptor(handler -> {
             // 指定一条 match 规则

+ 19 - 13
src/main/java/com/ydtech/config/MvcConfig.java

@@ -25,6 +25,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import javax.annotation.Resource;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Configuration
 public class MvcConfig implements WebMvcConfigurer {
@@ -96,18 +98,23 @@ public class MvcConfig implements WebMvcConfigurer {
     }
 
     @Bean
-    public WxMpDefaultConfigImpl wxMpDefaultConfig() {
-        WxMpDefaultConfigImpl wxMpDefaultConfig = new WxMpDefaultConfigImpl();
-        wxMpDefaultConfig.setAppId(wechatOpenProperties.getComponentAppId());
-        wxMpDefaultConfig.setSecret(wechatOpenProperties.getComponentSecret());
-        return wxMpDefaultConfig;
-    }
-
-    @Bean
-    public WxMpService wxMpService() {
-        WxMpServiceImpl wxMpService = new WxMpServiceImpl();
-        wxMpService.setWxMpConfigStorage(wxMpDefaultConfig());
-        return wxMpService;
+    public Map<String, WxMpService> wxMpService() {
+        Map<String, WxMpDefaultConfigImpl> collect = wechatOpenProperties.getProperties().keySet()
+                .stream()
+                .collect(Collectors.toMap(x->x, x -> {
+                    WechatOpenProperties.PropertiesDto propertiesDto = wechatOpenProperties.getProperties().get(x);
+                    WxMpDefaultConfigImpl wxMpDefaultConfig = new WxMpDefaultConfigImpl();
+                    wxMpDefaultConfig.setAppId(propertiesDto.getComponentAppId());
+                    wxMpDefaultConfig.setSecret(propertiesDto.getComponentSecret());
+                    return wxMpDefaultConfig;
+                }));
+
+        return collect.keySet().stream().collect(Collectors.toMap(x -> x, x -> {
+            WxMpServiceImpl wxMpService = new WxMpServiceImpl();
+            WxMpDefaultConfigImpl wxMpDefaultConfig = collect.get(x);
+            wxMpService.setWxMpConfigStorage(wxMpDefaultConfig);
+            return wxMpService;
+        }));
     }
 
     @Bean
@@ -132,7 +139,6 @@ public class MvcConfig implements WebMvcConfigurer {
     }
 
 
-
     /**
      * 获取单个参数
      *

+ 16 - 21
src/main/java/com/ydtech/config/properties/WechatOpenProperties.java

@@ -1,36 +1,31 @@
 package com.ydtech.config.properties;
 
+import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.Map;
+
 @Component
 @ConfigurationProperties(prefix = "wechat.open")
+@Data
 public class WechatOpenProperties {
 
-    /**
-     * 设置微信三方平台的appid
-     */
-    private String componentAppId;
-
-    /**
-     * 设置微信三方平台的app secret
-     */
-    private String componentSecret;
-
+    private Map<String, PropertiesDto> properties;
 
-    public String getComponentAppId() {
-        return componentAppId;
-    }
+    @Data
+    public static class PropertiesDto{
 
-    public void setComponentAppId(String componentAppId) {
-        this.componentAppId = componentAppId;
-    }
+        /**
+         * 设置微信三方平台的appid
+         */
+        private String componentAppId;
 
-    public String getComponentSecret() {
-        return componentSecret;
+        /**
+         * 设置微信三方平台的app secret
+         */
+        private String componentSecret;
     }
 
-    public void setComponentSecret(String componentSecret) {
-        this.componentSecret = componentSecret;
-    }
 }

+ 15 - 0
src/main/java/com/ydtech/config/properties/YangGuangApiConfigurationProperties.java

@@ -8,9 +8,24 @@ import org.springframework.stereotype.Component;
 @Component
 @ConfigurationProperties(prefix = "yangguang.api")
 public class YangGuangApiConfigurationProperties {
+    // 测试地址
     private String url;
 
+    // 测试key
     private String testKey;
 
+    // 生产key
     private String productKey;
+
+    // 支付回调地址
+    private String payCallBack;
+
+    // 影像上传地址
+    private String uploadUrl;
+
+    // 影像上传key
+    private String secret;
+
+    // 获取影像时referer
+    private String referer;
 }

+ 17 - 0
src/main/java/com/ydtech/config/scheduledConfig/ScheduledConfig.java

@@ -0,0 +1,17 @@
+package com.ydtech.config.scheduledConfig;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+@Configuration
+public class ScheduledConfig {
+    @Bean
+    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
+        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
+        threadPoolTaskScheduler.setPoolSize(5);
+        threadPoolTaskScheduler.setRemoveOnCancelPolicy(true);
+        return threadPoolTaskScheduler;
+    }
+}
+

+ 5 - 5
src/main/java/com/ydtech/constants/InsuranceEnum.java

@@ -32,7 +32,7 @@ public enum InsuranceEnum {
     CHAC("CHAC", "诚泰财产保险股份有限公司", "chengtai"),
     CICP("CICP", "中华联合财产保险股份有限公司", ""),
     CJCX("CJCX", "长江财产保险股份有限公司", ""),
-    CPIC("CPIC", "中国太平洋财产保险股份有限公司", ""),
+    CPIC("CPIC", "中国太平洋财产保险股份有限公司", "taipingyang"),
     CRCI("CRCI", "中国铁路财产保险自保有限公司", ""),
     CRIC("CRIC", "富德财产保险股份有限公司", ""),
     DBIC("DBIC", "都邦财产保险股份有限公司", ""),
@@ -47,7 +47,7 @@ public enum InsuranceEnum {
     HBIC("HBIC", "恒邦财产保险股份有限公司", "hengbang"),
     HGIC("HGIC", "海峡金桥财产保险股份有限公司", ""),
     HHBX("HHBX", "华海财产保险股份有限公司", ""),
-    HNIC("HNIC", "华农财产保险股份有限公司", ""),
+    HNIC("HNIC", "华农财产保险股份有限公司", "huanong"),
     HTIC("HTIC", "华泰财产保险有限公司", "huatai"),
     HYIC("HYIC", "现代财产保险(中国)有限公司", ""),
     JLIC("JLIC", "久隆财产保险有限公司", ""),
@@ -63,10 +63,10 @@ public enum InsuranceEnum {
     SMIC("SMIC", "阳光农业相互保险公司", ""),
     SPIC("SPIC", "三星财产保险(中国)有限公司", ""),
     TAIC("TAIC", "天安财产保险股份有限公司", ""),
-    TKIC("TKIC", "泰康在线财产保险股份有限公司", ""),
+    TKIC("TKIC", "泰康在线财产保险股份有限公司", "taikang"),
     TMNF("TMNF", "东京海上日动火灾保险(中国)有限公司", ""),
-    TPBX("TPBX", "安盛天平财产保险股份有限公司", ""),
-    TPIC("TPIC", "太平财产保险有限公司", ""),
+    TPBX("TPBX", "安盛天平财产保险股份有限公司", "ansheng"),
+    TPIC("TPIC", "太平财产保险有限公司", "taiping"),
     TSBX("TSBX", "泰山财产保险股份有限公司", ""),
     ULIC("ULIC", "合众财产保险股份有限公司", ""),
     UTIC("UTIC", "众诚汽车保险股份有限公司", ""),

+ 1 - 0
src/main/java/com/ydtech/constants/InsuranceImageEnum.java

@@ -15,6 +15,7 @@ public enum InsuranceImageEnum {
 
     SFZ_01("SFZ_01", "身份证正面"),
     SFZ_02("SFZ_02", "身份证反面"),
+    YHK_01("YHK_01", "银行卡正面"),
 
     ZGZ_00("ZGZ_00", "资格证照片"),
 

+ 18 - 0
src/main/java/com/ydtech/constants/enums/WechatOpenSystem.java

@@ -0,0 +1,18 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum WechatOpenSystem {
+
+    JZG("jzg", "晋掌柜"),
+    HHR("hhr", "合伙人");
+
+    private final String code;
+
+    private final String desc;
+
+}

+ 7 - 0
src/main/java/com/ydtech/constants/enums/dict/insurance/TrafficManagementVehicleType.java

@@ -6,6 +6,9 @@ import com.ydtech.constants.enums.dict.IBaseEnum;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.Arrays;
+import java.util.Objects;
+
 /**
  * @description: 交通管理车辆类型
  * @author: wenks
@@ -141,5 +144,9 @@ public enum TrafficManagementVehicleType implements IBaseEnum {
     // 状态  0 启用  1 不启用
     private final Integer status;
 
+    public static String getDesc(String code){
+        TrafficManagementVehicleType trafficManagementVehicleType = Arrays.stream(TrafficManagementVehicleType.values()).filter(x -> x.code.equals(code)).findFirst().orElse(null);
+        return !Objects.isNull(trafficManagementVehicleType) ? trafficManagementVehicleType.getDesc() : "";
+    }
 }
 

+ 7 - 1
src/main/java/com/ydtech/modules/admin/constants/SwitchConfig.java

@@ -32,7 +32,13 @@ public enum SwitchConfig {
     // 是否显示
     WCQCA_01("weComQRCodeAgent", "企业微信二维码显示(代理人)"),
     WCQCA_02("weComQRCodeChannel", "企业微信二维码显示(渠道)"),
-    WCQCA_03("weComQRCodeOther", "企业微信二维码显示(其他)");
+    WCQCA_03("weComQRCodeOther", "企业微信二维码显示(其他)"),
+    //余额提现控制
+    YETX_01("balanceExtract","提现控制(线上或线下)")
+    ;
+
+
+
 
     private final String code;
 

+ 26 - 0
src/main/java/com/ydtech/modules/admin/constants/UserAgentStatus.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.admin.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum UserAgentStatus {
+
+    UAS_0(0, "注册"),
+    UAS_1(1, "认证成功"),
+    UAS_2(2, "认证失败"),
+    UAS_3(3, "银行卡认证成功"),
+    UAS_4(4, "银行卡认证失败");
+    private final Integer code;
+
+    private final String desc;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 2 - 2
src/main/java/com/ydtech/modules/admin/constants/UserWorkStatus.java

@@ -15,8 +15,8 @@ public enum UserWorkStatus {
     UWS_4(4, "离司待审核"),
     UWS_5(5, "离司审核驳回"),
     UWS_6(6, "修改待审核"),
-    UWS_7(7, "修改审核驳回");
-
+    UWS_7(7, "修改审核驳回"),
+    UWS_8(8, "待入司");
     private final Integer code;
 
     private final String desc;

+ 32 - 4
src/main/java/com/ydtech/modules/admin/controller/APPPartnerController.java

@@ -180,6 +180,18 @@ public class APPPartnerController extends BaseController {
 
         return HttpResult.ok("success",this.sysPartnerService.getPartnerCount(partnerCountDto));
     }
+
+    /**
+     *  五级合伙人新增人员统计
+     */
+    @PostMapping("/getFivePartnerCount")
+    @ApiOperation(value = "五级合伙人新增人员统计")
+    public HttpResult<PartnerCountVo> getFivePartnerCount(@RequestBody PartnerCountDto partnerCountDto) {
+
+        return HttpResult.ok("success",this.sysPartnerService.getFivePartnerCount(partnerCountDto));
+    }
+
+
     /**
      * 新增人员占比分析
      */
@@ -200,6 +212,18 @@ public class APPPartnerController extends BaseController {
         return HttpResult.ok("success",this.sysPartnerService.getLevelPartner(type));
     }
 
+    /**
+     * 排行榜->查看详情
+     * @return
+     */
+    @PostMapping("/getLevelPartnerInfo")
+    @ApiOperation(value = "排行榜->查看详情")
+    public HttpResult<PartnerInfoFreeVo> getLevelPartnerInfo(@RequestBody List<String> partnerIds) {
+
+        return HttpResult.ok("success",this.sysPartnerService.getLevelPartnerInfo(partnerIds));
+    }
+
+
     /**
      * 支付宝登录
      * @param alipayBindVo
@@ -208,11 +232,12 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/loginAlipay")
     @ApiOperation(value = "支付宝登录")
     public HttpResult<AAPLoginVo> loginAlipay(@RequestBody AlipayBindVo alipayBindVo) {
+        log.info("支付宝登录入参:{}",alipayBindVo);
         try {
             return sysPartnerService.loginAlipay(alipayBindVo);
         } catch (AlipayApiException e) {
             log.info(e.getMessage());
-            throw new SystemException("支付宝授权失败");
+            throw new SystemException("支付宝登录失败");
         }
     }
 
@@ -225,11 +250,12 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/bindAlipay")
     @ApiOperation(value = "工号绑定支付宝")
     HttpResult<Object> bindAlipay(@RequestBody AlipayBindVo alipayBindVo){
+        log.info("支付宝绑定入参:{}",alipayBindVo);
         try {
             String userId = getUserId();
             return sysPartnerService.bindAlipay(alipayBindVo, userId);
         } catch (AlipayApiException e) {
-            throw new SystemException("支付宝授权失败");
+            throw new SystemException("支付宝绑定失败");
         }
     }
 
@@ -255,11 +281,12 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/loginWechat")
     @ApiOperation(value = "微信登录")
     public HttpResult<AAPLoginVo> loginWechat(@RequestBody WechatLoginVo wechatLoginVo) {
+        log.info("微信登录入参:{}",wechatLoginVo);
         try {
             return sysPartnerService.loginWechat(wechatLoginVo);
         } catch (WxErrorException e) {
             log.info(e.getMessage());
-            throw new SystemException("微信授权失败");
+            throw new SystemException("微信登录失败");
         }
     }
 
@@ -272,12 +299,13 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/bindWechat")
     @ApiOperation(value = "工号绑定微信")
     HttpResult<Object> bindWechat(@RequestBody WechatBindVo wechatBindVo){
+        log.info("微信绑定入参:{}",wechatBindVo);
         try {
             String userId = getUserId();
             return sysPartnerService.bindWechat(wechatBindVo, userId);
         } catch (WxErrorException e) {
             log.info(e.getMessage());
-            throw new SystemException("微信授权失败");
+            throw new SystemException("微信绑定失败");
         }
     }
 

+ 9 - 0
src/main/java/com/ydtech/modules/admin/controller/AppCustomerManagementController.java

@@ -1,9 +1,11 @@
 package com.ydtech.modules.admin.controller;
 
 
+import cn.dev33.satoken.annotation.SaIgnore;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamInfoDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.service.AppCustomerManagementService;
 import com.ydtech.modules.order.entity.BasePageResult;
@@ -20,6 +22,12 @@ public class AppCustomerManagementController {
 
     private final AppCustomerManagementService appCustomerManagementService;
 
+    @ApiOperation(value = "认证统计")
+    @GetMapping(value = "/authStatics")
+    public HttpResult authStatics(Integer dateType) {
+        return appCustomerManagementService.authStatics(dateType);
+    }
+
     @ApiOperation(value = "认证查询")
     @PostMapping(value = "/authenticationQuery")
     public HttpResult<BasePageResult<SysUserTeamDto>> authenticationQuery(@RequestBody AppCustomerManagementQueryVo appCustomerManagementQueryVo) {
@@ -28,6 +36,7 @@ public class AppCustomerManagementController {
 
     @ApiOperation(value = "团队人员详情")
     @GetMapping(value = "/{userId}")
+    @SaIgnore
     public HttpResult<SysUserTeamInfoDto> authenticationQuery(@PathVariable String userId) {
         return appCustomerManagementService.getUserInfo(userId);
     }

+ 2 - 1
src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java

@@ -230,7 +230,7 @@ public class SysLoginController {
                 throw new SystemException("该用户未授权");
             }
         }
-
+        user.setIsLock(0);
         //验证用户
         SysUser.verifyUser(user);
         SysPassword sysPassword = sysPasswordService.getOne(new LambdaQueryWrapper<SysPassword>().eq(SysPassword::getCode, SysPasswordEnum.GENERAL.getCode()));
@@ -396,6 +396,7 @@ public class SysLoginController {
         String phoneMsg = phoneLoginVo.getPhoneMsg();
         SysUser user = sysUserService.findByPhone(phone);
         //验证用户
+        user.setIsLock(0);
         SysUser.verifyUser(user);
         String msg = redisTemplate.opsForValue().get(PHONE_VERIFICATION_CODE_KEY + phone);
         if (msg == null || msg.isEmpty()) {

+ 3 - 3
src/main/java/com/ydtech/modules/admin/controller/SysPartnerController.java

@@ -75,10 +75,10 @@ public class SysPartnerController extends BaseController {
      * @param id 主键
      * @return 单条数据
      */
-    @GetMapping("/queryRecommendAndPartner/{id}")
+    @GetMapping("/queryRecommendAndPartner/{id}/{level}")
     @ApiOperation(value = "根据部门id查询配置的推荐人接口")
-    public HttpResult<List<SysPartner>> queryRecommendAndPartner(@PathVariable("id") @ApiParam("部门id") String id) {
-        return HttpResult.ok("success", this.sysPartnerService.queryRecommendAndPartner(id));
+    public HttpResult<List<SysPartner>> queryRecommendAndPartner(@PathVariable(value = "id") @ApiParam("部门id") String id,@PathVariable(value = "level") @ApiParam("合伙人等级") Integer level) {
+        return HttpResult.ok("success", this.sysPartnerService.queryRecommendAndPartner(id,level));
     }
 
     /**

+ 113 - 0
src/main/java/com/ydtech/modules/admin/controller/SysUserAgentController.java

@@ -0,0 +1,113 @@
+package com.ydtech.modules.admin.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.components.UnionPayRequestApiComponent;
+import com.ydtech.modules.admin.components.request.UnionPayRequest;
+import com.ydtech.modules.admin.components.response.UnionPayResponse;
+import com.ydtech.modules.admin.constants.UserAgentStatus;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.ydtech.modules.admin.model.dto.AgentAuthDto;
+import com.ydtech.modules.admin.model.dto.AgentAuthResultDto;
+import com.ydtech.modules.admin.model.dto.AgentSubmitDto;
+import com.ydtech.modules.admin.model.dto.AgentUserNewDto;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserRoleService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Objects;
+
+import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY;
+
+@RestController
+@Api(tags = "个代用户控制器")
+@RequestMapping("userAgent")
+@RequiredArgsConstructor
+@Slf4j
+public class SysUserAgentController extends BaseController {
+
+    private final SysUserService sysUserService;
+
+    private final SysDeptService sysDeptService;
+
+    private final StringRedisTemplate redisTemplate;
+
+    private final SysUserRoleService sysUserRoleService;
+
+    @ApiOperation(value = "个代注册")
+    @PostMapping(value = "/agentRegist")
+    @SaIgnore
+    public HttpResult agentRegist(@RequestBody @Validated AgentUserNewDto dto) {
+        List<SysUser> list = sysUserService.lambdaQuery().eq(SysUser::getMobile, dto.getMobile()).list();
+        AssertionUtils.isFail(!list.isEmpty(), "手机号已经被注册请重新跟换手机号。如有疑问请联系管理人员。");
+        String captchaRedis = redisTemplate.opsForValue().get(PHONE_VERIFICATION_CODE_KEY + dto.getMobile());
+        redisTemplate.delete(PHONE_VERIFICATION_CODE_KEY + dto.getMobile());
+        AssertionUtils.isFail(StringUtils.isBlank(captchaRedis), "验证码已失效!");
+        AssertionUtils.isFail(!dto.getMobileMsg().equals(captchaRedis), "验证码错误!");
+        String recommenderid = dto.getReferrerId();
+        SysUser recommender = sysUserService.getById(recommenderid);
+        AssertionUtils.isFail(Objects.isNull(recommender), "推荐人信息不存在!");
+        AssertionUtils.isFail(!"2".equals(dto.getFlag()), "只有个代来源允许注册!");
+        //只有团队长和代理人才能邀请
+        SysUserRole recommenderRole = sysUserRoleService.selectByUserId(recommenderid);
+        if (!recommenderRole.getRoleId().equals(20L) && !recommenderRole.getRoleId().equals(21L)) {
+            return HttpResult.error("只有团队长和代理人才能推荐");
+        }
+        String userId = sysUserService.agentRegist(dto, recommender);
+        return HttpResult.ok("保存成功", userId);
+    }
+
+    @ApiOperation(value = "个代(认证/审核)结果获取")
+    @PostMapping(value = "/getAuthResult")
+    public HttpResult getAuthResult(@RequestBody @Validated AgentAuthResultDto dto) {
+        SysUser sysUser = sysUserService.getByUserId(dto.getUserId());
+        AssertionUtils.isFail(Objects.isNull(sysUser), "用户信息不存在!");
+        AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要认证!");
+        return HttpResult.ok(sysUserService.getAuthResult(sysUser,dto));
+    }
+
+    @ApiOperation(value = "个代认证")
+    @PostMapping(value = "/agentAuth")
+    public HttpResult agentAuth(@RequestBody @Validated AgentAuthDto dto) {
+        SysUser sysUser = sysUserService.getByUserId(dto.getUserId());
+        SysUser mobileUser = sysUserService.findByPhone(dto.getMobile());
+        AssertionUtils.isFail(!sysUser.getMobile().equals(dto.getMobile()) && Objects.isNull(mobileUser), "用户手机号未注册!");
+        AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要认证!");
+        return HttpResult.ok(sysUserService.agentAuth(sysUser,dto));
+    }
+
+    @ApiOperation(value = "个代资料提交")
+    @PostMapping(value = "/agentSubmit")
+    public HttpResult agentSubmit(@RequestBody @Validated AgentSubmitDto dto) {
+        SysUser sysUser = sysUserService.getByUserId(dto.getUserId());
+        AssertionUtils.isFail(Objects.isNull(sysUser), "用户不存在!");
+        AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要资料提交!");
+        SysUser user = sysUserService.getById(sysUser.getId());
+        AssertionUtils.isFail("0".equals(sysUser.getFactorVerify()) || "2".equals(sysUser.getFactorVerify())
+                , "未实名认证的用户不允许提交资料");
+        sysUserService.agentSubmit(user,dto);
+        return HttpResult.ok("提交成功");
+    }
+
+
+
+
+
+}

+ 116 - 161
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -112,16 +112,6 @@ public class SysUserController extends BaseController {
 
     private final UnionPayRequestApiComponent unionPayRequestApiComponent;
 
-    private final SysPartnerService sysPartnerService;
-
-    private final SysPartnerMapper sysPartnerMapper;
-
-    private final SysAgencyLeaderService sysAgencyLeaderService;
-
-    private final SysUserMapper sysUserMapper;
-
-
-
 
     //    @PreAuthorize("hasAuthority('sys:user:delete')")
     @ApiOperation(value = "逻辑删除")
@@ -233,16 +223,17 @@ public class SysUserController extends BaseController {
 
         return HttpResult.ok();
     }
+
     @PostMapping(value = "/deleteUserRole")
     @ApiOperation(value = "删除用户角色信息")
     public HttpResult deleteUserRole(@RequestBody SysUserRoleVo sysUserRoleVo) {
 
-        if(StringUtil.isBlank(sysUserRoleVo.getUserId())){
+        if (StringUtil.isBlank(sysUserRoleVo.getUserId())) {
             return HttpResult.error("用户ID不能空");
         }
-        if(sysUserRoleService.deleteByUserId(sysUserRoleVo.getUserId())){
+        if (sysUserRoleService.deleteByUserId(sysUserRoleVo.getUserId())) {
             return HttpResult.ok();
-        }else{
+        } else {
             return HttpResult.error();
         }
     }
@@ -250,7 +241,7 @@ public class SysUserController extends BaseController {
     @PostMapping(value = "/roleAddUser")
     @ApiOperation(value = "角色成员新增")
     public HttpResult roleAddUser(@RequestBody @Valid SysRoleAddUserVo sysRoleAddUserVo) {
-        return sysUserRoleService.roleAddUser(sysRoleAddUserVo,getUserName());
+        return sysUserRoleService.roleAddUser(sysRoleAddUserVo, getUserName());
     }
 
 
@@ -309,6 +300,39 @@ public class SysUserController extends BaseController {
         return HttpResult.ok("修改成功,请重新登录");
     }
 
+    /**
+     * 合伙人密码修改
+     *
+     * @param id
+     * @param password
+     * @param oldPassword
+     * @return
+     */
+    @PostMapping(value = "/updatePartnerPwd")
+    @ApiOperation(value = "合伙人密码修改")
+    public HttpResult updatePartnerPwd(@RequestParam String id, @RequestParam String password, @RequestParam String oldPassword) {
+        log.info("修改密码参数:userId:{}, 新密码:{},旧密码:{}",id,password,oldPassword);
+        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(password)) {
+            return HttpResult.error("ID和密码不能为空");
+        }
+        SysUser sysUser = sysUserService.getById(id);
+        if (sysUser == null) {
+            return HttpResult.error("ID不存在");
+        }
+        if (password.equals(oldPassword)) {
+            return HttpResult.error("新密码不能与旧密码相同");
+        }
+        if (!PasswordUtils.matches(sysUser.getSalt(), oldPassword, sysUser.getPassword())) {
+            return HttpResult.error("旧密码输入不正确");
+        }
+        //密码加密
+        String pwd = PasswordUtils.encode(password, sysUser.getSalt());
+        sysUser.setPassword(pwd);
+        sysUserService.updateById(sysUser);
+        StpUtil.logout();
+        return HttpResult.ok("修改成功,请重新登录");
+    }
+
     /**
      * 手机号更新
      *
@@ -340,6 +364,42 @@ public class SysUserController extends BaseController {
         return HttpResult.ok("修改成功");
     }
 
+    /**
+     * 合伙人手机号更新
+     *
+     * @param id
+     * @param mobile
+     * @return
+     */
+    @PostMapping(value = "/updatePartnerMobile")
+    @ApiOperation(value = "合伙人手机号更新")
+    public HttpResult updatePartnerMobile(@RequestParam String id, @RequestParam String mobile) {
+        log.info("手机号参数:userId:{}, 新手机号:{}",id,mobile);
+        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(mobile)) {
+            return HttpResult.error("ID和手机号不能为空");
+        }
+        SysUser sysUser = sysUserService.getById(id);
+        if (sysUser == null) {
+            return HttpResult.error("ID不存在");
+        }
+        if (sysUser.getMobile().equals(mobile)) {
+            return HttpResult.error("新手机号不能与已绑定手机号相同");
+        }
+
+        LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
+        lqw.ne(SysUser::getId, id);
+        lqw.eq(SysUser::getMobile, mobile);
+
+        List<SysUser> users = sysUserService.list(lqw);
+        if (!CollectionUtils.isEmpty(users)) {
+            return HttpResult.error("手机号已存在");
+        }
+
+        sysUser.setMobile(mobile);
+        sysUserService.updateById(sysUser);
+        return HttpResult.ok("修改成功");
+    }
+
     /**
      * 根据工号查询推荐人信息
      *
@@ -509,63 +569,18 @@ public class SysUserController extends BaseController {
         SysUser sysUser = sysUserService.getById(userId);
         if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_2.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_1.getCode());
+            sysUserService.addInfo(sysUser);
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_4.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_0.getCode());
+
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_6.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_1.getCode());
         }
-
         SysUserTrack sysUserTrack = new SysUserTrack(sysUser);
 
         sysUserTrackService.save(sysUserTrack);
-        Integer type = sysUser.getType();
-        if (type == 1) {
-            SysPartner sysPartner = sysPartnerMapper.selectOne(new LambdaQueryWrapper<SysPartner>().eq(SysPartner::getUserId, sysUser.getId()));
-            if (sysPartner == null) {
-                //保存合伙人信息
-                SysPartnerDto sysPartnerDto = new SysPartnerDto();
-                sysPartnerDto.setUserId(sysUser.getId());
-                sysPartnerDto.setUserName(sysUser.getName());
-                if (sysUser.getLevel() != 1) {
-                    sysPartnerDto.setSuggestId(sysUser.getReferrerId());
-                }
-                sysPartnerDto.setLevel(sysUser.getLevel());
-                sysPartnerService.insert(sysPartnerDto);
-            }
-        } else if (type == 2){
-            SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
-            SysDept sysDeptParent = sysDeptService.getById(sysDept.getParentId());
-            SysUser sysUserReferrerId = sysUserService.getById(sysUser.getReferrerId());
-            SysDeptVo sysDeptVo = new SysDeptVo();
-            sysDeptVo.setComlevel("5"); // 默认机构等级为5级
-            sysDeptVo.setComtype(sysUser.getDeptType());
-            sysDeptVo.setName(sysUser.getName() + "工作室"); // 以人名设置工作室名称
-            sysDeptVo.setDeptType("C"); // 默认为子公司
-            sysDeptVo.setParentId(sysDept.getParentId());
-            sysDeptVo.setManagementSource(sysUser.getDeptSource()); //机构来源默认为加盟
-            sysDeptVo.setWorkerId(sysUser.getId()); // 工作室命名人id
-            sysDeptVo.setOrderNum(0);
-            sysDeptVo.setComattribute("procar"); //机构性质 车险
-            sysDeptVo.setProvince(sysDeptParent.getProvince()); // 默认省与负责人所在机构一样
-            sysDeptVo.setCity(sysDeptParent.getCity()); // 默认市与负责人所在机构一样
-            sysDeptVo.setArea(sysDeptParent.getArea()); // 默认区县与负责人所在机构一样
-            sysDeptVo.setCreateTime(new Date());
-            sysDeptVo.setAddress(""); // 工作室地址
-            sysDeptService.addDept(sysDeptVo);
-            SysAgencyLeaderDto sysAgencyLeaderDto = new SysAgencyLeaderDto();
-            sysAgencyLeaderDto.setUserId(sysUser.getId());
-            sysAgencyLeaderDto.setUserName(sysUser.getName());
-            sysAgencyLeaderDto.setDeptId(sysDeptVo.getId());
-            sysAgencyLeaderDto.setDeptName(sysDeptVo.getName());
-            sysAgencyLeaderDto.setSource(sysUser.getDeptSource());
-            sysAgencyLeaderDto.setComlevel(sysDeptVo.getComlevel());
-            sysAgencyLeaderDto.setSuggestId(sysUser.getReferrerId());
-            sysAgencyLeaderDto.setSuggestName(sysUser.getSuggestName());
-            sysAgencyLeaderDto.setSuggestLevel(sysUserReferrerId.getLevel());
-
-            sysAgencyLeaderService.insert(sysAgencyLeaderDto);
-        }
-        return HttpResult.ok(sysUserService.updateById(sysUser));
+
+        return HttpResult.ok("审批成功",sysUserService.updateById(sysUser));
     }
 
 
@@ -580,6 +595,13 @@ public class SysUserController extends BaseController {
         SysUser sysUser = sysUserService.getById(userId);
         if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_2.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_3.getCode());
+            Integer type = sysUser.getType();
+            Integer level = sysUser.getLevel();
+            if (type != 0) {
+                if (level == null || level != 1) {
+                    sysUserService.sendMsgPantner(sysUser.getMobile());
+                }
+            }
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_4.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_5.getCode());
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_6.getCode())) {
@@ -589,13 +611,6 @@ public class SysUserController extends BaseController {
         SysUserTrack sysUserTrack = new SysUserTrack(sysUser);
         sysUserTrack.setApproveMess(reason);
         sysUserTrackService.save(sysUserTrack);
-        Integer type = sysUser.getType();
-        Integer level = sysUser.getLevel();
-        if (type != 0) {
-            if (level == null || level != 1) {
-                sysUserService.sendMsgPantner(sysUser.getMobile());
-            }
-        }
 
         return HttpResult.ok(sysUserService.updateById(sysUser));
 
@@ -630,7 +645,7 @@ public class SysUserController extends BaseController {
             List<EsmUserImageQueryVo> esmUserImageQueryVo = esmUserImageService.getEsmUserImageQueryVo(userId);
             sysUserVo.setEsmUserImageVo(esmUserImageQueryVo);
             sysUserVo.setSysUserInfo(sysUserInfoService.getById(userId));
-            SpringUtil.getBean(RecordUserUtils.class).addRecord(userId,BaseController.getUserName());
+            SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, BaseController.getUserName());
             return HttpResult.ok(sysUserVo);
         }
         // 查询推荐人
@@ -646,7 +661,7 @@ public class SysUserController extends BaseController {
         SysUserInfo userInfo = sysUserInfoService.getById(userId);
 
         String addr = Optional.ofNullable(userInfo).map(SysUserInfo::getLiveAddress).orElse(null);
-        if (StringUtils.isNotEmpty(addr)){
+        if (StringUtils.isNotEmpty(addr)) {
             userInfo.setLiveAddressString(addr.split(","));
         }
 
@@ -781,8 +796,8 @@ public class SysUserController extends BaseController {
             request.setPhoneNo(dto.getMobile());
             request.setCertNo(dto.getIdentity());
             response = unionPayRequestApiComponent.threeFactorVerifyRequest(request);
-            if (response != null&&!"00".equals(response.getRespCode())) {
-                return HttpResult.error("认证信息不一致:"+response.getDetailRespMsg());
+            if (response != null && !"00".equals(response.getRespCode())) {
+                return HttpResult.error("认证信息不一致:" + response.getDetailRespMsg());
             }
         }
         //只有团队长和代理人才能邀请 by gws
@@ -819,13 +834,21 @@ public class SysUserController extends BaseController {
             sysUser.setOperatorCode(recommenderid);
         }
         sysUser.setIdentity(dto.getIdentity());
-        sysUser.setFactorVerify(response != null && "00".equals(response.getRespCode())? 1:0);
-        sysUserService.save(sysUser);
+        sysUser.setFactorVerify(response != null && "00".equals(response.getRespCode()) ? 1 : 0);
 
         //角色配置
         SysUserRole userRole = new SysUserRole();
         userRole.setUserId(nextPK);
         userRole.setRoleId(dto.getFlag().equals("2") ? 20L : 19L);
+
+        // 出单员获取渠道负责人的领导人插入
+        if (19 == userRole.getRoleId()) {
+            SysUser leaderUser = sysUserService.getByRoleIdAndDeptId("21", sysUser.getDeptId());
+            sysUser.setLeaderId(leaderUser.getLeaderId());
+            sysUser.setLeaderName(leaderUser.getLeaderName());
+        }
+
+        sysUserService.save(sysUser);
         sysUserRoleService.save(userRole);
 
         //添加增员服务消息
@@ -856,15 +879,6 @@ public class SysUserController extends BaseController {
         //by gws 21	团队长 20	代理人 必须归属团队
         // 22	后线人员 必须归属部门
         SysUser sysUser = sysUserVo.getSysUser();
-        if (sysUserVo.getIsPartner() != null && sysUserVo.getIsPartner().equals("1")) {
-            SysUserInfo sysUserInfo = new SysUserInfo();
-            SysUser partnerId = sysUserService.getById(sysUserVo.getSysUser().getReferrerId());
-            sysUser.setDeptId(partnerId.getDeptId());
-            sysUser.setStatus(2); //直接默认为入司待审核
-            LocalDate birthday = LocalDate.parse(sysUser.getIdentity().substring(6, 10) + "-" + sysUser.getIdentity().substring(10, 12) + "-" + sysUser.getIdentity().substring(12, 14));
-            sysUserInfo.setBirthday(birthday);
-            sysUserVo.setSysUserInfo(sysUserInfo);
-        }
         if (StringUtils.isNullOrEmpty(sysUser)) {
             return HttpResult.error("用户信息不能为空");
         }
@@ -909,14 +923,14 @@ public class SysUserController extends BaseController {
     @ApiOperation(value = "保存合伙人、管理员用户基本详情信息")
     @PostMapping(value = "/saveUserInfoByPartner")
     public HttpResult saveUserInfoByPartner(@RequestBody SysUser2Vo sysUserVo) {
-        log.info("添加合伙人入参:{}",sysUserVo);
+        log.info("添加合伙人入参:{}", sysUserVo);
         //by gws 21	团队长 20	代理人 必须归属团队
         // 22	后线人员 必须归属部门
         SysUser sysUser = sysUserVo.getSysUser();
         if (sysUserVo.getIsPartner() != null && sysUserVo.getIsPartner().equals("1")) {
             SysUserInfo sysUserInfo = new SysUserInfo();
-            SysUser partnerId = sysUserService.getById(sysUserVo.getSysUser().getReferrerId());
-            sysUser.setDeptId(partnerId.getDeptId());
+            SysUser sysUser1 = sysUserService.getById(sysUserVo.getSysUser().getReferrerId());
+            sysUser.setDeptId(sysUser1.getDeptId());
             sysUser.setStatus(2); //直接默认为入司待审核
             LocalDate birthday = LocalDate.parse(sysUser.getIdentity().substring(6, 10) + "-" + sysUser.getIdentity().substring(10, 12) + "-" + sysUser.getIdentity().substring(12, 14));
             sysUserInfo.setBirthday(birthday);
@@ -966,69 +980,8 @@ public class SysUserController extends BaseController {
     @ApiOperation(value = "保存团队长用户基本详情信息")
     @PostMapping(value = "/saveTeamLeader")
     public HttpResult saveTeamLeader(@RequestBody SysUser2Vo sysUserVo) {
-        log.info("添加团队入参:{}",sysUserVo);
-        SysUser sysUser = sysUserVo.getSysUser();
-        sysUser.setType(3);
-        sysUser.setCreateTime(new Date());
-        SysUserInfo sysUserInfo = new SysUserInfo();
-        LocalDate birthday = LocalDate.parse(sysUser.getIdentity().substring(6, 10) + "-" + sysUser.getIdentity().substring(10, 12) + "-" + sysUser.getIdentity().substring(12, 14));
-        sysUserInfo.setBirthday(birthday);
-        sysUserVo.setSysUserInfo(sysUserInfo);
-        // 先创建工作室下的团队
-        SysAgencyLeader sysAgencyLeader = sysAgencyLeaderService.getOne(new LambdaQueryWrapper<SysAgencyLeader>()
-                .eq(SysAgencyLeader::getUserId, sysUser.getReferrerId()));
-        SysDept sysDept = sysDeptService.getOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getId, sysAgencyLeader.getDeptId()));
-//        SysDept sysDept = sysDeptList.get(0);
-        SysDeptVo sysDeptVo = new SysDeptVo();
-        sysDeptVo.setName(sysUser.getName() + "团队"); // 以人名设置工作室名称
-        sysDeptVo.setDeptType("D"); // 默认为子公司
-        sysDeptVo.setParentId(sysDept.getId());
-        sysDeptVo.setManagementSource(sysDept.getManagementSource()); //机构来源
-        sysDeptVo.setOrderNum(0);
-        sysDeptVo.setCreateTime(new Date());
-        log.info("------------------团队长添加先调添加部门-----------------------");
-        sysDeptService.addDept(sysDeptVo);
-
 
-        if (StringUtils.isNullOrEmpty(sysUser)) {
-            return HttpResult.error("用户信息不能为空");
-        }
-        if (StringUtils.isNullOrEmpty(sysDeptVo.getId())) {
-            return HttpResult.error("机构ID不能为空");
-        }
-        if (StringUtils.isNullOrEmpty(sysUser.getRoleId())) {
-            throw new SystemException("角色id不能为空");
-        }
-        //获取机构层级
-        int deptLevel = sysUserService.getDeptLevel1(sysDeptVo.getId());
-        if (!StringUtils.isNullOrEmpty(sysUser.getRoleId())) {
-            if (RoleConstants.R21.getCode().equals(sysUser.getRoleId())
-                    || RoleConstants.R20.getCode().equals(sysUser.getRoleId())
-                    || RoleConstants.R19.getCode().equals(sysUser.getRoleId())) {//19 出单员 21	团队长 20	代理人
-
-                if (deptLevel != 6) {
-                    throw new SystemException("团队长、代理人、出单员只能归属团队中");
-                }
-                //如果为团队长,判断是否已经存在团队长,存在不允许添加   add by  hxl  2024-05-07  ============begin
-                if (RoleConstants.R21.getCode().equals(sysUser.getRoleId())) {
-                    int count = sysUserService.getCountByDeptAndRoleId(sysUser);
-                    if (count > 0) {
-                        throw new SystemException("该机构已存在团队长,不允许再添加!!");
-                    }
-                }
-                // =========================add by hxl   end ====================
-            } else if (RoleConstants.R18.getCode().equals(sysUser.getRoleId())) { // 42 门店长
-                if (deptLevel != 5) {
-                    throw new SystemException("机构管理员只能归属机构中");
-                }
-            } else if (RoleConstants.R17.getCode().equals(sysUser.getRoleId())) {
-                if (deptLevel != 4) {
-                    throw new SystemException("部长只能归属于4级");
-                }
-            }
-
-        }
-        return sysUserService.saveUserInfo1(sysUserVo, sysDeptVo);
+        return sysUserService.saveUserInfo1(sysUserVo);
     }
 
 
@@ -1097,6 +1050,7 @@ public class SysUserController extends BaseController {
 
     /**
      * 获取当前用户的下级所有人员
+     *
      * @return
      */
     @ApiOperation(value = "获取当前用户的下级所有人员")
@@ -1108,12 +1062,13 @@ public class SysUserController extends BaseController {
 
     /**
      * 获取当前用户的所有代理人
+     *
      * @return
      */
     @ApiOperation(value = "获取代理人树形")
     @GetMapping(value = "/findNextAgentTree")
     public HttpResult<List<SysUser>> findNextAgentTree(String pid) {
-        List<SysUser> list = sysUserService.findNextAgentTree( pid);
+        List<SysUser> list = sysUserService.findNextAgentTree(pid);
         return HttpResult.ok(list);
     }
 
@@ -1178,6 +1133,7 @@ public class SysUserController extends BaseController {
         }
 
     }
+
     /**
      * @version
      * @author: whp
@@ -1252,7 +1208,7 @@ public class SysUserController extends BaseController {
     @GetMapping(value = "/getUserModificationRecords")
     public HttpResult getUserModificationRecords(@RequestParam("userId") String userId) throws IllegalAccessException {
         List<SysUserRecord> userList = SpringUtil.getBean(SysUserRecordMapper.class).queryByUserId(userId);
-        if (CollectionUtils.isEmpty(userList)){
+        if (CollectionUtils.isEmpty(userList)) {
             return HttpResult.ok(new ArrayList[0]);
         }
         SysUserInfoQuery sysUserVo = new SysUserInfoQuery();
@@ -1288,7 +1244,7 @@ public class SysUserController extends BaseController {
         }
         //查询详情信息
         SysUserInfo userInfo = sysUserInfoService.getById(userId);
-        if (StringUtils.isNotEmpty(userInfo.getLiveAddress())){
+        if (StringUtils.isNotEmpty(userInfo.getLiveAddress())) {
             userInfo.setLiveAddressString(userInfo.getLiveAddress().split(","));
         }
         //查询用户绑定的银行卡信息
@@ -1317,7 +1273,7 @@ public class SysUserController extends BaseController {
      * 代理人和渠道添加批量设置管理人
      */
     @PostMapping("updateManagementPersonnel")
-    public HttpResult updateManagementPersonnel(@RequestBody UpdateManagementDto managementDto){
+    public HttpResult updateManagementPersonnel(@RequestBody UpdateManagementDto managementDto) {
         return sysUserService.updateManagementPersonnel(managementDto);
     }
 
@@ -1326,7 +1282,7 @@ public class SysUserController extends BaseController {
      * 代理人和渠道取消管理人
      */
     @PostMapping("cancelManagementPersonnel")
-    public HttpResult cancelManagementPersonnel(@RequestBody UpdateManagementDto managementDto){
+    public HttpResult cancelManagementPersonnel(@RequestBody UpdateManagementDto managementDto) {
         return sysUserService.cancelManagementPersonnel(managementDto);
     }
 
@@ -1344,20 +1300,19 @@ public class SysUserController extends BaseController {
     }
 
 
-
     /**
      * 代理人和渠道用户查询
      */
     @PostMapping("selectForAgentsAndChannelsPage")
-    public HttpResult selectForAgentsAndChannelsPage(@RequestBody PageDto<SysUserDto> pageDto){
+    public HttpResult selectForAgentsAndChannelsPage(@RequestBody PageDto<SysUserDto> pageDto) {
         return HttpResult.ok(sysUserService.selectForAgentsAndChannelsPage(pageDto));
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/24 17:37
-     *  @Description: 电销管理人数据列表
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/24 17:37
+     * @Description: 电销管理人数据列表
      */
     @ApiOperation(value = "电销管理人数据列表")
     @GetMapping(value = "/findDxUserList")

+ 36 - 17
src/main/java/com/ydtech/modules/admin/controller/websocket/PCSocketServer.java

@@ -1,19 +1,12 @@
 package com.ydtech.modules.admin.controller.websocket;
 
-import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.config.SpringContextUtils;
 import com.ydtech.modules.admin.constants.SystemType;
-import com.ydtech.modules.admin.dao.SysDeptMapper;
-import com.ydtech.modules.admin.model.SysDept;
-import com.ydtech.modules.admin.model.SysGeographyPosition;
-import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.IpInfoDto;
+import com.ydtech.modules.admin.model.dto.LocationResponse;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
-import com.ydtech.modules.admin.service.SysGeographyPositionRecordService;
-import com.ydtech.modules.admin.service.SysGeographyPositionService;
 import com.ydtech.modules.admin.service.SysPcAddressService;
 import com.ydtech.modules.admin.service.SysUserService;
 import lombok.extern.slf4j.Slf4j;
@@ -22,7 +15,7 @@ import org.springframework.stereotype.Component;
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
-import java.util.Date;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -36,6 +29,10 @@ public class PCSocketServer {
 
     private Session session;
 
+    public final static String URL = "https://api.map.baidu.com/location/ip?";
+
+    public final static String AK = "UuGafLbAJs9kYJsRg2cxCLwAscGZg1Jj";
+
     private static Map<String, Session> sessionClientMap = new ConcurrentHashMap<>();
 
     /**静态变量,用来记录当前在线连接数*/
@@ -69,15 +66,16 @@ public class PCSocketServer {
     public void onMessage(String message, Session session) {
         JSONObject jsonObject = JSONObject.parseObject(message);
         String userId = jsonObject.getString("userId");
-        String longitude = jsonObject.getString("lng");
-        String latitude = jsonObject.getString("lat");
-        String province = jsonObject.getString("prov");
-        String city = jsonObject.getString("city");
-        String district = jsonObject.getString("district");
+//        String longitude = jsonObject.getString("lng");
+//        String latitude = jsonObject.getString("lat");
+//        String province = jsonObject.getString("prov");
+//        String city = jsonObject.getString("city");
+//        String district = jsonObject.getString("district");
         String ip = jsonObject.getString("ip");
         String systemType = jsonObject.getString("systemType");
-        saveLocationData(userId, latitude, longitude,province,city,district,ip,systemType);
+        saveLocationData(userId,ip,systemType);
         log.info("服务端收到PC用户消息:{} ,主体:{}", message, userId);
+
         sendMessage("服务端已收到PC用户信息:" +message);
     }
 
@@ -116,13 +114,28 @@ public class PCSocketServer {
         this.session.getAsyncRemote().sendText(message);
     }
 
-    public void saveLocationData(String userId, String latitude, String longitude,
-                                 String province,String city,String district,
+    public void saveLocationData(String userId,
                                  String ip,String systemType) {
         SysPcAddressService sysPcAddressService = SpringContextUtils.getBean(SysPcAddressService.class);
         SysUserService sysUserService = SpringContextUtils.getBean(SysUserService.class);
         if (SystemType.ST_1.getCode().equals(systemType)) {
             try {
+                SearchHttpAK searchHttpAK = new SearchHttpAK();
+
+                Map params = new LinkedHashMap<String, String>();
+                params.put("ip", ip);
+                params.put("coor", "bd09ll");
+                params.put("ak", AK);
+
+                LocationResponse locationResponse = searchHttpAK.requestGetAK(URL, params);
+                String province = locationResponse.getContent().getAddressDetail().getProvince();
+                String city = locationResponse.getContent().getAddressDetail().getCity();
+                String district = locationResponse.getContent().getAddressDetail().getDistrict();
+
+                String longitude = locationResponse.getContent().getPoint().getX();
+                String latitude = locationResponse.getContent().getPoint().getY();
+
+
                 IpInfoDto ipInfoDto = new IpInfoDto();
                 ipInfoDto.setIp(ip);
                 ipInfoDto.setLng(longitude);
@@ -138,4 +151,10 @@ public class PCSocketServer {
         }
     }
 
+
+
+
+
+
+
 }

+ 78 - 0
src/main/java/com/ydtech/modules/admin/controller/websocket/SearchHttpAK.java

@@ -0,0 +1,78 @@
+package com.ydtech.modules.admin.controller.websocket;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.modules.admin.model.dto.LocationResponse;
+import org.springframework.web.util.UriUtils;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class SearchHttpAK {
+
+//    public static String URL = "https://api.map.baidu.com/location/ip?";
+//
+//    public static String AK = "UuGafLbAJs9kYJsRg2cxCLwAscGZg1Jj";
+//
+//    public static void main(String[] args) throws Exception {
+//
+//        SearchHttpAK snCal = new SearchHttpAK();
+//
+//        Map params = new LinkedHashMap<String, String>();
+//        params.put("ip", "111.206.214.37");
+//        params.put("coor", "bd09ll");
+//        params.put("ak", AK);
+//
+//
+//        snCal.requestGetAK(URL, params);
+//    }
+
+    /**
+     * 默认ak
+     * 选择了ak,使用IP白名单校验:
+     * 根据您选择的AK已为您生成调用代码
+     * 检测到您当前的ak设置了IP白名单校验
+     * 您的IP白名单中的IP非公网IP,请设置为公网IP,否则将请求失败
+     * 请在IP地址为xxxxxxx的计算发起请求,否则将请求失败
+     */
+    public LocationResponse requestGetAK(String strUrl, Map<String, String> param) throws Exception {
+        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
+            return null;
+        }
+
+        StringBuffer queryString = new StringBuffer();
+        queryString.append(strUrl);
+        for (Map.Entry<?, ?> pair : param.entrySet()) {
+            queryString.append(pair.getKey() + "=");
+            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
+            //    queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
+            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
+        }
+
+        if (queryString.length() > 0) {
+            queryString.deleteCharAt(queryString.length() - 1);
+        }
+
+        java.net.URL url = new URL(queryString.toString());
+        System.out.println(queryString.toString());
+        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
+        httpConnection.connect();
+
+        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
+        BufferedReader reader = new BufferedReader(isr);
+        StringBuffer buffer = new StringBuffer();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            buffer.append(line);
+        }
+        reader.close();
+        isr.close();
+        System.out.println("AK: " + buffer.toString());
+        return JSONObject.parseObject(buffer.toString(), LocationResponse.class);
+    }
+}

+ 6 - 4
src/main/java/com/ydtech/modules/admin/dao/SysAgencyLeaderMapper.java

@@ -4,11 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.admin.model.SysAgencyLeader;
-import com.ydtech.modules.admin.model.dto.AgencyUserInsAreaDto;
-import com.ydtech.modules.admin.model.dto.DeptBalanceDto;
-import com.ydtech.modules.admin.model.dto.SysAgencyLeaderListDto;
-import com.ydtech.modules.admin.model.dto.SysAgencyLeaderPageDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.AgencyUserInsAreaVo;
+import com.ydtech.modules.admin.model.vo.CountUserNumVo;
 import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -51,5 +49,9 @@ public interface SysAgencyLeaderMapper extends BaseMapper<SysAgencyLeader> {
     IPage<SysAgencyLeader> queryLeaderPage(Page page,@Param("dto") SysAgencyLeaderPageDto sysAgencyLeaderPageDto);
 
     int updateByIds(@Param("dto") SysAgencyLeaderListDto sysAgencyLeaderDto);
+
+    List<CountUserNumVo> queryWorkByFive(@Param("workIds") List<String> workIds,@Param("dto") PartnerCountDto partnerCountDto);
+
+    List<CountUserNumVo> queryWorkByFiveTime(@Param("workIds") List<String> workIds,@Param("dto") PartnerCountDto partnerCountDto);
 }
 

+ 8 - 0
src/main/java/com/ydtech/modules/admin/dao/SysPartnerMapper.java

@@ -49,5 +49,13 @@ public interface SysPartnerMapper extends BaseMapper<SysPartner> {
     List<CountUserNumVo> queryPartnerByTimes(@Param("userId") String userId,@Param("dto") PartnerCountDto partnerCountDto);
 
     List<CountUserNumVo> queryPartnerByTime(@Param("userId") String userId,@Param("dto") PartnerCountDto partnerCountDto);
+
+    List<CountUserNumVo> queryDeptByFive(@Param("deptIds") List<String> deptIds, @Param("dto") PartnerCountDto partnerCountDto);
+
+    List<CountUserNumVo> queryDeptByFiveTime(@Param("deptIds") List<String> deptIds,@Param("dto") PartnerCountDto partnerCountDto);
+
+    List<CountUserNumVo> queryUserByFive(@Param("deptIds") List<String> deptIds,@Param("dto") PartnerCountDto partnerCountDto);
+
+    List<CountUserNumVo> queryUserByFiveTime(@Param("deptIds") List<String> deptIds,@Param("dto")  PartnerCountDto partnerCountDto);
 }
 

+ 18 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserAgentTrackMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+
+/**
+* @author dongxin
+* @description 针对表【sys_user_agent_track(个代用户认证审核轨迹表)】的数据库操作Mapper
+* @createDate 2024-11-04 14:57:40
+* @Entity generator.domain.SysUserAgentTrack
+*/
+public interface SysUserAgentTrackMapper extends BaseMapper<SysUserAgentTrack> {
+
+}
+
+
+
+

+ 16 - 1
src/main/java/com/ydtech/modules/admin/dao/SysUserBankCardMapper.java

@@ -29,7 +29,22 @@ public interface SysUserBankCardMapper extends BaseMapper<SysUserBankCard> {
 
     List<SysUserBankCardHistory> getUserBankCardHistoryList(@Param("sysUserBankCardHistory") SysUserBankCardHistory sysUserBankCardHistory);
 
-    @Select("SELECT u.mobile, u.identity,u.identity_time, b.real_user_name AS user_name,b.user_id, b.bank_number FROM sys_user_bank_card b INNER JOIN sys_user u ON u.id = b.user_id WHERE b.is_default = 1 AND b.user_id = #{userId}")
+    @Select("SELECT " +
+            "  u.mobile, " +
+            "  u.identity, " +
+            "  u.identity_time, " +
+            "  b.real_user_name AS user_name, " +
+            "  b.user_id, " +
+            "  b.bank_number, " +
+            "  d.management_source " +
+            " FROM " +
+            "  sys_user_bank_card b " +
+            "  INNER JOIN sys_user u ON u.id = b.user_id " +
+            "  INNER JOIN sys_dept d ON u.dept_id = d.id " +
+            "   " +
+            " WHERE " +
+            "  b.is_default = 1  " +
+            "  AND b.user_id = #{userId}")
     SysUserBankCard selectByIdPay(@Param("userId") String userId);
 }
 

+ 42 - 30
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -442,71 +442,74 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return 电销人员工号列表
      */
     List<String> getTelemarketingPersonnelUserId();
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/8/29 17:52
-     *  @Description: 按照省市区查询数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/8/29 17:52
+     * @Description: 按照省市区查询数据
      */
     List<QxFrontlineAgentDto> queryQxFrontlineAgentList(@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/8/30 18:47
-     *  @Description: 分页查询人员数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/8/30 18:47
+     * @Description: 分页查询人员数据
      */
     Page<QxFrontlineAgentDto> findUserListByParam(@Param("page") Page page, @Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/8/30 18:47
-     *  @Description: 更新
+     * @version
+     * @author: hxl
+     * @Date: 2024/8/30 18:47
+     * @Description: 更新
      */
     Integer updateManagementPersonnel(@Param("managementDto") UpdateManagementDto managementDto);
 
 
-    List<SysUser> getAllAgent(String pid ,  List<String>  ids);
+    List<SysUser> getAllAgent(String pid, List<String> ids);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/24 17:35
-     *  @Description:  查询电销的管理人列表
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/24 17:35
+     * @Description: 查询电销的管理人列表
      */
     List<SysUser> findDxUserList();
 
     /**
      * 根据部门获取代理人渠道数
+     *
      * @param sysUserDeptRelationshipVo
      * @return
      */
-    Page<SysUser> findQXDLUserListNew(@Param("page") Page page,@Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
+    Page<SysUser> findQXDLUserListNew(@Param("page") Page page, @Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
 
 
-    Page<SysUser>  getChanelList(@Param("page") Page page,@Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
+    Page<SysUser> getChanelList(@Param("page") Page page, @Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
 
     List<SysUser> selectByParams(HashMap<String, Object> params);
 
-    IPage<SysUserBaseVO> selectForAgentsAndChannelsPage(@Param("page") Page page,@Param("sysUserVO") SysUserDto sysUserVO);
+    IPage<SysUserBaseVO> selectForAgentsAndChannelsPage(@Param("page") Page page, @Param("sysUserVO") SysUserDto sysUserVO);
 
-    List<Map<String,String>> selectHxUserList(@Param("sysUserDto") SysUserDto sysUserDto);
+    List<Map<String, String>> selectHxUserList(@Param("sysUserDto") SysUserDto sysUserDto);
 
     Integer cancelManagementPersonnel(@Param("managementDto") UpdateManagementDto managementDto);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/25 19:25
-     *  @Description: 通过用户id查询电销组下的用户id
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/25 19:25
+     * @Description: 通过用户id查询电销组下的用户id
      */
     List<String> getGroupByUserId(@Param("userId") String userId);
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/26 18:11
-     *  @Description:  通过机构id查询后线用户数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/26 18:11
+     * @Description: 通过机构id查询后线用户数据
      */
     List<SysUser> getLeadListDeptId(@Param("deptId") String deptId);
 
@@ -519,10 +522,19 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<SysUser> findHxUserListNew();
 
 
-    AppUserInfoVo queryByUserId(@Param("userId")String userId);
+    AppUserInfoVo queryByUserId(@Param("userId") String userId);
 
     List<SysUser> selectByParamsTreeUser(HashMap<String, Object> params);
 
+    /**
+     * 通过 机构id 和 角色id查询用户
+     *
+     * @param roleId 角色id
+     * @param deptId 机构id
+     * @return 用户信息
+     */
+    SysUser getByRoleIdAndDeptId(@Param("roleId") String roleId, @Param("deptId") String deptId);
+
 }
 
 

+ 17 - 19
src/main/java/com/ydtech/modules/admin/model/SysUser.java

@@ -127,7 +127,7 @@ public class SysUser extends BaseEntity {
     private String leaderName;
 
 
-    @ApiModelProperty(value = "三要素验证")
+    @ApiModelProperty(value = "三要素验证 0.未认证 1. 认证成功 2. 认证驳回")
     @TableField(value = "factor_verify")
     private Integer factorVerify;
 
@@ -236,14 +236,6 @@ public class SysUser extends BaseEntity {
     @ApiModelProperty(value = "合伙人等级;1,2,3,4,5")
     private Integer level;
 
-    @ApiModelProperty(value = "推荐人id")
-    @TableField(exist = false)
-    private String suggestId;
-
-    @ApiModelProperty(value = "推荐人name")
-    @TableField(exist = false)
-    private String suggestName;
-
     @ApiModelProperty(value = "申请机构来源 1 渠道 2 个代")
     @TableField(value = "dept_source")
     private String deptSource;
@@ -252,6 +244,10 @@ public class SysUser extends BaseEntity {
     @TableField(value = "dept_type")
     private String deptType;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "是否判断锁定状态 0.否 1. 是 默认判断")
+    private Integer isLock = 1;
+
     /**
      * 验证用户
      *
@@ -266,16 +262,18 @@ public class SysUser extends BaseEntity {
         }
 
         // 账号锁定
-        if (user.getStatus() == 0) {
-            throw new SystemException("账号已被锁定,请联系管理员");
-        }
-        // 新注册用户需要审核
-        if (user.getStatus() == 2) {
-            throw new SystemException("新注册用户需要审核,请联系管理员");
-        }
-        // 新注册用户审核不通过
-        if (user.getStatus() == 3) {
-            throw new SystemException("新注册用户审核不通过,请联系管理员");
+        if(user.getIsLock().equals(1)){
+            if (user.getStatus() == 0) {
+                throw new SystemException("账号已被锁定,请联系管理员");
+            }
+            // 新注册用户需要审核
+            if (user.getStatus() == 2) {
+                throw new SystemException("新注册用户需要审核,请联系管理员");
+            }
+            // 新注册用户审核不通过
+            if (user.getStatus() == 3) {
+                throw new SystemException("新注册用户审核不通过,请联系管理员");
+            }
         }
     }
 

+ 45 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthDto.java

@@ -0,0 +1,45 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@ApiModel("个代认证DTO")
+public class AgentAuthDto {
+
+    @NotBlank(message = "用户id为空")
+    @ApiModelProperty(value = "用户id",required = true)
+    private String userId;
+
+    @NotBlank(message = "姓名不能为空")
+    @ApiModelProperty(value = "姓名",required = true)
+    private String name;
+
+    @NotBlank(message = "手机号不能为空")
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+
+    @NotBlank(message = "身份证号不能为空")
+    @ApiModelProperty(value = "身份证")
+    private String identity;
+
+    @NotBlank(message = "身份证有效期不能为空")
+    @ApiModelProperty(value = "身份证有效期")
+    private String identityTime;
+
+    @NotBlank(message = "开户账号不能为空")
+    @ApiModelProperty(value = "开户账号")
+    private String bankName;
+
+    @NotBlank(message = "开户行不能为空")
+    @ApiModelProperty(value = "开户行")
+    private String accountno;
+
+    @ApiModelProperty("影像信息")
+    private List<EsmUserImageVo> esmUserImageVo;
+}

+ 17 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthResultDto.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@ApiModel("个代认证审核结果获取DTO")
+public class AgentAuthResultDto {
+
+    @NotBlank(message = "用户id为空")
+    @ApiModelProperty(value = "用户id",required = true)
+    private String userId;
+
+}

+ 30 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentSubmitDto.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@ApiModel("个代资料提交DTO")
+public class AgentSubmitDto {
+
+
+    @NotBlank(message = "开户账号不能为空")
+    @ApiModelProperty(value = "开户账号")
+    private String bankName;
+
+    @NotBlank(message = "开户行不能为空")
+    @ApiModelProperty(value = "开户行")
+    private String accountno;
+
+    @NotBlank(message = "用户id为空")
+    @ApiModelProperty(value = "用户id",required = true)
+    private String userId;
+
+    @ApiModelProperty("影像信息")
+    private List<EsmUserImageVo> esmUserImageVo;
+}

+ 40 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentUserNewDto.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@ApiModel("个代用户DTO")
+public class AgentUserNewDto {
+
+    @NotBlank(message = "姓名不能为空")
+    @ApiModelProperty(value = "姓名",required = true)
+    private String name;
+
+    @NotBlank(message = "手机号不能为空")
+    @ApiModelProperty(value = "手机号",required = true)
+    private String mobile;
+
+    @NotBlank(message = "密码不能为空")
+    @ApiModelProperty(value = "密码" ,required = true)
+    private String password;
+
+    @NotBlank(message = "手机验证码不能为空")
+    @ApiModelProperty(value = "手机验证码",required = true)
+    private String mobileMsg;
+
+    @NotBlank(message = "推荐人ID不能为空")
+    @ApiModelProperty(value = "推荐人ID",required = true)
+    private String referrerId;
+
+    @NotBlank(message = "推荐人名称不能为空")
+    @ApiModelProperty(value = "推荐人名称",required = true)
+    private String referrerName;
+
+    @NotBlank(message = "个代、出单员标识不能为空")
+    @ApiModelProperty(value = "个代、出单员标识:2个代、1出单员",required = true)
+    private String flag;
+}

+ 44 - 0
src/main/java/com/ydtech/modules/admin/model/dto/LocationResponse.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.admin.model.dto;
+
+import lombok.Data;
+
+@Data
+public class LocationResponse {
+
+    private String address;
+    private Content content;
+    private int status;
+
+
+    @Data
+    public static class Content {
+
+        private String address;
+        private AddressDetail addressDetail;
+        private Point point;
+
+        @Data
+        public static class AddressDetail {
+
+            private String adcode;
+            private String city;
+            private int cityCode;
+            private String district;
+            private String province;
+            private String street;
+            private String streetNumber;
+
+            // Getters and Setters
+        }
+        @Data
+        public static class Point {
+
+            private String x;
+            private String y;
+
+
+        }
+    }
+
+
+}

+ 5 - 0
src/main/java/com/ydtech/modules/admin/model/dto/PartnerCountDto.java

@@ -14,6 +14,11 @@ public class PartnerCountDto {
 
     @ApiModelProperty(value = "合伙人等级类型:1,2,3,4,5")
     private int type;
+    /**
+     * 五级合伙人参数
+     */
+    @ApiModelProperty(value = "类型:1:工作室,2:团队 3:代理人")
+    private int number;
 
 
 }

+ 9 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamDto.java

@@ -30,6 +30,15 @@ public class SysUserTeamDto implements Serializable {
     @ApiModelProperty(value = "状态")
     private Integer status;
 
+    @ApiModelProperty(value = "等级")
+    private Integer level;
+
+    @ApiModelProperty(value = "等级名称")
+    private String levelName;
+
+    @ApiModelProperty(value = "更新时间")
+    private String updateTime;
+
     public SysUserTeamDto(SysUser sysUser) {
         this.id = sysUser.getId();
         this.name = sysUser.getName();

+ 9 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamInfoDto.java

@@ -56,6 +56,15 @@ public class SysUserTeamInfoDto {
     @ApiModelProperty(value = "推荐人姓名")
     private String referrersName;
 
+    @ApiModelProperty(value = "角色")
+    private String roleName;
+
+    @ApiModelProperty(value = "来源")
+    private String source;
+
+    @ApiModelProperty(value = "通过描述")
+    private String passDesc;
+
     public SysUserTeamInfoDto(SysUser sysUser, SysDept sysDept, SysDept  organization, SysUserInfo sysUserInfo) {
         this.organization = organization.getName();
         this.deptId = sysDept.getId();

+ 41 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamStaticDto.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("认证数量统计信息")
+@Data
+public class SysUserTeamStaticDto {
+
+    @ApiModelProperty("日期")
+    private String timeDay;
+
+    @ApiModelProperty("全部")
+    private Integer allCount;
+
+    @ApiModelProperty("未审核")
+    private Integer noCount;
+
+    @ApiModelProperty("审核通过")
+    private Integer yesCount;
+
+    @ApiModelProperty("一级代理")
+    private Integer oneCount;
+
+    @ApiModelProperty("二级代理")
+    private Integer twoCount;
+
+    @ApiModelProperty("三级代理")
+    private Integer threeCount;
+
+    @ApiModelProperty("临时代理")
+    private Integer tempCount;
+
+
+    @ApiModelProperty("图表数据")
+    private JSONObject staticsData;
+
+}

+ 5 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysAmountAuditingEntity.java

@@ -204,6 +204,11 @@ public class SysAmountAuditingEntity implements Serializable {
     @TableField(value = "account_id")
     private String accountId;
 
+    /***
+     *   是否自动审批1-是
+     */
+    private int approval;
+
     /***
      *  机构来源
      */

+ 119 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysUserAgentTrack.java

@@ -0,0 +1,119 @@
+package com.ydtech.modules.admin.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 个代用户认证审核轨迹表
+ * @TableName sys_user_agent_track
+ */
+@TableName(value ="sys_user_agent_track")
+@Data
+public class SysUserAgentTrack implements Serializable {
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private String userId;
+
+    /**
+     * 状态  0.注册 1.认证成功 2.认证失败 3. 银行卡认证成功 4. 银行卡认证失败  5.审核成功 6.审核失败
+     */
+    private Integer status;
+
+    /**
+     * 审核人Id
+     */
+    private String approveId;
+
+    /**
+     * 审核人
+     */
+    private String approveName;
+
+    /**
+     * 审核认证信息
+     */
+    private String approveMess;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        SysUserAgentTrack other = (SysUserAgentTrack) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getApproveId() == null ? other.getApproveId() == null : this.getApproveId().equals(other.getApproveId()))
+            && (this.getApproveName() == null ? other.getApproveName() == null : this.getApproveName().equals(other.getApproveName()))
+            && (this.getApproveMess() == null ? other.getApproveMess() == null : this.getApproveMess().equals(other.getApproveMess()))
+            && (this.getCreateBy() == null ? other.getCreateBy() == null : this.getCreateBy().equals(other.getCreateBy()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getApproveId() == null) ? 0 : getApproveId().hashCode());
+        result = prime * result + ((getApproveName() == null) ? 0 : getApproveName().hashCode());
+        result = prime * result + ((getApproveMess() == null) ? 0 : getApproveMess().hashCode());
+        result = prime * result + ((getCreateBy() == null) ? 0 : getCreateBy().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", status=").append(status);
+        sb.append(", approveId=").append(approveId);
+        sb.append(", approveName=").append(approveName);
+        sb.append(", approveMess=").append(approveMess);
+        sb.append(", createBy=").append(createBy);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 6 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysUserBankCard.java

@@ -107,4 +107,10 @@ public class SysUserBankCard implements Serializable {
     @TableField(exist = false)
     private String identityTime;
 
+    /**
+     * 机构来源(1-渠道、2-个代)
+     */
+    @TableField(exist = false)
+    private String managementSource;
+
 }

+ 3 - 0
src/main/java/com/ydtech/modules/admin/model/vo/AAPLoginVo.java

@@ -15,4 +15,7 @@ public class AAPLoginVo {
     private int type;
     @ApiModelProperty(value = "类型:合伙人等级")
     private int level;
+
+    @ApiModelProperty("用户id")
+    private String userId;
 }

+ 1 - 1
src/main/java/com/ydtech/modules/admin/model/vo/AppCustomerManagementQueryVo.java

@@ -24,7 +24,7 @@ public class AppCustomerManagementQueryVo implements Serializable {
     @ApiModelProperty("工号,用户名,手机号")
     private String criteria;
 
-    @ApiModelProperty("认证状态 1 认证成功 2 认证失败")
+    @ApiModelProperty("认证状态0.未认证 1 认证成功")
     private String authenticationStatus;
 
     @ApiModelProperty(value = "每页页数")

+ 5 - 0
src/main/java/com/ydtech/modules/admin/model/vo/LevelPartnerVo.java

@@ -3,6 +3,8 @@ package com.ydtech.modules.admin.model.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class LevelPartnerVo {
 
@@ -14,4 +16,7 @@ public class LevelPartnerVo {
 
     @ApiModelProperty(value = "人数")
     private int deptManNum;
+
+    @ApiModelProperty(value = "下级合伙人的所有id")
+    private List<String> PartnerIds;
 }

+ 1 - 1
src/main/java/com/ydtech/modules/admin/model/vo/PartnerCountVo.java

@@ -28,7 +28,7 @@ public class PartnerCountVo {
 
     @ApiModelProperty(value = "团队人数")
     private Integer deptManSum;
-
+    @ApiModelProperty(value = "曲线图")
     private List<CountUserNumVo> countUserNumVoList;
 
 }

+ 0 - 2
src/main/java/com/ydtech/modules/admin/model/vo/SysUser2Vo.java

@@ -25,8 +25,6 @@ public class SysUser2Vo {
     @ApiModelProperty("是否是合伙人")
     private String isPartner;
 
-    @ApiModelProperty("推荐人Id")
-    private String referrerId;
 
     @ApiModelProperty("影像信息")
     private List<EsmUserImageVo> esmUserImageVo;

+ 31 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysUserAgentVo.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserInfo;
+import com.ydtech.modules.esm.model.vo.EsmUserImageQueryVo;
+import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("个代结果")
+public class SysUserAgentVo {
+
+    @ApiModelProperty("认证/审核结果")
+    private Integer status;
+
+    @ApiModelProperty("用户信息")
+    private SysUser sysUser;
+
+    @ApiModelProperty("用户详情信息")
+    private SysUserInfo sysUserInfo;
+
+    @ApiModelProperty("影像信息")
+    private List<EsmUserImageQueryVo> esmUserImageVo;
+
+    @ApiModelProperty("审核信息")
+    private String desc;
+}

+ 5 - 1
src/main/java/com/ydtech/modules/admin/service/AppCustomerManagementService.java

@@ -27,5 +27,9 @@ public interface AppCustomerManagementService {
      **/
     HttpResult<SysUserTeamInfoDto> getUserInfo(String userId);
 
-
+    /**
+     * 认证数量统计
+     * @return
+     */
+    HttpResult authStatics(Integer dateType);
 }

+ 4 - 1
src/main/java/com/ydtech/modules/admin/service/SysPartnerService.java

@@ -23,7 +23,7 @@ import java.util.List;
 public interface SysPartnerService extends IService<SysPartner> {
 
 
-    List<SysPartner> queryRecommendAndPartner(String id);
+    List<SysPartner> queryRecommendAndPartner(String id,Integer level);
 
     BasePageResult<SysUserPartner> queryByPage(SysPartnerPageDto sysPartnerPageDto);
 
@@ -70,6 +70,7 @@ public interface SysPartnerService extends IService<SysPartner> {
     CountUserVo getCountUser(CountUserDto countUserDto);
 
     PartnerCountVo getPartnerCount(PartnerCountDto partnerCountDto);
+    PartnerCountVo getFivePartnerCount(PartnerCountDto partnerCountDto);
 
     PartnerProportionVo getPartnerProportion(PartnerCountDto partnerCountDto);
 
@@ -86,4 +87,6 @@ public interface SysPartnerService extends IService<SysPartner> {
     HttpResult<Object> bindWechat(WechatBindVo wechatBindVo, String userId) throws WxErrorException;
 
     String checkBindWechat();
+
+    PartnerInfoFreeVo getLevelPartnerInfo(List<String> partnerIds);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/admin/service/SysSwitchConfigService.java

@@ -96,4 +96,14 @@ public interface SysSwitchConfigService extends BaseIService<SysSwitchConfig> {
      *  @Description:  协议授权开关
      */
     boolean xysqDisplaySwitches();
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/25 11:43
+     *  @Description:  余额提现走线上或者线下
+     */
+    boolean getBalanceExtractStatus();
+
+
 }

+ 20 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserAgentTrackService.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+
+/**
+* @author dongxin
+* @description 针对表【sys_user_agent_track(个代用户认证审核轨迹表)】的数据库操作Service
+* @createDate 2024-11-04 14:57:40
+*/
+public interface SysUserAgentTrackService extends IService<SysUserAgentTrack> {
+
+    /**
+     * 认证审核轨迹查询
+     * @param id
+     * @param status
+     * @return
+     */
+    SysUserAgentTrack queryTrack(String id, Integer status);
+}

+ 44 - 1
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -14,6 +14,7 @@ import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.HttpServletRequest;
@@ -131,7 +132,7 @@ public interface SysUserService extends BaseIService<SysUser> {
 
     HttpResult saveUserInfoByPartner(SysUser2Vo sysUserVo);
 
-    HttpResult saveUserInfo1(SysUser2Vo sysUserVo,SysDeptVo sysDeptVo);
+    HttpResult saveUserInfo1(SysUser2Vo sysUserVo);
 
     /**
      * 人员修改
@@ -303,6 +304,48 @@ public interface SysUserService extends BaseIService<SysUser> {
     List<SysUser> getTreeUser();
 
 
+    void addInfo(SysUser sysUser);
+
+    /**
+     * 个代注册
+     *
+     * @param dto 注册dto
+     * @param recommender 推荐人信息
+     * @return
+     */
+    String agentRegist(AgentUserNewDto dto, SysUser recommender);
+
+    /**
+     * 个代认证
+     *
+     * @param sysUser 用户信息
+     * @param dto 认证dto
+     */
+    SysUserAgentVo agentAuth(SysUser sysUser, AgentAuthDto dto);
+
+    /**
+     * 个代(认证/审核)结果获取
+     * @param sysUser
+     * @param dto
+     */
+    SysUserAgentVo getAuthResult(SysUser sysUser, AgentAuthResultDto dto);
+
+    /**
+     * 个代资料提交
+     * @param sysUser
+     * @param dto
+     * @return
+     */
+    void agentSubmit(SysUser sysUser, AgentSubmitDto dto);
+
+    /**
+     *
+     * @param roleId 角色id
+     * @param deptId 机构id
+     * @return 用户信息
+     */
+    SysUser getByRoleIdAndDeptId(String roleId, String deptId);
+
 }
 
 

+ 210 - 5
src/main/java/com/ydtech/modules/admin/service/impl/AppCustomerManagementImpl.java

@@ -1,26 +1,40 @@
 package com.ydtech.modules.admin.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.constants.enums.dict.organization.OrganizationSource;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.modules.admin.model.SysDept;
-import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.SysUserInfo;
-import com.ydtech.modules.admin.model.SysUserTrack;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.constants.RoleConstants;
+import com.ydtech.modules.admin.constants.UserAgentStatus;
+import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamInfoDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.utils.DateUtil;
 import com.ydtech.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
+import org.apache.bcel.generic.LADD;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
@@ -31,12 +45,17 @@ public class AppCustomerManagementImpl implements AppCustomerManagementService {
 
     private final SysDeptService sysDeptService;
 
+    private final SysUserRoleService sysUserRoleService;
+
+
     private final EsmUserReferrerService esmUserReferrerService;
 
     private final SysUserInfoService sysUserInfoService;
 
     private final SysUserTrackService sysUserTrackService;
 
+    private final SysUserAgentTrackService sysUserAgentTrackService;
+
 
     @Override
     public HttpResult<BasePageResult<SysUserTeamDto>> authenticationQuery(AppCustomerManagementQueryVo managementQueryVo) {
@@ -62,7 +81,7 @@ public class AppCustomerManagementImpl implements AppCustomerManagementService {
             return HttpResult.ok(sysUserBasePageResult);
         }
 
-        BasePageResult<SysUserTeamDto> sysUserBasePageResult = esmUserReferrerService.getTeamUser(managementQueryVo, userId);
+        BasePageResult<SysUserTeamDto> sysUserBasePageResult = esmUserReferrerService.getTeamUser(managementQueryVo, userId,dept);
         return HttpResult.ok(sysUserBasePageResult);
     }
 
@@ -89,7 +108,193 @@ public class AppCustomerManagementImpl implements AppCustomerManagementService {
             sysUserTeamInfoDto.setReferrersId(esmUserReferrer.getReferrerId());
             sysUserTeamInfoDto.setReferrersName(esmUserReferrer.getReferrerName());
         }
+        SysUserRole role = sysUserRoleService.selectByUserId(userId);
+        if(Objects.nonNull(role)){
+            RoleConstants roleConstants = Enum.valueOf(RoleConstants.class, "R" + role.getRoleId());
+            sysUserTeamInfoDto.setRoleName(roleConstants.getName());
+        }
 
+        switch (dept.getManagementSource()){
+            case "1":
+                sysUserTeamInfoDto.setSource(OrganizationSource.OS_1.getDesc());
+                break;
+            case "2":
+                sysUserTeamInfoDto.setSource(OrganizationSource.OS_2.getDesc());
+                break;
+            case "3":
+                sysUserTeamInfoDto.setSource(OrganizationSource.OS_3.getDesc());
+                break;
+        }
+        // 个代
+        if (OrganizationSource.OS_2.getCode().equals(dept.getManagementSource())) {
+            // 实名认证通过
+            if (UserWorkStatus.UWS_8.getCode().equals(sysUser.getStatus())) {
+                SysUserAgentTrack track = sysUserAgentTrackService.queryTrack(sysUser.getId(),
+                        UserAgentStatus.UAS_1.getCode());
+                if (Objects.nonNull(track)) {
+                    String desc = track.getCreateTime() + "由系统认证通过";
+                    sysUserTeamInfoDto.setPassDesc(desc);
+                }
+            // 实名认证未通过
+            } else if(UserWorkStatus.UWS_0.getCode().equals(sysUser.getStatus()) && sysUser.getFactorVerify().equals(2)){
+                SysUserAgentTrack track = sysUserAgentTrackService.queryTrack(sysUser.getId(),
+                        UserAgentStatus.UAS_2.getCode());
+                if (Objects.nonNull(track)) {
+                    String desc = "认证申请被驳回,驳回理由:" + track.getApproveMess();
+                    sysUserTeamInfoDto.setPassDesc(desc);
+                }
+            }
+            // 审核驳回
+            if (UserWorkStatus.UWS_3.getCode().equals(sysUser.getStatus())) {
+                String desc = sysUserTrackService.getApproveMessByUserId(sysUser.getId(),"1");
+                String passDesc = "提交资料申请被驳回,驳回理由:" + desc;
+                sysUserTeamInfoDto.setPassDesc(passDesc);
+            // 审核通过
+            } else {
+                SysUserTrack track = sysUserTrackService.getLastTime(sysUser.getId());
+                if (Objects.nonNull(track)) {
+                    String desc = DateUtil.getDateFormat(track.getApproveTime(),"yyyy-MM-dd HH:mm:ss") + "由"+track.getApproveBy()+"审核通过";
+                    sysUserTeamInfoDto.setPassDesc(desc);
+                }
+            }
+        }
         return HttpResult.ok(sysUserTeamInfoDto);
     }
+
+    @Override
+    public HttpResult authStatics(Integer dateType) {
+        String userId = BaseController.getUserId();
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+        String start = "";
+        String end = "";
+        // 格式化输出
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        // 设置结束时间(当前时间)
+        LocalDateTime endTime = now.withHour(23).withMinute(59).withSecond(59).withNano(0);
+        LocalDateTime startTime = null;
+        // 当天
+        if (dateType.equals(1)){
+            startTime = now.toLocalDate().atStartOfDay();
+        // 七天
+        } else if(dateType.equals(2)){
+            // 获取七天前的日期
+            LocalDateTime sevenDaysAgo = now.minusDays(7);
+            startTime = sevenDaysAgo.toLocalDate().atStartOfDay();
+        // 三十天
+        } else if(dateType.equals(3)){
+            // 获取三十天前的日期
+            LocalDateTime sevenDaysAgo = now.minusDays(30);
+            startTime = sevenDaysAgo.toLocalDate().atStartOfDay();
+        }
+        if(!dateType.equals(0)){
+            start = startTime.format(formatter);
+            end = endTime.format(formatter);
+        }
+        List<SysUserTeamStaticDto> dtos = esmUserReferrerService.authStatics(userId,start,end,dateType);
+
+        /** 前端统计图所需数据组装 start */
+        SysUserTeamStaticDto result = new SysUserTeamStaticDto();
+        JSONObject res = new JSONObject();
+        JSONArray cate = new JSONArray();
+        JSONArray series = new JSONArray();
+        if(CollUtil.isEmpty(dtos)){
+            result.setAllCount(0);
+            result.setOneCount(0);
+            result.setTwoCount(0);
+            result.setThreeCount(0);
+            result.setNoCount(0);
+            result.setTempCount(0);
+            result.setYesCount(0);
+            if (dateType.equals(1)){
+                cate.add("一级代理");
+                cate.add("二级代理");
+                cate.add("三级代理");
+                cate.add("临时代理");
+                series.add(0);
+                series.add(0);
+                series.add(0);
+                series.add(0);
+            }
+        }
+        if (dateType.equals(1)){
+            if(CollUtil.isNotEmpty(dtos)){
+                for (SysUserTeamStaticDto dto : dtos) {
+                    BeanUtils.copyProperties(dto, result);
+                    cate.add("一级代理");
+                    cate.add("二级代理");
+                    cate.add("三级代理");
+                    cate.add("临时代理");
+                    series.add(dto.getOneCount());
+                    series.add(dto.getTwoCount());
+                    series.add(dto.getThreeCount());
+                    series.add(dto.getTempCount());
+                }
+            }
+            res.put("categories", cate);
+            res.put("series", series);
+            result.setStaticsData(res);
+            // 七天
+        } else if(dateType.equals(2) || dateType.equals(3)){
+            Integer totalOne = 0;
+            Integer totalTwo = 0;
+            Integer totalThree = 0;
+            Integer totalTemp = 0;
+            Integer totalAll = 0;
+            Integer totalNo = 0;
+            Integer totalYes = 0;
+
+            JSONObject one = new JSONObject();
+            one.put("name","一级代理");
+            JSONArray oneArray = new JSONArray();
+            JSONObject two = new JSONObject();
+            two.put("name","二级代理");
+            JSONArray twoArray = new JSONArray();
+            JSONObject three = new JSONObject();
+            three.put("name","三级代理");
+            JSONArray threeArray = new JSONArray();
+            JSONObject temp = new JSONObject();
+            temp.put("name","临时代理");
+            JSONArray tempArray = new JSONArray();
+            for (SysUserTeamStaticDto dto : dtos) {
+                totalOne += dto.getOneCount();
+                totalTwo += dto.getTwoCount();
+                totalThree += dto.getThreeCount();
+                totalTemp += dto.getTempCount();
+                totalAll += dto.getAllCount();
+                totalNo += dto.getNoCount();
+                totalYes += dto.getYesCount();
+                oneArray.add(dto.getOneCount());
+                twoArray.add(dto.getTwoCount());
+                threeArray.add(dto.getThreeCount());
+                tempArray.add(dto.getTempCount());
+                cate.add(dto.getTimeDay().substring(5));
+            }
+            one.put("data",oneArray);
+            two.put("data",twoArray);
+            three.put("data",threeArray);
+            temp.put("data",tempArray);
+            series.add(one);
+            series.add(two);
+            series.add(three);
+            series.add(temp);
+            res.put("categories", cate);
+            res.put("series", series);
+            result.setOneCount(totalOne);
+            result.setTwoCount(totalTwo);
+            result.setThreeCount(totalThree);
+            result.setTempCount(totalTemp);
+            result.setAllCount(totalAll);
+            result.setNoCount(totalNo);
+            result.setYesCount(totalYes);
+            result.setStaticsData(res);
+        }else{
+            if(CollUtil.isNotEmpty(dtos)){
+                BeanUtils.copyProperties(dtos.get(0), result);
+            }
+        }
+        /** 前端统计图所需数据组装 end */
+        return HttpResult.ok(result);
+    }
+
 }

+ 20 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysAmountAuditingServiceImpl.java

@@ -24,6 +24,8 @@ import com.ydtech.modules.admin.service.SysAmountAuditingService;
 import com.ydtech.modules.admin.service.SysUserAccountService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.fnc.entity.InsPlyIncome;
+import com.ydtech.modules.lg.model.PushLgEntity;
+import com.ydtech.modules.lg.service.PushLgEntityService;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.utils.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
@@ -51,6 +53,9 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     @Autowired
     private SysUserAccountHistoryMapper sysUserAccountHistoryMapper;
 
+    @Autowired
+    private PushLgEntityService pushLgEntityService;
+
     /**
      *  @version
      *  @author: hxl
@@ -137,6 +142,21 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         }
     }
 
+
+    public void sendLgParams(SysAmountAuditingHistory sysAmountAuditingHistory,SysAmountAuditingEntity sysAmountAuditingEntity){
+        PushLgEntity lgEntity = new PushLgEntity();
+        lgEntity.setApplicationTime(new Date());
+        lgEntity.setBusinessUmber(sysAmountAuditingEntity.getId());
+        lgEntity.setPayee(sysAmountAuditingEntity.getUserName());
+        lgEntity.setPayeeId(String.valueOf(sysAmountAuditingEntity.getUserId()));
+        lgEntity.setReceivingAccount(sysAmountAuditingEntity.getBankNumber());
+        lgEntity.setExtractMoney(sysAmountAuditingHistory.getAmount());
+        lgEntity.setServiceCharge(null);
+        lgEntity.setExtractStatus(sysAmountAuditingHistory.getAuditingStatus());
+        pushLgEntityService.sendLgData(lgEntity);
+    }
+
+
     @Override
     public SysAmountAuditingEntity getByUserId(String userId,String amountStatus) {
         return baseMapper.getByUserId(userId,amountStatus);

+ 234 - 92
src/main/java/com/ydtech/modules/admin/service/impl/SysPartnerServiceImpl.java

@@ -5,6 +5,7 @@ import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.AlipayConfig;
@@ -16,6 +17,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.aop.exception.DescribeException;
+import com.ydtech.constants.enums.WechatOpenSystem;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.dao.*;
@@ -32,6 +34,7 @@ import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
@@ -52,6 +55,7 @@ import java.util.stream.Collectors;
  * @author makejava
  * @since 2024-08-01 11:20:57
  */
+@Slf4j
 @Service("sysPartnerService")
 public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPartner> implements SysPartnerService {
     @Resource
@@ -94,14 +98,14 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
     private SysProportionConfigMapper sysProportionConfigMapper;
     @Resource
     private EsmUserReferrerMapper esmUserReferrerMapper;
-    @Resource
-    private WxMpService wxMpService;
 
+    @Resource
+    private Map<String, WxMpService> wxMpService;
 
     @Override
-    public List<SysPartner> queryRecommendAndPartner(String id) {
+    public List<SysPartner> queryRecommendAndPartner(String id,Integer level) {
         List<SysPartner> sysPartnerList = sysPartnerMapper.selectList(new LambdaQueryWrapper<SysPartner>().eq(SysPartner::getDelFlag, 1)
-                .likeRight(SysPartner::getUserId, id).orderByDesc(SysPartner::getId));
+                .likeRight(SysPartner::getUserId, id).lt(SysPartner::getType,level).orderByDesc(SysPartner::getId));
         if (sysPartnerList.size() > 0) {
             for (SysPartner sysPartner : sysPartnerList) {
                 SysUser sysUser = sysUserMapper.selectById(sysPartner.getUserId());
@@ -897,11 +901,11 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         //按等级查询
         Integer partnerType = partnerInfoDto.getPartnerType();
         if (partnerType != null) {
-            List<SysPartner> sysPartnerList1 = listMap.get(partnerType + 1);
+            List<SysPartner> sysPartnerList1 = listMap.get(partnerType + sysPartner.getType());
 
             if (sysPartnerList1 != null) {
                 AppSysPartnerVo appSysPartnerVo = new AppSysPartnerVo();
-                appSysPartnerVo.setPartnerType(partnerType + 1);
+                appSysPartnerVo.setPartnerType(partnerType + sysPartner.getType());
                 //下级合伙人数
                 appSysPartnerVo.setPartnerNumber(sysPartnerList1.size());
                 List<String> ids = sysPartnerList1.stream().map(SysPartner::getUserId).collect(Collectors.toList());
@@ -1601,12 +1605,15 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         if (sysRelationPersonList.size() > 0) {
             List<String> collect = sysRelationPersonList.stream().map(SysRelationPerson::getSuggestId).collect(Collectors.toList());
 
-            if (collect.size() > 4) {
-                List<String> collect1 = collect.stream().limit(4).collect(Collectors.toList());
-                ids.addAll(collect1);
-            } else {
+//            if (collect.size() > 4) {
+//                List<String> collect1 = collect.stream().limit(4).collect(Collectors.toList());
+//                ids.addAll(collect1);
+//            } else {
+//                ids.addAll(collect);
+//
+//            }
+            if (collect.size()>0) {
                 ids.addAll(collect);
-
             }
 
         }
@@ -1616,12 +1623,15 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         if (sysRelationList.size() > 0) {
 
             List<String> collect1 = sysRelationList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
-            if (collect1.size() > 4) {
-                List<String> collect2 = collect1.stream().limit(4).collect(Collectors.toList());
-                ids.addAll(collect2);
-            } else {
+//            if (collect1.size() > 4) {
+//                List<String> collect2 = collect1.stream().limit(4).collect(Collectors.toList());
+//                ids.addAll(collect2);
+//            } else {
+//                ids.addAll(collect1);
+//
+//            }
+            if (collect1.size() >0) {
                 ids.addAll(collect1);
-
             }
         }
         if (CollectionUtil.isNotEmpty(ids)) {
@@ -1773,48 +1783,49 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         partnerCountDto.setType(type + partnerCountDto.getType());
         //查询登陆人下所有合伙人
         List<SysPartner> sysPartnerList = sysPartnerMapper.queryPartnerById(userId, partnerCountDto);
-        if (CollectionUtil.isEmpty(sysPartnerList)) return partnerCountVo;
-
-
-        //统计每一个等级的合伙人数
-        if (type == 1) {
-            //1
-            List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
-            partnerCountVo.setOnePartnerNum(onePartners.size());
-            //2
-            List<SysPartner> twoPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 2).collect(Collectors.toList());
-            partnerCountVo.setTwoPartnerNum(twoPartners.size());
-            //3
-            List<SysPartner> threePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 3).collect(Collectors.toList());
-            partnerCountVo.setThreePartnerNum(threePartners.size());
-            //4
-            List<SysPartner> fourPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 4).collect(Collectors.toList());
-            partnerCountVo.setFourPartnerNum(fourPartners.size());
-
-        } else if (type == 2) {
-            //1
-            List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
-            partnerCountVo.setOnePartnerNum(onePartners.size());
-            //2
-            List<SysPartner> twoPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 2).collect(Collectors.toList());
-            partnerCountVo.setTwoPartnerNum(twoPartners.size());
-            //3
-            List<SysPartner> threePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 3).collect(Collectors.toList());
-            partnerCountVo.setThreePartnerNum(threePartners.size());
+        if (CollectionUtil.isNotEmpty(sysPartnerList)){
+            //统计每一个等级的合伙人数
+            if (type == 1) {
+                //1
+                List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
+                partnerCountVo.setOnePartnerNum(onePartners.size());
+                //2
+                List<SysPartner> twoPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 2).collect(Collectors.toList());
+                partnerCountVo.setTwoPartnerNum(twoPartners.size());
+                //3
+                List<SysPartner> threePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 3).collect(Collectors.toList());
+                partnerCountVo.setThreePartnerNum(threePartners.size());
+                //4
+                List<SysPartner> fourPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 4).collect(Collectors.toList());
+                partnerCountVo.setFourPartnerNum(fourPartners.size());
+
+            } else if (type == 2) {
+                //1
+                List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
+                partnerCountVo.setOnePartnerNum(onePartners.size());
+                //2
+                List<SysPartner> twoPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 2).collect(Collectors.toList());
+                partnerCountVo.setTwoPartnerNum(twoPartners.size());
+                //3
+                List<SysPartner> threePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 3).collect(Collectors.toList());
+                partnerCountVo.setThreePartnerNum(threePartners.size());
+
+            } else if (type == 3) {
+                //1
+                List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
+                partnerCountVo.setOnePartnerNum(onePartners.size());
+                //2
+                List<SysPartner> twoPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 2).collect(Collectors.toList());
+                partnerCountVo.setTwoPartnerNum(twoPartners.size());
+
+            } else if (type == 4) {
+                //1
+                List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
+                partnerCountVo.setOnePartnerNum(onePartners.size());
+            }
+        }
 
-        } else if (type == 3) {
-            //1
-            List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
-            partnerCountVo.setOnePartnerNum(onePartners.size());
-            //2
-            List<SysPartner> twoPartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 2).collect(Collectors.toList());
-            partnerCountVo.setTwoPartnerNum(twoPartners.size());
 
-        } else if (type == 4) {
-            //1
-            List<SysPartner> onePartners = sysPartnerList.stream().filter(SysPartner -> SysPartner.getType() == type + 1).collect(Collectors.toList());
-            partnerCountVo.setOnePartnerNum(onePartners.size());
-        }
         //工作室
         List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
                 .eq(SysRelationPerson::getSuggestId, userId)
@@ -1878,6 +1889,109 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         return partnerCountVo;
     }
 
+
+    @Override
+    public PartnerCountVo getFivePartnerCount(PartnerCountDto partnerCountDto) {
+        PartnerCountVo partnerCountVo = new PartnerCountVo();
+        String userId = BaseController.getUserId();
+        //原始参数
+        String startTime1 = partnerCountDto.getBeginTime();
+        String endTime1 = partnerCountDto.getEndTime();
+        List<String> deptIds = new ArrayList<>();
+        //工作室
+        List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                .eq(SysRelationPerson::getSuggestId, userId)
+                .eq(SysRelationPerson::getDelFlag, 1)
+                .eq(SysRelationPerson::getType, 1));
+        partnerCountVo.setWorkSum(sysRelationPersonList.size());
+        if (CollectionUtil.isNotEmpty(sysRelationPersonList)) {
+            List<String> workIds = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+            //查工作室下的团队
+            List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+                    .eq(SysAgencyLeader::getDelFlag, 1).in(SysAgencyLeader::getUserId, workIds));
+            int deptSum = 0;
+            int deptManSum = 0;
+
+            for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                //根据机构id查下面团队
+                List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                        .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                        .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                        .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                deptSum = deptSum + sysDeptList.size();
+                if (sysDeptList.size() > 0) {
+                    for (SysDept sysDept : sysDeptList) {
+                        deptIds.add(sysDept.getId());
+                        //团队下的人数
+                        List<SysUser> sysUserList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                .likeRight(SysUser::getId, sysDept.getId())
+                                .in(SysUser::getStatus, Arrays.asList(1, 4, 5, 6, 7)));
+                        deptManSum = deptManSum + sysUserList.size();
+                    }
+                }
+            }
+
+            partnerCountVo.setDeptSum(deptSum);
+            partnerCountVo.setDeptManSum(deptManSum);
+
+            //曲线图
+            List<CountUserNumVo> countUserNumVoList = null;
+
+            int type = partnerCountDto.getNumber();
+
+            //类型:1:工作室,2:团队 3:代理人
+            if (type == 1) {
+                if (StringUtils.isNotEmpty(startTime1)) {
+                    String s = startTime1.split(" ")[0];
+                    String s1 = endTime1.split(" ")[0];
+                    if (s.equals(s1)) {
+                        //查一天的数据
+                        countUserNumVoList = sysAgencyLeaderMapper.queryWorkByFive(workIds,partnerCountDto);
+                    } else {
+                        //查日期范围数据
+                        countUserNumVoList = sysAgencyLeaderMapper.queryWorkByFiveTime(workIds,partnerCountDto);
+                    }
+                } else {
+                    countUserNumVoList = sysAgencyLeaderMapper.queryWorkByFiveTime(workIds,partnerCountDto);
+                }
+
+
+            }else if (type == 2) {
+                if (StringUtils.isNotEmpty(startTime1)) {
+                    String s = startTime1.split(" ")[0];
+                    String s1 = endTime1.split(" ")[0];
+                    if (s.equals(s1)) {
+                        //查一天的数据
+                        countUserNumVoList = sysPartnerMapper.queryDeptByFiveTime(deptIds, partnerCountDto);
+                    } else {
+                        countUserNumVoList = sysPartnerMapper.queryDeptByFive(deptIds, partnerCountDto);
+                    }
+                } else {
+                    countUserNumVoList = sysPartnerMapper.queryDeptByFive(deptIds, partnerCountDto);
+                }
+
+            } else if (type == 3){
+                if (StringUtils.isNotEmpty(startTime1)) {
+                    String s = startTime1.split(" ")[0];
+                    String s1 = endTime1.split(" ")[0];
+                    if (s.equals(s1)) {
+                        countUserNumVoList = sysPartnerMapper.queryUserByFive(deptIds, partnerCountDto);
+                    } else {
+                        countUserNumVoList = sysPartnerMapper.queryUserByFiveTime(deptIds, partnerCountDto);
+                    }
+                } else {
+                    countUserNumVoList = sysPartnerMapper.queryUserByFiveTime(deptIds, partnerCountDto);
+                }
+
+            }
+
+            partnerCountVo.setCountUserNumVoList(countUserNumVoList);
+        }
+
+
+        return partnerCountVo;
+    }
+
     @Override
     public PartnerProportionVo getPartnerProportion(PartnerCountDto partnerCountDto) {
         PartnerProportionVo partnerProportionVo = new PartnerProportionVo();
@@ -1969,38 +2083,44 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
             List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
                     .eq(SysRelationPerson::getSuggestId, partner.getUserId())
                     .eq(SysRelationPerson::getDelFlag, 1)
-                    .eq(SysRelationPerson::getType, 1));
+                    .eq(SysRelationPerson::getType, 0));
+            levelPartnerVo.setDeptManNum(sysRelationPersonList.size());
             if (CollectionUtil.isNotEmpty(sysRelationPersonList)) {
-                List<String> collects = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
-                //查工作室下的团队
-                List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
-                        .eq(SysAgencyLeader::getDelFlag, 1).in(SysAgencyLeader::getUserId, collects));
-                int deptSum = 0;
-                int deptManSum = 0;
-                for (SysAgencyLeader sysAgencyLeader : leaderList) {
-                    //根据机构id查下面团队
-                    List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
-                            .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
-                            .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
-                            .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
-                    deptSum = deptSum + sysDeptList.size();
-                    if (sysDeptList.size() > 0) {
-                        for (SysDept sysDept : sysDeptList) {
-                            //团队下的人数
-                            List<SysUser> sysUserList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
-                                    .likeRight(SysUser::getId, sysDept.getId())
-                                    .in(SysUser::getStatus, Arrays.asList(1, 4, 5, 6, 7)));
-                            deptManSum = deptManSum + sysUserList.size();
-                        }
-                    }
-                }
-
-                levelPartnerVo.setDeptManNum(deptManSum);
-
-            } else {
-                levelPartnerVo.setDeptManNum(0);
+                List<String> strings = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                levelPartnerVo.setPartnerIds(strings);
             }
 
+//            if (CollectionUtil.isNotEmpty(sysRelationPersonList)) {
+//                List<String> collects = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+//                //查工作室下的团队
+//                List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+//                        .eq(SysAgencyLeader::getDelFlag, 1).in(SysAgencyLeader::getUserId, collects));
+//                int deptSum = 0;
+//                int deptManSum = 0;
+//                for (SysAgencyLeader sysAgencyLeader : leaderList) {
+//                    //根据机构id查下面团队
+//                    List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+//                            .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+//                            .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+//                            .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+//                    deptSum = deptSum + sysDeptList.size();
+//                    if (sysDeptList.size() > 0) {
+//                        for (SysDept sysDept : sysDeptList) {
+//                            //团队下的人数
+//                            List<SysUser> sysUserList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+//                                    .likeRight(SysUser::getId, sysDept.getId())
+//                                    .in(SysUser::getStatus, Arrays.asList(1, 4, 5, 6, 7)));
+//                            deptManSum = deptManSum + sysUserList.size();
+//                        }
+//                    }
+//                }
+//
+//                levelPartnerVo.setDeptManNum(deptManSum);
+//
+//            } else {
+//                levelPartnerVo.setDeptManNum(0);
+//            }
+
             partnerVoList.add(levelPartnerVo);
         }
 
@@ -2051,7 +2171,9 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         String token = StpUtil.createLoginSession(sysUser.getId());
 //        AlipayVo alipayVo = new AlipayVo(token, sysUser.getId());
         StpUtil.getSessionByLoginId(sysUser.getId()).set(SaSession.USER, sysUser);
+        aapLoginVo.setUserId(sysUser.getId());
         aapLoginVo.setToken(token);
+        log.info("支付宝登录返参:{}",aapLoginVo);
         return HttpResult.ok("", aapLoginVo);
     }
 
@@ -2063,6 +2185,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
 
     @Override
     public HttpResult<Object> bindAlipay(AlipayBindVo alipayBindVo, String userId) throws AlipayApiException {
+        log.info("userId:{}",userId);
         AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
 
         // 构造请求参数以调用接口
@@ -2073,9 +2196,11 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
 
         // 设置授权方式
         request.setGrantType("authorization_code");
-
+        log.info("-----------------获取支付宝ID-------------");
         AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
+        log.info("授权返回值:{}", JSONObject.toJSON(response));
         String aliPayId = response.getUserId();
+        log.info("支付宝的aliPayId={}",aliPayId);
         SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getAlipay, aliPayId).one();
         if (sysUser != null) {
             throw new SystemException("同一支付宝不能重复绑定");
@@ -2090,6 +2215,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         boolean update = sysUserService.updateById(user);
 
         if (update) {
+            log.info("支付宝绑定成功");
             return HttpResult.ok("绑定成功");
         }
         throw new SystemException("绑定失败");
@@ -2097,11 +2223,11 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
 
     //获取支付宝账户信息
     private static AlipayConfig getAlipayConfig() {
-        String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmb0GfNv7ex5SmUiBnMn3szFP4XM5c8KnYll6HGoFCQTxwMSVYq652ELBtGAScqV9QOVcF/1Z1NF+a0AabGd0qSKKsPOhHNg3vG4yHHs4gwOdqFxwjATXqgHaZXSIQGnoPUJ3J05AlYLlinm9oOoTAY68880pM9h9d7t4Aq4WqVfnGteNaV5+oaV/KgX2OGo7m3WPR+e5Yjl9xxYXjVF1Uv7hznNER74KuYhRP44759lgfo0RlncGXuaygKHoxCpKTozGmvedP0hTO/WJTEi5l11Gp4mfMN9Gb/VtjsRDJaCFMmXU19UcHOFxyFOrKoyNYxdj3ue07/l51l4+8TVyJAgMBAAECggEBAJGR09qW9nsSIxEJ2e+I+RzpZjRfr9sYX+XhN1KBuzag6mTSh3Cz0IbReA4jKL2BYq0/Sb8kIpGmukwk0PJNv+Rg3W86YosOW0ecV+BC8FUzg/SFvAVd5LNzosfm7okZL1M/1pKVaYlXvS3ll1mZfUzso3Py8zS3PJ4i86ewXdupp2HcQt8c5O57lkzdhi35a38k9RrrSsYgnUClAMFWvmN4x1v7vuddzW0/q5Ztg1k9Ukz209dMOIc5cZ8+zyX5PO0rEofUETMtF5D5N2qtsMsMlDxvYq7aQoNq5I1p8e2mjZv5U7EvkLENTZmPRtAdddut1LGACU0AAlvvOOgu9wECgYEA27Q/EuQPfFh/aOYyi6zq0AWFN2U+tN/y3/nAvGymisdp6c2q1s6ESvENJep7v9PR/cownHKIllTJbzh03DKrQd0LYJrh4CFr6xv5DSUXMft5+6Te+t1FpULqhtkVLcqqTSqMRo8Yl/QMDxI6mRd4pmEFscOIEW+5lzyofxfL7mECgYEAwe4hNIyz2b/uBCCUMPA8CL8kJILqw0ZHB4EekoLugqYHAi3LPCDpJzFJ3pcZXjUdH9TUKQp67eizk+xedfFdicm0ENzPqCoUPidT88QZImaP8uP2LblTlxNCDf8D15BQzBHDlTDN+2tzFi7qAb3v2mgK5U9WGOOkicmMGzv8jykCgYARP3hIKmFQ2L2/5XqIXp3ckOJhc/BVUNOHY9sOr9TvRjJ5aW0FChd2rq/ijyMB70YoD2x7i75PVv6tXZhHBS9Or2TKQ76B0v3e6kZGEuhcQyrTZ6EdvqtOCw/QYFB6VNPD1RhIHcnHfCBKOpshE6ekIC/LQdd3zvaZ+egceijHYQKBgDgN250z2jxjZKnevNbUaZXhodHH4ZGl+5vor2yL2eL7mGUB1Y/At4OzlHV5WUTIt21e+CAQvm2L6HQmSztuE6pjGeAR4xfpacZ5WaPJF7bAzHTZfWvD+KxfTaV8A6FIPoJt1AmIfNFiQna0AsGUJAMONbAIWYuCKSoGjq/EjADZAoGAS0ZaZdPKKQnd4g/lqM8CnHTfhW11ANP/rPZDU+NvjW2jQ6SIdJhwJaKMEQCcDp63j0SADlghzrvm+KMbnTrFqTHlAizcFxnOOOxO1pKXKuOJWWsyNBN33suB3XPFrsobEtmtnWyvph1GoAZOX457RN5LSmBTbqpbyEsjKg/W1zc=";
+        String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHXiWh2HopAtG69Wju2OIjB0F82AsLoP4TjUEsMWybWw97UhtpofF6qIOZ2hyu1RsM032VWYgvQrxHxXBL4mu+KH3jKK9cBB/FyH/J3RMSJeDHVRbHCbH5GB38L0f0Bg0DSzdlr7/oaFd2jm95NY8T2y+4WDI+6+vKPtcrEgbV79t8B6R20G7DuefNXoELE7H8fuz7hb3e+dApQ0Zp+VxpGIZPItVeddib+d+fQ9ha5ypAuP0mflXoOXW5ZY8jXDTKwVESpJ94y08yKuW4JsN32Se87d0Md2baJiVODwbzxxGNTRQavaQRR1Ve+CKKpqENz7N/w/mLJG7IxJjCzWN3AgMBAAECggEAEFDFomMwHh9L3gfUNO2JHAW02/JCKo2l8f9VepkeaP8pt4hm621saIdFDVcfm+btkrcu7MBUzLVzcgcXCN5qdAn3Wli+Ag4xMip/VHpD4S0VkZDs5OKDQ+2nN40PVBcinGIFdEkhjUZ+PDjgsLBG5XLGpqZir/jJe5/lWTicAE7ytr4zDVdrLWC45LMsEs49B2Ngwr+pLaYdzKK5oCEaVQCOAWyg77HEpnd+4sJeQUzpnfteN60IFp810Ec7a31b6E0rfq19Owqe6H/jp/fjiTouJSwfxjn3WMaAwZdA3D9SS9ukc9r878j92fdkeDQUpO41AGY3P3sWdexUjHz5cQKBgQC+9eauh65cPb1jzSQ149x+qyxBy6axpUUFbA08taYJIJdA6wSjXX8eCz3muMSjY616pA4c1gB3q3fEKBWD8NpaWJJvwae22mlhb27WlAiH7ND01hfcMHWefREcCFBHJnFRWScAvPRJtffU+csq1mYB62N2PgGPKgSAV5Zb+hD/DwKBgQC1eQnLdehVttSL3NWz7sf6Qdm+yloj38LgGtL8rj3Kankzb+Ty9RySTjnWidSzqfTaAa/1P9NGHrQh6hRz/DJXO3lUohOANijTT5dmOqg/M5nuR7K+cRCsHHaSEYicfgYalkkh3plDtcRQ4n52Z5ZAZvDLg3Id9+noQGlebkPVGQKBgQCMh1/kzprE7PaEDIJ6Wh545TUjkmAw2UQK8nJnW/I9Q0usDYgTRQn4LSO3t/+VkhQnbbWpCN+9MWVo6Gq09zlpRUc2kRgAW4kzmBLEPJpulRtNIoTamJrmMHm33HJfee3ohKhMRcGswQoKJG2cL71P6k7+xDDXj39Sh6JyO3vohwKBgGHbXxjEAAEYkgzJjMN2Y4fjspNbcrgdlWxbiqKPIurf93NxRzhsTHfoju/Na1FmuI5GkqfhPwB01hXjsBvLRyoa/BZTP8jHa8RnCvEpeEh8fukq6IwhVCg7QQULR2t72bbEi7Mj4enNPouPVzpqKW+ZEwfrXcIjSZLgCPHO6+0hAoGARv/95Q6wdP9NUoAQJqkETze/hEF8Ny51oephrOPsVfB7rAU1NQjp+k+/Q9UG1xz22lSkWd9kWcMTGjiAZzOy+AJF7tlnJV+5V79/OM1BBsB69oU3AF0Xqzwl/7gKzLsNQ7ZJflNPILIQlVw9IqfFlbHIBqY6fw7nhlmNp9tzabA=";
         String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArP+St5P9dLhPmm/ggf3jPDc2552wu/+91QSAzlEqRSrdWAIwrHcntM0VY/4/+39Z8h44/0TBNTb0j1gdWrCyb+1ENxwwgCqs7f8C/5gClTQCcoNys4MtGAAM7BbNp/LzmswOuPTOMtjlUBArWFvJDgDoSQJ8vGwGHgRcLsSLPwlhwVdnqVbq60CI185U/yZgNITTCGpDXv5bnQQ26GrUbH+5Qm4fYmT2B/2ijAVJUYq+EaBMOyv+AD8C1+CtXcgH86+g13MdD1T8cw5nkV9/4fcPIWD8R1aj20C1+kCMujaydB4yDpHiqQcQEtJoVbZJk5MYp8JcctqDT01brVct5wIDAQAB";
         AlipayConfig alipayConfig = new AlipayConfig();
         alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
-        alipayConfig.setAppId("2021004153668213");
+        alipayConfig.setAppId("2021004193614682");
         alipayConfig.setPrivateKey(privateKey);
         alipayConfig.setFormat("json");
         alipayConfig.setAlipayPublicKey(alipayPublicKey);
@@ -2113,8 +2239,9 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
     @Override
     public HttpResult<AAPLoginVo> loginWechat(WechatLoginVo wechatLoginVo) throws WxErrorException {
         AAPLoginVo aapLoginVo = new AAPLoginVo();
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.HHR.getCode()).getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
         String openId = accessToken.getOpenId();
+        log.info("微信登录openId:{}",openId);
         SysUser sysUser = sysUserService.lambdaQuery()
                 .eq(SysUser::getOpenid, openId)
                 .one();
@@ -2140,16 +2267,17 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
 
         String token = StpUtil.createLoginSession(sysUser.getId());
         StpUtil.getSessionByLoginId(sysUser.getId()).set(SaSession.USER, sysUser);
+        aapLoginVo.setUserId(sysUser.getId());
         aapLoginVo.setToken(token);
-
+        log.info("微信登录返参:{}",aapLoginVo);
         return HttpResult.ok("", aapLoginVo);
     }
 
     @Override
     public HttpResult<Object> bindWechat(WechatBindVo wechatBindVo, String userId) throws WxErrorException {
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatBindVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.HHR.getCode()).getOAuth2Service().getAccessToken(wechatBindVo.getCode());
         String openId = accessToken.getOpenId();
-
+        log.info("微信绑定时的openID;{}",openId);
         SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getOpenid, openId).one();
         if (sysUser != null) {
             throw new SystemException("同一微信不能重复绑定");
@@ -2164,6 +2292,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         boolean update = sysUserService.updateById(user);
 
         if (update) {
+            log.info("微信绑定成功");
             return HttpResult.ok("绑定成功");
         }
         throw new SystemException("绑定失败");
@@ -2175,5 +2304,18 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         return sysUser.getOpenid();
     }
 
+    @Override
+    public PartnerInfoFreeVo getLevelPartnerInfo(List<String> partnerIds) {
+        PartnerInfoFreeVo partnerInfoFreeVo = new PartnerInfoFreeVo();
+        List<PartnerInfoVo> partnerInfoVoList = new ArrayList<>();
+
+
+
+
+
+
+        return partnerInfoFreeVo;
+    }
+
 
 }

+ 1 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java

@@ -80,7 +80,7 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         sysPcAddress.setCity(ipInfoDto.getCity());
         sysPcAddress.setDistrict(ipInfoDto.getDistrict());
         sysPcAddress.setSource(sysDept.getManagementSource());
-        sysPcAddress.setAddress(ipInfoDto.getProv() + ipInfoDto.getCity() + ipInfoDto.getDistrict());
+        sysPcAddress.setAddress(ipInfoDto.getProv() + ipInfoDto.getCity() + Optional.ofNullable(ipInfoDto.getDistrict()).orElse(""));
         sysPcAddress.setOperationTime(new Date());
         sysPcAddress.setLeaderName(user.getLeaderName());
 

+ 20 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysSwitchConfigServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.admin.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.util.StringUtil;
@@ -22,6 +23,7 @@ import com.ydtech.modules.protocol.utils.AssertionUtils;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -41,6 +43,10 @@ public class SysSwitchConfigServiceImpl extends ServiceImpl<SysSwitchConfigMappe
 
     private final InsFeeOrderConfigService insFeeOrderConfigService;
 
+
+    @Autowired
+    private SysSwitchConfigMapper configMapper;
+
     @Override
     public BigDecimal getEnterProportion(String deptId, Integer entryStatus) {
         if (entryStatus != 2) {
@@ -177,6 +183,20 @@ public class SysSwitchConfigServiceImpl extends ServiceImpl<SysSwitchConfigMappe
     public boolean xysqDisplaySwitches() {
         return isEnabled(SwitchConfig.XYSQ_01.getCode());
     }
+
+    @Override
+    public boolean getBalanceExtractStatus() {
+        LambdaQueryWrapper<SysSwitchConfig> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysSwitchConfig::getKeyword, SwitchConfig.YETX_01.getCode());
+        SysSwitchConfig sysSwitchConfig = configMapper.selectOne(queryWrapper);
+        if (null != sysSwitchConfig){
+            if (Integer.valueOf(1).equals(sysSwitchConfig.getEnabled())){
+                return true;
+            }
+            return false;
+        }
+        return false;
+    }
 }
 
 

+ 24 - 4
src/main/java/com/ydtech/modules/admin/service/impl/SysUserAccountServiceImpl.java

@@ -1,16 +1,16 @@
 package com.ydtech.modules.admin.service.impl;
 
-import com.baomidou.mybatisplus.annotation.TableField;
+import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.core.page.PageRequest;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.constants.ManagementSource;
 import com.ydtech.modules.admin.constants.MoneyAttrConstants;
 import com.ydtech.modules.admin.constants.WithdrawTypeConstants;
 import com.ydtech.modules.admin.dao.SysUserAccountMapper;
+import com.ydtech.modules.admin.dao.SysUserBankCardMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
@@ -32,6 +32,8 @@ import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import com.ydtech.modules.ttqf.entity.vo.UserWithdrawal;
+import com.ydtech.modules.ttqf.service.TtqfService;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -43,7 +45,6 @@ import org.springframework.util.CollectionUtils;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author Administrator
@@ -94,6 +95,9 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
     @Autowired
     private SysSwitchConfigService sysSwitchConfigService;
 
+    @Autowired
+    private TtqfService ttqfService;
+
 
     @Override
     @Transactional
@@ -288,6 +292,13 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
     @Transactional
     public HttpResult<Object> inert(SysUserAccountVo sysUserAccountVo) {
         String userId = BaseController.getUser().getId();
+        if (isManagement(userId) && sysSwitchConfigService.getBalanceExtractStatus()){
+            //  个代走线上付款
+            UserWithdrawal withdrawal = new UserWithdrawal();
+            withdrawal.setUserId(userId);
+            withdrawal.setAmount(sysUserAccountVo.getAmount());
+            return ttqfService.userCashOut(withdrawal);
+        }
         //add  by  hxl   2024-09-26 添加电销组员开关
         boolean flag = sysSwitchConfigService.dxtxDisplaySwitches();
         if(flag){
@@ -404,6 +415,15 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
         return HttpResult.ok("提现成功,等待审核");
     }
 
+    public boolean isManagement(String userId) {
+        SysUserBankCard bankCard = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(userId);
+        if (ManagementSource.MS_02.getCode().equals(bankCard.getManagementSource())){
+            return true;
+        }
+        return false;
+    }
+
+
     /**
      * @version
      * @author: hxl

+ 39 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserAgentTrackServiceImpl.java

@@ -0,0 +1,39 @@
+package com.ydtech.modules.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysUserAgentTrackMapper;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+import com.ydtech.modules.admin.service.SysUserAgentTrackService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_user_agent_track(个代用户认证审核轨迹表)】的数据库操作Service实现
+* @createDate 2024-11-04 14:57:40
+*/
+@Service
+public class SysUserAgentTrackServiceImpl extends ServiceImpl<SysUserAgentTrackMapper, SysUserAgentTrack>
+    implements SysUserAgentTrackService {
+
+    @Override
+    public SysUserAgentTrack queryTrack(String id, Integer status) {
+        LambdaQueryWrapper<SysUserAgentTrack> trackLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        trackLambdaQueryWrapper.eq(SysUserAgentTrack::getUserId, id)
+                .eq(SysUserAgentTrack::getStatus, status)
+                .orderByDesc(SysUserAgentTrack::getId);
+        List<SysUserAgentTrack> trackList = this.list(trackLambdaQueryWrapper);
+        if(CollUtil.isNotEmpty(trackList)){
+            return trackList.get(0);
+        }
+        return new SysUserAgentTrack();
+    }
+
+}
+
+
+
+

+ 404 - 27
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.admin.service.impl;
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -19,30 +20,40 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.handler.CreateAndUpdateMetaObjectHandler;
-import com.ydtech.modules.admin.constants.QuMarks;
-import com.ydtech.modules.admin.constants.RoleConstants;
-import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.components.UnionPayRequestApiComponent;
+import com.ydtech.modules.admin.components.request.UnionPayRequest;
+import com.ydtech.modules.admin.components.response.UnionPayResponse;
+import com.ydtech.modules.admin.constants.*;
 import com.ydtech.modules.admin.dao.SysDeptMapper;
+import com.ydtech.modules.admin.dao.SysPartnerMapper;
 import com.ydtech.modules.admin.dao.SysUserLinkAreaMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.*;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.admin.utils.RecordUserUtils;
+import com.ydtech.modules.admin.utils.UserAgentTrackUtils;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.esm.model.EsmUserImage;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
+import com.ydtech.modules.esm.model.vo.EsmUserImageQueryVo;
 import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
 import com.ydtech.modules.esm.service.EsmUserImageService;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
+import com.ydtech.modules.message.constants.MessageTypeConstants;
+import com.ydtech.modules.message.service.MessageSecretaryService;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.security.utils.PasswordUtils;
+import com.ydtech.utils.IDCardUtils;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -59,6 +70,7 @@ import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -68,6 +80,7 @@ import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY_TIM
 
 
 @Service
+@Slf4j
 public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
 
     @Autowired
@@ -118,9 +131,27 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     private SysDeptMapper sysDeptMapper;
     @Resource
     private SysPartnerService sysPartnerService;
+    @Resource
+    private SysAgencyLeaderService sysAgencyLeaderService;
+
+    @Resource
+    private SysPartnerMapper sysPartnerMapper;
+
+    @Autowired
+    private MessageSecretaryService messageSecretaryService;
+
+    @Autowired
+    private UnionPayRequestApiComponent unionPayRequestApiComponent;
+
+    @Autowired
+    private SysUserAgentTrackService sysUserAgentTrackService;
+
+    @Autowired
+    private SysUserBankCardService bankCardService;
 
     @Value("${httpUrl}")
     private String httpUrl;
+
     @Override
     public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
         PageVo<SysUserBaseVO> pageVo = new PageVo();
@@ -293,15 +324,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             return HttpResult.error("手机号不能为空");
         }
 //            if ("0".equals(type)) {  // 0 登录 1 注册
-            SysUser sysUser = this.findByPhone(phone);
-            if (sysUser == null) {
-                return HttpResult.error("手机号不存在!");
-            }
+        SysUser sysUser = this.findByPhone(phone);
+        if (sysUser == null) {
+            return HttpResult.error("手机号不存在!");
+        }
 //            }
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String timeCreate = simpleDateFormat.format(sysUser.getCreateTime());
         String userId = sysUser.getId();
-        List<SysUserTrack> sysUserTracks = sysUserTrackService.list(new LambdaQueryWrapper<SysUserTrack>().eq(SysUserTrack::getUserId,userId).orderByDesc(SysUserTrack::getApproveTime));
+        List<SysUserTrack> sysUserTracks = sysUserTrackService.list(new LambdaQueryWrapper<SysUserTrack>().eq(SysUserTrack::getUserId, userId).orderByDesc(SysUserTrack::getApproveTime));
         SysUserTrack sysUserTrack = sysUserTracks.get(0);
 
         Integer type = sysUser.getType();
@@ -333,7 +364,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         Map params = new HashMap();//请求参数
         params.put("mobile", phone);//接收短信的手机号码
         params.put("tpl_id", "265910");//短信模板ID,请参考个人中心短信模板设置
-        params.put("vars",varsJson);
+        params.put("vars", varsJson);
         params.put("key", "fbe7b165e9e13e52f3b1f2654eab9c0e");//应用APPKEY(应用详细页查询)
         params.put("dtype", "json");//返回数据的格式,xml或json,默认json
 
@@ -924,8 +955,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                     sysUserVo.getSysUserInfo().setLiveAddress(Arrays.stream(userInfo.getLiveAddressString()).map(item -> item.toString()).collect(Collectors.joining(",")));
                 }
                 userInfo.setId(sysUser.getId());
+            }else {
+                userInfo=new SysUserInfo();
+                userInfo.setId(sysUser.getId());
             }
-//        userInfo.setId(sysUser.getId());
             sysUserInfoService.save(userInfo);
         }
         List<EsmUserImageVo> esmUserImageVo = sysUserVo.getEsmUserImageVo();
@@ -934,14 +967,78 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, finalUserId)).collect(Collectors.toList());
             esmUserImageService.saveBatch(esmUserImages);
         }
-        SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, userId);
-        return HttpResult.ok("新增成功",sysUserMapper.selectById(userId));
+        SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, Optional.ofNullable(sysUserVo.getSysUser().getReferrerId()).orElse("admin") );
+        return HttpResult.ok("新增成功", sysUserMapper.selectById(userId));
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResult saveUserInfo1(SysUser2Vo sysUserVo, SysDeptVo sysDeptVo) {
+    public HttpResult saveUserInfo1(SysUser2Vo sysUserVo) {
+
+        log.info("添加团队入参:{}", sysUserVo);
         SysUser sysUser = sysUserVo.getSysUser();
+        sysUser.setType(3);
+        sysUser.setCreateTime(new Date());
+        SysUserInfo sysUserInfo = new SysUserInfo();
+        LocalDate birthday = LocalDate.parse(sysUser.getIdentity().substring(6, 10) + "-" + sysUser.getIdentity().substring(10, 12) + "-" + sysUser.getIdentity().substring(12, 14));
+        sysUserInfo.setBirthday(birthday);
+        sysUserVo.setSysUserInfo(sysUserInfo);
+        // 先创建工作室下的团队
+        SysAgencyLeader sysAgencyLeader = sysAgencyLeaderService.getOne(new LambdaQueryWrapper<SysAgencyLeader>()
+                .eq(SysAgencyLeader::getUserId, sysUser.getReferrerId()));
+        SysDept sysDept = sysDeptService.getOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getId, sysAgencyLeader.getDeptId()));
+//        SysDept sysDept = sysDeptList.get(0);
+        SysDeptVo sysDeptVo = new SysDeptVo();
+        sysDeptVo.setName(sysUser.getName() + "团队"); // 以人名设置工作室名称
+        sysDeptVo.setDeptType("D"); // 默认为子公司
+        sysDeptVo.setParentId(sysDept.getId());
+        sysDeptVo.setManagementSource(sysDept.getManagementSource()); //机构来源
+        sysDeptVo.setOrderNum(0);
+        sysDeptVo.setCreateTime(new Date());
+        log.info("------------------团队长添加先调添加部门-----------------------");
+        sysDeptService.addDept(sysDeptVo);
+
+
+        if (StringUtils.isNullOrEmpty(sysUser)) {
+            return HttpResult.error("用户信息不能为空");
+        }
+        if (StringUtils.isNullOrEmpty(sysDeptVo.getId())) {
+            return HttpResult.error("机构ID不能为空");
+        }
+        if (StringUtils.isNullOrEmpty(sysUser.getRoleId())) {
+            throw new SystemException("角色id不能为空");
+        }
+        //获取机构层级
+        int deptLevel = this.getDeptLevel1(sysDeptVo.getId());
+        if (!StringUtils.isNullOrEmpty(sysUser.getRoleId())) {
+            if (RoleConstants.R21.getCode().equals(sysUser.getRoleId())
+                    || RoleConstants.R20.getCode().equals(sysUser.getRoleId())
+                    || RoleConstants.R19.getCode().equals(sysUser.getRoleId())) {//19 出单员 21	团队长 20	代理人
+
+                if (deptLevel != 6) {
+                    throw new SystemException("团队长、代理人、出单员只能归属团队中");
+                }
+                //如果为团队长,判断是否已经存在团队长,存在不允许添加   add by  hxl  2024-05-07  ============begin
+                if (RoleConstants.R21.getCode().equals(sysUser.getRoleId())) {
+                    int count = this.getCountByDeptAndRoleId(sysUser);
+                    if (count > 0) {
+                        throw new SystemException("该机构已存在团队长,不允许再添加!!");
+                    }
+                }
+                // =========================add by hxl   end ====================
+            } else if (RoleConstants.R18.getCode().equals(sysUser.getRoleId())) { // 42 门店长
+                if (deptLevel != 5) {
+                    throw new SystemException("机构管理员只能归属机构中");
+                }
+            } else if (RoleConstants.R17.getCode().equals(sysUser.getRoleId())) {
+                if (deptLevel != 4) {
+                    throw new SystemException("部长只能归属于4级");
+                }
+            }
+
+        }
+
+//        SysUser sysUser = sysUserVo.getSysUser();
         // 手机号
         List<SysUser> mobileList = lambdaQuery().eq(SysUser::getMobile, sysUser.getMobile()).list();
         if (!mobileList.isEmpty()) {
@@ -1033,8 +1130,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, finalUserId)).collect(Collectors.toList());
             esmUserImageService.saveBatch(esmUserImages);
         }
-        SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, userId);
-        return HttpResult.ok("新增成功",sysUserMapper.selectById(userId));
+        SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, Optional.ofNullable(sysUserVo.getSysUser().getReferrerId()).orElse("admin"));
+        return HttpResult.ok("新增成功", sysUserMapper.selectById(userId));
     }
 
     /**
@@ -1138,6 +1235,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 userId = sysUser.getId();
                 updateById(sysUser);
             }
+
+            if(StringUtils.isEmpty(sysUser.getLeaderId())){
+                SysUser leaderUser = baseMapper.getByRoleIdAndDeptId("21", sysUser.getDeptId());
+                sysUser.setLeaderId(leaderUser.getLeaderId());
+                sysUser.setLeaderName(leaderUser.getLeaderName());
+            }
+
+
             SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
             sysUserInfo.setId(userId);
             sysUserInfoService.saveOrUpdate(sysUserInfo);
@@ -1145,6 +1250,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUser.setStatus(sysUserVo.getSysUser().getStatus());
             updateById(sysUser);
 
+            SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
+            // 渠道负责人更新数据
+            if (ManagementSource.MS_01.getCode().equals(sysDept.getManagementSource()) && "21".equals(sysUser.getRoleId())) {
+                boolean update = lambdaUpdate()
+                        .set(SysUser::getLeaderId, sysUser.getLeaderId())
+                        .set(SysUser::getLeaderName, sysUser.getLeaderName())
+                        .eq(SysUser::getDeptId, sysDept.getId())
+                        .update();
+                AssertionUtils.isSucceed(update, "出单员数据更新失败");
+            }
+
             //角色配置
             SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId);
             sysUserRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
@@ -1200,8 +1316,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Transactional(rollbackFor = Exception.class)
     public HttpResult updateUserInfo1(String userId, SysUser2Vo sysUserVo) {
         SysUser sysUser = sysUserVo.getSysUser();
-        String token = StpUtil.createLoginSession(sysUser.getId());
-        StpUtil.getSessionByLoginId(sysUser.getId()).set(SaSession.USER, sysUser);
         int beStatus = sysUser.getStatus();
         //如果审核驳回则 重新修改为 审核状态
         if (sysUserVo.getSysUser().getStatus().equals(UserWorkStatus.UWS_3.getCode())) {
@@ -1267,10 +1381,29 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 userId = sysUser.getId();
                 updateById(sysUser);
             }
+
+            if(StringUtils.isEmpty(sysUser.getLeaderId())){
+                SysUser leaderUser = baseMapper.getByRoleIdAndDeptId("21", sysUser.getDeptId());
+                sysUser.setLeaderId(leaderUser.getLeaderId());
+                sysUser.setLeaderName(leaderUser.getLeaderName());
+            }
+
             SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
             sysUserInfo.setId(userId);
             sysUserInfoService.saveOrUpdate(sysUserInfo);
         } else {
+
+            SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
+            // 渠道负责人更新数据
+            if (ManagementSource.MS_01.getCode().equals(sysDept.getManagementSource()) && "21".equals(sysUser.getRoleId())) {
+                boolean update = lambdaUpdate()
+                        .set(SysUser::getLeaderId, sysUser.getLeaderId())
+                        .set(SysUser::getLeaderName, sysUser.getLeaderName())
+                        .eq(SysUser::getDeptId, sysDept.getId())
+                        .update();
+                AssertionUtils.isSucceed(update, "出单员数据更新失败");
+            }
+
             sysUser.setStatus(sysUserVo.getSysUser().getStatus());
             // 设置跳过填充
             CreateAndUpdateMetaObjectHandler.setSkipFill(true);
@@ -1317,9 +1450,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             //添加轨迹
             SysUserTrack sysUserTrack = new SysUserTrack();
             sysUserTrack.setUserId(sysUser.getId());
-            SysUser user = BaseController.getUser();
-            sysUserTrack.setApproveBy(user.getName());
-            sysUserTrack.setApproveById(user.getId());
+            sysUserTrack.setApproveBy(null);
+            sysUserTrack.setApproveById(null);
             sysUserTrack.setStatus(sysUserVo.getSysUser().getStatus());
             sysUserTrack.setApproveTime(new Date());
             sysUserTrackService.save(sysUserTrack);
@@ -2198,7 +2330,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
 
-
     @Override
     public HttpResult updateManagementPersonnel(UpdateManagementDto managementDto) {
         try {
@@ -2231,11 +2362,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public List<SysUser> findDxUserList() {
         return sysUserMapper.findDxUserList();
     }
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/25 19:23
-     *  @Description: 查询用户管理的电销组员
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/25 19:23
+     * @Description: 查询用户管理的电销组员
      */
     @Override
     public List<String> getGroupByUserId(String userId) {
@@ -2260,11 +2392,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         List<SysDeptTreeVo> sysDeptTreeVos = BeanUtil.copyToList(sysDeptList, SysDeptTreeVo.class);
         Map<String, List<SysDeptTreeVo>> map = sysDeptTreeVos.stream().sorted(Comparator.comparing(SysDeptTreeVo::getId)).collect(Collectors.groupingBy(SysDeptTreeVo::getParentId));
         sysDeptTreeVos.forEach(i -> {
-            if(map.get(i.getId()) ==null ){
+            if (map.get(i.getId()) == null) {
                 List<SysUser> orDefault = groupedByDeptId.getOrDefault(i.getId(), new ArrayList<>());
                 List<SysDeptTreeVo> sysDeptTreeVos1 = BeanUtil.copyToList(orDefault, SysDeptTreeVo.class);
                 i.setChildren(sysDeptTreeVos1);
-            }else {
+            } else {
                 i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()));
                 i.setDeptCount(i.getChildren().size());
             }
@@ -2273,8 +2405,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
         return sysDeptTreeVos;
     }
+
     /**
      * 获取人员数
+     *
      * @return
      */
     @Override
@@ -2291,4 +2425,247 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         buildUserTree(topUsers, users);
         return topUsers;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addInfo(SysUser sysUser) {
+
+        Integer type = sysUser.getType();
+        if (type == 1) {
+            SysPartner sysPartner = sysPartnerMapper.selectOne(new LambdaQueryWrapper<SysPartner>().eq(SysPartner::getUserId, sysUser.getId()));
+            if (sysPartner == null) {
+                //保存合伙人信息
+                SysPartnerDto sysPartnerDto = new SysPartnerDto();
+                sysPartnerDto.setUserId(sysUser.getId());
+                sysPartnerDto.setUserName(sysUser.getName());
+                if (sysUser.getLevel() != 1) {
+                    sysPartnerDto.setSuggestId(sysUser.getReferrerId());
+                }
+                sysPartnerDto.setLevel(sysUser.getLevel());
+                sysPartnerService.insert(sysPartnerDto);
+            }
+        } else if (type == 2) {
+            SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
+            SysDept sysDeptParent = sysDeptService.getById(sysDept.getParentId());
+            SysUser sysUserReferrerId = this.getById(sysUser.getReferrerId());
+            SysDeptVo sysDeptVo = new SysDeptVo();
+            sysDeptVo.setComlevel("5"); // 默认机构等级为5级
+            sysDeptVo.setComtype(sysUser.getDeptType());
+            sysDeptVo.setName(sysUser.getName() + "工作室"); // 以人名设置工作室名称
+            sysDeptVo.setDeptType("C"); // 默认为子公司
+            sysDeptVo.setParentId(sysDept.getParentId());
+            sysDeptVo.setManagementSource(sysUser.getDeptSource()); //机构来源默认为加盟
+            sysDeptVo.setWorkerId(sysUser.getId()); // 工作室命名人id
+            sysDeptVo.setOrderNum(0);
+            sysDeptVo.setComattribute("procar"); //机构性质 车险
+            sysDeptVo.setProvince(sysDeptParent.getProvince()); // 默认省与负责人所在机构一样
+            sysDeptVo.setCity(sysDeptParent.getCity()); // 默认市与负责人所在机构一样
+            sysDeptVo.setArea(sysDeptParent.getArea()); // 默认区县与负责人所在机构一样
+            sysDeptVo.setCreateTime(new Date());
+            sysDeptVo.setAddress(""); // 工作室地址
+            sysDeptService.addDept(sysDeptVo);
+            SysAgencyLeaderDto sysAgencyLeaderDto = new SysAgencyLeaderDto();
+            sysAgencyLeaderDto.setUserId(sysUser.getId());
+            sysAgencyLeaderDto.setUserName(sysUser.getName());
+            sysAgencyLeaderDto.setDeptId(sysDeptVo.getId());
+            sysAgencyLeaderDto.setDeptName(sysDeptVo.getName());
+            sysAgencyLeaderDto.setSource(sysUser.getDeptSource());
+            sysAgencyLeaderDto.setComlevel(sysDeptVo.getComlevel());
+            sysAgencyLeaderDto.setSuggestId(sysUser.getReferrerId());
+            SysUser sysUser1 = sysUserMapper.selectById(sysUser.getReferrerId());
+            if (sysUser1 != null) {
+                sysAgencyLeaderDto.setSuggestName(sysUser1.getName());
+            }
+            sysAgencyLeaderDto.setSuggestLevel(sysUserReferrerId.getLevel());
+
+            sysAgencyLeaderService.insert(sysAgencyLeaderDto);
+        }
+
+    }
+
+
+    @Override
+    @Transactional
+    public String agentRegist(AgentUserNewDto dto, SysUser recommender) {
+        int noCount = 3;
+        //根据机构号获取userid最大值,不需要加人员类型判断  从sys_user获取
+        String maxId = this.findMaxId(recommender.getDeptId());
+        String nextPK = StringUtils.isNullOrEmpty(maxId) ? recommender.getDeptId() + "001"
+                : IdGenerate.nextCode(maxId, noCount);
+        SysUser sysUser = new SysUser();
+        sysUser.setId(nextPK);
+        sysUser.setName(dto.getName());
+        sysUser.setMobile(dto.getMobile());
+        sysUser.setDeptId(recommender.getDeptId());
+        //密码加密
+        String salt = PasswordUtils.getSalt();
+        sysUser.setSalt(salt);
+        String password = PasswordUtils.encode(dto.getPassword(), salt);
+        sysUser.setPassword(password);
+        sysUser.setStatus(UserWorkStatus.UWS_0.getCode());
+        sysUser.setCreateBy("admin");
+        sysUser.setCreateTime(new Date());
+        sysUser.setFactorVerify(0);  // 未认证状态
+        sysUser.setUpdateTime(new Date());
+        sysUser.setUpdateBy("admin");
+        this.save(sysUser);
+        //角色配置
+        SysUserRole userRole = new SysUserRole();
+        userRole.setUserId(nextPK);
+        userRole.setRoleId(20l);
+        sysUserRoleService.save(userRole);
+        //添加增员服务消息
+        //添加订单消息
+        messageSecretaryService.addMessage(MessageTypeConstants.M_6, dto.getReferrerId(),
+                dto.getMobile() + "(" + dto.getName() + ")" + "进行注册,请立即认证审核.");
+        esmUserReferrerService.addReferrer(dto.getReferrerId(), nextPK);
+
+        // 保存个代认证轨迹
+        SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
+                sysUser.getId(), UserAgentStatus.UAS_0.getCode(),
+                "admin");
+        return sysUser.getId();
+    }
+
+    @Override
+    @Transactional
+    public SysUserAgentVo agentAuth(SysUser sysUser, AgentAuthDto dto) {
+        SysUser user = this.getById(sysUser.getId());
+        String msg;
+        Integer status;
+        SysUserAgentVo userAgentVo = new SysUserAgentVo();
+        // 三要素认证
+        UnionPayRequest request = new UnionPayRequest();
+        request.setName(dto.getName());
+        request.setPhoneNo(dto.getMobile());
+        request.setCertNo(dto.getIdentity());
+        UnionPayResponse response = unionPayRequestApiComponent.threeFactorVerifyRequest(request);
+        if (response != null && !"00".equals(response.getRespCode())) {
+            msg = "认证信息不一致:" + response.getDetailRespMsg();
+            status = UserAgentStatus.UAS_2.getCode();
+            user.setFactorVerify(2); // 认证失败 即未认证状态
+            userAgentVo.setStatus(status);
+            userAgentVo.setDesc(msg);
+        } else {
+            msg = "认证成功";
+            status = UserAgentStatus.UAS_1.getCode();
+            user.setFactorVerify(1);
+            user.setStatus(UserWorkStatus.UWS_8.getCode());
+            userAgentVo.setStatus(status);
+        }
+        user.setName(dto.getName());
+        user.setMobile(dto.getMobile());
+        user.setIdentity(dto.getIdentity());
+        user.setIdentityTime(dto.getIdentityTime());
+        user.setUpdateBy("admin");
+        user.setUpdateTime(new Date());
+        this.saveOrUpdate(user);
+
+        SysUserInfo sysUserInfo = new SysUserInfo();
+        sysUserInfo.setId(user.getId());
+        // 根据身份证获取出生日期和性别
+        sysUserInfo.setBirthday(LocalDate.parse(IDCardUtils.GetBirthday(dto.getIdentity())));
+        sysUserInfo.setSex(IDCardUtils.GetSex(dto.getIdentity()).equalsIgnoreCase("FEMALE") ? "F" : "M");
+        sysUserInfo.setBankName(dto.getBankName());
+        sysUserInfo.setAccountno(dto.getAccountno());
+        sysUserInfoService.saveOrUpdate(sysUserInfo);
+        // 影像资料
+        LambdaQueryWrapper<EsmUserImage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EsmUserImage::getUserId, user.getId());
+        esmUserImageService.remove(wrapper);
+
+        List<EsmUserImageVo> esmUserImageVo = dto.getEsmUserImageVo();
+        String finalUserId = user.getId();
+        List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, finalUserId)).collect(Collectors.toList());
+        esmUserImageService.saveBatch(esmUserImages);
+        // 保存个代认证轨迹
+        SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
+                user.getId(), status,
+                BaseController.getUserName(),
+                null, msg);
+        return userAgentVo;
+    }
+
+    @Override
+    public SysUserAgentVo getAuthResult(SysUser sysUser, AgentAuthResultDto dto) {
+        SysUser user = this.getById(sysUser.getId());
+        SysUserInfo info = sysUserInfoService.getById(sysUser.getId());
+        SysUserAgentVo userAgentVo = new SysUserAgentVo();
+        userAgentVo.setSysUser(user);
+        if (Objects.nonNull(info)) {
+            userAgentVo.setSysUserInfo(info);
+        }
+
+        if (UserWorkStatus.UWS_0.getCode().equals(user.getStatus()) && user.getFactorVerify().equals(2)) {
+            SysUserAgentTrack track = sysUserAgentTrackService.queryTrack(sysUser.getId(),
+                    UserAgentStatus.UAS_2.getCode());
+            if (Objects.nonNull(track)) {
+                userAgentVo.setDesc(track.getApproveMess());
+            }
+        } else if (UserWorkStatus.UWS_3.getCode().equals(user.getStatus())) {
+            userAgentVo.setDesc(sysUserTrackService.getApproveMessByUserId(sysUser.getId(), "1"));
+        }
+        List<EsmUserImageQueryVo> esmUserImageQueryVo = esmUserImageService.getEsmUserImageQueryVo(sysUser.getId());
+        if (CollUtil.isNotEmpty(esmUserImageQueryVo)) {
+            userAgentVo.setEsmUserImageVo(esmUserImageQueryVo);
+        }
+        return userAgentVo;
+    }
+
+    @Override
+    @Transactional
+    public void agentSubmit(SysUser user, AgentSubmitDto dto) {
+        SysUserInfo info = sysUserInfoService.getById(user.getId());
+        // 银行卡认证
+        UnionPayRequest request = new UnionPayRequest();
+        request.setName(user.getName());
+        request.setPhoneNo(user.getMobile());
+        request.setCertNo(user.getIdentity());
+        request.setCardNo(dto.getBankName());
+        UnionPayResponse response = unionPayRequestApiComponent.bankCardVerifyRequest(request);
+        String msg;
+        Integer status;
+        if (response != null && !"00".equals(response.getRespCode())) {
+            msg = "认证信息不一致:" + response.getDetailRespMsg();
+            status = UserAgentStatus.UAS_4.getCode();
+        } else {
+            msg = "银行卡认证成功";
+            status = UserAgentStatus.UAS_3.getCode();
+            SysUserBankCardVO sysUserBankCardVO = new SysUserBankCardVO();
+            sysUserBankCardVO.setUserId(dto.getUserId());
+            sysUserBankCardVO.setBankNumber(dto.getBankName());
+            sysUserBankCardVO.setBankAccount(dto.getAccountno());
+            sysUserBankCardVO.setPhoneNo(user.getMobile());
+            sysUserBankCardVO.setRealUserName(user.getName());
+            sysUserBankCardVO.setUserName(user.getName());
+            bankCardService.insertByBankNumber(sysUserBankCardVO);
+        }
+        // 保存个代银行卡认证轨迹
+        SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
+                user.getId(), status,
+                BaseController.getUserName(),
+                null, msg);
+
+        user.setStatus(UserWorkStatus.UWS_2.getCode());
+        user.setUpdateBy("admin");
+        user.setUpdateTime(new Date());
+        this.saveOrUpdate(user);
+        info.setBankName(dto.getBankName());
+        info.setAccountno(dto.getAccountno());
+        sysUserInfoService.saveOrUpdate(info);
+        // 影像资料
+        LambdaQueryWrapper<EsmUserImage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EsmUserImage::getUserId, user.getId());
+        esmUserImageService.remove(wrapper);
+
+        List<EsmUserImageVo> esmUserImageVo = dto.getEsmUserImageVo();
+        String finalUserId = user.getId();
+        List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, finalUserId)).collect(Collectors.toList());
+        esmUserImageService.saveBatch(esmUserImages);
+    }
+
+    @Override
+    public SysUser getByRoleIdAndDeptId(String roleId, String deptId) {
+        return baseMapper.getByRoleIdAndDeptId(roleId, deptId);
+    }
 }

+ 6 - 3
src/main/java/com/ydtech/modules/admin/service/impl/WechatServiceImpl.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.admin.service.impl;
 
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
+import com.ydtech.constants.enums.WechatOpenSystem;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.dao.SysUserRoleMapper;
@@ -21,6 +22,8 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
+import java.util.Map;
+
 @Slf4j
 @Service
 @RequiredArgsConstructor
@@ -31,11 +34,11 @@ public class WechatServiceImpl implements WechatService {
 
     private final SysUserService sysUserService;
 
-    private final WxMpService wxMpService;
+    private final Map<String, WxMpService> wxMpService;
 
     @Override
     public HttpResult<WechatVo> login(WechatLoginVo wechatLoginVo) throws WxErrorException {
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.JZG.getCode()).getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
         String openId = accessToken.getOpenId();
         SysUser sysUser = sysUserService.lambdaQuery()
                 .eq(SysUser::getOpenid, openId)
@@ -56,7 +59,7 @@ public class WechatServiceImpl implements WechatService {
 
     @Override
     public HttpResult<Object> bind(WechatBindVo wechatBindVo, String userId) throws WxErrorException {
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatBindVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.JZG.getCode()).getOAuth2Service().getAccessToken(wechatBindVo.getCode());
         String openId = accessToken.getOpenId();
 
         SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getOpenid, openId).one();

+ 59 - 0
src/main/java/com/ydtech/modules/admin/utils/UserAgentTrackUtils.java

@@ -0,0 +1,59 @@
+package com.ydtech.modules.admin.utils;
+
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserRecord;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+import com.ydtech.modules.admin.service.SysUserAgentTrackService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Service
+public class UserAgentTrackUtils {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private SysUserAgentTrackService sysUserAgentTrackService;
+
+    @Async
+    public void addTrack (String userId ,
+                          Integer status,
+                          String createBy,
+                          String approveId,
+                          String msg){
+        SysUserAgentTrack sysUserAgentTrack = new SysUserAgentTrack();
+        sysUserAgentTrack.setUserId(userId);
+        sysUserAgentTrack.setCreateBy(createBy);
+        sysUserAgentTrack.setCreateTime(LocalDateTime.now());
+        sysUserAgentTrack.setStatus(status);
+        sysUserAgentTrack.setApproveMess(msg);
+        if(StringUtils.isNotBlank(approveId)){
+            SysUser approveUser = sysUserService.getByUserId(approveId);
+            sysUserAgentTrack.setApproveId(approveId);
+            sysUserAgentTrack.setApproveName(approveUser.getName());
+        }else {
+            sysUserAgentTrack.setApproveName("系统认证");
+        }
+        sysUserAgentTrackService.save(sysUserAgentTrack);
+    }
+
+    @Async
+    public void addTrack (String userId ,
+                          Integer status,
+                          String createBy){
+        SysUserAgentTrack sysUserAgentTrack = new SysUserAgentTrack();
+        sysUserAgentTrack.setUserId(userId);
+        sysUserAgentTrack.setCreateBy(createBy);
+        sysUserAgentTrack.setCreateTime(LocalDateTime.now());
+        sysUserAgentTrack.setStatus(status);
+        sysUserAgentTrackService.save(sysUserAgentTrack);
+    }
+}

+ 40 - 4
src/main/java/com/ydtech/modules/esm/dao/EsmUserReferrerMapper.java

@@ -3,10 +3,7 @@ package com.ydtech.modules.esm.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.dto.EmployeeIncreaseReportDto;
-import com.ydtech.modules.admin.model.dto.EsmUserReferrerDTO;
-import com.ydtech.modules.admin.model.dto.SysUserDto;
-import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
 import com.ydtech.modules.admin.model.vo.SysReferrerVo;
@@ -261,5 +258,44 @@ public interface EsmUserReferrerMapper extends BaseMapper<EsmUserReferrer> {
      */
     List<SysUserTeamDto>  getByTeamByLevel(@Param("userId") String userId,@Param("level") String level,@Param("status") String status);
 
+    /**
+     * 个代当天认证统计
+     * @param userId
+     * @param level
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<SysUserTeamStaticDto> authNowStatics(@Param("userId")String userId, @Param("level")int level, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    /**
+     * 个代七天认证统计
+     *
+     * @param userId
+     * @param level
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<SysUserTeamStaticDto> authSevenStatics(@Param("userId")String userId, @Param("level")int level, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+
+    /**
+     * 个代三十天认证统计
+     * @param userId
+     * @param level
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<SysUserTeamStaticDto> authThreeStatics(@Param("userId")String userId, @Param("level")int level, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    /**
+     *  个代总数统计
+     * @param userId
+     * @param level
+     * @return
+     */
+    List<SysUserTeamStaticDto> authStatics(@Param("userId")String userId, @Param("level")int level);
 
 }

+ 5 - 5
src/main/java/com/ydtech/modules/esm/model/vo/EsmUserCountVO.java

@@ -51,11 +51,11 @@ public class EsmUserCountVO implements Serializable {
         public AggregateDataList(List<EsmUserPolicyVO> userPolicyList) {
             AggregateData aggregateDataO = new AggregateData();
             userPolicyList.forEach(x->{
-                aggregateDataO.setOrdernum(aggregateDataO.getOrdernum() + aggregateDataO.getOrdernum());
-                aggregateDataO.setPolicynum(aggregateDataO.getPolicynum() + aggregateDataO.getPolicynum());
-                aggregateDataO.setSumpremium(aggregateDataO.getSumpremium() + aggregateDataO.getSumpremium());
-                aggregateDataO.setBjpolicynum(aggregateDataO.getBjpolicynum() + aggregateDataO.getBjpolicynum());
-                aggregateDataO.setBjsumpremium(aggregateDataO.getBjsumpremium() + aggregateDataO.getBjpolicynum());
+                aggregateDataO.setOrdernum(aggregateDataO.getOrdernum() + x.getOrdernum());
+                aggregateDataO.setPolicynum(aggregateDataO.getPolicynum() + x.getPolicynum());
+                aggregateDataO.setSumpremium(aggregateDataO.getSumpremium() + x.getSumpremium());
+                aggregateDataO.setBjpolicynum(aggregateDataO.getBjpolicynum() + x.getBjpolicynum());
+                aggregateDataO.setBjsumpremium(aggregateDataO.getBjsumpremium() + x.getBjpolicynum());
             });
             this.userPolicyList = userPolicyList;
             this.aggregateData = aggregateDataO;

+ 14 - 1
src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java

@@ -4,9 +4,11 @@ package com.ydtech.modules.esm.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.model.vo.SysReferrerVo;
 import com.ydtech.modules.base.model.dto.PageDto;
@@ -72,7 +74,7 @@ public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
      * @param:
      * @return:
      **/
-    BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId);
+    BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId, SysDept dept);
 
     /**
      * 团队业绩统计
@@ -80,6 +82,17 @@ public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
      * @return 团队业绩
      */
     List<EsmUserPolicyForUserVO> queryUserCountForUser(TeamUserQryVO record);
+
+    /**
+     * 个代认证统计
+     *
+     * @param userId
+     * @param start
+     * @param end
+     * @param dateType
+     * @return
+     */
+    List<SysUserTeamStaticDto> authStatics(String userId, String start, String end, Integer dateType);
 }
 
 

+ 53 - 3
src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java

@@ -1,18 +1,25 @@
 package com.ydtech.modules.esm.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
+import com.ydtech.constants.enums.dict.organization.OrganizationSource;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.model.vo.SysReferrerVo;
+import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
@@ -45,6 +52,10 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
     @Autowired
     private SysUserService sysUserService;
 
+    @Autowired
+    private SysDeptService sysDeptService;
+
+
     @Autowired
     private EsmUserReferrerService esmUserReferrerService;
 
@@ -393,7 +404,7 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
                         EsmTeamPolicyVO esmTeamPolicyVO3_t = this.baseMapper.queryOrderCountHz(userList3, record.getStartdate(), record.getEnddate());
                         esmTeamPolicyVO3.setTeamlevel("三级会员");
                         esmTeamPolicyVO3.setTeamnum(userList3.size());
-                        if (esmTeamPolicyVO2_t != null) {
+                        if (esmTeamPolicyVO3_t != null) {
                             esmTeamPolicyVO3.setSumpremium(esmTeamPolicyVO3_t.getSumpremium());
                             esmTeamPolicyVO3.setUsernum(userPolicyList3.size());
                         }
@@ -477,17 +488,36 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
 
 
     @Override
-    public BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId) {
-        List<EsmUserReferrer> esmUserReferrers = lambdaQuery().eq(EsmUserReferrer::getReferrerId, userId).list();
+    public BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId, SysDept dept) {
+        List<EsmUserReferrer> esmUserReferrers = lambdaQuery().eq(EsmUserReferrer::getReferrerId, userId).orderByDesc(EsmUserReferrer::getLevel).list();
         if (esmUserReferrers.isEmpty()) {
             return new BasePageResult<>();
         }
+        int level = esmUserReferrers.get(0).getLevel();
         int i = esmUserReferrers.get(0).getLevel() + 3;
         PageHelper.startPage(managementQueryVo.getPageNum(), managementQueryVo.getPageSize());
         if ("2".equals(managementQueryVo.getAuthenticationStatus())) {
             managementQueryVo.setAuthenticationStatus("-1");
         }
         List<SysUserTeamDto> byTeam = baseMapper.getByTeam(managementQueryVo, userId, i);
+        // 个代特殊处理返回
+        if (OrganizationSource.OS_2.getCode().equals(dept.getManagementSource())) {
+            if(CollUtil.isNotEmpty(byTeam)){
+                for (SysUserTeamDto sysUserTeamDto : byTeam) {
+                    if (UserWorkStatus.UWS_1.getCode().equals(sysUserTeamDto.getStatus())){
+                        if(sysUserTeamDto.getLevel().equals(level)){
+                            sysUserTeamDto.setLevelName("一级代理");
+                        } else if (sysUserTeamDto.getLevel().equals(level + 1)){
+                            sysUserTeamDto.setLevelName("二级代理");
+                        } else if (sysUserTeamDto.getLevel().equals(level + 2)){
+                            sysUserTeamDto.setLevelName("三级代理");
+                        }
+                    }else{
+                        sysUserTeamDto.setLevelName("临时代理");
+                    }
+                }
+            }
+        }
         PageResult<SysUserTeamDto> sysUserPageResult = new PageResult<>(byTeam);
         return new BasePageResult<>(managementQueryVo.getPageNum(), managementQueryVo.getPageSize(), sysUserPageResult.getTotalSize(),
                 sysUserPageResult.getTotalPages(), sysUserPageResult.getContent());
@@ -503,6 +533,26 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
         return this.baseMapper.queryOrderCountForUser(record.getId(), record.getStartdate(), record.getEnddate());
     }
 
+    @Override
+    public List<SysUserTeamStaticDto> authStatics(String userId, String startTime, String endTime, Integer dateType) {
+        List<EsmUserReferrer> esmUserReferrers = lambdaQuery().eq(EsmUserReferrer::getReferrerId, userId).orderByDesc(EsmUserReferrer :: getLevel).list();
+        if (esmUserReferrers.isEmpty()) {
+            return new ArrayList<>();
+        }
+        int i = esmUserReferrers.get(0).getLevel() + 3;
+        List<SysUserTeamStaticDto> dtoList;
+        if (dateType.equals(0)) {
+            dtoList = baseMapper.authStatics(userId, i);
+        } else if (dateType.equals(1)){
+            dtoList = baseMapper.authNowStatics(userId, i,startTime,endTime);
+        } else if(dateType.equals(2)){
+            dtoList = baseMapper.authSevenStatics(userId, i,startTime,endTime);
+        } else{
+            dtoList = baseMapper.authThreeStatics(userId, i,startTime,endTime);
+        }
+        return dtoList;
+    }
+
 }
 
 

+ 1 - 2
src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java

@@ -31,6 +31,7 @@ import com.ydtech.modules.order.service.InsOrdersTrackService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -149,8 +150,6 @@ public class CarSettleController extends BaseController {
                 e.printStackTrace();
                 return HttpResult.error("系统异常");
             }
-            //异步处理推送用工账务平台发放服务
-            insFeeAuditService.sendProject(insOrderNo);
             return HttpResult.ok("审核成功");
         } else {
             return HttpResult.error("订单号有误-未承保");

+ 154 - 0
src/main/java/com/ydtech/modules/fnc/controller/contract/ContractController.java

@@ -0,0 +1,154 @@
+package com.ydtech.modules.fnc.controller.contract;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.dto.TaskStatisticsDto;
+import com.ydtech.modules.admin.model.vo.KztGetDeptUtilsDto;
+import com.ydtech.modules.admin.model.vo.TaskStatisticsVo;
+import com.ydtech.modules.admin.utils.KztGetDeptUtils;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
+import com.ydtech.modules.fnc.entity.ContractEntity;
+import com.ydtech.modules.fnc.service.contract.ContractService;
+import com.ydtech.modules.inv.model.InvAccount;
+import com.ydtech.modules.fnc.vo.ContractVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+
+@RestController
+@Api(tags = "公司内部合同")
+@RequestMapping("/fnc/contract")
+public class ContractController extends BaseController {
+    @Autowired
+    private ContractService contractService;
+
+    /**
+     * @param contractDto
+     * @return 新增合同
+     */
+    @PostMapping("saveAndUpdate")
+    @ApiOperation("新增修改")
+    public HttpResult insertInsAccount(@RequestBody ContractDto contractDto) {
+        contractService.saveAndUpdate(contractDto);
+        return HttpResult.ok(StringUtils.isNotBlank(contractDto.getId()) ? "编辑成功" : "新增成功");
+    }
+
+    /**
+     * @description: 分页查询
+     * @author: whp
+     **/
+    @PostMapping("queryPage")
+    @ApiOperation(value = "合同分页查询")
+    public HttpResult<IPage<ContractEntity>> queryPage(@RequestBody ContractVo contractVO) {
+        try {
+            IPage<ContractEntity> result = contractService.queryPage(contractVO);
+            return HttpResult.ok("查询数据成功", result);
+        } catch (Exception e) {
+            return HttpResult.error("查询错误" + e.getMessage());
+        }
+    }
+
+
+    /**
+     * @description: 分页查询
+     * @author: whp
+     **/
+    @DeleteMapping("/delete/{id}")
+    @ApiOperation(value = "删除")
+    public HttpResult<Object> deleteById(@PathVariable("id") String id) {
+        contractService.deleteById(id);
+        return HttpResult.ok("删除成功");
+    }
+
+    /**
+     * @description: 分页查询
+     * @author: whp
+     **/
+    @GetMapping("/{id}")
+    @ApiOperation(value = "回显")
+    public HttpResult<ContractEntity> getById(@PathVariable("id") String id) {
+        return HttpResult.ok(contractService.getSelectById(id));
+    }
+
+    /**
+     * @param contractDto
+     * @return 合同协议新增
+     */
+    @PostMapping("copyContract")
+    @ApiOperation("合同协议新增")
+    public HttpResult copyContract(@RequestBody ContractDto contractDto) {
+        contractService.copyContract(contractDto);
+        return HttpResult.ok("新增协议成功");
+    }
+
+
+    /**
+     * @param contractVo
+     * @return 合同协议检查是否失效
+     */
+    @PostMapping("checkCopyContract")
+    @ApiOperation("合同协议检查是否失效")
+    public HttpResult<HashMap<String,Object>> checkCopyContract(@RequestBody ContractVo contractVo) {
+        HashMap<String, Object> code = contractService.checkCopyContract(contractVo);
+        return HttpResult.ok(code);
+    }
+
+  /**
+     * @param contractVo
+     * @return 同以及未失效的关联合同列表
+     */
+    @PostMapping("copyContractList")
+    @ApiOperation("关联合同列表")
+    public HttpResult<List<ContractDto>> copyContractList(@RequestBody ContractVo contractVo) {
+        List<ContractDto> result = contractService.copyContractList(contractVo);
+        return HttpResult.ok(result);
+    }
+
+
+    /**
+     * @param contractVo
+     * @return 补充协议修改状态
+     */
+    @PutMapping("updateFileStatus")
+    @ApiOperation("补充协议修改状态")
+    public HttpResult updateFileStatus(@RequestBody ContractVo contractVo) {
+        contractService.updateFileStatus(contractVo);
+        return HttpResult.ok("补充协议状态修改成功");
+    }
+
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    @PostMapping("supplierContractPage")
+    @ApiOperation(value = "合同报表分页")
+    public HttpResult<IPage<ContractDto>> supplierContractPage(@RequestBody ContractVo contractVO) {
+        try {
+            IPage<ContractDto> result = contractService.supplierContractPage(contractVO);
+            return HttpResult.ok("查询数据成功", result);
+        } catch (Exception e) {
+            return HttpResult.error("查询错误" + e.getMessage());
+        }
+    }
+
+    /**
+     * @description: 合同编辑
+     * @author: whp
+     **/
+    @PostMapping("update")
+    @ApiOperation(value = "合同编辑")
+    public HttpResult updateByEntity(@RequestBody ContractVo contractVo) {
+        contractService.updateByEntity(contractVo);
+        return HttpResult.ok("合同编辑成功");
+    }
+
+}

+ 46 - 0
src/main/java/com/ydtech/modules/fnc/controller/contract/ControllerTimer.java

@@ -0,0 +1,46 @@
+package com.ydtech.modules.fnc.controller.contract;
+
+import com.ydtech.modules.fnc.service.contract.ContractService;
+import com.ydtech.utils.DateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ *  合同定时任务
+ */
+@Slf4j
+@Component
+public class ControllerTimer {
+    @Autowired
+    private ContractService contractService;
+
+
+
+
+    /**
+     *  @version
+     *  @author: whp
+     *  @Date: 2024/11/18
+     *  @Description:
+     */
+    @Scheduled(cron = "0 0 0 * * ?")
+    private void updateOrderDateNoon() {
+        //如果合同得失效日期有值如果过今天 超过失效日期则改为合同失效
+        log.info("更新合同失效状态,启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+        String nowTime = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss");
+
+        try {
+            contractService.batchOrderDate(nowTime);
+            log.info("定时更新合同失效状态");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("定时更新合同失效状态:{}", e.getMessage());
+        }
+    }
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/fnc/dao/contract/ContractFileMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.fnc.dao.contract;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.fnc.entity.ContractFileEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ContractFileMapper extends BaseMapper<ContractFileEntity> {
+    void deleteByContractId(String id);
+
+    /**
+     *
+     * @param id
+     * @return  通过合同获取附件
+     */
+    List<ContractFileEntity> selectByContractId(String id);
+}

+ 50 - 0
src/main/java/com/ydtech/modules/fnc/dao/contract/ContractMapper.java

@@ -0,0 +1,50 @@
+package com.ydtech.modules.fnc.dao.contract;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.fnc.entity.ContractEntity;
+import com.ydtech.modules.fnc.vo.ContractVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Mapper
+public interface ContractMapper  extends BaseMapper<ContractEntity> {
+    /**
+     *
+     * @param page
+     * @param contractVO
+     * @return  合同分页
+     */
+    IPage<ContractEntity> queryPage(@Param("page") Page page,@Param("vo") ContractVo contractVO);
+
+    /**
+     *
+     * @return  获取合同最大编码
+     */
+    HashMap<String, Object> getMaxCode();
+
+    /**
+     *
+     * @param id
+     * @return  获取新增协议最大的合同编码
+     */
+    HashMap<String, Object> copyContractCode(String id);
+
+    /**
+     *
+     * @param nowTime
+     * @return  当前时间过滤失效日期
+     */
+    List<ContractEntity> selectFilterFailure(String nowTime);
+
+    /**
+     * 修改
+     * @param contractEntity
+     */
+    void updateMapper(ContractEntity contractEntity);
+
+}

+ 36 - 0
src/main/java/com/ydtech/modules/fnc/dao/contract/ContractSupplierMapper.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.fnc.dao.contract;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
+import com.ydtech.modules.fnc.dto.contract.ContractSupplierDto;
+import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
+import com.ydtech.modules.fnc.vo.ContractVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ContractSupplierMapper  extends BaseMapper<ContractSupplierEntity> {
+    void deleteBySupplierIds(@Param("id") String id);
+
+    /**
+     *
+     * @param id
+     * @return
+     */
+    List<ContractSupplierEntity> selectByContractId(String id);
+
+
+
+    /**
+     *
+     * @param supplierIdList
+     * @return  供应商合同关联表
+     */
+    List<ContractSupplierEntity> selecSupplierList(ContractSupplierDto contractSupplierDto);
+
+    IPage<ContractDto> queryPage(@Param("page") Page page,@Param("vo") ContractVo contractVO);
+}

+ 126 - 0
src/main/java/com/ydtech/modules/fnc/dto/contract/ContractDto.java

@@ -0,0 +1,126 @@
+package com.ydtech.modules.fnc.dto.contract;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.fnc.entity.ContractFileEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel("合同实体类")
+public class ContractDto implements Serializable {
+
+    @ApiModelProperty("主键")
+    private String id;
+
+    @ApiModelProperty("合同编码")
+    private String contractCode;
+
+    @ApiModelProperty("合同名称")
+    private String contractName;
+
+
+    @ApiModelProperty("内部公司名称")
+    private String internalCompanyName;
+
+    @ApiModelProperty("内部公司id")
+    private String internalCompanyId;
+
+
+    @ApiModelProperty("外部公司名称")
+    private String externalCompaniesName;
+
+
+    @ApiModelProperty("外部公司id")
+    private String externalCompaniesId;
+
+
+    @ApiModelProperty("供应商名称")
+    private String supplierName;
+
+    @ApiModelProperty("供应商id")
+    private String supplierId;
+
+
+    @ApiModelProperty("合同类型")
+    private String contractType;
+
+    @ApiModelProperty("是否开口合同 0 是 1 否")
+    private String isOpenContract;
+
+
+    @ApiModelProperty("是否顺延 0 是 1 否")
+    private String shouldPostponed;
+
+
+    @ApiModelProperty("到期提醒")
+    private String expirationReminder;
+
+
+    @ApiModelProperty("生效日期")
+    private LocalDateTime effectiveDate;
+
+
+    @ApiModelProperty("失效日期")
+    private LocalDateTime expiringDate;
+
+
+    @ApiModelProperty("顺延时间")
+    private LocalDateTime shouldPostponedDate;
+
+
+    @ApiModelProperty("顺延后失效时间")
+    private LocalDateTime shouldPostponedEffectiveDate;
+
+
+    @ApiModelProperty("创建日期")
+    private LocalDateTime createTime;
+
+
+    @ApiModelProperty("附件路径")
+    private String filePathId;
+
+
+    @ApiModelProperty("附件路径idList")
+    private List<String> filePathIdList;
+
+
+    @ApiModelProperty("部门编码")
+    private String deptId;
+
+    @ApiModelProperty("用户编码")
+    private String userId;
+
+    @ApiModelProperty("供应商id")
+    private List<String> supplierIdList;
+
+    @ApiModelProperty("内外部类型")
+    private String externType;
+
+    @ApiModelProperty("内部类型")
+    private String internalType;
+
+    @ApiModelProperty("合同是否有效 0 有效 1 无效")
+    private String contractStatus;
+
+    @ApiModelProperty("父级id")
+    private String parentId;
+
+    @ApiModelProperty("账户简称")
+    private String namesimple;
+
+    @ApiModelProperty("合同附件集合")
+    private List<ContractFileEntity> contractFileEntityList;
+
+
+    @ApiModelProperty("顺延日")
+    private String dateTime;
+
+
+    @ApiModelProperty("顺延时间类型")
+    private String dateType;
+}

+ 33 - 0
src/main/java/com/ydtech/modules/fnc/dto/contract/ContractFileDto.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.fnc.dto.contract;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("合同附件关联实体")
+public class ContractFileDto implements Serializable {
+
+    @ApiModelProperty("主键")
+    private String id;
+
+    @ApiModelProperty("附件id")
+    private String fileId;
+
+    @ApiModelProperty("合同id")
+    private String contractId;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("部门id")
+    private String deptId;
+
+    @ApiModelProperty("用户id")
+    private String userId;
+
+}

+ 38 - 0
src/main/java/com/ydtech/modules/fnc/dto/contract/ContractSupplierDto.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.fnc.dto.contract;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel("供应商合同实体")
+public class ContractSupplierDto  implements Serializable {
+
+    @ApiModelProperty("主键")
+    private String id;
+
+    @ApiModelProperty("供应商id")
+    private String supplierId;
+
+    @ApiModelProperty("合同id")
+    private String contractId;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("部门id")
+    private String deptId;
+
+    @ApiModelProperty("用户id")
+    private String userId;
+
+
+    @ApiModelProperty("用户id")
+    private List<String> supplierIdList;
+}

+ 177 - 0
src/main/java/com/ydtech/modules/fnc/entity/ContractEntity.java

@@ -0,0 +1,177 @@
+package com.ydtech.modules.fnc.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.naming.Name;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Getter
+@Setter
+@TableName("ins_contract")
+@ApiModel(value = "insContract对象", description = "公司内部合同")
+public class ContractEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键")
+    @TableId("id")
+    private String id;
+
+    @ApiModelProperty("合同编码")
+    @TableField("contract_code")
+    private String contractCode;
+
+    @ApiModelProperty("合同名称")
+    @TableField("contract_name")
+    private String contractName;
+
+
+    @ApiModelProperty("内部公司名称")
+    @TableField("internal_company_name")
+    private String internalCompanyName;
+
+
+    @ApiModelProperty("内部公司id")
+    @TableField("internal_company_id")
+    private String internalCompanyId;
+
+
+    @ApiModelProperty("外部公司名称")
+    @TableField("external_companies_name")
+    private String externalCompaniesName;
+
+
+    @ApiModelProperty("外部公司id")
+    @TableField("external_companies_id")
+    private String externalCompaniesId;
+
+
+
+    @ApiModelProperty("供应商名称")
+    @TableField("supplier_name")
+    private String supplierName;
+
+
+    @ApiModelProperty("供应商id")
+    @TableField("supplier_id")
+    private String supplierId;
+
+
+    @ApiModelProperty("合同类型")
+    @TableField("contract_type")
+    private String contractType;
+
+    @ApiModelProperty("是否开口合同 0 是 1 否")
+    @TableField("is_open_contract")
+    private String isOpenContract;
+
+
+    @ApiModelProperty("是否顺延 0 是 1 否")
+    @TableField("should_postponed")
+    private String shouldPostponed;
+
+
+    @ApiModelProperty("到期提醒")
+    @TableField("expiration_reminder")
+    private String expirationReminder;
+
+
+
+    @ApiModelProperty("生效日期")
+    @TableField("effective_date")
+    private LocalDateTime effectiveDate;
+
+
+
+    @ApiModelProperty("失效日期")
+    @TableField("expiring_date")
+    private LocalDateTime expiringDate;
+
+
+    @ApiModelProperty("顺延时间")
+    @TableField("should_postponed_date")
+    private LocalDateTime shouldPostponedDate;
+
+
+    @ApiModelProperty("顺延后失效时间")
+    @TableField("should_postponed_effective_date")
+    private LocalDateTime shouldPostponedEffectiveDate;
+
+    @ApiModelProperty("创建日期")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+
+    @ApiModelProperty("附件路径")
+    @TableField("file_path_id")
+    private String filePathId;
+
+
+
+    @ApiModelProperty("部门编码")
+    @TableField("dept_id")
+    private String deptId;
+
+
+    @ApiModelProperty("用户编码")
+    @TableField("user_id")
+    private String userId;
+
+
+    @ApiModelProperty("外部类型")
+    @TableField("extern_type")
+    private String externType;
+
+    @ApiModelProperty("内部类型")
+    @TableField("internal_type")
+    private String internalType;
+
+    @ApiModelProperty("合同是否有效 0 有效 1 无效")
+    @TableField("contract_status")
+    private String contractStatus;
+
+
+    @ApiModelProperty("父级id")
+    @TableField("parent_id")
+    private String parentId;
+
+    @ApiModelProperty("顺延时间类型")
+    @TableField("date_type")
+    private String dateType;
+
+
+    @ApiModelProperty("顺延日")
+    @TableField("date_time")
+    private String dateTime;
+
+
+    @ApiModelProperty("供应商id")
+    @TableField(exist = false)
+    private List<String> supplierIdList;
+
+    @ApiModelProperty("附件路径idList")
+    @TableField(exist = false)
+    private List<String> filePathIdList;
+
+    @ApiModelProperty("供应商名称")
+    @TableField(exist = false)
+    private List<String> namesimpleList;
+
+
+    @ApiModelProperty("合同附件集合")
+    @TableField(exist = false)
+    private List<ContractFileEntity> contractFileEntityList;
+
+
+
+
+
+}

+ 75 - 0
src/main/java/com/ydtech/modules/fnc/entity/ContractFileEntity.java

@@ -0,0 +1,75 @@
+package com.ydtech.modules.fnc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@TableName("ins_contract_file")
+@ApiModel(value = "insContractFile对象", description = "合同附件关联表")
+public class ContractFileEntity implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId("id")
+    private String id;
+
+    @ApiModelProperty("附件id")
+    @TableField("file_id")
+    private String fileId;
+
+    @ApiModelProperty("合同id")
+    @TableField("contract_id")
+    private String contractId;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("部门id")
+    @TableField("dept_id")
+    private String deptId;
+
+    @ApiModelProperty("用户id")
+    @TableField("user_id")
+    private String userId;
+
+    @ApiModelProperty("文件名称")
+    @TableField(exist = false)
+    private String fileName;
+
+
+    @ApiModelProperty("文件类型")
+    @TableField(exist = false)
+    private String fileType;
+
+
+    @ApiModelProperty("文件存储路劲")
+    @TableField(exist = false)
+    private String filePath;
+
+
+    @ApiModelProperty("文件访问路劲")
+    @TableField(exist = false)
+    private String url;
+
+
+
+    @ApiModelProperty("上传时间")
+    @TableField(exist = false)
+    private String updateTime;
+
+
+    @ApiModelProperty("上传用户")
+    @TableField(exist = false)
+    private String username;
+
+
+}

+ 47 - 0
src/main/java/com/ydtech/modules/fnc/entity/ContractSupplierEntity.java

@@ -0,0 +1,47 @@
+package com.ydtech.modules.fnc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@TableName("ins_contract_supplier")
+@ApiModel(value = "insContractSupplier对象", description = "合同供应商关联表")
+public class ContractSupplierEntity implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId("id")
+    private String id;
+
+    @ApiModelProperty("供应商id")
+    @TableField("supplier_id")
+    private String supplierId;
+
+    @ApiModelProperty("合同id")
+    @TableField("contract_id")
+    private String contractId;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("部门id")
+    @TableField("dept_id")
+    private String deptId;
+
+    @ApiModelProperty("用户id")
+    @TableField("user_id")
+    private String userId;
+
+    @ApiModelProperty("供应商名称")
+    @TableField(exist = false)
+    private String namesimple;
+}

+ 0 - 2
src/main/java/com/ydtech/modules/fnc/service/InsFeeAuditService.java

@@ -44,6 +44,4 @@ public interface InsFeeAuditService extends IService<InsFeeAudit> {
       */
      InsFeeAudit getFeeAuditByInsOrderNo(String insOrderNo);
 
-     void sendProject(String insOrderNo);
-
 }

+ 20 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/ContractFileService.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.fnc.service.contract;
+
+import com.ydtech.modules.fnc.entity.ContractFileEntity;
+
+import java.util.List;
+
+public interface ContractFileService {
+    /**
+     *  新增附件关联表
+     * @param filePathIdList
+     * @param id
+     */
+    void saveAndUpdate(List<String> filePathIdList, String id);
+
+    /**
+     * @param id
+     * @return  通过合同id 获取附件
+     */
+    List<ContractFileEntity> getByContractById(String id);
+}

+ 79 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/ContractService.java

@@ -0,0 +1,79 @@
+package com.ydtech.modules.fnc.service.contract;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
+import com.ydtech.modules.fnc.entity.ContractEntity;
+import com.ydtech.modules.fnc.vo.ContractVo;
+
+import java.util.HashMap;
+import java.util.List;
+
+
+public interface ContractService extends IService<ContractEntity> {
+
+    /**
+     *
+     * @param contractDto
+     * @return  新增或 编辑合同
+     */
+    void saveAndUpdate(ContractDto contractDto);
+    /**
+     * @description:   分页查询
+     * @author: whp
+     **/
+    IPage<ContractEntity> queryPage(ContractVo contractVO);
+
+    void deleteById(String id);
+
+    /**
+     *
+     * @param id
+     * @return  回显接口
+     */
+    ContractEntity getSelectById(String id);
+    /**
+     *
+     * @param contractDto
+     * @return  合同协议新增
+     */
+    void copyContract(ContractDto contractDto);
+
+    /**
+     *     合同协议检查是否失效
+     * @param contractVo
+     */
+    HashMap<String,Object> checkCopyContract(ContractVo contractVo);
+
+
+    /**
+     * 同以及未失效的关联合同列表
+     * @param contractVo
+     */
+    List<ContractDto> copyContractList(ContractVo contractVo);
+    /**
+     * @param contractVo
+     * @return 补充协议修改状态
+     */
+    void updateFileStatus(ContractVo contractVo);
+
+    /**
+     *
+     * @param contractVO
+     * @return  合同供应商分页
+     */
+    IPage<ContractDto> supplierContractPage(ContractVo contractVO);
+
+
+
+    /**
+     * 定时更新合同失效状态
+     */
+    void batchOrderDate(String nowTime);
+    /**
+     * @description: 合同编辑
+     * @author: whp
+     **/
+    void updateByEntity(ContractVo contractVo);
+}

+ 30 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/ContractSupplierService.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.fnc.service.contract;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
+import com.ydtech.modules.fnc.dto.contract.ContractSupplierDto;
+import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
+import com.ydtech.modules.fnc.vo.ContractVo;
+
+import java.util.List;
+
+public interface ContractSupplierService {
+    void saveAndUpdate(String contractType,List<String> supplierIdList, String id);
+
+    /**
+     *
+     * @param id
+     * @return 通过合同id返回供应商
+     */
+    List<ContractSupplierEntity> getByContractById(String id);
+
+
+    List<ContractSupplierEntity> selecSupplierList(ContractSupplierDto contractSupplierDto);
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    IPage<ContractDto> supplierContractPage(ContractVo contractVO);
+
+}

+ 44 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/impl/ContractFileServiceImpl.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.fnc.service.contract.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fnc.dao.contract.ContractFileMapper;
+import com.ydtech.modules.fnc.entity.ContractFileEntity;
+import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
+import com.ydtech.modules.fnc.service.contract.ContractFileService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class ContractFileServiceImpl extends ServiceImpl<ContractFileMapper, ContractFileEntity> implements ContractFileService {
+    @Override
+    public void saveAndUpdate(List<String> filePathIdList, String id) {
+        baseMapper.deleteByContractId(id);
+        List<ContractFileEntity> inserList = new ArrayList<>();
+        String deptId = BaseController.getDeptId();
+        String userId = BaseController.getUserId();
+        for (String s : filePathIdList) {
+            ContractFileEntity contractFileEntity = new ContractFileEntity();
+            contractFileEntity.setFileId(s);
+            contractFileEntity.setContractId(id);
+            contractFileEntity.setCreateTime(LocalDateTime.now());
+            contractFileEntity.setUserId(userId);
+            contractFileEntity.setDeptId(deptId);
+            inserList.add(contractFileEntity);
+        }
+        this.saveBatch(inserList);
+    }
+
+    /**
+     *
+     * @param id
+     * @return  通过合同获取附件
+     */
+    @Override
+    public List<ContractFileEntity> getByContractById(String id) {
+        return baseMapper.selectByContractId(id);
+    }
+}

+ 91 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/impl/ContractSupplierServiceImpl.java

@@ -0,0 +1,91 @@
+package com.ydtech.modules.fnc.service.contract.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.vo.PageVo;
+import com.ydtech.modules.fnc.dao.contract.ContractSupplierMapper;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
+import com.ydtech.modules.fnc.dto.contract.ContractSupplierDto;
+import com.ydtech.modules.fnc.entity.ContractEntity;
+import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
+import com.ydtech.modules.fnc.service.contract.ContractSupplierService;
+import com.ydtech.modules.fnc.vo.ContractVo;
+import com.ydtech.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ContractSupplierServiceImpl extends ServiceImpl<ContractSupplierMapper, ContractSupplierEntity> implements ContractSupplierService {
+    @Autowired
+    private ContractSupplierService contractSupplierService;
+
+    /**
+     * 合同供应商关联新增
+     *
+     * @param supplierIdList
+     * @param id
+     */
+    @Override
+    @Transactional
+    public void saveAndUpdate(String contractType,List<String> supplierIdList, String id) {
+        if(!("1".equals(contractType) || "2".equals(contractType))){
+            supplierIdList=new ArrayList<>();
+        }
+        baseMapper.deleteBySupplierIds(id);
+        List<ContractSupplierEntity> inserList = new ArrayList<>();
+        String deptId = BaseController.getDeptId();
+        String userId = BaseController.getUserId();
+        for (String s : supplierIdList) {
+            ContractSupplierEntity contractSupplierEntity = new ContractSupplierEntity();
+            contractSupplierEntity.setSupplierId(s);
+            contractSupplierEntity.setContractId(id);
+            contractSupplierEntity.setCreateTime(LocalDateTime.now());
+            contractSupplierEntity.setUserId(userId);
+            contractSupplierEntity.setDeptId(deptId);
+            inserList.add(contractSupplierEntity);
+        }
+        this.saveBatch(inserList);
+    }
+
+    @Override
+    public List<ContractSupplierEntity> getByContractById(String id) {
+        return baseMapper.selectByContractId(id);
+    }
+
+    @Override
+    public List<ContractSupplierEntity> selecSupplierList(ContractSupplierDto contractSupplierDto) {
+        return baseMapper.selecSupplierList(contractSupplierDto);
+    }
+
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    @Override
+    public IPage<ContractDto> supplierContractPage(ContractVo contractVO) {
+        PageVo<ContractVo> pageVo = new PageVo<>();
+        Page page = new Page(contractVO.getPageNum(), contractVO.getPageSize());
+        pageVo.setPageNum(contractVO.getPageNum());
+        pageVo.setPageSize(contractVO.getPageSize());
+
+//        if (contractVO.getSupplierIdList() != null && !contractVO.getSupplierIdList().isEmpty()) { //查关联表获取合同id
+//            ContractSupplierDto contractSupplierDto = new ContractSupplierDto();
+//            contractSupplierDto.setSupplierIdList(contractVO.getSupplierIdList());
+//            List<ContractSupplierEntity> contractSupplierEntityList = contractSupplierService.selecSupplierList(contractSupplierDto);
+//            List<String> contractIdList = contractSupplierEntityList.stream().map(ContractSupplierEntity::getContractId).collect(Collectors.toList());
+//            contractVO.setContractIdList(contractIdList);
+//
+//        }
+        IPage<ContractDto> queriedPage = baseMapper.queryPage(page, contractVO);
+        return queriedPage;
+    }
+}

+ 486 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/impl/contractServiceImpl.java

@@ -0,0 +1,486 @@
+package com.ydtech.modules.fnc.service.contract.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.vo.SysDeptTreeVo;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.vo.PageVo;
+import com.ydtech.modules.fnc.dao.contract.ContractMapper;
+import com.ydtech.modules.fnc.dao.contract.ContractSupplierMapper;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
+import com.ydtech.modules.fnc.dto.contract.ContractSupplierDto;
+import com.ydtech.modules.fnc.entity.ContractEntity;
+import com.ydtech.modules.fnc.entity.ContractFileEntity;
+import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
+import com.ydtech.modules.fnc.service.contract.ContractFileService;
+import com.ydtech.modules.fnc.service.contract.ContractService;
+import com.ydtech.modules.fnc.service.contract.ContractSupplierService;
+import com.ydtech.modules.fnc.vo.ContractVo;
+import com.ydtech.modules.inv.dao.InvAccountMapper;
+import com.ydtech.modules.inv.model.InvAccount;
+import com.ydtech.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class contractServiceImpl extends ServiceImpl<ContractMapper, ContractEntity> implements ContractService {
+
+    @Autowired
+    private ContractMapper contractMapper;
+    @Autowired
+    private InvAccountMapper invAccountMapper;
+
+    @Autowired
+    private ContractSupplierMapper contractSupplierMapper;
+
+    @Autowired
+    private ContractSupplierService contractSupplierService;
+
+    @Autowired
+    private ContractFileService contractFileService;
+
+    /**
+     * @param contractDto
+     * @return 新增合同
+     */
+    @Override
+    @Transactional
+    public void saveAndUpdate(ContractDto contractDto) {
+        if (StringUtils.isEmpty(contractDto.getId())) {
+            ContractEntity contractEntity = new ContractEntity();
+            BeanUtils.copyProperties(contractDto, contractEntity);
+            String userId = BaseController.getUserId();
+            String deptId = BaseController.getDeptId();
+            contractEntity.setDeptId(deptId);
+            contractEntity.setUserId(userId);
+            contractEntity.setCreateTime(LocalDateTime.now());
+//          合同编码生成
+            String contractCode = this.generateCode(contractDto);
+            contractEntity.setContractCode(contractCode);
+//           添加关联表  供应商与合同
+            List<String> supplierIdList = contractDto.getSupplierIdList();
+            //甲方名称
+            String name = this.getNameInv(contractDto.getExternalCompaniesId());
+            contractEntity.setExternalCompaniesName(name);
+
+            //乙方名称
+            String interName = this.getNameInv(contractDto.getInternalCompanyId());
+            contractEntity.setInternalCompanyName(interName);
+
+            contractEntity.setContractStatus("0");
+//            if(contractDto.getExpiringDate() !=null){
+//                LocalDateTime shouldPostponedDate =this.saveShouldPostponedDate(contractDto);
+//                contractEntity.setShouldPostponedDate(shouldPostponedDate);
+//            }
+
+            baseMapper.insert(contractEntity);
+            if (contractDto.getSupplierIdList() != null) {
+                contractSupplierService.saveAndUpdate(contractDto.getContractType(),supplierIdList, contractEntity.getId());
+            }
+            if (contractDto.getFilePathIdList() != null) {
+                contractFileService.saveAndUpdate(contractDto.getFilePathIdList(), contractEntity.getId());
+            }
+        } else {
+            ContractEntity contractEntity = new ContractEntity();
+            BeanUtils.copyProperties(contractDto, contractEntity);
+            if (StringUtils.isNotEmpty(contractDto.getExternalCompaniesId())) {
+                String contractCode = this.generateCode(contractDto);
+                contractEntity.setContractCode(contractCode);
+                //甲方名称
+                String name = this.getNameInv(contractDto.getExternalCompaniesId());
+                contractEntity.setExternalCompaniesName(name);
+            }
+            if (StringUtils.isNotEmpty(contractDto.getInternalCompanyId())) {
+                //乙方名称
+                String interName = this.getNameInv(contractDto.getInternalCompanyId());
+                contractEntity.setInternalCompanyName(interName);
+            }
+
+//            if(contractDto.getExpiringDate() !=null){
+//                LocalDateTime shouldPostponedDate =this.saveShouldPostponedDate(contractDto);
+//                contractEntity.setShouldPostponedDate(shouldPostponedDate);
+//            }
+
+            contractMapper.updateMapper(contractEntity);
+            contractSupplierService.saveAndUpdate(contractDto.getContractType(),contractDto.getSupplierIdList(), contractEntity.getId());
+
+            contractFileService.saveAndUpdate(contractDto.getFilePathIdList(), contractEntity.getId());
+        }
+    }
+
+//    private LocalDateTime saveShouldPostponedDate(ContractDto contractDto) {
+//        LocalDateTime expiringDateNew =null;
+//        String yearTime = contractDto.getYearTime();
+//        String monthTime = contractDto.getMonthTime();
+//        String dayTime = contractDto.getDayTime();
+//
+//
+//
+//        LocalDateTime expiringDate = contractDto.getExpiringDate();
+//        if(StringUtils.isNotEmpty(yearTime)){
+//            expiringDateNew=expiringDate.plusYears(Integer.parseInt(yearTime));
+//        }
+//        if(StringUtils.isNotEmpty(monthTime)){
+//
+//            expiringDateNew=expiringDate.plusMonths(Integer.parseInt(monthTime));
+//        }
+//
+//        if(StringUtils.isNotEmpty(dayTime)){
+//            expiringDateNew=expiringDate.plusDays(Integer.parseInt(dayTime));
+//
+//        }
+//        return expiringDateNew;
+//    }
+
+    private String getNameInv(String externalCompaniesId) {
+        QueryWrapper<InvAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id", externalCompaniesId);
+        InvAccount exinvAccount = invAccountMapper.selectOne(queryWrapper);
+        return exinvAccount.getAccountName();
+    }
+
+    /**
+     * @param contractDto
+     * @return 合同编码规则   甲方简称 首字母 大写 +  当前年份 + 000
+     * @throws BadHanyuPinyinOutputFormatCombination
+     */
+    private String generateCode(ContractDto contractDto) {
+        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+        //          获取首字母大写
+        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
+        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+        format.setVCharType(HanyuPinyinVCharType.WITH_V);
+        if (StringUtils.isEmpty(contractDto.getId())) {
+            StringBuilder stringBuffer = new StringBuilder();
+            //获取最大编码
+            HashMap<String, Object> maxCode = baseMapper.getMaxCode();
+            String Number = "";
+            if (maxCode == null) {
+                Number = "001";
+            } else {
+                Object contractCode = maxCode.get("contractCode");
+
+                int i = Integer.parseInt(contractCode.toString());
+
+                Number = String.format("%03d", i + 1);
+            }
+            /**
+             * 查询甲方简称
+             */
+            String simpleName = this.getSimpleName(contractDto.getExternalCompaniesId());
+            if (StringUtils.isEmpty(simpleName)) {
+                throw new SystemException("甲方简称为空不能新增 生成不了合同编号");
+            }
+
+            char[] chars = simpleName.toCharArray();
+            for (char aChar : chars) {
+                String[] pinyinArray = new String[0];
+                try {
+                    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(aChar, format);
+                } catch (BadHanyuPinyinOutputFormatCombination e) {
+                    throw new RuntimeException(e);
+                }
+                if (pinyinArray != null) {
+                    stringBuffer.append(pinyinArray[0].charAt(0)); // 取首字母
+                    break;
+                }
+            }
+
+            LocalDate currentDate = LocalDate.now();
+            int currentYear = currentDate.getYear();
+            stringBuffer.append(currentYear).append(Number);
+            return stringBuffer.toString();
+        } else {
+            String firtLetter = "";
+            String contractCode = contractDto.getContractCode();
+            String simpleName = this.getSimpleName(contractDto.getExternalCompaniesId());
+            if (StringUtils.isEmpty(simpleName)) {
+                throw new SystemException("甲方简称为空不能新增 生成不了合同编号");
+            }
+            if (simpleName.isEmpty()) {
+                return contractCode;
+            }
+            char c = contractCode.toCharArray()[0];
+            char[] chars = simpleName.toCharArray();
+            for (char aChar : chars) {
+                String[] pinyinArray = new String[0];
+                try {
+                    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(aChar, format);
+                } catch (BadHanyuPinyinOutputFormatCombination e) {
+                    throw new RuntimeException(e);
+                }
+                if (pinyinArray != null) {
+                    firtLetter = String.valueOf(pinyinArray[0].charAt(0)); // 取首字母
+                    break;
+                }
+            }
+            String contractCodeNew = contractCode.replaceFirst(String.valueOf(c), firtLetter);
+            return contractCodeNew;
+        }
+    }
+
+    private String getSimpleName(String externalCompaniesId) {
+        QueryWrapper<InvAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id", externalCompaniesId);
+        InvAccount invAccount = invAccountMapper.selectOne(queryWrapper);
+
+        return invAccount.getSimpleName();
+    }
+
+    @Override
+    public IPage<ContractEntity> queryPage(ContractVo contractVO) {
+
+        PageVo<ContractVo> pageVo = new PageVo<>();
+        Page page = new Page(contractVO.getPageNum(), contractVO.getPageSize());
+        pageVo.setPageNum(contractVO.getPageNum());
+        pageVo.setPageSize(contractVO.getPageSize());
+
+        if (contractVO.getSupplierIdList() != null && !contractVO.getSupplierIdList().isEmpty()) { //查关联表获取合同id
+            ContractSupplierDto contractSupplierDto = new ContractSupplierDto();
+            contractSupplierDto.setSupplierIdList(contractVO.getSupplierIdList());
+            List<ContractSupplierEntity> contractSupplierEntityList = contractSupplierService.selecSupplierList(contractSupplierDto);
+            List<String> contractIdList = contractSupplierEntityList.stream().map(ContractSupplierEntity::getContractId).collect(Collectors.toList());
+            contractVO.setContractIdList(contractIdList);
+
+        }
+
+        IPage<ContractEntity> queriedPage = contractMapper.queryPage(page, contractVO);
+        List<ContractEntity> records = queriedPage.getRecords();
+        if (!records.isEmpty()) {
+            for (ContractEntity record : records) {
+                String id = record.getId();
+                List<ContractSupplierEntity> contractSupplierEntityList = contractSupplierMapper.selectByContractId(id);
+                List<String> nameList = contractSupplierEntityList.stream().map(ContractSupplierEntity::getNamesimple).collect(Collectors.toList());
+                record.setNamesimpleList(nameList);
+            }
+        }
+        return queriedPage;
+    }
+
+    @Override
+    public void deleteById(String id) {
+        baseMapper.deleteById(id);
+    }
+
+    @Override
+    public ContractEntity getSelectById(String id) {
+        ContractEntity contractEntity = baseMapper.selectById(id);
+
+//      供应商
+        List<ContractSupplierEntity> contractSupplierEntityList = contractSupplierService.getByContractById(id);
+        if (contractSupplierEntityList != null && !contractSupplierEntityList.isEmpty()) {
+            List<String> supplierIdList = contractSupplierEntityList.stream().map(ContractSupplierEntity::getSupplierId).collect(Collectors.toList());
+            contractEntity.setSupplierIdList(supplierIdList);
+        }
+//    附件
+        List<ContractFileEntity> contractFileEntityList = contractFileService.getByContractById(id);
+        if (!contractFileEntityList.isEmpty()) {
+            contractEntity.setContractFileEntityList(contractFileEntityList);
+        }
+        return contractEntity;
+    }
+
+    /**
+     * @param contractDto
+     * @return 合同协议新增
+     */
+    @Override
+    public void copyContract(ContractDto contractDto) {
+//        备案编码
+        String conrtactCodeNew = this.contractCopyCode(contractDto.getContractCode(), contractDto.getId());
+        ContractEntity contractEntity = new ContractEntity();
+        BeanUtils.copyProperties(contractDto, contractEntity);
+        String userId = BaseController.getUserId();
+        String deptId = BaseController.getDeptId();
+        contractEntity.setDeptId(deptId);
+        contractEntity.setUserId(userId);
+        contractEntity.setCreateTime(LocalDateTime.now());
+//          合同编码生成
+        contractEntity.setContractCode(conrtactCodeNew);
+//           添加关联表  供应商与合同
+        List<String> supplierIdList = contractDto.getSupplierIdList();
+        contractEntity.setContractStatus("0");
+        contractEntity.setId(null);
+        contractEntity.setParentId(contractDto.getId());
+
+        //甲方名称
+        String name = this.getNameInv(contractDto.getExternalCompaniesId());
+        contractEntity.setExternalCompaniesName(name);
+
+        //乙方名称
+        String interName = this.getNameInv(contractDto.getInternalCompanyId());
+        contractEntity.setInternalCompanyName(interName);
+        baseMapper.insert(contractEntity);
+        if (contractDto.getSupplierIdList() != null) {
+            contractSupplierService.saveAndUpdate(contractDto.getContractType(),supplierIdList, contractEntity.getId());
+        }
+        if (contractDto.getFilePathIdList() != null) {
+            contractFileService.saveAndUpdate(contractDto.getFilePathIdList(), contractEntity.getId());
+        }
+    }
+
+    /**
+     * 合同协议检查是否失效
+     *
+     * @param contractVo
+     */
+    @Override
+    public HashMap<String, Object> checkCopyContract(ContractVo contractVo) {
+        int i = 0;
+        HashMap<String, Object> resultMap = new HashMap<>();
+        // 检查当前合同状态是否为"0"
+        QueryWrapper<ContractEntity> contractQueryWrapper = new QueryWrapper<>();
+        contractQueryWrapper.eq("id", contractVo.getId());
+        List<ContractEntity> contracts = baseMapper.selectList(contractQueryWrapper);
+        if (!contracts.isEmpty()) {
+            i = 0;
+        }
+        // 检查是否有以当前合同为父合同的合同且状态为"0"
+        QueryWrapper<ContractEntity> parentContractQueryWrapper = new QueryWrapper<>();
+        parentContractQueryWrapper.eq("contract_status", "0").eq("parent_id", contractVo.getId());
+        List<ContractEntity> parentContracts = baseMapper.selectList(parentContractQueryWrapper);
+        if (!parentContracts.isEmpty()) {
+            i = i + parentContracts.size();
+        }
+        // 如果有以当前合同为父合同的合同且状态为"0",则设置failStatus为"1",否则为"0"
+        resultMap.put("failStatus", i);
+
+        return resultMap;
+    }
+
+    @Override
+    public List<ContractDto> copyContractList(ContractVo contractVo) {
+        // 查询当前状态的合同
+        QueryWrapper<ContractEntity> contractQueryWrapper = new QueryWrapper<>();
+        contractQueryWrapper.eq("id", contractVo.getId());
+        if (StringUtils.isNotEmpty(contractVo.getContractStatus())) {
+            contractQueryWrapper.eq("contract_status", "0");
+        }
+        List<ContractEntity> currentContracts = baseMapper.selectList(contractQueryWrapper);
+
+        // 查询以其为父合同的合同
+        QueryWrapper<ContractEntity> parentContractQueryWrapper = new QueryWrapper<>();
+        parentContractQueryWrapper.eq("parent_id", contractVo.getId());
+        if (StringUtils.isNotEmpty(contractVo.getContractStatus())) {
+            parentContractQueryWrapper.eq("contract_status", "0");
+        }
+        List<ContractEntity> parentContracts = baseMapper.selectList(parentContractQueryWrapper);
+
+        // 根据业务逻辑处理查询结果(这里不合并列表)
+        // 假设我们需要检查是否有任何合同(当前或父合同)处于状态"0",并返回所有符合条件的合同的Dto列表
+        List<ContractDto> contractDtoList = new ArrayList<>();
+
+        // 将当前合同转换为Dto并添加到列表中
+        if (!currentContracts.isEmpty()) {
+            contractDtoList.addAll(BeanUtil.copyToList(currentContracts, ContractDto.class));
+
+            // 如果只需要一个“失败”状态来指示存在任何状态为"0"的合同,则可以在这里设置状态并返回
+            // 但由于您要求返回Dto列表,我们将继续处理父合同
+        }
+
+        // 将父合同转换为Dto并添加到列表中(如果需要的话)
+        if (!parentContracts.isEmpty()) {
+            contractDtoList.addAll(BeanUtil.copyToList(parentContracts, ContractDto.class));
+        }
+
+        for (ContractDto contractDto : contractDtoList) {
+            //      供应商
+            List<ContractSupplierEntity> contractSupplierEntityList = contractSupplierService.getByContractById(contractDto.getId());
+            if (contractSupplierEntityList != null && !contractSupplierEntityList.isEmpty()) {
+                List<String> supplierIdList = contractSupplierEntityList.stream().map(ContractSupplierEntity::getSupplierId).collect(Collectors.toList());
+                contractDto.setSupplierIdList(supplierIdList);
+            }
+//    附件
+            List<ContractFileEntity> contractFileEntityList = contractFileService.getByContractById(contractDto.getId());
+            if (!contractFileEntityList.isEmpty()) {
+                contractDto.setContractFileEntityList(contractFileEntityList);
+            }
+        }
+
+        return contractDtoList;
+    }
+
+    private String contractCopyCode(String contractCode, String id) {
+        HashMap<String, Object> contractCodeCopy = baseMapper.copyContractCode(id);
+        if (contractCodeCopy == null) {
+            return contractCode + "-1";
+        } else {
+            int i = Integer.parseInt(contractCodeCopy.get("contractCode").toString());
+            i = i + 1;
+            return contractCode + "-"+i;
+
+        }
+    }
+
+    /**
+     * @param contractVo
+     * @return 补充协议修改状态
+     */
+    @Override
+    @Transactional
+    public void updateFileStatus(ContractVo contractVo) {
+        ArrayList<ContractEntity> contractEntities = new ArrayList<>();
+        if (contractVo.getIdList().isEmpty()) {
+            throw new SystemException("请选择有效合同");
+        }
+        for (String s : contractVo.getIdList()) {
+            ContractEntity contractEntity = new ContractEntity();
+            contractEntity.setId(s);
+            contractEntity.setContractStatus("1");
+            contractEntities.add(contractEntity);
+        }
+        this.saveOrUpdateBatch(contractEntities);
+    }
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    @Override
+    public IPage<ContractDto> supplierContractPage(ContractVo contractVO) {
+        return contractSupplierService.supplierContractPage(contractVO);
+    }
+
+    /**
+     * 定时更新合同失效状态
+     */
+    @Override
+    @Transactional
+    public void batchOrderDate(String  nowTime) {
+        List<ContractEntity> contractEntityList = baseMapper.selectFilterFailure(nowTime);
+        this.saveOrUpdateBatch(contractEntityList);
+    }
+    /**
+     * @description: 合同编辑
+     * @author: whp
+     **/
+    @Override
+    public void updateByEntity(ContractVo contractVo) {
+        ContractEntity contractEntity = new ContractEntity();
+        BeanUtils.copyProperties(contractVo, contractEntity);
+        baseMapper.updateById(contractEntity);
+    }
+}

+ 0 - 189
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -45,19 +45,15 @@ import com.ydtech.modules.order.entity.InsFeeOrder;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
 import com.ydtech.modules.order.entity.vo.OrderVo;
-import com.ydtech.modules.order.entity.vo.sendProject.SendProjectInfo;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNewDistribution;
 import com.ydtech.modules.protocols.service.InsFeeOrderNewDistributionService;
 import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
-import com.ydtech.modules.sendProject.dao.SendProjectMapper;
-import com.ydtech.modules.sendProject.entity.SendProjectEntity;
 import com.ydtech.utils.DateUtil;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
-import com.ydtech.utils.sendProjectUtils.SendProjrctUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.redisson.Redisson;
@@ -143,22 +139,11 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     @Resource
     private InsFeeOrderNewDistributionService insFeeOrderNewDistributionService;
 
-    @Autowired
-    private SendProjrctUtils sendProjrctUtils;
-
     @Autowired
     private SysUserRoleService sysUserRoleService;
 
-    @Autowired
-    private SendProjectMapper sendProjectMapper;
-
     private ExecutorService executorService= Executors.newCachedThreadPool();
 
-    private static final String STRING_0 = "0";
-    private static final String STRING_1 = "1";
-    private static final String STRING_2 = "2";
-    private static final Integer INTEGER_0 = 0;
-
 
     public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper,
                                   InsDeptFeeService insDeptFeeService, EsmUserReferrerService esmUserReferrerService,
@@ -1018,178 +1003,4 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         return this.getOne(queryWrapper);
     }
 
-    @Override
-    public void sendProject(String insOrderNo) {
-        log.info("订单:{},审核通过后首次推送服务", insOrderNo);
-        executorService.submit(new Runnable() {
-            @Override
-            public void run() {
-                log.info("异步线程开始!程序启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
-                SendProjectInfo sendProjectInfo = new SendProjectInfo();
-                //查询归属信息
-                OrderVo orderAndAreaCompany = new OrderVo();
-                EsmUserReferrer esmUserReferrer = new EsmUserReferrer();
-                try {
-                    log.info("查询ins_orders数据库入参:{}", insOrderNo);
-                    orderAndAreaCompany = insOrdersMapper.getOrderAndAreaCompany(insOrderNo);
-                    log.info("查询ins_orders数据库出参:{}", JSON.toJSON(orderAndAreaCompany));
-                    log.info("查询esm_user_referrer数据库入参:{}", orderAndAreaCompany.getUserid());
-                    esmUserReferrer = esmUserReferrerService.getById(orderAndAreaCompany.getUserid());
-                    log.info("查询esm_user_referrer数据库出参:{}", JSON.toJSON(esmUserReferrer));
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    log.error("查询ins_orders/esm_user_referrer数据库报错:{}", e.getMessage());
-                }
-                if (esmUserReferrer != null) {
-                    sendProjectInfo.setReferrerNo(esmUserReferrer.getReferrerId());
-                }
-                if (orderAndAreaCompany != null) {
-                    sendProjectInfo.setUserId(orderAndAreaCompany.getUserid());
-                }
-                //查询费用信息
-                log.info("查询ins_fee_order_new数据库");
-                InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
-                        .eq(InsFeeOrderNew::getInsOrderNo, insOrderNo));
-                log.info("查询ins_fee_order_new数据库出参:{}", JSON.toJSON(insFeeOrderNew));
-                FeeOrderNewVo.ExportFee exportFee = exportFee(insFeeOrderNew);
-                BigDecimal totalAmount = exportFee.getTotalAmount();
-
-                StringBuffer uuid = new StringBuffer();
-                uuid.append(new SimpleDateFormat("yyyyMMddHHmmss"))
-                        .append(UUID.randomUUID());
-
-                SendProjectInfo userInfo = new SendProjectInfo();
-                try {
-                    log.info("查询数据库保险订单表入参:{}", insOrderNo);
-                    userInfo = insOrdersMapper.getOrderByCompanyId(insOrderNo);
-                    log.info("查询数据库保险订单表出参:{}", JSON.toJSON(userInfo));
-                } catch (Exception e) {
-                    log.error("查询数据库保险订单表报错:{}", e.getMessage());
-                }
-
-                if (userInfo == null) {
-                    return;
-                }
-
-                sendProjectInfo.setGiveBudget(totalAmount);
-                sendProjectInfo.setUuid(uuid.toString());
-                sendProjectInfo.setUserName(userInfo.getUserName());
-                sendProjectInfo.setUserPhone(userInfo.getUserPhone());
-                sendProjectInfo.setUserCarNum(userInfo.getUserCarNum());
-
-                SendProjectEntity addSendProject = new SendProjectEntity();
-                addSendProject.setTotalAmount(sendProjectInfo.getGiveBudget());
-                addSendProject.setUserName(sendProjectInfo.getUserName());
-                addSendProject.setUserCarNum(sendProjectInfo.getUserCarNum());
-                addSendProject.setUserPhone(sendProjectInfo.getUserPhone());
-                addSendProject.setSendState(STRING_2);
-                addSendProject.setSendUuid(sendProjectInfo.getSendUuid());
-                addSendProject.setUserId(sendProjectInfo.getUserId());
-                addSendProject.setReferrerNo(sendProjectInfo.getReferrerNo());
-                addSendProject.setFailNum(INTEGER_0);
-                addSendProject.setState(STRING_1);
-                addSendProject.setIsDelete(STRING_0);
-                addSendProject.setCreateTime(new Date());
-                addSendProject.setUpdateTime(new Date());
-                try {
-                    log.info("新增推送服务数据库入参:{}", JSON.toJSON(addSendProject));
-                    sendProjectMapper.addSendProjectInfo(addSendProject);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    log.error("新增推送服务数据库报错:{}", e.getMessage());
-                }
-                sendProjrctUtils.firstSendProject(sendProjectInfo);
-            }
-        });
-    }
-
-    private FeeOrderNewVo.ExportFee exportFee(InsFeeOrderNew insFeeOrderNew) {
-        List<FeeOrderNewVo.ExportFee> exportFeeList = new ArrayList<>();
-        //region 出口费用
-        //交强
-        FeeOrderNewVo.ExportFee jqExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_1,
-                insFeeOrderNew.getJqPremium(), insFeeOrderNew.getJqCostsExportProportion(),
-                insFeeOrderNew.getJqExportOtherCostsProportion(),
-                insFeeOrderNew.getJqExportSuperviseCostsPremiums(), insFeeOrderNew.getJqExportOtherCostsPremiums()
-        );
-        //exportFeeList.add(jqExportFee);
-
-        //交强
-        FeeOrderNewVo.ExportFee syExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_2,
-                insFeeOrderNew.getSyPremium(), insFeeOrderNew.getSyCostsExportProportion(),
-                insFeeOrderNew.getSyExportOtherCostsProportion(),
-                insFeeOrderNew.getSyExportSuperviseCostsPremiums(), insFeeOrderNew.getSyExportOtherCostsPremiums()
-        );
-        //exportFeeList.add(syExportFee);
-
-        //交强
-        FeeOrderNewVo.ExportFee noExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_3,
-                insFeeOrderNew.getNoPremium(), insFeeOrderNew.getNoCostsExportProportion(),
-                insFeeOrderNew.getNoExportOtherCostsProportion(),
-                insFeeOrderNew.getNoExportSuperviseCostsPremiums(), insFeeOrderNew.getNoExportOtherCostsPremiums());
-
-        // exportFeeList.add(noExportFee);
-        //add  by  hxl   添加出单员不能查看优惠的限制    2024-07-11
-        String userId = BaseController.getUserId();
-        SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId);
-        if (sysUserRole != null && sysUserRole.getRoleId() == 19) {
-            jqExportFee.setTotalAmount(BigDecimal.ZERO);
-            jqExportFee.setTotalProportion(BigDecimal.ZERO);
-            syExportFee.setTotalAmount(BigDecimal.ZERO);
-            syExportFee.setTotalProportion(BigDecimal.ZERO);
-            noExportFee.setTotalAmount(BigDecimal.ZERO);
-            noExportFee.setTotalProportion(BigDecimal.ZERO);
-        }
-        exportFeeList.add(jqExportFee);
-        exportFeeList.add(syExportFee);
-        exportFeeList.add(noExportFee);
-        //出口费用合计
-        FeeOrderNewVo.ExportFee exportFeeTotal = assignExportFeeTotal(exportFeeList);
-        return exportFeeTotal;
-    }
-
-    private FeeOrderNewVo.ExportFee assignExportFeeTotal(List<FeeOrderNewVo.ExportFee> exportFeeList) {
-        FeeOrderNewVo.ExportFee exportFee = new FeeOrderNewVo.ExportFee();
-        exportFee.setInsuranceType(BusinessConstant.FEE_INSURANCE_TYPE_4);
-        //总费用合计
-        BigDecimal totalAmount = exportFeeList.stream().map(FeeOrderNewVo.ExportFee::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        exportFee.setTotalAmount(Optional.of(totalAmount).orElse(BigDecimal.ZERO));
-        return exportFee;
-    }
-
-    /**
-     * 出口费用赋值
-     *
-     * @param title
-     * @param premium
-     * @param superviseCostsProportion
-     * @param otherCostsProportion
-     * @param superviseCostsPremiums
-     * @param otherCostsPremiums
-     * @return
-     */
-    public FeeOrderNewVo.ExportFee assignExportFee(String title, BigDecimal premium, BigDecimal superviseCostsProportion,
-                                                   BigDecimal otherCostsProportion,
-                                                   BigDecimal superviseCostsPremiums, BigDecimal otherCostsPremiums
-    ) {
-        FeeOrderNewVo.ExportFee exportFee = new FeeOrderNewVo.ExportFee();
-        exportFee.setInsuranceType(title);
-        //保费
-        exportFee.setPremium(premium);
-        //手续费比例
-        exportFee.setSuperviseCosts(superviseCostsProportion);
-        //跟单比例
-        exportFee.setOtherCostsProportion(otherCostsProportion);
-        //总比例
-        exportFee.setTotalProportion(superviseCostsProportion.add(otherCostsProportion));
-        //手续费
-        exportFee.setSuperviseCostsPremiums(superviseCostsPremiums);
-        //跟单费
-        exportFee.setOtherCostsPremiums(otherCostsPremiums);
-        //总费用
-        exportFee.setTotalAmount(superviseCostsPremiums.add(otherCostsPremiums));
-
-        return exportFee;
-    }
-
 }

+ 116 - 0
src/main/java/com/ydtech/modules/fnc/vo/ContractVo.java

@@ -0,0 +1,116 @@
+package com.ydtech.modules.fnc.vo;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel("合同查询vo")
+public class ContractVo implements Serializable {
+    @ApiModelProperty("主键")
+    private String id;
+
+    @ApiModelProperty("合同编码")
+    private String contractCode;
+
+    @ApiModelProperty("合同名称")
+    private String contractName;
+
+
+    @ApiModelProperty("内部公司名称")
+    private String internalCompanyName;
+
+
+    @ApiModelProperty("内部公司id")
+    private String internalCompanyId;
+
+
+    @ApiModelProperty("外部公司名称")
+    private String externalCompaniesName;
+
+    @ApiModelProperty("外部公司id")
+    private String externalCompaniesId;
+
+
+    @ApiModelProperty("供应商名称")
+    private String supplierName;
+
+
+    @ApiModelProperty("供应商id")
+    private String supplierId;
+
+
+    @ApiModelProperty("合同类型")
+    private String contractType;
+
+    @ApiModelProperty("是否开口合同 0 是 1 否")
+    private String isOpenContract;
+
+
+    @ApiModelProperty("是否顺延 0 是 1 否")
+    private String shouldPostponed;
+
+
+    @ApiModelProperty("到期提醒")
+    private String expirationReminder;
+
+
+    @ApiModelProperty("生效日期")
+    private LocalDateTime effectiveDate;
+
+
+    @ApiModelProperty("失效日期")
+    private LocalDateTime expiringDate;
+
+
+    @ApiModelProperty("顺延时间")
+    private LocalDateTime shouldPostponedDate;
+
+
+    @ApiModelProperty("顺延后失效时间")
+    private LocalDateTime shouldPostponedEffectiveDate;
+
+
+    @ApiModelProperty("附件路径")
+    private String filePathId;
+
+    @ApiModelProperty("部门编码")
+    private String deptId;
+
+    @ApiModelProperty("用户编码")
+    private String userId;
+
+    @ApiModelProperty(value = "每页页数")
+    private int pageSize;
+
+    @ApiModelProperty(value = "页数")
+    @Min(value = 1, message = "页数最小为1")
+    private int pageNum;
+
+    @ApiModelProperty("供应商id")
+    private List<String> supplierIdList;
+
+
+    @ApiModelProperty("合同idList")
+    private List<String> contractIdList;
+
+    @ApiModelProperty("合同是否有效 0 有效 1 无效")
+    private String contractStatus;
+
+
+    @ApiModelProperty("合同父id")
+    private String parentId;
+
+
+
+    @ApiModelProperty("合同idList")
+    private List<String> idList;
+}

+ 18 - 0
src/main/java/com/ydtech/modules/inv/controller/InvAccountController.java

@@ -15,6 +15,8 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 
 /**
  * @author jianlong
@@ -167,4 +169,20 @@ public class InvAccountController {
             return HttpResult.error("查询错误"+e.getMessage());
         }
     }
+
+    /**
+     *
+     * @param invAccountQueryVo
+     * @return  返回账户列表集合
+     */
+    @ApiOperation("查询账户卡列表")
+    @PostMapping("getInvAccountList")
+    public HttpResult<List<InvAccount>> getInvAccountList(@RequestBody InvAccountQueryVo invAccountQueryVo) {
+        try{
+            List<InvAccount>  result = invAccountService.getInvAccountList(invAccountQueryVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
 }

+ 7 - 0
src/main/java/com/ydtech/modules/inv/model/InvAccount.java

@@ -113,6 +113,13 @@ public class InvAccount implements Serializable {
     @ApiModelProperty(value = "外部账户标识(0内部账户 1外部账户)")
     private String outerFlag;
 
+    /**
+     * 账户简称
+     */
+    @ApiModelProperty(value = "账户简称")
+    @TableField(value = "simple_name")
+    private String simpleName;
+
     /**
      * 总开票额度
      */

+ 9 - 0
src/main/java/com/ydtech/modules/inv/service/InvAccountService.java

@@ -9,6 +9,8 @@ import com.ydtech.modules.inv.model.dto.InvAccountCardQueryDto;
 import com.ydtech.modules.inv.model.vo.InvAccountQueryVo;
 import com.ydtech.modules.order.entity.BasePageResult;
 
+import java.util.List;
+
 /**
 * @author Administrator
 * @description 针对表【ins_account(账户信息表)】的数据库操作Service
@@ -35,4 +37,11 @@ public interface InvAccountService extends IService<InvAccount> {
      *  @Description: 通过银行卡号和账户名查询内部账号
      */
     BasePageResult<InvAccountCard> queryPage(InvAccountCardQueryDto invAccountCardQueryDto);
+    /**
+     *
+     * @param invAccountQueryVo
+     * @return  返回账户列表集合
+     */
+    List<InvAccount> getInvAccountList(InvAccountQueryVo invAccountQueryVo);
+
 }

+ 5 - 0
src/main/java/com/ydtech/modules/inv/service/impl/InvAccountServiceImpl.java

@@ -421,6 +421,11 @@ public class InvAccountServiceImpl extends ServiceImpl<InvAccountMapper, InvAcco
         return  new BasePageResult<>(invAccountCardQueryDto.getPageNum(), page.getSize(), result.getTotal(), page.getPages(),
                 result.getRecords());
     }
+
+    @Override
+    public List<InvAccount> getInvAccountList(InvAccountQueryVo invAccountQueryVo) {
+        return baseMapper.selectAccountsListPage(invAccountQueryVo);
+    }
 }
 
 

+ 183 - 93
src/main/java/com/ydtech/modules/inv/utils/CheckInsPlyComeUtils.java

@@ -18,6 +18,9 @@ import java.math.BigDecimal;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -37,9 +40,10 @@ public class CheckInsPlyComeUtils {
      *  @Description:  验证签单日期
      */
     public static String  checkSignDate(String data,String msg){
+        //2024-11-14  需求签单日期格式不需要时分秒
         String errorMsg =null;
-        if(StringUtils.isBlank(data)  ||  !isValidDate(data,"yyyy-MM-dd HH:mm:ss") ){
-            errorMsg = msg+"不能为空或格式错误,格式为yyyy-MM-dd HH:mm:ss";
+        if(StringUtils.isBlank(data)  ||  !isValidDate(data,"yyyy-MM-dd") ){
+            errorMsg = msg+"不能为空或格式错误,格式为yyyy-MM-dd";
         }
         return errorMsg;
     }
@@ -118,7 +122,9 @@ public class CheckInsPlyComeUtils {
         ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();
         PtlAgreementService ptlAgreementService = applicationContext.getBean(PtlAgreementService.class);
         //由于协议名称确定不了唯一,通过协议编号确认唯一  add  by  hxl  2024-10-12 14:36
-        PtlAgreement ptlAgreement = ptlAgreementService.getById(data);
+        PtlAgreement ptlAgreement = ptlAgreementService.getByAgreementIdNew(data);
+
+
         //PtlAgreement ptlAgreement = ptlAgreementService.getByAgreementTitle(data);
         String errorMsg =null;
         if(StringUtils.isBlank(data) || ptlAgreement==null ){
@@ -180,23 +186,34 @@ public class CheckInsPlyComeUtils {
         if(checkSignDate(dto.getSignDate(), "签单时间")!=null){
             errorMsg+=checkSignDate(dto.getSignDate(), "签单时间")+"; ";
         }
+        //签单日期转换为 yyyy-MM-dd HH:mm:ss
+        if(StringUtils.isNotEmpty(dto.getSignDate())){
+            String singTime = pareTimeLocalDate(dto.getSignDate());
+            dto.setSignDate(singTime);
+        }
+
+
         if(checkIsNull(dto.getLicenseno(), "车牌号")!=null){
             errorMsg+=checkIsNull(dto.getSignDate(), "车牌号")+"; ";
         }
         String companyId =null;
-        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
-        if(companyMap!=null && companyMap.get("msg")!=null){
-            errorMsg+=companyMap.get("msg").toString()+"; ";
-        }else if(companyMap.get("msg")==null){
-            companyId = companyMap.get("id").toString();
-        }
+        String companyName=null;
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
-        if(companySubMap!=null && companySubMap.get("msg")!=null){
-            errorMsg+=companySubMap+"; ";
-        }else if( companySubMap.get("msg")==null){
-            partnerCompaniesId = companySubMap.get("id");
-        }
+        String partnerCompaniesName=null;
+
+//        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
+//        if(companyMap!=null && companyMap.get("msg")!=null){
+//            errorMsg+=companyMap.get("msg").toString()+"; ";
+//        }else if(companyMap.get("msg")==null){
+//            companyId = companyMap.get("id").toString();
+//        }
+//        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
+//        if(companySubMap!=null && companySubMap.get("msg")!=null){
+//            errorMsg+=companySubMap+"; ";
+//        }else if( companySubMap.get("msg")==null){
+//            partnerCompaniesId = companySubMap.get("id");
+//        }
+//
         if(checkRiskcode(dto.getRiskcode(), "险种")!=null){
             errorMsg+=checkRiskcode(dto.getSignDate(), "险种")+"; ";
         }
@@ -210,6 +227,10 @@ public class CheckInsPlyComeUtils {
             ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
+            partnerCompaniesId = ptl.getPartnerCompaniesId();
+            companyId = ptl.getInsuranceCompanyId();
+            partnerCompaniesName = ptl.getNamesimple();
+            companyName  =ptl.getInsuranceCompany();
         }
         if(checkIsNull(dto.getInsuredName(), "被保险人")!=null){
             errorMsg+=checkIsNull(dto.getInsuredName(), "被保险人")+"; ";
@@ -246,20 +267,35 @@ public class CheckInsPlyComeUtils {
             addTypeId = addTypeMap.get("id").toString();
         }
         //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
-        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
-            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
-                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
-            }
-        }
+//        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+//            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+//                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+//            }
+//        }
+
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
-            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
+            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,companyName,partnerCompaniesId,partnerCompaniesName,
                     dto.getRiskcode(),agreeId,agreeDeptId,dto.getInsuredName(),dto.getPolicyno(),dto.getSyPolicyno(),dto.getJqPremium(),dto.getSyPremium(),
                     dto.getTaxamount(),dto.getJqSuperviseCostsProportion(),dto.getSySuperviseCostsProportion(),dto.getCommissionFeevalue(),addTypeId);
             map.put("dto",insPlyIncome);
         }
         return map;
     }
+
+    private static String pareTimeLocalDate(String signDate) {
+        DateTimeFormatter originalFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+        // 解析原始字符串日期为 LocalDate
+        LocalDate originalDate = LocalDate.parse(signDate, originalFormatter);
+
+        // 将 LocalDate 转换为 LocalDateTime,时间设为午夜
+        LocalDateTime dateTime = originalDate.atStartOfDay();
+        String b = dateTime.format(targetFormatter);
+        return b;
+    }
+
     /**
      *  @version
      *  @author: hxl
@@ -274,23 +310,34 @@ public class CheckInsPlyComeUtils {
         if(checkSignDate(dto.getSignDate(), "签单时间")!=null){
             errorMsg+=checkSignDate(dto.getSignDate(), "签单时间")+"; ";
         }
+        //签单日期转换为 yyyy-MM-dd HH:mm:ss
+        if(StringUtils.isNotEmpty(dto.getSignDate())){
+            String singTime = pareTimeLocalDate(dto.getSignDate());
+            dto.setSignDate(singTime);
+        }
+
         if(checkIsNull(dto.getLicenseno(), "车牌号")!=null){
             errorMsg+=checkIsNull(dto.getSignDate(), "车牌号")+"; ";
         }
         String companyId =null;
-        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
-        if(companyMap!=null && companyMap.get("msg")!=null){
-            errorMsg+=companyMap.get("msg").toString()+"; ";
-        }else if(companyMap.get("msg")==null){
-            companyId = companyMap.get("id").toString();
-        }
+        String companyName=null;
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
-        if(companySubMap!=null && companySubMap.get("msg")!=null){
-            errorMsg+=companySubMap+"; ";
-        }else if( companySubMap.get("msg")==null){
-            partnerCompaniesId = companySubMap.get("id");
-        }
+        String partnerCompaniesName=null;
+
+
+//        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
+//        if(companyMap!=null && companyMap.get("msg")!=null){
+//            errorMsg+=companyMap.get("msg").toString()+"; ";
+//        }else if(companyMap.get("msg")==null){
+//            companyId = companyMap.get("id").toString();
+//        }
+//        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
+//        if(companySubMap!=null && companySubMap.get("msg")!=null){
+//            errorMsg+=companySubMap+"; ";
+//        }else if( companySubMap.get("msg")==null){
+//            partnerCompaniesId = companySubMap.get("id");
+//        }
+
         if(checkRiskcode(dto.getRiskcode(), "险种")!=null){
             errorMsg+=checkRiskcode(dto.getSignDate(), "险种")+"; ";
         }
@@ -304,6 +351,10 @@ public class CheckInsPlyComeUtils {
             ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
+            partnerCompaniesId = ptl.getPartnerCompaniesId();
+            companyId = ptl.getInsuranceCompanyId();
+            partnerCompaniesName = ptl.getNamesimple();
+            companyName  =ptl.getInsuranceCompany();
         }
         if(checkIsNull(dto.getInsuredName(), "被保险人")!=null){
             errorMsg+=checkIsNull(dto.getInsuredName(), "被保险人")+"; ";
@@ -340,14 +391,15 @@ public class CheckInsPlyComeUtils {
             addTypeId = addTypeMap.get("id").toString();
         }
         //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
-        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
-            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
-                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
-            }
-        }
+//        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+//            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId))
+//            {
+//                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+//            }
+//        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
-            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
+            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,companyName,partnerCompaniesId,partnerCompaniesName,
                     dto.getRiskcode(),agreeId,agreeDeptId,dto.getInsuredName(),dto.getPolicyno(),dto.getSyPolicyno(),dto.getJqPremium(),dto.getSyPremium(),
                     dto.getTaxamount(),dto.getJqOtherCostsProportion(),dto.getSyOtherCostsProportion(),dto.getOtherFeevalue(),addTypeId,null);
             map.put("dto",insPlyIncome);
@@ -367,23 +419,32 @@ public class CheckInsPlyComeUtils {
         if(checkSignDate(dto.getSignDate(), "签单时间")!=null){
             errorMsg+=checkSignDate(dto.getSignDate(), "签单时间")+"; ";
         }
+        //签单日期转换为 yyyy-MM-dd HH:mm:ss
+        if(StringUtils.isNotEmpty(dto.getSignDate())){
+            String singTime = pareTimeLocalDate(dto.getSignDate());
+            dto.setSignDate(singTime);
+        }
+
         if(checkIsNull(dto.getLicenseno(), "车牌号")!=null){
             errorMsg+=checkIsNull(dto.getSignDate(), "车牌号")+"; ";
         }
         String companyId =null;
-        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
-        if(companyMap!=null && companyMap.get("msg")!=null){
-            errorMsg+=companyMap.get("msg").toString()+"; ";
-        }else if(companyMap.get("msg")==null){
-            companyId = companyMap.get("id").toString();
-        }
+        String companyName=null;
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
-        if(companySubMap!=null && companySubMap.get("msg")!=null){
-            errorMsg+=companySubMap+"; ";
-        }else if( companySubMap.get("msg")==null){
-            partnerCompaniesId = companySubMap.get("id");
-        }
+        String partnerCompaniesName=null;
+
+//        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
+//        if(companyMap!=null && companyMap.get("msg")!=null){
+//            errorMsg+=companyMap.get("msg").toString()+"; ";
+//        }else if(companyMap.get("msg")==null){
+//            companyId = companyMap.get("id").toString();
+//        }
+//        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
+//        if(companySubMap!=null && companySubMap.get("msg")!=null){
+//            errorMsg+=companySubMap+"; ";
+//        }else if( companySubMap.get("msg")==null){
+//            partnerCompaniesId = companySubMap.get("id");
+//        }
         if(checkRiskcode(dto.getRiskcode(), "险种")!=null){
             errorMsg+=checkRiskcode(dto.getSignDate(), "险种")+"; ";
         }
@@ -397,6 +458,10 @@ public class CheckInsPlyComeUtils {
             ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
+            partnerCompaniesId = ptl.getPartnerCompaniesId();
+            companyId = ptl.getInsuranceCompanyId();
+            partnerCompaniesName = ptl.getNamesimple();
+            companyName  =ptl.getInsuranceCompany();
         }
         if(checkIsNull(dto.getInsuredName(), "被保险人")!=null){
             errorMsg+=checkIsNull(dto.getInsuredName(), "被保险人")+"; ";
@@ -421,14 +486,14 @@ public class CheckInsPlyComeUtils {
             addTypeId = addTypeMap.get("id").toString();
         }
         //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
-        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
-            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
-                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
-            }
-        }
+//        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+//            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+//                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+//            }
+//        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
-            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
+            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,companyName,partnerCompaniesId,partnerCompaniesName,
                     dto.getRiskcode(),agreeId,agreeDeptId,dto.getInsuredName(),dto.getNoPolicyno(),dto.getNoPremium(),dto.getNoSuperviseCostsProportion(),null,
                     dto.getNoSuperviseCostsPremiums(),addTypeId);
             map.put("dto",insPlyIncome);
@@ -447,23 +512,31 @@ public class CheckInsPlyComeUtils {
         if(checkSignDate(dto.getSignDate(), "签单时间")!=null){
             errorMsg+=checkSignDate(dto.getSignDate(), "签单时间")+"; ";
         }
+        //签单日期转换为 yyyy-MM-dd HH:mm:ss
+        if(StringUtils.isNotEmpty(dto.getSignDate())){
+            String singTime = pareTimeLocalDate(dto.getSignDate());
+            dto.setSignDate(singTime);
+        }
         if(checkIsNull(dto.getLicenseno(), "车牌号")!=null){
             errorMsg+=checkIsNull(dto.getSignDate(), "车牌号")+"; ";
         }
         String companyId =null;
-        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
-        if(companyMap!=null && companyMap.get("msg")!=null){
-            errorMsg+=companyMap.get("msg").toString()+"; ";
-        }else if(companyMap.get("msg")==null){
-            companyId = companyMap.get("id").toString();
-        }
+        String companyName=null;
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
-        if(companySubMap!=null && companySubMap.get("msg")!=null){
-            errorMsg+=companySubMap+"; ";
-        }else if( companySubMap.get("msg")==null){
-            partnerCompaniesId = companySubMap.get("id");
-        }
+        String partnerCompaniesName=null;
+
+//        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
+//        if(companyMap!=null && companyMap.get("msg")!=null){
+//            errorMsg+=companyMap.get("msg").toString()+"; ";
+//        }else if(companyMap.get("msg")==null){
+//            companyId = companyMap.get("id").toString();
+//        }
+//        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
+//        if(companySubMap!=null && companySubMap.get("msg")!=null){
+//            errorMsg+=companySubMap+"; ";
+//        }else if( companySubMap.get("msg")==null){
+//            partnerCompaniesId = companySubMap.get("id");
+//        }
         if(checkRiskcode(dto.getRiskcode(), "险种")!=null){
             errorMsg+=checkRiskcode(dto.getSignDate(), "险种")+"; ";
         }
@@ -477,6 +550,10 @@ public class CheckInsPlyComeUtils {
             ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
+            partnerCompaniesId = ptl.getPartnerCompaniesId();
+            companyId = ptl.getInsuranceCompanyId();
+            partnerCompaniesName = ptl.getNamesimple();
+            companyName  =ptl.getInsuranceCompany();
         }
         if(checkIsNull(dto.getInsuredName(), "被保险人")!=null){
             errorMsg+=checkIsNull(dto.getInsuredName(), "被保险人")+"; ";
@@ -501,14 +578,14 @@ public class CheckInsPlyComeUtils {
             addTypeId = addTypeMap.get("id").toString();
         }
         //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
-        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
-            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
-                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
-            }
-        }
+//        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+//            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+//                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+//            }
+//        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
-            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
+            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,companyName,partnerCompaniesId,partnerCompaniesName,
                     dto.getRiskcode(),agreeId,agreeDeptId,dto.getInsuredName(),dto.getNoPolicyno(),dto.getNoPremium(),dto.getNoOtherCostsProportion(),dto.getNoOtherCostsPremium(),addTypeId);
             map.put("dto",insPlyIncome);
         }
@@ -527,23 +604,32 @@ public class CheckInsPlyComeUtils {
         if(checkSignDate(dto.getSignDate(), "签单时间")!=null){
             errorMsg+=checkSignDate(dto.getSignDate(), "签单时间")+"; ";
         }
+        //签单日期转换为 yyyy-MM-dd HH:mm:ss
+        if(StringUtils.isNotEmpty(dto.getSignDate())){
+            String singTime = pareTimeLocalDate(dto.getSignDate());
+            dto.setSignDate(singTime);
+        }
         if(checkIsNull(dto.getLicenseno(), "车牌号")!=null){
             errorMsg+=checkIsNull(dto.getSignDate(), "车牌号")+"; ";
         }
         String companyId =null;
-        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
-        if(companyMap!=null && companyMap.get("msg")!=null){
-            errorMsg+=companyMap.get("msg").toString()+"; ";
-        }else if(companyMap.get("msg")==null){
-            companyId = companyMap.get("id").toString();
-        }
+        String companyName=null;
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
-        if(companySubMap!=null && companySubMap.get("msg")!=null){
-            errorMsg+=companySubMap+"; ";
-        }else if( companySubMap.get("msg")==null){
-            partnerCompaniesId = companySubMap.get("id");
-        }
+        String partnerCompaniesName=null;
+
+//        Map<String, String> companyMap = checkCompanyName(dto.getCompanyName(), "保险公司");
+//        if(companyMap!=null && companyMap.get("msg")!=null){
+//            errorMsg+=companyMap.get("msg").toString()+"; ";
+//        }else if(companyMap.get("msg")==null){
+//            companyId = companyMap.get("id").toString();
+//        }
+//        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
+//        if(companySubMap!=null && companySubMap.get("msg")!=null){
+//            errorMsg+=companySubMap+"; ";
+//        }else if( companySubMap.get("msg")==null){
+//            partnerCompaniesId = companySubMap.get("id");
+//        }
+
         if(checkRiskcode(dto.getRiskcode(), "险种")!=null){
             errorMsg+=checkRiskcode(dto.getSignDate(), "险种")+"; ";
         }
@@ -557,6 +643,10 @@ public class CheckInsPlyComeUtils {
             ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
+            partnerCompaniesId = ptl.getPartnerCompaniesId();
+            companyId = ptl.getInsuranceCompanyId();
+            partnerCompaniesName = ptl.getNamesimple();
+            companyName  =ptl.getInsuranceCompany();
         }
         if(checkIsNull(dto.getInsuredName(), "被保险人")!=null){
             errorMsg+=checkIsNull(dto.getInsuredName(), "被保险人")+"; ";
@@ -604,14 +694,14 @@ public class CheckInsPlyComeUtils {
             addTypeId = addTypeMap.get("id").toString();
         }
         //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
-        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
-            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
-                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
-            }
-        }
+//        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+//            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+//                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+//            }
+//        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
-            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
+            InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,companyName,partnerCompaniesId,partnerCompaniesName,
                     dto.getRiskcode(),agreeId,agreeDeptId,dto.getInsuredName(),dto.getPolicyno(),dto.getSyPolicyno(),dto.getJqPremium(),dto.getSyPremium(),
                     dto.getTaxamount(),dto.getNoPolicyno(),dto.getNoPremium(),dto.getJqReceivableProportion(),dto.getSyReceivableProportion(),dto.getNoReceivableProportion(),dto.getReceivableAmount(),addTypeId);
             map.put("dto",insPlyIncome);

+ 48 - 0
src/main/java/com/ydtech/modules/lg/PushLgLogUtils.java

@@ -0,0 +1,48 @@
+package com.ydtech.modules.lg;
+
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.modules.lg.dao.PushLgEntityMapper;
+import com.ydtech.modules.lg.model.PushLgEntity;
+import com.ydtech.modules.ttqf.QuartzManager;
+import com.ydtech.utils.StringUtils;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+
+@Component
+public class PushLgLogUtils {
+
+    @Async
+    public void pushLg(PushLgEntity lgEntity){
+        JSONObject jsonObject = JSONObject.parseObject(SendUtils.send(JSONObject.toJSONString(lgEntity)));
+        if (null != jsonObject){
+            lgEntity.setPushStatus(String.valueOf(jsonObject.getInteger("code")));
+            lgEntity.setMsg(jsonObject.getString("msg"));
+        }else {
+            lgEntity.setPushStatus("");
+            lgEntity.setMsg("推送失败");
+        }
+        SpringUtil.getBean(PushLgEntityMapper.class).insert(lgEntity);
+        if (!StringUtils.equals(lgEntity.getPushStatus(),"200")){
+            pushLgRetry(lgEntity);
+        }
+    }
+
+
+    public void pushLgRetry(PushLgEntity lgEntity){
+        try {
+            HashMap<String, Object> map = new HashMap<>();
+            map.put("lgEntity", lgEntity);
+            QuartzManager manager = QuartzManager.getInstance();
+            manager.addJob(String.valueOf(lgEntity.getId()),"jobGroup" + lgEntity.getId(), PushRetry.class,"*/5 * * * * ?",map);
+            manager.start();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 30 - 0
src/main/java/com/ydtech/modules/lg/PushRetry.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.lg;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.modules.lg.dao.PushLgEntityMapper;
+import com.ydtech.modules.lg.model.PushLgEntity;
+import com.ydtech.modules.ttqf.QuartzManager;
+import org.quartz.*;
+
+public class PushRetry implements Job {
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
+        Object object = mergedJobDataMap.get("lgEntity");
+        PushLgEntity lgEntity = JSONObject.parseObject((JSONObject.toJSONString(object)) , PushLgEntity.class);
+        JSONObject jsonObject = JSONObject.parseObject(SendUtils.send(JSONObject.toJSONString(lgEntity)));
+        if (null != jsonObject){
+            if (String.valueOf(jsonObject.getInteger("code")).equals("200")){
+                lgEntity.setPushStatus(String.valueOf(jsonObject.getInteger("code")));
+                lgEntity.setMsg(jsonObject.getString("msg"));
+                SpringUtil.getBean(PushLgEntityMapper.class).updateById(lgEntity);
+                try {
+                    QuartzManager.getInstance().removeJob(jobExecutionContext);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+}

+ 70 - 0
src/main/java/com/ydtech/modules/lg/SendUtils.java

@@ -0,0 +1,70 @@
+package com.ydtech.modules.lg;
+
+
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+@Component
+public class SendUtils {
+
+
+    private static String sendMessageIP;
+
+    @Value("${sendMessage-zg-yggl-IP}")
+    private void setSendMessageIP(String sendMessageIP){
+        SendUtils.sendMessageIP = sendMessageIP;
+    };
+
+
+    public static String send(String data){
+        // 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
+        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+        // 创建Post请求
+        HttpPost httpPost = new HttpPost(sendMessageIP + "withdrawal/record/acceptPushWithdrawalData");
+        StringEntity entity = new StringEntity(data, "UTF-8");
+        // post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中
+        httpPost.setEntity(entity);
+        httpPost.setHeader("Content-Type", "application/json;charset=utf8");
+        // 响应模型
+        CloseableHttpResponse response = null;
+        try {
+            // 由客户端执行(发送)Post请求
+            response = httpClient.execute(httpPost);
+            // 从响应模型中获取响应实体
+            HttpEntity responseEntity = response.getEntity();
+            //从响应实体中截取状态码
+            return EntityUtils.toString(responseEntity);
+//            String responseString = string.substring(string.lastIndexOf(":") + 1);
+//            String responseCode = responseString.substring(0, responseString.length() - 1);
+        }catch (Exception e){
+            e.printStackTrace();
+            return "";
+        }finally {
+            try {
+                // 释放资源
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+                if (response != null) {
+                    response.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+
+
+    }
+
+
+}

+ 7 - 0
src/main/java/com/ydtech/modules/lg/dao/PushLgEntityMapper.java

@@ -0,0 +1,7 @@
+package com.ydtech.modules.lg.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.lg.model.PushLgEntity;
+
+public interface PushLgEntityMapper extends BaseMapper<PushLgEntity> {
+}

+ 56 - 0
src/main/java/com/ydtech/modules/lg/model/PushLgEntity.java

@@ -0,0 +1,56 @@
+package com.ydtech.modules.lg.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+@Data
+@TableName("push_lg_data")
+public class PushLgEntity {
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /** 申请时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date applicationTime;
+
+    /** 业务单号 */
+    private String businessUmber;
+
+    /** 收款人 */
+    private String payee;
+
+    /** 收款人ID */
+    private String payeeId;
+
+    /** 收款账户 */
+    private String receivingAccount;
+
+    /** 提取金额 */
+    private BigDecimal extractMoney;
+
+    /** 服务费 */
+    private BigDecimal serviceCharge;
+
+    /** 状态 */
+    private String extractStatus;
+
+    /**
+     * 推送状态 0 未推送 1 已推送
+     */
+    private String pushStatus;
+
+
+    private String msg;
+
+    private int sendNumber;
+
+
+}

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor