273 lines
8.6 KiB
PHP
273 lines
8.6 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace app\api\controller;
|
||
|
|
|
||
|
|
use app\api\model\AgvModel;
|
||
|
|
use app\api\model\BatchtaskModel;
|
||
|
|
use app\api\model\BusDev;
|
||
|
|
|
||
|
|
use app\api\model\ErpModel;
|
||
|
|
use think\Controller;
|
||
|
|
use think\Db;
|
||
|
|
use think\Log;
|
||
|
|
use think\Request;
|
||
|
|
use app\api\controller\Agv;
|
||
|
|
use app\api\controller\Wcs;
|
||
|
|
use app\api\controller\Fast;
|
||
|
|
use app\api\controller\Wms;
|
||
|
|
use app\api\model\PackageInfo;
|
||
|
|
|
||
|
|
|
||
|
|
header("Access-Control-Allow-Origin:*");
|
||
|
|
header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");
|
||
|
|
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
|
||
|
|
|
||
|
|
|
||
|
|
class Test extends Common
|
||
|
|
{
|
||
|
|
|
||
|
|
public function GetPackageInfo()
|
||
|
|
{
|
||
|
|
$batch = db('runtime_info')->where('name', 'like', 'cur_batch_no')->find();
|
||
|
|
$package = db('runtime_info')->where('name', 'like', 'cur_package_no')->find();
|
||
|
|
|
||
|
|
dump($batch['value']);
|
||
|
|
dump(intval($package['value']));
|
||
|
|
|
||
|
|
$fresh['value'] = intval($package['value']+1)."";
|
||
|
|
$fresh['id'] = $package['id'];
|
||
|
|
$package = db('runtime_info')->update($fresh);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function test()
|
||
|
|
{
|
||
|
|
// 查找空巷道
|
||
|
|
$emptyChannels = db('storage_area')->alias('sa')
|
||
|
|
->leftJoin('storage_bin sp', 'sa.id=sp.area_id')
|
||
|
|
->whereNull('sp.id') // 找到没有关联的 storage_bin 的 storage_area
|
||
|
|
->select();
|
||
|
|
|
||
|
|
dump($emptyChannels);
|
||
|
|
// if (!empty($emptyChannels)) {
|
||
|
|
// dump('找到了空巷道');
|
||
|
|
// foreach ($emptyChannels as $emptyChannel) {
|
||
|
|
// $name = $emptyChannel['name'];
|
||
|
|
// db('runtime_info')->where('name', 'in_store_tunnel')->update(['value' => $name]);
|
||
|
|
// break;
|
||
|
|
// }
|
||
|
|
// } else {
|
||
|
|
// dump('没有找到空巷道');
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
|
||
|
|
public function Move()
|
||
|
|
{
|
||
|
|
$this->BackStore(22940, 2);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function CreateProduct()
|
||
|
|
{
|
||
|
|
$this->CreateProductInfo("1ewq23", "fsdf", 34682, 72544, 3);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function CreateProductInfo($batch, $number, $x, $y, $layer)
|
||
|
|
{
|
||
|
|
$bin = db('storage_bin')->where('pos_x', $x)->where('pos_z', $y)->find();
|
||
|
|
if ($bin == null)return;
|
||
|
|
|
||
|
|
$insert = [];
|
||
|
|
$insert['batch'] = $batch;
|
||
|
|
$insert['identifier'] = $number;
|
||
|
|
$insert['channel'] = $bin['area_id'];
|
||
|
|
$insert['bin'] = $bin['id'];
|
||
|
|
$insert['layer'] = $layer;
|
||
|
|
$insert['inTime'] = date('Y-m-d H:i:s', time());
|
||
|
|
|
||
|
|
db('storage_package')->insert($insert);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//移库
|
||
|
|
public function BeginMove($x, $y)
|
||
|
|
{
|
||
|
|
//查找出待出库的产品信息
|
||
|
|
$product_info = db('storage_package')->alias('p')
|
||
|
|
->join("storage_bin b",'p.bin=b.id')
|
||
|
|
->where('b.pos_x', $x)->where('b.pos_z', $y)
|
||
|
|
->where('p.inTime', '>', 0) //入库时间
|
||
|
|
->where('p.channel', '>', 0) //入库巷道
|
||
|
|
->where('p.outTime', NULL) //出库时间
|
||
|
|
->field('p.id, p.outTime, p.batch, p.identifier, p.layer')
|
||
|
|
->select();
|
||
|
|
|
||
|
|
|
||
|
|
//更新出储位时间
|
||
|
|
$curtime = date('Y-m-d H:i:s', time());
|
||
|
|
for ($i=0; $i<count($product_info); $i++)
|
||
|
|
{
|
||
|
|
$product_info[$i]['outTime'] = $curtime;
|
||
|
|
}
|
||
|
|
$packageInfo = new PackageInfo();
|
||
|
|
$packageInfo->saveAll($product_info);
|
||
|
|
|
||
|
|
$ids = [];
|
||
|
|
//生成新的存储信息, 去掉入库出库时间,存储巷道和库位,等入储位时更新
|
||
|
|
for ($i=0; $i<count($product_info); $i++)
|
||
|
|
{
|
||
|
|
unset( $product_info[$i]['id']);
|
||
|
|
unset( $product_info[$i]['outTime']);
|
||
|
|
$id = db('storage_package')->insertGetId($product_info[$i]);
|
||
|
|
$ids[] = $id;
|
||
|
|
}
|
||
|
|
|
||
|
|
return implode(',' , $ids);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function EndMove($x, $y, $idArray)
|
||
|
|
{
|
||
|
|
|
||
|
|
$bin = db('storage_bin')->where('pos_x', $x)->where('pos_z', $y)->find();
|
||
|
|
if ($bin == NULL)return;
|
||
|
|
|
||
|
|
|
||
|
|
$idarr = explode(',',$idArray);
|
||
|
|
|
||
|
|
$curtime = date('Y-m-d H:i:s', time());
|
||
|
|
|
||
|
|
$update['inTime'] = $curtime;
|
||
|
|
$update['channel'] = $bin['area_id'];
|
||
|
|
$update['bin'] = $bin['id'];
|
||
|
|
|
||
|
|
|
||
|
|
dump($update);
|
||
|
|
for ($i=0; $i<count($idarr); $i++)
|
||
|
|
{
|
||
|
|
$update['id'] = intval($idarr[$i]);
|
||
|
|
|
||
|
|
db('storage_package')->update($update);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
//移库
|
||
|
|
public function BackStore($binno, $count)
|
||
|
|
{
|
||
|
|
//设置库位剩余个数
|
||
|
|
$update['state'] = $count;
|
||
|
|
$update['id'] = $binno;
|
||
|
|
|
||
|
|
db('storage_bin')->update($update);
|
||
|
|
|
||
|
|
|
||
|
|
//更新产品出库信息
|
||
|
|
$product_info = db('storage_package')
|
||
|
|
->where('bin', $binno)
|
||
|
|
->where('inTime', '>', 0) //入库时间
|
||
|
|
->where('channel', '>', 0) //入库巷道
|
||
|
|
->where('outTime', NULL) //出库时间
|
||
|
|
->field('id, outTime, batch, identifier, layer')
|
||
|
|
->select();
|
||
|
|
|
||
|
|
for ($i=0; $i<count($product_info); $i++)
|
||
|
|
{
|
||
|
|
if ($i>($count-1))
|
||
|
|
{
|
||
|
|
$product_info[$i]['outTime'] = date('Y-m-d H:i:s', time());
|
||
|
|
db('storage_package')->where('id', $product_info[$i]['id'])->update($product_info[$i]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return ;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function getOutStoreTaskInfoTest()
|
||
|
|
{
|
||
|
|
$postData = request()->post();
|
||
|
|
$batch = $postData['batch'];
|
||
|
|
|
||
|
|
$package_count = 6;
|
||
|
|
|
||
|
|
// 3.1 获取巷道号
|
||
|
|
$channel_arr = db('storage_package')
|
||
|
|
//->field('channel')
|
||
|
|
->where('batch',$batch)
|
||
|
|
->where('outTime',null)
|
||
|
|
->group('channel')
|
||
|
|
->column('channel');
|
||
|
|
|
||
|
|
// 3.2 获取巷道号内的所有拖
|
||
|
|
$bin_arr = db('storage_package')->alias('sp')
|
||
|
|
->field('ANY_VALUE(sp.batch) AS batch,sp.bin,count(sp.id) AS count,sb.area_id,sb.area_idx,sb.state')
|
||
|
|
->join("sh_storage_bin sb", 'sp.bin = sb.id','LEFT')
|
||
|
|
->where('sp.channel','IN',$channel_arr)
|
||
|
|
->where('outTime',null)
|
||
|
|
->group('sp.bin')
|
||
|
|
->order('sb.area_id,sb.area_idx')
|
||
|
|
->select();
|
||
|
|
// halt($package_arr);
|
||
|
|
|
||
|
|
// 5. 批量生成任务
|
||
|
|
$batchtaskModel = new BatchtaskModel();
|
||
|
|
$sale_no = "12345";
|
||
|
|
|
||
|
|
$total_count = 0;
|
||
|
|
$tmp_data = [];
|
||
|
|
$tmp_cnt = 0;
|
||
|
|
foreach ($bin_arr as $key=>$vo){
|
||
|
|
echo "<br/>===$key===<br/>";
|
||
|
|
if(0 == $key)$tmp_data = $vo;
|
||
|
|
// 遇到下一个巷道、者批次号不同或者最后一条数据时,写入批次任务
|
||
|
|
if($tmp_data['area_id'] != $vo['area_id'] || $tmp_data['batch'] != $vo['batch']){
|
||
|
|
echo "<br/>***$key***<br/>";
|
||
|
|
if($batch == $tmp_data['batch'])$task_type = 'OUT_STORE';
|
||
|
|
else $task_type = 'CHANGE_STORE';
|
||
|
|
$batchtaskModel->CreateBatchTaskRecord($task_type, $sale_no, $tmp_data['area_id'], '', $tmp_cnt);
|
||
|
|
|
||
|
|
$tmp_cnt = 0;
|
||
|
|
}
|
||
|
|
$tmp_data = $vo;
|
||
|
|
$tmp_cnt ++;
|
||
|
|
|
||
|
|
if($total_count >= $package_count)break;
|
||
|
|
if($batch == $vo['batch']) { //非出库批次需要倒库,创建倒库任务
|
||
|
|
$total_count += $vo['count'];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->sendSuccess();
|
||
|
|
}
|
||
|
|
|
||
|
|
public function batchTaskTest()
|
||
|
|
{
|
||
|
|
|
||
|
|
$sale_no = db('runtime_info')->where('name', 'cur_idlsid')->find();
|
||
|
|
$batch_task = db('forklift_task')
|
||
|
|
->where('sale_no', $sale_no['value'])
|
||
|
|
->order('id DESC')->limit(1)->find();
|
||
|
|
// halt($batch_task);
|
||
|
|
|
||
|
|
|
||
|
|
if(!$batch_task || ($batch_task && 'FORKLIFT_LEAVE' == $batch_task['taskState'])){
|
||
|
|
$batchtaskModel = new BatchtaskModel();
|
||
|
|
$state = "12002000000";
|
||
|
|
$batchtaskModel->CheckBatchTask($state);
|
||
|
|
}
|
||
|
|
return $this->sendSuccess();
|
||
|
|
}
|
||
|
|
|
||
|
|
public function test1()
|
||
|
|
{
|
||
|
|
// $batchtaskModel = new BatchtaskModel();
|
||
|
|
// $endPos = $batchtaskModel->get_in_channel_no(5);
|
||
|
|
// halt($endPos);
|
||
|
|
$packageInfoModel = new PackageInfo();
|
||
|
|
$packageInfoModel->updateBinLockStatus(31, "070146AA058753", 1);
|
||
|
|
// $ret = $packageInfoModel->getBinLockStatus("071701AA055827");
|
||
|
|
// halt($ret);
|
||
|
|
return $this->sendSuccess();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|