Merge branch ztflow-wangyuting-dev/bug-63028#wangyuting of zentao/zentaopms (#9412)

This commit is contained in:
刘刚
2025-06-11 16:48:50 +08:00
committed by Gitfox
4 changed files with 67 additions and 35 deletions
+21
View File
@@ -958,4 +958,25 @@ class programplanModel extends model
}
return $tasks;
}
/**
* 根据阶段的开始和结束,计算工作日。
* Calc stage days by stage begin and end.
*
* @param string $start
* @param string $end
* @access public
* @return int
*/
public function calcDaysForStage(string $start, string $end): int
{
$weekend = $this->config->execution->weekend;
$days = range(strtotime($start), strtotime($end), 86400);
foreach($days as $key => $day)
{
$weekDay = date('N', $day);
if(($weekend == 2 && $weekDay == 6) || $weekDay == 7) unset($days[$key]);
}
return count($days);
}
}
+44
View File
@@ -0,0 +1,44 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
su('admin');
/**
title=测试 programplanModel->calcDaysForStage();
timeout=0
cid=0
- 测试计算2025-01-01到2025-01-01期间的工作日。 @1
- 测试计算2025-01-01到2025-01-05期间的工作日。 @4
- 测试计算2025-01-01到2025-01-10期间的工作日。 @9
- 测试计算2025-01-01到3025-01-01期间的工作日。 @313066
- 测试计算非正常日期字符串的工作日。 @1
- 测试计算非正常日期字符串的工作日。 @1
- 测试计算2025-01-01到2025-01-01期间的工作日。 @1
- 测试计算2025-01-01到2025-01-05期间的工作日。 @3
- 测试计算2025-01-01到2025-01-10期间的工作日。 @8
- 测试计算2025-01-01到3025-01-01期间的工作日。 @260888
- 测试计算非正常日期字符串的工作日。 @1
- 测试计算非正常日期字符串的工作日。 @1
*/
global $tester, $config;
$tester->loadModel('programplan');
$config->execution->weekend = 1;
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-01')) && p() && e('1'); // 测试计算2025-01-01到2025-01-01期间的工作日。
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-05')) && p() && e('4'); // 测试计算2025-01-01到2025-01-05期间的工作日。
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-10')) && p() && e('9'); // 测试计算2025-01-01到2025-01-10期间的工作日。
r($tester->programplan->calcDaysForStage('2025-01-01', '3025-01-01')) && p() && e('313066'); // 测试计算2025-01-01到3025-01-01期间的工作日。
r($tester->programplan->calcDaysForStage('asd', 'dsa')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
r($tester->programplan->calcDaysForStage('0', '1')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
$config->execution->weekend = 2;
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-01')) && p() && e('1'); // 测试计算2025-01-01到2025-01-01期间的工作日。
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-05')) && p() && e('3'); // 测试计算2025-01-01到2025-01-05期间的工作日。
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-10')) && p() && e('8'); // 测试计算2025-01-01到2025-01-10期间的工作日。
r($tester->programplan->calcDaysForStage('2025-01-01', '3025-01-01')) && p() && e('260888'); // 测试计算2025-01-01到3025-01-01期间的工作日。
r($tester->programplan->calcDaysForStage('asd', 'dsa')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
r($tester->programplan->calcDaysForStage('0', '1')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
+1 -31
View File
@@ -81,7 +81,7 @@ class programplanZen extends programplan
foreach($plans as $rowID => $plan)
{
if(empty($parentID) and empty($oldPlans)) $plan->id = '';
$plan->days = isset($plan->enabled) && $plan->enabled == 'on' ? $this->calcDaysForStage($plan->begin, $plan->end) : 0;
$plan->days = isset($plan->enabled) && $plan->enabled == 'on' ? $this->programplan->calcDaysForStage($plan->begin, $plan->end) : 0;
$plan->project = $projectID;
$plan->order = (int)array_shift($orders);
$plan->hasProduct = $project->hasProduct;
@@ -158,36 +158,6 @@ class programplanZen extends programplan
return $plans;
}
/**
* 根据阶段的开始和结束,计算工作日。
* Calc stage days by stage begin and end.
*
* @param string $start
* @param string $end
* @access public
* @return int
*/
public function calcDaysForStage($start, $end)
{
$weekend = $this->config->execution->weekend;
$start = new DateTime($start);
$end = new DateTime($end);
$end->modify('+1 day'); // 包含结束日期
$interval = new DateInterval('P1D'); // 每次递增一天
$dateRange = new DatePeriod($start, $interval, $end);
$days = 0;
foreach($dateRange as $date)
{
if(($weekend == 2 && $date->format('N') == 6) || $date->format('N') == 7) continue;
$days++;
}
return $days;
}
/**
* 生成创建项目阶段视图数据。
* Build create view data.
+1 -4
View File
@@ -346,11 +346,8 @@ class task extends control
if(!$this->loadModel('common')->checkPrivByObject('execution', $task->execution)) return $this->sendError($this->lang->execution->accessDenied, $this->createLink('execution', 'all'));
/* 为视图设置常用的公共变量和设置菜单为任务所属执行. Set common variables to view and set menu to the execution of the task. */
$this->taskZen->commonAction($taskID, $vision = 'all');
/* 如果当前主导航是项目,则设置菜单为会话中保存的项目. Set menu to project which saved in session if current app tab is project. */
if($this->app->tab == 'project') $this->loadModel('project')->setMenu($this->session->project);
$this->session->project = $task->project;
$this->taskZen->commonAction($taskID, $vision = 'all');
$this->session->set('executionList', $this->app->getURI(true), 'execution'); // This allow get var of session as `$_SESSION['app-execution']['executionList']`.