|
|
@@ -5,15 +5,9 @@ namespace app\admin\controller\product;
|
|
|
use app\common\controller\Backend;
|
|
|
use Exception;
|
|
|
use think\Db;
|
|
|
-use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
|
|
|
-use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
|
|
-use PhpOffice\PhpSpreadsheet\Reader\Xls;
|
|
|
-use PhpOffice\PhpSpreadsheet\Reader\Csv;
|
|
|
use app\common\model\ProductArea;
|
|
|
use think\exception\DbException;
|
|
|
use think\exception\PDOException;
|
|
|
-use app\admin\model\Importregion;
|
|
|
-use app\admin\model\Importlog;
|
|
|
use think\exception\ValidateException;
|
|
|
|
|
|
/**
|
|
|
@@ -102,13 +96,15 @@ class Lists extends Backend
|
|
|
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;
|
|
|
$this->model->validateFailException()->validate($validate);
|
|
|
}
|
|
|
- $areaArr = json_decode($params['product_area'], true);
|
|
|
- $areaArrTxt = json_decode($params['product_area_txt'], true);
|
|
|
- if(empty($areaArr) || empty($areaArrTxt)) throw new ValidateException('请添加商品关联地区');
|
|
|
+ if(!empty($params['is_area'])){
|
|
|
+ $areaArr = json_decode($params['product_area'], true);
|
|
|
+ $areaArrTxt = json_decode($params['product_area_txt'], true);
|
|
|
+ if(empty($areaArr) || empty($areaArrTxt)) throw new ValidateException('请添加商品关联区域');
|
|
|
+ }
|
|
|
unset($params['product_area'], $params['product_area_txt']);
|
|
|
//商品
|
|
|
- $add = $this->model->create($params);
|
|
|
- $result= self::setEqualArea($add->id, $areaArr, $areaArrTxt, 0);
|
|
|
+ $result = $this->model->create($params);
|
|
|
+ if(!empty($params['is_area'])) $result= self::setEqualArea($result->id, $areaArr, $areaArrTxt, 0);
|
|
|
Db::commit();
|
|
|
} catch (ValidateException|PDOException|Exception $e) {
|
|
|
Db::rollback();
|
|
|
@@ -162,9 +158,9 @@ class Lists extends Backend
|
|
|
$areaTxt[] = [$item->address];
|
|
|
}
|
|
|
$this->assignconfig('areaData', json_encode($areaData));
|
|
|
- $this->view->assign('row', $row);
|
|
|
$this->view->assign('areaTxt', json_encode($areaTxt, JSON_UNESCAPED_UNICODE));
|
|
|
$this->view->assign('areaCode', json_encode($areaCode));
|
|
|
+ $this->view->assign('row', $row);
|
|
|
return $this->view->fetch();
|
|
|
}
|
|
|
$params = $this->request->post('row/a');
|
|
|
@@ -181,14 +177,15 @@ class Lists extends Backend
|
|
|
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate;
|
|
|
$row->validateFailException()->validate($validate);
|
|
|
}
|
|
|
-
|
|
|
- $areaArr = json_decode($params['product_area'], true);
|
|
|
- $areaArrTxt = json_decode($params['product_area_txt'], true);
|
|
|
- if(empty($areaArr) || empty($areaArrTxt)) throw new ValidateException('请添加商品关联地区');
|
|
|
+ if(!empty($params['is_area'])){
|
|
|
+ $areaArr = json_decode($params['product_area'], true);
|
|
|
+ $areaArrTxt = json_decode($params['product_area_txt'], true);
|
|
|
+ if(empty($areaArr) || empty($areaArrTxt)) throw new ValidateException('请添加商品关联区域');
|
|
|
+ }
|
|
|
unset($params['product_area'], $params['product_area_txt']);
|
|
|
- $row->allowField(true)->save($params);
|
|
|
- //$this->productArea::where('product_id', $ids)->where('status', 1)->delete();
|
|
|
- $result= self::setEqualArea($ids, $areaArr, $areaArrTxt, 1);
|
|
|
+ $result=$row->allowField(true)->save($params);
|
|
|
+ //更新地区
|
|
|
+ if(!empty($params['is_area'])) $result= self::setEqualArea($ids, $areaArr, $areaArrTxt, 1);
|
|
|
Db::commit();
|
|
|
} catch (ValidateException|PDOException|Exception $e) {
|
|
|
Db::rollback();
|
|
|
@@ -200,104 +197,7 @@ class Lists extends Backend
|
|
|
$this->success();
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 导入产品地区
|
|
|
- * @param $ids
|
|
|
- * @return string
|
|
|
- * @throws DbException
|
|
|
- * @throws \think\Exception
|
|
|
- */
|
|
|
- public function exports(Importregion $importregion, Importlog $Importlog){
|
|
|
- if (false === $this->request->isPost()) {
|
|
|
- $this->assignconfig('areaData', []);
|
|
|
- return $this->view->fetch();
|
|
|
- }
|
|
|
- $params = $this->request->post('row/a');
|
|
|
- if (empty($params)) {
|
|
|
- $this->error(__('Parameter %s can not be empty', ''));
|
|
|
- }
|
|
|
- $params = $this->preExcludeFields($params);
|
|
|
- if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
|
|
|
- $params[$this->dataLimitField] = $this->auth->id;
|
|
|
- }
|
|
|
- $file = $params['export'];
|
|
|
- $filePath = ROOT_PATH . DS . 'public' . DS . $file;
|
|
|
- if (!is_file($filePath)) {
|
|
|
- $this->error(__('No results were found'));
|
|
|
- }
|
|
|
- //实例化reader
|
|
|
- $ext = pathinfo($filePath, PATHINFO_EXTENSION);
|
|
|
- if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {
|
|
|
- $this->error(__('Unknown data format'));
|
|
|
- }
|
|
|
- $reader = ($ext === 'xls')? new Xls(): new Xlsx();
|
|
|
- $result = false;
|
|
|
- Db::startTrans();
|
|
|
- try {
|
|
|
- if (!$PHPExcel = $reader->load($filePath)) {
|
|
|
- $this->error(__('Unknown data format'));
|
|
|
- }
|
|
|
- $PHPExcel = $reader->load($filePath);
|
|
|
- $currentSheet = $PHPExcel->getSheet(0); //读取文件中的第一个工作表
|
|
|
- $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
|
|
|
- //读取第二行字段名
|
|
|
- $data = [];
|
|
|
- $fields = [];
|
|
|
- $k = 0;
|
|
|
- $i = 0;
|
|
|
- $time = time();
|
|
|
- for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
|
|
|
- $values = [];
|
|
|
- //列字段
|
|
|
- for ($currentColumn = 2; $currentColumn <= 5; $currentColumn++) {
|
|
|
- $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();
|
|
|
- $values[] = is_null($val) ? '' : $val;
|
|
|
- }
|
|
|
- if(empty(array_filter($values))) continue;
|
|
|
- $field = implode('-', $values);
|
|
|
- $row = $importregion::where('name', $field)->find();
|
|
|
- if(!empty($row)){
|
|
|
- if($this->productArea::where('product_id',$params['product_id'])->where('address',$row['name'])->count() > 0) continue;
|
|
|
- $data = self::importData($data, $k, $params['product_id'], $row->com_id, $time);
|
|
|
- $data[$k]['address'] = $row['name'];
|
|
|
- $k +=1;
|
|
|
- }else{
|
|
|
- $fields = self::importData($fields, $i, $params['product_id'], $field, $time);
|
|
|
- $i += 1;
|
|
|
- }
|
|
|
- }
|
|
|
- if(!empty($data)) $result= $this->productArea::insertAll($data);
|
|
|
- //错误日志
|
|
|
- if(!empty($fields)) $Importlog::insertAll($fields);
|
|
|
- Db::commit();
|
|
|
- } catch (ValidateException|PDOException|Exception $e) {
|
|
|
- Db::rollback();
|
|
|
- $this->error($e->getMessage());
|
|
|
- }
|
|
|
- if ($result === false) {
|
|
|
- $this->error(__('No rows were inserted'));
|
|
|
- }
|
|
|
- $this->success();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 导入数据
|
|
|
- * @return array
|
|
|
- */
|
|
|
- private static function importData(array $data, int $k, int $product_id, string $ids, $time): array
|
|
|
- {
|
|
|
- //$data = array();
|
|
|
- $arr = explode('-', $ids); //分割ID
|
|
|
- $data[$k]['product_id'] = $product_id;
|
|
|
- $data[$k]['province'] = $arr[0]??0;
|
|
|
- $data[$k]['city'] = $arr[1]??0 ;
|
|
|
- $data[$k]['area'] = $arr[2]??0;
|
|
|
- $data[$k]['county'] = $arr[3]??0;
|
|
|
- $data[$k]['create_time'] = $time;
|
|
|
- return $data;
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
|
|
|
//判断是否存在相同元素
|