文件
mashangyoujiu/Application/Common/Business/RefuseWarehousing.class.php

586 行
23 KiB
PHP
可执行文件

<?php
namespace Common\Business;
//拒绝入库类
use Common\Model\RefuseWarehousingModel;
use Common\Model\RefuseWarehousingSerialModel;
use Common\Model\RetailMerchantModel;
use Common\Model\RetailStoreModel;
use Common\Model\SaleWarehouseModel;
use Common\Model\SSaleWarehouseModel;
use Common\Model\SStockOutGoodsModel;
use Common\Model\SStockOutOrderModel;
use Common\Model\StockOutGoodsModel;
use Common\Model\StockOutOrderModel;
use Common\Model\SWarehousingRecordModel;
use Think\Exception;
//[1.7.90]
/**
* 拒收入库类
* Class RefuseWarehousing
* @package Common\Business
* [
* 商户与门店的拒收详情导出 merchantRefuseInfoExport
* 拒收商户调拨拒收的订单详情 merchantStockOrderRefuseInfo
* 拒收门店调拨拒收的订单详情 storeStockOrderRefuseInfo
* 商户与门店的拒收列表 RefuseOrderList
* 门店入库单直接拒收的操作 refuseMerchantAllocation
* 门店入库单直接拒收的参数验证 paramVerify
* 商户出库单的商品信息 getStockOrderGoods
* 拒收的商品信息存入记录表 refuseGoodsRecord
* 更新商户与门店出入库订单 modifyOrder
* 拒收商户调拨的商品原路返回的商户仓库入库 warehousingRecord
* 拒收其他门店调拨的商品原路返回的门店入库 storeWarehousingRecord
* ]
*/
class RefuseWarehousing
{
/**
* 拒收详情导出
* @param $id 出库单id
* @param $type 1商户 2门店
* @throws \PHPExcel_Exception
* @throws \PHPExcel_Reader_Exception
* @throws \PHPExcel_Writer_Exception
*/
public function merchantRefuseInfoExport($id, $type)
{
if ($type == 2) {
$info = $this->storeStockOrderRefuseInfo($id); //拒收订单信息
} else {
$info = $this->merchantStockOrderRefuseInfo($id); //拒收订单信息
}
$goodsList = $this->refuseOrderList($id, $type); //拒收商品信息
$fileds_name = "拒收详情导出";
$arr = array(
array('index', '序号'),
array('goods_name', '商品名称'),
array('sku_name', '规格'),
array('goods_number', '货号'),
array('goods_code', '条码'),
array('company', '单位'),
array('sku_num', '规格基数'),
array('stock_price', '出库价'),
array('refuse_num', '数量'),
array('subtotal', '合计'),
array('remarks', '备注'),
);
$str = array();
$str[0] = $fileds_name . ',导出日期:' . date('Y-m-d H:i:s', time());
$str[1] = '出库单号:' . $info['order_number'] . " 出库仓库:" . $info['warehouse'] . " 类型:" . $info['stock_name'] . " 出货方:" . $info['supplier_name'] . " 货至:" . $info['store_name'];
$str[2] = '操作时间:' . $info['refuse_time'] . " 合计:" . $info['refuse_goods_species'] . " 金额:" . strval($info['refuse_total_stock_money']);
$str[3] = "备注:" . $info['remarks'];
detailGetExcel($fileds_name, $arr, $goodsList, $str);
}
/**
* 商户出库单的拒收详情
* @param $id 出库单id
* @return array 出库单信息
*/
public function merchantStockOrderRefuseInfo($id)
{
if (empty($id)) {
return [];
}
try {
$stockOrderModel = new StockOutOrderModel();
$warehouseModel = new SaleWarehouseModel();
$storeModel = new RetailStoreModel();
$merchantModel = new RetailMerchantModel();
$info = $stockOrderModel->getFind(array('id' => $id)); //出库订单详情
$warehouse = $warehouseModel->getFind(array('id' => $info['warehouse_id'])); //仓库名
$info['supplier_name'] = $merchantModel->getFindField(array('id' => $info['merchant_id']), "name");
$info['store_name'] = $storeModel->getFindField(array('id' => $info['store_id']), 'storetag');
$info['operator'] = A('Api/Inventory')->OperatorName($info['operator_id']);
switch ($info['type']) {
case 1:
$info['stock_name'] = '调拨出库后门店拒收的商品';
break;
case 3:
$info['stock_name'] = '申请调拨出库后门店拒收的商品';
break;
}
$info['warehouse'] = $warehouse['name'];
$info['refuse_total_stock_money'] = round($info['refuse_total_stock_money'], 2);
$info['refuse_time'] = date('Y-m-d H:i:s', $info['refuse_time']);
return $info;
} catch (\Exception $e) {
return [];
}
}
/**
* 门店出库单拒收详情
* @param $id
* @return array
*/
public function storeStockOrderRefuseInfo($id)
{
if (empty($id)) {
return [];
}
try {
$stockOrderModel = new SStockOutOrderModel();
$warehouseModel = new SSaleWarehouseModel();
$storeModel = new RetailStoreModel();
$info = $stockOrderModel->getFind(array('id' => $id)); //出库订单详情
$warehouse = $warehouseModel->getFind(array('id' => $info['warehouse_id'])); //仓库名
$info['supplier_name'] = $storeModel->getFindField(array('id' => $info['store_id']), 'storetag');
$info['store_name'] = $storeModel->getFindField(array('id' => $info['transfer_to_store_id']), 'storetag');
$info['operator'] = A('Api/Inventory')->OperatorName($info['operator_id']);
switch ($info['type']) {
case 3:
$info['stock_name'] = '其他门店调拨拒收的商品';
break;
}
$info['warehouse'] = $warehouse['name'];
$info['refuse_total_stock_money'] = round($info['refuse_total_stock_money'], 2);
$info['refuse_time'] = date('Y-m-d H:i:s', $info['refuse_time']);
return $info;
} catch (\Exception $e) {
return [];
}
}
/**
* 拒收列表
* @param $id 出库单id
* @param $type 1拒收商户 2拒收门店
* @return array 拒收商品信息
*/
public function refuseOrderList($id, $type)
{
if (empty($id) || empty($type)) {
return [];
}
switch ($type) {
case 1:
$where['type'] = array('in', '1,2'); //1拒收商户调拨 2拒收申请商户调拨
break;
case 2:
$where['type'] = 3; //3拒收门店调拨
break;
}
$where['stock_out_id'] = $id;
try {
$refuseGoodsModel = new RefuseWarehousingModel();
$list = $refuseGoodsModel->getSelect($where);
if (!empty($list)) {
foreach ($list as $key => &$val) {
$val['index'] = $key + 1;
if ($val['attribute_state'] == 2) {
$val['goods_code'] = $val['sku_code'];
$val['goods_number'] = $val['sku_goods_number'];
}
if (!empty($val['build_date'])) {
$val['build_date'] = date('Y-m-d', $val['build_date']);
}
$val['sku_num'] = round($val['sku_num'], 3);
$val['refuse_num'] = round($val['refuse_num'], 3);
$val['cost_price'] = round($val['cost_price'], 2);
$val['stock_price'] = round($val['stock_price'], 2);
$val['subtotal'] = round($val['subtotal'], 2);
}
}
return $list;
} catch (\Exception $e) {
return [];
}
}
/**
* 门店直接拒绝调拨的入库单
* @param $parameter
* [
* type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库],
* stock_out_id=>出库单id
* warehousing_id=>入库单id
* store_id 门店id
* merchant_id 商户id
* ]
* @return array
* [
* status
* message
* data=>[
* lose=>原路返回失败的商品信息
* refuse_goods_species 拒收商品种数
* refuse_total_stock_money 拒收的出库总金额
* refuse_total_cost_money 拒收的出库成本总金额
* ]
* ]
*/
public function refuseMerchantAllocation($parameter)
{
$verify = $this->paramVerify($parameter); //验证参数
if ($verify['status'] == 0) {
return $verify;
}
$goodsList = $this->getStockOrderGoods($parameter); //获取出库单商品信息
if (empty($goodsList)) {
return ['status' => 0, 'message' => '未找到商品信息'];
}
$parameter['goodsList'] = $goodsList;
M()->startTrans();
$record = $this->refuseGoodsRecord($parameter); //将拒收的商品信息存入拒收记录表
if ($record['status'] != 1) {
M()->rollback();
return ['status' => 0, 'message' => '操作失败'];
}
$lost = $record['data']['lose']; //存入失败的商品
$parameter['refuse_goods_species'] = $record['data']['refuse_goods_species']; //拒收的商品种数
$parameter['refuse_total_stock_money'] = $record['data']['refuse_total_stock_money']; //拒收的出库价合计金额
$parameter['refuse_total_cost_money'] = $record['data']['refuse_total_cost_money']; //拒收成本价
$this->modifyOrder($parameter); //修改出入库订单表
switch ($parameter['type']) {
case 4:
case 6:
$result = $this->warehousingRecord($parameter); //拒收的商品原路返还商户仓库
break;
case 5:
//其他门店调拨
$SStockOrderModel = new SStockOutOrderModel();
$parameter['store_id'] = $SStockOrderModel->getFindField(array('id' => $parameter['stock_out_id']), "store_id");
$result = $this->storeWarehousingRecord($parameter); //拒收商品原路返回调拨门店的仓库
break;
}
M()->commit();
$result['data']['lose'] = array_merge($lost, $result['data']['lose']);
$result['message'] = '拒收成功';
$result['data']['refuse_goods_species'] = $record['data']['refuse_goods_species'];
$result['data']['refuse_total_stock_money'] = $record['data']['refuse_total_stock_money'];
$result['data']['refuse_total_cost_money'] = $record['data']['refuse_total_cost_money'];
return $result;
}
/**
* 拒收的参数验证
* @param $parameter
* [
* type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库],
* stock_out_id=>出库单id
* warehousing_id=>入库单id
* ]
* @return array
*
*/
public function paramVerify($parameter)
{
if (empty($parameter['type']) || empty($parameter['stock_out_id']) || empty($parameter['warehousing_id']) || empty($parameter['store_id']) || empty($parameter['merchant_id']) || empty($parameter['operator_id'])) {
return ['status' => 0, 'message' => '参数缺失'];
}
if (!in_array($parameter['type'], [4, 5, 6])) {
return ['status' => 0, 'message' => '参数类型不符'];
}
return ['status' => 1, 'message' => '验证成功'];
}
/**
* 商户出库单的商品信息
* @param $parameter
* [
* stock_out_id=>出库单id
* type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库]
* ]
* @return mixed array
*/
public function getStockOrderGoods($parameter)
{
try {
$where = array();
$where['stock_out_id'] = $parameter['stock_out_id'];
switch ($parameter['type']) {
case 4:
//商户调拨
$where['type'] = 1;
$StockOutGoodsModel = new StockOutGoodsModel();
$goodsList = $StockOutGoodsModel->getSelect($where);
$user_type = 3;
break;
case 5:
$where['type'] = 3;
$storeStockGoods = new SStockOutGoodsModel();
$goodsList = $storeStockGoods->getSelect($where);
$user_type = 4;
break;
case 6:
//申请调拨
$where['type'] = 3;
$StockOutGoodsModel = new StockOutGoodsModel();
$goodsList = $StockOutGoodsModel->getSelect($where);
$user_type = 3;
break;
}
if (!empty($goodsList)) {
$SerialClass = new SerialNumberGoods();
foreach ($goodsList as &$val) {
//串号信息
if ($val['serial_number_state'] == 1) {
$result = $SerialClass->recordSerialList([
'user_type' => $user_type,
'id' => $val['id'],
'serial_type' => 3
]);
$val['serial_list'] = $result['data']['list'];
}
}
}
return $goodsList;
} catch (\Exception $e) {
return [];
}
}
/**
* 拒收商品存表操作
* @param $parameter
* [
* stock_out_id=>出库单id,
* warehousing_id=>入库单id,
* type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库],
* goodsList=>拒收商品信息(array)
* ]
* @return array
* [data=>[
* lose=>存入失败商品信息,
* refuse_goods_species=>拒收商品种数
* refuse_total_stock_money=>拒收出库总金额
* refuse_total_cost_money=>拒收出库时的成本总金额
* ]
* ]
*/
public function refuseGoodsRecord($parameter)
{
$merchant_id = $parameter['merchant_id']; //商户id
$store_id = $parameter['store_id']; //门店id
$stock_out_id = $parameter['stock_out_id']; //出库单id
$warehousing_id = $parameter['warehousing_id']; //入库单id
$type = $parameter['type']; //拒绝的场景
$goodsList = $parameter['goodsList']; //拒收的商品信息
$time = $_SERVER['REQUEST_TIME'];
switch ($type) {
case 4:
//拒收商户调拨
$refuse_type = 1;
break;
case 5:
//其他门店调拨入库
$refuse_type = 3;
break;
case 6:
//拒收申请调拨
$refuse_type = 2;
break;
}
$RefuseModel = new RefuseWarehousingModel();
$SerialClass = new SerialNumberGoods();
$refuse_goods_species = 0; //拒收的商品种数
$refuse_total_stock_money = 0; //拒收出库价的金额
$refuse_total_cost_money = 0; //拒收总成本价
$lose = []; //存入失败的商品
foreach ($goodsList as $val) {
$data = [
'merchant_id' => $merchant_id,
'store_id' => $store_id,
'stock_out_id' => $stock_out_id,
'warehouse_record_id' => $warehousing_id,
'goods_class_id' => $val['goods_class_id'],
'goods_id' => $val['goods_id'],
'goods_name' => $val['goods_name'],
'goods_number' => $val['goods_number'],
'goods_code' => $val['goods_code'],
'company' => $val['company'],
'attribute_state' => $val['attribute_state'],
'pricing_method' => $val['pricing_method'],
'cost_price' => $val['cost_price'],
'stock_price' => $val['stock_price'],
'refuse_num' => $val['stock_num'],
'subtotal' => round($val['stock_price'] * $val['stock_num'], 2),
'remarks' => $val['remarks'],
'type' => $refuse_type,
'add_time' => $time,
'serial_number_state' => $val['serial_number_state'] ? $val['serial_number_state'] : 0
];
if ($val['attribute_state'] == 2) {
$data['sku_id'] = $val['sku_id'];
$data['sku_name'] = $val['sku_name'];
$data['sku_id_list'] = $val['sku_id_list'];
$data['sku_goods_number'] = $val['sku_goods_number'];
$data['sku_code'] = $val['sku_code'];
$data['sku_num'] = $val['sku_num'] ? $val['sku_num'] : 1;
}
$state = $RefuseModel->addData($data);
if ($state['status'] == 0) {
return ['status' => 0, 'msg' => '拒收商品保存失败'];
}
//串号信息
if ($val['serial_number_state'] == 1) {
$serialResult = $SerialClass->refuseSerial([
'merchant_id' => $merchant_id,
'store_id' => $store_id,
'outside_id' => $state['data'],
'goods_id' => $val['goods_id'],
'sku_id' => $val['sku_id'] ? $val['sku_id'] : 0,
'type' => $refuse_type,
'add_time' => $time,
'serial_list' => $val['serial_list']
]);
if ($serialResult['status'] != 1) {
return ['status' => 0, 'msg' => '拒收商品的串号信息保存失败'];
}
}
$refuse_goods_species++;
$refuse_total_stock_money += $data['subtotal'];
$refuse_total_cost_money += round($data['cost_price'] * $val['stock_num'], 2);
}
$result = [
'status' => 1,
'message' => '成功',
'data' => [
'lose' => $lose,
'refuse_goods_species' => $refuse_goods_species,
'refuse_total_stock_money' => round($refuse_total_stock_money, 2),
'refuse_total_cost_money' => $refuse_total_cost_money
]
];
return $result;
}
/**
* 更新出入库订单信息
* @param $parameter
* [
* type 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库
* operator_id=>操作人id
* refuse_goods_species=>拒收商品种树
* refuse_total_stock_money=>拒收出库总金额
* refuse_total_cost_money=>拒收出库总成本金额
* stock_out_id 出库单id
* ]
* @return array
* [
* status
* message
* ]
*/
public function modifyOrder($parameter)
{
try {
$warehousing_order = new SWarehousingRecordModel();
$data = array(
'operator_id' => $parameter['operator_id'],
'refuse_goods_species' => $parameter['refuse_goods_species'],
'refuse_total_stock_money' => $parameter['refuse_total_stock_money'],
'refuse_total_cost_money' => $parameter['refuse_total_cost_money'],
'refuse_time' => time(),
'refuse_status' => 2
);
switch ($parameter['type']) {
case 4:
case 6:
$stock_order = new StockOutOrderModel();
$stock_order->updateData(array('id' => $parameter['stock_out_id']), $data);
break;
case 5:
$storeStockOrder = new SStockOutOrderModel();
$storeStockOrder->updateData(array('id' => $parameter['stock_out_id']), $data);
break;
}
$warehousing_order->updateData(array('id' => $parameter['warehousing_id']), $data);
return ['status' => 1, 'message' => '更新成功'];
} catch (\Exception $e) {
//$parameter $e->getError(); 将异常信息存入日志文件
return ['status' => 0, 'message' => '更新失败'];
}
}
/**
* 商户入库(门店拒收的商品)
* @param $parameter
* [
* goodsList 拒收的商品信息
* merchant_id 商户id
* type [ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库]
* ]
* @return mixed
* [
* status
* message
* data=>[
* lose 入库存入失败的商品信息
* cost 成本价记录失败的商品信息
* moneyTotal 总入库金额
* ]
* ]
*/
public function warehousingRecord($parameter)
{
$goodsList = $parameter['goodsList']; //商品信息
foreach ($goodsList as $key => &$val) {
$val['warehouse_price'] = $val['cost_price'];
$val['warehouse_num'] = $val['stock_num'];
}
$data = array(
'goodsList' => $goodsList,
'merchant_id' => $parameter['merchant_id'],
);
switch ($parameter['type']) {
case 4:
//商户调拨入库
$data['type'] = 6;
break;
case 6:
// 6门店申请调拨入库
$data['type'] = 7;
break;
}
$result = A('Api/Inventory')->MerchantWarehousingRecord($data); //商户入库记录更新成本价
return $result;
}
/**
* 调拨门店入库(门店拒收的商品)
* @param $parameter
* [
* goodsList 拒收的商品信息
* merchant_id 商户id
* type [ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库]
* ]
* @return mixed
* [
* status
* message
* data=>[
* lose 入库存入失败的商品信息
* cost 成本价记录失败的商品信息
* moneyTotal 总入库金额
* ]
* ]
*/
public function storeWarehousingRecord($parameter)
{
$goodsList = $parameter['goodsList']; //商品信息
foreach ($goodsList as $key => &$val) {
$val['warehouse_price'] = $val['cost_price'];
$val['warehouse_num'] = $val['stock_num'];
}
$data = array(
'goodsList' => $goodsList,
'merchant_id' => $parameter['merchant_id'],
'store_id' => $parameter['store_id'],
);
switch ($parameter['type']) {
case 5:
//门店调拨拒收入库
$data['type'] = 21;
break;
}
$result = A('Api/Inventory')->storeWarehousingGoodsOperation($data); //门店入库记录表添加成本价更新
return $result;
}
}