490 行
20 KiB
PHP
可执行文件
490 行
20 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Retail\Controller;
|
||
|
||
use Common\Business\DownFile;
|
||
use Common\Business\Goods;
|
||
use Common\Business\OperateMGoods;
|
||
use Common\Model\GoodsImportModel;
|
||
use Think\Controller;
|
||
|
||
//[1.8.66]
|
||
|
||
/**
|
||
* 商户商品导入
|
||
* Class MgoodsimportController
|
||
* @package Retail\Controller
|
||
*/
|
||
class MgoodsimportController extends BaseController
|
||
{
|
||
public function index()
|
||
{
|
||
$this->display();
|
||
}
|
||
|
||
/**
|
||
* 导入商品模板下载
|
||
*/
|
||
public function downModelFile()
|
||
{
|
||
$platform_type = $this->role_info['platform_type'] ? $this->role_info['platform_type'] : 1;
|
||
$downFile = new DownFile();
|
||
$downFile->GoodsTemplate($platform_type);
|
||
}
|
||
|
||
/**
|
||
* 批量删除
|
||
*/
|
||
public function delall()
|
||
{
|
||
if (IS_POST) {
|
||
$checkgoodsarr = I('post.checkgoodsarr');
|
||
$goodsClass = new Goods();
|
||
$result = $goodsClass->importGoodsOut([
|
||
'merchant_id' => session('merchant_userinfo')['id'],
|
||
'user_type' => 1,
|
||
'idArr' => $checkgoodsarr
|
||
]);//删除数据
|
||
if ($result) {
|
||
//操作日志记录
|
||
$source = 0;//请求来源: 0pc系统 1小助手
|
||
$type = 3;//平台:1合伙人端 2代理商端 3商户端 4门店端
|
||
$request_data = json_encode($_POST);//请求参数 json数据
|
||
$desc = '商品导入-批量删除';//操作行为描述
|
||
action_log($source, $type, $request_data, $desc);
|
||
|
||
$rt['data'] = $checkgoodsarr;
|
||
$rt['status'] = 1;
|
||
$rt['msg'] = '删除成功';
|
||
} else {
|
||
$rt['status'] = 0;
|
||
$rt['msg'] = '删除失败';
|
||
}
|
||
$this->ajaxReturn($rt);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 商品导入 2020-7-8版本
|
||
* @throws \PHPExcel_Exception
|
||
* @throws \PHPExcel_Reader_Exception
|
||
*/
|
||
public function uploadFile()
|
||
{
|
||
ini_set('memory_limit', -1);
|
||
ini_set('max_execution_time', '0');
|
||
$platform_type = $this->role_info['platform_type'] ? $this->role_info['platform_type'] : 1;
|
||
$goodsClass = new Goods();
|
||
$result = $goodsClass->goodsImportOperation([
|
||
'merchant_id' => $this->merchant_id,
|
||
'user_type' => 3,
|
||
'operator_type' => 1,
|
||
'attribute_state' => I('post.attribute_state'),
|
||
'platform_type' => $platform_type
|
||
]);
|
||
$this->ajaxReturn($result);
|
||
}
|
||
|
||
/**
|
||
* 下载失败表格
|
||
*/
|
||
public function downFailFile()
|
||
{
|
||
ini_set('memory_limit', -1);
|
||
ini_set('max_execution_time', '60');
|
||
$platform_type = $this->role_info['platform_type'] ? $this->role_info['platform_type'] : 1;
|
||
$DownFileClass = new DownFile();
|
||
$DownFileClass->GoodsImportFail([
|
||
'merchant_id' => $this->merchant_id,
|
||
'user_type' => 3,
|
||
'attribute_state' => I('get.attribute_state'),
|
||
'platform_type' => $platform_type
|
||
]);
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取导入商品列表
|
||
*/
|
||
public function getGoodsList()
|
||
{
|
||
$data = I('post.');
|
||
$goods = new Goods();
|
||
$result = $goods->getImportGoodsList([
|
||
'merchant_id' => $this->merchant_id,
|
||
'user_type' => 1,
|
||
'status' => $data['type'],
|
||
'searchText' => $data['searchText'],
|
||
'page' => $data['page'],
|
||
'limit' => $data['limit']
|
||
]);
|
||
$this->ajaxReturn($result);
|
||
}
|
||
|
||
|
||
/**
|
||
* 提交商品到商品档案
|
||
*/
|
||
public function submitToMGoods()
|
||
{
|
||
$platform_type = $this->role_info['platform_type'] ? $this->role_info['platform_type'] : 1;
|
||
$merchant_id = $this->merchant_id;
|
||
$checkGoodsArr = I('post.checkgoodsarr');
|
||
if (!$checkGoodsArr) {
|
||
$res['status'] = 0;
|
||
$res['remark'] = '参数缺失';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$warehouse_id = D('SaleWarehouse')->getFindField(array('merchant_id' => $merchant_id, 'status' => 1), "id"); //供给仓库id
|
||
if (!$warehouse_id) {
|
||
$res['status'] = 0;
|
||
$res['remark'] = ["请先创建供给仓"];
|
||
$this->ajaxReturn($res);
|
||
}
|
||
//第三方平台商品编码验证
|
||
if ($platform_type == 2) {
|
||
$LittleGoodsClass = new \LittleGift\Business\Goods();
|
||
$verifyResult = $LittleGoodsClass->importVerify([
|
||
'merchant_id' => $merchant_id,
|
||
'id_arr' => $checkGoodsArr
|
||
]);
|
||
if ($verifyResult['status'] == 0) {
|
||
$res['status'] = 0;
|
||
$res['remark'] = $verifyResult['message'];
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$third_code_error = $verifyResult['data'] ? $verifyResult['data'] : [];
|
||
}
|
||
$remark = [];
|
||
$OperateGoodsApi = new OperateMGoods();
|
||
foreach ($checkGoodsArr as $key => &$val) {
|
||
$content = []; //存入供给仓
|
||
$goods = M('retail_goodsimport')->field('id', true)->where(array('merchantid' => $merchant_id, 'id' => $val))->find();
|
||
if (empty($goods)) {
|
||
$remark[] = '第' . ($key + 1) . '个商品不存在';
|
||
continue;
|
||
}
|
||
if ($goods['status'] != 0) {
|
||
$remark[] = $goods['goods_name'] . '已导入商品档案';
|
||
continue;
|
||
}
|
||
//串号商品验证
|
||
if ($goods['serial_number_state'] == 1) {
|
||
if ($goods['can_exchange_weigh'] == 2) {
|
||
$remark[] = $goods['goods_name'] . '串号与称重不能同时开启';
|
||
continue;
|
||
}
|
||
if ($goods['goods_num'] > 0) {
|
||
$remark[] = $goods['goods_name'] . '开启串号,库存必须通过进销存增加';
|
||
continue;
|
||
}
|
||
}
|
||
/* 商品品牌 */
|
||
if (!empty($goods['goods_brand'])) {
|
||
$brand = M('retail_goods_brand')->where(array('name' => $goods['goods_brand'], 'merchantid' => $merchant_id, 'state' => 0))->find();
|
||
if ($brand) {
|
||
$goods['goods_brand_id'] = $brand['id'];
|
||
} else {
|
||
$data_brand['name'] = $goods['goods_brand'];
|
||
$data_brand['merchantid'] = $merchant_id;
|
||
$data_brand['addtime'] = time();
|
||
$data_brand['state'] = 0;
|
||
$add_brand = M('retail_goods_brand')->add($data_brand);
|
||
if ($add_brand) {
|
||
$goods['goods_brand_id'] = $add_brand;
|
||
}
|
||
}
|
||
} else {
|
||
$goods['goods_brand_id'] = 0;
|
||
}
|
||
/* 商品货号 */
|
||
if ($goods['good_number']) {
|
||
$ids = M('retail_mgoods')->where(array('good_number' => $goods['good_number'], 'merchantid' => $merchant_id, 'status' => array('neq', '2')))->getField('id', true);
|
||
if ($ids) {
|
||
$remark[] = $goods['goods_name'] . '-货号在商品档案中已存在';
|
||
continue; // 商品货号已存在,跳出循环
|
||
}
|
||
} else {
|
||
$remark[] = $goods['goods_name'] . '-货号未设置';
|
||
continue; // 商品未设置货号,跳出循环
|
||
}
|
||
/* 商品条码 */
|
||
if ($goods['goods_code']) { // 存在条码 判断条码是否存在
|
||
$ids = M('retail_mgoods')->where(array('goods_code' => $goods['goods_code'], 'merchantid' => $merchant_id, 'status' => array('neq', '2')))->getField('id', true);
|
||
if ($ids) {
|
||
$remark[] = $goods['goods_name'] . '-条码在商品档案中已存在';
|
||
continue; // 商品条码已存在,跳出循环
|
||
}
|
||
}
|
||
//第三方平台编码
|
||
if ($platform_type == 2 && $goods['attribute'] == 1) {
|
||
$verifyResult = $LittleGoodsClass->verifyQ3Code([
|
||
'merchant_id' => $merchant_id,
|
||
'third_goods_code'=>$goods['third_goods_code']
|
||
]);
|
||
if($verifyResult['status'] != 1){
|
||
$remark[] = $goods['goods_name'] . $goods['third_goods_code'] . $verifyResult['message'];
|
||
continue;
|
||
}
|
||
if (!empty($third_code_error) && in_array($goods['third_goods_code'], $third_code_error)) {
|
||
$remark[] = $goods['goods_name'] . $goods['third_goods_code'] . '商品编码在Q3 ERP平台不存在';
|
||
continue; // 商品条码已存在,跳出循环
|
||
}
|
||
}
|
||
if ($goods['can_exchange_weigh'] == 2 && empty($goods['company'])) {
|
||
$remark[] = $goods['goods_name'] . '-开启称重,单位必填';
|
||
continue;
|
||
}
|
||
/* 商品分类 */
|
||
$class = M('retail_goods_class')->where(array('id' => $goods['goods_class_id'], 'status' => 0))->find();
|
||
if (!$class) {
|
||
$remark[] = $goods['goods_name'] . '-商品分类不存在';
|
||
continue; // 商品分类不存在,跳出循环
|
||
}
|
||
if ($goods['attribute'] == 2) {
|
||
$sku_json = json_decode($goods['sku_json'], true);
|
||
if ((empty($sku_json['sku_name_title']) || empty($sku_json['sku_list']))) {
|
||
$remark[] = $goods['goods_name'] . '-规格信息有误';
|
||
continue; // 商品分类不存在,跳出循环
|
||
}
|
||
}
|
||
$add = $goods;
|
||
unset($add['sku_json']);
|
||
unset($add['goods_class_name']);
|
||
/* 添加商品档案 */
|
||
$mgoods_id = M('retail_mgoods')->add($add);
|
||
if (!$mgoods_id) {
|
||
$remark[] = $goods['goods_name'] . '-档案添加失败';
|
||
continue; // 商品档案添加失败,跳出循环
|
||
}
|
||
$content['merchant_id'] = $merchant_id;
|
||
$content['warehouse_id'] = $warehouse_id;
|
||
$content['goods_class_id'] = $goods['goods_class_id'];
|
||
$content['goods_id'] = $mgoods_id;
|
||
$content['goods_name'] = $goods['goods_name'];
|
||
$content['goods_number'] = $goods['good_number'];
|
||
$content['goods_code'] = $goods['goods_code'];
|
||
$content['company'] = $goods['company'];
|
||
$content['specifications'] = $goods['specifications'];
|
||
$content['attribute_state'] = $goods['attribute'];
|
||
$content['pricing_method'] = $goods['can_exchange_weigh'];
|
||
$content['serial_number_state'] = $goods['serial_number_state'];
|
||
$content['goods_brand_id'] = $goods['goods_brand_id'];
|
||
$content['goods_num'] = $goods['goods_num'];
|
||
$content['more_num'] = $goods['more_num'];
|
||
$content['less_num'] = $goods['less_num'];
|
||
$content['status'] = 0;
|
||
$content['purchase_price'] = $goods['purch_price'];
|
||
$content['third_goods_code'] = $goods['third_goods_code'] ? $goods['third_goods_code'] : '';
|
||
if ($goods['attribute'] == 1) {
|
||
$OperateGoodsApi->addSaleGoods($content, 1);
|
||
}
|
||
/* 是否有规格 */
|
||
if ($goods['attribute'] == 2 && $goods['sku_json']) {
|
||
$sku_res = $this->add_sku([
|
||
'sku_json' => json_decode($goods['sku_json'], true),
|
||
'mgoods_id' => $mgoods_id,
|
||
'content' => $content,
|
||
'platform_type' => $platform_type,
|
||
'third_code_error' => $third_code_error
|
||
]);
|
||
if ($sku_res['status'] == 0) {
|
||
$remark[] = $goods['goods_name'] . $sku_res['msg']; // 商品规格添加失败 接着执行
|
||
}
|
||
}
|
||
/* 改变状态 */
|
||
$save_res = M('retail_goodsimport')->where(array('merchantid' => $merchant_id, 'id' => $val))->save(array('status' => 1));
|
||
if (!$save_res) {
|
||
$remark[] = $goods['goods_name'] . '-状态修改失败';
|
||
}
|
||
}
|
||
if (empty($remark)) {
|
||
//操作日志记录
|
||
$source = 0;//请求来源: 0pc系统 1小助手
|
||
$type = 3;//平台:1合伙人端 2代理商端 3商户端 4门店端
|
||
$request_data = json_encode($_POST);//请求参数 json数据
|
||
$desc = '商品导入-同步到商品档案';//操作行为描述
|
||
action_log($source, $type, $request_data, $desc);
|
||
|
||
$res['status'] = 1;
|
||
$res['msg'] = '同步成功';
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '部分商品同步失败';
|
||
$res['remark'] = $remark;
|
||
}
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
|
||
/**
|
||
* 规格添加
|
||
* @param $param
|
||
* [
|
||
* $sku_json
|
||
* $mgoods_id
|
||
* $content
|
||
* $platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* third_code_error 未通过验证的商品编码
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
protected function add_sku($param)
|
||
{
|
||
$sku_json = $param['sku_json'];
|
||
$mgoods_id = $param['mgoods_id'];
|
||
$content = $param['content'];
|
||
$platform_type = $param['platform_type'];
|
||
$third_code_error = $param['third_code_error'] ? $param['third_code_error'] : [];
|
||
$title = $sku_json['sku_name_title'];
|
||
$sku_list = $sku_json['sku_list'];
|
||
if (!$title || !$sku_list) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-规格有误,';
|
||
return $res;
|
||
}
|
||
$goodsInfo = D('MGoods')->getFind(array('id' => $mgoods_id));
|
||
if (!$goodsInfo) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-商品有误,';
|
||
return $res;
|
||
}
|
||
$arr = array();
|
||
foreach ($title as &$val) {
|
||
$id = M('retail_sku_attr')->where(array('merchantid' => $this->merchant_id, 'state' => 0, 'status' => 1, 'name' => $val))->getField('id');
|
||
if ($id) { // 存在此规格
|
||
array_push($arr, $id);
|
||
} else { // 无此规格
|
||
$add['merchantid'] = $this->merchant_id;
|
||
$add['state'] = 0;
|
||
$add['status'] = 1;
|
||
$add['name'] = $val;
|
||
$add['addtime'] = time();
|
||
$add['storeid'] = 0;
|
||
$add_res = M('retail_sku_attr')->add($add);
|
||
if (!$add_res) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-新规格添加失败,';
|
||
return $res;
|
||
}
|
||
array_push($arr, $add_res);
|
||
}
|
||
unset($id);
|
||
unset($add);
|
||
unset($add_res);
|
||
}
|
||
$OperateGoodsApi = new OperateMGoods();
|
||
if($platform_type == 2){
|
||
$LittleGoodsClass = new \LittleGift\Business\Goods();
|
||
}
|
||
foreach ($sku_list as &$value) {
|
||
if ($value['sku_code']) {
|
||
$ids_sku = M('retail_sku_mgoods')->where(array('merchantid' => $this->merchant_id, 'state' => 0, 'status' => 1, 'sku_code' => $value['sku_code']))->getField('id', true);
|
||
if ($ids_sku) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-规格条码出现重复';
|
||
return $res;
|
||
}
|
||
}
|
||
if (empty($value['sku_goods_number'])) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-规格货号有误';
|
||
return $res;
|
||
} else {
|
||
$sku_goods_number = M('retail_sku_mgoods')->where(array('merchantid' => $this->merchant_id, 'state' => 0, 'status' => 1, 'sku_goods_number' => $value['sku_goods_number']))->getField('id', true);
|
||
if ($sku_goods_number) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-规格货号出现重复';
|
||
return $res;
|
||
}
|
||
}
|
||
//第三方平台编码验证
|
||
if ($platform_type == 2) {
|
||
$verifyResult = $LittleGoodsClass->verifyQ3Code([
|
||
'merchant_id'=>$this->merchant_id,
|
||
'third_goods_code'=>$value['third_goods_code']
|
||
]);
|
||
if($verifyResult['status'] != 1){
|
||
$res['status'] = 0;
|
||
$res['msg'] = $value['third_goods_code'] . '-规格Q3编码'.$verifyResult['message'];
|
||
return $res;
|
||
}
|
||
if (!empty($third_goods_code)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = $value['third_goods_code'] . '-规格Q3 ERP平台商品编码重复';
|
||
return $res;
|
||
}
|
||
if (!empty($third_code_error) && in_array($value['third_goods_code'], $third_code_error)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = $value['third_goods_code'] . '-规格的商品编码验证未通过';
|
||
return $res;
|
||
}
|
||
}
|
||
$sku_id_list = [];
|
||
$sku_name = [];
|
||
/* 添加规格 */
|
||
foreach ($value['name'] as $ko => &$vo) {
|
||
$sku_name[] = $vo;
|
||
$ids_list = M('retail_sku_list')->where(array('merchantid' => $this->merchant_id, 'state' => 0, 'status' => 1, 'name' => $vo, 'attr_id' => $arr[$ko]))->getField('id');
|
||
if ($ids_list) {
|
||
$sku_id_list[] = $ids_list;
|
||
} else {
|
||
$add_list['merchantid'] = $this->merchant_id;
|
||
$add_list['state'] = 0;
|
||
$add_list['status'] = 1;
|
||
$add_list['name'] = $vo;
|
||
$add_list['attr_id'] = $arr[$ko];
|
||
$add_list['addtime'] = time();
|
||
$add_list['storeid'] = 0;
|
||
$add_res2 = M('retail_sku_list')->add($add_list);
|
||
if (!$add_res2) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-新规格添加失败';
|
||
return $res;
|
||
}
|
||
$sku_id_list[] = $add_res2;
|
||
}
|
||
unset($ids_list);
|
||
unset($add_list);
|
||
unset($add_res2);
|
||
}
|
||
|
||
unset($value['name']);
|
||
$add_item = $value;
|
||
$add_item['merchantid'] = $this->merchant_id;
|
||
$add_item['mgoods_id'] = $mgoods_id;
|
||
$add_item['sku_id_list'] = implode(',', $sku_id_list);
|
||
$add_item['addtime'] = time();
|
||
$add_item['status'] = 1;
|
||
$add_item['state'] = 0;
|
||
$add_item['type'] = 1;
|
||
$add_item['weight_value'] = $value['sku_weight_value'];
|
||
$add_item['sku_num'] = 1;
|
||
unset($value['sku_weight_value']);
|
||
$add_res3 = M('retail_sku_mgoods')->add($add_item);
|
||
if (!$add_res3) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '-新规格添加失败';
|
||
return $res;
|
||
}
|
||
$sku_content = $content;
|
||
$sku_content['goods_num'] = $value['goods_num'];
|
||
$sku_content['more_num'] = $value['more_num'];
|
||
$sku_content['less_num'] = $value['less_num'];
|
||
$sku_content['purchase_price'] = $value['purch_price'];
|
||
$sku_content['sku_id'] = $add_res3;
|
||
$sku_content['sku_name'] = implode(',', $sku_name);
|
||
$sku_content['sku_id_list'] = $add_item['sku_id_list'];
|
||
$sku_content['sku_goods_number'] = $value['sku_goods_number'];
|
||
$sku_content['sku_code'] = $value['sku_code'];
|
||
$sku_content['sku_num'] = $value['sku_num'];
|
||
$sku_content['third_goods_code'] = $value['third_goods_code'] ? $value['third_goods_code'] : '';
|
||
$OperateGoodsApi->addSaleGoods($sku_content, 1);
|
||
unset($add_item);
|
||
unset($add_res3);
|
||
}
|
||
$res['status'] = 1;
|
||
$res['msg'] = '添加成功';
|
||
return $res;
|
||
}
|
||
} |