init: import production code mss.nahaichuan.com (exclude Runtime/Uploads/backups/logs)
这个提交包含在:
@@ -0,0 +1,490 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户