Commit 419d69d9 authored by 郭勇志's avatar 郭勇志

下载上传门店

parent 8cba6786
......@@ -46,6 +46,7 @@ return [
'PUT,OPTIONS revise-branch' => 'revise-branch',
'DELETE,OPTIONS del-branch' => 'del-branch',
'POST,OPTIONS branch-img-upload' => 'branch-img-upload',
'GET,OPTIONS export-branch' => 'export-branch',
],
],
//门店评分
......
......@@ -68,7 +68,7 @@ class BaseController extends ActiveController
'cors'=>[
'class' => Cors::className(),
'cors' => [
'Origin' => ['http://localhost:8080','http://192.168.188.207:8080'],
'Origin' => ['http://localhost:8000','http://192.168.188.207:8000'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
......@@ -85,10 +85,10 @@ class BaseController extends ActiveController
'optional' => ['login'],
];
// 授权
$behaviors['authorizationFilter']=[
'class' => authorizationFilter::className(),
'optional' => ['login'],//过滤不需要验证的action
];
// $behaviors['authorizationFilter']=[
// 'class' => authorizationFilter::className(),
// 'optional' => ['login'],//过滤不需要验证的action
// ];
return $behaviors;
}
}
......@@ -13,6 +13,7 @@ use app\models\v1\branch\ShopBranchService;
use yii\web\BadRequestHttpException;
use backend\helpers\Func;
use yii\web\ServerErrorHttpException;
use yidas\phpSpreadsheet\Helper;
class BranchController extends BaseController
{
......@@ -537,6 +538,237 @@ class BranchController extends BaseController
}else{
throw new HttpException(422);
}
}
}
/**
* @OA\Post(
* path="/backend/web/v1/branch/branches/import-branch",
* tags={"门店&DC"},
* summary="导入门店(gyz)",
* operationId="import-branch",
* @OA\Response(
* response=200,description="上传成功",
* ),
* security={{"Authorization":{}}},
* @OA\RequestBody(
* description="导入门店",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(type="object",@OA\Property(property="uploadFile",type="string",format="binary"))
* )
* )
* )
*/
public function actionImportBranch()
{
$model = new UploadFiles();
if (Yii::$app->request->isPost) {
//多文件用getInstances
$model->uploadFiles = UploadedFile::getInstance($model,'uploadFile');
$fileInfo = $model->upload();
if ($fileInfo['CODE']==200) {
// 文件上传成功
$rows = Helper::newSpreadsheet($fileInfo['INFO'][0])->getRows();
$tempArr=array_slice($rows,2);
$branchModel = new $this->modelClass();
$branchModel->scenario = 'import';
$transaction=$branchModel->getDb()->beginTransaction();
$servicModel = new ShopBranchService();
try {
foreach ($tempArr as $key => $value) {
$_branchModel = $branchModel::findOne(Yii::$app->user->identity->ORG_GUID.'-'.$value[0]);
if ($_branchModel===null) {
$_branchModel = clone $branchModel;
}
$_branchModel->GUID=Yii::$app->user->identity->ORG_GUID.'-'.$value[0];
$_branchModel->CODE=$value[0];
$_branchModel->ORG_GUID=Yii::$app->user->identity->ORG_GUID;
$_branchModel->DESCRIPTION=$value[1];
$_branchModel->CONTACT_NAME=$value[2];
$_branchModel->PHONE=$value[3];
$_branchModel->DELIVERY_TIME=$value[4];
$_branchModel->WORK_TIME=$value[5];
$_branchModel->NAME=$value[6];
$_branchModel->LAT=$value[7];
$_branchModel->LNG=$value[8];
$_branchModel->IS_DELIVERY=$value[9];
$_branchModel->IS_CARE=$value[10];
$_branchModel->IS_RESERV=$value[11];
$_branchModel->IS_O2O=$value[12];
$_branchModel->IS_BOIL_MEDICINE=$value[13];
$_branchModel->IS_POINTS_SHOP=$value[14];
$_branchModel->IS_VIRTUAL_BRANCH=$value[15];
$_branchModel->IS_DELIVERY_CODECHAIN_GOODS=$value[16];
$_branchModel->IS_SHELVE=$value[17];
$_branchModel->SERVICE_TYPE_CODE=$value[18];
$_branchModel->IS_BRANCH_SELF_MENTION=$value[19];
$_branchModel->IS_BRANCH_EXPRESS_DELIVERY=$value[20];
$_branchModel->IS_DELIVERS_GOODS=$value[21];
$_branchModel->IS_EXPRESS_DELIVERY=$value[22];
$_branchModel->IS_BRANCH_SELF_DELIVERY=$value[23];
$_branchModel->IS_HAFL_HOUR_DELIVERY=$value[24];
$_branchModel->IS_ONE_HOUR_DELIVERY=$value[25];
$_branchModel->IS_TWO_HOUR_DELIVERY=$value[26];
$_branchModel->IS_DAY_DELIVERY=$value[27];
//门店自提
$string='';
if(isset($value[19]) && !empty($value[19])){
$string.='23B70F47-45D6-4ECE-8A3A-13CC92DEA4B1,';
}
//门店快递配送
if(isset($value[20]) && !empty($value[20])){
$string.='1,';
}
//送货上门
if(isset($value[21]) && !empty($value[21])){
$string.='2,';
}
//快递配送
if(isset($value[22]) && !empty($value[22])){
$string.='3,';
}
//门店自配送
if(isset($value[23]) && !empty($value[23])){
$string.='4,';
}
//半小时达
if(isset($value[24]) && !empty($value[24])){
$string.='5,';
}
//1小时达
if(isset($value[25]) && !empty($value[25])){
$string.='6,';
}
//2小时达
if(isset($value[26]) && !empty($value[26])){
$string.='7,';
}
//当日定时达
if(isset($value[27]) && !empty($value[27])){
$string.='8,';
}
$string=substr($string,0,strlen($string)-1);
$_branchModel->TRANSPORT_TYPE=$string;
$_servicModel =clone $servicModel;
$_servicModel->BranchServiceDel($_branchModel->GUID);
$serviceCode = explode(',',$_branchModel->SERVICE_TYPE_CODE);
$serviceArr = [];
foreach ($serviceCode as $servValue) {
$serviceArr[]=[Func::create_guid(),$_branchModel->GUID,$servValue,1];
}
$_servicModel->getDb()->createCommand()->batchInsert('shop_branch_service', ['GUID', 'BRANCH_GUID','SERVICE_TYPE_GUID','STATE'], $serviceArr)->execute();
if (!$_branchModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key+1) => $_branchModel->errors
];
return $returnInfo;
}
}
$transaction->commit();
@unlink($fileInfo['INFO'][0]);
throw new HttpException("200", '导入成功');
}catch(\Throwable $e) {
$transaction->rollBack();
@unlink($fileInfo['INFO'][0]);
throw $e;
}
}else{
return $fileInfo['INFO'];
}
}
}
/**
* @OA\Get(
* path="/backend/web/v1/branch/branches/export-branch",
* tags={"门店&DC"},
* description="门店下载",
* summary="门店下载(gyz)",
* @OA\Parameter(name="RECIVER_PROVINCE",in="query",description="省份编号",@OA\Schema(type="string")),
* @OA\Parameter(name="RECIVER_CITY",in="query",description="城市编号",@OA\Schema(type="string")),
* @OA\Parameter(name="RECIVER_REGION",in="query",description="区域编号",@OA\Schema(type="string")),
* @OA\Parameter(name="IS_CARE",in="query",description="是否医保",@OA\Schema(type="int")),
* @OA\Parameter(name="IS_POINTS_SHOP",in="query",description="是否积分商城门店",@OA\Schema(type="int")),
* @OA\Parameter(name="IS_SHELVE",in="query",description="是否营业",@OA\Schema(type="int")),
* @OA\Parameter(name="SUPPROVINCE_GUID",in="query",description="所属分公司",@OA\Schema(type="int")),
* @OA\Parameter(name="IS_DELIVERY_CODECHAIN_GOODS",in="query",description="是否冷链配送",@OA\Schema(type="int")),
* @OA\Parameter(name="IS_O2O",in="query",description="是否O2O门店",@OA\Schema(type="int")),
* @OA\Parameter(name="CODE",in="query",description="门店名称或编码",@OA\Schema(type="string")),
* @OA\Response(response="200",description="正常导入门店列表文件"),
* security={{"Authorization": {}}}
* )
*/
public function actionExportBranch()
{
$model = new $this->modelClass();
$get = Yii::$app->request->get();
$model->attributes = $get;
if ($model->validate()) {
$transportArr = $model::find()
->select('GUID,CODE,NAME')
->from('SHOP_TRANSPORT_TYPE')
->where(['STATE' => '1'])
->asArray()
->all();
$branchArr = $model::find()
->select('CODE,NAME,PARENT_GUID,DESCRIPTION,CONTACT_NAME,PHONE,RECIVER_PROVINCE,RECIVER_CITY,RECIVER_REGION,
ADDRESS,LAT,LNG,IS_DELIVERY,DELIVERY_TIME,DELIVERY_LIMIT,WORK_TIME,IS_CARE,IS_RESERV,IS_PICK_UP_STATION,
PICKUP_LIMIT,TRANSFERS_RATE,TRANSFERS_OPENID,IS_O2O,IS_BOIL_MEDICINE,IS_POINTS_SHOP,IS_VIRTUAL_BRANCH,
IS_DELIVERY_CODECHAIN_GOODS,IS_SHELVE,TRANSPORT_TYPE')
->filterWhere(
[
'RECIVER_PROVINCE' => isset($get['RECIVER_PROVINCE'])?$get['RECIVER_PROVINCE']:'',
'RECIVER_CITY' => isset($get['RECIVER_CITY'])?$get['RECIVER_CITY']:'',
'RECIVER_REGION' => isset($get['RECIVER_REGION'])?$get['RECIVER_REGION']:'',
'IS_CARE' => isset($get['IS_CARE'])?$get['IS_CARE']:'',
'IS_POINTS_SHOP' => isset($get['IS_POINTS_SHOP'])?$get['IS_POINTS_SHOP']:'',
'IS_SHELVE' => isset($get['IS_SHELVE'])?$get['IS_SHELVE']:'',
'SUPPROVINCE_GUID' => isset($get['SUPPROVINCE_GUID'])?$get['SUPPROVINCE_GUID']:'',
'IS_DELIVERY_CODECHAIN_GOODS' => isset($get['IS_DELIVERY_CODECHAIN_GOODS'])?$get['IS_DELIVERY_CODECHAIN_GOODS']:'',
'IS_O2O' => isset($get['IS_O2O'])?$get['IS_O2O']:'',
'CODE' => isset($get['CODE'])?$get['CODE']:''
]
)
->asArray()
->all();
$_transportArr=[];
foreach ($transportArr as $tKey => $tValue) {
$_transportArr[$tValue['GUID']]=$tValue['NAME'];
}
$_branchArr=[];
foreach ($branchArr as $bKey => $bValue) {
if (!empty($bValue['TRANSPORT_TYPE'])) {
$transportType = explode(',', $bValue['TRANSPORT_TYPE']);
$bValue['TRANSPORT_TYPE']='';
foreach($transportType as $tempKey => $tempValue){
$bValue['TRANSPORT_TYPE'] .=$_transportArr[$tempValue].",";
}
$bValue['TRANSPORT_TYPE']=substr($bValue['TRANSPORT_TYPE'],0,strlen($bValue['TRANSPORT_TYPE'])-1);
$_branchArr[] = $bValue;
}
}
// var_dump($_branchArr);exit;
Helper::newSpreadsheet()
->addRow(['门店编号', '门店名称', '上级部门编号','描述','联系人姓名','手机号','省','市','区','详细地址'
,'lat坐标','lng坐标','是否支持配送','配送时间','配送距离','营业时间','是否医保','是否预约门店','是否自提门店'
,'自提范围','转账手续费','收款人openid','是否O2O','是否中药熬送','是否积分兑换','是否虚拟门店'
,'是否支持冷链配送','是否营业','配送方式'])
->addRows(
$_branchArr
)
->output('门店导入','Csv');
} else {
return $model->errors;
}
}
}
......@@ -92,6 +92,16 @@ class ShopBranch extends BaseModel
return 'shop_branch';
}
public $IS_BRANCH_SELF_MENTION;//是否门店自提
public $IS_BRANCH_EXPRESS_DELIVERY;//是否门店快递配送
public $IS_DELIVERS_GOODS;//是否送货上门
public $IS_EXPRESS_DELIVERY;//是否快递配送
public $IS_BRANCH_SELF_DELIVERY;//是否门店自配送
public $IS_HAFL_HOUR_DELIVERY;//是否半小时达
public $IS_ONE_HOUR_DELIVERY;//是否1小时达
public $IS_TWO_HOUR_DELIVERY;//是否2小时达
public $IS_DAY_DELIVERY;//是否当日定时达
public $SERVICE_TYPE_CODE;//服务门店CODE
/**
* {@inheritdoc}
*/
......@@ -99,43 +109,83 @@ class ShopBranch extends BaseModel
{
return [
[['GUID', 'ORG_GUID', 'CODE', 'NAME'], 'required','on'=>['create','update']],
[['ADDRESS', 'BRANCH_IMAGE_PATH', 'LICENCE_IMAGE_PATH', 'NOTICE_USER', 'CONTACTS_WXID', 'TRANSPORT_TYPE', 'RETURN_ADDRESS'], 'string'],
[['IS_DELIVERY', 'IS_CARE', 'IS_RESERV', 'IS_O2O', 'IS_BOIL_MEDICINE', 'IS_POINTS_SHOP', 'IS_PICK_UP_STATION', 'IS_VIRTUAL_BRANCH', 'IS_SHELVE', 'BRANCH_TYPE', 'IS_DELIVERY_CODECHAIN_GOODS', 'SCORE', 'GOODS_TYPE', 'IS_B2C', 'TOTAL_VOLUME'], 'integer'],
[['DELIVERY_LIMIT', 'PICKUP_LIMIT', 'TRANSFERS_RATE'], 'number'],
// [['ADDRESS', 'BRANCH_IMAGE_PATH', 'LICENCE_IMAGE_PATH', 'NOTICE_USER', 'CONTACTS_WXID', 'TRANSPORT_TYPE', 'RETURN_ADDRESS'], 'string'],
// [['IS_DELIVERY', 'IS_CARE', 'IS_RESERV', 'IS_O2O', 'IS_BOIL_MEDICINE', 'IS_POINTS_SHOP', 'IS_PICK_UP_STATION', 'IS_VIRTUAL_BRANCH', 'IS_SHELVE', 'BRANCH_TYPE', 'IS_DELIVERY_CODECHAIN_GOODS', 'SCORE', 'GOODS_TYPE', 'IS_B2C', 'TOTAL_VOLUME'], 'integer'],
// [['DELIVERY_LIMIT', 'PICKUP_LIMIT', 'TRANSFERS_RATE'], 'number'],
[['LICENCE_DATE', 'UPDATE_TIME'], 'safe'],
[['GUID', 'ORG_GUID', 'CODE', 'PARENT_GUID', 'PHONE', 'CONTACT_NAME', 'LAT', 'LNG', 'RECIVER_PROVINCE', 'RECIVER_CITY', 'RECIVER_REGION', 'DELIVERY_TIME', 'WORK_TIME', 'PASSWORD', 'TRANSFERS_OPENID', 'SUPPROVINCE_GUID', 'OPERATING_AREA', 'DRUGS', 'HEALTH_PRODUCTS', 'CHINESE_MEDICINE', 'MEDICAL_APPARATUS', 'PANHEALTH', 'SMALL_SHOP', 'TOWNSHIP_SHOP', 'OUTSIDE_SHOP', 'PRESCRIPTION', 'SHOP_TYPE', 'THIRD_CODE', 'COMP_CODE', 'SALESDIST', 'ZCBZIRK'], 'string', 'max' => 50],
[['NAME', 'DESCRIPTION'], 'string', 'max' => 100],
[['PRIMARY_LAT', 'PRIMARY_LNG'], 'string', 'max' => 20],
[['SUPPORT_SEND_PLATFORM'], 'string', 'max' => 10],
[['HY_CODE', 'STATUS', 'BRANCH_NAME'], 'string', 'max' => 30],
[['COMP_TEXT', 'SALESDIST_TEXT', 'ZCBZIRK_TEXT'], 'string', 'max' => 200],
[['GUID'], 'unique'],
// [['GUID', 'ORG_GUID', 'CODE', 'PARENT_GUID', 'PHONE', 'CONTACT_NAME', 'LAT', 'LNG', 'RECIVER_PROVINCE', 'RECIVER_CITY', 'RECIVER_REGION', 'DELIVERY_TIME', 'WORK_TIME', 'PASSWORD', 'TRANSFERS_OPENID', 'SUPPROVINCE_GUID', 'OPERATING_AREA', 'DRUGS', 'HEALTH_PRODUCTS', 'CHINESE_MEDICINE', 'MEDICAL_APPARATUS', 'PANHEALTH', 'SMALL_SHOP', 'TOWNSHIP_SHOP', 'OUTSIDE_SHOP', 'PRESCRIPTION', 'SHOP_TYPE', 'THIRD_CODE', 'COMP_CODE', 'SALESDIST', 'ZCBZIRK'], 'string', 'max' => 50],
// [['NAME', 'DESCRIPTION'], 'string', 'max' => 100],
// [['PRIMARY_LAT', 'PRIMARY_LNG'], 'string', 'max' => 20],
// [['SUPPORT_SEND_PLATFORM'], 'string', 'max' => 10],
// [['HY_CODE', 'STATUS', 'BRANCH_NAME'], 'string', 'max' => 30],
// [['COMP_TEXT', 'SALESDIST_TEXT', 'ZCBZIRK_TEXT'], 'string', 'max' => 200],
// [['GUID'], 'unique'],
[['CODE','DESCRIPTION','CONTACT_NAME','PHONE','NAME','LAT','LNG','IS_DELIVERY','DELIVERY_TIME','WORK_TIME','IS_CARE','IS_RESERV',
'IS_O2O','IS_BOIL_MEDICINE','IS_POINTS_SHOP','IS_VIRTUAL_BRANCH','IS_DELIVERY_CODECHAIN_GOODS','IS_SHELVE',
'IS_BRANCH_SELF_MENTION','IS_BRANCH_EXPRESS_DELIVERY','IS_DELIVERS_GOODS','IS_EXPRESS_DELIVERY','IS_BRANCH_SELF_DELIVERY',
'IS_HAFL_HOUR_DELIVERY','IS_ONE_HOUR_DELIVERY','IS_TWO_HOUR_DELIVERY','IS_DAY_DELIVERY'], 'required','on'=>['import'] ,'message' => '{attribute}不能为空'],
[['DESCRIPTION','NAME'],'string', 'max' => 100,'on'=>['import'],'tooLong'=>'最大长度不能超过100'],
[['CONTACT_NAME','PHONE','DELIVERY_TIME','WORK_TIME','LAT','LNG'],'string', 'max' => 50,'on'=>['import'],'tooLong'=>'{attribute}最大长度不能超过50'],
[['IS_CARE','IS_DELIVERY', 'IS_RESERV', 'IS_O2O', 'IS_BOIL_MEDICINE', 'IS_POINTS_SHOP', 'IS_VIRTUAL_BRANCH',
'IS_DELIVERY_CODECHAIN_GOODS', 'IS_SHELVE', 'IS_BRANCH_SELF_MENTION', 'IS_BRANCH_EXPRESS_DELIVERY',
'IS_DELIVERS_GOODS','IS_EXPRESS_DELIVERY','IS_BRANCH_SELF_DELIVERY','IS_HAFL_HOUR_DELIVERY',
'IS_ONE_HOUR_DELIVERY','IS_TWO_HOUR_DELIVERY',
'IS_DAY_DELIVERY'], 'validateExistence','on'=>['import']],
[['SERVICE_TYPE_CODE'], 'validateEffective'],//如果影响性能就注释掉
];
}
//验证这几个标志量只能为0或1
public function validateExistence($attribute){
if (!in_array($this->$attribute,['0','1'])) {
$this->addError($attribute, $this->attributeLabels()[$attribute].'只能为0或1.');
}
}
//验证服务类目的有效性
public function validateEffective($attribute){
$importArr = explode(',',$this->$attribute);
$codeArr = $this::find()
->select('CODE')
->from('SHOP_BRANCH_SERVICE_TYPE')
->where(['CODE' => $importArr])
->asArray()
->all();
$tempArr = [];
foreach ($codeArr as $value) {
$tempArr[] = $value['CODE'];
}
$diff = array_diff($importArr,$tempArr);
if (!empty($diff)) {
$this->addError($attribute, '服务类目CODE为'.implode(',',$diff).'不存在.');
}
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'GUID' => 'Guid',
'ORG_GUID' => 'Org Guid',
'CODE' => 'Code',
'NAME' => 'Name',
'PARENT_GUID' => 'Parent Guid',
'DESCRIPTION' => 'Description',
'ADDRESS' => 'Address',
'PHONE' => 'Phone',
'CONTACT_NAME' => 'Contact Name',
'LAT' => 'Lat',
'LNG' => 'Lng',
'GUID' => '主键',
'ORG_GUID' => '组织机构号',
'CODE' => '门店编码',
'NAME' => '门店简称',
'PARENT_GUID' => '上级GUID',
'DESCRIPTION' => '描述',
'ADDRESS' => '地址',
'PHONE' => '手机号',
'CONTACT_NAME' => '联系人姓名',
'LAT' => '纬度',
'LNG' => '经度',
'PRIMARY_LAT' => 'Primary Lat',
'PRIMARY_LNG' => 'Primary Lng',
'RECIVER_PROVINCE' => 'Reciver Province',
'RECIVER_CITY' => 'Reciver City',
'RECIVER_REGION' => 'Reciver Region',
'IS_DELIVERY' => 'Is Delivery',
'IS_DELIVERY' => '是否支持配送',
'DELIVERY_TIME' => 'Delivery Time',
'WORK_TIME' => 'Work Time',
'DELIVERY_LIMIT' => 'Delivery Limit',
......@@ -143,18 +193,18 @@ class ShopBranch extends BaseModel
'BRANCH_IMAGE_PATH' => 'Branch Image Path',
'LICENCE_IMAGE_PATH' => 'Licence Image Path',
'PASSWORD' => 'Password',
'IS_RESERV' => 'Is Reserv',
'IS_O2O' => 'Is O2 O',
'IS_BOIL_MEDICINE' => 'Is Boil Medicine',
'IS_POINTS_SHOP' => 'Is Points Shop',
'IS_PICK_UP_STATION' => 'Is Pick Up Station',
'IS_RESERV' => '是否预约门店',
'IS_O2O' => '是否O2O',
'IS_BOIL_MEDICINE' => '是否熬药门店',
'IS_POINTS_SHOP' => '是否积分兑换门店',
'IS_PICK_UP_STATION' => '是否自提门店',
'NOTICE_USER' => 'Notice User',
'CONTACTS_WXID' => 'Contacts Wxid',
'IS_VIRTUAL_BRANCH' => 'Is Virtual Branch',
'PICKUP_LIMIT' => 'Pickup Limit',
'TRANSFERS_RATE' => 'Transfers Rate',
'TRANSFERS_OPENID' => 'Transfers Openid',
'IS_SHELVE' => 'Is Shelve',
'IS_SHELVE' => '是否营业',
'LICENCE_DATE' => 'Licence Date',
'BRANCH_TYPE' => 'Branch Type',
'SUPPORT_SEND_PLATFORM' => 'Support Send Platform',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment