From acf710de60199c35d8a7949f3529433bbe7d72b0 Mon Sep 17 00:00:00 2001
From: "1213317725@qq.com" <1213317725@qq.com>
Date: Thu, 3 Jul 2025 17:22:10 +0800
Subject: [PATCH 1/2] 1
---
niucloud/app/api/controller/login/Login.php | 29 +++++++++++++++++++++
niucloud/app/api/route/route.php | 4 ++-
niucloud/app/common.php | 16 ++++++++++++
3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/niucloud/app/api/controller/login/Login.php b/niucloud/app/api/controller/login/Login.php
index 6e2d3426..dee2ecfc 100644
--- a/niucloud/app/api/controller/login/Login.php
+++ b/niucloud/app/api/controller/login/Login.php
@@ -13,6 +13,7 @@ namespace app\api\controller\login;
use app\dict\member\MemberLoginTypeDict;
use app\model\order_table\OrderTable;
+use app\model\person_course_schedule\PersonCourseSchedule;
use app\model\sys\SysConfig;
use app\service\admin\sys\SystemService;
use app\service\api\captcha\CaptchaService;
@@ -133,4 +134,32 @@ class Login extends BaseController
$order_info = $order->where(['id' => 8])->find();
event('Student', ['event_type' => 'add','order_info' => $order_info]);
}
+
+ //上课提醒
+ public function class_reminder(){
+ //上课提醒
+ $template_id = Db::name("template_message")->where(['id' => 3])->value('template_id');
+ $person_course_schedule = new PersonCourseSchedule();
+ $list = $person_course_schedule
+ ->alias("a")
+ ->join(['school_customer_resources' => 'b'],'a.resources_id = b.id','left')
+ ->join(['school_member' => 'c'],'b.member_id = c.member_id','left')
+ ->join(['school_course_schedule' => 'd'],'a.schedule_id = d.id','left')
+ ->join(['school_course' => 'e'],'d.course_id = e.id','left')
+ ->field("a.id,c.wx_openid,e.course_name,a.course_date,a.time_slot")
+ ->select();
+
+ foreach ($list as $k=>$v){
+ sendMessage(
+ $v['wx_openid'],
+ $template_id,
+ [
+ 'thing4' => $v['course_name'].',您有一节课程还有不到24小时就要开始了,如需请假请提前6小时发起请假操作。',
+ 'thing6' => $v['course_date'].' '.$v['time_slot'],
+ 'pagepath' => ''
+ ]
+ );
+ }
+
+ }
}
diff --git a/niucloud/app/api/route/route.php b/niucloud/app/api/route/route.php
index 71ebd452..9d5ec385 100644
--- a/niucloud/app/api/route/route.php
+++ b/niucloud/app/api/route/route.php
@@ -154,6 +154,8 @@ Route::group(function () {
Route::get('test', 'login.Login/test');
+ Route::get('class_reminder', 'login.Login/class_reminder');
+
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);
@@ -430,7 +432,7 @@ Route::group(function () {
Route::get('xy/personCourseSchedule/getMyCoach', 'apiController.PersonCourseSchedule/getMyCoach');
//学生端-学生课程安排-学员课时消费记录
Route::get('xy/personCourseSchedule/getStudentCourseUsageList', 'apiController.PersonCourseSchedule/getStudentCourseUsageList');
-
+
//获取学生课程信息列表(包含教练配置)
Route::get('getStudentCourseInfo', 'apiController.PersonCourseSchedule/getStudentCourseInfo');
//获取人员列表(教练、教务、助教)
diff --git a/niucloud/app/common.php b/niucloud/app/common.php
index 6bae6c59..98e4c3af 100644
--- a/niucloud/app/common.php
+++ b/niucloud/app/common.php
@@ -1414,6 +1414,22 @@ function sendMessage($touser,$template_id,$value) {
];
}
+
+ if($template_id == 'SWODTQvQPaucMnDrszdYSy5wg5_24FIlyXZqxwbjRT8'){
+ $data = [
+ 'touser' => $touser,
+ 'template_id' => $template_id,
+ 'data' => [
+ 'thing4' => ['value' => $value['thing4'], 'color' => '#173177'],
+ 'thing6' => ['value' => $value['thing6'], 'color' => '#173177']
+ ],
+ 'miniprogram' => [
+ "appid" => "wxaee2df4a4b31df05",
+ "pagepath" => $value['pagepath']
+ ]
+ ];
+ }
+
// 发送 POST 请求
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
From eb358d49f0a3bad1cacb3eafde3546fd219ed4a5 Mon Sep 17 00:00:00 2001
From: "1213317725@qq.com" <1213317725@qq.com>
Date: Thu, 3 Jul 2025 21:13:23 +0800
Subject: [PATCH 2/2] 1
---
.../contract/components/contract-edit.vue | 10 +++-
.../customer_resources/customer_resources.vue | 2 +-
.../adminapi/controller/contract/Contract.php | 2 +
niucloud/app/api/controller/member/Member.php | 18 ++++--
niucloud/app/api/route/file.php | 2 +-
niucloud/app/api/route/member.php | 6 +-
niucloud/app/listener/personnel/Student.php | 21 ++++++-
.../admin/contract/ContractService.php | 4 +-
.../service/admin/course/CourseService.php | 2 +-
.../CustomerResourcesService.php | 2 +-
.../app/service/api/member/MemberService.php | 47 ++++++++++++---
.../core/contract_sign/ContractSign.php | 57 +++++++++++++++++++
niucloud/composer.json | 3 +-
13 files changed, 152 insertions(+), 24 deletions(-)
create mode 100644 niucloud/app/service/core/contract_sign/ContractSign.php
diff --git a/admin/src/app/views/contract/components/contract-edit.vue b/admin/src/app/views/contract/components/contract-edit.vue
index b50d741a..d90a4780 100644
--- a/admin/src/app/views/contract/components/contract-edit.vue
+++ b/admin/src/app/views/contract/components/contract-edit.vue
@@ -8,6 +8,10 @@
+
+
+
+
@@ -36,6 +40,9 @@
+
+
+
@@ -69,7 +76,8 @@ const initialFormData = {
contract_template: '',
contract_status: '',
contract_type: '',
- remarks: '',
+ remarks: '',
+ placeholder:''
}
const formData: Record = reactive({ ...initialFormData })
diff --git a/admin/src/app/views/customer_resources/customer_resources.vue b/admin/src/app/views/customer_resources/customer_resources.vue
index 148fb0b1..42eb5e56 100644
--- a/admin/src/app/views/customer_resources/customer_resources.vue
+++ b/admin/src/app/views/customer_resources/customer_resources.vue
@@ -265,7 +265,7 @@
if (pageName == '业绩分配') {
customerResourcesTable.searchParam.type = 'yjfp';
- } else if (pageName == '客户资源列表') {
+ } else if (pageName == '客户资源') {
customerResourcesTable.searchParam.type = 'khzy';
} else if (pageName == '资源列表') {
customerResourcesTable.searchParam.type = 'zylb';
diff --git a/niucloud/app/adminapi/controller/contract/Contract.php b/niucloud/app/adminapi/controller/contract/Contract.php
index fe87980c..05747d07 100644
--- a/niucloud/app/adminapi/controller/contract/Contract.php
+++ b/niucloud/app/adminapi/controller/contract/Contract.php
@@ -55,6 +55,7 @@ class Contract extends BaseAdminController
["contract_status",""],
["contract_type",""],
["remarks",""],
+ ["placeholder",""]
]);
$this->validate($data, 'app\validate\contract\Contract.add');
@@ -74,6 +75,7 @@ class Contract extends BaseAdminController
["contract_status",""],
["contract_type",""],
["remarks",""],
+ ["placeholder",""]
]);
$this->validate($data, 'app\validate\contract\Contract.edit');
diff --git a/niucloud/app/api/controller/member/Member.php b/niucloud/app/api/controller/member/Member.php
index e5173756..36d69585 100644
--- a/niucloud/app/api/controller/member/Member.php
+++ b/niucloud/app/api/controller/member/Member.php
@@ -131,15 +131,15 @@ class Member extends BaseApiController
['resource_id', ''],
['sales_id', ''], // 保留旧参数名称以保持兼容性
]);
-
+
// 优先使用resource_id,如果不存在则使用sales_id
$resource_id = !empty($data['resource_id']) ? $data['resource_id'] : $data['sales_id'];
-
+
// 记录日志
Log::debug("Member/list_call_up - 请求参数: resource_id={$resource_id}");
-
+
$result = (new MemberService())->list_call_up($resource_id);
-
+
return success($result);
}
@@ -194,4 +194,14 @@ class Member extends BaseApiController
}
+ public function contract_sign(){
+ $data = $this->request->params([
+ [ 'contract_sign_id', '' ],
+ ['pic_file','']
+ ]);
+
+ return success(( new MemberService() )->contract_sign($data));
+ }
+
+
}
diff --git a/niucloud/app/api/route/file.php b/niucloud/app/api/route/file.php
index bb39fd6a..0b382cd8 100644
--- a/niucloud/app/api/route/file.php
+++ b/niucloud/app/api/route/file.php
@@ -29,7 +29,7 @@ Route::group('file', function() {
Route::post('image/fetch', 'upload.Upload/imageFetch');
})->middleware(ApiChannel::class)
- ->middleware(ApiCheckToken::class, true)
+// ->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);
/**
diff --git a/niucloud/app/api/route/member.php b/niucloud/app/api/route/member.php
index 04cfd875..3b1cc958 100644
--- a/niucloud/app/api/route/member.php
+++ b/niucloud/app/api/route/member.php
@@ -120,7 +120,7 @@ Route::group('member', function () {
Route::get('student_list', 'member.Member/student_list');
Route::get('sktj', 'member.Member/sktj');
-
+ Route::post('contract_sign', 'member.Member/contract_sign');
})->middleware(ApiChannel::class)
->middleware(ApiPersonnelCheckToken::class, true)
@@ -129,6 +129,8 @@ Route::group('member', function () {
Route::group('member', function () {
+
+
/***************************************************** 会员管理 ****************************************************/
//会员日志
Route::post('log', 'member.Member/log');
@@ -139,5 +141,5 @@ Route::group('member', function () {
/***************************************************** 会员等级 **************************************************/
Route::get('level', 'member.Level/lists');
})->middleware(ApiChannel::class)
- ->middleware(ApiCheckToken::class)
+// ->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);
diff --git a/niucloud/app/listener/personnel/Student.php b/niucloud/app/listener/personnel/Student.php
index 129592c5..4e405473 100644
--- a/niucloud/app/listener/personnel/Student.php
+++ b/niucloud/app/listener/personnel/Student.php
@@ -14,6 +14,8 @@ namespace app\listener\personnel;
use app\model\class_resources_rel\ClassResourcesRel;
+use app\model\contract\Contract;
+use app\model\contract_sign\ContractSign;
use app\model\course\Course;
use app\model\course_schedule\CourseSchedule;
use app\model\customer_resources\CustomerResources;
@@ -115,9 +117,22 @@ class Student
]);
}
-
-
-
+ $contract = new Contract();
+ $contract_info = $contract
+ ->alias("a")
+ ->join(['school_course' => 'b'],'a.id = b.contract_id','left')
+ ->where(['b.id' => $order_info['course_id']])
+ ->field("a.id,a.contract_template")
+ ->find();
+
+
+ $contract_sign = new ContractSign();
+ $contract_sign->insert([
+ 'contract_id' => $contract_info['id'],
+ 'personnel_id' => $order_info['resource_id'],
+ 'sign_file' => $contract_info['contract_template'],
+ 'type' => 2
+ ]);
}
diff --git a/niucloud/app/service/admin/contract/ContractService.php b/niucloud/app/service/admin/contract/ContractService.php
index c0e157d0..c587502c 100644
--- a/niucloud/app/service/admin/contract/ContractService.php
+++ b/niucloud/app/service/admin/contract/ContractService.php
@@ -37,7 +37,7 @@ class ContractService extends BaseAdminService
*/
public function getPage(array $where = [])
{
- $field = 'id,contract_name,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at';
+ $field = 'id,contract_name,placeholder,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at';
$order = 'id desc';
$search_model = $this->model->withSearch(["contract_status","contract_type","created_at"], $where)->field($field)->order($order);
@@ -52,7 +52,7 @@ class ContractService extends BaseAdminService
*/
public function getInfo(int $id)
{
- $field = 'id,contract_name,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at';
+ $field = 'id,contract_name,placeholder,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray();
return $info;
diff --git a/niucloud/app/service/admin/course/CourseService.php b/niucloud/app/service/admin/course/CourseService.php
index 46860183..8ef0cd58 100644
--- a/niucloud/app/service/admin/course/CourseService.php
+++ b/niucloud/app/service/admin/course/CourseService.php
@@ -47,7 +47,7 @@ class CourseService extends BaseAdminService
public function contract_all(){
$contract = new Contract();
- $list = $contract->select()->toArray();
+ $list = $contract->where(['contract_type' => '外部','contract_status' => '可用'])->select()->toArray();
return $list;
}
diff --git a/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php b/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php
index 41280e1d..e994bb18 100644
--- a/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php
+++ b/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php
@@ -156,7 +156,7 @@ class CustomerResourcesService extends BaseAdminService
$resourceSharing = new ResourceSharing();
$personnel = new Personnel();
$data['consultant'] = $personnel->where(['sys_user_id' => $this->uid])->value("id");
-
+// $data['consultant'] = 3;
if (!$data['consultant']) {
return fail("超级管理员不允许添加资源");
}
diff --git a/niucloud/app/service/api/member/MemberService.php b/niucloud/app/service/api/member/MemberService.php
index f3a06feb..54d0d284 100644
--- a/niucloud/app/service/api/member/MemberService.php
+++ b/niucloud/app/service/api/member/MemberService.php
@@ -16,6 +16,7 @@ use app\model\attendance\Attendance;
use app\model\campus\Campus;
use app\model\class_resources_rel\ClassResourcesRel;
use app\model\communication_records\CommunicationRecords;
+use app\model\contract_sign\ContractSign;
use app\model\course_schedule\CourseSchedule;
use app\model\member\Member;
use app\model\person_course_schedule\PersonCourseSchedule;
@@ -191,43 +192,43 @@ class MemberService extends BaseApiService
private function log($level, $message) {
Log::$level('MemberService: ' . $message);
}
-
+
public function list_call_up($resource_id)
{
$communication = new CommunicationRecords();
// 添加日志记录以便调试
$this->log('debug', "list_call_up请求参数: resource_id={$resource_id}");
-
+
try {
// 检查resource_id是否有效
if (empty($resource_id)) {
$this->log('warning', "list_call_up: resource_id为空");
return [];
}
-
+
// 查询前打印SQL查询条件
$sqlDebug = "SELECT * FROM school_communication_records WHERE resource_id = '{$resource_id}' ORDER BY communication_time DESC";
$this->log('debug', "list_call_up对应SQL: {$sqlDebug}");
-
+
// 执行查询
$result = $communication->where('resource_id', $resource_id)
->order('communication_time DESC')
->select()->toArray();
-
+
// 如果没有结果,尝试使用原生 SQL 查询检查记录存在性
if (empty($result)) {
$this->log('debug', "list_call_up: 主要查询没有结果,尝试直接查询表");
$rawResult = $communication->query("SELECT COUNT(*) as count FROM school_communication_records WHERE resource_id = '{$resource_id}'");
$count = $rawResult[0]['count'] ?? 0;
$this->log('debug', "list_call_up: 原生SQL查询结果数量: {$count}");
-
+
// 如果原生查询有结果但模型查询没结果,尝试直接使用原生查询
if ($count > 0) {
$this->log('debug', "list_call_up: 检测到数据存在,使用原生查询获取");
$result = $communication->query("SELECT * FROM school_communication_records WHERE resource_id = '{$resource_id}' ORDER BY communication_time DESC");
}
}
-
+
$this->log('debug', "list_call_up查询结果数量: " . count($result));
return $result;
} catch (\Exception $e) {
@@ -446,4 +447,36 @@ class MemberService extends BaseApiService
return $results;
}
+
+ public function contract_sign(array $data){
+ $contract_sign = new ContractSign();
+ $signService = (new \app\service\core\contract_sign\ContractSign());
+
+ $info = $contract_sign
+ ->alias("a")
+ ->join(['school_contract' => 'b'],'a.contract_id = b.id',"left")
+ ->where(['a.id' => $data['contract_sign_id']])
+ ->field("a.*,b.placeholder")
+ ->find();
+
+
+ $file_name = 'upload/'.date("YmdHis").time().'.docx';
+ $outputPath = root_path() . '/public/'.$file_name;
+
+ $signService->setSign(
+ root_path().'/public/'.$info['sign_file'],
+ $outputPath,
+ $data['pic_file'],
+ $info['placeholder']
+ );
+
+ $contract_sign->where(['id' => $data['contract_sign_id']])->update([
+ 'sign_file' => $file_name,
+ 'status' => 2,
+ 'sign_time' => date('Y-m-d H:i:s')
+ ]);
+
+ return true;
+ }
+
}
diff --git a/niucloud/app/service/core/contract_sign/ContractSign.php b/niucloud/app/service/core/contract_sign/ContractSign.php
new file mode 100644
index 00000000..dc6bc152
--- /dev/null
+++ b/niucloud/app/service/core/contract_sign/ContractSign.php
@@ -0,0 +1,57 @@
+setImageValue($placeholder, [
+ 'path' => $tempImagePath,
+ 'width' => 120,
+ 'height' => 50,
+ 'ratio' => false,
+ ]);
+
+ $templateProcessor->saveAs($outputPath);
+
+ return true;
+ }
+
+}
diff --git a/niucloud/composer.json b/niucloud/composer.json
index 36505d92..adb31280 100644
--- a/niucloud/composer.json
+++ b/niucloud/composer.json
@@ -59,7 +59,8 @@
"workerman/crontab": "v1.0.6",
"hyperf/pimple": "~2.2.0",
"365taofang/huaweicloud-sdk-php-obs": "^3.23",
- "ext-openssl": "*"
+ "ext-openssl": "*",
+ "phpoffice/phpword": "^1.3"
},
"require-dev": {
"symfony/var-dumper": "v6.0.19",