Commit 221f9c31 authored by 侯贺政's avatar 侯贺政

员工控制器模型调整

Signed-off-by: 侯贺政's avatarhouhezheng <houhezheng@romens.cn>
parent 70bec9af
This diff is collapsed.
<?php
namespace backend\controllers\v1\shopuser;
use app\models\v1\branch\ShopBranch;
use Yii;
use backend\controllers\v1\BaseController;
use backend\helpers\Func;
use backend\helpers\UploadFiles;
use yidas\phpSpreadsheet\Helper;
use yii\web\UploadedFile;
use yii\web\BadRequestHttpException;
use yii\web\HttpException;
class ShopEmployeeController extends BaseController
{
public $modelClass = 'app\models\v1\shopuser\ShopEmployee';
/**
* @OA\GET(
* path="/backend/web/v1/shopuser/shop-employees/employee-list",
* tags={"用户&员工接口"},
* summary="员工信息列表(侯贺政)",
* description="员工信息列表",
* @OA\Parameter(name="page",in="query",description="分页页码",@OA\Schema(type="int")),
* @OA\Parameter(name="NAME",in="query",description="员工姓名",@OA\Schema(type="string")),
* @OA\Parameter(name="EMPLOYEE_CODE",in="query",description="员工编号",@OA\Schema(type="string")),
* @OA\Parameter(name="MOBILEPHONE",in="query",description="手机号",@OA\Schema(type="string")),
* @OA\Parameter(name="EMPLOYEE_BRANCH_NAME",description="用户所属门店",in="query",@OA\Schema(type="string")),
* @OA\Response(response="200",description="
* GUID:用户GUID,
* NAME:姓名,
* EMPLOYEE_CODE:员工编号,
* MOBILE_PHONE:手机号,
* EMPLOYEE_BRANCH_NAME:用户所属门店"),
* security={{"Authorization": {}}}
* )
*/
public function actionEmployeeList()
{
$model = new $this->modelClass();
$params = Yii::$app->request->queryParams;
$model->attributes = $params;
if (!$model->validate()) {
Yii::$app->response->statusCode = 422;
return $model->errors;
}
$list = $model->employeeSearch($params);
if (!$list->getModels()) {
throw new BadRequestHttpException('未找到符合条件的数据');
}
return $list;
}
/**
* @OA\GET(
* path="/backend/web/v1/shopuser/shop-employees/employee-info",
* tags={"用户&员工接口"},
* summary="员工信息详情(侯贺政)",
* description="某员工的信息详情",
* @OA\Parameter(name="id",in="query",required=true,description="员工GUID",@OA\Schema(type="string")),
* @OA\Response(response="200",description="
* GUID:用户GUID,
* NAME:姓名,
* EMPLOYEE_CODE:员工编号,
* MOBILE_PHONE:手机号,
* AGE:年龄,
* CONTACT_SEX:性别,
* MEMBER_NO:会员卡号,
* IS_DISTRIBUTOR:分销商标识(0:否,1:是),
* EMPLOYEE_IS_MANAGER:员工是否为门店店长,
* BRANCH_CODE:用户所属门店编号"),
* security={{"Authorization": {}}}
* )
*/
public function actionEmployeeInfo($id)
{
$model = new $this->modelClass();
$model->GUID = $id;
if (!$model->validate()) {
Yii::$app->response->statusCode = 422;
return $model->errors;
}
$data = $model->employeeInfo($id);
if (!$data) {
throw new BadRequestHttpException('请求错误,该员工不存在');
}
return $data;
}
/**
* @OA\Post(
* path="/backend/web/v1/shopuser/shop-employees/employee-import",
* tags={"用户&员工接口"},
* summary="导入员工信息(侯贺政)",
* description="导入员工的信息,员工已存在为更新,不存在则新建",
* @OA\RequestBody(
* description="导入员工信息",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* ),
* @OA\Response(
* response=200,
* description="导入成功",
* ),
* @OA\Response(
* response=422,
* description="导入失败,数据验证错误,返回错误数据行号及错误信息(数组)。",
* ),
* security={{"Authorization":{}}}
* )
*/
public function actionEmployeeImport()
{
$upload_file = new UploadFiles(['xlsx', 'xls']);
$upload_file->uploadFiles = UploadedFile::getInstance($upload_file, 'uploadFile');
$fileInfo = $upload_file->upload();
if ($fileInfo['CODE'] != '200') {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
$arr = Helper::newSpreadsheet($fileInfo['INFO'][0])->getRows(true, ['rowOffset' => 2, 'columns' => 9]);
$model = new $this->modelClass();
$model->scenario = 'import';
$transcation = $model->getDb()->beginTransaction();
if (is_array($arr) && !empty($arr)) {
try {
foreach ($arr as $key => $value) {
$branch_info = ShopBranch::findOne(['CODE' => $value[8]]);
if (!$branch_info) {
$returnInfo = [
($key + 1) => ['error' => '不存在该门店,检查并更正所属门店编码,或删除此条数据']
];
@unlink($fileInfo['INFO'][0]);
Yii::$app->response->statusCode = 422;
return $returnInfo;
}
$_model = $model::findOne(['EMPLOYEE_CODE' => $value[1]]);
if ($_model === null) {
$_model = clone $model;
$_model->GUID = Func::create_guid();
$_model->CODE = $value[2];
$_model->CREATE_DATE = date('Y-m-d H:i:s', time());
}
//性别
if ($value[4] == '男') {
$value[4] = '1';
} elseif ($value[4] == '女') {
$value[4] = '0';
} elseif (!in_array($value[4], ['1', '0', ''])) {
$value[4] = '';
}
$_model->NAME = $value[0];
$_model->EMPLOYEE_CODE = $value[1];
$_model->MEMBER_NO = $value[3];
$_model->CONTACT_SEX = $value[4];
$_model->CONTACTBIRTH_DATE = $value[5];
$_model->EMPLOYEE_IS_MANAGER = $value[6];
$_model->IS_DISTRIBUTOR = $value[7];
$_model->EMPLOYEE_BRANCH_GUID = $branch_info['GUID'];
$_model->UPDATE_DATE = date('Y-m-d H:i:s', time());
if (!$_model->save()) {
$transcation->rollBack();
$returnInfo = [
($key + 1) => $_model->errors
];
@unlink($fileInfo['INFO'][0]);
Yii::$app->response->statusCode = 422;
return $returnInfo;
}
}
$transcation->commit();
@unlink($fileInfo['INFO'][0]);
throw new HttpException(200,"导入成功!");
} catch (\Throwable $th) {
$transcation->rollBack();
@unlink($fileInfo['INFO'][0]);
throw $th;
}
}
throw new BadRequestHttpException('导入失败!');
}
}
...@@ -2,200 +2,11 @@ ...@@ -2,200 +2,11 @@
namespace backend\controllers\v1\shopuser; namespace backend\controllers\v1\shopuser;
use app\models\v1\branch\ShopBranch;
use Yii; use Yii;
use backend\controllers\v1\BaseController; use backend\controllers\v1\BaseController;
use backend\helpers\Func;
use backend\helpers\UploadFiles;
use yidas\phpSpreadsheet\Helper;
use yii\web\UploadedFile;
use yii\web\BadRequestHttpException;
use yii\web\HttpException;
class ShopUserController extends BaseController class ShopUserController extends BaseController
{ {
public $modelClass = 'app\models\v1\shopuser\ShopUser'; public $modelClass = 'app\models\v1\shopuser\ShopUser';
/**
* @OA\GET(
* path="/backend/web/v1/shopuser/shop-users/employee-list",
* tags={"用户&员工接口"},
* summary="员工信息列表(侯贺政)",
* description="员工信息列表",
* @OA\Parameter(name="page",in="query",description="分页页码",@OA\Schema(type="int")),
* @OA\Parameter(name="NAME",in="query",description="员工姓名",@OA\Schema(type="string")),
* @OA\Parameter(name="EMPLOYEE_CODE",in="query",description="员工编号",@OA\Schema(type="string")),
* @OA\Parameter(name="MOBILEPHONE",in="query",description="手机号",@OA\Schema(type="string")),
* @OA\Parameter(name="EMPLOYEE_BRANCH_NAME",description="用户所属门店",in="query",@OA\Schema(type="string")),
* @OA\Response(response="200",description="
* GUID:用户GUID,
* NAME:姓名,
* EMPLOYEE_CODE:员工编号,
* MOBILE_PHONE:手机号,
* EMPLOYEE_BRANCH_NAME:用户所属门店"),
* security={{"Authorization": {}}}
* )
*/
public function actionEmployeeList()
{
$model = new $this->modelClass();
$params = Yii::$app->request->queryParams;
$model->attributes = $params;
if (!$model->validate()) {
Yii::$app->response->statusCode = 422;
return $model->errors;
}
$list = $model->employeeSearch($params);
if (!$list->getModels()) {
throw new BadRequestHttpException('未找到符合条件的数据');
}
return $list;
}
/**
* @OA\GET(
* path="/backend/web/v1/shopuser/shop-users/employee-info",
* tags={"用户&员工接口"},
* summary="员工信息详情(侯贺政)",
* description="某员工的信息详情",
* @OA\Parameter(name="id",in="query",required=true,description="员工GUID",@OA\Schema(type="string")),
* @OA\Response(response="200",description="
* GUID:用户GUID,
* NAME:姓名,
* EMPLOYEE_CODE:员工编号,
* MOBILE_PHONE:手机号,
* AGE:年龄,
* CONTACT_SEX:性别,
* MEMBER_NO:会员卡号,
* IS_DISTRIBUTOR:分销商标识(0:否,1:是),
* EMPLOYEE_IS_MANAGER:员工是否为门店店长,
* BRANCH_CODE:用户所属门店编号"),
* security={{"Authorization": {}}}
* )
*/
public function actionEmployeeInfo($id)
{
$model = new $this->modelClass();
$model->GUID = $id;
if (!$model->validate()) {
Yii::$app->response->statusCode = 422;
return $model->errors;
}
$data = $model->employeeInfo($id);
if (!$data) {
throw new BadRequestHttpException('请求错误,该员工不存在');
}
return $data;
}
/**
* @OA\Post(
* path="/backend/web/v1/shopuser/shop-users/employee-import",
* tags={"用户&员工接口"},
* summary="导入员工信息(侯贺政)",
* description="导入员工的信息,员工已存在为更新,不存在则新建",
* @OA\RequestBody(
* description="导入员工信息",
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="uploadFile",
* type="string",
* format="binary"
* ),
* )
* )
* ),
* @OA\Response(
* response=200,
* description="导入成功",
* ),
* @OA\Response(
* response=422,
* description="导入失败,数据验证错误,返回错误数据行号及错误信息(数组)。",
* ),
* security={{"Authorization":{}}}
* )
*/
public function actionEmployeeImport()
{
$upload_file = new UploadFiles(['xlsx', 'xls']);
$upload_file->uploadFiles = UploadedFile::getInstance($upload_file, 'uploadFile');
$fileInfo = $upload_file->upload();
if ($fileInfo['CODE'] != '200') {
Yii::$app->response->statusCode = 422;
if ($fileInfo['INFO']['uploadFiles'][0] == "类型不对") {
$fileInfo['INFO']['uploadFiles'][0] = '文件类型要求97-2003工作簿 xls格式!';
}
return $fileInfo['INFO'];
}
$arr = Helper::newSpreadsheet($fileInfo['INFO'][0])->getRows(true, ['rowOffset' => 2, 'columns' => 9]);
$model = new $this->modelClass();
$model->scenario = 'import';
$transcation = $model->getDb()->beginTransaction();
if (is_array($arr) && !empty($arr)) {
try {
foreach ($arr as $key => $value) {
$branch_info = ShopBranch::findOne(['CODE' => $value[8]]);
if (!$branch_info) {
$returnInfo = [
($key + 1) => ['error' => '不存在该门店,检查并更正所属门店编码,或删除此条数据']
];
@unlink($fileInfo['INFO'][0]);
Yii::$app->response->statusCode = 422;
return $returnInfo;
}
$_model = $model::findOne(['EMPLOYEE_CODE' => $value[1]]);
if ($_model === null) {
$_model = clone $model;
$_model->GUID = Func::create_guid();
$_model->CODE = $value[2];
$_model->CREATE_DATE = date('Y-m-d H:i:s', time());
}
//性别
if ($value[4] == '男') {
$value[4] = '1';
} elseif ($value[4] == '女') {
$value[4] = '0';
} elseif (!in_array($value[4], ['1', '0', ''])) {
$value[4] = '';
}
$_model->NAME = $value[0];
$_model->EMPLOYEE_CODE = $value[1];
$_model->MEMBER_NO = $value[3];
$_model->CONTACT_SEX = $value[4];
$_model->CONTACTBIRTH_DATE = $value[5];
$_model->EMPLOYEE_IS_MANAGER = $value[6];
$_model->IS_DISTRIBUTOR = $value[7];
$_model->EMPLOYEE_BRANCH_GUID = $branch_info['GUID'];
$_model->UPDATE_DATE = date('Y-m-d H:i:s', time());
if (!$_model->save()) {
$transcation->rollBack();
$returnInfo = [
($key + 1) => $_model->errors
];
@unlink($fileInfo['INFO'][0]);
Yii::$app->response->statusCode = 422;
return $returnInfo;
}
}
$transcation->commit();
@unlink($fileInfo['INFO'][0]);
throw new HttpException(200,"导入成功!");
} catch (\Throwable $th) {
$transcation->rollBack();
@unlink($fileInfo['INFO'][0]);
throw $th;
}
}
throw new BadRequestHttpException('导入失败!');
}
} }
<?php
namespace app\models\v1\shopuser;
use yii\data\ActiveDataProvider;
class ShopEmployee extends ShopUser
{
public $branch_code; //别名(所属门店别名)
public $birthday; //出生日期
/**
* 查询员工信息列表
*
* @param array $params 查询参数数组
* @return array|null 匹配到的员工列表
*/
public function employeeSearch($params)
{
$query = static::find()->alias('su')
->select('su.GUID,su.NAME,su.EMPLOYEE_CODE,su.MOBILE_PHONE,sb.NAME as SHOP_BRANCH_NAME')
->leftJoin('shop_branch sb', 'sb.GUID=su.EMPLOYEE_BRANCH_GUID')
->where(['su.BELONG' => 1]);
if (isset($params['NAME'])) {
$query->andfilterWhere(['like', 'su.NAME', $params['NAME']]);
}
if (isset($params['EMPLOYEE_CODE'])) {
$query->andfilterWhere(['like', 'su.EMPLOYEE_CODE', $params['EMPLOYEE_CODE']]);
}
if (isset($params['MOBILEPHONE'])) {
$query->andfilterWhere(['like', 'su.MOBILEPHONE', $params['MOBILEPHONE']]);
}
if (isset($params['EMPLOYEE_BRANCH_NAME'])) {
$query->andfilterWhere(['like', 'sb.NAME', $params['EMPLOYEE_BRANCH_NAME']]);
}
return new ActiveDataProvider(
[
'query' => $query->asArray(),
'pagination' => [
'pageSize' => 10,
]
]
);
}
/**
* {@inheritdoc}
*/
public function fields()
{
$fields = parent::fields();
$fields['BRANCH_CODE'] = 'branch_code'; //增加(所属门店别名)属性
$fields['AGE'] = function () { //根据生日计算年龄
list($year, $month, $day) = explode("-", date('Y-m-d',strtotime($this->birthday)));
$year_diff = date("Y") - $year;
$month_diff = date("m") - $month;
$day_diff = date("d") - $day;
if ($day_diff < 0 || $month_diff < 0)
$year_diff--;
return $year_diff;
};
return $fields;
}
/**
* 查询员工信息
*
* @param string $id 员工GUID
* @return array $info 该员工信息
*/
public function employeeInfo($id)
{
$info = static::find()->alias('su')
->select('su.GUID,su.NAME,su.EMPLOYEE_CODE,su.MOBILE_PHONE,su.CONTACTBIRTH_DATE as birthday,su.CONTACT_SEX,su.MEMBER_NO,su.IS_DISTRIBUTOR,su.EMPLOYEE_IS_MANAGER,sb.CODE as branch_code')
->leftJoin('shop_branch sb', 'sb.GUID=su.EMPLOYEE_BRANCH_GUID')
->where(['su.GUID' => $id, 'su.BELONG' => 1])
->one();
return $info;
}
}
...@@ -4,7 +4,6 @@ namespace app\models\v1\shopuser; ...@@ -4,7 +4,6 @@ namespace app\models\v1\shopuser;
use app\models\v1\BaseModel; use app\models\v1\BaseModel;
use Yii; use Yii;
use yii\data\ActiveDataProvider;
/** /**
* This is the model class for table "shop_user". * This is the model class for table "shop_user".
...@@ -71,9 +70,6 @@ use yii\data\ActiveDataProvider; ...@@ -71,9 +70,6 @@ use yii\data\ActiveDataProvider;
*/ */
class ShopUser extends BaseModel class ShopUser extends BaseModel
{ {
public $branch_code; //别名(所属门店别名)
public $birthday; //出生日期
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
...@@ -175,78 +171,4 @@ class ShopUser extends BaseModel ...@@ -175,78 +171,4 @@ class ShopUser extends BaseModel
'EMPDISTRIBUTO_RCODE' => 'Empdistributo Rcode', 'EMPDISTRIBUTO_RCODE' => 'Empdistributo Rcode',
]; ];
} }
/**
* 查询员工信息列表
*
* @param array $params 查询参数数组
* @return array|null 匹配到的员工列表
*/
public function employeeSearch($params)
{
$query = static::find()->alias('su')
->select('su.GUID,su.NAME,su.EMPLOYEE_CODE,su.MOBILE_PHONE,sb.NAME as SHOP_BRANCH_NAME')
->leftJoin('shop_branch sb', 'sb.GUID=su.EMPLOYEE_BRANCH_GUID')
->where(['su.BELONG' => 1]);
if (isset($params['NAME'])) {
$query->andfilterWhere(['like', 'su.NAME', $params['NAME']]);
}
if (isset($params['EMPLOYEE_CODE'])) {
$query->andfilterWhere(['like', 'su.EMPLOYEE_CODE', $params['EMPLOYEE_CODE']]);
}
if (isset($params['MOBILEPHONE'])) {
$query->andfilterWhere(['like', 'su.MOBILEPHONE', $params['MOBILEPHONE']]);
}
if (isset($params['EMPLOYEE_BRANCH_NAME'])) {
$query->andfilterWhere(['like', 'sb.NAME', $params['EMPLOYEE_BRANCH_NAME']]);
}
return new ActiveDataProvider(
[
'query' => $query->asArray(),
'pagination' => [
'pageSize' => 10,
]
]
);
}
/**
* {@inheritdoc}
*/
public function fields()
{
$fields = parent::fields();
$fields['BRANCH_CODE'] = 'branch_code'; //增加(所属门店别名)属性
$fields['AGE'] = function () { //根据生日计算年龄
list($year, $month, $day) = explode("-", date('Y-m-d',strtotime($this->birthday)));
$year_diff = date("Y") - $year;
$month_diff = date("m") - $month;
$day_diff = date("d") - $day;
if ($day_diff < 0 || $month_diff < 0)
$year_diff--;
return $year_diff;
};
return $fields;
}
/**
* 查询员工信息
*
* @param string $id 员工GUID
* @return array $info 该员工信息
*/
public function employeeInfo($id)
{
$info = static::find()->alias('su')
->select('su.GUID,su.NAME,su.EMPLOYEE_CODE,su.MOBILE_PHONE,su.CONTACTBIRTH_DATE as birthday,su.CONTACT_SEX,su.MEMBER_NO,su.IS_DISTRIBUTOR,su.EMPLOYEE_IS_MANAGER,sb.CODE as branch_code')
->leftJoin('shop_branch sb', 'sb.GUID=su.EMPLOYEE_BRANCH_GUID')
->where(['su.GUID' => $id, 'su.BELONG' => 1])
->one();
return $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