'拣货员工号', 'check_op_id' => '校验员名称', 'product_bn' => '货号', 'delivery_bn' => '发货单', 'logi_no' => '物流单号', ); } function modifier_cost_time($row){ $hour = floor($row/3600); $min = floor(($row-$hour*3600)/60); $sec = $row-$hour*3600-$min*60; $str =''; $str = $hour>0 ? $hour."小时" : ''; $str.= $min>0 ? $min."分" : ''; $str.= $sec>0 ? $sec."秒" : ''; return $str; } function modifier_check_cost_time($row){ $hour = floor($row/3600); $min = floor(($row-$hour*3600)/60); $sec = $row-$hour*3600-$min*60; $str =''; $str = $hour>0 ? $hour."小时" : ''; $str.= $min>0 ? $min."分" : ''; $str.= $sec>0 ? $sec."秒" : ''; return $str; } // 记录校验完成的时间 /** * finish_pick * @param mixed $delivery_id ID * @return mixed 返回值 */ public function finish_pick($delivery_id){ $pick_end_time = time(); $pick_status = 'finish'; $sql = "UPDATE sdb_tgkpi_pick SET pick_status='$pick_status',pick_end_time=$pick_end_time,check_cost_time=$pick_end_time-check_start_time WHERE delivery_id=$delivery_id"; $this->db->exec($sql); } //记录校验开始时间 /** * begin_check * @param mixed $delivery_id ID * @return mixed 返回值 */ public function begin_check($delivery_id){ $opInfo = kernel::single('ome_func')->getDesktopUser(); $check_start_time = time(); $sql = "UPDATE sdb_tgkpi_pick SET check_start_time=".$check_start_time.",check_op_id='".$opInfo['op_id']."',check_op_name='".$opInfo['op_name']."',cost_time=".$check_start_time."-pick_start_time WHERE delivery_id=".$delivery_id.""; $this->db->exec($sql); } /** * @description 检验错误 * @access public * @param BigInt $delivery_id 发货单号 * @return void */ public function pick_error($delivery_id,$product_bn) { $sql = 'UPDATE '.$this->table_name(true).' SET pick_error_num=pick_error_num+1 WHERE delivery_id='.$delivery_id.' AND product_bn='.$product_bn; $this->db->exec($sql); //增加发货单捡货完成日志 $opObj = app::get('ome')->model('operation_log'); $opObj->write_log('delivery_pick@ome', $delivery_id, '错拣发货单'.$delivery_id.'中'.$product_bn.'货品'); } function get_picker(){ $sql = "SELECT distinct(pick_owner) FROM sdb_tgkpi_pick"; $rs = $this->db->select($sql); foreach((array)$rs as $v){ $res[] = array( 'type_id'=>$v['pick_owner'], 'name'=>$v['pick_owner'] ); } //var_dump($res); return $res; } function get_deliverys($filter){ //$filter = parent::_filter($filter); $sql = "select count(distinct delivery_id) as total from sdb_tgkpi_pick where (pick_status='finish' or pick_status='deliveryed') AND pick_start_time between ".strtotime($filter['time_from'])." AND ".strtotime($filter['time_to'])." "; //if($filter['pick_nums']) $sql .= ' AND pick_num>100'; //echo('
');var_dump($sql);
$rs = $this->db->select($sql);
return $rs[0]['total'];
}
#获取已经完成发货单量
function get_deliveryed($filter){
$sql = "select
count(distinct delivery_id) as total from sdb_tgkpi_pick
where pick_status='deliveryed' AND pick_start_time between ".strtotime($filter['time_from'])." AND ".strtotime($filter['time_to'])."";
$rs = $this->db->selectRow($sql);
return $rs['total'];
}
function get_pick_nums($filter){
$sql = "select sum(pick_num) as total from sdb_tgkpi_pick
where (pick_status='finish' or pick_status='deliveryed') AND check_start_time between ".strtotime($filter['time_from'])." AND ".strtotime($filter['time_to'])."
";
$rs = $this->db->select($sql);
return $rs[0]['total'];
}
/**
* @description 获取检货图表数据
* @access public
* @param Array $filter
* @return Array
*/
public function getChartData($filter=array())
{
$chartData = array();
$where = array(1);
if (isset($filter['start_time'])) {
$where[] = 'pick_start_time>='.$filter['start_time'];
}
if (isset($filter['end_time'])) {
$where[] = 'pick_start_time<='.$filter['end_time'];
}
// 获取检货员工 as categories
$sql = 'SELECT DISTINCT pick_owner FROM '.$this->table_name(true).' WHERE 1 AND '.implode(' AND ',$where);
$pickers = $this->db->select($sql);
if (empty($pickers)) {
return $chartData;
}
$pickers = array_map('current',$pickers);
//获取拣货员姓名
$sql = 'SELECT name,op_no FROM sdb_desktop_users WHERE op_no in(\''.implode('\',\'',$pickers).'\')';
$pickers = $this->db->select($sql);
// 获取拣货剩余件数、获取剩余单数
$sql = 'SELECT COUNT(DISTINCT delivery_id) AS _ldeliveryId , SUM(pick_num) AS _lpickNum,pick_owner FROM '.$this->table_name(true).' WHERE pick_status=\'running\' AND '.implode(' AND ',$where).' GROUP BY pick_owner';
$lData = $this->db->select($sql);
$_lData = array();
foreach ($lData as $key=>$value) {
$value['pick_owner'] = strtoupper(trim($value['pick_owner']));
$_lData[$value['pick_owner']] = $value;
}
unset($lData);
// 获取拣货完成货品数数、完成单数
$sql = 'SELECT COUNT(DISTINCT delivery_id) AS _fdeliveryId , SUM(pick_num) AS _fpickNum , pick_owner FROM '.$this->table_name(true). ' WHERE (pick_status=\'finish\' or pick_status=\'deliveryed\') AND '.implode(' AND ',$where).' GROUP BY pick_owner';
$fData = $this->db->select($sql);
$_fData = array();
foreach ($fData as $key=>$value) {
$value['pick_owner'] = strtoupper(trim($value['pick_owner']));
$_fData[$value['pick_owner']] = $value;
}
unset($fData);
foreach ($pickers as $key=>$value) {
$value['op_no'] = strtoupper(trim($value['op_no']));
$chartData['categories'][] = $value['name'];
$chartData['series']['fpickNum'][] = $_fData[$value['op_no']]['_fpickNum'] ? intval($_fData[$value['op_no']]['_fpickNum']) : 0;
$chartData['series']['lpickNum'][] = $_lData[$value['op_no']]['_lpickNum'] ? intval($_lData[$value['op_no']]['_lpickNum']) : 0;
$chartData['series']['fdeliveryId'][] = $_fData[$value['op_no']]['_fdeliveryId'] ? intval($_fData[$value['op_no']]['_fdeliveryId']) : 0;
$chartData['series']['ldeliveryId'][] = $_lData[$value['op_no']]['_ldeliveryId'] ? intval($_lData[$value['op_no']]['_ldeliveryId']) : 0;
}
return $chartData;
}
/**
* @description 获取校验图表数据
* @access public
* @param Array $filter
* @return Array
*/
public function getCheckChartData($filter=array())
{
$chartData = array();
$checkers = array();
$where = array(1);
if (isset($filter['start_time'])) {
$where[] = 'pick_start_time>='.$filter['start_time'];
}
if (isset($filter['end_time'])) {
$where[] = 'pick_start_time<='.$filter['end_time'];
}
// 获取校验剩余件数、获取剩余单数
$sql = 'SELECT COUNT(DISTINCT delivery_id) AS _ldeliveryId , SUM(pick_num) AS _lpickNum , check_op_name FROM '.$this->table_name(true).' WHERE pick_status=\'checking\' AND check_op_id >0 AND '.implode(' AND ',$where).' GROUP BY check_op_id';
$lData = $this->db->select($sql);
$_lData = array();
foreach ($lData as $key=>$value) {
$value['check_op_name'] = strtoupper(trim($value['check_op_name']));
$_lData[$value['check_op_name']] = $value;
if(!in_array($value['check_op_name'], $checkers)){
$checkers[] = $value['check_op_name'];
}
}
unset($lData);
// 获取校验完成货品数、完成单数
$sql = 'SELECT COUNT(DISTINCT delivery_id) AS _fdeliveryId , SUM(pick_num) AS _fpickNum , check_op_name FROM '.$this->table_name(true). ' WHERE (pick_status=\'finish\' or pick_status=\'deliveryed\') AND check_op_id >0 AND '.implode(' AND ',$where).' GROUP BY check_op_id';
$fData = $this->db->select($sql);
$_fData = array();
foreach ($fData as $key=>$value) {
$value['check_op_name'] = strtoupper(trim($value['check_op_name']));
$_fData[$value['check_op_name']] = $value;
if(!in_array($value['check_op_name'], $checkers)){
$checkers[] = $value['check_op_name'];
}
}
unset($fData);
foreach ($checkers as $checker) {
$chartData['categories'][] = $checker;
$chartData['series']['fpickNum'][] = $_fData[$checker]['_fpickNum'] ? intval($_fData[$checker]['_fpickNum']) : 0;
$chartData['series']['lpickNum'][] = $_lData[$checker]['_lpickNum'] ? intval($_lData[$checker]['_lpickNum']) : 0;
$chartData['series']['fdeliveryId'][] = $_fData[$checker]['_fdeliveryId'] ? intval($_fData[$checker]['_fdeliveryId']) : 0;
$chartData['series']['ldeliveryId'][] = $_lData[$checker]['_ldeliveryId'] ? intval($_lData[$checker]['_ldeliveryId']) : 0;
}
return $chartData;
}
/**
* _filter
* @param mixed $filter filter
* @param mixed $tableAlias tableAlias
* @param mixed $baseWhere baseWhere
* @return mixed 返回值
*/
public function _filter($filter,$tableAlias=null,$baseWhere=null){
if (isset($filter['delivery_bn']) && !empty($filter['delivery_bn'])){
$deliveryObj = app::get('ome')->model("delivery");
$rows = $deliveryObj->getList('delivery_id',array('delivery_bn'=>$filter['delivery_bn']));
foreach($rows as $row){
$deliveryId[] = $row['delivery_id'];
}
$where .= ' AND delivery_id IN ('.implode(',', $deliveryId).')';
unset($filter['delivery_bn']);
}
if(isset($filter['logi_no']) && !empty($filter['logi_no'])){
$deliveryObj = app::get('ome')->model("delivery");
$rows = $deliveryObj->getList('delivery_id',array('logi_no'=>$filter['logi_no']));
foreach($rows as $row){
$deliveryId[] = $row['delivery_id'];
}
$where .= ' AND delivery_id IN ('.implode(',', $deliveryId).')';
unset($filter['logi_no']);
}
return parent::_filter($filter,$tableAlias,$baseWhere).$where;
}
}