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('Y-m-d H:i:s') . " ] 结束运行\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['op_orders_type']; $warehouseId = $value['warehouse_id']; /* * 配货员数据 */ $pickupUserId = $value['pickup_user_id']; //配货员时间 if ($value['op_end_time'] != '0000-00-00 00:00:00' && $value['op_start_time'] != '0000-00-00 00:00:00') { $peihuo_time = round((strtotime($value['op_end_time']) - strtotime($value['op_start_time'])) / 60, 0); } else { $peihuo_time = 0; } //根据配货员账号开通时间和订单类型分别计算超时票数 $userInfo = User_Service_User::getByUserId($pickupUserId); $configId = Common_Service_Config::getByAttribute(Order_Service_OrderWorkload::$StandardConfigurationTime['0'], $warehouseId); $configValueInfo = unserialize($configId['config_value']); //培训期 $trainDate = date("Y-m-d H:i:s", strtotime("+10 day", strtotime($userInfo['create_date']))); //试岗期 $try_hillockDate = date("Y-m-d H:i:s", strtotime("+20 day", strtotime($userInfo['create_date']))); //上岗期 $postsDate = date("Y-m-d H:i:s", strtotime("+30 day", strtotime($userInfo['create_date']))); $count_peihuo = 0; if ($value['op_start_time'] <= $trainDate) { if ((($opOrdersType == 0 && $configValueInfo['trainA']) || ($opOrdersType == 1 && $configValueInfo['trainB']) || ($opOrdersType == 2 && $configValueInfo['trainC'])) <= $peihuo_time) { $count_peihuo = 1; } } else if ($value['op_start_time'] > $trainDate && $value['op_start_time'] <= $try_hillockDate) { if ((($opOrdersType == 0 && $configValueInfo['try_hillockA']) || ($opOrdersType == 1 && $configValueInfo['try_hillockB']) || ($opOrdersType == 2 && $configValueInfo['try_hillockC'])) <= $peihuo_time) { $count_peihuo = 1; } } else if ($value['op_start_time'] > $try_hillockDate && $value['op_start_time'] <= $postsDate) { if ((($opOrdersType == 0 && $configValueInfo['postsA']) || ($opOrdersType == 1 && $configValueInfo['postsB']) || ($opOrdersType == 2 && $configValueInfo['postsC'])) <= $peihuo_time) { $count_peihuo = 1; } } else if ($value['op_start_time'] > $postsDate) { if ((($opOrdersType == 0 && $configValueInfo['matureA']) || ($opOrdersType == 1 && $configValueInfo['matureB']) || ($opOrdersType == 2 && $configValueInfo['matureC'])) <= $peihuo_time) { $count_peihuo = 1; } } //根据配货员和订单类型仓库作为键、组成四维数组,如果有相同的键,就把对应值相加 if (!isset($row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId])) { $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_overtime_qty'] = $count_peihuo; $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_more'] = $value['op_more']; $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_wrong'] = $value['op_wrong']; $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_leakage'] = $value['op_leakage']; } else { $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_overtime_qty'] += $count_peihuo; $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_more'] += $value['op_more']; $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_wrong'] += $value['op_wrong']; $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_leakage'] += $value['op_leakage']; } $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['ow_total_pickup'] += 1; $row[$pickupUserId . '-' . 0][$opOrdersType][$warehouseId]['total_time'][] = $peihuo_time; /* * 打包员数据 */ $packageUserId = $value['package_user_id']; //打包员时间 if ($value['op_pack_end'] != '0000-00-00 00:00:00' && $value['op_pack_start'] != '0000-00-00 00:00:00') { $packing_time = ceil((strtotime($value['op_pack_end']) - strtotime($value['op_pack_start'])) / 60); } else { $packing_time = 0; } //根据打包员账号开通时间和订单类型分别计算超时票数 $userInfo = User_Service_User::getByUserId($packageUserId); $configId = Common_Service_Config::getByAttribute(Order_Service_OrderWorkload::$StandardConfigurationTime['1'], $warehouseId); $configValueInfo = unserialize($configId['config_value']); //培训期 $trainDate = date("Y-m-d H:i:s", strtotime("+10 day", strtotime($userInfo['create_date']))); //试岗期 $try_hillockDate = date("Y-m-d H:i:s", strtotime("+20 day", strtotime($userInfo['create_date']))); //上岗期 $postsDate = date("Y-m-d H:i:s", strtotime("+30 day", strtotime($userInfo['create_date']))); $count_packing = 0; if ($value['op_pack_start'] <= $trainDate) { if ((($opOrdersType == 0 && $configValueInfo['trainA']) || ($opOrdersType == 1 && $configValueInfo['trainB']) || ($opOrdersType == 2 && $configValueInfo['trainC'])) <= $packing_time) { $count_packing = 1; } } else if ($value['op_pack_start'] > $trainDate && $value['op_pack_start'] <= $try_hillockDate) { if ((($opOrdersType == 0 && $configValueInfo['try_hillockA']) || ($opOrdersType == 1 && $configValueInfo['try_hillockB']) || ($opOrdersType == 2 && $configValueInfo['try_hillockC'])) <= $packing_time) { $count_packing = 1; } } else if ($value['op_pack_start'] > $try_hillockDate && $value['op_pack_start'] <= $postsDate) { if ((($opOrdersType == 0 && $configValueInfo['postsA']) || ($opOrdersType == 1 && $configValueInfo['postsB']) || ($opOrdersType == 2 && $configValueInfo['postsC'])) <= $packing_time) { $count_packing = 1; } } else if ($value['op_pack_start'] > $postsDate) { if ((($opOrdersType == 0 && $configValueInfo['matureA']) || ($opOrdersType == 1 && $configValueInfo['matureB']) || ($opOrdersType == 2 && $configValueInfo['matureC'])) <= $packing_time) { $count_packing = 1; } } //根据打包员和订单类型仓库作为键、组成四维数组,如果有相同的键,就把对应值相加 if (!isset($row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId])) { $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_overtime_qty'] = $count_packing; $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_more'] = $value['op_more']; $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_wrong'] = $value['op_wrong']; $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_leakage'] = $value['op_leakage']; } else { $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_overtime_qty'] += $count_packing; $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_more'] += $value['op_more']; $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_wrong'] += $value['op_wrong']; $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_leakage'] += $value['op_leakage']; } $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['ow_total_pickup'] += 1; $row[$packageUserId . '-' . 1][$opOrdersType][$warehouseId]['total_time'][] = $packing_time; /* * 分拣员数据 */ $opSortingUser = $value['op_sorting_user']; //分拣员时间 if ($value['op_sorting_end'] != '0000-00-00 00:00:00' && $value['op_sorting_start'] != '0000-00-00 00:00:00') { $sorter_time = ceil((strtotime($value['op_sorting_end']) - strtotime($value['op_sorting_start'])) / 60); } else { $sorter_time = 0; } //根据分拣员账号开通时间和订单类型分别计算超时票数 $userInfo = User_Service_User::getByUserId($opSortingUser); $configId = Common_Service_Config::getByAttribute(Order_Service_OrderWorkload::$StandardConfigurationTime['2'], $warehouseId); $configValueInfo = unserialize($configId['config_value']); //培训期 $trainDate = date("Y-m-d H:i:s", strtotime("+10 day", strtotime($userInfo['create_date']))); //试岗期 $try_hillockDate = date("Y-m-d H:i:s", strtotime("+20 day", strtotime($userInfo['create_date']))); //上岗期 $postsDate = date("Y-m-d H:i:s", strtotime("+30 day", strtotime($userInfo['create_date']))); $count_sorter = 0; if ($value['op_sorting_start'] <= $trainDate) { if ((($opOrdersType == 0 && $configValueInfo['trainA']) || ($opOrdersType == 1 && $configValueInfo['trainB']) || ($opOrdersType == 2 && $configValueInfo['trainC'])) <= $sorter_time) { $count_sorter = 1; } } else if ($value['op_sorting_start'] > $trainDate && $value['op_sorting_start'] <= $try_hillockDate) { if ((($opOrdersType == 0 && $configValueInfo['try_hillockA']) || ($opOrdersType == 1 && $configValueInfo['try_hillockB']) || ($opOrdersType == 2 && $configValueInfo['try_hillockC'])) <= $sorter_time) { $count_sorter = 1; } } else if ($value['op_sorting_start'] > $try_hillockDate && $value['op_sorting_start'] <= $postsDate) { if ((($opOrdersType == 0 && $configValueInfo['postsA']) || ($opOrdersType == 1 && $configValueInfo['postsB']) || ($opOrdersType == 2 && $configValueInfo['postsC'])) <= $sorter_time) { $count_sorter = 1; } } else if ($value['op_sorting_start'] > $postsDate) { if ((($opOrdersType == 0 && $configValueInfo['matureA']) || ($opOrdersType == 1 && $configValueInfo['matureB']) || ($opOrdersType == 2 && $configValueInfo['matureC'])) <= $sorter_time) { $count_sorter = 1; } } //根据分拣员和订单类型仓库作为键、组成四维数组,如果有相同的键,就把对应值相加 if (!isset($row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId])) { $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_overtime_qty'] = $count_sorter; $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_more'] = $value['op_more']; $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_wrong'] = $value['op_wrong']; $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_leakage'] = $value['op_leakage']; } else { $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_overtime_qty'] += $count_sorter; $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_more'] += $value['op_more']; $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_wrong'] += $value['op_wrong']; $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_leakage'] += $value['op_leakage']; } $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['ow_total_pickup'] += 1; $row[$opSortingUser . '-' . 2][$opOrdersType][$warehouseId]['total_time'][] = $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['ow_total_pickup'], "ow_type" => $ke, "ow_fast" => min($v['total_time']), "ow_avg" => round(array_sum($v['total_time']) / $v['ow_total_pickup']), "ow_slow" => max($v['total_time']), "ow_orders" => $v['ow_total_pickup'], "ow_overtime_qty" => $v['ow_overtime_qty'], "ow_more" => $v['ow_more'], "ow_wrong" => $v['ow_wrong'], "ow_leakage" => $v['ow_leakage'], "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!