Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Ausführliche Erläuterung der automatischen Datengenerierung unter Linux

Ausführliche Erläuterung der automatischen Datengenerierung unter Linux

小云云
小云云Original
2018-03-31 10:38:121675Durchsuche

Dieser Artikel teilt Ihnen hauptsächlich die detaillierte Erklärung der automatischen Datengenerierung in Linux mit. Ich hoffe, er kann Ihnen helfen.

/*
 * 自动任务跑数据
 * 订单组日工作量报表数据写入
 * 
 * $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;

}

                                     

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der automatischen Datengenerierung unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn