Maison > Opération et maintenance > exploitation et maintenance Linux > Explication détaillée de la génération automatique de données sous Linux

Explication détaillée de la génération automatique de données sous Linux

小云云
Libérer: 2018-03-31 10:38:12
original
1734 Les gens l'ont consulté

Cet article partage principalement avec vous l'explication détaillée de la génération automatique de données sous Linux. Il la partage principalement avec vous sous forme de code.

/*
 * 自动任务跑数据
 * 订单组日工作量报表数据写入
 * 
 * $start_date     0000-00-00 00:00:00                 开始时间
 * $email_start_date    0000-00-00 00:00:00                 开始时间
 * $end_dates           0000-00-00 00:00:00                 结束时间
 */
require_once( "config.php" );
$flagFile = dirname(__FILE__) . "/order-day-workload";
if (@file_exists($flagFile)) {
    Common_Service_Common::autoRunFlag($flagFile, __FILE__, 2);
    die("程序正在运行!");
}
ini_set("memory_limit", "-1");
set_time_limit(0);
define("RUNTIME", "[ " . date("Y-m-d H:i:s") . " ] ");
echo RUNTIME . "Starting!\n";
$reRun = false;
$start_date = date("Y-m-d 08:30:00", strtotime("-1 day"));
$end_dates = date("Y-m-d 08:30:00");
$Object = new Order_Service_OrderWorkload();
for (; $start_date < $end_dates;) {
    $end_date = date("Y-m-d 08:30:00", strtotime("+1 day", strtotime($start_date)));
    $date = $start_date;
    echo $start_date . "\n";
    $start_date = date("Y-m-d H:i:s", strtotime($start_date) + 24 * 3600);
}
$email_start_date = date("Y-m-d 08:30:00", strtotime("-1 day"));
//休眠 5 秒后等待数据同步
sleep(5);
$Object->orderDayWorkload($email_start_date, $end_dates);
echo "[ " . date(&#39;Y-m-d H:i:s&#39;) . " ] 结束运行\r\n";
@unlink($flagFile);


//Services
//配置标准时间
public static $StandardConfigurationTime = array(
    //配货员
    "STANDARD_CONFIGURATION_PEIHUO",
    //打包员
    "STANDARD_CONFIGURATION_PACKING",
    //分拣员
    "STANDARD_CONFIGURATION_SORTER",
);

public static function getAdapter() {
    $model = new Order_Model_OrderWorkload();
    return $model->getAdapter();
}

/*
 * $row        array()             条件
 */

public static function add($row) {
    $object = new Order_Model_OrderWorkload();
    return $object->add($row);
}

/*
* 订单组日工作量数据写入
*
* $email_start_date   0000-00-00 00:00:00              开始时间
* $end_dates          0000-00-00 00:00:00              结束时间
*/

public static function orderDayWorkload($email_start_date, $end_dates) {
   $orderWorkload = new Order_Model_OrderWorkload();
   $dbAdapter = $orderWorkload->getAdapter();
   $dbAdapter->beginTransaction();
   try {
       //配货时间
       $peihuo_time = "";
       //打包时间
       $packing_time = "";
       //分拣时间
       $sorter_time = "";
       //配货员超时票数
       $count_peihuo = "";
       //打包员超时票数
       $count_packing = "";
       //分拣员超时票数
       $count_sorter = "";
       $row = array();

       //根据条件获取对应数据
       $combination = array(
           "op_create_date_gt" => $email_start_date,
           "op_create_date_lt" => $end_dates,
           "op_status" => 1,
       );
       $opIds = Product_Service_Pickup::getByCondition($combination, "*");
       if (!$opIds) {
           echo "未获取到该时间段  [ " . $email_start_date . " ] ~ [ " . $end_dates . " ] 的信息";
       }
       foreach ($opIds as $value) {
           $opOrdersType = $value[&#39;op_orders_type&#39;];
           $warehouseId = $value[&#39;warehouse_id&#39;];

           /*
            * 配货员数据
            */
           $pickupUserId = $value[&#39;pickup_user_id&#39;];
           //配货员时间
           if ($value[&#39;op_end_time&#39;] != &#39;0000-00-00 00:00:00&#39; && $value[&#39;op_start_time&#39;] != &#39;0000-00-00 00:00:00&#39;) {
               $peihuo_time = round((strtotime($value[&#39;op_end_time&#39;]) - strtotime($value[&#39;op_start_time&#39;])) / 60, 0);
           } else {
               $peihuo_time = 0;
           }
           //根据配货员账号开通时间和订单类型分别计算超时票数
           $userInfo = User_Service_User::getByUserId($pickupUserId);
           $configId = Common_Service_Config::getByAttribute(Order_Service_OrderWorkload::$StandardConfigurationTime[&#39;0&#39;], $warehouseId);
           $configValueInfo = unserialize($configId[&#39;config_value&#39;]);
           //培训期
           $trainDate = date("Y-m-d H:i:s", strtotime("+10 day", strtotime($userInfo[&#39;create_date&#39;])));
           //试岗期
           $try_hillockDate = date("Y-m-d H:i:s", strtotime("+20 day", strtotime($userInfo[&#39;create_date&#39;])));
           //上岗期
           $postsDate = date("Y-m-d H:i:s", strtotime("+30 day", strtotime($userInfo[&#39;create_date&#39;])));
           $count_peihuo = 0;
           if ($value[&#39;op_start_time&#39;] <= $trainDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;trainA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;trainB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;trainC&#39;])) <= $peihuo_time) {
                   $count_peihuo = 1;
               }
           } else if ($value[&#39;op_start_time&#39;] > $trainDate && $value[&#39;op_start_time&#39;] <= $try_hillockDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;try_hillockA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;try_hillockB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;try_hillockC&#39;])) <= $peihuo_time) {
                   $count_peihuo = 1;
               }
           } else if ($value[&#39;op_start_time&#39;] > $try_hillockDate && $value[&#39;op_start_time&#39;] <= $postsDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;postsA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;postsB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;postsC&#39;])) <= $peihuo_time) {
                   $count_peihuo = 1;
               }
           } else if ($value[&#39;op_start_time&#39;] > $postsDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;matureA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;matureB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;matureC&#39;])) <= $peihuo_time) {
                   $count_peihuo = 1;
               }
           }
           //根据配货员和订单类型仓库作为键、组成四维数组,如果有相同的键,就把对应值相加
           if (!isset($row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId])) {
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_overtime_qty&#39;] = $count_peihuo;
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_more&#39;] = $value[&#39;op_more&#39;];
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_wrong&#39;] = $value[&#39;op_wrong&#39;];
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_leakage&#39;] = $value[&#39;op_leakage&#39;];
           } else {
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_overtime_qty&#39;] += $count_peihuo;
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_more&#39;] += $value[&#39;op_more&#39;];
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_wrong&#39;] += $value[&#39;op_wrong&#39;];
               $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_leakage&#39;] += $value[&#39;op_leakage&#39;];
           }
           $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;ow_total_pickup&#39;] += 1;
           $row[$pickupUserId . &#39;-&#39; . 0][$opOrdersType][$warehouseId][&#39;total_time&#39;][] = $peihuo_time;                   


           /*
            * 打包员数据
            */    
           $packageUserId = $value[&#39;package_user_id&#39;];
           //打包员时间
           if ($value[&#39;op_pack_end&#39;] != &#39;0000-00-00 00:00:00&#39; && $value[&#39;op_pack_start&#39;] != &#39;0000-00-00 00:00:00&#39;) {
               $packing_time = ceil((strtotime($value[&#39;op_pack_end&#39;]) - strtotime($value[&#39;op_pack_start&#39;])) / 60);
           } else {
               $packing_time = 0;
           }
           //根据打包员账号开通时间和订单类型分别计算超时票数
           $userInfo = User_Service_User::getByUserId($packageUserId);
           $configId = Common_Service_Config::getByAttribute(Order_Service_OrderWorkload::$StandardConfigurationTime[&#39;1&#39;], $warehouseId);
           $configValueInfo = unserialize($configId[&#39;config_value&#39;]);
           //培训期
           $trainDate = date("Y-m-d H:i:s", strtotime("+10 day", strtotime($userInfo[&#39;create_date&#39;])));
           //试岗期
           $try_hillockDate = date("Y-m-d H:i:s", strtotime("+20 day", strtotime($userInfo[&#39;create_date&#39;])));
           //上岗期
           $postsDate = date("Y-m-d H:i:s", strtotime("+30 day", strtotime($userInfo[&#39;create_date&#39;])));
           $count_packing = 0;
           if ($value[&#39;op_pack_start&#39;] <= $trainDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;trainA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;trainB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;trainC&#39;])) <= $packing_time) {
                   $count_packing = 1;
               }
           } else if ($value[&#39;op_pack_start&#39;] > $trainDate && $value[&#39;op_pack_start&#39;] <= $try_hillockDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;try_hillockA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;try_hillockB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;try_hillockC&#39;])) <= $packing_time) {
                   $count_packing = 1;
               }
           } else if ($value[&#39;op_pack_start&#39;] > $try_hillockDate && $value[&#39;op_pack_start&#39;] <= $postsDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;postsA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;postsB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;postsC&#39;])) <= $packing_time) {
                   $count_packing = 1;
               }
           } else if ($value[&#39;op_pack_start&#39;] > $postsDate) {
              if ((($opOrdersType == 0 && $configValueInfo[&#39;matureA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;matureB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;matureC&#39;])) <= $packing_time) {
                   $count_packing = 1;
               }
           }
           //根据打包员和订单类型仓库作为键、组成四维数组,如果有相同的键,就把对应值相加
           if (!isset($row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId])) {
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_overtime_qty&#39;] = $count_packing;
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_more&#39;] = $value[&#39;op_more&#39;];
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_wrong&#39;] = $value[&#39;op_wrong&#39;];
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_leakage&#39;] = $value[&#39;op_leakage&#39;];
           } else {
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_overtime_qty&#39;] += $count_packing;
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_more&#39;] += $value[&#39;op_more&#39;];
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_wrong&#39;] += $value[&#39;op_wrong&#39;];
               $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_leakage&#39;] += $value[&#39;op_leakage&#39;];
           }
           $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;ow_total_pickup&#39;] += 1;
           $row[$packageUserId . &#39;-&#39; . 1][$opOrdersType][$warehouseId][&#39;total_time&#39;][] = $packing_time;


           /*
            * 分拣员数据
            */
           $opSortingUser = $value[&#39;op_sorting_user&#39;];
           //分拣员时间
           if ($value[&#39;op_sorting_end&#39;] != &#39;0000-00-00 00:00:00&#39; && $value[&#39;op_sorting_start&#39;] != &#39;0000-00-00 00:00:00&#39;) {
               $sorter_time = ceil((strtotime($value[&#39;op_sorting_end&#39;]) - strtotime($value[&#39;op_sorting_start&#39;])) / 60);
           } else {
               $sorter_time = 0;
           }
           //根据分拣员账号开通时间和订单类型分别计算超时票数
           $userInfo = User_Service_User::getByUserId($opSortingUser);
           $configId = Common_Service_Config::getByAttribute(Order_Service_OrderWorkload::$StandardConfigurationTime[&#39;2&#39;], $warehouseId);
           $configValueInfo = unserialize($configId[&#39;config_value&#39;]);
           //培训期
           $trainDate = date("Y-m-d H:i:s", strtotime("+10 day", strtotime($userInfo[&#39;create_date&#39;])));
           //试岗期
           $try_hillockDate = date("Y-m-d H:i:s", strtotime("+20 day", strtotime($userInfo[&#39;create_date&#39;])));
           //上岗期
           $postsDate = date("Y-m-d H:i:s", strtotime("+30 day", strtotime($userInfo[&#39;create_date&#39;])));
           $count_sorter = 0;
           if ($value[&#39;op_sorting_start&#39;] <= $trainDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;trainA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;trainB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;trainC&#39;])) <= $sorter_time) {
                   $count_sorter = 1;
               }
           } else if ($value[&#39;op_sorting_start&#39;] > $trainDate && $value[&#39;op_sorting_start&#39;] <= $try_hillockDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;try_hillockA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;try_hillockB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;try_hillockC&#39;])) <= $sorter_time) {
                   $count_sorter = 1;
               }
           } else if ($value[&#39;op_sorting_start&#39;] > $try_hillockDate && $value[&#39;op_sorting_start&#39;] <= $postsDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;postsA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;postsB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;postsC&#39;])) <= $sorter_time) {
                   $count_sorter = 1;
               }
           } else if ($value[&#39;op_sorting_start&#39;] > $postsDate) {
               if ((($opOrdersType == 0 && $configValueInfo[&#39;matureA&#39;]) || ($opOrdersType == 1 && $configValueInfo[&#39;matureB&#39;]) || ($opOrdersType == 2 && $configValueInfo[&#39;matureC&#39;])) <= $sorter_time) {
                   $count_sorter = 1;
               }
           }
           //根据分拣员和订单类型仓库作为键、组成四维数组,如果有相同的键,就把对应值相加
           if (!isset($row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId])) {
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_overtime_qty&#39;] = $count_sorter;
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_more&#39;] = $value[&#39;op_more&#39;];
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_wrong&#39;] = $value[&#39;op_wrong&#39;];
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_leakage&#39;] = $value[&#39;op_leakage&#39;];
           } else {
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_overtime_qty&#39;] += $count_sorter;
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_more&#39;] += $value[&#39;op_more&#39;];
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_wrong&#39;] += $value[&#39;op_wrong&#39;];
               $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_leakage&#39;] += $value[&#39;op_leakage&#39;];
           }
           $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;ow_total_pickup&#39;] += 1;
           $row[$opSortingUser . &#39;-&#39; . 2][$opOrdersType][$warehouseId][&#39;total_time&#39;][] = $sorter_time;
       }

       //分解数组写入数据库
       foreach ($row as $key => $val) {
           $substr = substr($key, -1);
           if ($key != 0) {
               foreach ($val as $ke => $va) {
                   foreach ($va as $k => $v) {
                       $combition = array(
                           "user_id" => $key,
                           "warehouse_id" => $k,
                           "ow_date" => $email_start_date,
                           "ow_total_pickup" => $v[&#39;ow_total_pickup&#39;],
                           "ow_type" => $ke,
                           "ow_fast" => min($v[&#39;total_time&#39;]),
                           "ow_avg" => round(array_sum($v[&#39;total_time&#39;]) / $v[&#39;ow_total_pickup&#39;]),
                           "ow_slow" => max($v[&#39;total_time&#39;]),
                           "ow_orders" => $v[&#39;ow_total_pickup&#39;],
                           "ow_overtime_qty" => $v[&#39;ow_overtime_qty&#39;],
                           "ow_more" => $v[&#39;ow_more&#39;],
                           "ow_wrong" => $v[&#39;ow_wrong&#39;],
                           "ow_leakage" => $v[&#39;ow_leakage&#39;],
                           "ow_create_time" => date("Y-m-d H:i:s"),
                           "ow_post" => $substr,
                       );
                       if (!Order_Service_OrderWorkload::add($combition)) {
                           echo "写入数据失败";
                       }
                   }
               }
           }
       }
       $dbAdapter->commit();
   } catch (Exception $e) {
       $dbAdapter->rollback();
       echo "[ " . date("Y-m-d H:is") . " ] 出现异常,异常信息为:" . $e->getMessage();
   }
}


//Models
private $_table;

public function __construct() {
    $this->_table = new Order_Model_DbTable_OrderWorkload();
}

public function getAdapter() {
    return $this->_table->getAdapter();
}

/*
 * $row        array()             条件
 */

public function add($row) {
    return $this->_table->insert($row);
}


//Models/DbTable
class Order_Model_DbTable_OrderWorkload extends Zend_Db_Table_Abstract {

    //数据表名称
    protected $_name = "order_workload";
    //主键
    protected $_primary = "ow_id";
    protected $_sequence = true;

}
Copier après la connexion

                                                                   

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal