Commit 8b96aa0f authored by 孙磊's avatar 孙磊

商品导入

Signed-off-by: 孙磊's avatarsunlei <sunlei@romens.cn>
parent 42e6e734
<?php
namespace backend\controllers\v1\shopgoods;
use Yii;
use backend\controllers\v1\BaseController;
use yii\web\BadRequestHttpException;
use backend\helpers\Func;
use backend\helpers\UploadFiles;
use yidas\phpSpreadsheet\Helper;
use yii\web\HttpException;
use yii\web\UploadedFile;
use app\models\v1\shopgoods\ShopGoodsProperty;
use app\models\v1\shopgoods\ShopGoodsBrand;
use app\models\v1\shopgoods\ShopGoodsSubsidiary;
use app\models\v1\shopgoods\ShopGoodsAttach;
use app\models\v1\rbacuser\ShopRbacUser;
use app\models\v1\transport\ShopTransportType;
use app\models\v1\shopgoods\ShopPointsGoods;
use app\models\v1\shopgoods\ShopSAttach;
class ImportGoodsInfoController extends BaseController
{
public $modelClass = 'app\models\v1\shopgoods\ShopGoods';
/**
* @OA\Post(
* path="/backend/web/v1/shopgoods/import-goods-infos/shop-goods-import",
* tags={"商品管理"},
* summary="导入商品信息Excel(孙磊)",
* @OA\Response(
* response=200,
* description="上传成功",
* ),
* security={{"Authorization":{}}},
* @OA\RequestBody(
* description="导入商品Excel",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* )
* )
*/
public function actionShopGoodsImport()
{
$model = new UploadFiles(['xlsx', 'xls']);
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);
$shopModel = new $this->modelClass();
$propertyModel = new ShopGoodsProperty();
$brandModel = new ShopGoodsBrand();
$subsidiaryModel = new ShopGoodsSubsidiary();
$ORG_GUID = Yii::$app->user->identity->ORG_GUID;
//图片相关
$host_name = YUNUO_YUN_URL;
$pic_ext = PIC_EXTENSIONS;
//批量处理商品标签、品牌
$all_tag = array();
$all_brand = array();
foreach ($tempArr as $k => $v) {
$all_brand[] = $v[3];
$all_tag[] = $v[18];
}
//查看商品品牌表是否有值,没有则添加
if ($all_brand) {
$goods_brand_info = $brandModel->validateBrand($all_brand);
//存在则添加
if ($goods_brand_info) {
foreach ($goods_brand_info as $k => $v) {
$_brandModel = clone $brandModel;
$_brandModel->GUID = Func::create_guid();
$_brandModel->ORG_GUID = $ORG_GUID;
$_brandModel->NAME = $v;
if (!$_brandModel->save()) {
Yii::$app->response->statusCode = 422;
return $_brandModel->errors;
}
}
}
}
//查看商品标签表是否有值,没有则添加
if ($all_tag) {
foreach ($all_tag as $k => $v) {
$v = preg_replace("/,/", ",", $v);
$all_tag[$k] = explode(',', $v);
}
$setgoodstag = $propertyModel->validateProperty($all_tag);
//存在则添加
if ($setgoodstag) {
foreach ($setgoodstag as $val) {
$_propertyModel = clone $propertyModel;
$_propertyModel->GUID = Func::create_guid();
$_propertyModel->ORG_GUID = $ORG_GUID;
$_propertyModel->CODE = Func::create_guid();
$_propertyModel->NAME = $val;
if (!$_propertyModel->save()) {
Yii::$app->response->statusCode = 422;
return $_propertyModel->errors;
}
}
}
}
$shopModel->scenario = 'import';
$transaction = $shopModel->getDb()->beginTransaction();
try {
foreach ($tempArr as $key => $value) {
$_shopModel = $shopModel::findOne(['CODE' => $value[0]]);
$goods_guid = $ORG_GUID . '-' . $value[0];
$_subsidiaryModel = $subsidiaryModel::findOne(['GOODS_GUID' => $goods_guid]);
//商品信息
if ($_shopModel === null) {
$_shopModel = clone $shopModel;
$_shopModel->GUID = $goods_guid; //商品guid
$_shopModel->ORG_GUID = $ORG_GUID; //组织机构号
$_shopModel->CREATE_TIME = date('Y-m-d H:i:s', time()); //创建时间
$_shopModel->CREATE_USER_GUID = Yii::$app->user->identity->CODE; //创建人账号
} else {
$_shopModel->IS_AUDITING = 1;
$_shopModel->UPDATE_TIME = date('Y-m-d H:i:s', time());
$_shopModel->ORG_GUID = $ORG_GUID;
$_shopModel->UPDATE_USER_GUID = Yii::$app->user->identity->CODE; //修改人账号
}
//商品辅助信息
if ($_subsidiaryModel === null) {
$_subsidiaryModel = clone $subsidiaryModel;
$_subsidiaryModel->GUID = Func::create_guid();
$_subsidiaryModel->GOODS_GUID = $goods_guid;
$_subsidiaryModel->ORG_GUID = $ORG_GUID;
}
//条件验证
if ($value[7] == '')
$value[7] = 0; //用户级商品限购数量
if ($value[8] == '')
$value[8] = 0; //订单级商品限购数量
//判断市场价,售价,库存是否为空,如果为空就将他们设置为0
if ($value[19] == '' || !isset($value[19]))
$value[19] = 0; //设置市场价为0
if ($value[20] == '' || !isset($value[20]))
$value[20] = 0; //设置售价为0
if ($value[21] == '' || !isset($value[21]))
$value[21] = 0; //设置库存为0
if ($value[22] == '' || !isset($value[22]))
$value[22] = 1; //设置是否发布小程序和APP为是
if ($value[23] == '' || !isset($value[23]))
$value[23] = 1; //设置是否是实物为是
if ($value[24] == '' || !isset($value[24]))
$value[24] = 0; //设置是否处方药为否
if ($value[25] == '' || !isset($value[25]))
$value[25] = 0; //设置是否医保为否
if ($value[26] == '' || !isset($value[26]))
$value[26] = 0; //设置是否多规格为否
if ($value[27] == '' || !isset($value[27]))
$value[27] = 0; //设置是否特殊商品为否
if ($value[28] == '' || !isset($value[28]))
$value[28] = 0; //设置是否冷链商品为否
if ($value[29] == '' || !isset($value[29]))
$value[29] = 0; //设置是否赠品为否
if ($value[31] == '' || !isset($value[31]))
$value[31] = 0; //设置是否麻黄碱商品为否
if ($value[36] == '' || !isset($value[36]))
$value[36] = 0; //设置是否跨境商品为否
//获取商品品牌GUID
if ($value[3]) {
$brandInfo = $brandModel->getBrandInfo($value[3]);
$_shopModel->BRAND_GUID = $brandInfo[0]['GUID'];
}
//添加或更新
$_shopModel->HOST_NAME = $host_name; //图品域名
$_shopModel->PIC_EXTENSIONS = $pic_ext; //图品后缀
$_shopModel->CODE = $value[0]; //商品编码
$_shopModel->NAME = $value[1]; //药品名
$_shopModel->APPROVAL_NUMBER = $value[2]; //批准文号
$_shopModel->BRAND_NAME = $value[3]; //品牌名称
$_shopModel->DOSAGE_FORM = $value[4]; //剂型
$_shopModel->SPEC = $value[5]; //规格
$_shopModel->UNIT_NAME = $value[6]; //计量单位
$_shopModel->LIMIT_GOODS_NUM = $value[7]; //用户级商品限购数量
$_shopModel->ORDERL_IMIT = $value[8]; //订单级商品限购数量
$_shopModel->IS_GIFT_INTERNET = $value[9]; //是否是互联网赠品
$_shopModel->IS_ADVANCE = $value[10]; //是否预售商品
$_shopModel->IS_TAX = $value[11]; //是否含海关税
$_shopModel->IS_QA = $value[12]; //是否质保商品
$_shopModel->QA_DATE = $value[13]; //质保日期
$_shopModel->CUSTOMS_NUMBER = $value[14]; //商品海关备案编码
$_shopModel->TAX_RATE = $value[15]; //商品海关税率
$_shopModel->PRODUCTION_ENTERPRISES = $value[16]; //生产企业
$_shopModel->BAR_CODE = $value[17]; //条形码
$_shopModel->GOODS_TAG = $value[18]; //商品标签
$_shopModel->MARKET_PRICE = $value[19]; //市场价
$_shopModel->USER_PRICE = $value[20]; //售价
$_shopModel->STOCK_COUNT = $value[21]; //库存
$_shopModel->IS_PUBLIC_MOBILE = $value[22]; //是否发布小程序和APP
$_shopModel->IS_REAL = $value[23]; //是否是实物
$_shopModel->IS_PRESCRIPTION = $value[24]; //是否处方药
$_shopModel->IS_MEDICAL_INSURANCE = $value[25]; //是否医保
$_shopModel->IS_MULTI_SPEC = $value[26]; //是否多规格
$_shopModel->IS_SPECIAL_GOODS = $value[27]; //是否特殊商品
$_shopModel->IS_CODECHAIN_GOODS = $value[28]; //是否冷链商品
$_shopModel->IS_GIFT = $value[29]; //是否赠品
$_shopModel->STATE_OF_ORIGIN = $value[30]; //源产地国描述
$_shopModel->IS_EPHEDRINE = $value[31]; //是否麻黄碱商品
$_shopModel->THIRD_PARTY_CODE = $value[32]; //供应商编码
$_shopModel->THIRD_PARTY_NAME = $value[33]; //供应商名称
$_shopModel->TERMVALIDITY = $value[34]; //有效期
$_shopModel->PACKAGE_LICENSE_NUMBER = $value[35]; //分包装批准文号
$_shopModel->IS_CROSSB_ORDER = $value[36]; //是否跨境
$_shopModel->ITEM_CAT = $value[37]; //商品类目
$_shopModel->ITEM_CAT_DES = $value[38]; //商品类目描述
$_shopModel->ITEM_TYPE = $value[39]; //商品类型
$_shopModel->ITEM_TYPE_DESC = $value[40]; //商品类型描述
$_shopModel->MATERIEL = $value[41]; //物料划分
$_shopModel->MATERIEL_DESC = $value[42]; //物料划分描述
$_shopModel->ROUGH_WEIGHT = $value[43]; //毛重
$_shopModel->NUM_PACKAGES = $value[44]; //中包装数
$_shopModel->NUM_PACKAGES_DESC = $value[45]; //包装描述
$_shopModel->STORAGE_CONDITION = $value[46]; //存储条件
//商品信息添加或更新
if (!$_shopModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 1) => $_shopModel->errors
];
return $returnInfo;
}
//商品辅助信息添加或更新
$_subsidiaryModel->MATTERS_ATTENTION = $value[47]; //注意事项
$_subsidiaryModel->USAGE_DOSAGE = $value[48]; //用法用量
$_subsidiaryModel->DRUG_INIERACTIONS = $value[49]; //药物相互作用
$_subsidiaryModel->DRUG_OVERDOSE = $value[50]; //药物过量
$_subsidiaryModel->DRUG_INGREDIENTS = $value[51]; //药物成分
$_subsidiaryModel->PHARMAC_TOXI = $value[52]; //药理毒理
$_subsidiaryModel->PHARMACOKINETICS = $value[53]; //药代动力学
$_subsidiaryModel->CLINICAL_TRIALS = $value[54]; //临床实验
$_subsidiaryModel->ELDERLY_MEDICATION = $value[55]; //老年用药
$_subsidiaryModel->PREGLACT_MEDICATION = $value[56]; //孕妇及哺乳期妇女用药
$_subsidiaryModel->CHILDREN_MEDICATION = $value[57]; //儿童用药
$_subsidiaryModel->TABOO = $value[58]; //禁忌
$_subsidiaryModel->FUNCTION_ALINDICAT = $value[59]; //功能主治
$_subsidiaryModel->SIDE_EFFECTS = $value[60]; //不良反应
$_subsidiaryModel->SUITABLE_CROWD = $value[61]; //适宜人群
$_subsidiaryModel->INAPPROPRIATE_CROWD = $value[62]; //不适宜人群
$_subsidiaryModel->MODEL = $value[63]; //型号
$_subsidiaryModel->COLOR = $value[64]; //颜色
$_subsidiaryModel->DIAMETER = $value[65]; //直径
$_subsidiaryModel->THICKNESS = $value[66]; //厚度
$_subsidiaryModel->DEGREES = $value[67]; //度数
$_subsidiaryModel->SERVICE_INFORMATION = $value[68]; //售后服务商信息
$_subsidiaryModel->SPECIFICATION_CON = $value[69]; //规格转化(散装)
$_subsidiaryModel->SPECIAL_PURPOSE = $value[70]; //是否为特殊用品化妆品
//辅助信息添加或更新
if (!$_subsidiaryModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 2) => $_subsidiaryModel->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 {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
}
}
/**
* @OA\Post(
* path="/backend/web/v1/shopgoods/import-goods-infos/goods-extensions-import",
* tags={"商品管理"},
* summary="导入商品扩展信息Excel(孙磊)",
* @OA\Response(
* response=200,
* description="上传成功",
* ),
* security={{"Authorization":{}}},
* @OA\RequestBody(
* description="导入商品扩展信息Excel",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* )
* )
*/
public function actionGoodsExtensionsImport()
{
$model = new UploadFiles(['xlsx', 'xls']);
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);
$shopModel = new $this->modelClass();
$attachModel = new ShopGoodsAttach();
$transportModel = new ShopTransportType();
$ORG_GUID = Yii::$app->user->identity->ORG_GUID;
//权限信息
$rbac = new ShopRbacUser();
$userGuid = Yii::$app->user->identity->GUID;
$userinfo = $rbac->getRbacUserInfo($userGuid);
// $supCompanyGuid = $userinfo['SUPCOMPANY_GUID'];
$supCompanyGuid = $userinfo['PARENT_BRANCH_GUID'];
$shopModel->scenario = 'import';
$transaction = $attachModel->getDb()->beginTransaction();
try {
foreach ($tempArr as $key => $value) {
if (empty($value[0])) {
throw new BadRequestHttpException('商品编码不能为空');
}
$_shopModel = $shopModel::findOne(['CODE' => $value[0]]);
//商品信息
if ($_shopModel === null) {
continue;
} else {
$goodsGuid = $_shopModel['GUID'];
$GoodsAttachGuid = $supCompanyGuid . '-' . $goodsGuid; //商品扩展信息GUID
$_attachModel = $attachModel::findOne(['GOODS_CODE' => $value[0]]);
if ($_attachModel === null) {
$_attachModel = clone $attachModel;
$_attachModel->GUID = $GoodsAttachGuid;
$_attachModel->ORG_GUID = $ORG_GUID;
$_attachModel->GOODS_GUID = $goodsGuid;
} else {
$_attachModel->UPDATE_TIME = date('Y-m-d H:i:s', time());
}
}
$fileLoadPath = $supCompanyGuid . '/' . $value[0] . '/' . $value[0];
//条件验证
if ($value[3] == 1) {
$host_name = YUNUO_YUN_URL;
$picFilePath = $fileLoadPath . '-1.jpg';
$imgUrl = $host_name . $picFilePath;
$value[3] = $imgUrl; //商品图片
} else {
$value[3] = '';
}
$attachPicNum = (int) trim($value[4]);
//批量更新 商品子图
if (!empty($attachPicNum)) {
$res = $this->BatchUpdateGoodsExteninfo($GoodsAttachGuid, $attachPicNum, $value[0]);
}
if (!empty($value[5])) {
$value[5] = preg_replace("/,/", ",", $value[5]);
$transportType = explode(',', $value[5]);
//获取配送方式信息
$getTransportTypeInfo = $transportModel->BranchTransportInfo($transportType);
if ($getTransportTypeInfo) {
$transportGuid = array_column($getTransportTypeInfo, 'GUID');
$transportGuid_str = implode(',', $transportGuid);
} else {
$transportGuid_str = '';
}
$value[5] = $transportGuid_str;
}
if ($value[6] == '' || $value[6] == 1) {
$value[6] = 0; //0 下单时减少库存
} else {
$value[6] = 1; //1 付款后减少库存
}
if ($value[7] == '')
$value[7] = 0; //是否返利商品
if (empty($value[8]))
$value[8] = 0; //员工分销商一级返利额比例
if (empty($value[9]))
$value[9] = 0; //员工分销商二级返利额比例
if (empty($value[10]))
$value[10] = 0; //员工一级分销返利额比例
if (empty($value[11]))
$value[11] = 0; //员工二级分销返利额比例
if (empty($value[12]))
$value[12] = 0; //用户一级分销返利额比例
if (empty($value[13]))
$value[13] = 0; //用户二级分销返利额比例
if ($value[16] == '' || !isset($value[16]))
$value[16] = 1; //设置是否上架为是
if ($value[17] == '' || !isset($value[17]))
$value[17] = 1; //设置是否发布小程序和APP为是
if ($value[20] == '' || !isset($value[20]))
$value[20] = 0; //设置是否医保为否
if ($value[21] == '' || !isset($value[21]))
$value[21] = 0; //设置是否双跨处方药为否
if ($value[22] == '' || !isset($value[22]))
$value[22] = 0; //设置是否赠品为否
if ($value[23] == '' || !isset($value[23]))
$value[23] = 0; //设置是否参与营销活动为否
if ($value[30] == '' || !isset($value[30]))
$value[30] = 0; //设置是否预售为否
if ($value[31] == '' || !isset($value[31]))
$value[31] = 0; //设置是否限购为否
if ($value[34] == '' || !isset($value[34]))
$value[34] = 0; //设置是否是跨境商品为否
//导入验证
$_attachModel->GOODS_CODE = $value[0]; //商品编码
$_attachModel->GOODS_TITLE = $value[1]; //商品标题
$_attachModel->GOODS_ABSTRACT = $value[2]; //商品摘要
$_attachModel->HOST_NAME = $host_name; //商品图片 域名
$_attachModel->URI = $value[3]; //商品图片 路径
$_attachModel->TRANSPORT_TYPE = $value[5]; //配送方式
$_attachModel->STOCK_REDUCE_TYPE = $value[6]; //支付前减库存
$_attachModel->IS_DISTRIBUTION_GOODS = $value[7]; //是否返利商品
$_attachModel->EMPLOYEE_FIRST_RETURN_MONEY_RATIOS1 = $value[8]; //员工分销商一级返利额比例
$_attachModel->EMPLOYEE_SECOND_RETURN_MONEY_RATIOS2 = $value[9]; //员工分销商二级返利额比例
$_attachModel->EMPLOYEE_FIRST_RETURN_MONEY_RATIO = $value[10]; //员工一级分销返利额比例
$_attachModel->EMPLOYEE_SECOND_RETURN_MONEY_RATIO = $value[11]; //员工二级分销返利额比例
$_attachModel->USER_FIRST_RETURN_MONEY_RATIO = $value[12]; //用户一级分销返利额比例
$_attachModel->USER_SECOND_RETURN_MONEY_RATIO = $value[13]; //用户二级分销返利额比例
$_attachModel->DETAIL_DESCRIPTION = $value[14]; //商品描述
$_attachModel->SUPCOMPANY_GUID = $supCompanyGuid; //省份编号
$_attachModel->PUBLIC_TYPE = $value[16]; //是否上架
$_attachModel->IS_PUBLIC_MOBILE = $value[17]; //是否发布到小程序或APP
$_attachModel->AD = $value[18]; //商品广告词
$_attachModel->PREFIX = $value[19]; //前缀
$_attachModel->IS_CARE = $value[20]; //是否医保
$_attachModel->IS_RXANDOTC = $value[21]; //是否双跨处方药
$_attachModel->IS_GIFT = $value[22]; //是否赠品
$_attachModel->IS_ACTIVITY = $value[23]; //是否参与营销活动
$_attachModel->PAY_TYPE = $value[24]; //支付渠道
$_attachModel->COST_PRICE = $value[25]; //成本
$_attachModel->MAX_ORDER_NUM = $value[26]; //最大订单数量
$_attachModel->MIN_ORDER_NUM = $value[27]; //最小订单数量
$_attachModel->GOODS_REBATE = $value[28]; //单品级的返利维护
$_attachModel->REBATE_DISTRIBUTE = $value[29]; //多级人员的分配
$_attachModel->IS_PRESELL = $value[30]; //是否预售
$_attachModel->IS_LIMIT = $value[31]; //是否限购
$_attachModel->TAX = $value[32]; //商品税率/税金
$_attachModel->ESSENTIAL_DRUGS = $value[33]; //基本药物
$_attachModel->IS_CROSS_BORDER = $value[34]; //是否是跨境商品
$_attachModel->HINT = $value[35]; //温馨提示
//商品扩展信息添加或更新
if (!$_attachModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 1) => $_attachModel->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 {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
}
}
/**
* 批量更新 商品子图
*/
public function BatchUpdateGoodsExteninfo($GoodAttachGuid, $AttachInfoNum, $goodCode)
{
$ORG_GUID = Yii::$app->user->identity->ORG_GUID;
$host_name = YUNUO_YUN_URL;
//先删除原有 子图信息
$SAttachModel = new ShopSAttach();
$SAttachModel->deleteByGoodsGuid($GoodAttachGuid);
//去掉主图排序
$AttachInfoNum = empty($AttachInfoNum) ? 0 : $AttachInfoNum + 1;
//权限信息
$rbac = new ShopRbacUser();
$userGuid = Yii::$app->user->identity->GUID;
$userinfo = $rbac->getRbacUserInfo($userGuid);
// $supCompanyGuid = $userinfo['SUPCOMPANY_GUID'];
$supCompanyGuid = $userinfo['PARENT_BRANCH_GUID'];
//路径
$fileLoadPath = $supCompanyGuid . '/' . $goodCode . '/' . $goodCode . '-';
for ($i = 2; $i <= $AttachInfoNum; $i++) {
$imgsNewId = Func::create_guid();
// $filePath = $host_name . $fileLoadPath . $i . '.jpg';
$filesPath = $fileLoadPath . $i . '.jpg';
//验证
$_SAttachModel = clone $SAttachModel;
$_SAttachModel->GUID = $imgsNewId;
$_SAttachModel->ORG_GUID = $ORG_GUID;
$_SAttachModel->GOODS_GUID = $GoodAttachGuid;
$_SAttachModel->HOST_NAME = $host_name;
$_SAttachModel->URI = $filesPath;
$_SAttachModel->ORDER_INDEX = (string) $i;
$_SAttachModel->TYPE = 1;
//保存
if (!$_SAttachModel->save()) {
Yii::$app->response->statusCode = 422;
return $_SAttachModel->errors;
}
}
return $_SAttachModel;
}
/**
* @OA\Post(
* path="/backend/web/v1/shopgoods/import-goods-infos/points-goods-import",
* tags={"商品管理"},
* summary="导入积分商品信息Excel(孙磊)",
* @OA\Response(
* response=200,
* description="上传成功",
* ),
* security={{"Authorization":{}}},
* @OA\RequestBody(
* description="导入积分商品信息Excel",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* )
* )
*/
public function actionPointsGoodsImport()
{
$model = new UploadFiles(['xlsx', 'xls']);
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);
if (empty($tempArr)) {
@unlink($fileInfo['INFO'][0]);
throw new BadRequestHttpException('上传至少一条数据');
}
//判断唯一性数组
$uniqueArr = array();
foreach ($tempArr as $key => $value) {
$uniqueArr[] = $value[0];
}
if (count($uniqueArr) != count(array_unique($uniqueArr))) {
@unlink($fileInfo['INFO'][0]);
throw new BadRequestHttpException('存在重复数据,请确认');
}
$pointsGoodsModel = new ShopPointsGoods();
$shopModel = new $this->modelClass();
$ORG_GUID = Yii::$app->user->identity->ORG_GUID;
$pointsGoodsModel->scenario = 'import';
$transaction = $pointsGoodsModel->getDb()->beginTransaction();
try {
foreach ($tempArr as $key => $value) {
if (empty($value[0])) {
throw new BadRequestHttpException('商品编码不能为空');
}
if (empty($value[4]) || $value[4] == 0) {
throw new BadRequestHttpException('商品总金额不能为空或者0');
}
$_pointsGoodsModel = $pointsGoodsModel::findOne(['CODE' => $value[0]]);
//积分商品信息
if ($_pointsGoodsModel === null) {
$_pointsGoodsModel = clone $pointsGoodsModel;
$_pointsGoodsModel->GUID = Func::create_guid();
$_pointsGoodsModel->ORG_GUID = $ORG_GUID;
$_pointsGoodsModel->CREATE_TIME = date('Y-m-d H:i:s', time());
}
//导入验证
$_pointsGoodsModel->CODE = $value[0]; //商品编码
$_pointsGoodsModel->POINTS_VALUE = $value[1]; //全积分支付所需积分
$_pointsGoodsModel->PART_POINTS = $value[2]; //积分+现金支付所需积分
$_pointsGoodsModel->PRICES = $value[3]; //积分+现金支付所需现金
$_pointsGoodsModel->TOTAL_AMOUNT = $value[4]; //商品总金额
//积分商品信息添加或更新
if (!$_pointsGoodsModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 1) => $_pointsGoodsModel->errors
];
return $returnInfo;
}
//商品信息更新
$_shopModel = $shopModel::findOne(['CODE' => $value[0]]);
if ($_shopModel === null) {
continue;
} else {
$_shopModel->UPDATE_TIME = date('Y-m-d H:i:s', time());
$_shopModel->UPDATE_USER_GUID = Yii::$app->user->identity->CODE; //修改人账号
}
$_shopModel->CODE = $value[0]; //商品编码
$_shopModel->ALL_POINTS_NUM = $value[1]; //全积分支付所需积分
$_shopModel->PART_POINTS_NUM = $value[2]; //积分+现金支付所需积分
$_shopModel->POINTS_PRICE = $value[3]; //积分+现金支付所需现金
$_shopModel->TOTAL_PRICE = $value[4]; //商品总金额
//更新
if (!$_shopModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 2) => $_shopModel->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 {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
}
}
/**
* @OA\Post(
* path="/backend/web/v1/shopgoods/import-goods-infos/province-goods-extensions-import",
* tags={"商品管理"},
* summary="省级导入商品扩展信息Excel(孙磊)",
* @OA\Response(
* response=200,
* description="上传成功",
* ),
* security={{"Authorization":{}}},
* @OA\RequestBody(
* description="省级导入商品扩展信息Excel",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* )
* )
*/
public function actionProvinceGoodsExtensionsImport()
{
$model = new UploadFiles(['xlsx', 'xls']);
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);
$shopModel = new $this->modelClass();
$attachModel = new ShopGoodsAttach();
$transportModel = new ShopTransportType();
$ORG_GUID = Yii::$app->user->identity->ORG_GUID;
//权限信息
$rbac = new ShopRbacUser();
$userGuid = Yii::$app->user->identity->GUID;
$userinfo = $rbac->getRbacUserInfo($userGuid);
// $supCompanyGuid = $userinfo['SUPCOMPANY_GUID'];
$supCompanyGuid = $userinfo['PARENT_BRANCH_GUID'];
$shopModel->scenario = 'import';
$transaction = $attachModel->getDb()->beginTransaction();
try {
foreach ($tempArr as $key => $value) {
if (empty($value[0])) {
throw new BadRequestHttpException('商品编码不能为空');
}
$_shopModel = $shopModel::findOne(['CODE' => $value[0]]);
//商品信息
if ($_shopModel === null) {
continue;
} else {
$_attachModel = $attachModel::findOne(['GOODS_CODE' => $value[0], 'SUPCOMPANY_GUID' => $supCompanyGuid]);
//只可修改扩展信息
if ($_attachModel === null) {
continue;
} else {
$_attachModel->UPDATE_TIME = date('Y-m-d H:i:s', time());
}
}
//条件验证
if (!empty($value[3])) {
$value[3] = preg_replace("/,/", ",", $value[3]);
$transportType = explode(',', $value[3]);
//获取配送方式信息
$getTransportTypeInfo = $transportModel->BranchTransportInfo($transportType);
if ($getTransportTypeInfo) {
$transportGuid = array_column($getTransportTypeInfo, 'GUID');
$transportGuid_str = implode(',', $transportGuid);
} else {
$transportGuid_str = '';
}
$value[3] = $transportGuid_str;
}
if ($value[4] == '' || $value[4] == 1) {
$value[4] = 0; //0 下单时减少库存
} else {
$value[4] = 1; //1 付款后减少库存
}
if (empty($value[5]))
$value[5] = 0; //是否返利商品
if (empty($value[6]))
$value[6] = 0; //员工一级分销返利额比例
if (empty($value[7]))
$value[7] = 0; //员工二级分销返利额比例
if (empty($value[8]))
$value[8] = 0; //用户一级分销返利额比例
if (empty($value[9]))
$value[9] = 0; //用户二级分销返利额比例
if ($value[10] == '' || !isset($value[10]))
$value[10] = 1; //设置是否上架为是
if ($value[11] == '' || !isset($value[11]))
$value[11] = 1; //设置是否发布小程序和APP为是
if ($value[14] == '' || !isset($value[14]))
$value[14] = 0; //设置是否医保为否
if ($value[15] == '' || !isset($value[15]))
$value[15] = 0; //设置是否双跨处方药为否
if ($value[16] == '' || !isset($value[16]))
$value[16] = 0; //设置是否赠品为否
if ($value[17] == '' || !isset($value[17]))
$value[17] = 0; //设置是否参与营销活动为否
if ($value[24] == '' || !isset($value[24]))
$value[24] = 0; //设置是否预售为否
if ($value[25] == '' || !isset($value[25]))
$value[25] = 0; //设置是否限购为否
if ($value[28] == '' || !isset($value[28]))
$value[28] = 0; //设置是否是跨境商品为否
//导入验证
$_attachModel->PUBLIC_PLATFORM = '1,2,3'; //发布平台
$_attachModel->GOODS_CODE = $value[0]; //商品编码
$_attachModel->GOODS_TITLE = $value[1]; //商品标题
$_attachModel->GOODS_ABSTRACT = $value[2]; //商品摘要
$_attachModel->TRANSPORT_TYPE = $value[3]; //配送方式
$_attachModel->STOCK_REDUCE_TYPE = $value[4]; //支付前减库存
$_attachModel->IS_DISTRIBUTION_GOODS = $value[5]; //是否返利商品
$_attachModel->EMPLOYEE_FIRST_RETURN_MONEY_RATIO = $value[6]; //员工一级分销返利额比例
$_attachModel->EMPLOYEE_SECOND_RETURN_MONEY_RATIO = $value[7]; //员工二级分销返利额比例
$_attachModel->USER_FIRST_RETURN_MONEY_RATIO = $value[8]; //用户一级分销返利额比例
$_attachModel->USER_SECOND_RETURN_MONEY_RATIO = $value[9]; //用户二级分销返利额比例
$_attachModel->SUPCOMPANY_GUID = $supCompanyGuid; //省份编号
$_attachModel->PUBLIC_TYPE = $value[10]; //是否上架
$_attachModel->IS_PUBLIC_MOBILE = $value[11]; //是否发布到小程序或APP
$_attachModel->AD = $value[12]; //商品广告词
$_attachModel->PREFIX = $value[13]; //前缀
$_attachModel->IS_CARE = $value[14]; //是否医保
$_attachModel->IS_RXANDOTC = $value[15]; //是否双跨处方药
$_attachModel->IS_GIFT = $value[16]; //是否赠品
$_attachModel->IS_ACTIVITY = $value[17]; //是否参与营销活动
$_attachModel->PAY_TYPE = $value[18]; //支付渠道
$_attachModel->COST_PRICE = $value[19]; //成本
$_attachModel->MAX_ORDER_NUM = $value[20]; //最大订单数量
$_attachModel->MIN_ORDER_NUM = $value[21]; //最小订单数量
$_attachModel->GOODS_REBATE = $value[22]; //单品级的返利维护
$_attachModel->REBATE_DISTRIBUTE = $value[23]; //多级人员的分配
$_attachModel->IS_PRESELL = $value[24]; //是否预售
$_attachModel->IS_LIMIT = $value[25]; //是否限购
$_attachModel->TAX = $value[26]; //商品税率/税金
$_attachModel->ESSENTIAL_DRUGS = $value[27]; //基本药物
$_attachModel->IS_CROSS_BORDER = $value[28]; //是否是跨境商品
$_attachModel->HINT = $value[29]; //温馨提示
//商品扩展信息更新
if (!$_attachModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 1) => $_attachModel->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 {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
}
}
/**
* @OA\Post(
* path="/backend/web/v1/shopgoods/import-goods-infos/province-goods-rebate-import",
* tags={"商品管理"},
* summary="省级商品返利额信息上传Excel(孙磊)",
* @OA\Response(
* response=200,
* description="上传成功",
* ),
* security={{"Authorization":{}}},
* @OA\RequestBody(
* description="省级商品返利额信息上传Excel",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* )
* )
*/
public function actionProvinceGoodsRebateImport()
{
$model = new UploadFiles(['xlsx', 'xls']);
if (Yii::$app->request->isPost) {
//多文件用getInstances
$model->uploadFiles = UploadedFile::getInstance($model, 'uploadFile');
$fileInfo = $model->upload();
// 文件上传成功
if ($fileInfo['CODE'] == 200) {
$tempArr = Helper::newSpreadsheet($fileInfo['INFO'][0])->getRows(true, ['rowOffset' => 2, 'columns' => 8]);
if (empty($tempArr)) {
@unlink($fileInfo['INFO'][0]);
throw new BadRequestHttpException('上传至少一条数据');
}
//判断唯一性数组
$uniqueArr = array();
foreach ($tempArr as $key => $value) {
$uniqueArr[] = $value[0];
}
if (count($uniqueArr) != count(array_unique($uniqueArr))) {
@unlink($fileInfo['INFO'][0]);
throw new BadRequestHttpException('存在重复数据,请确认');
}
$attachModel = new ShopGoodsAttach();
$transaction = $attachModel->getDb()->beginTransaction();
try {
foreach ($tempArr as $key => $value) {
if (empty($value[0])) {
throw new BadRequestHttpException('商品编码不能为空');
}
$_attachModel = $attachModel::findOne(['GOODS_CODE' => $value[0]]);
//商品扩展信息 只可修改
if ($_attachModel === null) {
continue;
} else {
$_attachModel->UPDATE_TIME = date('Y-m-d H:i:s', time());
}
//是否是分销商品 1是0否
if ($value[1] == '' || $value[1] == '否' || $value[1] == '0') {
$value[1] = 0;
} else {
$value[1] = 1;
}
if (empty($value[2]))
$value[2] = 0; //员工分销商一级返利比例
if (empty($value[3]))
$value[3] = 0; //员工分销商二级返利比例
if (empty($value[4]))
$value[4] = 0; //员工一级返利比例
if (empty($value[5]))
$value[5] = 0; //员工二级返利比例
if (empty($value[6]))
$value[6] = 0; //用户一级返利比例
if (empty($value[7]))
$value[7] = 0; //用户二级返利比例
//导入验证
$_attachModel->GOODS_CODE = $value[0]; //商品编码
$_attachModel->IS_DISTRIBUTION_GOODS = $value[1]; //是否是分销商品
if ($value[1] == 0) {
$_attachModel->EMPLOYEE_FIRST_RETURN_MONEY_RATIOS1 = '0'; //员工分销商一级返利额比例
$_attachModel->EMPLOYEE_SECOND_RETURN_MONEY_RATIOS2 = '0'; //员工分销商二级返利额比例
$_attachModel->EMPLOYEE_FIRST_RETURN_MONEY_RATIO = '0'; //员工一级分销返利额比例
$_attachModel->EMPLOYEE_SECOND_RETURN_MONEY_RATIO = '0'; //员工二级分销返利额比例
$_attachModel->USER_FIRST_RETURN_MONEY_RATIO = '0'; //用户一级分销返利额比例
$_attachModel->USER_SECOND_RETURN_MONEY_RATIO = '0'; //用户二级分销返利额比例
} else {
$_attachModel->EMPLOYEE_FIRST_RETURN_MONEY_RATIOS1 = $value[2]; //员工分销商一级返利额比例
$_attachModel->EMPLOYEE_SECOND_RETURN_MONEY_RATIOS2 = $value[3]; //员工分销商二级返利额比例
$_attachModel->EMPLOYEE_FIRST_RETURN_MONEY_RATIO = $value[4]; //员工一级分销返利额比例
$_attachModel->EMPLOYEE_SECOND_RETURN_MONEY_RATIO = $value[5]; //员工二级分销返利额比例
$_attachModel->USER_FIRST_RETURN_MONEY_RATIO = $value[6]; //用户一级分销返利额比例
$_attachModel->USER_SECOND_RETURN_MONEY_RATIO = $value[7]; //用户二级分销返利额比例
}
//商品返利信息更新
if (!$_attachModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 1) => $_attachModel->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 {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
}
}
/**
* @OA\Post(
* path="/backend/web/v1/shopgoods/import-goods-infos/province-goods-title-words-summary-import",
* tags={"商品管理"},
* summary="省级商品标题、热词、摘要上传Excel(孙磊)",
* @OA\Response(
* response=200,
* description="上传成功",
* ),
* security={{"Authorization":{}}},
* @OA\RequestBody(
* description="省级商品标题、热词、摘要上传Excel",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* )
* )
*/
public function actionProvinceGoodsTitleWordsSummaryImport()
{
$model = new UploadFiles(['xlsx', 'xls']);
if (Yii::$app->request->isPost) {
//多文件用getInstances
$model->uploadFiles = UploadedFile::getInstance($model, 'uploadFile');
$fileInfo = $model->upload();
// 文件上传成功
if ($fileInfo['CODE'] == 200) {
$tempArr = Helper::newSpreadsheet($fileInfo['INFO'][0])->getRows(true, ['rowOffset' => 2, 'columns' => 6]);
if (empty($tempArr)) {
@unlink($fileInfo['INFO'][0]);
throw new BadRequestHttpException('上传至少一条数据');
}
//判断唯一性数组
$uniqueArr = array();
foreach ($tempArr as $key => $value) {
$uniqueArr[] = $value[0];
}
if (count($uniqueArr) != count(array_unique($uniqueArr))) {
@unlink($fileInfo['INFO'][0]);
throw new BadRequestHttpException('存在重复数据,请确认');
}
$attachModel = new ShopGoodsAttach();
$transaction = $attachModel->getDb()->beginTransaction();
try {
foreach ($tempArr as $key => $value) {
if (empty($value[0])) {
throw new BadRequestHttpException('商品编码不能为空');
}
$_attachModel = $attachModel::findOne(['GOODS_CODE' => $value[0]]);
//商品扩展信息
if ($_attachModel === null) {
continue;
} else {
$_attachModel->UPDATE_TIME = date('Y-m-d H:i:s', time());
}
//处理插入数据
$value[0] = trim($value[0], ' ');
$value[1] = trim($value[1], ' ');
$value[2] = trim($value[2], ' ');
$value[3] = trim($value[3], ' ');
$value[4] = trim($value[4], ' ');
$value[5] = trim($value[5], ' ');
//导入验证
$_attachModel->GOODS_CODE = $value[0]; //商品编码
if ($value[1] != '0' && $value[1] != '') {
$_attachModel->GOODS_TITLE = $value[1]; //商品标题
}
if ($value[2] != '0' && $value[2] != '') {
$_attachModel->AD = $value[2]; //广告词/热词
$_attachModel->AD_START_TIME = $value[4]; //热词开始时间
$_attachModel->AD_END_TIME = $value[5]; //热词结束时间
}
if ($value[3] != '0' && $value[3] != '') {
$_attachModel->GOODS_ABSTRACT = $value[3]; //商品摘要
}
//商品标题、热词、摘要信息更新
if (!$_attachModel->save()) {
$transaction->rollBack();
$returnInfo = [
($key + 1) => $_attachModel->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 {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
}
}
}
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