3 Revize 71a77fe199 ... e5ba907a77

Autor SHA1 Zpráva Datum
  Ethan e5ba907a77 余额管理&账单查询 před 3 týdny
  Ethan ae4b6e6804 关闭定时任务 před 3 týdny
  Xingyu Xian 80773d56e8 sec_task_checkout před 3 týdny

+ 52 - 139
.idea/workspace.xml

@@ -4,131 +4,13 @@
     <option name="autoReloadType" value="ALL" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="f4dc82b3-ff8e-4683-8d94-679b27583f09" name="Changes" comment="">
-      <change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" />
+    <list default="true" id="f4dc82b3-ff8e-4683-8d94-679b27583f09" name="Changes" comment="关闭定时任务">
+      <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/youngee_m_api.iml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/account_controller.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/account_controller.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/bill_controller.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/bill_controller.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/common.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/common.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/common_controller.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/common_controller.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/cooperation_controller.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/cooperation_controller.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/finance_controller.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/finance_controller.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/task_controller.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/task_controller.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/controller/workspace_controller.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/workspace_controller.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/book_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/book_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/common_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/common_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/enterprise_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/enterprise_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/enterprise_supplier_cooperate_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/enterprise_supplier_cooperate_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/free_strategy_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/free_strategy_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/info_auto_default_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/info_auto_default_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/info_auto_task_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/info_auto_task_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/info_pricing_strategy_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/info_pricing_strategy_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/invoice_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/invoice_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/invoice_record_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/invoice_record_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/local_life_brief_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/local_life_brief_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/local_life_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/local_life_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/local_life_material_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/local_life_material_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/local_life_review_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/local_life_review_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/local_life_task_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/local_life_task_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/platform_kuaishou_user_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/platform_kuaishou_user_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/product_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/product_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/product_photo_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/product_photo_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/project_brief_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/project_brief_dao.go" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/app/dao/project_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/project_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/project_material_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/project_material_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/project_review_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/project_review_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/project_task_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/project_task_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/recharge_record_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/recharge_record_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/recruit_strategy_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/recruit_strategy_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/region_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/region_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/reward_strategy_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/reward_strategy_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/s_project_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/s_project_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/sec_brief_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/sec_brief_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/sec_material_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/sec_material_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/sec_task_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/sec_task_info_dao.go" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/app/dao/selection_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/selection_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/selection_review_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/selection_review_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/store_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/store_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/sub_account_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/sub_account_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/supplier_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/supplier_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/talent_info_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/talent_info_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/task_logistics_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/task_logistics_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/team_buying_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/team_buying_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/dao/user_dao.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/dao/user_dao.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/book_info.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/book_info.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/info_auto_default.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/info_auto_default.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/info_auto_task.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/info_auto_task.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/local_life_info.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/local_life_info.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/local_life_task_info.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/local_life_task_info.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/platform_kuaishou_user_info.go" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/project.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/project.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/project_task_info.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/project_task_info.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/s_project.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/s_project.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/sec_task_info.go" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/selection_info.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/selection_info.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/entity/selection_task_info.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/entity/selection_task_info.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/schedule/auto_task_invalid.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/schedule/auto_task_invalid.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/schedule/auto_task_recharge.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/schedule/auto_task_recharge.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/schedule/auto_task_review.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/schedule/auto_task_review.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/bill_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/bill_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/common_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/common_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/content_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/content_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/cooperation_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/cooperation_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/default_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/default_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/enterprise_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/enterprise_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/invoice_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/invoice_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/local_life_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/local_life_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/product_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/product_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/project_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/project_service.go" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/app/service/recharge_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/recharge_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/review_service/business_license_check.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/review_service/business_license_check.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/review_service/config.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/review_service/config.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/review_service/review_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/review_service/review_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/selection_info_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/selection_info_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/store_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/store_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/task_info_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/task_info_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/teambuying_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/teambuying_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/service/view_data_service.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/service/view_data_service.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/util/resp.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/util/resp.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/util/uuid.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/util/uuid.go" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/app/vo/balance_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/balance_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/default_search_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/default_search_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/local_draft_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/local_draft_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/local_search_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/local_search_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/local_talent_operate_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/local_talent_operate_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/local_update_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/local_update_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/logistics_talent_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/logistics_talent_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/project_create_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/project_create_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/project_draft_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/project_draft_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/project_search_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/project_search_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/project_update_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/project_update_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_bill_local_task_preview.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_bill_local_task_preview.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_bill_project_task_preview.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_bill_project_task_preview.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_bill_selection_task_preview.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_bill_selection_task_preview.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_local_detail.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_local_detail.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_local_store_explore_preview.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_local_store_explore_preview.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_local_task_preview.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_local_task_preview.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_logistics_talent.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_logistics_talent.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_project_detail.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_project_detail.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_project_task_preview.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_project_task_preview.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_recharge_info.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_recharge_info.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_selection_detail.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_selection_detail.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_selection_reward_cash.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_selection_reward_cash.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_selection_task_preview.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_selection_task_preview.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_talent_default.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_talent_default.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/re_task_default_public.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/re_task_default_public.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/recharge_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/recharge_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/selection_draft_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/selection_draft_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/selection_info_create_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/selection_info_create_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/selection_info_update_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/selection_info_update_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/selection_search_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/selection_search_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/supplier_search_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/supplier_search_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/vo/talent_cancel_param.go" beforeDir="false" afterPath="$PROJECT_DIR$/app/vo/talent_cancel_param.go" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/go.mod" beforeDir="false" afterPath="$PROJECT_DIR$/go.mod" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/go.sum" beforeDir="false" afterPath="$PROJECT_DIR$/go.sum" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/route/init.go" beforeDir="false" afterPath="$PROJECT_DIR$/route/init.go" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
@@ -136,7 +18,14 @@
     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
-  <component name="GOROOT" url="file://D:/Go1.22.4" />
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Go File" />
+      </list>
+    </option>
+  </component>
+  <component name="GOROOT" url="file://$USER_HOME$/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.3.windows-amd64" />
   <component name="Git.Settings">
     <option name="RECENT_BRANCH_BY_REPOSITORY">
       <map>
@@ -153,23 +42,28 @@
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;Go Build.go build youngee_m_api.executor&quot;: &quot;Debug&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.go.formatter.settings.were.checked&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.go.migrated.go.modules.settings&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.go.modules.automatic.dependencies.download&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.go.modules.go.list.on.any.changes.was.set&quot;: &quot;true&quot;,
-    &quot;git-widget-placeholder&quot;: &quot;zhou&quot;,
-    &quot;go.import.settings.migrated&quot;: &quot;true&quot;,
-    &quot;go.sdk.automatically.set&quot;: &quot;true&quot;,
-    &quot;last_opened_file_path&quot;: &quot;E:/HoLaBIP/younggee_m_api&quot;,
-    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
-    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "DefaultGoTemplateProperty": "Go File",
+    "Go Build.go build youngee_m_api.executor": "Debug",
+    "RunOnceActivity.GoLinterPluginOnboarding": "true",
+    "RunOnceActivity.GoLinterPluginStorageMigration": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "RunOnceActivity.git.unshallow": "true",
+    "RunOnceActivity.go.formatter.settings.were.checked": "true",
+    "RunOnceActivity.go.migrated.go.modules.settings": "true",
+    "RunOnceActivity.go.modules.automatic.dependencies.download": "true",
+    "RunOnceActivity.go.modules.go.list.on.any.changes.was.set": "true",
+    "git-widget-placeholder": "zhou",
+    "go.import.settings.migrated": "true",
+    "go.sdk.automatically.set": "true",
+    "last_opened_file_path": "C:/Users/XingYuXian",
+    "node.js.detected.package.eslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "nodejs_package_manager_path": "npm",
+    "settings.editor.selected.configurable": "go.vgo"
   }
-}</component>
+}]]></component>
   <component name="RunManager">
     <configuration name="go build youngee_m_api" type="GoApplicationRunConfiguration" factoryName="Go Application" nameIsGenerated="true">
       <module name="younggee_m_api" />
@@ -184,16 +78,35 @@
   <component name="SharedIndexes">
     <attachedChunks>
       <set>
-        <option value="bundled-gosdk-33c477a475b1-e0158606a674-org.jetbrains.plugins.go.sharedIndexes.bundled-GO-241.18034.61" />
-        <option value="bundled-js-predefined-1d06a55b98c1-0b3e54e931b4-JavaScript-GO-241.18034.61" />
+        <option value="bundled-gosdk-3b128438d3f6-34ac7aa8f6ab-org.jetbrains.plugins.go.sharedIndexes.bundled-GO-251.23774.430" />
+        <option value="bundled-js-predefined-d6986cc7102b-f27c65a3e318-JavaScript-GO-251.23774.430" />
       </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="f4dc82b3-ff8e-4683-8d94-679b27583f09" name="Changes" comment="" />
+      <created>1747025261763</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1747025261763</updated>
+    </task>
+    <servers />
+  </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="3" />
   </component>
+  <component name="VcsManagerConfiguration">
+    <MESSAGE value="关闭定时任务" />
+    <option name="LAST_COMMIT_MESSAGE" value="关闭定时任务" />
+  </component>
   <component name="VgoProject">
+    <environment>
+      <map>
+        <entry key="GOPROXY" value="https://goproxy.cn" />
+      </map>
+    </environment>
     <settings-migrated>true</settings-migrated>
   </component>
 </project>

+ 32 - 0
app/dao/project_dao.go

@@ -332,6 +332,22 @@ func (d ProjectDAO) GetProjectFrozenList(enterpriseId string) ([]*entity.Project
 	return projects, nil
 }
 
+// 获取所有品牌种草冻结中的任务
+func (d ProjectDAO) GetProjectFrozenListAll() ([]*entity.Project, error) {
+	var projects []*entity.Project
+	query := Db.Debug().Model(entity.Project{})
+	query.Select("project_id, product_id, enterprise_id, sub_account_id, project_platform, payment_amount, pay_at") // 冻结金额:payment_amount
+	err := query.Where(fmt.Sprintf("project_type = ? AND (project_status between 7 and 8) "), 1).Find(&projects).Error
+	if err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return projects, nil
+		} else {
+			return nil, err
+		}
+	}
+	return projects, nil
+}
+
 // 获取品牌种草冻结解除的任务
 func (d ProjectDAO) GetProjectFrozenCancelList(enterpriseId string) ([]*entity.Project, error) {
 	var projects []*entity.Project
@@ -348,6 +364,22 @@ func (d ProjectDAO) GetProjectFrozenCancelList(enterpriseId string) ([]*entity.P
 	return projects, nil
 }
 
+// 获取所有品牌种草冻结解除的任务
+func (d ProjectDAO) GetProjectFrozenCancelListAll() ([]*entity.Project, error) {
+	var projects []*entity.Project
+	query := Db.Debug().Model(entity.Project{})
+	query.Select("project_id, product_id, enterprise_id, sub_account_id, project_platform, settlement_amount, pay_at") // 解冻金额:settlement_amount
+	err := query.Where(fmt.Sprintf("project_type = ? AND (project_status between 9 and 10) "), 1).Find(&projects).Error
+	if err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return projects, nil
+		} else {
+			return nil, err
+		}
+	}
+	return projects, nil
+}
+
 // 获取品牌种草账单列表
 func (d ProjectDAO) GetBillProjectPreviews(param *vo.ProjectSearchParam) ([]vo.ReBillProjectTaskPreview, int64, error) {
 	var reBillProjectTaskPreviews []vo.ReBillProjectTaskPreview

+ 32 - 0
app/dao/selection_info_dao.go

@@ -216,6 +216,22 @@ func (d SelectionInfoDAO) GetSelectionFrozenList(enterpriseId string) ([]*entity
 	return selectionInfos, nil
 }
 
+// 获取所有电商带货冻结中的任务
+func (d SelectionInfoDAO) GetSelectionFrozenListAll() ([]*entity.SelectionInfo, error) {
+	var selectionInfos []*entity.SelectionInfo
+	query := Db.Debug().Model(entity.SelectionInfo{})
+	query.Select("selection_id, product_id, enterprise_id, sub_account_id, platform, estimated_cost, pay_at") // 冻结金额:estimated_cost
+	err := query.Where(fmt.Sprintf("selection_status between 5 and 6")).Find(&selectionInfos).Error
+	if err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return selectionInfos, nil
+		} else {
+			return nil, err
+		}
+	}
+	return selectionInfos, nil
+}
+
 // 获取电商带货冻结解除的任务
 func (d SelectionInfoDAO) GetSelectionFrozenCancelList(enterpriseId string) ([]*entity.SelectionInfo, error) {
 	var selectionInfos []*entity.SelectionInfo
@@ -232,6 +248,22 @@ func (d SelectionInfoDAO) GetSelectionFrozenCancelList(enterpriseId string) ([]*
 	return selectionInfos, nil
 }
 
+// 获取所有电商带货冻结解除的任务
+func (d SelectionInfoDAO) GetSelectionFrozenCancelListAll() ([]*entity.SelectionInfo, error) {
+	var selectionInfos []*entity.SelectionInfo
+	query := Db.Debug().Model(entity.SelectionInfo{})
+	query.Select("selection_id, product_id, enterprise_id, sub_account_id, platform, settlement_amount, pay_at") // 解冻金额:settlement_amount
+	err := query.Where(fmt.Sprintf("selection_status between 7 and 8")).Find(&selectionInfos).Error
+	if err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return selectionInfos, nil
+		} else {
+			return nil, err
+		}
+	}
+	return selectionInfos, nil
+}
+
 // 获取带货账单列表
 func (d SelectionInfoDAO) GetBillSelectionPreviews(param *vo.SelectionSearchParam) ([]vo.ReBillSelectionTaskPreview, int64, error) {
 	var reBillSelectionTaskPreviews []vo.ReBillSelectionTaskPreview

+ 28 - 29
app/schedule/auto_task_execute.go

@@ -1,41 +1,40 @@
 package schedule
 
 import (
-	"github.com/robfig/cron/v3"
 	"log"
 	"time"
 	"youngee_m_api/app/dao"
 	"youngee_m_api/app/entity"
 )
 
-func AutoTaskExecute() error {
-	// 新建一个定时任务对象
-	crontab := cron.New(cron.WithSeconds()) // 精确到秒
-	spec := "0 */10 * * * ?"                //cron表达式,每10分钟一次
-
-	// 添加定时任务
-	// 定时任务1  初稿未审稿自动执行
-	_, err1 := crontab.AddFunc(spec, AutoSketchExecuteTask)
-	if err1 != nil {
-		return err1
-	}
-	// 定时任务2  链接未质检自动执行
-	_, err2 := crontab.AddFunc(spec, AutoLinkExecuteTask)
-	if err2 != nil {
-		return err2
-	}
-	// 定时任务3  数据未质检自动执行
-	_, err3 := crontab.AddFunc(spec, AutoDataExecuteTask)
-	if err3 != nil {
-		return err3
-	}
-
-	// 启动定时器
-	crontab.Start()
-	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
-	//select {} //阻塞主线程停止
-	return nil
-}
+//func AutoTaskExecute() error {
+//	// 新建一个定时任务对象
+//	crontab := cron.New(cron.WithSeconds()) // 精确到秒
+//	spec := "0 */10 * * * ?"                //cron表达式,每10分钟一次
+//
+//	// 添加定时任务
+//	// 定时任务1  初稿未审稿自动执行
+//	_, err1 := crontab.AddFunc(spec, AutoSketchExecuteTask)
+//	if err1 != nil {
+//		return err1
+//	}
+//	// 定时任务2  链接未质检自动执行
+//	_, err2 := crontab.AddFunc(spec, AutoLinkExecuteTask)
+//	if err2 != nil {
+//		return err2
+//	}
+//	// 定时任务3  数据未质检自动执行
+//	_, err3 := crontab.AddFunc(spec, AutoDataExecuteTask)
+//	if err3 != nil {
+//		return err3
+//	}
+//
+//	// 启动定时器
+//	crontab.Start()
+//	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
+//	//select {} //阻塞主线程停止
+//	return nil
+//}
 
 // 定时任务1  初稿未审稿自动执行
 func AutoSketchExecuteTask() {

+ 29 - 30
app/schedule/auto_task_invalid.go

@@ -3,42 +3,41 @@ package schedule
 import (
 	"fmt"
 	"github.com/caixw/lib.go/conv"
-	"github.com/robfig/cron/v3"
 	"log"
 	"time"
 	"youngee_m_api/app/dao"
 	"youngee_m_api/app/entity"
 )
 
-func AutoTaskInvalid() error {
-	// 新建一个定时任务对象
-	crontab := cron.New(cron.WithSeconds()) // 精确到秒
-	spec := "0 */5 * * * ?"                 //cron表达式,每5分钟一次
-	// "0 0 12 * * ?" 每天中午12点执行
-
-	// 添加定时任务
-	// 定时任务1  品牌种草失效自动处理
-	_, err1 := crontab.AddFunc(spec, AutoProjectInvalidTask)
-	if err1 != nil {
-		return err1
-	}
-	// 定时任务2  电商带货失效自动处理
-	_, err2 := crontab.AddFunc(spec, AutoSelectionInvalidTask)
-	if err2 != nil {
-		return err2
-	}
-	// 定时任务3  本地生活失效自动处理
-	_, err3 := crontab.AddFunc(spec, AutoLocalLifeInvalidTask)
-	if err3 != nil {
-		return err3
-	}
-
-	// 启动定时器
-	crontab.Start()
-	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
-	//select {} //阻塞主线程停止
-	return nil
-}
+//func AutoTaskInvalid() error {
+//	// 新建一个定时任务对象
+//	crontab := cron.New(cron.WithSeconds()) // 精确到秒
+//	spec := "0 */5 * * * ?"                 //cron表达式,每5分钟一次
+//	// "0 0 12 * * ?" 每天中午12点执行
+//
+//	// 添加定时任务
+//	// 定时任务1  品牌种草失效自动处理
+//	_, err1 := crontab.AddFunc(spec, AutoProjectInvalidTask)
+//	if err1 != nil {
+//		return err1
+//	}
+//	// 定时任务2  电商带货失效自动处理
+//	_, err2 := crontab.AddFunc(spec, AutoSelectionInvalidTask)
+//	if err2 != nil {
+//		return err2
+//	}
+//	// 定时任务3  本地生活失效自动处理
+//	_, err3 := crontab.AddFunc(spec, AutoLocalLifeInvalidTask)
+//	if err3 != nil {
+//		return err3
+//	}
+//
+//	// 启动定时器
+//	crontab.Start()
+//	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
+//	//select {} //阻塞主线程停止
+//	return nil
+//}
 
 // 定时任务1  品牌种草失效自动处理
 func AutoProjectInvalidTask() {

+ 17 - 18
app/schedule/auto_task_recharge.go

@@ -1,7 +1,6 @@
 package schedule
 
 import (
-	"github.com/robfig/cron/v3"
 	"github.com/sirupsen/logrus"
 	"log"
 	"time"
@@ -9,23 +8,23 @@ import (
 	"youngee_m_api/app/service"
 )
 
-func AutoTaskRecharge() error {
-	// 新建一个定时任务对象
-	crontab := cron.New(cron.WithSeconds()) // 精确到秒
-	spec := "0 */2 * * * ?"                 //cron表达式
-
-	// 定时任务  检查微信支付是否充值成功
-	_, err1 := crontab.AddFunc(spec, AutoCheckWXRechargeTask)
-	if err1 != nil {
-		return err1
-	}
-
-	// 启动定时器
-	crontab.Start()
-	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
-	//select {} //阻塞主线程停止
-	return nil
-}
+//func AutoTaskRecharge() error {
+//	// 新建一个定时任务对象
+//	crontab := cron.New(cron.WithSeconds()) // 精确到秒
+//	spec := "0 */2 * * * ?"                 //cron表达式
+//
+//	// 定时任务  检查微信支付是否充值成功
+//	_, err1 := crontab.AddFunc(spec, AutoCheckWXRechargeTask)
+//	if err1 != nil {
+//		return err1
+//	}
+//
+//	// 启动定时器
+//	crontab.Start()
+//	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
+//	//select {} //阻塞主线程停止
+//	return nil
+//}
 
 // 定时任务  检查微信支付是否充值成功
 func AutoCheckWXRechargeTask() {

+ 29 - 30
app/schedule/auto_task_review.go

@@ -2,7 +2,6 @@ package schedule
 
 import (
 	"github.com/caixw/lib.go/conv"
-	"github.com/robfig/cron/v3"
 	"log"
 	"strings"
 	"time"
@@ -11,35 +10,35 @@ import (
 	"youngee_m_api/app/service/review_service"
 )
 
-func AutoTaskReview() error {
-	// 新建一个定时任务对象
-	crontab := cron.New(cron.WithSeconds()) // 精确到秒
-	spec := "0 */1 * * * ?"                 //cron表达式,每1分钟一次
-	// "0 0 12 * * ?" 每天中午12点执行
-
-	// 添加定时任务
-	// 定时任务1  品牌种草API自动审核
-	_, err1 := crontab.AddFunc(spec, AutoProjectReviewTask)
-	if err1 != nil {
-		return err1
-	}
-	// 定时任务2  电商带货API自动审核
-	_, err2 := crontab.AddFunc(spec, AutoSelectionReviewTask)
-	if err2 != nil {
-		return err2
-	}
-	// 定时任务3  本地生活API自动审核
-	_, err3 := crontab.AddFunc(spec, AutoLocalLifeReviewTask)
-	if err3 != nil {
-		return err3
-	}
-
-	// 启动定时器
-	crontab.Start()
-	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
-	//select {} //阻塞主线程停止
-	return nil
-}
+//func AutoTaskReview() error {
+//	// 新建一个定时任务对象
+//	crontab := cron.New(cron.WithSeconds()) // 精确到秒
+//	spec := "0 */1 * * * ?"                 //cron表达式,每1分钟一次
+//	// "0 0 12 * * ?" 每天中午12点执行
+//
+//	// 添加定时任务
+//	// 定时任务1  品牌种草API自动审核
+//	_, err1 := crontab.AddFunc(spec, AutoProjectReviewTask)
+//	if err1 != nil {
+//		return err1
+//	}
+//	// 定时任务2  电商带货API自动审核
+//	_, err2 := crontab.AddFunc(spec, AutoSelectionReviewTask)
+//	if err2 != nil {
+//		return err2
+//	}
+//	// 定时任务3  本地生活API自动审核
+//	_, err3 := crontab.AddFunc(spec, AutoLocalLifeReviewTask)
+//	if err3 != nil {
+//		return err3
+//	}
+//
+//	// 启动定时器
+//	crontab.Start()
+//	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
+//	//select {} //阻塞主线程停止
+//	return nil
+//}
 
 // 定时任务1  品牌种草API自动审核
 func AutoProjectReviewTask() {

+ 28 - 29
app/schedule/auto_task_settle.go

@@ -1,41 +1,40 @@
 package schedule
 
 import (
-	"github.com/robfig/cron/v3"
 	"log"
 	"time"
 	"youngee_m_api/app/dao"
 	"youngee_m_api/app/entity"
 )
 
-func AutoTaskSettle() error {
-	// 新建一个定时任务对象
-	crontab := cron.New(cron.WithSeconds()) // 精确到秒
-	spec := "0 */1 * * * ?"                 //cron表达式,每5分钟一次
-
-	// 添加定时任务
-	// 定时任务1  电商带货结案与解冻处理
-	_, err2 := crontab.AddFunc(spec, AutoSelectionSettleTask)
-	if err2 != nil {
-		return err2
-	}
-	// 定时任务2  品牌种草结案与解冻处理
-	_, err1 := crontab.AddFunc(spec, AutoProjectSettleTask)
-	if err1 != nil {
-		return err1
-	}
-	// 定时任务3  本地生活结案与解冻处理
-	_, err3 := crontab.AddFunc(spec, AutoLocalLifeSettleTask)
-	if err3 != nil {
-		return err3
-	}
-
-	// 启动定时器
-	crontab.Start()
-	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
-	//select {} //阻塞主线程停止
-	return nil
-}
+//func AutoTaskSettle() error {
+//	// 新建一个定时任务对象
+//	crontab := cron.New(cron.WithSeconds()) // 精确到秒
+//	spec := "0 */1 * * * ?"                 //cron表达式,每5分钟一次
+//
+//	// 添加定时任务
+//	// 定时任务1  电商带货结案与解冻处理
+//	_, err2 := crontab.AddFunc(spec, AutoSelectionSettleTask)
+//	if err2 != nil {
+//		return err2
+//	}
+//	// 定时任务2  品牌种草结案与解冻处理
+//	_, err1 := crontab.AddFunc(spec, AutoProjectSettleTask)
+//	if err1 != nil {
+//		return err1
+//	}
+//	// 定时任务3  本地生活结案与解冻处理
+//	_, err3 := crontab.AddFunc(spec, AutoLocalLifeSettleTask)
+//	if err3 != nil {
+//		return err3
+//	}
+//
+//	// 启动定时器
+//	crontab.Start()
+//	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
+//	//select {} //阻塞主线程停止
+//	return nil
+//}
 
 // 定时任务1  电商带货结案与解冻处理
 func AutoSelectionSettleTask() {

+ 22 - 13
app/service/recharge_service.go

@@ -185,17 +185,26 @@ func (s RechargeService) QueryOrderByTradeId(enterpriseId string, subAccountId i
 // 余额管理——总金额、可用余额、冻结金额
 func (s RechargeService) ShowBalance(param *vo.BalanceParam) (*vo.ReBalanceShow, error) {
 	reBalanceShow := new(vo.ReBalanceShow)
-	enterprise, err := dao.EnterpriseDao{}.GetEnterpriseInfo(param.EnterpriseId)
+	var enterprises []entity.Enterprise
+	err := dao.Db.Model(&entity.Enterprise{}).Find(&enterprises).Error
 	if err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return reBalanceShow, nil
+			return nil, nil
 		} else {
 			return nil, err
 		}
 	}
-	reBalanceShow.TotalBalance = enterprise.Balance
-	reBalanceShow.AvailBalance = enterprise.AvailableBalance
-	reBalanceShow.FrozenBalance = enterprise.FrozenBalance
+	var balance float64
+	var availBalance float64
+	var frozenBalance float64
+	for _, enterprise := range enterprises {
+		balance += enterprise.Balance
+		availBalance += enterprise.AvailableBalance
+		frozenBalance += enterprise.FrozenBalance
+	}
+	reBalanceShow.TotalBalance = balance
+	reBalanceShow.AvailBalance = availBalance
+	reBalanceShow.FrozenBalance = frozenBalance
 	return reBalanceShow, nil
 }
 
@@ -213,16 +222,16 @@ func (s RechargeService) FrozenInfoList(param *vo.BalanceParam) (vo.ResultVO, er
 	var projects []*entity.Project
 	if param.FrozenState == 1 {
 		// 电商带货
-		selectionInfos, _ = dao.SelectionInfoDAO{}.GetSelectionFrozenList(param.EnterpriseId)
+		selectionInfos, _ = dao.SelectionInfoDAO{}.GetSelectionFrozenListAll()
 		// 品牌种草
-		projects, _ = dao.ProjectDAO{}.GetProjectFrozenList(param.EnterpriseId)
+		projects, _ = dao.ProjectDAO{}.GetProjectFrozenListAll()
 		// 本地生活
 
 	} else {
 		// 电商带货
-		selectionInfos, _ = dao.SelectionInfoDAO{}.GetSelectionFrozenCancelList(param.EnterpriseId)
+		selectionInfos, _ = dao.SelectionInfoDAO{}.GetSelectionFrozenCancelListAll()
 		// 品牌种草
-		projects, _ = dao.ProjectDAO{}.GetProjectFrozenCancelList(param.EnterpriseId)
+		projects, _ = dao.ProjectDAO{}.GetProjectFrozenCancelListAll()
 		// 本地生活
 
 	}
@@ -347,11 +356,11 @@ func (t RechargeService) FrozenInfoCount(param *vo.BalanceParam) map[string]int6
 	var blockReleaseNum1 int64
 	var blockReleaseNum2 int64
 	// 冻结中
-	dao.Db.Model(entity.SelectionInfo{}).Where(fmt.Sprintf("enterprise_id = ? AND (selection_status between 5 and 6) "), param.EnterpriseId).Count(&blockNum1)
-	dao.Db.Model(entity.Project{}).Where(fmt.Sprintf("enterprise_id = ? AND project_type = ? AND (project_status between 7 and 8) "), param.EnterpriseId, 1).Count(&blockNum2)
+	dao.Db.Model(entity.SelectionInfo{}).Where(fmt.Sprintf("selection_status between 5 and 6")).Count(&blockNum1)
+	dao.Db.Model(entity.Project{}).Where(fmt.Sprintf("project_type = ? AND (project_status between 7 and 8) "), 1).Count(&blockNum2)
 	// 冻结解除
-	dao.Db.Model(entity.SelectionInfo{}).Where(fmt.Sprintf("enterprise_id = ? AND (selection_status between 7 and 8) "), param.EnterpriseId).Count(&blockReleaseNum1)
-	dao.Db.Model(entity.Project{}).Where(fmt.Sprintf("enterprise_id = ? AND project_type = ? AND (project_status between 9 and 10) "), param.EnterpriseId, 1).Count(&blockReleaseNum2)
+	dao.Db.Model(entity.SelectionInfo{}).Where(fmt.Sprintf("selection_status between 7 and 8")).Count(&blockReleaseNum1)
+	dao.Db.Model(entity.Project{}).Where(fmt.Sprintf("project_type = ? AND (project_status between 9 and 10) "), 1).Count(&blockReleaseNum2)
 
 	res["blockNum"] = blockNum1 + blockNum2
 	res["blockReleaseNum"] = blockReleaseNum1 + blockReleaseNum2

+ 4 - 4
app/vo/balance_param.go

@@ -1,10 +1,10 @@
 package vo
 
 type BalanceParam struct {
-	EnterpriseId string `json:"enterprise_id"` // 企业id
-	FrozenState  int64  `json:"frozen_state"`  // 冻结状态(1冻结中 2冻结解除)
-	Page         int    `json:"page"`
-	PageSize     int    `json:"page_size"`
+	//EnterpriseId string `json:"enterprise_id"` // 企业id
+	FrozenState int64 `json:"frozen_state"` // 冻结状态(1冻结中 2冻结解除)
+	Page        int   `json:"page"`
+	PageSize    int   `json:"page_size"`
 
 	Others string `json:"others"` // 任务标题/任务ID/创建者
 }

+ 2 - 2
db/finance.go

@@ -1332,10 +1332,10 @@ func GetBillTaskList(ctx context.Context, req http_model.GetBillTaskListRequest)
 				productName = product.ProductName
 				productPrice = product.ProductPrice
 			}
-			if selection.SubAccountID == 0 {
+			if selection.SubAccountId == 0 {
 				creater = GetEnterprisenameByEnterpriseID(ctx, selection.EnterpriseID)
 			} else {
-				creater = GetOperatorBySubacountID(ctx, selection.SubAccountID)
+				creater = GetOperatorBySubacountID(ctx, selection.SubAccountId)
 			}
 			mainImage, err = GetMainPhotoByProductID(ctx, int64(selection.ProductID))
 			results = append(results, &http_model.BillTaskDataResponse{

+ 1 - 1
db/logistics.go

@@ -250,7 +250,7 @@ func GetSpecialTaskLogisticsList(ctx context.Context, projectID string, pageSize
 	return newTaskLogisticss, totalTask, nil
 }
 
-func GetSecTaskLogisticsList(ctx context.Context, secTaskList []*http_model.SecTaskInfo, taskStage int, productType int) ([]*http_model.SecTaskInfo, error) {
+func GetSecTaskLogisticsList(ctx context.Context, secTaskList []*http_model.SecTaskInfo, taskStage int) ([]*http_model.SecTaskInfo, error) {
 	db := GetReadDB(ctx)
 	println("taskstage: ", taskStage)
 	if taskStage != 6 { // 已发货

+ 27 - 0
db/platform_kuaishou_user.go

@@ -0,0 +1,27 @@
+package db
+
+import (
+	"context"
+	"youngee_m_api/model/gorm_model"
+)
+
+func FindUserInfoByTalentId(ctx context.Context, talentId string) (*gorm_model.PlatformKuaishouUserInfo, error) {
+	db := GetReadDB(ctx)
+	var userInfo gorm_model.PlatformKuaishouUserInfo
+	err := db.Model(gorm_model.PlatformKuaishouUserInfo{}).Where("talent_id = ? and platform_id = ?", talentId, 4).Find(&userInfo).Error
+	if err != nil {
+		return nil, err
+	}
+	return &userInfo, nil
+}
+
+// FindUserInfoByOpenId 根据openID去查找快手授权信息
+func FindUserInfoByOpenId(ctx context.Context, openId string) (*gorm_model.PlatformKuaishouUserInfo, error) {
+	db := GetReadDB(ctx)
+	var userInfo gorm_model.PlatformKuaishouUserInfo
+	err := db.Model(gorm_model.PlatformKuaishouUserInfo{}).Where("open_id = ? and platform_id = ?", openId, 4).Find(&userInfo).Error
+	if err != nil {
+		return nil, err
+	}
+	return &userInfo, nil
+}

+ 226 - 107
db/sectask.go

@@ -30,7 +30,7 @@ func GetSecTaskById(ctx context.Context, secTaskId string) (*gorm_model.Younggee
 	return &secTaskInfo, nil
 }
 
-func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, searchValue string, pageSize, pageNum int64) ([]*http_model.SecTaskInfo, int64, error) {
+func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, searchValue string, saleNumMin int, saleNumMax int, pageSize, pageNum int64, orderBy []string, orderDesc []string) ([]*http_model.SecTaskInfo, int64, error) {
 	db := GetReadDB(ctx)
 	// var taskStages []int
 	var freeStages []int
@@ -44,6 +44,10 @@ func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, sea
 		// 申请成功
 		freeStages = []int{3, 4, 5}
 		break
+	case 5:
+		// 申请失败
+		freeStages = []int{2}
+		break
 	case 6:
 		// 待发货
 		freeStages = []int{3}
@@ -68,56 +72,40 @@ func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, sea
 		freeStages = []int{0, 1, 2, 3, 4, 5}
 		rewardStages = []int{0, 1}
 	}
-	fmt.Println("task_stages: ", freeStages, rewardStages)
+	// fmt.Println("task_stages: ", freeStages, rewardStages)
 	if len(freeStages) == 0 {
+		// 根据悬赏阶段筛选
 		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and reward_stage in ?", selectionId, rewardStages)
 	} else {
+		// 根据免费领样阶段筛选
 		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_stage in ?", selectionId, freeStages)
 	}
 
-	/*
-		if rewardStage == -1 && freeStage == -1 {
-			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ?", selectionId)
-		} else if rewardStage == -1 {
-			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_stage = ?", selectionId, freeStage)
-		} else {
-			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and reward_stage = ?", selectionId, rewardStage)
-		}*/
-
-	//var taskStages []int
-	/*
-			switch taskStatus {
-			case 1:
-				//hhh = []int{3}
-				println("case 1")
-				break
-						case 4:
-						taskStages = []int{4, 6, 7, 8, 9, 10}
-						break
-					case 6:
-						taskStages = []int{6}
-						break
-					case 7:
-						taskStages = []int{7, 8, 9, 10}
-						break
-					case 9:
-						taskStages = []int{9}
-						break
-					case 10:
-						taskStages = []int{10}
-						break
+	// 动态排序逻辑
+	if len(orderBy) > 0 && len(orderDesc) > 0 && len(orderBy) == len(orderDesc) {
+		for i := 0; i < len(orderBy); i++ {
+			orderField := orderBy[i]
+			isDesc := orderDesc[i] == "desc" // 1=降序,其他值=升序
 
+			switch orderField {
+			case "sale_num":
+				if isDesc {
+					db = db.Order("sale_num desc")
+				} else {
+					db = db.Order("sale_num asc")
+				}
+			case "fans_count":
+				if isDesc {
+					db = db.Order("fans_num desc")
+				} else {
+					db = db.Order("fans_num asc")
+				}
 			}
-
-		//println("taskStage: ", taskStages)
-		if taskStage == 7 || taskStage == 6 {
-			println("if")
-			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and task_stage = ?", selectionId, taskStage)
-		} else {
-			println("else")
-			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and task_status = ?", selectionId, taskStatus)
 		}
-	*/
+	} else {
+		// 默认排序
+		db = db.Order("task_id desc")
+	}
 
 	// 查询总数
 	var total int64
@@ -126,43 +114,67 @@ func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, sea
 		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
 		return nil, 0, err
 	}
-	fmt.Println("total ", total)
-	// println("db: ", db)
+
 	// 查询该页数据
-	// 分页
-	if pageSize != 0 {
-		limit := pageSize
-		offset := pageSize * (pageNum - 1) // assert pageNum start with 0
-		err := db.Order("create_date desc").Limit(int(limit)).Offset(int(offset)).Find(&secTaskInfoList).Error
-		fmt.Println("分页-本页数据:", len(secTaskInfoList))
-		fmt.Println("err ", err)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
-			return nil, 0, err
-		}
-	} else {
-		// 不分页
-		err := db.Order("create_date desc").Find(&secTaskInfoList).Error
-		fmt.Println("不分页-本页数据:", len(secTaskInfoList))
-		fmt.Println("err ", err)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
-			return nil, 0, err
-		}
+	limit := pageSize
+	offset := pageSize * (pageNum - 1) // assert pageNum start with 0
+	err := db.Limit(int(limit)).Offset(int(offset)).Find(&secTaskInfoList).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
+		return nil, 0, err
 	}
 
-	//fmt.Println("secTaskInfoList:", secTaskInfoList)
+	// fmt.Printf("secTaskInfoList:%+v", secTaskInfoList)
 	newSecTaskInfoList := pack.GormSecTaskListToHttpSecTaskList(secTaskInfoList)
-	fmt.Println("newSecTaskInfoList:", newSecTaskInfoList)
+	// fmt.Printf("newSecTaskInfoList:%+v", newSecTaskInfoList)
+
+	//for i, secTask := range newSecTaskInfoList {
+	//	if secTask.RegionCode != 0 {
+	//		newSecTaskInfoList[i].DetailAddr = GetRegion(ctx, secTask.RegionCode) + newSecTaskInfoList[i].DetailAddr
+	//	}
+	//}
+
+	// 写入达人头像
+	for _, v := range newSecTaskInfoList {
+		kuaishouUserInfo, kuaishouUserErr := FindUserInfoByTalentId(ctx, v.TalentId)
+		if kuaishouUserErr != nil {
+			return nil, 0, kuaishouUserErr
+		}
+		v.TalentAvatar = kuaishouUserInfo.HeadUri
+		v.PlatformNickname = kuaishouUserInfo.NickName
+		v.KuaiShouUserGender = kuaishouUserInfo.Gender
+		v.KuaiShouUserLocation = kuaishouUserInfo.City
+		v.FansCount = kuaishouUserInfo.Fan
+	}
+
+	// 写入带货任务信息
+	for _, v := range newSecTaskInfoList {
+		selectionInfo, selectionInfoErr := GetSelectionById(ctx, v.SelectionId)
+		if selectionInfoErr != nil {
+			return nil, 0, selectionInfoErr
+		}
+		v.EnterpriseId = selectionInfo.EnterpriseID
+		v.SubAccountId = selectionInfo.SubAccountId
+	}
 
-	for i, secTask := range newSecTaskInfoList {
-		if secTask.RegionCode != 0 {
-			newSecTaskInfoList[i].DetailAddr = GetRegion(ctx, secTask.RegionCode) + secTask.DetailAddr
+	// 按照saleMin和saleMax区间过滤
+	var saleCondition []*http_model.SecTaskInfo
+	if saleNumMin != 0 && saleNumMax != 0 {
+		for _, v := range newSecTaskInfoList {
+			if v.SaleNum <= saleNumMax && v.SaleNum > saleNumMin {
+				saleCondition = append(saleCondition, v)
+			} else {
+				total--
+			}
 		}
+	} else {
+		saleCondition = newSecTaskInfoList
 	}
+
+	// 按照SearchValue过滤
 	var resSecTaskInfoList []*http_model.SecTaskInfo
 	if searchValue != "" {
-		for _, v := range newSecTaskInfoList {
+		for _, v := range saleCondition {
 			if strings.Contains(v.SecTaskId, searchValue) {
 				resSecTaskInfoList = append(resSecTaskInfoList, v)
 			} else if strings.Contains(v.PlatformNickname, searchValue) {
@@ -172,24 +184,29 @@ func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, sea
 			}
 		}
 	} else {
-		resSecTaskInfoList = newSecTaskInfoList
+		resSecTaskInfoList = saleCondition
 	}
-	//fmt.Println("resSecTaskInfoList: ", resSecTaskInfoList[0])
+
 	return resSecTaskInfoList, total, nil
 }
 
-func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string) (bool, error) {
+func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string, userId int, subAccountId int) (bool, error) {
 	db := GetWriteDB(ctx)
 	// 1. 校验
 	var count int64
 	//fmt.Println("task_ids: ", taskIds)
-	//println(reflect.TypeOf(taskIds[0]))'
-	//fmt.Printf(taskIds[0])
-	fmt.Println("TaskIDs: ", taskIds)
-	fmt.Println("SelectionID: ", selectionId)
 	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Count(&count).Error
 
-	fmt.Println("count: ", count)
+	var chooseTalentUserId string
+	var chooseTalentUserType int
+	if subAccountId == 0 {
+		chooseTalentUserType = 3
+		chooseTalentUserId = conv.MustString(userId)
+	} else {
+		chooseTalentUserType = 3
+		chooseTalentUserId = conv.MustString(subAccountId)
+	}
+	//fmt.Println("count: ", count)
 	if err != nil {
 		return false, err
 	}
@@ -209,38 +226,66 @@ func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string)
 	if err != nil {
 		return false, err
 	}
+	if int64(selection.RemainNum) < count {
+		return true, errors.New("剩余样品数量不足")
+	}
 
 	err = db.Transaction(func(tx *gorm.DB) error {
 		// 2. 修改任务状态和任务阶段
 		// 若选品不提供样品,则直接跳转执行阶段,否则进入发货阶段
-		/*
-			if selection.SampleMode == 3 {
-				updateData := gorm_model.YounggeeSecTaskInfo{
-					TaskStatus:       2,
-					TaskStage:        8,
-					SelectDate:       time.Now(),
-					LogisticsStatus:  3,
-					AssignmentStatus: 1,
-				}
-				err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Updates(updateData).Error
-				if err != nil {
-					return err
-				}
+		if selection.SampleMode == 3 {
+			updateData := gorm_model.YounggeeSecTaskInfo{
+				ChooseTalentUserId:   chooseTalentUserId,
+				ChooseTalentUserType: chooseTalentUserType,
+				TaskStatus:           2,
+				TaskStage:            8,
+				SelectDate:           time.Now(),
+				LogisticsStatus:      3,
+				AssignmentStatus:     1,
 			}
-		*/
-		// 2.3 之后同意代表同意免费领样,并不是合作
-		updateData := gorm_model.YounggeeSecTaskInfo{
-			TaskStatus:      2,
-			TaskStage:       6,
-			SelectDate:      time.Now(),
-			LogisticsStatus: 1,
-			FreeStage:       3,
+			err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
+			if err != nil {
+				return err
+			}
+
+		} else {
+			// 免费领样
+			updateData := gorm_model.YounggeeSecTaskInfo{
+				ChooseTalentUserId:   chooseTalentUserId,
+				ChooseTalentUserType: chooseTalentUserType,
+				TaskStatus:           2,
+				TaskStage:            6,
+				SelectDate:           time.Now(),
+				LogisticsStatus:      1,
+				FreeStage:            3,
+			}
+			err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Updates(updateData).Error
+			if err != nil {
+				return err
+			}
+			// 3.2  更新带货任务待发货人数
+			err = tx.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Updates(
+				map[string]interface{}{"before_delivery_num": gorm.Expr("before_delivery_num + ?", 1)}).Error
+			if err != nil {
+				return err
+			}
+
 		}
-		err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Updates(updateData).Error
+		// 3.1 更新选品剩余数量
+		err = tx.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Updates(
+			map[string]interface{}{"remain_num": gorm.Expr("remain_num - ?", 1)}).Error
 		if err != nil {
 			return err
 		}
-		// 3. 生成达人消息
+
+		// 3.2  更新带货任务已选人数
+		err = tx.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Updates(
+			map[string]interface{}{"choose_num": gorm.Expr("choose_num + ?", 1)}).Error
+		if err != nil {
+			return err
+		}
+
+		// 4. 生成达人消息
 		for _, talendId := range talentIds {
 			err = CreateMessage(ctx, 1, 1, talendId, selection.SelectionName)
 			if err != nil {
@@ -256,8 +301,17 @@ func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string)
 	return true, nil
 }
 
-func RefuseSecTaskCoop(ctx context.Context, taskIds []string) (bool, error) {
+func RefuseSecTaskCoop(ctx context.Context, taskIds []string, userId int, subAccountId int) (bool, error) {
 	db := GetWriteDB(ctx)
+	var chooseTalentUserId string
+	var chooseTalentUserType int
+	if subAccountId == 0 {
+		chooseTalentUserType = 3
+		chooseTalentUserId = conv.MustString(userId)
+	} else {
+		chooseTalentUserType = 3
+		chooseTalentUserId = conv.MustString(subAccountId)
+	}
 	// 1. 校验
 	var count int64
 	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Count(&count).Error
@@ -278,11 +332,13 @@ func RefuseSecTaskCoop(ctx context.Context, taskIds []string) (bool, error) {
 	err = db.Transaction(func(tx *gorm.DB) error {
 		// 2. 修改任务状态和任务阶段
 		updateData := gorm_model.YounggeeSecTaskInfo{
-			TaskStatus:     3,
-			TaskStage:      5,
-			CompleteDate:   time.Now(),
-			CompleteStatus: 3,
-			FreeStage:      2,
+			ChooseTalentUserId:   chooseTalentUserId,
+			ChooseTalentUserType: chooseTalentUserType,
+			TaskStatus:           3,
+			TaskStage:            5,
+			CompleteDate:         time.Now(),
+			CompleteStatus:       3,
+			FreeStage:            2,
 		}
 		err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Updates(updateData).Error
 		if err != nil {
@@ -417,3 +473,66 @@ func GetSecTaskCountByStrategyId(ctx context.Context, selectionId string, strate
 	}
 	return int(total), nil
 }
+
+func GetAllSecTaskList(ctx context.Context, selectionId string, taskStage int) ([]*gorm_model.YounggeeSecTaskInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// var taskStages []int
+	var freeStages []int
+	var rewardStages []int
+	switch taskStage {
+	case 3:
+		// 待选
+		freeStages = []int{1}
+		break
+	case 4:
+		// 申请成功
+		freeStages = []int{3, 4, 5}
+		break
+	case 6:
+		// 待发货
+		freeStages = []int{3}
+		break
+	case 7:
+		// 已发货
+		freeStages = []int{4}
+		break
+	case 8:
+		// 已收货
+		freeStages = []int{5}
+	case 9:
+		// 待领悬赏
+		rewardStages = []int{1}
+		break
+	case 10:
+		// 已领悬赏
+		rewardStages = []int{2}
+		break
+	case 11:
+		// 返回全部 使用场景-绑定免费领样策略
+		freeStages = []int{0, 1, 2, 3, 4, 5}
+		rewardStages = []int{0, 1}
+	}
+	if len(freeStages) == 0 {
+		// 根据悬赏阶段筛选
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and reward_stage in ?", selectionId, rewardStages)
+	} else {
+		// 根据免费领样阶段筛选
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_stage in ?", selectionId, freeStages)
+	}
+
+	// 查询总数
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("GetAllSecTaskList count error: %v", err)
+		return nil, 0, err
+	}
+
+	// 查询数据
+	var secTaskInfoList []*gorm_model.YounggeeSecTaskInfo
+	if err := db.Find(&secTaskInfoList).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("GetAllSecTaskList find error: %v", err)
+		return nil, 0, err
+	}
+
+	return secTaskInfoList, total, nil
+}

+ 17 - 0
db/selection.go

@@ -310,3 +310,20 @@ func FindSelectionIdBySelectionStatus(ctx context.Context, selectionStatus int)
 	}
 	return selectionIds, nil
 }
+
+// UpdateSelectionNum 更新带货任务已发货人数
+func UpdateSelectionNum(ctx context.Context, selectionID string) error {
+	db := GetWriteDB(ctx)
+	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionID).Updates(
+		map[string]interface{}{"delivery_num": gorm.Expr("delivery_num + ?", 1)}).Error
+	if err != nil {
+		return err
+	}
+
+	err = db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionID).Updates(
+		map[string]interface{}{"after_delivery_num": gorm.Expr("after_delivery_num - ?", 1)}).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 3 - 7
handler/CreateSecTaskLogistics.go

@@ -1,7 +1,6 @@
 package handler
 
 import (
-	"fmt"
 	"youngee_m_api/consts"
 	"youngee_m_api/model/http_model"
 	"youngee_m_api/service"
@@ -44,13 +43,10 @@ func (c CreateSecTaskLogistics) run() {
 		logrus.Info("CreateSecTaskLogistics fail,req:%+v", c.req)
 		return
 	}
-	println("开始为每个带货子任务绑定免费领样策略")
-	err1 := service.SelectionTask.UpdateStrategyId(c.ctx, data.SelectionId)
-	nerr := service.SelectionTask.UpdateStrategyNumBySelectionId(c.ctx, data.SelectionId)
-	fmt.Println(nerr, err1)
-	println("完成为每个带货子任务绑定免费领样策略")
-	c.resp.Message = "成功添加发货信息"
+	c.resp.Message = "ok"
 	c.resp.Data = res
+	c.resp.Status = 20000
+	return
 }
 
 func (c CreateSecTaskLogistics) checkParam() error {

+ 63 - 61
handler/GetSecTaskList.go

@@ -1,61 +1,63 @@
-package handler
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-)
-
-func WrapGetSecTaskListHandler(ctx *gin.Context) {
-	handler := newGetSecTaskListHandler(ctx)
-	BaseRun(handler)
-}
-
-type GetSecTaskList struct {
-	ctx  *gin.Context
-	req  *http_model.GetSecTaskListRequest
-	resp *http_model.CommonResponse
-}
-
-func (c GetSecTaskList) getContext() *gin.Context {
-	return c.ctx
-}
-
-func (c GetSecTaskList) getResponse() interface{} {
-	return c.resp
-}
-
-func (c GetSecTaskList) getRequest() interface{} {
-	return c.req
-}
-
-func (c GetSecTaskList) run() {
-	data := http_model.GetSecTaskListRequest{}
-	data = *c.req
-	//auth := middleware.GetSessionAuth(c.ctx)
-	//enterpriseID := auth.EnterpriseID
-	res, err := service.SelectionTask.GetList(c.ctx, data)
-	if err != nil {
-		logrus.Errorf("[GetSecTaskList] call GetSecTaskList err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("GetSecTaskList fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "成功查询选品任务"
-	c.resp.Data = res
-}
-
-func (c GetSecTaskList) checkParam() error {
-	return nil
-}
-
-func newGetSecTaskListHandler(ctx *gin.Context) *GetSecTaskList {
-	return &GetSecTaskList{
-		ctx:  ctx,
-		req:  http_model.NewGetSecTaskListRequest(),
-		resp: http_model.NewGetSecTaskListResponse(),
-	}
-}
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapGetSecTaskListHandler(ctx *gin.Context) {
+	handler := newGetSecTaskListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetSecTaskList struct {
+	ctx  *gin.Context
+	req  *http_model.GetSecTaskListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetSecTaskList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetSecTaskList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetSecTaskList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetSecTaskList) run() {
+	data := http_model.GetSecTaskListRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.SelectionTask.GetList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSecTaskList] call GetSecTaskList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSecTaskList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询带货子任务"
+	c.resp.Data = res
+	c.resp.Status = 20000
+	return
+}
+
+func (c GetSecTaskList) checkParam() error {
+	return nil
+}
+
+func newGetSecTaskListHandler(ctx *gin.Context) *GetSecTaskList {
+	return &GetSecTaskList{
+		ctx:  ctx,
+		req:  http_model.NewGetSecTaskListRequest(),
+		resp: http_model.NewGetSecTaskListResponse(),
+	}
+}

+ 11 - 11
handler/PassSecTaskCoop.go

@@ -1,7 +1,6 @@
 package handler
 
 import (
-	"fmt"
 	"github.com/gin-gonic/gin"
 	"github.com/sirupsen/logrus"
 	"youngee_m_api/consts"
@@ -35,26 +34,27 @@ func (c PassSecTaskCoop) getRequest() interface{} {
 
 func (c PassSecTaskCoop) run() {
 	data := http_model.PassSecTaskCoopRequest{}
-
 	data = *c.req
-	//println("TaskIds", data.TaskIds)
 	//auth := middleware.GetSessionAuth(c.ctx)
 	//enterpriseID := auth.EnterpriseID
-
-	res, err := service.SelectionTask.PassCoop(c.ctx, data)
+	res, tag, err := service.SelectionTask.PassCoop(c.ctx, data)
 	if err != nil {
 		logrus.Errorf("[PassSecTaskCoop] call PassSecTaskCoop err:%+v\n", err)
 		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
 		logrus.Info("PassSecTaskCoop fail,req:%+v", c.req)
+		if tag == 1 {
+			c.resp.Message = err.Error()
+			c.resp.Status = 33000
+			return
+		}
+		c.resp.Message = err.Error()
+		c.resp.Status = 40000
 		return
 	}
-	println("开始为每个带货子任务绑定免费领样策略")
-	err1 := service.SelectionTask.UpdateStrategyId(c.ctx, data.SelectionId)
-	nerr := service.SelectionTask.UpdateStrategyNumBySelectionId(c.ctx, data.SelectionId)
-	fmt.Println(nerr, err1)
-	println("完成为每个带货子任务绑定免费领样策略")
-	c.resp.Message = "成功合作选品任务"
+	c.resp.Message = "ok"
 	c.resp.Data = res
+	c.resp.Status = 20000
+	return
 }
 
 func (c PassSecTaskCoop) checkParam() error {

+ 63 - 61
handler/RefuseSecTaskCoop.go

@@ -1,61 +1,63 @@
-package handler
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-)
-
-func WrapRefuseSecTaskCoopHandler(ctx *gin.Context) {
-	handler := newRefuseSecTaskCoopHandler(ctx)
-	BaseRun(handler)
-}
-
-type RefuseSecTaskCoop struct {
-	ctx  *gin.Context
-	req  *http_model.RefuseSecTaskCoopRequest
-	resp *http_model.CommonResponse
-}
-
-func (c RefuseSecTaskCoop) getContext() *gin.Context {
-	return c.ctx
-}
-
-func (c RefuseSecTaskCoop) getResponse() interface{} {
-	return c.resp
-}
-
-func (c RefuseSecTaskCoop) getRequest() interface{} {
-	return c.req
-}
-
-func (c RefuseSecTaskCoop) run() {
-	data := http_model.RefuseSecTaskCoopRequest{}
-	data = *c.req
-	//auth := middleware.GetSessionAuth(c.ctx)
-	//enterpriseID := auth.EnterpriseID
-	res, err := service.SelectionTask.RefuseCoop(c.ctx, data)
-	if err != nil {
-		logrus.Errorf("[RefuseSecTaskCoop] call RefuseSecTaskCoop err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("RefuseSecTaskCoop fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "成功拒绝选品任务"
-	c.resp.Data = res
-}
-
-func (c RefuseSecTaskCoop) checkParam() error {
-	return nil
-}
-
-func newRefuseSecTaskCoopHandler(ctx *gin.Context) *RefuseSecTaskCoop {
-	return &RefuseSecTaskCoop{
-		ctx:  ctx,
-		req:  http_model.NewRefuseSecTaskCoopRequest(),
-		resp: http_model.NewRefuseSecTaskCoopResponse(),
-	}
-}
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapRefuseSecTaskCoopHandler(ctx *gin.Context) {
+	handler := newRefuseSecTaskCoopHandler(ctx)
+	BaseRun(handler)
+}
+
+type RefuseSecTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.RefuseSecTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c RefuseSecTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c RefuseSecTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c RefuseSecTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c RefuseSecTaskCoop) run() {
+	data := http_model.RefuseSecTaskCoopRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.SelectionTask.RefuseCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[RefuseSecTaskCoop] call RefuseSecTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("RefuseSecTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "ok"
+	c.resp.Data = res
+	c.resp.Status = 20000
+	return
+}
+
+func (c RefuseSecTaskCoop) checkParam() error {
+	return nil
+}
+
+func newRefuseSecTaskCoopHandler(ctx *gin.Context) *RefuseSecTaskCoop {
+	return &RefuseSecTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewRefuseSecTaskCoopRequest(),
+		resp: http_model.NewRefuseSecTaskCoopResponse(),
+	}
+}

+ 12 - 17
handler/SettleSecTask.go

@@ -1,13 +1,8 @@
 package handler
 
 import (
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-
 	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
+	"youngee_m_api/model/http_model"
 )
 
 func WrapSettleSecTaskHandler(ctx *gin.Context) {
@@ -35,17 +30,17 @@ func (c SettleSecTask) getRequest() interface{} {
 
 func (c SettleSecTask) run() {
 	//enterpriseID := middleware.GetSessionAuth(c.ctx).EnterpriseID
-	data := http_model.SettleSecTaskRequest{}
-	data = *c.req
-	res, err := service.SelectionTask.Settle(c.ctx, data.EnterpriseId, data)
-	if err != nil {
-		logrus.Errorf("[SettleSecTask] call SettleSecTask err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("SettleSecTask fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "成功结算"
-	c.resp.Data = res
+	//data := http_model.SettleSecTaskRequest{}
+	//data = *c.req
+	//res, err := service.SelectionTask.Settle(c.ctx, data.EnterpriseId, data)
+	//if err != nil {
+	//	logrus.Errorf("[SettleSecTask] call SettleSecTask err:%+v\n", err)
+	//	util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+	//	logrus.Info("SettleSecTask fail,req:%+v", c.req)
+	//	return
+	//}
+	//c.resp.Message = "成功结算"
+	//c.resp.Data = res
 }
 
 func (c SettleSecTask) checkParam() error {

+ 62 - 60
handler/UpdateSecTaskLogistics.go

@@ -1,60 +1,62 @@
-package handler
-
-import (
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-)
-
-func WrapUpdateSecTaskLogisticsHandler(ctx *gin.Context) {
-	handler := newUpdateSecTaskLogisticsHandler(ctx)
-	BaseRun(handler)
-}
-
-type UpdateSecTaskLogistics struct {
-	ctx  *gin.Context
-	req  *http_model.UpdateSecTaskLogisticsRequest
-	resp *http_model.CommonResponse
-}
-
-func (c UpdateSecTaskLogistics) getContext() *gin.Context {
-	return c.ctx
-}
-
-func (c UpdateSecTaskLogistics) getResponse() interface{} {
-	return c.resp
-}
-
-func (c UpdateSecTaskLogistics) getRequest() interface{} {
-	return c.req
-}
-
-func (c UpdateSecTaskLogistics) run() {
-	data := http_model.UpdateSecTaskLogisticsRequest{}
-	data = *c.req
-	res, err := service.SecLogistics.Update(c.ctx, data)
-	if err != nil {
-		logrus.Errorf("[UpdateSecTaskLogistics] call UpdateSecTaskLogistics err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("UpdateSecTaskLogistics fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "成功添加发货信息"
-	c.resp.Data = res
-}
-
-func (c UpdateSecTaskLogistics) checkParam() error {
-	return nil
-}
-
-func newUpdateSecTaskLogisticsHandler(ctx *gin.Context) *UpdateSecTaskLogistics {
-	return &UpdateSecTaskLogistics{
-		ctx:  ctx,
-		req:  http_model.NewUpdateSecTaskLogisticsRequest(),
-		resp: http_model.NewUpdateSecTaskLogisticsResponse(),
-	}
-}
+package handler
+
+import (
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapUpdateSecTaskLogisticsHandler(ctx *gin.Context) {
+	handler := newUpdateSecTaskLogisticsHandler(ctx)
+	BaseRun(handler)
+}
+
+type UpdateSecTaskLogistics struct {
+	ctx  *gin.Context
+	req  *http_model.UpdateSecTaskLogisticsRequest
+	resp *http_model.CommonResponse
+}
+
+func (c UpdateSecTaskLogistics) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c UpdateSecTaskLogistics) getResponse() interface{} {
+	return c.resp
+}
+
+func (c UpdateSecTaskLogistics) getRequest() interface{} {
+	return c.req
+}
+
+func (c UpdateSecTaskLogistics) run() {
+	data := http_model.UpdateSecTaskLogisticsRequest{}
+	data = *c.req
+	res, err := service.SecLogistics.Update(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[UpdateSecTaskLogistics] call UpdateSecTaskLogistics err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("UpdateSecTaskLogistics fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "ok"
+	c.resp.Data = res
+	c.resp.Status = 20000
+	return
+}
+
+func (c UpdateSecTaskLogistics) checkParam() error {
+	return nil
+}
+
+func newUpdateSecTaskLogisticsHandler(ctx *gin.Context) *UpdateSecTaskLogistics {
+	return &UpdateSecTaskLogistics{
+		ctx:  ctx,
+		req:  http_model.NewUpdateSecTaskLogisticsRequest(),
+		resp: http_model.NewUpdateSecTaskLogisticsResponse(),
+	}
+}

+ 35 - 36
model/gorm_model/selection_info.go

@@ -8,42 +8,41 @@ type YounggeeSelectionInfo struct {
 	SelectionID       string     `gorm:"column:selection_id;primary_key"` // 选品项目id
 	SelectionName     string     `gorm:"column:selection_name"`           // 选品项目名称
 	EnterpriseID      string     `gorm:"column:enterprise_id"`            // 所属企业id
-	SubAccountID      int        `gorm:"column:sub_account_id;default:0;NOT NULL"`
-	ProductID         int        `gorm:"column:product_id"`          // 关联商品id
-	ContentType       int        `gorm:"column:content_type"`        // 内容形式,1代表图文,2代表视频
-	SelectionStatus   int        `gorm:"column:selection_status"`    // 选品项目状态,1-8分别代表创建中、待审核、审核通过、待支付、已支付、执行中、失效、已结案
-	TaskMode          int        `gorm:"column:task_mode"`           // 任务形式,1、2分别表示悬赏任务、纯佣带货
-	Platform          int        `gorm:"column:platform"`            // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
-	SampleMode        int        `gorm:"column:sample_mode"`         // 领样形式,1、2分别表示免费领样、无领样
-	ProductUrl        string     `gorm:"column:product_url"`         // 带货链接
-	SampleNum         int        `gorm:"column:sample_num"`          // 样品数量
-	RemainNum         int        `gorm:"column:remain_num"`          // 剩余数量
-	CommissionRate    string     `gorm:"column:commission_rate"`     // 佣金比例
-	EstimatedCost     string     `gorm:"column:estimated_cost"`      // 预估成本
-	TaskReward        string     `gorm:"column:task_reward"`         // 任务悬赏
-	SampleCondition   string     `gorm:"column:sample_condition"`    // 领样条件
-	RewardCondition   string     `gorm:"column:reward_condition"`    // 返现悬赏条件
-	SettlementAmount  string     `gorm:"column:settlement_amount"`   // 结算金额
-	TaskDdl           *time.Time `gorm:"column:task_ddl"`            // 招募截止时间
-	Detail            string     `gorm:"column:detail"`              // 卖点总结
-	ProductSnap       string     `gorm:"column:product_snap"`        // 商品信息快照
-	ProductPhotoSnap  string     `gorm:"column:product_photo_snap"`  // 商品图片快照
-	CreatedAt         *time.Time `gorm:"column:created_at"`          // 创建时间
-	UpdatedAt         *time.Time `gorm:"column:updated_at"`          // 修改时间
-	SubmitAt          *time.Time `gorm:"column:submit_at"`           // 提交审核时间
-	PassAt            *time.Time `gorm:"column:pass_at"`             // 审核通过时间
-	FailReason        int        `gorm:"column:fail_reason"`         // 失效原因,1、2分别表示逾期未支付、项目存在风险
-	PayAt             *time.Time `gorm:"column:pay_at"`              // 支付时间
-	FinishAt          *time.Time `gorm:"column:finish_at"`           // 结案时间
-	IsRead            int        `gorm:"column:is_read"`             // 是否已读
-	AutoTaskID        int        `gorm:"column:auto_task_id"`        // 定时任务id
-	AutoFailAt        *time.Time `gorm:"column:auto_fail_at"`        // 失效自动处理时间
-	Status            int        `gorm:"column:status"`              // 选品是否删除 2代表删除
-	EnrollNum         int        `gorm:"column:enroll_num"`          // 报名数量
-	ChooseNum         int        `gorm:"column:choose_num"`          // 已选数量
-	BeforeDeliveryNum int        `gorm:"column:before_delivery_num"` // 待发货数量
-	DeliveryNum       int        `gorm:"column:delivery_num"`        // 已发货数量
-	AfterDeliveryNum  int        `gorm:"column:after_delivery_num"`  // 已签收数量
+	SubAccountId      int        `gorm:"column:sub_account_id"`           // 子账号id
+	ProductID         int        `gorm:"column:product_id"`               // 关联商品id
+	ContentType       int        `gorm:"column:content_type"`             // 内容形式,1代表图文,2代表视频,3代表直播
+	SelectionStatus   int        `gorm:"column:selection_status"`         // 选品项目状态,1-8分别代表创建中、待审核、审核通过、待支付、已支付、执行中、失效、已结案
+	TaskMode          int        `gorm:"column:task_mode"`                // 任务形式,1、2分别表示悬赏任务、纯佣带货
+	Platform          int        `gorm:"column:platform"`                 // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	SampleMode        int        `gorm:"column:sample_mode"`              // 领样形式,1、2分别表示免费领样、垫付领样
+	ProductUrl        string     `gorm:"column:product_url"`              // 带货链接
+	SampleNum         int        `gorm:"column:sample_num"`               // 样品数量
+	RemainNum         int        `gorm:"column:remain_num"`               // 剩余数量
+	CommissionRate    float64    `gorm:"column:commission_rate"`          // 佣金比例
+	EstimatedCost     string     `gorm:"column:estimated_cost"`           // 预估成本
+	TaskReward        string     `gorm:"column:task_reward"`              // 任务悬赏
+	SampleCondition   string     `gorm:"column:sample_condition"`         // 领样条件
+	RewardCondition   string     `gorm:"column:reward_condition"`         // 返现悬赏条件
+	SettlementAmount  string     `gorm:"column:settlement_amount"`        // 结算金额
+	TaskDdl           *time.Time `gorm:"column:task_ddl"`                 // 招募截止时间
+	Detail            string     `gorm:"column:detail"`                   // 卖点总结
+	ProductSnap       string     `gorm:"column:product_snap"`             // 商品信息快照
+	ProductPhotoSnap  string     `gorm:"column:product_photo_snap"`       // 商品图片快照
+	CreatedAt         *time.Time `gorm:"column:created_at"`               // 创建时间
+	UpdatedAt         *time.Time `gorm:"column:updated_at"`               // 修改时间
+	SubmitAt          *time.Time `gorm:"column:submit_at"`                // 提交审核时间
+	PassAt            *time.Time `gorm:"column:pass_at"`                  // 审核通过时间
+	FailReason        int        `gorm:"column:fail_reason"`              // 失效原因,1、2分别表示逾期未支付、项目存在风险
+	PayAt             *time.Time `gorm:"column:pay_at"`                   // 支付时间
+	FinishAt          *time.Time `gorm:"column:finish_at"`                // 结案时间
+	IsRead            int        `gorm:"column:is_read"`                  // 是否已读
+	AutoTaskID        int        `gorm:"column:auto_task_id"`             // 定时任务id
+	AutoFailAt        *time.Time `gorm:"column:auto_fail_at"`             // 失效自动处理时间
+	EnrollNum         int        `gorm:"column:enroll_num"`               // 报名数量
+	ChooseNum         int        `gorm:"column:choose_num"`               // 已选数量
+	BeforeDeliveryNum int        `gorm:"column:before_delivery_num"`      // 待发货数量
+	DeliveryNum       int        `gorm:"column:delivery_num"`             // 已发货数量
+	AfterDeliveryNum  int        `gorm:"column:after_delivery_num"`       // 已收货数量
 }
 
 func (m *YounggeeSelectionInfo) TableName() string {

+ 48 - 39
model/gorm_model/selection_task_info.go

@@ -5,45 +5,54 @@ import (
 )
 
 type YounggeeSecTaskInfo struct {
-	ID                     int       `gorm:"column:id;primary_key"`                        // 递增id
-	TaskID                 string    `gorm:"column:task_id"`                               // 选品任务id
-	SelectionID            string    `gorm:"column:selection_id"`                          // 选品id
-	TalentID               string    `gorm:"column:talent_id"`                             // 达人id
-	AccountID              int       `gorm:"column:account_id"`                            // 账号id
-	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap"`             // 达人平台信息快照
-	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap"`             // 达人个人信息快照
-	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap"`                 // 收货地址快照
-	TaskReward             string    `gorm:"column:task_reward"`                           //  达人赏金
-	TalentPayment          string    `gorm:"column:talent_payment"`                        // 达人垫付金额
-	IsPayPayment           int       `gorm:"column:is_pay_payment"`                        // 企业是否返样品钱
-	IsPayReward            int       `gorm:"column:is_pay_reward"`                         // 企业是否结算悬赏
-	TaskMode               int       `gorm:"column:task_mode"`                             // 任务形式,1、2分别表示纯佣带货、悬赏任务
-	SampleMode             int       `gorm:"column:sample_mode"`                           // 领样形式,1-3分别表示免费领样、垫付买样、不提供样品
-	TaskStatus             int       `gorm:"column:task_status;default:1"`                 // 任务状态 1待选 2已选 3落选
-	TaskStage              int       `gorm:"column:task_stage"`                            // 任务阶段,详情见info_sec_task_stage表
-	CreateDate             time.Time `gorm:"column:create_date;default:CURRENT_TIMESTAMP"` // 创建时间
-	SelectDate             time.Time `gorm:"column:select_date"`                           // 反选时间
-	DeliveryDate           time.Time `gorm:"column:delivery_date"`                         // 发货时间
-	CompleteDate           time.Time `gorm:"column:complete_date"`                         // 结束时间
-	WithdrawDate           time.Time `gorm:"column:withdraw_date"`                         // 提现时间
-	CompleteStatus         int       `gorm:"column:complete_status;default:1"`             // 结束方式 1未结束 2正常结束 3反选失败
-	LogisticsStatus        int       `gorm:"column:logistics_status;default:1"`            // 发货状态 1 待发货 2已发货 3 已签收
-	AssignmentStatus       uint      `gorm:"column:assignment_status;default:1"`           // 作业上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	UpdateAt               time.Time `gorm:"column:update_at"`                             // 更新时间
-	WithdrawStatus         int       `gorm:"column:withdraw_status;default:1"`             // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
-	LeadTeamID             string    `gorm:"column:lead_team_id"`                          // 作为团长的young之团id,对应younggee_talent_team中的team_id字段
-	TeamID                 string    `gorm:"column:team_id"`                               // 作为团员的young之团id,对应younggee_talent_team中的team_id字段
-	TeamIncome             int       `gorm:"column:team_income"`                           // young之团团长现金收益
-	TeamPoint              int       `gorm:"column:team_point"`                            // young之团团长积分收益
-	SignedTime             time.Time `gorm:"column:signed_time"`                           // 快递签收时间
-	SaleNum                int       `gorm:"column:sale_num"`                              // 30天橱窗销量
-	FreeStrategyId         int       `gorm:"column:free_strategy_id"`                      // 免费领样策略id
-	ProductId              int       `gorm:"column:product_id"`                            // 商品id
-	SaleActual             int       `gorm:"column:sale_actual"`                           // 实际带货量
-	SaleNumAll             int       `gorm:"column:sale_num_all"`                          // 达人对此商品的全部销售量(大于1表示已出单)
-	FansNum                int       `gorm:"column:fans_num"`                              // 粉丝数
-	FreeStage              int       `gorm:"column:free_stage"`                            // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
-	RewardStage            int       `gorm:"column:reward_stage"`                          // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
+	ID                     int        `gorm:"column:id;primary_key"`              // 递增id
+	TaskID                 string     `gorm:"column:task_id"`                     // 选品任务id
+	SelectionID            string     `gorm:"column:selection_id"`                // 选品id
+	TalentID               string     `gorm:"column:talent_id"`                   // 达人id
+	AccountID              int        `gorm:"column:account_id"`                  // 账号id
+	TalentPlatformInfoSnap string     `gorm:"column:talent_platform_info_snap"`   // 达人平台信息快照
+	TalentPersonalInfoSnap string     `gorm:"column:talent_personal_info_snap"`   // 达人个人信息快照
+	TalentPostAddrSnap     string     `gorm:"column:talent_post_addr_snap"`       // 收货地址快照
+	TaskReward             string     `gorm:"column:task_reward"`                 //  达人赏金
+	TalentPayment          string     `gorm:"column:talent_payment"`              // 达人垫付金额
+	IsPayPayment           int        `gorm:"column:is_pay_payment"`              // 企业是否返样品钱
+	IsPayReward            int        `gorm:"column:is_pay_reward"`               // 企业是否结算悬赏
+	TaskMode               int        `gorm:"column:task_mode"`                   // 任务形式,1、2分别表示纯佣带货、悬赏任务
+	SampleMode             int        `gorm:"column:sample_mode"`                 // 领样形式,1-3分别表示免费领样、垫付买样、不提供样品
+	TaskStatus             int        `gorm:"column:task_status;default:1"`       // 任务状态 1待选 2已选 3落选
+	TaskStage              int        `gorm:"column:task_stage"`                  // 任务阶段,详情见info_sec_task_stage表
+	CreateDate             time.Time  `gorm:"column:create_date"`                 // 创建时间
+	SelectDate             time.Time  `gorm:"column:select_date"`                 // 反选时间
+	DeliveryDate           time.Time  `gorm:"column:delivery_date"`               // 发货时间
+	CompleteDate           time.Time  `gorm:"column:complete_date"`               // 结束时间
+	WithdrawDate           time.Time  `gorm:"column:withdraw_date"`               // 提现时间
+	CompleteStatus         int        `gorm:"column:complete_status;default:1"`   // 结束方式 1未结束 2正常结束 3反选失败
+	LogisticsStatus        int        `gorm:"column:logistics_status;default:1"`  // 发货状态 1 待发货 2已发货 3 已签收
+	AssignmentStatus       uint       `gorm:"column:assignment_status;default:1"` // 作业上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	UpdateAt               time.Time  `gorm:"column:update_at"`                   // 更新时间
+	WithdrawStatus         int        `gorm:"column:withdraw_status;default:1"`   // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
+	LeadTeamID             string     `gorm:"column:lead_team_id"`                // 作为团长的young之团id,对应younggee_talent_team中的team_id字段
+	TeamID                 string     `gorm:"column:team_id"`                     // 作为团员的young之团id,对应younggee_talent_team中的team_id字段
+	TeamIncome             int        `gorm:"column:team_income"`                 // young之团团长现金收益
+	TeamPoint              int        `gorm:"column:team_point"`                  // young之团团长积分收益
+	SignedTime             time.Time  `gorm:"column:signed_time"`                 // 快递签收时间
+	SaleNum                int        `gorm:"column:sale_num"`                    // 30天橱窗销量
+	FreeStrategyId         int        `gorm:"column:free_strategy_id"`            // 免费领样策略id
+	ProductId              int        `gorm:"column:product_id"`                  // 商品id
+	SaleActual             int        `gorm:"column:sale_actual"`                 // 实际带货量
+	SaleNumAll             int        `gorm:"column:sale_num_all"`                // 达人对此商品的全部销售量(大于1表示已出单)
+	FansNum                int        `gorm:"column:fans_num"`                    // 粉丝数
+	FreeStage              int        `gorm:"column:free_stage"`                  // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
+	RewardStage            int        `gorm:"column:reward_stage"`                // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
+	TaskDDL                *time.Time `gorm:"column:task_ddl" json:"task_ddl" comment:"和选品ddl保持一致"`
+	City                   string     `gorm:"column:city;size:255" json:"city" comment:"所在城市"`
+	OpenID                 string     `gorm:"column:open_id;size:255" json:"open_id" comment:"账号唯一标识"`
+	WxNum                  string     `gorm:"column:wx_num;size:255" json:"wx_num" comment:"微信号"`
+	BOperator              string     `gorm:"column:b_operator;size:255" json:"b_operator" comment:"ID"`
+	CreateLogisticUserType int        `gorm:"column:create_logistic_user_type"` // 创建快递单类型
+	CreateLogisticUserId   string     `gorm:"column:create_logistic_user_id"`   // 创建快递单ID
+	ChooseTalentUserId     string     `gorm:"column:choose_talent_user_id"`     // 同意/拒绝达人操作人ID
+	ChooseTalentUserType   int        `gorm:"column:choose_talent_user_type"`   // 同意/拒绝达人操作人类型,1商家,2子账号,3管理后台
 }
 
 func (m *YounggeeSecTaskInfo) TableName() string {

+ 2 - 1
model/http_model/CreateSecTaskLogisticsRequest.go

@@ -8,7 +8,8 @@ type CreateSecTaskLogisticsRequest struct {
 	ExplorestoreEndtime   string `json:"explorestore_endtime"`   // 线下探店-探店结束时间
 	ExplorestorePeriod    string `json:"explorestore_period"`    // 线下探店-探店持续时间
 	ThingsType            int    `json:"things_type"`            // 产品类型 1:实物, 3:线下探店
-	SelectionId           string `json:"selection_id"`           // 带货任务ID
+	UserId                int    `json:"user_id"`                // 用户ID
+	SubAccountId          int    `json:"sub_account_id"`         // 子账号ID
 }
 
 type CreateSecTaskLogisticsData struct {

+ 60 - 38
model/http_model/GetSecTaskListRequest.go

@@ -3,15 +3,19 @@ package http_model
 import "time"
 
 type GetSecTaskListRequest struct {
-	PageSize      int64  `json:"page_size"`
-	PageNum       int64  `json:"page_num"`
-	SelectionId   string `json:"selection_id"`
-	SecTaskStatus int    `json:"sec_task_status"`
-	SearchValue   string `json:"search_value"`
-	Type          int    `json:"type"` // 查询类型,1、2、3分别表示确定达人查询、发货管理查询、结算管理查询
-	TaskStage     int    `json:"sec_task_stage"`
-	FreeStage     int    `json:"free_stage"`   // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
-	RewardStage   int    `json:"reward_stage"` // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
+	PageSize      int64    `json:"page_size"`
+	PageNum       int64    `json:"page"`
+	SelectionId   string   `json:"selection_id"`
+	SecTaskStatus int      `json:"sec_task_status"`
+	SearchValue   string   `json:"search_value"`
+	Type          int      `json:"type"`           // 查询类型,1、2、3分别表示确定达人查询、发货管理查询、结算管理查询
+	TaskStage     int      `json:"sec_task_stage"` // 查询条件
+	FreeStage     int      `json:"free_stage"`     // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
+	RewardStage   int      `json:"reward_stage"`   // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
+	SaleNumMin    int      `json:"sale_num_min"`   // 30天橱窗销量区间最小值
+	SaleNumMax    int      `json:"sale_num_max"`   // 30天橱窗销量区间最大值
+	OrderBy       []string `json:"sort_field"`     // 排序条件
+	OrderDesc     []string `json:"sort_order"`     // 是否降序
 }
 
 type GetSecTaskListData struct {
@@ -20,35 +24,53 @@ type GetSecTaskListData struct {
 }
 
 type SecTaskInfo struct {
-	SecTaskId             string    `json:"sec_task_id"`
-	PlatformNickname      string    `json:"platform_nickname"`     // 帐号昵称
-	TalentId              string    `json:"talent_id"`             // 达人ID
-	FansCount             string    `json:"fans_count"`            // 粉丝数
-	HomePageCaptureUrl    string    `json:"home_page_capture_url"` // 主页截图链接
-	HomePageUrl           string    `json:"home_page_url"`         // 主页链接
-	RegionCode            int       `json:"region_code"`
-	DetailAddr            string    `json:"detail_addr"`            // 物流信息
-	CompanyName           string    `json:"company_name"`           // 物流公司
-	LogisticsNumber       string    `json:"logistics_number"`       // 物流单号
-	ExplorestoreStarttime time.Time `json:"explorestore_starttime"` // 线下探店-探店开始时间
-	ExplorestoreEndtime   time.Time `json:"explorestore_endtime"`   // 线下探店-探店结束时间
-	ExplorestorePeriod    string    `json:"explorestore_period"`    // 线下探店-探店持续时间
-	DataScreenshot        string    `json:"data_screenshot"`        // 数据截图
-	AssignmentLink        string    `json:"assignment_link"`        // 作业链接
-	ReturnMoney           string    `json:"return_money"`           // 返现
-	TaskReward            string    `json:"task_reward"`            // 悬赏金
-	IsPayReward           int       `json:"is_pay_reward"`          // 是否给悬赏金
-	IsPayPayment          int       `json:"is_pay_payment"`         // 是否返现
-	CreateDate            string    `json:"create_date"`            // 创建时间
-	SelectDate            string    `json:"select_date"`            // 反选时间
-	DeliveryDate          string    `json:"delivery_date"`          // 发货时间
-	CompleteDate          string    `json:"complete_date"`          // 结算时间
-	SignedTime            string    `json:"signed_time"`            // 快递签收时间
-	SaleNum               int       `json:"sale_num"`               // 30天橱窗销量
-	FreeStrategyId        int       `json:"free_strategy_id"`       // 免费领样策略id
-	ProductId             int       `json:"product_id"`             // 商品ID
-	FreeStage             int       `json:"free_stage"`             // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
-	RewardStage           int       `json:"reward_stage"`           // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
+	SelectionId            string    `json:"selection_id"`              // 带货任务ID
+	SecTaskId              string    `json:"sec_task_id"`               // 带货任务ID
+	PlatformNickname       string    `json:"platform_nickname"`         // 帐号昵称
+	TalentId               string    `json:"talent_id"`                 // 达人ID
+	TalentAvatar           string    `json:"talent_avatar"`             // 达人头像
+	KuaiShouUserId         string    `json:"kuai_shou_user_id"`         // 快手账号
+	KuaiShouUserGender     string    `json:"kuai_shou_user_gender"`     // 快手用户性别
+	KuaiShouUserLocation   string    `json:"kuai_shou_user_location"`   // 快手用户ip属地
+	FansCount              string    `json:"fans_count"`                // 粉丝数
+	EnterpriseId           string    `json:"enterprise_id"`             // 商家ID
+	SubAccountId           int       `json:"sub_account_id"`            // 商家子账号ID
+	HomePageCaptureUrl     string    `json:"home_page_capture_url"`     // 主页截图链接
+	HomePageUrl            string    `json:"home_page_url"`             // 主页链接
+	RegionCode             int       `json:"region_code"`               // 区域编码
+	DetailAddr             string    `json:"detail_addr"`               // 物流信息
+	CompanyName            string    `json:"company_name"`              // 物流公司
+	LogisticsNumber        string    `json:"logistics_number"`          // 物流单号
+	ExplorestoreStarttime  time.Time `json:"explorestore_starttime"`    // 线下探店-探店开始时间
+	ExplorestoreEndtime    time.Time `json:"explorestore_endtime"`      // 线下探店-探店结束时间
+	ExplorestorePeriod     string    `json:"explorestore_period"`       // 线下探店-探店持续时间
+	DataScreenshot         string    `json:"data_screenshot"`           // 数据截图
+	AssignmentLink         string    `json:"assignment_link"`           // 作业链接
+	ReturnMoney            string    `json:"return_money"`              // 返现
+	TaskReward             string    `json:"task_reward"`               // 悬赏金
+	IsPayReward            int       `json:"is_pay_reward"`             // 是否给悬赏金
+	IsPayPayment           int       `json:"is_pay_payment"`            // 是否返现
+	CreateDate             string    `json:"create_date"`               // 创建时间
+	SelectDate             string    `json:"select_date"`               // 反选时间
+	DeliveryDate           string    `json:"delivery_date"`             // 发货时间
+	CompleteDate           string    `json:"complete_date"`             // 结算时间
+	SignedTime             string    `json:"signed_time"`               // 快递签收时间
+	SaleNum                int       `json:"sale_num"`                  // 30天橱窗销量
+	FreeStrategyId         int       `json:"free_strategy_id"`          // 免费领样策略id
+	ProductId              int       `json:"product_id"`                // 商品ID
+	FreeStage              int       `json:"free_stage"`                // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
+	RewardStage            int       `json:"reward_stage"`              // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
+	CreateLogisticUserId   string    `json:"create_logistic_user_id"`   // 创建快递单用户ID
+	CreateLogisticUserType int       `json:"create_logistic_user_type"` // 创建快递单类型
+	CreateLogisticUserName string    `json:"create_logistic_user_name"` // 创建快递单用户名称
+	ChooseTalentUserId     string    `json:"choose_talent_user_id"`     // 同意/拒绝达人操作人ID
+	ChooseTalentUserType   int       `json:"choose_talent_user_type"`   // 同意/拒绝达人操作人类型,1商家,2子账号
+	ChooseTalentUserName   string    `json:"choose_talent_user_name"`   // 同意/拒绝达人操作人名称
+	TalentOrigin           string    `json:"talent_origin"`             // 达人来源,"公海"
+	SupplierType           int       `json:"supplier_type"`             // 服务商类型,0达人来自公海,1为个人服务商,2为企业服务商
+	TalentPhone            string    `json:"talent_phone"`              // 收货电话
+	TalentName             string    `json:"talent_name"`               // 达人昵称
+	TalentAddress          string    `json:"talent_address"`            // 达人收货地址
 }
 
 func NewGetSecTaskListRequest() *GetSecTaskListRequest {

+ 21 - 19
model/http_model/PassSecTaskCoopRequest.go

@@ -1,19 +1,21 @@
-package http_model
-
-type PassSecTaskCoopRequest struct {
-	SelectionId string   `json:"selection_id"`
-	TaskIds     []string `json:"task_ids"`
-}
-
-type PassSecTaskCoopData struct {
-}
-
-func NewPassSecTaskCoopRequest() *PassSecTaskCoopRequest {
-	return new(PassSecTaskCoopRequest)
-}
-
-func NewPassSecTaskCoopResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(PassSecTaskCoopData)
-	return resp
-}
+package http_model
+
+type PassSecTaskCoopRequest struct {
+	SelectionId  string   `json:"selection_id"`
+	TaskIds      []string `json:"task_ids"`
+	UserId       int      `json:"user_id"`
+	SubAccountId int      `json:"sub_account_id"`
+}
+
+type PassSecTaskCoopData struct {
+}
+
+func NewPassSecTaskCoopRequest() *PassSecTaskCoopRequest {
+	return new(PassSecTaskCoopRequest)
+}
+
+func NewPassSecTaskCoopResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(PassSecTaskCoopData)
+	return resp
+}

+ 20 - 18
model/http_model/RefuseSecTaskCoopRequest.go

@@ -1,18 +1,20 @@
-package http_model
-
-type RefuseSecTaskCoopRequest struct {
-	TaskIds []string `json:"task_ids"`
-}
-
-type RefuseSecTaskCoopData struct {
-}
-
-func NewRefuseSecTaskCoopRequest() *RefuseSecTaskCoopRequest {
-	return new(RefuseSecTaskCoopRequest)
-}
-
-func NewRefuseSecTaskCoopResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(RefuseSecTaskCoopData)
-	return resp
-}
+package http_model
+
+type RefuseSecTaskCoopRequest struct {
+	TaskIds      []string `json:"task_ids"`
+	UserId       int      `json:"user_id"`        // 用户ID
+	SubAccountId int      `json:"sub_account_id"` // 子账号ID
+}
+
+type RefuseSecTaskCoopData struct {
+}
+
+func NewRefuseSecTaskCoopRequest() *RefuseSecTaskCoopRequest {
+	return new(RefuseSecTaskCoopRequest)
+}
+
+func NewRefuseSecTaskCoopResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(RefuseSecTaskCoopData)
+	return resp
+}

+ 30 - 18
pack/sec_task_list.go

@@ -24,23 +24,35 @@ func GormSecTaskToHttpSecTask(secTask *gorm_model.YounggeeSecTaskInfo) *http_mod
 	regionCode, _ := strconv.Atoi(conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "region_code"), ""))
 	fmt.Println("粉丝数: ", strconv.Itoa(secTask.FansNum))
 	return &http_model.SecTaskInfo{
-		SecTaskId:          secTask.TaskID,
-		PlatformNickname:   conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
-		FansCount:          strconv.Itoa(secTask.FansNum),
-		HomePageCaptureUrl: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_capture_url"), ""),
-		HomePageUrl:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_url"), ""),
-		RegionCode:         regionCode,
-		DetailAddr:         conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "detail_addr"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "receiver_name"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "phone_number"), ""),
-		CreateDate:         conv.MustString(secTask.CreateDate, ""),
-		SelectDate:         conv.MustString(secTask.SelectDate, ""),
-		DeliveryDate:       conv.MustString(secTask.DeliveryDate, ""),
-		CompleteDate:       conv.MustString(secTask.CompleteDate, ""),
-		IsPayReward:        secTask.IsPayReward,
-		IsPayPayment:       secTask.IsPayPayment,
-		SignedTime:         conv.MustString(secTask.SignedTime, "0000"),
-		SaleNum:            secTask.SaleNum,
-		FreeStrategyId:     secTask.FreeStrategyId,
-		TalentId:           secTask.TalentID,
-		ProductId:          secTask.ProductId,
+		SelectionId:            secTask.SelectionID,
+		SecTaskId:              secTask.TaskID,
+		PlatformNickname:       conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		FansCount:              conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
+		HomePageCaptureUrl:     conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_capture_url"), ""),
+		HomePageUrl:            conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_url"), ""),
+		RegionCode:             regionCode,
+		DetailAddr:             conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "detail_addr"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "receiver_name"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "phone_number"), ""),
+		TalentPhone:            conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "phone_number"), ""),
+		TalentAddress:          conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "detail_addr"), ""),
+		TalentName:             conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "receiver_name"), ""),
+		CreateDate:             conv.MustString(secTask.CreateDate, "")[:19],
+		SelectDate:             conv.MustString(secTask.SelectDate, "")[:19],
+		DeliveryDate:           conv.MustString(secTask.DeliveryDate, "")[:19],
+		CompleteDate:           conv.MustString(secTask.CompleteDate, "")[:19],
+		IsPayReward:            secTask.IsPayReward,
+		IsPayPayment:           secTask.IsPayPayment,
+		SignedTime:             conv.MustString(secTask.SignedTime, "0000"),
+		SaleNum:                secTask.SaleNum,
+		FreeStrategyId:         secTask.FreeStrategyId,
+		TalentId:               secTask.TalentID,
+		ProductId:              secTask.ProductId,
+		CreateLogisticUserId:   secTask.CreateLogisticUserId,
+		CreateLogisticUserType: secTask.CreateLogisticUserType,
+		CreateLogisticUserName: secTask.CreateLogisticUserId,
+		ChooseTalentUserId:     secTask.ChooseTalentUserId,
+		ChooseTalentUserType:   secTask.ChooseTalentUserType,
+		ChooseTalentUserName:   secTask.ChooseTalentUserId,
+		SupplierType:           0,
+		TalentOrigin:           "公海",
 	}
 }

+ 20 - 0
route/init.go

@@ -25,6 +25,18 @@ func InitRoute(r *gin.Engine) {
 		println(str)
 		c.JSON(200, resp)
 	})
+
+	// 带货子任务
+	selectionTask := r.Group("/youngee/m/selection/task")
+	{
+		// selectionTask.Use(middleware.LoginAuthMiddleware)
+		selectionTask.POST("/list", handler.WrapGetSecTaskListHandler)                     // 查询选品的任务列表(确定、发货、结算)
+		selectionTask.POST("/coop/pass", handler.WrapPassSecTaskCoopHandler)               // 同意任务合作
+		selectionTask.POST("/coop/refuse", handler.WrapRefuseSecTaskCoopHandler)           // 拒绝任务合作
+		selectionTask.POST("/logistics/create", handler.WrapCreateSecTaskLogisticsHandler) // 上传物流信息
+		selectionTask.POST("/logistics/update", handler.WrapUpdateSecTaskLogisticsHandler) // 修改物流信息
+	}
+
 	m := r.Group("/youngee/m")
 	{
 		//m.Use(middleware.LoginAuthMiddleware)
@@ -182,6 +194,10 @@ func InitRoute(r *gin.Engine) {
 	{
 		f.Use(middleware.LoginAuthMiddleware)
 
+		f.POST("/balance/show", controller.FinanceController{}.ShowBalance)             // 余额管理——总金额、可用余额、冻结金额
+		f.POST("/balance/frozen/info", controller.FinanceController{}.FrozenInfoList)   // 余额管理——冻结记录
+		f.POST("/balance/frozen/count", controller.FinanceController{}.FrozenInfoCount) // 余额管理——冻结记录-角标
+
 		f.GET("/getRechargeValue", handler.WrapGetRechargeValueHandler)      //获取充值确认金额
 		f.POST("/getPreRechargelist", handler.WrapGetPreRechargeListHandler) //充值待确认、确认、失败列表
 		f.POST("/acceptraecharge", handler.WrapAcceptRechargeHandler)        //同意充值
@@ -209,6 +225,10 @@ func InitRoute(r *gin.Engine) {
 		f.GET("/withdrawvalue", handler.WarpGetWithdrawValueHandler)                   //累计提现金额
 		f.POST("/getTalentWithdrawlist", handler.WrapGetTalentWithdrawListHandler)     //达人待/已提现、已驳回列表
 
+		f.POST("/bill/selection/list", controller.BillController{}.SelectionBillList) // 账单查询-电商带货列表
+		f.POST("/bill/project/list", controller.BillController{}.ProjectBillList)     // 账单查询-品牌种草列表
+		f.POST("/bill/local/list", controller.BillController{}.LocalLifeBillList)     // 账单查询-本地生活列表
+
 		f.POST("/getInvoiveinfo", handler.WrapGetInvoiceInfoHandler) //查看开票信息
 		f.POST("/getbilllist", handler.WrapGetBillTaskListHandler)   //查看账单
 

+ 368 - 368
service/logistics.go

@@ -1,368 +1,368 @@
-package service
-
-import (
-	"context"
-	"fmt"
-	"time"
-	"youngee_m_api/db"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-
-	"github.com/caixw/lib.go/conv"
-
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-)
-
-var Logistics *logistics
-
-type logistics struct{}
-
-// Create 全流程物流信息表插入记录
-func (*logistics) Create(ctx context.Context, newLogistics http_model.CreateLogisticsRequest) (*http_model.CreateLogisticsData, error) {
-	ThingsType := newLogistics.ThingsType
-	StrategyID := newLogistics.StrategyID
-	Logistics := gorm_model.YoungeeTaskLogistics{
-		LogisticsID:           newLogistics.LogisticsID,
-		TaskID:                newLogistics.TaskID,
-		ThingsType:            int64(ThingsType),
-		ExplorestoreStarttime: time.Now(),
-		ExplorestoreEndtime:   time.Now(),
-		DeliveryTime:          time.Now(),
-	}
-	//fmt.Println("ThingsType:", ThingsType)
-	//实物
-	if ThingsType == 1 {
-		Logistics.CompanyName = newLogistics.CompanyName
-		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
-		Logistics.DeliveryTime = time.Now()
-	} else if ThingsType == 3 {
-		fmt.Println("开始时间:", newLogistics.ExplorestoreStarttime)
-		fmt.Println("结束时间:", newLogistics.ExplorestoreEndtime)
-		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
-		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
-		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
-		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
-	} else {
-		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
-	}
-
-	logisticsID, err := db.CreateLogistics(ctx, Logistics, StrategyID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateLogistics error,err:%+v", err)
-		return nil, err
-	}
-
-	projectId, err1 := db.GetProjectIdByTaskId(ctx, newLogistics.TaskID)
-	if err1 != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call GetProjectIdByTaskId error,err:%+v", err1)
-		return nil, err1
-	}
-
-	// 查询StrategyID 通过 StrategyID 和 projectId
-	RecruitStrategyId, err2 := db.GetRecruitStrategyIdByTS(ctx, *projectId, StrategyID)
-	if err2 != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call GetStrategyIDByTS error,err:%+v", err1)
-		return nil, err2
-	}
-
-	fmt.Println("RecruitStrategyId: ", *RecruitStrategyId)
-	// 修改招募策略中已签收数量
-	err = db.UpdateLogisticsNumber(ctx, *RecruitStrategyId, 1, -1, 0)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsNumber error,err:%+v", err)
-		return nil, err
-	}
-	// 修改task_info中发货状态
-	err = db.UpdateLogisticsStatus(ctx, Logistics.TaskID, 2)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsStatus error,err:%+v", err)
-		return nil, err
-	}
-
-	// 修改task_info中发货时间
-	err = db.UpdateLogisticsDate(ctx, Logistics.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
-		return nil, err
-	}
-	// 修改task_info中任务阶段
-	err = db.UpdateTaskStageByTaskId(ctx, Logistics.TaskID, 2, 5) //修改为待传初稿
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
-		return nil, err
-	}
-
-	// 对应招募策略待发货--,已发货++
-
-	// 记录任务日志-发货
-	err = db.CreateTaskLog(ctx, Logistics.TaskID, "发货时间")
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
-		return nil, err
-	}
-
-	err = db.CreateMessageByTaskId(ctx, 8, 2, Logistics.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
-		return nil, err
-	}
-
-	res := &http_model.CreateLogisticsData{
-		LogisticsID: *logisticsID,
-	}
-	return res, nil
-}
-
-func (l *logistics) CreateSpecialLogistics(ctx context.Context, newLogistics http_model.CreateSpecialLogisticsRequest) (*http_model.SpecialLogisticsData, error) {
-	ThingsType := newLogistics.ThingsType
-	Logistics := gorm_model.YoungeeTaskLogistics{
-		LogisticsID:           newLogistics.LogisticsID,
-		TaskID:                newLogistics.TaskID,
-		ThingsType:            int64(ThingsType),
-		ExplorestoreStarttime: time.Now(),
-		ExplorestoreEndtime:   time.Now(),
-		DeliveryTime:          time.Now(),
-	}
-	//实物
-	if ThingsType == 1 {
-		Logistics.CompanyName = newLogistics.CompanyName
-		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
-		Logistics.DeliveryTime = time.Now()
-	} else if ThingsType == 3 {
-		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
-		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
-		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
-		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
-	} else {
-		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
-	}
-	logisticsID, err := db.CreateLogistics(ctx, Logistics, 0)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateLogistics error,err:%+v", err)
-		return nil, err
-	}
-	// 修改task_info中发货时间
-	err = db.UpdateLogisticsDate(ctx, Logistics.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
-		return nil, err
-	}
-	// 修改task_info中发货状态
-	err = db.UpdateLogisticsStatus(ctx, Logistics.TaskID, 2)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsStatus error,err:%+v", err)
-		return nil, err
-	}
-	// 修改task_info中任务阶段
-	err = db.UpdateTaskStageByTaskId(ctx, Logistics.TaskID, 2, 5) //修改为待传初稿
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
-		return nil, err
-	}
-	// 记录任务日志-发货
-	err = db.CreateTaskLog(ctx, Logistics.TaskID, "发货时间")
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
-		return nil, err
-	}
-	err = db.CreateMessageByTaskId(ctx, 8, 2, Logistics.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
-		return nil, err
-	}
-	res := &http_model.SpecialLogisticsData{
-		LogisticsID: *logisticsID,
-	}
-	return res, nil
-}
-
-// 修改物流信息表
-func (*logistics) Update(ctx context.Context, newLogistics http_model.CreateLogisticsRequest) (*http_model.CreateLogisticsData, error) {
-	ThingsType := newLogistics.ThingsType
-	Logistics := gorm_model.YoungeeTaskLogistics{
-		LogisticsID:  newLogistics.LogisticsID,
-		TaskID:       newLogistics.TaskID,
-		ThingsType:   int64(ThingsType),
-		DeliveryTime: time.Now(),
-	}
-	//实物
-	if ThingsType == 1 {
-		Logistics.CompanyName = newLogistics.CompanyName
-		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
-	} else if ThingsType == 3 {
-		fmt.Println("开始时间:", newLogistics.ExplorestoreStarttime)
-		fmt.Println("结束时间:", newLogistics.ExplorestoreEndtime)
-		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
-		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
-		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
-		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
-	} else {
-		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
-	}
-	logisticsID, err := db.UpdateLogistics(ctx, Logistics)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogistics error,err:%+v", err)
-		return nil, err
-	}
-	res := &http_model.CreateLogisticsData{
-		LogisticsID: *logisticsID,
-	}
-	return res, nil
-}
-
-func (*logistics) UpdateSpecialLogistics(ctx context.Context, newLogistics http_model.CreateSpecialLogisticsRequest) (*http_model.SpecialLogisticsData, error) {
-	ThingsType := newLogistics.ThingsType
-	Logistics := gorm_model.YoungeeTaskLogistics{
-		LogisticsID:  newLogistics.LogisticsID,
-		TaskID:       newLogistics.TaskID,
-		ThingsType:   int64(ThingsType),
-		DeliveryTime: time.Now(),
-	}
-	//实物
-	if ThingsType == 1 {
-		Logistics.CompanyName = newLogistics.CompanyName
-		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
-	} else if ThingsType == 3 {
-		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
-		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
-		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
-		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
-	} else {
-		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
-	}
-	logisticsID, err := db.UpdateLogistics(ctx, Logistics)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogistics error,err:%+v", err)
-		return nil, err
-	}
-	res := &http_model.SpecialLogisticsData{
-		LogisticsID: *logisticsID,
-	}
-	return res, nil
-}
-
-// 签收
-func (*logistics) SignForReceipt(ctx *gin.Context, data http_model.SignForReceiptRequest) interface{} {
-	projectId, err1 := db.GetProjectIdByTaskId(ctx, data.TaskStrategyIds[0].TaskId)
-	if err1 != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call GetProjectIdByTaskId error,err:%+v", err1)
-		return err1
-	}
-	// 签收时更新任务阶段
-	project, err3 := db.GetProjectDetail(ctx, *projectId)
-	if err3 != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err3)
-		return err3
-	}
-	if project.ContentType == 1 {
-		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 9)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
-			return err
-		}
-	} else {
-		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 7)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
-			return err
-		}
-	}
-	for _, value := range data.TaskStrategyIds {
-		taskId := value.TaskId
-		strategyId := conv.MustInt64(value.StrategyId, 0)
-		err := db.UpdateLogisticsStatus(ctx, taskId, 3)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsStatus error,err:%+v", err)
-			return err
-		}
-
-		// 签收时间
-		err = db.SignForReceipt(ctx, taskId)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[project service] call SignForReceipt error,err:%+v", err)
-			return err
-		}
-
-		// 查询StrategyID 通过 StrategyID 和 projectId
-		StrategyID, err2 := db.GetRecruitStrategyIdByTS(ctx, *projectId, strategyId)
-		if err2 != nil {
-			logrus.WithContext(ctx).Errorf("[project service] call GetStrategyIDByTS error,err:%+v", err1)
-			return err2
-		}
-
-		// 修改招募策略中已签收数量
-		err = db.UpdateLogisticsNumber(ctx, *StrategyID, 0, 0, 1)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsNumber error,err:%+v", err)
-			return err
-		}
-
-		// 记录任务日志
-		err = db.CreateTaskLog(ctx, taskId, "签收时间")
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
-			return err
-		}
-		err = db.CreateMessageByTaskId(ctx, 9, 2, taskId)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
-			return err
-		}
-	}
-	return nil
-}
-
-func (l *logistics) SignForSpecialLogistic(ctx *gin.Context, logisticRequest http_model.SignForSpecialLogisticRequest) error {
-	projectId, err1 := db.GetProjectIdByTaskId(ctx, logisticRequest.TaskId)
-	if err1 != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call GetProjectIdByTaskId error,err:%+v", err1)
-		return err1
-	}
-	// 签收时更新任务阶段
-	project, err3 := db.GetProjectDetail(ctx, *projectId)
-	if err3 != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err3)
-		return err3
-	}
-	if project.ContentType == 1 {
-		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 9)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
-			return err
-		}
-	} else {
-		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 7)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
-			return err
-		}
-	}
-
-	taskId := logisticRequest.TaskId
-	err := db.UpdateLogisticsStatus(ctx, taskId, 3)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsStatus error,err:%+v", err)
-		return err
-	}
-
-	// 签收时间
-	err = db.SignForReceipt(ctx, taskId)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[project service] call SignForReceipt error,err:%+v", err)
-		return err
-	}
-
-	// 记录任务日志
-	err = db.CreateTaskLog(ctx, taskId, "签收时间")
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
-		return err
-	}
-	err = db.CreateMessageByTaskId(ctx, 9, 2, taskId)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
-		return err
-	}
-	return nil
-}
+package service
+
+import (
+	"context"
+	"fmt"
+	"time"
+	"youngee_m_api/db"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+
+	"github.com/caixw/lib.go/conv"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+var Logistics *logistics
+
+type logistics struct{}
+
+// Create 全流程物流信息表插入记录
+func (*logistics) Create(ctx context.Context, newLogistics http_model.CreateLogisticsRequest) (*http_model.CreateLogisticsData, error) {
+	ThingsType := newLogistics.ThingsType
+	StrategyID := newLogistics.StrategyID
+	Logistics := gorm_model.YoungeeTaskLogistics{
+		LogisticsID:           newLogistics.LogisticsID,
+		TaskID:                newLogistics.TaskID,
+		ThingsType:            int64(ThingsType),
+		ExplorestoreStarttime: time.Now(),
+		ExplorestoreEndtime:   time.Now(),
+		DeliveryTime:          time.Now(),
+	}
+	//fmt.Println("ThingsType:", ThingsType)
+	//实物
+	if ThingsType == 1 {
+		Logistics.CompanyName = newLogistics.CompanyName
+		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
+		Logistics.DeliveryTime = time.Now()
+	} else if ThingsType == 3 {
+		fmt.Println("开始时间:", newLogistics.ExplorestoreStarttime)
+		fmt.Println("结束时间:", newLogistics.ExplorestoreEndtime)
+		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
+		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
+		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
+		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
+	} else {
+		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
+	}
+
+	logisticsID, err := db.CreateLogistics(ctx, Logistics, StrategyID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateLogistics error,err:%+v", err)
+		return nil, err
+	}
+
+	projectId, err1 := db.GetProjectIdByTaskId(ctx, newLogistics.TaskID)
+	if err1 != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetProjectIdByTaskId error,err:%+v", err1)
+		return nil, err1
+	}
+
+	// 查询StrategyID 通过 StrategyID 和 projectId
+	RecruitStrategyId, err2 := db.GetRecruitStrategyIdByTS(ctx, *projectId, StrategyID)
+	if err2 != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetStrategyIDByTS error,err:%+v", err1)
+		return nil, err2
+	}
+
+	fmt.Println("RecruitStrategyId: ", *RecruitStrategyId)
+	// 修改招募策略中已签收数量
+	err = db.UpdateLogisticsNumber(ctx, *RecruitStrategyId, 1, -1, 0)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsNumber error,err:%+v", err)
+		return nil, err
+	}
+	// 修改task_info中发货状态
+	err = db.UpdateLogisticsStatus(ctx, Logistics.TaskID, 2)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsStatus error,err:%+v", err)
+		return nil, err
+	}
+
+	// 修改task_info中发货时间
+	err = db.UpdateLogisticsDate(ctx, Logistics.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
+		return nil, err
+	}
+	// 修改task_info中任务阶段
+	err = db.UpdateTaskStageByTaskId(ctx, Logistics.TaskID, 2, 5) //修改为待传初稿
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
+		return nil, err
+	}
+
+	// 对应招募策略待发货--,已发货++
+
+	// 记录任务日志-发货
+	err = db.CreateTaskLog(ctx, Logistics.TaskID, "发货时间")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
+
+	err = db.CreateMessageByTaskId(ctx, 8, 2, Logistics.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
+		return nil, err
+	}
+
+	res := &http_model.CreateLogisticsData{
+		LogisticsID: *logisticsID,
+	}
+	return res, nil
+}
+
+func (l *logistics) CreateSpecialLogistics(ctx context.Context, newLogistics http_model.CreateSpecialLogisticsRequest) (*http_model.SpecialLogisticsData, error) {
+	ThingsType := newLogistics.ThingsType
+	Logistics := gorm_model.YoungeeTaskLogistics{
+		LogisticsID:           newLogistics.LogisticsID,
+		TaskID:                newLogistics.TaskID,
+		ThingsType:            int64(ThingsType),
+		ExplorestoreStarttime: time.Now(),
+		ExplorestoreEndtime:   time.Now(),
+		DeliveryTime:          time.Now(),
+	}
+	//实物
+	if ThingsType == 1 {
+		Logistics.CompanyName = newLogistics.CompanyName
+		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
+		Logistics.DeliveryTime = time.Now()
+	} else if ThingsType == 3 {
+		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
+		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
+		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
+		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
+	} else {
+		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
+	}
+	logisticsID, err := db.CreateLogistics(ctx, Logistics, 0)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateLogistics error,err:%+v", err)
+		return nil, err
+	}
+	// 修改task_info中发货时间
+	err = db.UpdateLogisticsDate(ctx, Logistics.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
+		return nil, err
+	}
+	// 修改task_info中发货状态
+	err = db.UpdateLogisticsStatus(ctx, Logistics.TaskID, 2)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsStatus error,err:%+v", err)
+		return nil, err
+	}
+	// 修改task_info中任务阶段
+	err = db.UpdateTaskStageByTaskId(ctx, Logistics.TaskID, 2, 5) //修改为待传初稿
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogisticsDate error,err:%+v", err)
+		return nil, err
+	}
+	// 记录任务日志-发货
+	err = db.CreateTaskLog(ctx, Logistics.TaskID, "发货时间")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
+	err = db.CreateMessageByTaskId(ctx, 8, 2, Logistics.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
+		return nil, err
+	}
+	res := &http_model.SpecialLogisticsData{
+		LogisticsID: *logisticsID,
+	}
+	return res, nil
+}
+
+// 修改物流信息表
+func (*logistics) Update(ctx context.Context, newLogistics http_model.CreateLogisticsRequest) (*http_model.CreateLogisticsData, error) {
+	ThingsType := newLogistics.ThingsType
+	Logistics := gorm_model.YoungeeTaskLogistics{
+		LogisticsID:  newLogistics.LogisticsID,
+		TaskID:       newLogistics.TaskID,
+		ThingsType:   int64(ThingsType),
+		DeliveryTime: time.Now(),
+	}
+	//实物
+	if ThingsType == 1 {
+		Logistics.CompanyName = newLogistics.CompanyName
+		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
+	} else if ThingsType == 3 {
+		fmt.Println("开始时间:", newLogistics.ExplorestoreStarttime)
+		fmt.Println("结束时间:", newLogistics.ExplorestoreEndtime)
+		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
+		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
+		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
+		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
+	} else {
+		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
+	}
+	logisticsID, err := db.UpdateLogistics(ctx, Logistics)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogistics error,err:%+v", err)
+		return nil, err
+	}
+	res := &http_model.CreateLogisticsData{
+		LogisticsID: *logisticsID,
+	}
+	return res, nil
+}
+
+func (*logistics) UpdateSpecialLogistics(ctx context.Context, newLogistics http_model.CreateSpecialLogisticsRequest) (*http_model.SpecialLogisticsData, error) {
+	ThingsType := newLogistics.ThingsType
+	Logistics := gorm_model.YoungeeTaskLogistics{
+		LogisticsID:  newLogistics.LogisticsID,
+		TaskID:       newLogistics.TaskID,
+		ThingsType:   int64(ThingsType),
+		DeliveryTime: time.Now(),
+	}
+	//实物
+	if ThingsType == 1 {
+		Logistics.CompanyName = newLogistics.CompanyName
+		Logistics.LogisticsNumber = newLogistics.LogisticsNumber
+	} else if ThingsType == 3 {
+		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreStarttime, time.Local)
+		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", newLogistics.ExplorestoreEndtime, time.Local)
+		Logistics.ExplorestoreStarttime = ExplorestoreStarttime
+		Logistics.ExplorestoreEndtime = ExplorestoreEndtime
+	} else {
+		Logistics.CouponCodeInformation = newLogistics.CouponCodeInformation
+	}
+	logisticsID, err := db.UpdateLogistics(ctx, Logistics)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call UpdateLogistics error,err:%+v", err)
+		return nil, err
+	}
+	res := &http_model.SpecialLogisticsData{
+		LogisticsID: *logisticsID,
+	}
+	return res, nil
+}
+
+// 签收
+func (*logistics) SignForReceipt(ctx *gin.Context, data http_model.SignForReceiptRequest) interface{} {
+	projectId, err1 := db.GetProjectIdByTaskId(ctx, data.TaskStrategyIds[0].TaskId)
+	if err1 != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetProjectIdByTaskId error,err:%+v", err1)
+		return err1
+	}
+	// 签收时更新任务阶段
+	project, err3 := db.GetProjectDetail(ctx, *projectId)
+	if err3 != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err3)
+		return err3
+	}
+	if project.ContentType == 1 {
+		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 9)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
+			return err
+		}
+	} else {
+		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 7)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
+			return err
+		}
+	}
+	for _, value := range data.TaskStrategyIds {
+		taskId := value.TaskId
+		strategyId := conv.MustInt64(value.StrategyId, 0)
+		err := db.UpdateLogisticsStatus(ctx, taskId, 3)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsStatus error,err:%+v", err)
+			return err
+		}
+
+		// 签收时间
+		err = db.SignForReceipt(ctx, taskId)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[project service] call SignForReceipt error,err:%+v", err)
+			return err
+		}
+
+		// 查询StrategyID 通过 StrategyID 和 projectId
+		StrategyID, err2 := db.GetRecruitStrategyIdByTS(ctx, *projectId, strategyId)
+		if err2 != nil {
+			logrus.WithContext(ctx).Errorf("[project service] call GetStrategyIDByTS error,err:%+v", err1)
+			return err2
+		}
+
+		// 修改招募策略中已签收数量
+		err = db.UpdateLogisticsNumber(ctx, *StrategyID, 0, 0, 1)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsNumber error,err:%+v", err)
+			return err
+		}
+
+		// 记录任务日志
+		err = db.CreateTaskLog(ctx, taskId, "签收时间")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
+			return err
+		}
+		err = db.CreateMessageByTaskId(ctx, 9, 2, taskId)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
+			return err
+		}
+	}
+	return nil
+}
+
+func (l *logistics) SignForSpecialLogistic(ctx *gin.Context, logisticRequest http_model.SignForSpecialLogisticRequest) error {
+	projectId, err1 := db.GetProjectIdByTaskId(ctx, logisticRequest.TaskId)
+	if err1 != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetProjectIdByTaskId error,err:%+v", err1)
+		return err1
+	}
+	// 签收时更新任务阶段
+	project, err3 := db.GetProjectDetail(ctx, *projectId)
+	if err3 != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err3)
+		return err3
+	}
+	if project.ContentType == 1 {
+		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 9)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
+			return err
+		}
+	} else {
+		err := db.UpdateTaskStageByProjectId(ctx, *projectId, 2, 7)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
+			return err
+		}
+	}
+
+	taskId := logisticRequest.TaskId
+	err := db.UpdateLogisticsStatus(ctx, taskId, 3)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsStatus error,err:%+v", err)
+		return err
+	}
+
+	// 签收时间
+	err = db.SignForReceipt(ctx, taskId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call SignForReceipt error,err:%+v", err)
+		return err
+	}
+
+	// 记录任务日志
+	err = db.CreateTaskLog(ctx, taskId, "签收时间")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
+		return err
+	}
+	err = db.CreateMessageByTaskId(ctx, 9, 2, taskId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateMessageByTaskId error,err:%+v", err)
+		return err
+	}
+	return nil
+}

+ 200 - 210
service/sec_task.go

@@ -2,13 +2,10 @@ package service
 
 import (
 	"context"
-	"encoding/json"
-	"errors"
 	"fmt"
 	"github.com/issue9/conv"
 	"github.com/lin-jim-leon/kuaishou"
 	"github.com/sirupsen/logrus"
-	"strconv"
 	"time"
 	"youngee_m_api/db"
 	"youngee_m_api/model/gorm_model"
@@ -26,14 +23,11 @@ func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTask
 	// younggee_assignment_info:数据截图、作业链接
 	// selection_info: 返现金额、悬赏金额
 	// 1. 根据选品任务阶段、账号昵称or任务id查询任务基本信息(包括任务id、账号昵称、粉丝数、主页截图、主页链接、申请时间)
-	fmt.Println("查找信息:", request.SelectionId, request.TaskStage)
-	secTaskList, total, err := db.GetSecTaskList(ctx, request.SelectionId, request.TaskStage, request.SearchValue, request.PageSize, request.PageNum)
-	fmt.Println("查找报错信息:", err)
+	secTaskList, total, err := db.GetSecTaskList(ctx, request.SelectionId, request.SecTaskStatus, request.SearchValue, request.SaleNumMin, request.SaleNumMax, request.PageSize, request.PageNum, request.OrderBy, request.OrderDesc)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskList error,err:%+v", err)
 		return nil, err
 	}
-	fmt.Println("查找完成:", total)
 
 	// 2. 根据不同查询类型查询补充信息
 	switch request.Type {
@@ -41,16 +35,14 @@ func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTask
 		// 确定达人不需要额外信息
 		break
 	case 2: // 发货管理查询 youngee_task_logistics
-		// 发货管理根据任务阶段和商品类型查询物流信息
+		//发货管理根据任务阶段和商品类型查询物流信息
 		// 查询商品类型
-		product, err := db.GetProductType(ctx, request.SelectionId)
-		fmt.Println("product: ", product)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetAllSelection error,err:%+v", err)
-			return nil, err
-		}
-
-		secTaskList, err = db.GetSecTaskLogisticsList(ctx, secTaskList, request.TaskStage, *product)
+		//product, err := db.GetProductType(ctx, request.SelectionId)
+		//if err != nil {
+		//	logrus.WithContext(ctx).Errorf("[sectask_service service] call GetAllSelection error,err:%+v", err)
+		//	return nil, err
+		//}
+		secTaskList, err = db.GetSecTaskLogisticsList(ctx, secTaskList, request.SecTaskStatus)
 		if err != nil {
 			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskLogisticsList error,err:%+v", err)
 			return nil, err
@@ -75,22 +67,24 @@ func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTask
 	return &selectionListData, nil
 }
 
-func (*selectionTask) PassCoop(ctx context.Context, request http_model.PassSecTaskCoopRequest) (*http_model.PassSecTaskCoopData, error) {
-
-	_, err := db.PassSecTaskCoop(ctx, request.SelectionId, request.TaskIds)
+func (*selectionTask) PassCoop(ctx context.Context, request http_model.PassSecTaskCoopRequest) (*http_model.PassSecTaskCoopData, int, error) {
+	tag, err := db.PassSecTaskCoop(ctx, request.SelectionId, request.TaskIds, request.UserId, request.SubAccountId)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[sectask_service service] call PassCoop error,err:%+v", err)
-		return nil, err
+		if tag == true {
+			return nil, 1, err
+		}
+		return nil, 2, err
 	}
 
 	selectionListData := http_model.PassSecTaskCoopData{}
 
-	return &selectionListData, nil
+	return &selectionListData, 0, nil
 }
 
 func (*selectionTask) RefuseCoop(ctx context.Context, request http_model.RefuseSecTaskCoopRequest) (*http_model.RefuseSecTaskCoopData, error) {
 
-	_, err := db.RefuseSecTaskCoop(ctx, request.TaskIds)
+	_, err := db.RefuseSecTaskCoop(ctx, request.TaskIds, request.UserId, request.SubAccountId)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[sectask_service service] call RefuseCoop error,err:%+v", err)
 		return nil, err
@@ -251,10 +245,7 @@ func (*selectionTask) Settle(ctx context.Context, entersizeId string, request ht
 // UpdateStrategyId 为带货子任务匹配满足要求的免费领样策略
 func (*selectionTask) UpdateStrategyId(ctx context.Context, selectionId string) error {
 	var taskStage int = 11
-	var SearchValue = ""
-	var PageSize = int64(0)
-	var PageNum = int64(0)
-	secTaskList, total, err := db.GetSecTaskList(ctx, selectionId, taskStage, SearchValue, PageSize, PageNum)
+	secTaskList, total, err := db.GetAllSecTaskList(ctx, selectionId, taskStage)
 	fmt.Println("此选品的带货子任务数量: ", total)
 	FreeStrategys, err := db.GetFreeStrategyBySelectionId(ctx, selectionId)
 	for i, _ := range FreeStrategys {
@@ -287,13 +278,15 @@ func (*selectionTask) UpdateStrategyId(ctx context.Context, selectionId string)
 		}
 		for j, _ := range secTaskList {
 			var fans int
-			fans, err = strconv.Atoi(secTaskList[j].FansCount)
+			fans = secTaskList[j].FansNum
 			var sale int64
 			sale = int64(secTaskList[j].SaleNum)
 			if fans <= interval[1] && fans >= interval[0] && sale >= sale_num {
 				secTaskList[j].FreeStrategyId = int(strate_id)
-				err := db.UpdataFreeStratrgyId(ctx, secTaskList[j].SecTaskId, secTaskList[j].FreeStrategyId)
-				println("Update: ", err)
+				updateErr := db.UpdataFreeStratrgyId(ctx, secTaskList[j].TaskID, secTaskList[j].FreeStrategyId)
+				if updateErr != nil {
+					return updateErr
+				}
 			}
 		}
 	}
@@ -353,9 +346,6 @@ func (*selectionTask) UpdateActualNumBySelectionId(ctx context.Context, selectio
 	// 1. 预处理
 	// 1.1. 根据selectionID和task_stage筛选出所有满足条件的子任务
 	var SecTaskStatus = 11
-	var SearchValue = ""
-	var PageSize = int64(0)
-	var PageNum = int64(0)
 	var AppKey string = "ks651333097154138217"
 	var SignSecret string = "bf6393dce0a2b669ee348bebb837b0da"
 	var cpsOrderStatus int = 0
@@ -365,7 +355,7 @@ func (*selectionTask) UpdateActualNumBySelectionId(ctx context.Context, selectio
 	var pcursor = ""
 	// var sale_num_all = 0
 
-	secTaskList, total, err := db.GetSecTaskList(ctx, selectionId, SecTaskStatus, SearchValue, PageSize, PageNum)
+	secTaskList, total, err := db.GetAllSecTaskList(ctx, selectionId, SecTaskStatus)
 	if err != nil {
 		return err
 	}
@@ -436,7 +426,7 @@ func (*selectionTask) UpdateActualNumBySelectionId(ctx context.Context, selectio
 		}
 
 		updateData := gorm_model.YounggeeSecTaskInfo{
-			TaskID:     secTaskList[i].SecTaskId,
+			TaskID:     secTaskList[i].TaskID,
 			SaleActual: actual_num,
 			SaleNumAll: actual_num,
 		}
@@ -447,179 +437,179 @@ func (*selectionTask) UpdateActualNumBySelectionId(ctx context.Context, selectio
 }
 
 // Settle 结算
-func (*selectionTask) Settle(ctx context.Context, entersizeId string, request http_model.SettleSecTaskRequest) (*http_model.SettleSecTaskData, error) {
-	// 1. 解析request data
-	//var returnMoney float64 = 0.0
-	//var rewardMoney float64 = 0.0
-	payMoney, err := strconv.ParseFloat(request.TotalPayMoney, 64)
-	fmt.Println("待支付金额: ", payMoney)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
-		return nil, err
-	}
-	// 2. 校验:任务是否正常(处于待结算阶段);企业账户可用余额是否充足;若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
-	// 1) 校验企业账户余额是否充足
-	entersize, err := db.GetEnterpriseByEnterpriseID(ctx, entersizeId)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
-		return nil, err
-	}
-	if entersize.AvailableBalance < payMoney {
-		return nil, errors.New("账户余额不足")
-	}
-	fmt.Println("余额充足")
-	// 2) 若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
-	selection, err := db.GetSelectionById(ctx, request.SelectionID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSelectionById error,err:%+v", err)
-		return nil, err
-	}
-	/*
-		if selection.SampleMode != 2 && request.IsReturnMoney == 1 {
-			return nil, errors.New("免费领养任务不能返样品钱")
-		}
-	*/
-	if selection.TaskMode != 1 && request.IsPayReward == 1 {
-		return nil, errors.New("非悬赏任务不能支付悬赏")
-	}
-	fmt.Println("是悬赏任务")
-	// 3) 校验任务是否处于待结算阶段
-	secTask, err := db.GetSecTaskById(ctx, request.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskById error,err:%+v", err)
-		return nil, err
-	}
-	/*
-		if secTask.TaskStage != 9 && secTask.TaskStatus != 2 {
-			return nil, errors.New("该任务暂不可结算")
-		}
-	*/
-	if secTask.RewardStage != 1 && secTask.TaskStatus != 2 {
-		return nil, errors.New("该任务暂不可结算")
-	}
-
-	fmt.Println("可结算")
-
-	var product gorm_model.YounggeeProduct
-	if err = json.Unmarshal([]byte(selection.ProductSnap), &product); err != nil {
-		fmt.Println("Error:", err)
-		return nil, err
-	}
-	// 4) 校验结算金额计算是否正确
-	/*
-		if request.IsReturnMoney == 1 {
-		returnMoney = product.ProductPrice
-		}
-		if request.IsPayReward == 1 {
-		rewardMoney, err = strconv.ParseFloat(selection.TaskReward, 64)
-		if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
-		return nil, err
-		}
-		}
-		println("payMoney: ", payMoney)
-		println("rewardMoney+returnMoney: ", rewardMoney+returnMoney)
-		if rewardMoney+returnMoney != payMoney {
-		return nil, errors.New("结算金额有误")
-		}
-	*/
-
-	// 3. 更新选品结算金额
-	_, err = db.UpdateSelectionSettleMoney(ctx, selection.SelectionID, payMoney)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSelectionSettleMoney error,err:%+v", err)
-		return nil, err
-	}
-
-	fmt.Println("已结算")
-
-	// 4. 更新选品任务阶段
-	updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
-		TaskID:           request.TaskID,
-		TaskStage:        10,
-		RewardStage:      2,
-		AssignmentStatus: 5,
-		IsPayReward:      request.IsPayReward,
-		IsPayPayment:     request.IsReturnMoney,
-		CompleteDate:     time.Now(),
-	}
-	_, err = db.UpdateSecTask(ctx, updateSecTaskData)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSecTask error,err:%+v", err)
-		return nil, err
-	}
-
-	// 5. 添加任务日志和达人消息
-	err = db.CreateTaskLog(ctx, request.TaskID, "结算时间")
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateTaskLog error,err:%+v", err)
-		return nil, err
-	}
-
-	err = db.CreateMessageBySecTaskId(ctx, 5, 1, request.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateMessageBySecTaskId error,err:%+v", err)
-		return nil, err
-	}
-
-	// 6. 创建选品收益记录
-	// 返现收益
-	/*
-		t := time.Now()
-		if request.IsReturnMoney == 1 {
-			income := gorm_model.YounggeeTalentIncome{
-				TalentID:       secTask.TalentID,
-				SelectionID:    secTask.SelectionID,
-				SectaskID:      secTask.TaskID,
-				BrandName:      product.BrandName,
-				TaskName:       selection.SelectionName,
-				Income:         strconv.FormatFloat(returnMoney, 'f', 10, 32),
-				IncomeType:     1,
-				WithdrawStatus: 1,
-				IncomeAt:       &t,
-				WithdrawAt:     nil,
-			}
-			err = db.CreateIncome(ctx, income, nil)
-			if err != nil {
-				logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
-				return nil, err
-			}
-		}
-	*/
-	// 悬赏收益
-	t := time.Now()
-	if request.IsPayReward == 1 {
-		income := gorm_model.YounggeeTalentIncome{
-			TalentID:       secTask.TalentID,
-			SelectionID:    secTask.SelectionID,
-			SectaskID:      secTask.TaskID,
-			BrandName:      product.BrandName,
-			TaskName:       selection.SelectionName,
-			Income:         strconv.FormatFloat(payMoney, 'f', 10, 32),
-			IncomeType:     1,
-			WithdrawStatus: 1,
-			IncomeAt:       &t,
-			WithdrawAt:     nil,
-		}
-		err = db.CreateIncome(ctx, income, nil)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
-			return nil, err
-		}
-	}
-
-	fmt.Println("成功写入达人信息")
-
-	// 7. 若有young之团存在,则为young之团创建收益
-
-	settleSecTaskData := http_model.SettleSecTaskData{}
-
-	// 8. 统计
-	println("开始为每个带货子任务绑定免费领样策略")
-	err1 := SelectionTask.UpdateStrategyId(ctx, request.SelectionID)
-	nerr := SelectionTask.UpdateStrategyNumBySelectionId(ctx, request.SelectionID)
-	fmt.Println(nerr, err1)
-	println("完成为每个带货子任务绑定免费领样策略")
-
-	return &settleSecTaskData, nil
-}
+// func (*selectionTask) Settle(ctx context.Context, entersizeId string, request http_model.SettleSecTaskRequest) (*http_model.SettleSecTaskData, error) {
+// 	// 1. 解析request data
+// 	//var returnMoney float64 = 0.0
+// 	//var rewardMoney float64 = 0.0
+// 	payMoney, err := strconv.ParseFloat(request.TotalPayMoney, 64)
+// 	fmt.Println("待支付金额: ", payMoney)
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
+// 		return nil, err
+// 	}
+// 	// 2. 校验:任务是否正常(处于待结算阶段);企业账户可用余额是否充足;若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
+// 	// 1) 校验企业账户余额是否充足
+// 	entersize, err := db.GetEnterpriseByEnterpriseID(ctx, entersizeId)
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
+// 		return nil, err
+// 	}
+// 	if entersize.AvailableBalance < payMoney {
+// 		return nil, errors.New("账户余额不足")
+// 	}
+// 	fmt.Println("余额充足")
+// 	// 2) 若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
+// 	selection, err := db.GetSelectionById(ctx, request.SelectionID)
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSelectionById error,err:%+v", err)
+// 		return nil, err
+// 	}
+// 	/*
+// 		if selection.SampleMode != 2 && request.IsReturnMoney == 1 {
+// 			return nil, errors.New("免费领养任务不能返样品钱")
+// 		}
+// 	*/
+// 	if selection.TaskMode != 1 && request.IsPayReward == 1 {
+// 		return nil, errors.New("非悬赏任务不能支付悬赏")
+// 	}
+// 	fmt.Println("是悬赏任务")
+// 	// 3) 校验任务是否处于待结算阶段
+// 	secTask, err := db.GetSecTaskById(ctx, request.TaskID)
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskById error,err:%+v", err)
+// 		return nil, err
+// 	}
+// 	/*
+// 		if secTask.TaskStage != 9 && secTask.TaskStatus != 2 {
+// 			return nil, errors.New("该任务暂不可结算")
+// 		}
+// 	*/
+// 	if secTask.RewardStage != 1 && secTask.TaskStatus != 2 {
+// 		return nil, errors.New("该任务暂不可结算")
+// 	}
+//
+// 	fmt.Println("可结算")
+//
+// 	var product gorm_model.YounggeeProduct
+// 	if err = json.Unmarshal([]byte(selection.ProductSnap), &product); err != nil {
+// 		fmt.Println("Error:", err)
+// 		return nil, err
+// 	}
+// 	// 4) 校验结算金额计算是否正确
+// 	/*
+// 		if request.IsReturnMoney == 1 {
+// 		returnMoney = product.ProductPrice
+// 		}
+// 		if request.IsPayReward == 1 {
+// 		rewardMoney, err = strconv.ParseFloat(selection.TaskReward, 64)
+// 		if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
+// 		return nil, err
+// 		}
+// 		}
+// 		println("payMoney: ", payMoney)
+// 		println("rewardMoney+returnMoney: ", rewardMoney+returnMoney)
+// 		if rewardMoney+returnMoney != payMoney {
+// 		return nil, errors.New("结算金额有误")
+// 		}
+// 	*/
+//
+// 	// 3. 更新选品结算金额
+// 	_, err = db.UpdateSelectionSettleMoney(ctx, selection.SelectionID, payMoney)
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSelectionSettleMoney error,err:%+v", err)
+// 		return nil, err
+// 	}
+//
+// 	fmt.Println("已结算")
+//
+// 	// 4. 更新选品任务阶段
+// 	updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
+// 		TaskID:           request.TaskID,
+// 		TaskStage:        10,
+// 		RewardStage:      2,
+// 		AssignmentStatus: 5,
+// 		IsPayReward:      request.IsPayReward,
+// 		IsPayPayment:     request.IsReturnMoney,
+// 		CompleteDate:     time.Now(),
+// 	}
+// 	_, err = db.UpdateSecTask(ctx, updateSecTaskData)
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSecTask error,err:%+v", err)
+// 		return nil, err
+// 	}
+//
+// 	// 5. 添加任务日志和达人消息
+// 	err = db.CreateTaskLog(ctx, request.TaskID, "结算时间")
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateTaskLog error,err:%+v", err)
+// 		return nil, err
+// 	}
+//
+// 	err = db.CreateMessageBySecTaskId(ctx, 5, 1, request.TaskID)
+// 	if err != nil {
+// 		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateMessageBySecTaskId error,err:%+v", err)
+// 		return nil, err
+// 	}
+//
+// 	// 6. 创建选品收益记录
+// 	// 返现收益
+// 	/*
+// 		t := time.Now()
+// 		if request.IsReturnMoney == 1 {
+// 			income := gorm_model.YounggeeTalentIncome{
+// 				TalentID:       secTask.TalentID,
+// 				SelectionID:    secTask.SelectionID,
+// 				SectaskID:      secTask.TaskID,
+// 				BrandName:      product.BrandName,
+// 				TaskName:       selection.SelectionName,
+// 				Income:         strconv.FormatFloat(returnMoney, 'f', 10, 32),
+// 				IncomeType:     1,
+// 				WithdrawStatus: 1,
+// 				IncomeAt:       &t,
+// 				WithdrawAt:     nil,
+// 			}
+// 			err = db.CreateIncome(ctx, income, nil)
+// 			if err != nil {
+// 				logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
+// 				return nil, err
+// 			}
+// 		}
+// 	*/
+// 	// 悬赏收益
+// 	t := time.Now()
+// 	if request.IsPayReward == 1 {
+// 		income := gorm_model.YounggeeTalentIncome{
+// 			TalentID:       secTask.TalentID,
+// 			SelectionID:    secTask.SelectionID,
+// 			SectaskID:      secTask.TaskID,
+// 			BrandName:      product.BrandName,
+// 			TaskName:       selection.SelectionName,
+// 			Income:         strconv.FormatFloat(payMoney, 'f', 10, 32),
+// 			IncomeType:     1,
+// 			WithdrawStatus: 1,
+// 			IncomeAt:       &t,
+// 			WithdrawAt:     nil,
+// 		}
+// 		err = db.CreateIncome(ctx, income, nil)
+// 		if err != nil {
+// 			logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
+// 			return nil, err
+// 		}
+// 	}
+//
+// 	fmt.Println("成功写入达人信息")
+//
+// 	// 7. 若有young之团存在,则为young之团创建收益
+//
+// 	settleSecTaskData := http_model.SettleSecTaskData{}
+//
+// 	// 8. 统计
+// 	println("开始为每个带货子任务绑定免费领样策略")
+// 	err1 := SelectionTask.UpdateStrategyId(ctx, request.SelectionID)
+// 	nerr := SelectionTask.UpdateStrategyNumBySelectionId(ctx, request.SelectionID)
+// 	fmt.Println(nerr, err1)
+// 	println("完成为每个带货子任务绑定免费领样策略")
+//
+// 	return &settleSecTaskData, nil
+// }

+ 30 - 18
service/sec_task_logistics.go

@@ -2,6 +2,7 @@ package service
 
 import (
 	"context"
+	"github.com/caixw/lib.go/conv"
 	"github.com/sirupsen/logrus"
 	"time"
 	"youngee_m_api/db"
@@ -41,45 +42,56 @@ func (*secLogistics) Create(ctx context.Context, request http_model.CreateSecTas
 		return nil, err
 	}
 
+	var createLogisticUserType int
+	var createLogisticUserId string
+	if request.SubAccountId == 0 {
+		createLogisticUserType = 3
+		createLogisticUserId = conv.MustString(request.UserId, "")
+	} else if request.SubAccountId != 0 {
+		createLogisticUserType = 2
+		createLogisticUserId = conv.MustString(request.SubAccountId, "")
+	}
+
 	// 修改task_info中发货时间、任务阶段
 	updatdSecTask := gorm_model.YounggeeSecTaskInfo{
-		TaskID:          request.TaskID,
-		LogisticsStatus: 2,
-		TaskStage:       7,
-		DeliveryDate:    time.Now(),
-		FreeStage:       4,
+		TaskID:                 request.TaskID,
+		LogisticsStatus:        2,
+		TaskStage:              8,
+		DeliveryDate:           time.Now(),
+		FreeStage:              4,
+		CreateLogisticUserId:   createLogisticUserId,
+		CreateLogisticUserType: createLogisticUserType,
 	}
+
 	_, err = db.UpdateSecTask(ctx, updatdSecTask)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[sectask logistics service] call UpdateSecTask error,err:%+v", err)
 		return nil, err
 	}
 
-	// 插入任务日志、达人消息
-	err = db.CreateTaskLog(ctx, newLogistics.TaskID, "发货时间")
+	taskInfo, taskErr := db.GetSecTaskById(ctx, request.TaskID)
+	if taskErr != nil {
+		return nil, taskErr
+	}
+
+	// 更新带货任务已发货人数
+	err = db.UpdateSelectionNum(ctx, taskInfo.SelectionID)
 	if err != nil {
-		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateTaskLog error,err:%+v", err)
 		return nil, err
 	}
 
-	err = db.CreateMessageBySecTaskId(ctx, 8, 2, newLogistics.TaskID)
+	// 插入任务日志、达人消息
+	err = db.CreateTaskLog(ctx, newLogistics.TaskID, "发货时间")
 	if err != nil {
-		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateMessageByTaskId error,err:%+v", err)
+		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateTaskLog error,err:%+v", err)
 		return nil, err
 	}
 
-	// Selection中SampleNum - 1
-	updateSelection, err := db.GetSelectionById(ctx, request.SelectionId)
+	err = db.CreateMessageBySecTaskId(ctx, 8, 2, newLogistics.TaskID)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateMessageByTaskId error,err:%+v", err)
 		return nil, err
 	}
-	num := updateSelection.RemainNum - 1
-	selectionInfo := gorm_model.YounggeeSelectionInfo{
-		SelectionID: request.SelectionId,
-		RemainNum:   num,
-	}
-	err = db.UpdateSelection(ctx, selectionInfo)
 
 	data := http_model.CreateSecTaskLogisticsData{}
 

+ 3 - 3
service/selection.go

@@ -65,7 +65,7 @@ func (*selection) Create(ctx context.Context, request http_model.CreateSelection
 		ProductPhotoSnap: string(productPhotosToJson),
 		CreatedAt:        &t,
 		UpdatedAt:        &t,
-		CommissionRate:   "0",
+		CommissionRate:   0.0,
 		EstimatedCost:    "0",
 		TaskReward:       "0",
 		SettlementAmount: "0",
@@ -129,7 +129,7 @@ func (*selection) Update(ctx context.Context, request http_model.UpdateSelection
 		ProductUrl:       request.ProductUrl,
 		SampleNum:        conv.MustInt(request.SampleNum, 0),
 		RemainNum:        conv.MustInt(request.SampleNum, 0),
-		CommissionRate:   conv.MustString(request.CommissionRate, "0"),
+		CommissionRate:   0.0,
 		TaskReward:       conv.MustString(request.TaskReward, "0"),
 		SettlementAmount: conv.MustString(request.SettlementAmount, "0"),
 		EstimatedCost:    selectionInfo.EstimatedCost,
@@ -146,7 +146,7 @@ func (*selection) Update(ctx context.Context, request http_model.UpdateSelection
 		updateSelection.SubmitAt = &t
 	}
 	if request.Status == 1 {
-		updateSelection.Status = 1
+		// updateSelection.Status = 1
 	}
 	// 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
 	result := util.MergeStructValue(&updateSelection, selectionInfo)