Merge branch dev/task-143181-144207-144206-144205-144204 of zentao/zentaopms (#9002)

This commit is contained in:
刘刚
2025-05-29 10:13:14 +08:00
committed by Gitfox
6 changed files with 95 additions and 37 deletions
+28 -12
View File
@@ -2774,21 +2774,10 @@ class taskModel extends model
/* Delayed or not?. */
$this->loadModel('holiday');
$task->delay = 0;
$isNotCancel = !in_array($task->status, array('cancel', 'closed')) || ($task->status == 'closed' && !helper::isZeroDate($task->finishedDate) && $task->closedReason != 'cancel');
$isComputeDelay = $isNotCancel && !helper::isZeroDate($task->deadline);
$workingDays = empty($workingDays) && $isComputeDelay ? $this->holiday->getActualWorkingDays($task->deadline, $today) : $workingDays;
if($isComputeDelay)
{
$endDate = helper::isZeroDate($task->finishedDate) ? $today : $task->finishedDate;
$betweenDays = $this->holiday->getDaysBetween($task->deadline, $endDate);
if($betweenDays)
{
$delayDays = array_intersect($betweenDays, $workingDays);
$delay = !empty($delayDays) ? count($delayDays) - 1: 0;
if($delay > 0) $task->delay = $delay;
}
}
if($isComputeDelay) $task = $this->computeDelay($task, $task->deadline, $workingDays);
/* Story changed or not. */
$task->needConfirm = false;
@@ -3853,4 +3842,31 @@ class taskModel extends model
return $task;
}
/**
* 计算任务延期。
* Compute task delay.
*
* @param object $task
* @param string $deadline
* @param array $workingDays
* @access public
* @return object
*/
public function computeDelay(object $task, string $deadline = '', array $workingDays = array()): object
{
if(helper::isZeroDate($deadline)) return $task;
$today = helper::today();
$endDate = helper::isZeroDate($task->finishedDate) ? $today : $task->finishedDate;
$betweenDays = $this->loadModel('holiday')->getDaysBetween($deadline, $endDate);
if($betweenDays)
{
$delayDays = array_intersect($betweenDays, $workingDays);
$delay = !empty($delayDays) ? count($delayDays) - 1: 0;
if($delay > 0) $task->delay = $delay;
}
return $task;
}
}
@@ -2296,4 +2296,27 @@ class taskTest
$task = $this->objectModel->processConfirmStoryChange($task);
return !empty($task->actions) ? $task->actions : array();
}
/**
* 计算任务延期。
* Compute task delay.
*
* @param object $task
* @param string $deadline
* @param array $workingDays
* @access public
* @return object
*/
public function computeDelayTest(int $taskID, bool $existDeadline = true): object
{
$task = $this->objectModel->fetchByID($taskID);
if(!$existDeadline) $task->deadline = '';
if($task->status != 'done') $task->finishedDate = '';
$today = helper::today();
$begin = !empty($task->deadline) && $task->deadline < $today ? $task->deadline : $today;
$workingDays = $this->objectModel->loadModel('holiday')->getActualWorkingDays($begin, $today);
return $this->objectModel->computeDelay($task, $task->deadline, $workingDays);
}
}
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env php
<?php
/**
title=taskModel->computeDelay();
cid=0
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/task.unittest.class.php';
zenData('user')->gen(5);
su('admin');
zenData('task')->loadYaml('task')->gen(5);
$taskIdList = range(1, 5);
$taskTester = new taskTest();
r($taskTester->computeDelayTest($taskIdList[1], true)) && p('delay') && e('1'); // 测试获取有截止日期进行中的任务延期天数
r($taskTester->computeDelayTest($taskIdList[2], true)) && p('delay') && e('~~'); // 测试获取有截止日期已完成的任务延期天数
r($taskTester->computeDelayTest($taskIdList[0], false)) && p('delay') && e('~~'); // 测试获取没有截止日期未开始的任务延期天数
r($taskTester->computeDelayTest($taskIdList[3], false)) && p('delay') && e('~~'); // 测试获取有截止日期已取消的任务延期天数
r($taskTester->computeDelayTest($taskIdList[4], false)) && p('delay') && e('~~'); // 测试获取有截止日期已关闭的任务延期天数
@@ -0,0 +1,16 @@
title: zt_task
author: Shuejie Tian
version: "1.0"
fields:
- field: status
range: "wait,doing,done,cancel,closed"
- field: deadline
range: "(-2D)-(+1D):1D"
type: timestamp
format: "YY/MM/DD"
- field: finishedDate
range: "(-3D)-(+1D):1D"
type: timestamp
format: "YY/MM/DD hh:mm:ss"
- field: closedReason
range: "[]{4},cancel"