文件
mashangyoujiu/Application/Common/Model/SkuGoodsViewModel.class.php

522 行
26 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace Common\Model;
use Common\Business\Store;
use LittleGift\Business\Goods;
use Think\Model\ViewModel;
//[1.8.50]
/**
* 门店商品与规格视图模型
* Class SkuGoodsViewModel
* @package Common\Model
*/
class SkuGoodsViewModel extends BaseViewModel
{
public $viewFields = array(
'goods' => array(
'_table' => 'ls_retail_goods',
'id', //int(11) NOT NULL AUTO_INCREMENT,
'goods_name', //varchar(255) DEFAULT NULL COMMENT '零售货物名称。',
'subheading', //varchar(255) DEFAULT NULL COMMENT '副标题',
'goods_class_id', //int(11) DEFAULT NULL COMMENT '货物所属类别id',
'goods_number', //varchar(15) DEFAULT NULL COMMENT '货号',
'purchase_price', //decimal(20,2) DEFAULT '0.00' COMMENT '成本价格',
'retail_price', //decimal(20,2) DEFAULT '0.00' COMMENT '零售价',
'plus_price', //decimal(20,2) DEFAULT NULL COMMENT 'plus会员价',
'online_price', //decimal(20,2) DEFAULT NULL COMMENT '小程序商城价格',
'vip_online_state', //varchar(255) DEFAULT '0' COMMENT 'vip是否打折 0关闭 1开启',
'vip_retail_state', //int(1) DEFAULT '0' COMMENT '允许vip线下会员打折: 0不允许 1允许',
'add_time', //int(11) DEFAULT NULL COMMENT '添加时间',
'status', //int(1) DEFAULT NULL COMMENT '状态:0,正常,1,下架,2,删除。',
'goods_num', //decimal(11,3) DEFAULT '0.000' COMMENT '商品库存',
'goods_order', //int(11) DEFAULT '1' COMMENT '商品排序',
'more_num', //decimal(11,3) DEFAULT NULL COMMENT '商品超量;超过该字段的库存数量即为超量',
'less_num', //decimal(11,3) DEFAULT NULL COMMENT '库存预警',
'sell_num', //decimal(11,3) DEFAULT '0.000' COMMENT '出售数量',
'fictitious_num', //int(11) DEFAULT NULL COMMENT '虚拟销量',
'company', //varchar(255) DEFAULT '' COMMENT '单位',
'weight_value', //重量,
'specifications', //varchar(255) DEFAULT '' COMMENT '规格',
'merchant_id', //int(11) DEFAULT '0' COMMENT '商户id。',
'store_id', //int(11) DEFAULT NULL COMMENT '门店id',
'goods_code', //varchar(20) DEFAULT '' COMMENT '商品条码。',
'online_state', //int(1) DEFAULT '0' COMMENT '是否在商城中出售:0,不在,1,在商城出售。',
'retail_state', //int(1) DEFAULT '0' COMMENT '是否在店内出售:0,不在,1,在店内出售。',
'pricing_method', //tinyint(1) DEFAULT '1' COMMENT '该商品是否称重计价 1:不称重 2:称重',
'details', //text COMMENT '商品图文详情',
'check_num', //varchar(11) DEFAULT '' COMMENT '盘点数量',
'supplier_id', //int(11) DEFAULT '0',
'split_state', //tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否可拆分:0,不可以。1,可以。',
'split_goods_id', //int(11) NOT NULL DEFAULT '0' COMMENT '拆分后的商品id',
'split_goods_num', //int(11) NOT NULL DEFAULT '0' COMMENT '拆分子商品的数量。',
'label_id', //int(11) DEFAULT '0' COMMENT '标签id 默认0:没有绑定',
'm_goods_id', //int(11) DEFAULT '0' COMMENT '调拨商户的商品id',
'source_type', //varchar(1) DEFAULT '1' COMMENT '(1店长添加 2商户同步 3收银员添加)',
'attribute_state', //tinyint(1) DEFAULT '1' COMMENT '是否开启sku 1不开启 2开启',
'usual_state', //tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否是常用商品:1,不是,2,是。',
'sync_state', //tinyint(1) DEFAULT '0' COMMENT '0未更新 1已更新',
'production_date', //varchar(15) DEFAULT NULL COMMENT '商品生产日期',
'shelf_life', //varchar(15) DEFAULT NULL COMMENT '商品到期日期',
'shop_mem_status', //tinyint(1) DEFAULT '2' COMMENT '是否开启商城会员价1.开启2.关闭',
'shop_mem_price', //decimal(10,2) DEFAULT NULL COMMENT '商城会员价格',
'store_mem_status', //tinyint(1) DEFAULT '2' COMMENT '是否开启店内会员价1.开启2关闭',
'store_mem_price', //decimal(10,2) DEFAULT NULL COMMENT '店内会员价格',
'integral_mem_status',//tinyint(1) DEFAULT '2' COMMENT ' 购买获得积分 1开启 2关闭',
'integral', //int(11) DEFAULT NULL COMMENT '会员消费送积分',
'plus_mem_status', //tinyint(1) DEFAULT '2' COMMENT '1开启 2关闭 plus会员价',
'goods_brand_id', //int(11) DEFAULT '0' COMMENT '商品品牌id',
'plu_code', //int(4) DEFAULT NULL,
'goods_yieldly_id', //int(10) DEFAULT '0' COMMENT '产地id',
'goods_img_id', //varchar(255) DEFAULT '0',
'cashier_id', //int(11) DEFAULT NULL COMMENT '收银员id',
'guide_royalty_state',//tinyint(1) DEFAULT '0' COMMENT '购买该商品获得提成的状态 0关闭 1开启',
'guide_royalty_custom_state',//tinyint(1) DEFAULT '0' COMMENT '导购员获得提成自定义状态 0关闭 1开启(开启则表示使用自定义的金额,关闭则表示使用默认的全局百分比)',
'guide_royalty_price',//decimal(10,2) DEFAULT '0.00' COMMENT '导购员线下固定金提成',
'guide_royalty_online_price',//decimal(10,2) DEFAULT '0.00' COMMENT '导购员线上固定金提成',
'advance_sale_status',//tinyint(1) DEFAULT '0' COMMENT '商城预售 0关闭 1开启',
'delivery_template_id',//int(11) DEFAULT NULL COMMENT '使用的配送模板ID',
'refund_state', //tinyint(1) DEFAULT '1' COMMENT '允许退款 1允许 0不允许',
'exchange_state', //tinyint(1) DEFAULT '1' COMMENT '允许换货 1允许 0不允许',
'delivery_type', //varchar(10) DEFAULT '1,2' COMMENT '配送方式 ,拼接 1自提 2同城配送 3快递配送',
'shop_mem_integral',//int(11) DEFAULT '0' COMMENT '商城会员价自定义营销的积分',
'plus_mem_integral',//int(11) DEFAULT '0' COMMENT 'plus会员价自定义营销的积分',
'serial_number_state',
'third_goods_code',
'_type' => 'LEFT',
),
'sku_goods' => array(
'_table' => 'ls_retail_sku_goods',
'id' => 'sku_id', //int(11) NOT NULL AUTO_INCREMENT,
'goods_id', //int(11) DEFAULT '0' COMMENT '商品id',
'sku_id_list', //varchar(255) DEFAULT NULL COMMENT '规格id拼接',
'purchase_price' => 'sku_purchase_price',//decimal(10,2) DEFAULT '0.00' COMMENT '成本价',
'online_price' => 'sku_online_price', //decimal(10,2) DEFAULT NULL COMMENT '商城价',
'retail_price' => 'sku_retail_price', //decimal(10,2) DEFAULT NULL COMMENT '门店价',
'goods_num' => 'sku_goods_num', //int(11) DEFAULT '0' COMMENT '商品库存',
'sku_num', //decimal(10,3) DEFAULT '1.000' COMMENT '单件库存',
'shop_mem_price' => 'sku_shop_mem_price',//decimal(10,2) DEFAULT NULL COMMENT '商城会员价格',
'store_mem_price' => 'sku_store_mem_price',//decimal(10,2) DEFAULT NULL COMMENT '店内会员价格',
'plus_price' => 'sku_plus_price', //decimal(10,2) DEFAULT NULL COMMENT 'plus会员价',
'add_time' => 'sku_add_time', //varchar(20) DEFAULT NULL COMMENT '添加时间',
'status' => 'sku_status', //tinyint(1) DEFAULT '1' COMMENT '0不启用 1启用',
'state', //tinyint(1) DEFAULT '0' COMMENT '0正常 1删除',
// 'type', //varchar(255) DEFAULT '1' COMMENT '1单选 2多选',
'sku_goods_number', //varchar(30) DEFAULT NULL COMMENT '规格货号',
'sku_code', //varchar(255) DEFAULT NULL COMMENT '商品规格条码',
'weight_value', //重量
'goods_img_id' => 'sku_goods_img_id', //varchar(255) DEFAULT '0' COMMENT '图片id',
'sku_mgoods_id', //int(10) DEFAULT '0' COMMENT '商户规格id',
'less_num' => 'sku_less_num', //decimal(11,3) DEFAULT NULL COMMENT '规格预警',
'more_num' => 'sku_more_num', //decimal(11,3) DEFAULT NULL COMMENT '规格超量',
'guide_royalty_price' => 'sku_guide_royalty_price',//decimal(10,2) DEFAULT '0.00' COMMENT '导购员线下固定金提成',
'guide_royalty_online_price' => 'sku_guide_royalty_online_price',//decimal(10,2) DEFAULT '0.00' COMMENT '导购员线上固定金提成',
'shop_mem_integral' => 'sku_shop_mem_integral',//int(11) DEFAULT '0' COMMENT '商城会员价自定义营销的积分',
'plus_mem_integral' => 'sku_plus_mem_integral',//int(11) DEFAULT '0' COMMENT 'plus会员价自定义营销的积分',
'plu_code' => 'sku_plu_code',
'_on' => 'goods.id = sku_goods.goods_id',
),
);
public function getGoodsList($param)
{
$t1 = mSecTime();
$platform_type = $param['platform_type'] ? $param['platform_type'] : 1;
$merchant_id = $param['merchant_id'];
$store_id = $param['store_id'];
$show_purchase_price = $param['showpurch_price'];//查看进价权限
$inventory = $param['identity'];
$page = $param['page'];
$limit = $param['limit'];
$keyword = $param['keyword'];//搜索关键词
$keyword_type = $param['keyword_type'];//关键词搜索类型 1货号 2条码 3名称
$pricing_method = $param['pricing_method'];
$condition_name = $param['condition_name'];//排序规则关键词
$order_type = $param['order_type'];//排序规则
//按照商品类别搜索
$person1 = $param['person1'];
$person2 = $param['person2'];
$person3 = $param['person3'];
$online_state = $param['online_state'];//商城出售状态
$attribute_state = $param['attribute_state'];//规格 1无规格 2规格
$advance_sale_status = $param['advance_sale_status'];
$status = $param['status'];
$goods_class_ids = getGoodsClass($person1, $person2, $person3);//处理分类
//按条件搜索
$where['store_id'] = $store_id;
if ($online_state !== '' && $online_state !== null && in_array($online_state, ['0', '1'])) {
$where['online_state'] = $online_state;
}
if (in_array($attribute_state, ['1', '2'])) {
$where['attribute_state'] = $attribute_state;
}
if (!empty($keyword)) {
$keyword = trim($keyword);
if (isset($keyword_type)) {
switch ($keyword_type) {
case '1':
$where['goods_number|sku_goods_number'] = array('like', '%' . $keyword . '%');
break;
case '2':
$where['goods_code|sku_code'] = array('like', '%' . $keyword . '%');
break;
case '3':
$where['goods_name'] = array('like', '%' . $keyword . '%');
break;
}
} else {
$where['goods_number|goods_code|goods_name|sku_goods_number|sku_code'] = array('like', '%' . $keyword . '%');
}
}
if ($pricing_method == 1 || $pricing_method == 2) {
$where['pricing_method'] = $pricing_method;
}
if (!empty($advance_sale_status) || $advance_sale_status === "0") {
$where['advance_sale_status'] = $advance_sale_status;
}
//处理排序规则关键词
switch ($condition_name) {
case '2'://货号
$order = "goods_number";
break;
case '3'://库存
$order = "goods_num";
break;
case '4'://名称
$order = "goods_name";
break;
default:
$order = "id";
}
$order = $order_type == 2 ? ($order . ' desc') : ($order . ' asc');//2降序 1升序
if ($goods_class_ids) {
$where['goods_class_id'] = $goods_class_ids;
}
$recovery = $param['recovery_type']; //2回收站
if (!empty($recovery)) {
$where['status'] = 2;
} else {
if (in_array($status, ['0', '1'])) {
$where['status'] = $status;
} else {
$where['status'] = array('in', array(0, 1));
}
}
//商品列表
$fields = $param['fields'] ? $param['fields'] : array(
'id',
'goods_name',
'subheading',
'goods_class_id',
'goods_number',
'retail_price',
'plus_price',
'online_price',
'vip_online_state',
'vip_retail_state',
'add_time',
'status',
'merchant_id',
'store_id',
'goods_code',
'retail_state',
'online_state',
'pricing_method',
'split_state',
'm_goods_id',
'source_type',
'attribute_state',
'usual_state',
'goods_img_id',
'shop_mem_price',
'store_mem_price',
'purchase_price',
'third_goods_code'
);
$goods = $this->getGroupSelect($where, 'goods.id', $fields, $order, $page . ',' . $limit);
$goods_count = $param['need_count'] && $goods ? ($this->getGroupCount($where, 'goods.id')) : 0;
$need_img = $param['need_img'] ? true : false;
$need_goods_num = $param['need_goods_num'] ? true : false;
$GoodsClassModel = new RetailGoodsClassModel();
$SkuGoodsModel = new RetailSkuGoodsModel();
$InventoryApi = new \Api\Controller\InventoryController();
$ImageGalleryModel = new ImageGalleryModel();
$classNameList = array();
if ($platform_type == 2) {
//Q3库存
$code_arr = [];
$sku_code_arr = [];
$sku_where = [
'state'=>0,
];
}
foreach ($goods as &$value) {
//查询出分类名称
if (isset($value['goods_class_id'])) {
if (!empty($classNameList[$value['goods_class_id']])) {
$value['cate_name'] = $classNameList[$value['goods_class_id']];
} else {
$value['cate_name'] = $GoodsClassModel->getClassNamePath($value['goods_class_id']);
$classNameList[$value['goods_class_id']] = $value['cate_name'];
}
}
if (isset($value['purchase_price'])) $value['purchase_price'] = strval(floatval($value['purchase_price']));
if (isset($value['store_mem_price'])) $value['store_mem_price'] = strval(floatval($value['store_mem_price']));
if (isset($value['plus_price'])) $value['plus_price'] = strval(floatval($value['plus_price']));
if (isset($value['online_price'])) $value['online_price'] = strval(floatval($value['online_price']));
if (isset($value['shop_mem_price'])) $value['shop_mem_price'] = strval(floatval($value['shop_mem_price']));
if (isset($value['integral'])) $value['integral'] = strval(floatval($value['integral']));
if (isset($value['guide_royalty_price'])) $value['guide_royalty_price'] = strval(floatval($value['guide_royalty_price']));
if (isset($value['guide_royalty_online_price'])) $value['guide_royalty_online_price'] = strval(floatval($value['guide_royalty_online_price']));
if (isset($value['more_num'])) $value['more_num'] = strval(floatval($value['more_num']));
if (isset($value['less_num'])) $value['less_num'] = strval(floatval($value['less_num']));
if (isset($value['sell_num'])) $value['sell_num'] = strval(floatval($value['sell_num']));
if (isset($value['fictitious_num'])) $value['fictitious_num'] = strval(floatval($value['fictitious_num']));
if (isset($value['production_date'])) $value['production_date'] = $value['production_date'] ? date('Y-m-d H:i:s', $value['production_date']) : '';
if (isset($value['shelf_life'])) $value['shelf_life'] = $value['shelf_life'] ? date('Y-m-d H:i:s', $value['shelf_life']) : '';
if (isset($value['weight_value'])) $value['weight_value'] = $value['weight_value'] ? strval(round($value['weight_value'], 3)) : '';
//判断出商品的状态以及是否允许修改折扣价
//商品状态
if ($value['attribute_state'] == 2) {
$value['purchase_price'] = '规格成本价';
}
if ($inventory == 2 && $show_purchase_price == 2) {
if (isset($value['purchase_price'])) $value['purchase_price'] = '***';
}
if (isset($value['status'])) {
if ($value['status'] == 0) {
$value['status_name'] = '正常';
} elseif ($value['status'] == 1) {
$value['status_name'] = '已下架';
} elseif ($value['status'] == 2) {
$value['status_name'] = '已删除';
}
}
//是否开启店内会员价
if (isset($value['store_mem_status'])) {
if ($value['store_mem_status'] == 1) {
$value['store_mem_name'] = "开启";
} else if ($value['store_mem_status'] == 2) {
$value['store_mem_name'] = "关闭";
}
}
//plus会员价开关
if (isset($value['plus_mem_status'])) {
if ($value['plus_mem_status'] == 1) {
$value['plus_mem_name'] = "开启";
} else {
$value['plus_mem_name'] = "关闭";
}
}
//商城出售状态
if (isset($value['online_state'])) {
if ($value['online_state'] == 1) {
$value['online_state_name'] = "开启";
} else {
$value['online_state_name'] = "关闭";
}
}
//是否开启商城会员价
if (isset($value['shop_mem_status'])) {
if ($value['shop_mem_status'] == 1) {
$value['shop_mem_name'] = "开启";
} else {
$value['shop_mem_name'] = "关闭";
}
}
//线下折扣
if (isset($value['vip_retail_state'])) {
if ($value['vip_retail_state'] == 1) {
$value['vip_retail_name'] = "开启";
} else {
$value['vip_retail_name'] = "关闭";
}
}
if (isset($value['vip_online_state'])) {
if ($value['vip_online_state'] == 1) {
$value['vip_online_name'] = '开启';
} else {
$value['vip_online_name'] = '关闭';
}
}
//会员购买获得积分
if (isset($value['integral_mem_status'])) {
if ($value['integral_mem_status'] == 1) {
$value['integral_mem_name'] = "开启";
} else {
$value['integral_mem_name'] = "关闭";
}
}
//购买该商品获得提成的状态
if (isset($value['guide_royalty_state'])) {
if ($value['guide_royalty_state'] == 1) {
$value['guide_royalty_name'] = "开启";
} else {
$value['guide_royalty_name'] = "关闭";
}
}
//导购员获得提成自定义状态
if (isset($value['guide_royalty_custom_state'])) {
if ($value['guide_royalty_custom_state'] == 1) {
$value['guide_royalty_custom_name'] = "开启";
} else {
$value['guide_royalty_custom_name'] = "关闭";
}
}
//是否称重
if (isset($value['pricing_method'])) {
if ($value['pricing_method'] == 2) {
$value['pricing_method_name'] = "是";
} else {
$value['pricing_method_name'] = "否";
}
}
if (isset($value['source_type'])) {
if ($value['source_type'] == 1) {
$value['source_type_name'] = '自行添加';
} else if ($value['source_type'] == 2) {
$value['source_type_name'] = '商户调拨';
} else if ($value['source_type'] == 3) {
$value['source_type_name'] = '收银员添加';
}
}
if (isset($value['goods_code'])) $value['goods_code'] = $value['goods_code'] ? $value['goods_code'] : '';
if ($need_img) {
if ($value['goods_img_id']) {
$value['goods_img'] = $ImageGalleryModel->getImagePath($value['goods_img_id']);
} else {
$value['goods_img'] = '';
}
}
if (isset($value['goods_number'])) $value['goods_number'] = $value['goods_number'] ? $value['goods_number'] : '';
if (isset($value['subheading'])) $value['subheading'] = $value['subheading'] ? $value['subheading'] : ''; //副标题
if ($need_goods_num) {
if ($platform_type == 2) {
if($value['attribute_state'] == 2){
$sku_where['goods_id'] = $value['id'];
$sku_third_goods_code = $SkuGoodsModel->getFindField($sku_where,'third_goods_code',true);
$sku_code_arr[$value['id']] = $sku_third_goods_code;
}else{
$code_arr[$value['id']] = $value['third_goods_code'];
}
$value['goods_num'] = '0';
} else {
$value['goods_num'] = $InventoryApi->goods_num(2, $store_id, $value['id']);
$value['goods_num'] = $value['goods_num'] . '';
}
}
}
if($need_goods_num && $platform_type == 2 && (!empty($code_arr) || !empty($sku_code_arr))){
//Q3库存
$StoreModel = new RetailStoreModel();
$GoodsClass = new Goods();
$thirdResult = $GoodsClass->goodsNumQuery([
'merchant_id'=>$merchant_id,
'type'=>1,
'code_arr'=>$code_arr,
'sku_code_arr'=>$sku_code_arr,
'Customer_Codes'=>$StoreModel->getFindField([
'id'=>$store_id
],'third_code')
]);
if($thirdResult['status'] == 1 && !empty($thirdResult['data'])){
$stock = $thirdResult['data'];
foreach ($goods as &$val){
if(!empty($stock[$val['id']])){
$val['goods_num'] = $stock[$val['id']];
}
}
}
}
$ret['status'] = 1;
$ret['code'] = 0;
$ret['msg'] = $goods ? '获取成功' : '暂无数据';
$ret['count'] = $goods_count;
$ret['data'] = $goods;
$t2 = mSecTime();
$ret['need_time'] = ($t2 - $t1) / 1000;
return $ret;
}
// 数据简化
public function getGoodsListActivity($param)
{
$t1 = mSecTime();
$store_id = $param['store_id'];
$page = $param['page'];
$limit = $param['limit'];
$keyword = I('post.keyword');
//按条件搜索
if (!empty($keyword)) {
$keyword = trim($keyword);
$where['goods_name'] = array('like', '%' . $keyword . '%');
}
$where['status'] = array('in', array(0, 1));
$where['store_id'] = $store_id;
//商品列表
$fields = $param['fields'] ? $param['fields'] : array(
'id',
'goods_name',
'goods_number',
'retail_price',
'goods_code',
'specifications',
'goods_num',
'status'
);
$goods = $this->getGroupSelect($where, 'goods.id', $fields, 'id desc', $page . ',' . $limit);
$goods_count = $param['need_count'] && $goods ? ($this->getGroupCount($where, 'goods.id')) : 0;
$need_goods_num = $param['need_goods_num'] ? true : false;
$InventoryApi = new \Api\Controller\InventoryController();
foreach ($goods as &$value) {
if (isset($value['status'])) {
if ($value['status'] == 0) {
$value['status_name'] = '正常';
} elseif ($value['status'] == 1) {
$value['status_name'] = '已下架';
} elseif ($value['status'] == 2) {
$value['status_name'] = '已删除';
}
}
unset($value['status']);
if (isset($value['goods_number'])) $value['goods_number'] = $value['goods_number'] ? $value['goods_number'] : '';
if ($need_goods_num) {
$value['goods_num'] = $InventoryApi->goods_num(2, $store_id, $value['id']);
}
$value['goods_checked'] = false;
$value['sku_info'] = '';
}
$ret['status'] = 1;
$ret['msg'] = $goods ? '获取成功' : '暂无数据';
$ret['count'] = $goods_count;
$ret['data'] = $goods;
$t2 = mSecTime();
$ret['need_time'] = ($t2 - $t1) / 1000;
return $ret;
}
}