338 lines
12 KiB
PHP
338 lines
12 KiB
PHP
<?php
|
|
/**
|
|
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.cdcloudshop.com
|
|
|
|
* =========================================================
|
|
*/
|
|
namespace addon\stock\model\stock;
|
|
|
|
|
|
use app\model\store\Store;
|
|
use app\model\BaseModel;
|
|
use app\model\system\User;
|
|
|
|
/**
|
|
* 调拨
|
|
*
|
|
* @author Administrator
|
|
*
|
|
*/
|
|
class Allot extends BaseModel
|
|
{
|
|
|
|
/**
|
|
* 新增库存调拨
|
|
* @param $params
|
|
*/
|
|
public function addAllot($params){
|
|
model('stock_allot')->startTrans();
|
|
try {
|
|
$output_store_id = $params['output_store_id'];//出库门店
|
|
$input_store_id = $params['input_store_id'];//入库门店
|
|
$site_id = $params['site_id'];
|
|
$allot_time = $params['allot_time'] ?? time();
|
|
$remark = $params['remark'] ?? '';
|
|
$goods_sku_list = $params['goods_sku_list'];
|
|
|
|
//查询门店名称信息
|
|
$store_model = new Store();
|
|
$output_store_condition = array(
|
|
['store_id', '=', $output_store_id]
|
|
);
|
|
$output_store_info = $store_model->getStoreInfo($output_store_condition)['data'] ?? [];
|
|
if (empty($output_store_info))
|
|
return $this->success([], '找不到所选的门店');
|
|
|
|
$output_store_name = $output_store_info['store_name'] ?? '';
|
|
$input_store_condition = array(
|
|
['store_id', '=', $input_store_id]
|
|
);
|
|
$input_store_info = $store_model->getStoreInfo($input_store_condition)['data'] ?? [];
|
|
if (empty($input_store_info))
|
|
return $this->success([], '找不到所选的门店');
|
|
|
|
$operater = $params['operater'];
|
|
|
|
$goods_sku_list_array_result = $this->getSkuArray($goods_sku_list);
|
|
|
|
if ($goods_sku_list_array_result['code'] < 0) {
|
|
model('stock_allot')->rollback();
|
|
return $goods_sku_list_array_result;
|
|
}
|
|
$goods_sku_list_array = $goods_sku_list_array_result['data'];
|
|
$input_store_name = $input_store_info['store_name'] ?? '';
|
|
$allot_no = 'ALLOT' . date('ymdhis', time()) . rand(1111, 9999);
|
|
|
|
$user_model = new User();
|
|
$user_info = $user_model->getUserInfo([['uid', '=', $operater]])['data'] ?? [];
|
|
|
|
$data = array(
|
|
'site_id' => $site_id,
|
|
'output_store_id' => $output_store_id,
|
|
'output_store_name' => $output_store_name,
|
|
'input_store_id' => $input_store_id,
|
|
'input_store_name' => $input_store_name,
|
|
'allot_time' => $allot_time,
|
|
'allot_no' => $allot_no,
|
|
'remark' => $remark,
|
|
'status' => 0,
|
|
'create_time' => time(),
|
|
'operater' => $operater,
|
|
'operater_name' => $user_info['username'] ?? ''
|
|
);
|
|
$allot_id = model('stock_allot')->add($data);
|
|
$common_data = array(
|
|
'site_id' => $site_id,
|
|
'allot_id' => $allot_id,
|
|
'create_time' => time()
|
|
);
|
|
foreach ($goods_sku_list_array as $k => $v) {
|
|
$item_data = array_merge($common_data, $v);
|
|
model('stock_allot_goods')->add($item_data);
|
|
}
|
|
|
|
$result = $this->audit([
|
|
'allot_id' => $allot_id,
|
|
'site_id' => $site_id
|
|
]);
|
|
if ($result['code'] < 0){
|
|
model('stock_allot')->rollback();
|
|
return $result;
|
|
}
|
|
|
|
model('stock_allot')->commit();
|
|
return $this->success();
|
|
}catch (\Exception $e){
|
|
model('stock_allot')->rollback();
|
|
return $this->error('', $e->getMessage().$e->getFile().$e->getLine());
|
|
}
|
|
}
|
|
|
|
public function getSkuArray($goods_sku_list){
|
|
$goods_sku_list_array = [];
|
|
foreach ($goods_sku_list as $k => $goods_sku) {
|
|
$goods_sku_id = $goods_sku['goods_sku_id'] ?? 0;
|
|
if($goods_sku_id <= 0){
|
|
return $this->error([]);
|
|
}
|
|
$goods_sku_info = model('goods_sku')->getInfo([
|
|
'sku_id' => $goods_sku_id
|
|
]);
|
|
$goods_num = $goods_sku['goods_num'] ?? 0;
|
|
if($goods_num <= 0){
|
|
return $this->error([], '商品:'.$goods_sku_info['sku_name'].'调拨数量不能为空!');
|
|
}
|
|
|
|
$goods_sku_list_array[] = [
|
|
'goods_id' => $goods_sku_info['goods_id'],
|
|
'goods_sku_id' => $goods_sku_info['sku_id'],
|
|
'goods_sku_name' => $goods_sku_info['sku_name'],
|
|
'goods_sku_no' => $goods_sku_info['sku_no'],
|
|
'goods_sku_img' => $goods_sku_info['sku_image'],
|
|
'goods_sku_spec' => $goods_sku_info['spec_name'],
|
|
'goods_unit' => $goods_sku_info['unit'] ?? '件',
|
|
'goods_num' => $goods_num,
|
|
'goods_price' => $goods_sku_info['cost_price'],
|
|
'goods_remark' => '',
|
|
];
|
|
}
|
|
|
|
return $this->success($goods_sku_list_array);
|
|
|
|
}
|
|
/**
|
|
* 审核
|
|
* @param $params
|
|
*/
|
|
public function audit($params){
|
|
$site_id = $params['site_id'];
|
|
$allot_id = $params['allot_id'];
|
|
$condition = array(
|
|
['site_id', '=', $site_id],
|
|
['allot_id', '=', $allot_id]
|
|
);
|
|
$info = model('stock_allot')->getInfo($condition);
|
|
if(empty($info)){
|
|
return $this->error([], '调拨单据不存在');
|
|
}
|
|
|
|
$allot_data = array(
|
|
'audit_time' => time(),
|
|
'status' => 2
|
|
);
|
|
|
|
model('stock_allot')->update($allot_data, $condition);
|
|
$result = $this->complete($params);
|
|
if($result['code'] < 0)
|
|
return $result;
|
|
return $this->success();
|
|
|
|
}
|
|
|
|
public function complete($params){
|
|
$allot_id = $params['allot_id'];
|
|
$condition = array(
|
|
['allot_id', '=', $allot_id]
|
|
);
|
|
$info = model('stock_allot')->getInfo($condition);
|
|
if(empty($info)){
|
|
return $this->error([], '调拨单据不存在');
|
|
}
|
|
$result = $this->setStock($info);
|
|
if($result['code'] < 0)
|
|
return $result;
|
|
return $this->success();
|
|
}
|
|
|
|
|
|
/**
|
|
* 整理调拨单据
|
|
* @param $params
|
|
*/
|
|
public function setStock($params){
|
|
$site_id = $params['site_id'];
|
|
$allot_id = $params['allot_id'];
|
|
$allot_goods_condition = array(
|
|
['allot_id', '=', $allot_id]
|
|
);
|
|
$allot_goods_list = model('stock_allot_goods')->getList($allot_goods_condition);
|
|
$output_store_id = $params['output_store_id'];
|
|
$input_store_id = $params['input_store_id'];
|
|
$remark = $params['remark'];
|
|
$allot_time = $params['allot_time'];
|
|
$operater = $params['operater'];
|
|
$operater_name = $params['operater_name'];
|
|
foreach($allot_goods_list as $k => $goods_sku_item){
|
|
$allot_goods_id = $goods_sku_item['allot_goods_id'];
|
|
$item_sku_id = $goods_sku_item['goods_sku_id'];
|
|
$item_goods_id = $goods_sku_item['goods_id'];
|
|
|
|
$goods_num = $goods_sku_item['goods_num'];
|
|
|
|
$sku_condition = array(
|
|
['sku_id', '=', $item_sku_id]
|
|
);
|
|
$goods_sku_info = model('goods_sku')->getInfo($sku_condition);
|
|
|
|
$goods_price = $goods_sku_info['cost_price'];
|
|
$output_store_sku_condition = array(
|
|
['store_id', '=', $output_store_id],
|
|
['goods_id', '=', $item_goods_id],
|
|
['sku_id', '=', $item_sku_id]
|
|
);
|
|
$output_store_sku_info = model('store_goods_sku')->getInfo($output_store_sku_condition);
|
|
|
|
$output_store_stock = $output_store_sku_info['real_stock'] ?? 0;
|
|
$input_store_sku_condition = array(
|
|
['store_id', '=', $input_store_id],
|
|
['goods_id', '=', $item_goods_id],
|
|
['sku_id', '=', $item_sku_id]
|
|
);
|
|
$input_store_sku_info = model('store_goods_sku')->getInfo($input_store_sku_condition);
|
|
|
|
$input_store_stock = $input_store_sku_info['real_stock'] ?? 0;
|
|
$total_goods_money = $goods_num * $goods_price;
|
|
$update_data = array(
|
|
'output_store_stock' => $output_store_stock,
|
|
'input_store_stock' => $input_store_stock,
|
|
'goods_price' => $goods_price,
|
|
'total_goods_money' =>$total_goods_money,
|
|
);
|
|
$update_condition = array(
|
|
['allot_goods_id', '=', $allot_goods_id]
|
|
);
|
|
model('stock_allot_goods')->update($update_data, $update_condition);
|
|
|
|
$goods_money = model('stock_allot_goods')->getSum([ ['site_id', '=', $site_id], ['allot_id', '=', $allot_id] ], 'total_goods_money');
|
|
|
|
model('stock_allot')->update(['goods_money' => $goods_money], [
|
|
['site_id', '=', $site_id],
|
|
['allot_id', '=', $allot_id]
|
|
]);
|
|
|
|
//新增门店出库
|
|
$goods_sku_list = array(
|
|
[
|
|
'goods_sku_id' => $item_sku_id,
|
|
'goods_id' => $item_goods_id,
|
|
'goods_num' => $goods_num,
|
|
'goods_price' => $goods_price
|
|
]
|
|
);
|
|
|
|
$user_info = [
|
|
'uid' => $operater,
|
|
'username' => $operater_name,
|
|
];
|
|
$document_model = new Document();
|
|
$document_params = array(
|
|
'allot_id' => $allot_id,
|
|
'store_id' => $output_store_id,
|
|
'user_info' => $user_info,
|
|
'site_id' => $site_id,
|
|
);
|
|
$document_params['document_type'] = 'ALLOTPUT';
|
|
$document_params['goods_sku_list'] = $goods_sku_list;
|
|
|
|
$out_result = $document_model->addDocument(array_merge($document_params, ['is_out_stock' => 1]));
|
|
if($out_result['code'] < 0){
|
|
return $out_result;
|
|
}
|
|
|
|
$document_params['store_id'] = $input_store_id;
|
|
$document_params['document_type'] = 'ALLOTIN';
|
|
$out_result = $document_model->addDocument($document_params);
|
|
if($out_result['code'] < 0){
|
|
return $out_result;
|
|
}
|
|
}
|
|
|
|
return $this->success();
|
|
}
|
|
|
|
/**
|
|
* 获取调拨单分页列表
|
|
* @param array $condition
|
|
* @param int $page
|
|
* @param int $page_size
|
|
* @param string $order
|
|
* @param string $field
|
|
* @return array
|
|
*/
|
|
public function getStockAllotPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '',$join = '')
|
|
{
|
|
$document_list = model('stock_allot')->pageList($condition, $field, $order, $page, $page_size,$alias,$join);
|
|
return $this->success($document_list);
|
|
}
|
|
|
|
/**单据详情
|
|
* @param array $condition
|
|
* @param string $field
|
|
*/
|
|
public function getAllotInfo($condition = [], $field = '*')
|
|
{
|
|
$info = model('stock_allot')->getInfo($condition, $field);
|
|
if (!empty($info)) {
|
|
//单据产品项
|
|
$goods_list = model('stock_allot_goods')->getList([
|
|
'allot_id' => $info['allot_id']
|
|
]);
|
|
$info['goods_sku_list_array'] = $goods_list;
|
|
$info['goods_piece'] = 0;
|
|
$info['goods_total_price'] = 0.00;
|
|
foreach ( $goods_list as $key => $value) {
|
|
$info['goods_sku_list_array'][$key]['goods_sum'] = floatval($value['goods_num'] * $value['goods_price']);
|
|
$info['goods_piece'] += intval($value['goods_num']);
|
|
$info['goods_total_price'] += $info['goods_sku_list_array'][$key]['goods_sum'];
|
|
}
|
|
$info['goods_count'] = count($info['goods_sku_list_array']);
|
|
}
|
|
return $this->success($info);
|
|
}
|
|
|
|
}
|