123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php defined('BASEPATH') OR exit('No direct script access allowed');
- /**
- * 作为检测车间功效的定时任务
- */
- class Apicjgx extends Start_Controller {
- public function __construct(){
- parent::__construct();
- $this->load->_model('Model_systemtransfer','systemtransfer');
- $this->load->_model("Model_systemtransfer_cr",'systemtransfer_cr');
- $this->load->_model("Model_transfer",'transfer');
- $this->load->_model("Model_fullorder","fullorder");
- $this->load->_model("Model_fullordersmt","fullordersmt");
- $this->load->_model("Model_fullordertt","fullordertt");
- }
- //定义方法的调用规则 获取URI第二段值
- public function _remap($arg,$arg_array)
- {
- if($arg == 'cjgx' ){
- //执行车间效率检测
- $this->_cjgx();
- }else{
- $this->_index();
- }
- }
- public function _index(){
- echo "程序异常";
- }
- public function dd($val){
- echo "<pre>";
- var_dump($val);
- die;
- }
- public function _cjgx(){
- $limit_time = time() - 3600*24*30;
- $list = $this->systemtransfer->find_all("status < 10 and time >= ".$limit_time);
- if(empty($list)){
- die(json_encode(array('code'=>0,'msg'=>'没有需要检测的工单'),JSON_UNESCAPED_UNICODE));
- }
- echo date('Y-m-d H:i:s')."开始执行车间效率检测".PHP_EOL;
- foreach ($list as $val){
- $this->doSingleData($val);
- }
- echo date('Y-m-d H:i:s')."执行车间效率检测结束".PHP_EOL;
-
- }
- //单独处理每个工单的状态判断
- public function doSingleData($info){
- $lbrk = array_reverse(explode('|',trim($info['rk'],'|')));
-
- $lbck = array_reverse(explode('|',trim($info['ck'],'|')));
- //如果是11 说明是成品库 说明已经入库完毕了 表示已经完毕
- if($lbrk[0] == 11){
- $this->checkOver($info['id']);
- return;
- }
- //检测出入库都存在时 是否做过标记 在出库的时候已经同步过了
- if($lbrk[0] == $lbck[0]){
- // if(!in_array($lbrk[0],[11,12,15,16])){
- // $this->checkIsOver($info,$lbrk[0]);
- // return;
- // }
- return ;
- }
- //如果是 成品库 布标打印 发块 滞销款 不做处理 再次判定状态是否是 超时一次 超时两次
- if(!in_array($lbrk[0],[11,12,15,16])){
- $this->jdgeTimeOut($info,$lbrk[0]);
- }
-
- }
- //如果检测到最后的入库是
- /**
- * $id 工单主键id
- */
- public function checkOver($id){
- $this->systemtransfer->save(array('status'=>10),$id);
- $this->load->database();
- //同步表示 此单已经到成品库 完结了
- $this->db->where('fid',$id);
- $this->db->update('systemtransfer_cr',array('is_over'=>3));
- $this->db->affected_rows();
- }
- //检测是否已经完结 如果完结 且已经标记 那么不做处理 如果为做标记 那么就坐下处理
- /**
- * $fid 工单主键id
- * $lx 车间id
- */
- public function checkIsOver($info,$lx){
- $fid = $info['id'];
- $list = $this->systemtransfer_cr->find_all("fid = ".$fid,"*",'id desc',0,2);
- //如果查到的数据小于2 那么就说明此单异常
- if(count($list) < 2){
- //echo json_encode(array('code'=>0,'msg'=>'程序异常','data'=>['info'=>$info,'list'=>$list]),JSON_UNESCAPED_UNICODE);
- return ;
- }
-
- //如果查到的数据不等于指定的车间id 说明程序异常了 先不执行
- if(($list[0]['lx'] != $lx) || ($list[1]['lx'] != $lx)){
- return ;
- }
-
- if(($list[0]['is_over'] == 0) || ($list[1]['is_over'] == 0)){
-
- if($list[1]['orver_flag'] == 2){
- $this->systemtransfer_cr->save(['is_over'=>1,'orver_flag'=>2],$list[0]['id']);
- }else{
- $this->systemtransfer_cr->save(['is_over'=>1],$list[0]['id']);
- }
- $this->systemtransfer_cr->save(['is_over'=>1],$list[1]['id']);
-
- }
-
- return ;
- }
- //判定是否超时
- public function jdgeTimeOut($info,$lx){
- $list = $this->systemtransfer_cr->find_all("fid = ".$info['id'],"*",'id desc',0,1);
- if(empty($list)){
- return ;
- }
- if($list[0]['lx'] != $lx){
- return ;
- }
- //查询流转部分要求
- $depart_info = $this->transfer->find("id = ".$lx);
- if(empty($depart_info)){
- return ;
- }
- $now_time = time();
- $ru_time = $list[0]['time'];//扫描时间
- // $overtime_one = $depart_info['overtime_one'] * 3600;
- // $overtime_two = $depart_info['overtime_two'] * 3600;
- //如果时间节点一样 就不再执行了
- if($depart_info['overtime_one'] == $depart_info['overtime_two']){
- return ;
- }
- $overtime_one = $depart_info['overtime_one'] * 3600 ;
- $overtime_two = $depart_info['overtime_two'] * 3600;
- //不选超时
- if(($now_time - $ru_time) < $overtime_one){
- return ;
- }
- $limit_time = [
- 'overtime_one'=> $depart_info['overtime_one'],
- 'overtime_two'=>$depart_info['overtime_two'],
- ];
-
- $remain_time = $now_time - $ru_time;
-
- $num = $this->weektimes($ru_time , $now_time);
- if($num > 0 ){
- $remain_time = $remain_time - 24 * 3600 * $num;
- }
- //前处理有时间1 就是超时提醒
- // if($lx == 5){
- // //超时一次的
- // if(($now_time - $ru_time) >= $overtime_one ){
- // if($list['0']['orver_flag'] == 0){
- // $this->systemtransfer_cr->save(['orver_flag'=>1,'limit_time_str'=> json_encode($limit_time)],$list['0']['id']);
- // }
- // }
- // }else{
- //超时一次的
- if(( $remain_time) >= $overtime_one && ( $remain_time) < $overtime_two){
- if($list['0']['orver_flag'] == 0){
-
- $type = $this->checkOrderInfo($info['number']);
- if($type == 1){//订单取消了或者其他原因 在没出库的情况下就完成了
- $this->systemtransfer_cr->save(['orver_flag'=>3],$list[0]['id']);
- }elseif($type == 10){
- $this->systemtransfer_cr->save(['orver_flag'=>1,'limit_time_str'=> json_encode($limit_time)],$list[0]['id']);
- }
-
- }
- }
- //超时2次的
- if(( $remain_time) >= $overtime_two){
- if($list[0]['orver_flag'] <= 1){
- //$this->systemtransfer_cr->save(['orver_flag'=>2,'limit_time_str'=> json_encode($limit_time)],$list['0']['id']);
-
- $type = $this->checkOrderInfo($info['number']);
- if($type == 1){//订单取消了或者其他原因 在没出库的情况下就完成了
- $this->systemtransfer_cr->save(['orver_flag'=>3],$list[0]['id']);
- }elseif($type == 10){
- $this->systemtransfer_cr->save(['orver_flag'=>2,'limit_time_str'=> json_encode($limit_time)],$list[0]['id']);
- }else{
- }
- }
- }
- //}
-
- }
- //检测是否含有周日
- protected function weektimes($start_time,$endstime)
- {
- //是否有周六周日
- $week_array = [7, 1, 2, 3, 4, 5, 6];
- $i = 0;
- while ($start_time <= $endstime) {
- $now_time = date('Y-m-d', $start_time);
- // 可根据自己想要的返回格式进行调整
- $alltime[$i]['week'] = $week_array[date("w", strtotime($now_time))];
- $start_time = strtotime('+1 day', $start_time);
- $i++;
- }
- $list = [];
- foreach ($alltime as $key => $value) {
- //周日数组
- if ($value['week'] > 6) {
- $list[] = $value['week'];
- }
- }
-
-
- return count($list);
- }
-
- //检验订单的状态
- protected function checkOrderInfo($number){
- $nu = $this->fullorder->get_number($number);
- if(!$nu)
- {
- $nu = $this->fullordersmt->get_number($number);
- if(!$nu)
- {
- $nu = $this->fullordertt->get_number($number);
- }
- }
- //此单已取消!请联系店员核实
- if($nu['state'] == '214' || $nu['state'] == '217')
- {
- return 1;
- }
- //因为某些原因订单虽然现实是完成 但是实际上是终止了 所以就按照取消计算吧
- // if($nu['state'] == '216' || $nu['state'] == '215')
- // {
- // return 1;
- // }
- return 10;
- }
- }
|