mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-30 21:15:34 +08:00
279 lines
9.4 KiB
PHP
279 lines
9.4 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 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 erpapi_store_response_replenish extends erpapi_store_response_abstract
|
|
{
|
|
|
|
|
|
/**
|
|
* @param 补货单创建 method=store.replenish.add
|
|
* return
|
|
*/
|
|
public function add($params){
|
|
|
|
$this->__apilog['title'] = $this->__channelObj->store['name'].'补货单创建';
|
|
$this->__apilog['original_bn'] = $params['task_bn'];
|
|
|
|
|
|
|
|
|
|
if (!$params['task_bn']) {
|
|
$this->__apilog['result']['msg'] = '缺少补货任务号';
|
|
return false;
|
|
}
|
|
|
|
$suggestMdl = app::get('console')->model("replenish_suggest");
|
|
|
|
|
|
|
|
$suggest = $suggestMdl->db_dump(array('task_bn' => $params['task_bn']),'sug_id');
|
|
|
|
if ($suggest) {
|
|
$this->__apilog['result']['msg'] = sprintf('[%s]补货单已存在', $params['task_bn']);
|
|
return false;
|
|
}
|
|
|
|
if (!$params['store_bn']) {
|
|
$this->__apilog['result']['msg'] = '缺少门店编码';
|
|
return false;
|
|
}
|
|
if (!$params['branch_bn']) {
|
|
$this->__apilog['result']['msg'] = '缺少仓库编码';
|
|
return false;
|
|
}
|
|
|
|
$out_branch_bn = $params['out_branch_bn'];
|
|
if (!$out_branch_bn) {
|
|
$this->__apilog['result']['msg'] = '缺少出货仓库编码';
|
|
return false;
|
|
}
|
|
|
|
if($params['out_branch_bn']==$params['branch_bn']){
|
|
|
|
$this->__apilog['result']['msg'] = 'out_branch_bn和branch_bn不可以是同一个';
|
|
return false;
|
|
}
|
|
|
|
$bill_type = $params['bill_type'];
|
|
$branchMdl = app::get('ome')->model('branch');
|
|
|
|
|
|
$branchs = $branchMdl->db_dump(array('branch_bn' => $params['branch_bn'], 'check_permission' => 'false'), 'branch_id,name,branch_bn,b_type,is_ctrl_store');
|
|
if (!$branchs) {
|
|
$this->__apilog['result']['msg'] = sprintf('仓库[%s]:未维护', $params['branch_bn']);
|
|
return false;
|
|
}
|
|
|
|
//是否管控库存
|
|
if ($branchs && $branchs['is_ctrl_store'] != '1') {
|
|
$this->__apilog['result']['msg'] = sprintf('仓库[%s]:不管控库存', $params['branch_bn']);
|
|
return false;
|
|
}
|
|
|
|
// 明细处理
|
|
$items = @json_decode($params['items'], true);
|
|
if (!$items) {
|
|
$this->__apilog['result']['msg'] = '缺少调拨明细';
|
|
return false;
|
|
}
|
|
|
|
$bn_list = array();
|
|
foreach ((array)$items as $key => $value) {
|
|
|
|
if (!$value['bn'] && !$value['barcode']) {
|
|
$this->__apilog['result']['msg'] = sprintf('行明细[%s]:物料编码或条码至少有一个', $key);
|
|
return false;
|
|
}
|
|
|
|
if($value['barcode'] && empty($value['bn'])){
|
|
$bn = kernel::single('material_codebase')->getBnBybarcode($value['barcode']);
|
|
$items[$key]['bn'] = $bn;
|
|
$value['bn'] = $bn;
|
|
if(empty($bn)){
|
|
$this->__apilog['result']['msg'] = sprintf('行明细[%s]:条码不存在', $key);
|
|
return false;
|
|
}
|
|
}
|
|
if (!is_numeric($value['nums']) || $value['nums'] <= 0) {
|
|
$this->__apilog['result']['msg'] = sprintf('行明细[%s]:数量异常', $key);
|
|
return false;
|
|
}
|
|
|
|
$bn_list[] = $value['bn'];
|
|
}
|
|
|
|
$bm_list = app::get('material')->model('basic_material')->getList('bm_id,material_bn,material_name', array('material_bn' => $bn_list));
|
|
|
|
$bm_list = array_column($bm_list, null, 'material_bn');
|
|
$bm_id_list = array_column($bm_list, 'bm_id');
|
|
|
|
$storeMdl = app::get('o2o')->model('store');
|
|
$physics = $storeMdl->db_dump(array('store_bn' => $params['store_bn']),'store_id');
|
|
|
|
|
|
$outBranch = $branchMdl->db_dump(array('branch_bn'=>$out_branch_bn, 'check_permission'=> 'false'), 'branch_id,name,branch_bn');
|
|
|
|
if($outBranch){
|
|
$bpModel = app::get('ome')->model('branch_product');
|
|
|
|
$product_store = array();
|
|
foreach($bpModel->getList('product_id,branch_id,store,store_freeze', array('product_id' => $bm_id_list, 'branch_id' => $outBranch['branch_id'])) as $value){
|
|
|
|
$product_store[$value['branch_id']][$value['product_id']] = $value['store'] - $value['store_freeze'];
|
|
}
|
|
|
|
foreach ((array)$items as $key => $value) {
|
|
$bm_id = $bm_list[$value['bn']]['bm_id'];
|
|
$material_name = $bm_list[$value['bn']]['material_name'];
|
|
|
|
|
|
if ($value['nums'] > $product_store[$outBranch['branch_id']][$bm_id]) {
|
|
$this->__apilog['result']['msg'] = sprintf('[%s]:库存不足', $value['bn']);
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
$product_amount = 0;
|
|
// 判断出货仓是否有库存
|
|
foreach ((array)$items as $key => $value) {
|
|
$bm_id = $bm_list[$value['bn']]['bm_id'];
|
|
$material_name = $bm_list[$value['bn']]['material_name'];
|
|
|
|
if (!$bm_id) {
|
|
$this->__apilog['result']['msg'] = sprintf('行明细物料[%s]:未维护', $key);
|
|
|
|
return false;
|
|
}
|
|
|
|
$items[$key]['product_id'] = $bm_id;
|
|
$items[$key]['material_name'] = $material_name;
|
|
$items[$key]['material_bn'] = $value['bn'];
|
|
|
|
$items[$key]['nums'] = $value['nums'];
|
|
$items[$key]['price'] = $value['price'];
|
|
$product_amount+=$value['nums']*$value['price'];
|
|
}
|
|
|
|
$data = array(
|
|
'task_bn' => $params['task_bn'],
|
|
'apply_name' => $params['apply_name'],
|
|
'store_bn' => $params['store_bn'],
|
|
'branch_id' => $branchs['branch_id'],
|
|
'physics_id' => $physics['store_id'],
|
|
'source' => 'pos',
|
|
'memo' => $params['memo'],
|
|
'items' => $items,
|
|
'bill_type' => $bill_type,
|
|
'product_amount' => $product_amount,
|
|
'out_branch_bn' => $out_branch_bn,
|
|
'out_branch_id' => $outBranch['branch_id'],
|
|
'check_auto' => $params['check_auto'],
|
|
);
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* listing
|
|
* @param mixed $params 参数
|
|
* @return mixed 返回值
|
|
*/
|
|
public function listing($params){
|
|
$this->__apilog['title'] = '订货单查询接口';
|
|
$this->__apilog['original_bn'] = $this->__channelObj->store['server_bn'];
|
|
|
|
if(empty($params['task_bn']) && empty($params['start_time']) && empty($params['end_time'])){
|
|
|
|
$this->__apilog['result']['msg'] = '查询条件里任务号或者时间至少有一个不为空!';
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($params['start_time'] && !strtotime($params['start_time'])) {
|
|
$this->__apilog['result']['msg'] = '开始时间格式不正确';
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($params['end_time'] && !strtotime($params['end_time'])) {
|
|
$this->__apilog['result']['msg'] = '结束时间格式不正确';
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($params['page_size'] <= 0 || $params['page_size'] > 100) {
|
|
$this->__apilog['result']['msg'] = '每页数量必须大于0小于等于100';
|
|
return false;
|
|
}
|
|
|
|
if ($params['page_no'] <= 0) {
|
|
$this->__apilog['result']['msg'] = '页码必须大于0';
|
|
return false;
|
|
}
|
|
|
|
$task_bn = $params['task_bn'];
|
|
|
|
if($task_bn){
|
|
$filter = [
|
|
'task_bn' => $task_bn,
|
|
];
|
|
|
|
}else{
|
|
$filter = [
|
|
'create_time|between' => [
|
|
strtotime($params['start_time']),
|
|
strtotime($params['end_time']),
|
|
],
|
|
|
|
];
|
|
}
|
|
|
|
if (!$params['store_bn']){
|
|
//$this->__apilog['result']['msg'] = '缺少门店编码';
|
|
//return false;
|
|
}
|
|
if ($params['store_bn']){
|
|
$branch = $this->getBranchIdByBn($params['store_bn']);
|
|
if (!$branch){
|
|
$this->__apilog['result']['msg'] = sprintf('[%s]门店不存在', $params['store_bn']);
|
|
return false;
|
|
}
|
|
$branch_id = $branch['branch_id'];
|
|
|
|
}
|
|
|
|
if($branch_id){
|
|
$filter['branch_id'] = $branch_id;
|
|
}
|
|
|
|
|
|
$limit = $params['page_size'];
|
|
$offset = ($params['page_no'] - 1) * $limit;
|
|
|
|
return ['filter' => $filter, 'limit' => $limit, 'offset' => $offset];
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
?>
|