文件
mashangyoujiu/Application/Retail/Controller/MgoodsimportController.class.php

490 行
20 KiB
PHP
可执行文件

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

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

<?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;
}
}