文件
mashangyoujiu/Application/Super/Controller/GoodsCodeController.class.php

415 行
17 KiB
PHP
可执行文件

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

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

<?php
namespace Super\Controller;
use Common\Business\GoodsCloud;
use Common\Model\GoodsCodeModel;
use Think\Controller;
//[1.7.19]
/**
* 商品云库
* Class GoodsCodeController
* @package Super\Controller
*/
class GoodsCodeController extends Controller
{
public function index()
{
$arr = array(
'export_goods' => '/index.php/Super/GoodsCode/export_goods',
);
$authArr = checkFunction($arr);
$this->assign('authArr', $authArr);
$this->display();
}
public function export_goods()
{
$this->display();
}
/**
* 获取商品列表
*/
public function goodsCodelist()
{
$GoodsCloud = new GoodsCloud();
$this->ajaxReturn($GoodsCloud->getGoodsList([
'page' => I('post.page'),
'limit' => I('post.limit'),
'keyword' => I('post.keyword'),
]));
}
/**
* 待导入数据列表
*/
public function getGoodsList()
{
if (IS_POST) {
$status = I('post.type');
$map['status'] = $status != -1 ? $status : ['neq', 2];
$data = M('goodscode_import')->where($map)->order('status asc')->select();
if ($data) {
foreach ($data as &$v) {
if ($v['status'] == 0) {
$v['statusname'] = '未导入';
} else if ($v['status'] == 1) {
$v['statusname'] = '已导入';
} else if ($v['status'] == 2) {
$v['statusname'] = '已删除';
} else if ($v['status'] == 3) {
$v['statusname'] = '商品名称重复';
} else if ($v['status'] == 4) {
$v['statusname'] = '商品条码重复';
}
}
$rt['status'] = 1;
$rt['msg'] = '查询成功';
$rt['data'] = $data;
} else {
$rt['status'] = 0;
$rt['msg'] = '查询失败';
}
$this->ajaxReturn($rt);
}
}
/**
* excel导入到import表
*/
public function uploadFile()
{
if (IS_POST) {
$upload = new \Think\Upload(); // 实例化上传类
$upload->maxSize = 1048576 * 10; // 设置附件上传大小10M
$upload->exts = array(
'xls'
); // 设置附件上传类型
$upload->rootPath = 'Uploads'; // 设置附件上传根目录
$upload->savePath = '/Temp/'; // 设置附件上传(子)目录
$upload->saveName = array(
'uniqid',
''
);
// 上传文件
$info = $upload->upload();
if (empty($info)) {
$rt['status'] = 3;
$rt['msg'] = '表格类型不正确,应为.xls后缀的数据表格,或者数据表格大于10M';
$this->ajaxReturn($rt);
exit;
}
$path['path'] = '/' . 'Uploads' . $info['file']['savepath'] . $info['file']['savename'];
$arr = $this->importExecl("." . $path['path']);
$myrt['arr'] = $arr;
if ($arr['error'] == 0) {
$myrt['status'] = 2;
$myrt['msg'] = '数据表格格式不正确,请下载导入模板,按模板填入数据。';
$this->ajaxReturn($myrt);
exit;
} else {
$headArr = array(
'code' => '商品条码',
'name' => '商品名称',
'specification' => '商品规格',
'unit' => '商品单位',
'origin' => '商品产地',
'trademark' => '品牌',
);
array_flip($headArr);
header('Content-Type: text/html; charset=utf-8'); //网页编码
$GoodsCodeArr = $arr['data'][0]['Content'];
$GoodsCodeArr = json_decode(json_encode($GoodsCodeArr), true);
$titlearr = $GoodsCodeArr[1];
$keyarr = array();
foreach ($titlearr as $k => $v) {
foreach ($headArr as $k2 => $v2) {
if ($v == $v2) {
$keyarr[$k2] = $k;
}
}
}
$rt['goodsarr'] = $GoodsCodeArr;
$faultarr = array();
$logData = []; //为日志功能新建数组:用于存放合格上传的会员信息,并记录日志
foreach ($GoodsCodeArr as $key => &$val) {
if ($key != 1) {
if ($val[$keyarr['code']] != '0' && !empty($val[$keyarr['code']])) {
$map2['code'] = $val[$keyarr['code']];
$map2['status'] = array('neq', 2);
$exist = M('goodscode_import')->where($map2)->find();
if (!$exist) {
if ($val[$keyarr['name']]) {
$newInfo['specification'] = $val[$keyarr['specification']] ? $val[$keyarr['specification']] : '';
$newInfo['unit'] = $val[$keyarr['unit']] ? $val[$keyarr['unit']] : '';
$newInfo['origin'] = $val[$keyarr['origin']] ? $val[$keyarr['origin']] : '';
$newInfo['trademark'] = $val[$keyarr['trademark']] ? $val[$keyarr['trademark']] : '';
$newInfo['code'] = $val[$keyarr['code']];
$newInfo['name'] = $val[$keyarr['name']];
$newInfo['status'] = 0;
M('goodscode_import')->add($newInfo);
$logData[] = $newInfo;
} else {
$val['reson'] = "商品名称" . $val[$keyarr['name']] . "未填写";
$faultarr[] = $val;
}
} else {
$val['reson'] = "商品条码" . $val[$keyarr['code']] . "已存在";
$faultarr[] = $val;
}
} else {
$val['reson'] = "商品条码不能为空";
$faultarr[] = $val;
}
}
}
}
$rt['headArr'] = $headArr;
$rt['titlearr'] = $titlearr;
$rt['faultarr'] = $faultarr;
if (count($faultarr) > 0) {
// 生成错误表格,并返回路径。
$path2 = './Uploads/Temp/goodsCodeImport' . date('Y-m-d') . '.txt';
file_put_contents($path2, json_encode($faultarr));
$rt['status'] = 1;
$rt['path'] = $path2;
if (count($faultarr) + 1 == count($GoodsCodeArr)) {
$rt['msg'] = count($faultarr) . '项未导入成功';
} else {
$rt['msg'] = '导入成功,但有' . count($faultarr) . '项未导入成功';
}
} else {
$rt['status'] = 1;
$rt['msg'] = '导入成功';
}
//操作日志记录
$source = 0; //请求来源: 0pc系统 1小助手
$type = 1; //平台:1合伙人端 2代理商端 3商户端 4门店端
$request_data = json_encode($logData); //请求参数 json数据
$desc = '上传商品云库表格'; //操作行为描述
action_log($source, $type, $request_data, $desc);
//end
$this->ajaxReturn($rt);
}
}
/**
* 把商品同步至云库
*/
public function submitToMGoods()
{
if ($_POST) {
$checkCodeIds = I('post.checkCodeIds');
if ($checkCodeIds) {
$successNum = 0;
$resArr = array();
$GoodsCodeModel = new GoodsCodeModel();
$GoodsCodeList = M("goodscode_import")->where(['id' => ['in', $checkCodeIds]])->select();
foreach ($GoodsCodeList as $k => &$v) {
$v['specification'] = !$v['specification'] ? '' : $v['specification'];
$v['unit'] = !$v['unit'] ? '' : $v['unit'];
$v['origin'] = !$v['origin'] ? '' : $v['origin'];
$v['trademark'] = !$v['trademark'] ? '' : $v['trademark'];
if ($v['code'] != 0) {
$map = array(
'code' => $v['code'],
);
$find_code = $GoodsCodeModel->getFind($map);
if (!empty($find_code)) {
//修改导入表状态(商品条码重复)
M("goodscode_import")->where(['id' => $v['id']])->save(['status' => 4]);
$resArr[] = '第' . ($k + 1) . '条数据商品条码' . $v['code'] . '在商品云库里已存在';
}
}
if (empty($find_code)) {
$data = $v;
unset($data['id'], $data['status']);
$res = $GoodsCodeModel->addOrder($data);
if ($res) {
$successNum++;
M("goodscode_import")->where(["id" => $v['id']])->save(["status" => 1]);
$resArr[] = '第' . ($k + 1) . '条数据导入成功';
} else {
$resArr[] = '第' . ($k + 1) . '条数据导入失败';
}
}
}
$result['data'] = $resArr;
if ($successNum == count($GoodsCodeList)) {
$result['status'] = 1;
$result['msg'] = '全部导入成功';
} else {
$result['status'] = 2;
$result['msg'] = '部分导入失败';
}
if ($successNum > 0) {
//清空商品云库之前读取的缓存信息
S('goodscodecount', null);
}
//操作日志记录
$source = 0; //请求来源: 0pc系统 1小助手
$type = 1; //平台:1合伙人端 2代理商端 3商户端 4门店端
$request_data = json_encode($_POST); //请求参数 json数据
$desc = '对商品云库进行导入'; //操作行为描述
action_log($source, $type, $request_data, $desc);
} else {
$result['status'] = 0;
$result['msg'] = '登录超时';
}
$this->ajaxReturn($result);
}
}
/**
* 删除导入数据
*/
public function delGoodsItem()
{
if (IS_POST) {
$id = I('post.id');
if ($id) {
$ret = M('goodscode_import')->where(['id' => ['in', $id]])->save(['status' => 2]);
} else {
$this->ajaxReturn(['status' => 0, 'msg' => '请选择数据']);
}
if ($ret) {
$rt['status'] = 1;
$rt['msg'] = '删除成功';
//操作日志记录
$source = 0; //请求来源: 0pc系统 1小助手
$type = 1; //平台:1合伙人端 2代理商端 3商户端 4门店端
$request_data = json_encode($_POST); //请求参数 json数据
$desc = '对上传商品云库信息进行删除'; //操作行为描述
action_log($source, $type, $request_data, $desc);
//end
} else {
$rt['status'] = 0;
$rt['msg'] = '删除失败';
}
$this->ajaxReturn($rt);
}
}
/**
* 下载导入模板
*/
public function downModelFile()
{
$url = './Public/flow/zip/goodsCodeImport.zip';
if (!file_exists($url)) { //判断文件是否存在
echo "文件不存在";
exit();
}
ob_clean();
$file = fopen($url, "r");
Header("Content-type:application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: " . filesize($url));
header("Content-Disposition: attachment; filename=导入模板.zip");
echo fread($file, filesize($url));
fclose($file);
}
/**
* 下载失败文件信息
*/
public function downFailFile()
{
$path = './Uploads/Temp/goodsCodeImport' . date('Y-m-d') . '.txt';
//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
import("Vendor.PHPExcel.PHPExcel");
import("Vendor.PHPExcel.Writer.Excel5");
import("Vendor.PHPExcel.IOFactory.php");
$arr = file_get_contents($path);
$arr = json_decode($arr, true);
$filename = "导入失败商品云库信息";
$headArr = array(
'0' => '商品条码',
'1' => '商品名称',
'2' => '商品规格',
'3' => '商品单位',
'4' => '商品产地',
'5' => '使用次数',
'6' => '品牌',
'reson' => '失败原因',
);
$headArr2 = array();
foreach ($headArr as $k => $v) {
$headArr2[] = array($k, $v);
}
unlink($path);
getExcel($filename, $headArr2, $arr);
}
/**
* 上传导入文件
*/
private function importExecl($file)
{
if (!file_exists($file)) {
return array("error" => 0, 'message' => 'file not found!');
}
Vendor("PHPExcel.PHPExcel.IOFactory");
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
try {
$PHPReader = $objReader->load($file);
} catch (\Exception $e) {
}
if (!isset($PHPReader)) return array("error" => 0, 'message' => 'read error!');
$allWorksheets = $PHPReader->getAllSheets();
$i = 0;
foreach ($allWorksheets as $objWorksheet) {
$sheetname = $objWorksheet->getTitle();
$allRow = $objWorksheet->getHighestRow(); //how many rows
$highestColumn = $objWorksheet->getHighestColumn(); //how many columns
$allColumn = \PHPExcel_Cell::columnIndexFromString($highestColumn);
$array[$i]["Title"] = $sheetname;
$array[$i]["Cols"] = $allColumn;
$array[$i]["Rows"] = $allRow;
$arr = array();
$isMergeCell = array();
foreach ($objWorksheet->getMergeCells() as $cells) { //merge cells
foreach (\PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) {
$isMergeCell[$cellReference] = true;
}
}
for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
$row = array();
for ($currentColumn = 0; $currentColumn < $allColumn; $currentColumn++) {
;
$cell = $objWorksheet->getCellByColumnAndRow($currentColumn, $currentRow);
$afCol = \PHPExcel_Cell::stringFromColumnIndex($currentColumn + 1);
$bfCol = \PHPExcel_Cell::stringFromColumnIndex($currentColumn - 1);
$col = \PHPExcel_Cell::stringFromColumnIndex($currentColumn);
$address = $col . $currentRow;
$value = $objWorksheet->getCell($address)->getValue();
if (substr($value, 0, 1) == '=') {
return array("error" => 0, 'message' => 'can not use the formula!');
exit;
}
if ($isMergeCell[$col . $currentRow] && $isMergeCell[$afCol . $currentRow] && !empty($value)) {
$temp = $value;
} elseif ($isMergeCell[$col . $currentRow] && $isMergeCell[$col . ($currentRow - 1)] && empty($value)) {
$value = $arr[$currentRow - 1][$currentColumn];
} elseif ($isMergeCell[$col . $currentRow] && $isMergeCell[$bfCol . $currentRow] && empty($value)) {
$value = $temp;
// $temp = $value;
}
$row[$currentColumn] = $value;
}
$arr[$currentRow] = $row;
}
$array[$i]["Content"] = $arr;
$i++;
}
unset($objWorksheet);
unset($PHPReader);
unset($PHPExcel);
unlink($file);
return array("error" => 1, "data" => $array);
}
}