mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 02:45:33 +08:00
273 lines
11 KiB
PHP
273 lines
11 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
class tgkpi_ctl_admin_pick extends desktop_controller{
|
|
var $name = "拣货绩效";
|
|
var $workground = "pick";
|
|
|
|
function index(){
|
|
//$this->app->model($this->workground)->check_delivery(4839);
|
|
//app::get('ome')->model('orders')->create_order();
|
|
$this->page('admin/pick.html');
|
|
}
|
|
|
|
// 查询工号是否存在
|
|
function get_op_info(){
|
|
$pick_owner = strtoupper(trim($_POST['pick_owner']));
|
|
|
|
$oUser = app::get('desktop')->model('users');
|
|
$user = $oUser->dump(array('op_no'=>$pick_owner),'name');
|
|
if(!$user) {
|
|
echo('no user');
|
|
exit();
|
|
}
|
|
|
|
//查询需要捡货数和已完成数
|
|
//$oPick = $this->app->model('pick');
|
|
//$picks = $oPick->getList('pick_status,delivery_id',array('pick_owner'=>$pick_owner,'pick_start_time'=>array(strtotime(date('Y-m-d')),time())));
|
|
$sql = "SELECT pick_status,delivery_id FROM sdb_tgkpi_pick
|
|
WHERE pick_owner='$pick_owner' AND (pick_start_time BETWEEN '".strtotime(date('Y-m-d'))."' AND '".time()."')";
|
|
$picks = kernel::database()->select($sql);
|
|
|
|
//增加了检货人姓名的输出
|
|
$arr = array('running'=>0,'finish'=>0, 'name' => $user['name']);
|
|
|
|
//增加前台输出检货人姓名
|
|
$delivery_ids = array();
|
|
foreach((array)$picks as $v) {
|
|
if(in_array($v['delivery_id'],$delivery_ids)) continue;
|
|
$delivery_ids[] = $v['delivery_id'];
|
|
$arr[$v['pick_status']] ++;
|
|
}
|
|
$rs = json_encode($arr);
|
|
echo($rs);
|
|
}
|
|
|
|
// 根据快递单号获取发货单列表
|
|
function get_delivery(){
|
|
$logi_no = $_POST['logi_no'];
|
|
$pick_owner = strtoupper(trim($_POST['pick_owner']));
|
|
$in_type = $_POST['in_type'];
|
|
|
|
// 单个录入
|
|
$dlyBillLib = kernel::single('wms_delivery_bill');
|
|
|
|
$delivery_id = $dlyBillLib->getDeliveryIdByPrimaryLogi($logi_no);
|
|
if(!$delivery_id){
|
|
$result['fail'] = array(
|
|
array('logi_no'=>$logi_no,'msg'=>'快递单号不存在!'),
|
|
);
|
|
echo json_encode($result);
|
|
exit;
|
|
}
|
|
|
|
$oDelivery = app::get('wms')->model('delivery');
|
|
$rs = $oDelivery->getList('delivery_bn,logi_name,delivery_id,itemNum,skuNum',array('delivery_id'=>$delivery_id),0,1);
|
|
|
|
if($rs){
|
|
if (in_array($rs[0]['status'],array('cancel','stop','back','return_back')) || $rs[0]['pause']=='true') {
|
|
$result['fail'] = array(
|
|
array('logi_no'=>$logi_no,'msg'=>'请确认当前发货单状态是否异常!'),
|
|
);
|
|
echo json_encode($result);
|
|
exit;
|
|
}else{
|
|
$delivery_ids[] = $rs[0]['delivery_id'];
|
|
$oPrintQueue = app::get('ome')->model('print_queue_items');
|
|
$ident = $oPrintQueue->dump(array('delivery_id'=>$rs[0]['delivery_id']),'ident,ident_dly');
|
|
if($ident){
|
|
$rs[0]['ident'] = $ident['ident'].'_'.$ident['ident_dly'];
|
|
}
|
|
$rs[0]["logi_no"] = $logi_no;
|
|
}
|
|
|
|
}else{
|
|
$result['fail'] = array(
|
|
array('logi_no'=>$logi_no,'msg'=>'快递单号不存在!'),
|
|
);
|
|
echo json_encode($result);
|
|
exit;
|
|
}
|
|
|
|
// 批次录入
|
|
if($in_type == 'batch' && $ident['ident']) {
|
|
$dly_bns = $oPrintQueue->getList('*',array('ident'=>$ident['ident']));
|
|
foreach((array)$dly_bns as $v) {
|
|
$ids[] = $v['delivery_id'];
|
|
$printIdents[$v['delivery_id']] = $v['ident'].'_'.$v['ident_dly'];
|
|
}
|
|
if($dly_bns){
|
|
$rs = $oDelivery->getList('delivery_bn,logi_name,delivery_id,itemNum,skuNum',array('delivery_id'=>$ids));
|
|
foreach((array)$rs as $k=>$v) {
|
|
$rs[$k]['ident'] = $printIdents[$v['delivery_id']];
|
|
$delivery_ids[] = $v['delivery_id'];
|
|
|
|
$logi_no = $dlyBillLib->getPrimaryLogiNoById($v['delivery_id']);
|
|
$rs[$k]['logi_no'] = $logi_no;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 根据delivery_id检测发货单是否已经录入
|
|
$oPick = $this->app->model('pick');
|
|
$picks = $oPick->getList('delivery_id',array('delivery_id'=>$delivery_ids));
|
|
if ($picks) {
|
|
foreach((array)$picks as $v) {
|
|
$exist_delivery_ids[] = $v['delivery_id'];
|
|
}
|
|
foreach((array)$rs as $k=>$v) {
|
|
if(in_array($v['delivery_id'],$exist_delivery_ids)){
|
|
$result['fail'][] = array('logi_no'=>$v['logi_no'],'msg'=>'快递单号已经录入!');
|
|
unset($rs[$k]);
|
|
}
|
|
}
|
|
}
|
|
$result['succ'] = $rs;
|
|
echo json_encode($result);exit;
|
|
/*
|
|
if(!$rs) {
|
|
$rs = '404';
|
|
}else{
|
|
$rs = json_encode($rs);
|
|
}
|
|
echo($rs);*/
|
|
}
|
|
|
|
// 保存捡货关联数据
|
|
function save(){
|
|
$pick_owner = strtoupper(trim($_POST['pick_owner']));//工号
|
|
$delivery_ids = $_POST['delivery_id'];
|
|
|
|
if (!$pick_owner || !$delivery_ids) {
|
|
$this->redirect('index.php?app=tgkpi&ctl=admin_pick&act=index');
|
|
}
|
|
|
|
$oDeliveryItems = app::get('wms')->model('delivery_items');
|
|
$oDelivery = app::get('wms')->model('delivery');
|
|
|
|
$oPick = $this->app->model('pick');
|
|
$opObj = app::get('ome')->model('operation_log');
|
|
$printIdentsObj = app::get('ome')->model('print_queue_items');
|
|
|
|
// 发货单信息
|
|
$delivery_items = $oDeliveryItems->getList('*',array('delivery_id'=>$delivery_ids));
|
|
foreach((array)$delivery_items as $v) {
|
|
$product_ids[] = $v['product_id'];
|
|
}
|
|
|
|
// 获取skuNum 和 itemNum
|
|
$rs = $oDelivery->getList('skuNum,itemNum,delivery_id',array('delivery_id'=>$delivery_ids));
|
|
foreach((array)$rs as $v) {
|
|
$deliverys[$v['delivery_id']] = $v;
|
|
}
|
|
unset($rs);
|
|
|
|
// 获取商品的 product_pick_level
|
|
/*
|
|
$rs = $oDelivery->getList('product_pick_level,product_id',array('product_id'=>$product_ids));
|
|
foreach((array)$rs as $v) {
|
|
$pick_levels[$v['product_id']] = $v;
|
|
}
|
|
unset($rs);
|
|
*/
|
|
|
|
// 获取商品的 product_pick_level
|
|
$rs = $printIdentsObj->getList('*',array('delivery_id'=>$delivery_ids));
|
|
foreach((array)$rs as $v) {
|
|
$printIdents[$v['delivery_id']] = $v;
|
|
}
|
|
unset($rs);
|
|
|
|
$logIds = array();
|
|
foreach((array)$delivery_items as $v) {
|
|
$rs['product_id'] = $v['product_id'];
|
|
$rs['product_bn'] = $v['bn'];
|
|
if(!$pick_levels[$v['product_id']]) $pick_levels[$v['product_id']] = 1;//默认捡货难度为1
|
|
$rs['product_pick_level'] = $pick_levels[$v['product_id']];
|
|
$rs['pick_num'] = $v['number'];
|
|
$rs['pick_owner'] = $pick_owner;
|
|
$rs['pick_start_time'] = time();
|
|
//$rs['pick_end_time'] = time();
|
|
$rs['pick_error_num'] = 0;
|
|
$rs['pick_status'] = 'running';
|
|
$rs['delivery_id'] = $v['delivery_id'];
|
|
$rs['print_ident'] = $printIdents[$v['delivery_id']]['ident'];
|
|
$rs['print_ident_dly'] = $printIdents[$v['delivery_id']]['ident_dly'];
|
|
$rs['delivery_sku_num'] = $deliverys[$v['delivery_id']]['skuNum'];
|
|
$_op_name = $opObj->getList('op_name',array('obj_id'=>$v['delivery_id'],'operation'=>'delivery_process@ome'));
|
|
if($_op_name[0]['op_name']){
|
|
#存在最终发货人,则属于发货完成的
|
|
$rs['pick_status'] = 'deliveryed';
|
|
$rs['op_name'] = $_op_name[0]['op_name'];
|
|
}
|
|
//$rs['branch_id'] = $v['000000000000'];
|
|
//$rs['pos_id'] = $v['000000000000'];
|
|
//$rs['branch_pos_position'] = $v['000000000000'];
|
|
// product_id 和 delivery_id 保持唯一性
|
|
if($oPick->count(array('product_id'=>$rs['product_id'],'delivery_id'=>$rs['delivery_id'])) == 0) {
|
|
$oPick->insert($rs);
|
|
|
|
//增加发货单捡货开始日志
|
|
if(!in_array($v['delivery_id'],$logIds)){
|
|
if (!empty($pick_owner)){
|
|
$pickUser = app::get('desktop')->model('users')->dump(array('op_no'=>$pick_owner), 'name');
|
|
}
|
|
|
|
$msg = $pickUser['name'].'(工号:'.$pick_owner.')开始拣货';
|
|
$opObj->write_log('delivery_pick@wms', $v['delivery_id'], $msg);
|
|
$logIds[$v['delivery_id']] = $v['delivery_id'];
|
|
}
|
|
}
|
|
unset($rs);
|
|
}
|
|
//echo('<pre>');var_dump($delivery_items);
|
|
die('<script>window.location="?app=tgkpi&ctl=admin_pick&act=index";</script>');
|
|
}
|
|
|
|
/**
|
|
* 设置CheckFail
|
|
* @return mixed 返回操作结果
|
|
*/
|
|
public function setCheckFail(){
|
|
if($_POST){
|
|
$pickObj = $this->app->model('pick');
|
|
$memoObj = $this->app->model('check_memo');
|
|
$opInfo = kernel::single('ome_func')->getDesktopUser();
|
|
|
|
$pickObj->update(array('check_start_time'=>null,'check_op_id'=>null,'check_op_name'=>null,'cost_time'=>null,'pick_status'=>'running'),array('delivery_id'=>$_POST['delivery_id']));
|
|
|
|
$data = array(
|
|
'delivery_id' => $_POST['delivery_id'],
|
|
'check_op_id' => $opInfo['op_id'],
|
|
'check_op_name' => $opInfo['op_name'],
|
|
'reason_id' => $_POST['memo_id'],
|
|
'memo' => $_POST['memo'],
|
|
'addtime' => time(),
|
|
);
|
|
$memoObj->save($data);
|
|
exit;
|
|
}else{
|
|
$reasonObj = $this->app->model('reason');
|
|
$reasonInfos = $reasonObj->getList('reason_id,reason_memo',null,0,-1);
|
|
$this->pagedata['reasonInfos'] = $reasonInfos;
|
|
$this->pagedata['delivery_id'] = $_GET['id'];
|
|
$this->pagedata['url'] = $_GET['rurl'];
|
|
$this->page("admin/check_fail_memo.html");
|
|
}
|
|
}
|
|
}
|