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

293 行
9.3 KiB
PHP
可执行文件

<?php
namespace Common\Business;
use Common\Model\CostPriceRecordModel;
use Common\Model\RetailGoodsModel;
use Common\Model\RetailMgoodsModel;
use Common\Model\RetailSkuGoodsModel;
use Common\Model\SaleMGoodsModel;
use Common\Model\SCostPriceRecordModel;
use Common\Model\SkuMGoodsModel;
use Common\Model\SSaleMGoodsModel;
use Common\Model\SWarehousingGoodsModel;
use Common\Model\WarehousingGoodsModel;
//[1.5.46]
/**
* 成本价类
* Class CostPrice
* [
* 修改商品成本价 modifyCostPrice
* 成本价记录 costPriceRecord
* 计算成本价 reckonCostPrice
* 修改成本价验证 modifyCostPriceVerify
* ]
* @package Common\Business
*/
class CostPrice
{
/**
* 修改商品成本价
* @param $parameter
* [
* user_type 1 商户 2门店
* merchant_id
* store_id
* goods=>[
* goods_id 商品id
* sku_id 规格id
* purchase_price 进价
* goods_class_id 分类id
* attribute_state 1常规 2规格
* pricing_method 1不称重 2称重
* type 1入库 2退货出库 3调价单修改
* time 添加时间
* ]
* @return array
* [
* status
* message
* ]
*/
public function modifyCostPrice($parameter)
{
$verify = $this->modifyCostPriceVerify($parameter);
if ($verify['status'] != 1) {
return $verify;
}
$result = $this->reckonCostPrice($parameter); //计算成本价
if ($result['status'] != 1) {
return $result;
}
$cost_price = $result['data']['cost_price']; //成本价
$goods = $parameter['goods']; //商品信息
$where = [
'merchant_id' => $parameter['merchant_id'],
'goods_id' => $goods['goods_id'],
'status' => ['in', '0,1'],
];
if (!empty($goods['sku_id'])) {
$where['sku_id'] = $goods['sku_id'];
}
switch ($parameter['user_type']) {
case 1:
//商户
$saleGoodsModel = new SaleMGoodsModel();
if (!empty($goods['sku_id'])) {
$goodsModel = new SkuMGoodsModel();
$map = [
'mgoods_id' => $goods['goods_id'],
'id' => $goods['sku_id']
];
$goodsSave = ['purch_price' => $cost_price];
} else {
$goodsModel = new RetailMgoodsModel();
$map = ['id' => $goods['goods_id']];
$goodsSave = ['purch_price' => $cost_price];
}
break;
case 2:
//门店
$saleGoodsModel = new SSaleMGoodsModel();
if (!empty($goods['sku_id'])) {
$goodsModel = new RetailSkuGoodsModel();
$map = [
'goods_id' => $goods['goods_id'],
'id' => $goods['sku_id']
];
$goodsSave = ['purchase_price' => $cost_price];
} else {
$goodsModel = new RetailGoodsModel();
$map = ['id' => $goods['goods_id']];
$goodsSave = ['purchase_price' => $cost_price];
}
$where['store_id'] = $parameter['store_id'];
break;
}
try {
$result = $saleGoodsModel->updateData($where, ['cost_price' => $cost_price]); //库存成本价修改
if ($result) {
$result = $goodsModel->updateOrder($map, $goodsSave); //商品档案成本价修改
}
} catch (\Exception $e) {
return callBack(statusCode()['error'], "暂未修改");
}
if ($result) {
$parameter['goods']['new_cost_price'] = $cost_price;
$result = $this->costPriceRecord($parameter); //成本价记录
if ($result['status'] != 1) {
return callBack(statusCode()['success'], "成本价修改成功,记录添加失败");
} else {
return callBack(statusCode()['success'], "操作成功");
}
} else {
return callBack(statusCode()['error'], "暂未修改");
}
}
/**
* 成本价记录
* @param $parameter
* [
* user_type 1 商户 2门店
* merchant_id
* store_id
* goods=>[
* new_cost_price 成本价
* goods_id 商品id
* sku_id 规格id
* purchase_price 进价
* goods_class_id 分类id
* attribute_state 1常规 2规格
* pricing_method 1不称重 2称重
* type 1入库 2退货出库 3调价单修改
* time 添加时间
* ]
* ]
* @return array
* [
* status
* msg
* data 添加id
* ]
*/
public function costPriceRecord($parameter)
{
$goods = $parameter['goods'];
$data = [
'merchant_id' => $parameter['merchant_id'],
'cost_price' => $goods['new_cost_price'],
'goods_id' => $goods['goods_id'],
'sku_id' => $goods['sku_id'] ? $goods['sku_id'] : 0,
'purchase_price' => $goods['cost_price'],
'goods_class_id' => $goods['goods_class_id'],
'attribute_state' => $goods['attribute_state'],
'pricing_method' => $goods['pricing_method'],
'type' => $goods['type'] ? $goods['type'] : 1,
'add_time' => $goods['time'] ? $goods['time'] : time()
];
switch ($parameter['user_type']) {
case 1:
//商户
$costPriceModel = new CostPriceRecordModel();
break;
case 2:
//门店
$data['store_id'] = $parameter['store_id'];
$costPriceModel = new SCostPriceRecordModel();
break;
}
try {
$result = $costPriceModel->addData($data);
} catch (\Exception $e) {
return callBack(statusCode()['error'], "记录添加失败");
}
return $result;
}
/**
* 计算成本价
* @param $parameter
* [
* user_type 1 商户 2门店
* merchant_id
* store_id
* goods=>[
* goods_id 商品id
* sku_id 规格id
* time 添加时间
* ]
* @return array
* [
* status
* message
* data=>[
* cost_price 成本价
* ]
* ]
*/
public function reckonCostPrice($parameter)
{
$goods = $parameter['goods'];
$where = [
'surplus_num' => ['gt', 0],
'merchant_id' => $parameter['merchant_id'],
'goods_id' => $goods['goods_id'],
];
if (!empty($goods['sku_id'])) {
$where['sku_id'] = $goods['sku_id'];
}
switch ($parameter['user_type']) {
case 1:
//商户
$WarehousingGoodsModel = new WarehousingGoodsModel();
break;
case 2:
//门店
$WarehousingGoodsModel = new SWarehousingGoodsModel();
$where['store_id'] = $parameter['store_id'];
break;
}
try {
$list = $WarehousingGoodsModel->getSelect($where, '', '', 'surplus_num,warehouse_price', 'add_time asc');
if ($list) {
$priceTotal = 0; //总进价
$numTotal = 0; //总数量
foreach ($list as $val) {
$priceTotal += $val['surplus_num'] * $val['warehouse_price'];
$numTotal += $val['surplus_num'];
}
$cost_price = round(($priceTotal / $numTotal), 2);
if ($cost_price > 0) {
return callBack(statusCode()['success'], "计算成功", ['cost_price' => $cost_price]);
} else {
return callBack(statusCode()['error'], "该商品已售完");
}
} else {
return callBack(statusCode()['error'], "该商品已售完");
}
} catch (\Exception $e) {
return callBack(statusCode()['error'], "该商品已售完");
}
}
/**
* 修改进价价验证
* @param $parameter
* [
* user_type 1 商户 2门店
* merchant_id
* store_id
* goods=>[
* goods_id 商品id
* sku_id 规格id
* purchase_price 进价
* goods_class_id 分类id
* attribute_state 1常规 2规格
* pricing_method 1不称重 2称重
* type 1入库 2退货出库 3调价单修改
* time 添加时间
* ]
* @return array
* [
* status
* message
* ]
*/
public function modifyCostPriceVerify($parameter)
{
if (!in_array($parameter['user_type'], [1, 2])) {
return callBack(statusCode()['error'], "未知请求源");
}
if (empty($parameter['merchant_id']) || ($parameter['user_type'] == 2 && empty($parameter['store_id']))) {
return callBack(statusCode()['error'], "缺少必要参数");
}
if (empty($parameter['goods']) || empty($parameter['goods']['goods_id'])) {
return callBack(statusCode()['error'], "商品信息不能为空");
}
return callBack(statusCode()['success'], "验证成功");
}
}