初始上传
This commit is contained in:
376
addon/giftcard/model/card/Card.php
Executable file
376
addon/giftcard/model/card/Card.php
Executable file
@@ -0,0 +1,376 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use addon\giftcard\model\giftcard\GiftCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 礼品卡工具类
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class Card extends BaseModel
|
||||
{
|
||||
public $source_list = array (
|
||||
'order' => '购买',
|
||||
'gift' => '赠送'
|
||||
);
|
||||
|
||||
public function getStatusList($card_type)
|
||||
{
|
||||
switch ( $card_type ) {
|
||||
case 'virtual'://电子卡
|
||||
return array (
|
||||
'to_use' => '待使用',
|
||||
'used' => '已使用',
|
||||
'expire' => '已过期'
|
||||
);
|
||||
break;
|
||||
case 'real'://实体卡
|
||||
return array (
|
||||
'to_activate' => '待激活',
|
||||
'to_use' => '待使用',
|
||||
'used' => '已使用',
|
||||
'expire' => '已过期',
|
||||
'invalid' => '已失效'
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成礼品卡记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardItem($params)
|
||||
{
|
||||
$insert_data = $params[ 'insert_data' ];//可能包含订单id
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
|
||||
$card_type = $params[ 'card_type' ] ?? '';
|
||||
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
|
||||
//批量生成卡号
|
||||
$giftcard_model = new Giftcard();
|
||||
$card_no_res = $giftcard_model->createCardNo($params['giftcard_id'], 1);
|
||||
if($card_no_res['code'] < 0) return $card_no_res;
|
||||
$card_no = $card_no_res['data'][0];
|
||||
if ($card_type == 'real') {
|
||||
$count = model('giftcard_card')->getCount([ [ 'card_no', '=', $card_no ] ]);
|
||||
if ($count > 0) {
|
||||
return $this->error([], '当前卡密和编号已存在');
|
||||
}
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'card_no' => $card_no,
|
||||
'card_type' => $card_type,
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'member_id' => $member_id,
|
||||
'create_time' => time(),
|
||||
'card_right_type' => $card_right_type,
|
||||
'valid_time' => $this->getValidityTime($params),
|
||||
'balance' => $params[ 'balance' ] ?? 0,
|
||||
'card_right_goods_type' => $params[ 'card_right_goods_type' ] ?? '',
|
||||
'card_right_goods_count' => $params[ 'card_right_goods_count' ] ?? '',
|
||||
);
|
||||
$card_id = model('giftcard_card')->add(array_merge($data, $insert_data));
|
||||
if ($card_type == 'virtual') {
|
||||
$goods_list = $params[ 'goods_list' ];
|
||||
foreach ($goods_list as $k => $v) {
|
||||
$v[ 'card_id' ] = $card_id;
|
||||
$v[ 'giftcard_id' ] = $giftcard_id;
|
||||
$v[ 'card_right_type' ] = $card_right_type;
|
||||
$this->addCardItemGoods($v);
|
||||
}
|
||||
}
|
||||
return $this->success($card_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡项
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardItemGoods($params)
|
||||
{
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'giftcard_id' => $params[ 'giftcard_id' ],
|
||||
'card_id' => $params[ 'card_id' ],
|
||||
'sku_id' => $params[ 'sku_id' ] ?? 0,
|
||||
'sku_name' => $params[ 'sku_name' ] ?? '',
|
||||
'sku_image' => $params[ 'sku_image' ] ?? '',
|
||||
'sku_no' => $params[ 'sku_no' ] ?? '',
|
||||
'goods_id' => $params[ 'goods_id' ] ?? 0,
|
||||
'goods_name' => $params[ 'goods_name' ] ?? '',
|
||||
'balance' => $params[ 'balance' ] ?? 0,//储值余额
|
||||
'total_balance' => $params[ 'total_balance' ] ?? 0,
|
||||
'price' => $params[ 'price' ] ?? 0,
|
||||
'total_num' => $params[ 'num' ] ?? 1,//购买数量
|
||||
'order_id' => $params[ 'order_id' ] ?? 0,
|
||||
'order_goods_id' => $params[ 'order_goods_id' ] ?? 0,
|
||||
'card_right_type' => $params[ 'card_right_type' ] ?? '',
|
||||
);
|
||||
|
||||
model('giftcard_card_goods')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算礼品卡有效期
|
||||
* @param $params
|
||||
* @return float|int
|
||||
*/
|
||||
public function getValidityTime($params)
|
||||
{
|
||||
$validity_type = $params[ 'validity_type' ];
|
||||
$validity_time = $params[ 'validity_time' ];
|
||||
$validity_day = $params[ 'validity_day' ];
|
||||
switch ( $validity_type ) {
|
||||
case 'forever':
|
||||
$temp_time = 0;
|
||||
break;
|
||||
case 'day':
|
||||
$temp_time = time() + 86400 * $validity_day;
|
||||
break;
|
||||
case 'date':
|
||||
$temp_time = $validity_time;
|
||||
break;
|
||||
}
|
||||
return $temp_time;
|
||||
}
|
||||
|
||||
/**
|
||||
* 一般认为这是针对单项的删除
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function delete($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$card_ids = $params[ 'card_ids' ] ?? '';
|
||||
$card_import_id = $params[ 'card_import_id' ] ?? 0;
|
||||
$card_import_ids = $params[ 'card_import_ids' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'status', '=', 'to_activate' ]
|
||||
);
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
if (!empty($card_ids)) {
|
||||
$condition[] = [ 'card_id', 'in', $card_ids ];
|
||||
}
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($card_import_id > 0) {
|
||||
$condition[] = [ 'card_import_id', '=', $card_import_id ];
|
||||
}
|
||||
if (!empty($card_import_ids)) {
|
||||
$condition[] = [ 'card_import_id', 'in', $card_import_ids ];
|
||||
}
|
||||
$card_list = $this->getCardList($condition)[ 'data' ] ?? [];
|
||||
if (empty($card_list))
|
||||
return $this->error();
|
||||
|
||||
// if($card_info['status'] == 'used')
|
||||
// return $this->error('', '删除失败,不可删除已使用的礼品卡');
|
||||
|
||||
$result = model('giftcard_card')->delete($condition);
|
||||
if ($result === false)
|
||||
return $this->error();
|
||||
|
||||
$params[ 'list' ] = $card_list;
|
||||
$this->deleteOperation($params);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除卡项的后续事件
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function deleteOperation($params)
|
||||
{
|
||||
$list = $params[ 'list' ];
|
||||
foreach ($list as $v) {
|
||||
//数据统计
|
||||
( new CardStat() )->stat(array_merge([ 'card_info' => $v, 'stat_type' => 'del' ]));
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_card')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardList($condition = [], $field = '*', $order = '', $alias = '', $join = [], $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录项信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录项列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardGoodsList($condition = [], $field = '*', $order = '', $limit = null, $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card_goods')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录项分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card_goods')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡券详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getCardDetail($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ];
|
||||
|
||||
$condition = array (
|
||||
[ 'c.card_id', '=', $card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'c.site_id', '=', $site_id ];
|
||||
}
|
||||
if ($member_id > 0) {
|
||||
$condition[] = [ 'c.member_id', '=', $member_id ];
|
||||
}
|
||||
$info = $this->getCardInfo($condition, 'c.*,go.order_no', 'c', [
|
||||
[ 'giftcard_order go', 'c.order_id=go.order_id', 'left' ]
|
||||
])[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$member_model = new Member();
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'member_nickname' ] = $member_info[ 'nickname' ] ?? '';
|
||||
$info[ 'member_headimg' ] = $member_info[ 'headimg' ] ?? '';
|
||||
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'init_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'init_member_nickname' ] = $member_info[ 'nickname' ] ?? '';
|
||||
$info[ 'init_member_headimg' ] = $member_info[ 'headimg' ] ?? '';
|
||||
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($member_id > 0) {
|
||||
$condition[] = [ 'member_id', '=', $member_id ];
|
||||
}
|
||||
$list = $this->getCardGoodsList($condition)[ 'data' ] ?? [];
|
||||
$info[ 'card_goods_list' ] = $list;
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
public function tran($data)
|
||||
{
|
||||
$status = $data[ 'status' ] ?? '';
|
||||
if (!empty($status)) {
|
||||
$data[ 'status_name' ] = $this->getStatusList($data[ 'card_type' ])[ $status ] ?? '';
|
||||
}
|
||||
$source = $data[ 'source' ] ?? '';
|
||||
if (!empty($source)) {
|
||||
$data[ 'source_name' ] = $this->source_list[ $source ];
|
||||
}
|
||||
$member_id = $data[ 'member_id' ] ?? 0;
|
||||
if ($member_id > 0) {
|
||||
$member_model = new Member();
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ])[ 'data' ] ?? [];
|
||||
$data[ 'member_nickname' ] = $member_info[ 'nickname' ] ?? '';
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
318
addon/giftcard/model/card/CardImport.php
Executable file
318
addon/giftcard/model/card/CardImport.php
Executable file
@@ -0,0 +1,318 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\giftcard\GiftCard;
|
||||
use app\model\member\Member;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 礼品卡导入类
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class CardImport extends Card
|
||||
{
|
||||
|
||||
public $create_type_list = array (
|
||||
'auto' => '在线制卡',
|
||||
'import' => '导入制卡'
|
||||
);
|
||||
|
||||
/**
|
||||
* 创建导入记录单据
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function create($params)
|
||||
{
|
||||
$type = $params[ 'type' ];
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$giftcard_model = new GiftCard();
|
||||
$condition = [ [ 'giftcard_id', '=', $giftcard_id ] ];
|
||||
$info = $giftcard_model->getGiftcardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$info[ 'operator_data' ] = $params[ 'operator_data' ];
|
||||
if ($info[ 'card_type' ] != 'real') {
|
||||
return $this->error('', '该礼品不支持制卡');
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'name' => $params[ 'name' ] ?? date('YmdHis'),
|
||||
'giftcard_id' => $params[ 'giftcard_id' ],
|
||||
'type' => $params[ 'type' ],
|
||||
'card_type' => $info[ 'card_type' ],
|
||||
'create_time' => time()
|
||||
);
|
||||
switch ( $type ) {
|
||||
case 'auto':
|
||||
$data[ 'total_count' ] = $params[ 'num' ] ?? 0;
|
||||
break;
|
||||
case 'manual':
|
||||
$data[ 'total_count' ] = 1;
|
||||
break;
|
||||
case 'import':
|
||||
$file = request()->file('file');
|
||||
$tmp_name = $file->getPathname();//获取上传缓存文件
|
||||
$fp = file($tmp_name);
|
||||
$data[ 'total_count' ] = count($fp) - 1;
|
||||
break;
|
||||
}
|
||||
$import_id = $this->add($data)[ 'data' ] ?? 0;
|
||||
if ($type == 'import') {
|
||||
$path = 'upload/giftcard/';
|
||||
if (file_exists($path) || mkdir($path, 0755, true)) {
|
||||
if (move_uploaded_file($tmp_name, $path . 'giftcard_card_import' . $import_id . '.csv')) {
|
||||
Cache::set('giftcard/giftcard_card_import_name' . $import_id, $file->getOriginalName());
|
||||
} else {
|
||||
return $this->error([], '导入失败');
|
||||
}
|
||||
} else {
|
||||
return $this->error([], '导入失败');
|
||||
}
|
||||
}
|
||||
return $this->success($import_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function add($data)
|
||||
{
|
||||
$data[ 'create_time' ] = time();
|
||||
$id = model('giftcard_card_import')->add($data);
|
||||
return $this->success($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @param $data
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function update($data, $condition)
|
||||
{
|
||||
$id = model('giftcard_card_import')->update($data, $condition);
|
||||
return $this->success($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除导入记录(todo 能做真删吗)
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$import_ids = $params[ 'import_ids' ] ?? '';
|
||||
$condition = array ();
|
||||
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($import_id > 0) {
|
||||
$condition[] = [ 'import_id', '=', $import_id ];
|
||||
}
|
||||
if (!empty($import_ids)) {
|
||||
$condition[] = [ 'import_id', 'in', $import_ids ];
|
||||
}
|
||||
|
||||
$list = $this->getCardImportList($condition)[ 'data' ] ?? [];
|
||||
if (empty($list))
|
||||
return $this->error();
|
||||
|
||||
foreach ($list as $k => $v) {
|
||||
$item_condition = array (
|
||||
[ 'card_import_id', '=', $v[ 'import_id' ] ],
|
||||
[ 'status', '=', 'used' ]
|
||||
);
|
||||
$count = model('giftcard_card')->getCount($item_condition);
|
||||
if ($count > 0) {
|
||||
return $this->error([], '存在已使用的卡项,当前记录不允许删除');
|
||||
}
|
||||
}
|
||||
//删除制卡记录
|
||||
$res = model('giftcard_card_import')->delete($condition);
|
||||
$this->deleteOperation($params);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除导入卡记录后续
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function deleteOperation($params)
|
||||
{
|
||||
// $list = $params['list'];
|
||||
//会将这个记录之下的卡项全部删除
|
||||
$card_model = new Card();
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$import_ids = $params[ 'import_ids' ] ?? 0;
|
||||
if ($import_id > 0) {
|
||||
$params[ 'card_import_id' ] = $import_id;
|
||||
}
|
||||
if (!empty($import_ids)) {
|
||||
$params[ 'card_import_ids' ] = $import_ids;
|
||||
}
|
||||
$result = $card_model->delete($params);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡导入记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardImportInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_import')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡导入记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardImportList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_import')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡导入记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardImportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_import')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
public function getCardImportColumn($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_import')->getColumn($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出
|
||||
* @param $condition
|
||||
*/
|
||||
public function export($condition)
|
||||
{
|
||||
try {
|
||||
$file_name = date('Y年m月d日-礼品卡', time()) . '.csv';
|
||||
// $file_name = date('YmdHis').'.csv';//csv文件名
|
||||
//通过分批次执行数据导出(防止内存超出配置设置的)
|
||||
set_time_limit(0);
|
||||
ini_set('memory_limit', '256M');
|
||||
//设置header头
|
||||
header('Content-Description: File Transfer');
|
||||
header('Content-Type: application/vnd.ms-excel');
|
||||
header('Content-Disposition: attachment; filename="' . $file_name . '"');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate');
|
||||
header('Pragma: public');
|
||||
//打开php数据输入缓冲区
|
||||
$fp = fopen('php://output', 'a');
|
||||
// fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF)); // 添加 BOM
|
||||
$heade = [ '编号', '卡密', '状态', '生成时间', '激活会员', '激活时间' ];
|
||||
//将数据编码转换成GBK格式
|
||||
mb_convert_variables('GBK', 'UTF-8', $heade);
|
||||
//将数据格式化为CSV格式并写入到output流中
|
||||
fputcsv($fp, $heade);
|
||||
$member_model = new Member();
|
||||
|
||||
//写入第一行表头
|
||||
Db::name('giftcard_card')->where($condition)->chunk(500, function($item_list) use ($fp, $member_model) {
|
||||
//写入导出信息
|
||||
foreach ($item_list as $k => $item_v) {
|
||||
$item_member_id = $item_v[ 'member_id' ];
|
||||
$item_nickname = '';
|
||||
if ($item_member_id > 0) {
|
||||
$item_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $item_member_id ] ])[ 'data' ] ?? [];
|
||||
$item_nickname = $item_member_info[ 'nickname' ];
|
||||
}
|
||||
$item_v = $this->tran($item_v);
|
||||
$temp_data = [
|
||||
(string) $item_v[ 'card_no' ] . "\t",
|
||||
(string) $item_v[ 'card_cdk' ] . "\t",
|
||||
(string) $item_v[ 'status_name' ] . "\t",
|
||||
time_to_date($item_v[ 'create_time' ]) . "\t",
|
||||
$item_nickname . "\t",
|
||||
time_to_date($item_v[ 'activate_time' ]) . "\t",
|
||||
];
|
||||
mb_convert_variables('GBK', 'UTF-8', $temp_data);
|
||||
fputcsv($fp, $temp_data);
|
||||
//将已经存储到csv中的变量数据销毁,释放内存
|
||||
unset($item_v);
|
||||
}
|
||||
unset($item_list);
|
||||
});
|
||||
|
||||
//关闭句柄
|
||||
fclose($fp);
|
||||
die;
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return $this->error([], $e->getMessage() . $e->getFile() . $e->getLine());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 作废
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function invalid($params)
|
||||
{
|
||||
$import_id = $params[ 'import_id' ];
|
||||
$condition = array (
|
||||
[ 'import_id', '=', $import_id ],
|
||||
[ 'status', '=', '1' ]
|
||||
);
|
||||
$data = array (
|
||||
'status' => 2,
|
||||
'invalid_time' => time(),
|
||||
);
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
//应该是批量设置
|
||||
//查询未激活的卡密有多少
|
||||
$card_operation_model = new CardOperation();
|
||||
$params[ 'card_import_id' ] = $import_id;
|
||||
//批量使卡失效作废
|
||||
$card_operation_model->cardInvalid($params);
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
}
|
||||
197
addon/giftcard/model/card/CardLog.php
Executable file
197
addon/giftcard/model/card/CardLog.php
Executable file
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
|
||||
/**
|
||||
* 礼品卡操作日志
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class CardLog extends BaseModel
|
||||
{
|
||||
public function add($params)
|
||||
{
|
||||
$type = $params[ 'type' ];//操作类型
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$type_id = $params[ 'type_id' ] ?? 0;
|
||||
$card_model = new Card();
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error();
|
||||
|
||||
$site_id = $card_info[ 'site_id' ];
|
||||
$operator_type = $params[ 'operator_type' ] ?? '';
|
||||
$operator = '';
|
||||
$operator_name = '';
|
||||
|
||||
$member_model = new Member();
|
||||
switch ( $operator_type ) {
|
||||
case 'member':
|
||||
$operator = $params[ 'operator' ] ?? 0;
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $operator ]
|
||||
);
|
||||
$operator_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
break;
|
||||
case 'shop':
|
||||
$operator_info = $params[ 'operator_data' ] ?? [];
|
||||
$operator = $operator_info[ 'uid' ] ?? 0;
|
||||
$operator_name = $operator_info[ 'username' ] ?? '';
|
||||
break;
|
||||
case 'system':
|
||||
$operator = 0;
|
||||
$operator_name = '系统任务';
|
||||
break;
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'card_id' => $card_id,
|
||||
'site_id' => $site_id,
|
||||
'type' => $type,
|
||||
'type_id' => $type_id,
|
||||
'giftcard_id' => $card_info[ 'giftcard_id' ],
|
||||
'member_id' => $card_info[ 'member_id' ],
|
||||
'create_time' => time(),
|
||||
'operator_type' => $operator_type,
|
||||
'operator' => $operator,
|
||||
'operator_name' => $operator_name,
|
||||
);
|
||||
$remark = '';
|
||||
switch ( $type ) {
|
||||
case 'create'://制卡
|
||||
$remark = '店铺管理员' . $operator_name . '制成礼品卡';
|
||||
break;
|
||||
case 'buy'://购买卡
|
||||
$init_member_id = $card_info[ 'init_member_id' ];
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $init_member_id ]
|
||||
);
|
||||
$init_member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
$remark = '会员' . $init_member_name . '购买礼品卡';
|
||||
break;
|
||||
case 'transfer'://赠送
|
||||
$member_card_id = $type_id;
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ]
|
||||
);
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($member_card_condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info)) {
|
||||
return $this->error();
|
||||
}
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $member_card_info[ 'from_member_id' ] ]
|
||||
);
|
||||
$from_member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $member_card_info[ 'member_id' ] ]
|
||||
);
|
||||
$member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
|
||||
$remark = '会员' . $from_member_name . '将礼品卡赠送给会员' . $member_name;
|
||||
break;
|
||||
|
||||
case 'use'://使用
|
||||
$records_id = $type_id;
|
||||
$card_use_model = new CardUse();
|
||||
$use_condition = array (
|
||||
[ 'records_id', '=', $records_id ]
|
||||
);
|
||||
$card_use_info = $card_use_model->getCardUseRecordsInfo($use_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_use_info))
|
||||
return $this->error();
|
||||
|
||||
$use_member_id = $card_use_info[ 'member_id' ];
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $use_member_id ]
|
||||
);
|
||||
$use_member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
$remark = '会员' . $use_member_name . '使用礼品卡购买了';
|
||||
$card_use_list = $card_use_model->getCardUseRecordsGoodsList($use_condition)[ 'data' ] ?? [];
|
||||
$card_use_goods_array = [];
|
||||
foreach ($card_use_list as $v) {
|
||||
$card_use_goods_array[] = $v[ 'sku_name' ] . $v[ 'use_num' ] . '件';
|
||||
}
|
||||
$remark .= implode('、', $card_use_goods_array);
|
||||
break;
|
||||
case 'used':
|
||||
$remark = '礼品卡次数使用完毕,礼品卡已使用';
|
||||
break;
|
||||
case 'expire':
|
||||
$remark = '礼品卡过期';
|
||||
break;
|
||||
case 'invalid':
|
||||
$remark = '店铺管理员' . $operator_name . '将礼品卡作废';
|
||||
break;
|
||||
}
|
||||
$data[ 'remark' ] = $remark;
|
||||
$data[ 'extend' ] = json_encode($extend ?? []);
|
||||
model('giftcard_card_log')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡日志记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @param string $alias
|
||||
* @param array $join
|
||||
* @return array
|
||||
*/
|
||||
public function getCardLogInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_card_log')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡日志记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param string $alias
|
||||
* @param array $join
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardLogList($condition = [], $field = '*', $order = '', $alias = '', $join = [], $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_log')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡日志记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @param string $alias
|
||||
* @param array $join
|
||||
* @return array
|
||||
*/
|
||||
public function getCardLogPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card_log')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
}
|
||||
341
addon/giftcard/model/card/CardOperation.php
Executable file
341
addon/giftcard/model/card/CardOperation.php
Executable file
@@ -0,0 +1,341 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\dict\member_account\AccountDict;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\MemberAccount;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 礼品卡工具类
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class CardOperation extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 礼品卡使用吧公共函数
|
||||
* @param $params
|
||||
* @return array
|
||||
* @throws \think\db\exception\DbException
|
||||
*/
|
||||
public function cardUseOperation($params)
|
||||
{
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$card_goods_list = $params[ 'goods_list' ];
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];
|
||||
$card_use_count = $params[ 'use_count' ];
|
||||
$card_right_goods_count -= $card_use_count;
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$use_num = $v[ 'use_num' ];
|
||||
$total_num = $v[ 'total_num' ];
|
||||
$temp_use_num = $v[ 'temp_use_num' ];
|
||||
if ($card_right_goods_type != 'all') {
|
||||
if (( $use_num + $temp_use_num ) > $total_num) {
|
||||
return $this->error([], '使用次数超出可使用次数');
|
||||
}
|
||||
} else {
|
||||
if ($temp_use_num > $card_right_goods_count) {
|
||||
return $this->error([], '使用次数超出可使用次数');
|
||||
}
|
||||
}
|
||||
$item_condition = array (
|
||||
[ 'id', '=', $v[ 'id' ] ]
|
||||
);
|
||||
|
||||
model('giftcard_card_goods')->setInc($item_condition, 'use_num', $temp_use_num);
|
||||
model('giftcard_card')->setInc($condition, 'use_count', $temp_use_num);//卡整体使用次数
|
||||
$card_right_goods_count -= $temp_use_num;
|
||||
}
|
||||
//写入使用记录
|
||||
$card_use_records_model = new CardUse();
|
||||
$result = $card_use_records_model->addCardUseRecords($params);
|
||||
$records_id = $result[ 'data' ];
|
||||
//核验礼品卡还是否存在可使用次数
|
||||
if ($card_right_goods_type != 'all') {
|
||||
$surplus_num = model('giftcard_card_goods')->getSum($condition, Db::raw('(total_num - use_num)'));
|
||||
} else {
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
$surplus_num = $card_info[ 'card_right_goods_count' ] - $card_info[ 'use_count' ];
|
||||
}
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type_id' => $records_id,
|
||||
'type' => 'use',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $params[ 'member_id' ],
|
||||
]);
|
||||
|
||||
if ($surplus_num == 0) {
|
||||
//使用
|
||||
$this->used($params);
|
||||
}
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 储值礼品卡使用
|
||||
* @param $params
|
||||
*/
|
||||
public function cardUse($params)
|
||||
{
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$order_id = $params[ 'order_id' ] ?? 0;
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ],
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'is_transfer', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$member_card_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($member_card_condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
|
||||
$member_id = $member_card_info[ 'member_id' ];
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
$card_model = new Card();
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
);
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
|
||||
$card_info[ 'use_order_id' ] = $order_id;
|
||||
$status = $card_info[ 'status' ];
|
||||
//todo 加入队列概念,队列
|
||||
if ($status != 'to_use')
|
||||
return $this->error([], '当前礼品卡不可以使用');
|
||||
|
||||
$card_right_type = $card_info[ 'card_right_type' ];
|
||||
if ($card_right_type == 'balance') {
|
||||
$card_goods_list = $card_model->getCardGoodsList($card_condition)[ 'data' ] ?? [];
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$card_goods_list[ $k ][ 'temp_use_num' ] = $v[ 'total_num' ];
|
||||
}
|
||||
} else {
|
||||
$card_goods_array = $params[ 'card_goods_json' ];//[{'card_goods_id':15,'order_goods_id':1, 'num': 2}]
|
||||
if (empty($card_goods_array))
|
||||
return $this->error([], '礼品卡使用参数有误');
|
||||
|
||||
$card_goods_ids = array_column($card_goods_array, 'card_goods_id');
|
||||
$card_goods_column = array_column($card_goods_array, null, 'card_goods_id');
|
||||
$temp_card_condition = $card_condition;
|
||||
$temp_card_condition[] = [ 'id', 'in', $card_goods_ids ];
|
||||
$card_goods_list = $card_model->getCardGoodsList($temp_card_condition)[ 'data' ] ?? [];
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$item_column = $card_goods_column[ $v[ 'id' ] ];
|
||||
$card_goods_list[ $k ][ 'temp_use_num' ] = $item_column[ 'num' ];
|
||||
$card_goods_list[ $k ][ 'use_order_goods_id' ] = $item_column[ 'order_goods_id' ];
|
||||
}
|
||||
}
|
||||
model('giftcard_card')->startTrans();
|
||||
try {
|
||||
|
||||
$user_params = array_merge($member_card_info, $card_info);
|
||||
$user_params[ 'goods_list' ] = $card_goods_list;
|
||||
$result = $this->cardUseOperation($user_params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
model('giftcard_card')->rollback();
|
||||
return $result;
|
||||
}
|
||||
|
||||
$result = $this->balanceCardUse($user_params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
model('giftcard_card')->rollback();
|
||||
return $result;
|
||||
}
|
||||
model('giftcard_card')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('giftcard_card')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡兑换
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function balanceCardUse($params)
|
||||
{
|
||||
$card_goods_list = $params[ 'goods_list' ];
|
||||
//将余额给会员
|
||||
$member_account_model = new MemberAccount();
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$item_balance = $v[ 'total_balance' ];//总的余额
|
||||
if ($item_balance > 0) {
|
||||
$member_account_model->addMemberAccount($params[ 'site_id' ], $params[ 'member_id' ], AccountDict::balance, $item_balance, 'giftcard', '礼品卡兑换' . $item_balance, '储值礼品卡兑换');
|
||||
}
|
||||
$card_goods_list[ $k ][ 'temp_use_num' ] = $v[ 'total_num' ];
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
public function cardExpire($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_ids = $params[ 'card_ids' ];
|
||||
$condition = array (
|
||||
[ 'card_id', 'in', $card_ids ],
|
||||
[ 'status', 'in', [ 'to_activate', 'to_use' ] ]//暂时认为只有待使用和待激活的卡项会过期
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$card_model = new Card();
|
||||
$list = $card_model->getCardList($condition)[ 'data' ] ?? [];
|
||||
if (empty($list)){
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'status' => 'expire'
|
||||
);
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
|
||||
$this->cardExpireOperation($list);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡过期后续任务
|
||||
* @param $list
|
||||
* @return array
|
||||
*/
|
||||
public function cardExpireOperation($list)
|
||||
{
|
||||
$card_log_model = new CardLog();
|
||||
foreach ($list as $k => $v) {
|
||||
//将贺卡全部作废
|
||||
$card_blessing_condition = array (
|
||||
[ 'card_id', '=', $v[ 'card_id' ] ],
|
||||
[ 'status', '=', 0 ]
|
||||
);
|
||||
model('giftcard_card_blessing')->update([ 'status' => 1 ], $card_blessing_condition);
|
||||
$card_log_model->add([
|
||||
'card_id' => $v[ 'card_id' ],
|
||||
'type' => 'expire',
|
||||
'operator_type' => 'system',//todo 暂时是确定的
|
||||
]);
|
||||
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡使用
|
||||
* @param $params
|
||||
*/
|
||||
public function used($params)
|
||||
{
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $params[ 'card_id' ] ]
|
||||
);
|
||||
$data = array (
|
||||
'status' => 'used',
|
||||
'use_time' => time(),
|
||||
);
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
|
||||
//数据统计
|
||||
( new CardStat() )->stat(array_merge($params, [ 'stat_type' => 'use' ]));
|
||||
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $params[ 'card_id' ],
|
||||
'type' => 'used',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $params[ 'member_id' ],
|
||||
]);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量作废
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function cardInvalid($params)
|
||||
{
|
||||
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_import_id = $params[ 'card_import_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$condition = [
|
||||
[ 'status', '=', 'to_activate' ]
|
||||
];
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($card_import_id > 0) {
|
||||
$condition[] = [ 'card_import_id', '=', $card_import_id ];
|
||||
}
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
$data = array (
|
||||
'status' => 'invalid',
|
||||
'invalid_time' => time(),
|
||||
);
|
||||
$card_model = new Card();
|
||||
$list = $card_model->getCardList($condition)[ 'data' ] ?? [];
|
||||
if (empty($list))
|
||||
return $this->error();
|
||||
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
$params[ 'list' ] = $list;
|
||||
//作废后的操作
|
||||
$this->cardInvalidOperation($params);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 作废后操作
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function cardInvalidOperation($params)
|
||||
{
|
||||
$list = $params[ 'list' ];
|
||||
$card_log_model = new CardLog();
|
||||
foreach ($list as $k => $v) {
|
||||
//添加日志
|
||||
$card_log_model->add([
|
||||
'card_id' => $v[ 'card_id' ],
|
||||
'type' => 'used',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator_data' => $params[ 'operator_data' ],
|
||||
]);
|
||||
}
|
||||
( new CardStat() )->stat(array_merge($params, [ 'stat_type' => 'invalid', 'num' => count($list) ]));
|
||||
return $this->success();
|
||||
}
|
||||
}
|
||||
165
addon/giftcard/model/card/CardUse.php
Executable file
165
addon/giftcard/model/card/CardUse.php
Executable file
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
/**
|
||||
* 礼品卡使用记录工具类
|
||||
* Class CardUse
|
||||
* @package addon\giftcard\model\card
|
||||
*/
|
||||
class CardUse extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 生成礼品卡记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardUseRecords($params)
|
||||
{
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$use_order_id = $params[ 'use_order_id' ] ?? 0;
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'card_id' => $params[ 'card_id' ],
|
||||
'member_card_id' => $params[ 'member_card_id' ],
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'member_id' => $member_id,
|
||||
'use_time' => time(),
|
||||
'card_right_type' => $card_right_type,
|
||||
'order_id' => $use_order_id
|
||||
);
|
||||
$records_id = model('giftcard_card_use_records')->add($data);
|
||||
|
||||
$goods_list = $params[ 'goods_list' ];
|
||||
foreach ($goods_list as $k => $v) {
|
||||
$v[ 'order_id' ] = $use_order_id;
|
||||
$v[ 'records_id' ] = $records_id;
|
||||
$this->addCardUseRecordsGoods($v);
|
||||
}
|
||||
return $this->success($records_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡项使用记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardUseRecordsGoods($params)
|
||||
{
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'records_id' => $params[ 'records_id' ],//使用记录id
|
||||
'card_goods_id' => $params[ 'id' ],
|
||||
'sku_id' => $params[ 'sku_id' ] ?? 0,
|
||||
'sku_name' => $params[ 'sku_name' ] ?? '',
|
||||
'sku_image' => $params[ 'sku_image' ] ?? '',
|
||||
'sku_no' => $params[ 'sku_no' ] ?? '',
|
||||
'goods_id' => $params[ 'goods_id' ] ?? 0,
|
||||
'goods_name' => $params[ 'goods_name' ] ?? '',
|
||||
'balance' => $params[ 'balance' ] ?? 0,//储值余额
|
||||
'use_num' => $params[ 'temp_use_num' ] ?? '',
|
||||
'order_id' => $params[ 'order_id' ] ?? 0,
|
||||
'order_goods_id' => $params[ 'use_order_goods_id' ] ?? 0,
|
||||
);
|
||||
|
||||
model('giftcard_card_use_records_goods')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_use_records')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_use_records')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_use_records')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录项信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_use_records_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录项列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsGoodsList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_use_records_goods')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录项分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_use_records_goods')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
}
|
||||
470
addon/giftcard/model/card/RealCard.php
Executable file
470
addon/giftcard/model/card/RealCard.php
Executable file
@@ -0,0 +1,470 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use addon\giftcard\model\giftcard\GiftCard;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 实体卡(线下)
|
||||
* Class GiftCardRecords
|
||||
* @package addon\giftcard\model\records
|
||||
*/
|
||||
class RealCard extends Card
|
||||
{
|
||||
|
||||
public function addCard($params)
|
||||
{
|
||||
$source = $params[ 'source' ] ?? '';
|
||||
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];
|
||||
$insert_data = array (
|
||||
'card_name' => $params[ 'card_name' ] ?? '',
|
||||
'card_cover' => $params[ 'card_cover' ] ?? '',
|
||||
'card_right_goods_type' => $card_right_goods_type,
|
||||
'card_right_goods_count' => $card_right_goods_count,
|
||||
'card_cdk' => $params[ 'card_cdk' ],
|
||||
'status' => 'to_activate',
|
||||
'card_import_id' => $params[ 'import_id' ]
|
||||
);
|
||||
$params[ 'card_type' ] = 'real';
|
||||
$params[ 'insert_data' ] = $insert_data;
|
||||
|
||||
//批量生成卡号
|
||||
$giftcard_model = new Giftcard();
|
||||
$card_no_res = $giftcard_model->createCardNo($params['giftcard_id'], 1);
|
||||
if($card_no_res['code'] < 0) return $card_no_res;
|
||||
$card_no = $card_no_res['data'][0];
|
||||
|
||||
$params[ 'card_no' ] = $card_no;
|
||||
$result = $this->addCardItem($params);
|
||||
|
||||
if ($result[ 'code' ] >= 0) {
|
||||
$card_id = $result[ 'data' ];
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type' => 'create',
|
||||
'operator_type' => 'shop',//todo 暂时是确定的
|
||||
'operator_data' => $params[ 'operator_data' ],
|
||||
'type_id' => $params[ 'import_id' ]
|
||||
]);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 制卡
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function cdkLog($params)
|
||||
{
|
||||
set_time_limit(0);
|
||||
ini_set('memory_limit', '512M');
|
||||
$import_id = $params[ 'import_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_import_model = new CardImport();
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ],
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$import_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$import_info = $card_import_model->getCardImportInfo($import_condition)[ 'data' ] ?? [];
|
||||
if (empty($import_info))
|
||||
return $this->error();
|
||||
|
||||
$type = $import_info[ 'type' ];
|
||||
$giftcard_id = $import_info[ 'giftcard_id' ];
|
||||
$card_type = $import_info[ 'card_type' ];
|
||||
$giftcard_model = new GiftCard();
|
||||
$condition = [ [ 'giftcard_id', '=', $giftcard_id ] ];
|
||||
$info = $giftcard_model->getGiftcardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$info[ 'operator_data' ] = $params[ 'operator_data' ];
|
||||
if ($card_type != 'real') {
|
||||
return $this->error('', '该礼品不支持制卡');
|
||||
}
|
||||
|
||||
if (empty($type) && !in_array($type, [ 'auto', 'manual', 'import' ]))
|
||||
return $this->error();
|
||||
|
||||
$data = array (
|
||||
'site_id' => $info[ 'site_id' ],
|
||||
'card_type' => $info[ 'card_type' ],
|
||||
'giftcard_id' => $info[ 'giftcard_id' ],
|
||||
'create_time' => time(),
|
||||
'card_right_type' => $info[ 'card_right_type' ],
|
||||
'valid_time' => $this->getValidityTime($info),
|
||||
'balance' => $info[ 'balance' ] ?? 0,
|
||||
'card_right_goods_type' => $info[ 'card_right_goods_type' ] ?? '',
|
||||
'card_right_goods_count' => $info[ 'card_right_goods_count' ] ?? '',
|
||||
'card_name' => $info[ 'card_name' ] ?? '',
|
||||
'card_cover' => $info[ 'card_cover' ] ?? '',
|
||||
'status' => 'to_activate',
|
||||
'card_import_id' => $import_id
|
||||
);
|
||||
$info[ 'card_data' ] = $data;
|
||||
$info[ 'import_id' ] = $import_id;
|
||||
switch ( $type ) {
|
||||
case 'auto':
|
||||
$info[ 'num' ] = $import_info[ 'total_count' ] ?? 0;
|
||||
$result = $this->createCdk($info);
|
||||
break;
|
||||
case 'manual':
|
||||
$card_cdk = $params[ 'card_cdk' ];
|
||||
$info[ 'card_cdk' ] = $card_cdk;
|
||||
$result = $this->addCdk($info);
|
||||
break;
|
||||
case 'import':
|
||||
$info[ 'num' ] = $import_info[ 'total_count' ];
|
||||
$result = $this->importCdk($info);
|
||||
break;
|
||||
}
|
||||
//制卡统计
|
||||
//( new CardStat() )->stat([ 'stat_type' => 'create', 'giftcard_id' => $giftcard_id, 'num' => $result[ 'data' ][ 'success_count' ] ?? 0 ]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function addCdk($params)
|
||||
{
|
||||
$result = $this->addCard($params);
|
||||
$total_count = 1;
|
||||
if ($result[ 'code' ] < 0) {
|
||||
//生成卡密失败后,继续还是退出
|
||||
$fail_count = 1;
|
||||
$success_count = 0;
|
||||
$error = $result[ 'message' ];
|
||||
} else {
|
||||
$fail_count = 0;
|
||||
$success_count = 1;
|
||||
}
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
if ($import_id > 0) {
|
||||
model('giftcard_card_import')->setInc([ [ 'import_id', '=', $import_id ] ], 'imported_count', 1);
|
||||
$card_import_model = new CardImport();
|
||||
$card_import_model->update([
|
||||
'import_time' => time(),
|
||||
// 'total_count' => $total_count,
|
||||
'fail_count' => $fail_count,
|
||||
'success_count' => $success_count,
|
||||
'card_cdk' => $params[ 'card_cdk' ],
|
||||
'error' => $error ?? ''
|
||||
], [ [ 'import_id', '=', $import_id ] ]);
|
||||
}
|
||||
|
||||
return $this->success([ 'total_count' => $total_count, 'fail_count' => $fail_count, 'success_count' => $success_count, 'error' => $error ?? '' ]);
|
||||
}
|
||||
|
||||
public function createCdk($params)
|
||||
{
|
||||
$num = $params[ 'num' ];//生成卡密数量(一般上限一次1000个)
|
||||
$num_dict = '0123456789';
|
||||
$latter_dict = 'abcdefghijklmnopqrstuvwxyz';
|
||||
$big_latter_dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
$cdk_length = $params[ 'cdk_length' ];
|
||||
$card_prefix = $params[ 'card_prefix' ];
|
||||
$card_suffix = $params[ 'card_suffix' ];
|
||||
// $cdk_prefix_length = strlen($cdk_prefix);
|
||||
// $cdk_suffix_length = strlen($cdk_suffix);
|
||||
// $length = $cdk_length - $cdk_prefix_length - $cdk_suffix_length;
|
||||
$length = $cdk_length;
|
||||
$cdk_type = $params[ 'cdk_type' ];
|
||||
$dict = '';
|
||||
if (strstr($cdk_type, '0-9')) {
|
||||
$dict .= $num_dict;
|
||||
}
|
||||
if (strstr($cdk_type, 'a-z')) {
|
||||
$dict .= $latter_dict;
|
||||
}
|
||||
if (strstr($cdk_type, 'A-Z')) {
|
||||
$dict .= $big_latter_dict;
|
||||
}
|
||||
$dict_len = strlen($dict) - 1;
|
||||
|
||||
$start_num = 1;
|
||||
|
||||
$total_count = $num;
|
||||
$fail_count = 0;
|
||||
$success_count = 0;
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$import_info = model('giftcard_card_import')->getInfo([ [ 'import_id', '=', $import_id ] ], "*");
|
||||
Cache::set("card_import_log_" . $import_id, $import_info);
|
||||
|
||||
$common_data = $params[ 'card_data' ];
|
||||
|
||||
//批量生成卡号
|
||||
$giftcard_model = new Giftcard();
|
||||
$card_no_res = $giftcard_model->createCardNo($params['giftcard_id'], $num);
|
||||
if($card_no_res['code'] < 0) return $card_no_res;
|
||||
$card_no_arr = $card_no_res['data'];
|
||||
|
||||
$insert_data = array ();
|
||||
while ($start_num <= $num) {
|
||||
$randstr = '';
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
$temp_num = mt_rand(0, $dict_len);
|
||||
$randstr .= $dict[ $temp_num ];
|
||||
}
|
||||
$card_cdk = $randstr;
|
||||
|
||||
$success_count++;
|
||||
$item_data = $common_data;
|
||||
$item_data[ 'card_no' ] = array_shift($card_no_arr);
|
||||
$item_data[ 'card_cdk' ] = $card_cdk;
|
||||
$insert_data[] = $item_data;
|
||||
if (( $start_num % 100 ) == 0) {
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $start_num ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
$insert_data = [];
|
||||
} else if ($start_num >= $num) {
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $start_num ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
$insert_data = [];
|
||||
}
|
||||
$start_num++;
|
||||
}
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $import_info[ 'total_count' ] ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
if ($import_id > 0) {
|
||||
$card_import_model = new CardImport();
|
||||
$card_import_model->update([
|
||||
'cdk_length' => $cdk_length,
|
||||
'card_prefix' => $card_prefix,
|
||||
'card_suffix' => $card_suffix,
|
||||
'cdk_type' => $cdk_type,
|
||||
'import_time' => time(),
|
||||
// 'total_count' => $total_count,
|
||||
'fail_count' => $fail_count,
|
||||
'success_count' => $success_count,
|
||||
], [ [ 'import_id', '=', $import_id ] ]);
|
||||
}
|
||||
|
||||
return $this->success([ 'total_count' => $total_count, 'fail_count' => $fail_count, 'success_count' => $success_count ]);
|
||||
}
|
||||
|
||||
public function importCdk($params)
|
||||
{
|
||||
//之后可以配合匿名函数封装公共函数
|
||||
$total_count = 0;
|
||||
$fail_count = 0;
|
||||
$success_count = 0;
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$file_path = 'upload/giftcard/giftcard_card_import' . $import_id . '.csv';
|
||||
$import_info = model('giftcard_card_import')->getInfo([ [ 'import_id', '=', $import_id ] ], "*");
|
||||
Cache::set("card_import_log_" . $import_id, $import_info);
|
||||
$common_data = $params[ 'card_data' ];
|
||||
$card_no_array = [];
|
||||
foreach (getCsvRow($file_path) as $row) {
|
||||
if (!empty($row)) {
|
||||
$total_count++;
|
||||
if ($total_count > 1) {
|
||||
$card_cdk = $row[ 1 ] ?? '';
|
||||
$card_no = $row[ 0 ] ?? '';
|
||||
$card_cdk = trim($card_cdk);
|
||||
$card_no = trim($card_no);
|
||||
if (!empty($card_no) && !empty($card_cdk)) {
|
||||
$params[ 'card_cdk' ] = $card_cdk;
|
||||
$params[ 'card_no' ] = $card_no;
|
||||
// $result = $this->addCard($params);
|
||||
// if ($result['code'] < 0) {
|
||||
// //生成卡密失败后,继续还是退出
|
||||
// $fail_count++;
|
||||
// } else {
|
||||
// $success_count++;
|
||||
// }
|
||||
$item_data = $common_data;
|
||||
$item_data[ 'card_no' ] = $card_no;
|
||||
$card_no_array[] = $card_no;
|
||||
$item_data[ 'card_cdk' ] = $card_cdk;
|
||||
$insert_data[] = $item_data;
|
||||
if (( $total_count % 100 ) == 0) {
|
||||
$column = model('giftcard_card')->getColumn([ [ 'card_no', 'in', $card_no_array ] ], 'card_no');
|
||||
$column = array_unique($column);
|
||||
foreach ($insert_data as $k => $v) {
|
||||
if (in_array($v[ 'card_no' ], $column)) {
|
||||
unset($insert_data[ $k ]);
|
||||
$fail_count++;
|
||||
}
|
||||
}
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $total_count ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
$success_count += count($insert_data);
|
||||
$insert_data = [];
|
||||
$card_no_array = [];
|
||||
}
|
||||
} else {
|
||||
$fail_count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$column = model('giftcard_card')->getColumn([ [ 'card_no', 'in', $card_no_array ] ], 'card_no');
|
||||
$column = array_unique($column);
|
||||
foreach ($insert_data as $k => $v) {
|
||||
if (in_array($v[ 'card_no' ], $column)) {
|
||||
unset($insert_data[ $k ]);
|
||||
$fail_count++;
|
||||
}
|
||||
}
|
||||
$success_count += count($insert_data);
|
||||
//最后一次补充提交
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $import_info[ 'total_count' ] ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
|
||||
if ($import_id > 0) {
|
||||
|
||||
$original_name = Cache::get('giftcard/giftcard_card_import_name' . $import_id);//文件原名
|
||||
$card_import_model = new CardImport();
|
||||
$card_import_model->update([
|
||||
'import_time' => time(),
|
||||
// 'total_count' => $total_count,
|
||||
'fail_count' => $fail_count,
|
||||
'success_count' => $success_count,
|
||||
'file_name' => $original_name
|
||||
], [ [ 'import_id', '=', $import_id ] ]);
|
||||
}
|
||||
return $this->success([ 'total_count' => $total_count, 'fail_count' => $fail_count, 'success_count' => $success_count ]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员激活卡密
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function memberCardActivate($params)
|
||||
{
|
||||
$card_no = $params[ 'card_no' ];
|
||||
$card_cdk = $params[ 'card_cdk' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$card_condition = array (
|
||||
[ 'gc.card_no', '=', $card_no ],
|
||||
[ 'gc.card_cdk', '=', $card_cdk ],
|
||||
[ 'gc.member_id', '=', 0 ],
|
||||
[ 'g.is_delete', '=', 0 ],
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$card_condition[] = [ 'gc.site_id', '=', $site_id ];
|
||||
}
|
||||
$card_info = $this->getCardInfo($card_condition, 'gc.*,g.is_delete,g.status as giftcard_status', 'gc', [
|
||||
[ 'giftcard g', 'gc.giftcard_id = g.giftcard_id', 'inner' ]
|
||||
])[ 'data' ] ?? [];
|
||||
|
||||
if (empty($card_info))
|
||||
return $this->error([], '当前卡密无效或已被激活');
|
||||
|
||||
if (empty($card_info[ 'giftcard_status' ]))
|
||||
return $this->error([], '当前礼品卡已下架');
|
||||
|
||||
$card_id = $card_info[ 'card_id' ];
|
||||
$result = $this->activate([ 'card_id' => $card_id, 'member_id' => $member_id, 'site_id' => $site_id ]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 激活卡密
|
||||
* @param $params
|
||||
*/
|
||||
public function activate($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$card_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error();
|
||||
|
||||
$giftcard_model = new GiftCard();
|
||||
$giftcard_id = $card_info[ 'giftcard_id' ];
|
||||
$condition = [
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
];
|
||||
$info = $giftcard_model->getGiftcardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$data = array (
|
||||
'card_type' => $info[ 'card_type' ],
|
||||
'card_right_type' => $info[ 'card_right_type' ],
|
||||
'valid_time' => $this->getValidityTime($info),
|
||||
'balance' => $info[ 'balance' ] ?? 0,
|
||||
'card_right_goods_type' => $info[ 'card_right_goods_type' ] ?? '',
|
||||
'card_right_goods_count' => $info[ 'card_right_goods_count' ] ?? '',
|
||||
'card_name' => $info[ 'card_name' ] ?? '',
|
||||
'card_cover' => $info[ 'card_cover' ] ?? ''
|
||||
);
|
||||
model('giftcard_card')->update($data, $card_condition);
|
||||
|
||||
//需要更新卡项数据的
|
||||
if ($info[ 'card_right_type' ] == 'goods') {
|
||||
$goods_list = $giftcard_model->getGiftcardGoodsList([ [ 'giftcard_id', '=', $giftcard_id ] ], 'cg.*,gs.sku_name,gs.sku_image,gs.goods_name,gs.sku_no,gs.price', '', 'cg', [
|
||||
[ 'goods_sku gs', 'cg.sku_id=gs.sku_id', 'inner' ]
|
||||
])[ 'data' ] ?? [];
|
||||
foreach ($goods_list as $k => $v) {
|
||||
if ($info[ 'card_right_goods_type' ] == 'all') {
|
||||
$goods_list[ $k ][ 'num' ] = 0;
|
||||
} else {
|
||||
$goods_list[ $k ][ 'num' ] = $v[ 'goods_num' ];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$goods_list = array (
|
||||
[
|
||||
'site_id' => $info[ 'site_id' ],
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'sku_name' => $info[ 'card_name' ],
|
||||
'sku_image' => $info[ 'card_cover' ],
|
||||
'goods_name' => $info[ 'card_name' ],
|
||||
'balance' => $info[ 'balance' ],//储值余额
|
||||
'total_balance' => $info[ 'balance' ],
|
||||
'total_num' => 1,//购买数量
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($goods_list as $k => $v) {
|
||||
$v[ 'card_id' ] = $card_id;
|
||||
$v[ 'giftcard_id' ] = $giftcard_id;
|
||||
$v[ 'card_right_type' ] = $info[ 'card_right_type' ];
|
||||
$this->addCardItemGoods($v);
|
||||
}
|
||||
$data = array (
|
||||
'status' => 'to_use',
|
||||
'init_member_id' => $member_id,
|
||||
'member_id' => $member_id,
|
||||
'activate_time' => time()
|
||||
);
|
||||
model('giftcard_card')->update($data, $card_condition);
|
||||
//生成会员所属记录
|
||||
$member_card_model = new MemberCard();
|
||||
$card_params = array (
|
||||
'site_id' => $site_id,
|
||||
'form_member_id' => 0,
|
||||
'member_id' => $member_id,
|
||||
'card_id' => $card_id,
|
||||
'source' => '',
|
||||
);
|
||||
$result = $member_card_model->addMemberCard($card_params);
|
||||
|
||||
//数据统计
|
||||
( new CardStat() )->stat(array_merge($params, [ 'stat_type' => 'activate' ]));
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
56
addon/giftcard/model/card/VirtualCard.php
Executable file
56
addon/giftcard/model/card/VirtualCard.php
Executable file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
|
||||
/**
|
||||
* 电子卡(线上)
|
||||
* Class GiftCardRecords
|
||||
* @package addon\giftcard\model\records
|
||||
*/
|
||||
class VirtualCard extends Card
|
||||
{
|
||||
|
||||
public function addCard($params)
|
||||
{
|
||||
$source = $params[ 'source' ];
|
||||
|
||||
$insert_data = array (
|
||||
'order_id' => $params[ 'order_id' ],
|
||||
'source' => $source,
|
||||
'is_allow_transfer' => $params[ 'is_allow_transfer' ],
|
||||
'init_member_id' => $params[ 'member_id' ],
|
||||
'card_name' => $params[ 'order_name' ] ?? '',
|
||||
'card_cover' => $params[ 'card_cover' ] ?? '',
|
||||
'status' => 'to_use',
|
||||
);
|
||||
$params[ 'insert_data' ] = $insert_data;
|
||||
$params[ 'card_type' ] = 'virtual';
|
||||
$result = $this->addCardItem($params);
|
||||
$card_id = $result[ 'data' ];
|
||||
|
||||
//生成会员所属记录
|
||||
$member_card_model = new MemberCard();
|
||||
$card_params = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'form_member_id' => 0,
|
||||
'member_id' => $params[ 'member_id' ],
|
||||
'card_id' => $card_id,
|
||||
'source' => $source,
|
||||
);
|
||||
$member_card_model->addMemberCard($card_params);
|
||||
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type' => 'buy',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $params[ 'member_id' ],
|
||||
'type_id' => $params[ 'order_id' ]
|
||||
]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
143
addon/giftcard/model/giftcard/CardStat.php
Executable file
143
addon/giftcard/model/giftcard/CardStat.php
Executable file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use app\model\BaseModel;
|
||||
use app\model\system\Stat;
|
||||
|
||||
|
||||
class CardStat extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动相关统计
|
||||
* @param $params
|
||||
*/
|
||||
public function stat($params)
|
||||
{
|
||||
$stat_type = $params[ 'stat_type' ];
|
||||
$giftcard_id = $params[ 'giftcard_id' ] ?? 0;
|
||||
$num = $params[ 'num' ] ?? 1;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$card_info = $params[ 'card_info' ] ?? [];
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
if ($card_id > 0) {
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo([ [ 'card_id', '=', $card_id ] ])[ 'data' ] ?? [];
|
||||
$import_id = $card_info[ 'card_import_id' ];
|
||||
$giftcard_id = $card_info[ 'giftcard_id' ];
|
||||
}
|
||||
if (!empty($card_info)) {
|
||||
$import_id = $card_info[ 'card_import_id' ];
|
||||
$giftcard_id = $card_info[ 'giftcard_id' ];
|
||||
}
|
||||
switch ( $stat_type ) {
|
||||
case 'sale'://销量
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
$giftcard_model = new GiftCard();
|
||||
$giftcard_model->incSaleNum($num, $condition);
|
||||
break;
|
||||
case 'invalid'://作废
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'invalid_count', $num);
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'invalid_count', $num);
|
||||
}
|
||||
break;
|
||||
case 'activate'://激活
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'activate_count', $num);
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'activate_count', $num);
|
||||
}
|
||||
break;
|
||||
case 'create'://制卡
|
||||
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'card_count', $num);
|
||||
break;
|
||||
case 'use'://使用
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'use_count', $num);
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'use_count', 1);
|
||||
}
|
||||
|
||||
break;
|
||||
case 'del':
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'del_count', $num);
|
||||
$card_type = $card_info[ 'card_type' ] ?? '';
|
||||
if ($card_type == 'real') {
|
||||
//暂时只有实体未激活的卡才能删除
|
||||
model('giftcard')->setDec($giftcard_condition, 'card_count', $num);
|
||||
}
|
||||
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'del_count', $num);
|
||||
// model('giftcard_card_import')->setDec($giftcard_condition, 'total_count', $num);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入礼品卡统计数据
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addGiftcardStat($params)
|
||||
{
|
||||
$order_id = $params[ 'order_id' ];
|
||||
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$order_condition = array (
|
||||
[ 'order_id', '=', $order_id ],
|
||||
[ 'site_id', '=', $site_id ]
|
||||
);
|
||||
$order_info = model('giftcard_order')->getInfo($order_condition);
|
||||
if (empty($order_info))
|
||||
return $this->error();
|
||||
|
||||
//存在余额支付,以实际付款为准
|
||||
$pay_money = model('pay')->getValue([ [ 'out_trade_no', '=', $order_info[ 'out_trade_no' ] ] ], 'pay_money') ?? '0.00';
|
||||
$stat_data = array (
|
||||
'site_id' => $site_id,
|
||||
'member_giftcard_count' => 1,
|
||||
'member_giftcard_total_money' => $pay_money
|
||||
);
|
||||
|
||||
$stat_model = new Stat();
|
||||
$result = $stat_model->addShopStat($stat_data);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
124
addon/giftcard/model/giftcard/Category.php
Executable file
124
addon/giftcard/model/giftcard/Category.php
Executable file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
class Category extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 添加礼品卡分组
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function add($data)
|
||||
{
|
||||
$data[ 'create_time' ] = time();
|
||||
model('giftcard_category')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑礼品卡分组
|
||||
* @param $data
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function edit($data, $condition)
|
||||
{
|
||||
$data[ 'update_time' ] = time();
|
||||
model('giftcard_category')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除礼品卡分组
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($condition)
|
||||
{
|
||||
model('giftcard_category')->delete($condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改礼品卡分组活动排序号
|
||||
* @param $sort
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifySort($sort, $condition)
|
||||
{
|
||||
$data = array (
|
||||
'sort' => $sort,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard_category')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_category')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_category')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_category')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组详情
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getDetail($params)
|
||||
{
|
||||
$category_id = $params[ 'category_id' ];
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$condition = array (
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$info = $this->getInfo($condition)[ 'data' ] ?? [];
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
}
|
||||
740
addon/giftcard/model/giftcard/GiftCard.php
Executable file
740
addon/giftcard/model/giftcard/GiftCard.php
Executable file
@@ -0,0 +1,740 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
|
||||
use app\model\BaseModel;
|
||||
use app\model\goods\Goods;
|
||||
use app\model\system\Cron;
|
||||
use think\facade\Db;
|
||||
|
||||
|
||||
class GiftCard extends BaseModel
|
||||
{
|
||||
|
||||
public $card_type_list = array (
|
||||
'real' => '实体卡',
|
||||
'virtual' => '电子卡',
|
||||
);
|
||||
public $card_right_type_list = array (
|
||||
'balance' => '储值卡',
|
||||
'goods' => '礼品卡',
|
||||
);
|
||||
|
||||
//商品权益模式
|
||||
public $card_right_goods_type_list = array (
|
||||
'all' => '总包权益模式',
|
||||
'item' => '独立权益模式'
|
||||
);
|
||||
|
||||
public $status_list = array (
|
||||
0 => '下架',
|
||||
1 => '上架',
|
||||
);
|
||||
public $validity_type_list = array (
|
||||
'forever' => '永久有效',
|
||||
'day' => '购买后x天有效',
|
||||
'date' => '指定过期日期'
|
||||
);
|
||||
|
||||
/**
|
||||
* 添加礼品卡活动
|
||||
* @param $params
|
||||
*/
|
||||
public function addGiftCard($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$card_name = $params[ 'card_name' ];
|
||||
$category_id = $params[ 'category_id' ];
|
||||
$media_ids = $params[ 'media_ids' ] ?? '';//一般情况下不需要
|
||||
$card_cover = $params[ 'card_cover' ];
|
||||
$validity_type = $params[ 'validity_type' ];
|
||||
$sort = $params[ 'sort' ];
|
||||
$card_count = $params[ 'card_count' ];
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$desc = $params[ 'desc' ] ?? '';
|
||||
|
||||
$cartgory_model = new Category();
|
||||
$cartgory_condition = array (
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
$category_info = $cartgory_model->getInfo($cartgory_condition)[ 'data' ] ?? [];
|
||||
if (empty($category_info))
|
||||
return $this->error([], '当前分组不可用!');
|
||||
$data = array (
|
||||
'site_id' => $site_id,
|
||||
'card_name' => $card_name,
|
||||
'category_id' => $category_id,
|
||||
'media_ids' => $media_ids,
|
||||
'card_cover' => $card_cover,
|
||||
'validity_type' => $validity_type,
|
||||
'sort' => $sort,
|
||||
'create_time' => time(),
|
||||
'card_count' => $card_count,
|
||||
'card_right_type' => $card_right_type,
|
||||
'card_right_goods_type' => $card_right_goods_type,
|
||||
'desc' => $desc,
|
||||
'is_allow_transfer' => $params[ 'is_allow_transfer' ],
|
||||
'card_price' => $params[ 'card_price' ],
|
||||
'instruction' => $params[ 'instruction' ],
|
||||
'card_type' => $params[ 'card_type' ],
|
||||
);
|
||||
switch ( $validity_type ) {
|
||||
case 'forever'://永久
|
||||
$data[ 'validity_day' ] = 0;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'day'://几天后过期
|
||||
$validity_day = $params[ 'validity_day' ] ?? 0;
|
||||
$data[ 'validity_day' ] = $validity_day;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'date'://指定日期过期
|
||||
$validity_time = $params[ 'validity_time' ] ? strtotime($params[ 'validity_time' ]) : 0;
|
||||
$data[ 'validity_time' ] = $validity_time;
|
||||
$data[ 'validity_day' ] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
$cdk_length = $params[ 'cdk_length' ] ?? 0;//长度
|
||||
$cdk_type = $params[ 'cdk_type' ] ?? '';//待激活卡类型
|
||||
$card_prefix = $params[ 'card_prefix' ] ?? '';//前缀
|
||||
$card_suffix = $params[ 'card_suffix' ] ?? '';//后缀
|
||||
|
||||
$data[ 'cdk_length' ] = $cdk_length;
|
||||
$data[ 'card_prefix' ] = $card_prefix;
|
||||
$data[ 'card_suffix' ] = $card_suffix;
|
||||
$data[ 'cdk_type' ] = $cdk_type;
|
||||
|
||||
$giftcard_id = 0;
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
switch ( $card_right_type ) {
|
||||
case 'balance'://储值
|
||||
$card_price = $params[ 'card_price' ] ?? 0;//购买礼品卡的单价
|
||||
$balance = $params[ 'balance' ];//储值余额数
|
||||
$data[ 'card_price' ] = $card_price;
|
||||
$data[ 'balance' ] = $balance;
|
||||
break;
|
||||
|
||||
case 'goods'://商品
|
||||
$goods_sku_list = $params[ 'goods_sku_list' ];//[{"sku_id":1, 'goods_id':2, 'goods_price':10,'goods_num':30}]
|
||||
$giftcard_goods_list = array ();
|
||||
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];//兑换商品业务形式 all 总体数量 item按照商品数量
|
||||
switch ( $card_right_goods_type ) {
|
||||
case 'all'://设置整体共享的数量
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];//可兑换的整体数量
|
||||
$data[ 'card_right_goods_count' ] = $card_right_goods_count;
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => &$giftcard_id ];
|
||||
}
|
||||
break;
|
||||
case 'item'://单个每个商品的数量
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => &$giftcard_id, 'goods_num' => $v[ 'goods_num' ] ];
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (empty($giftcard_goods_list))
|
||||
return $this->error([], '商品不存在!');
|
||||
break;
|
||||
}
|
||||
|
||||
$giftcard_id = model('giftcard')->add($data);
|
||||
if (!empty($giftcard_goods_list)) {
|
||||
model('giftcard_goods')->addList($giftcard_goods_list);
|
||||
}
|
||||
|
||||
$cron = new Cron();
|
||||
$cron->deleteCron([ [ 'event', '=', 'CronCardExpire' ] ]);
|
||||
$cron->addCron(2, 1, '礼品卡过期', 'CronCardExpire', time(), 0);
|
||||
return $this->success($giftcard_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑礼品卡活动
|
||||
* @param $params
|
||||
*/
|
||||
public function editGiftCard($params)
|
||||
{
|
||||
|
||||
//编辑的时候不允许修改活动类型
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$card_name = $params[ 'card_name' ];
|
||||
$category_id = $params[ 'category_id' ];
|
||||
$media_ids = $params[ 'media_ids' ] ?? 0;//一般情况下不需要
|
||||
$card_cover = $params[ 'card_cover' ];
|
||||
$validity_type = $params[ 'validity_type' ];
|
||||
$giftcard_id = $params[ 'giftcard_id' ] ?? 0;
|
||||
$sort = $params[ 'sort' ];
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$desc = $params[ 'desc' ] ?? '';
|
||||
$cartgory_model = new Category();
|
||||
$cartgory_condition = array (
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
$category_info = $cartgory_model->getInfo($cartgory_condition)[ 'data' ] ?? [];
|
||||
if (empty($category_info))
|
||||
return $this->error([], '当前分组不可用!');
|
||||
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
|
||||
$data = array (
|
||||
'site_id' => $site_id,
|
||||
'card_name' => $card_name,
|
||||
//'card_count' => $card_count,
|
||||
'category_id' => $category_id,
|
||||
'media_ids' => $media_ids,
|
||||
'card_cover' => $card_cover,
|
||||
'validity_type' => $validity_type,
|
||||
'sort' => $sort,
|
||||
'card_right_type' => $card_right_type,
|
||||
'card_right_goods_type' => $card_right_goods_type,
|
||||
'update_time' => time(),
|
||||
'desc' => $desc,
|
||||
'is_allow_transfer' => $params[ 'is_allow_transfer' ],
|
||||
'instruction' => $params[ 'instruction' ],
|
||||
'card_price' => $params[ 'card_price' ]
|
||||
);
|
||||
switch ( $validity_type ) {
|
||||
case 'forever'://永久
|
||||
$data[ 'validity_day' ] = 0;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'day'://几天后过期
|
||||
$validity_day = $params[ 'validity_day' ] ?? 0;
|
||||
$data[ 'validity_day' ] = $validity_day;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'date'://指定日期过期
|
||||
$validity_time = $params[ 'validity_time' ] ? strtotime($params[ 'validity_time' ]) : 0;
|
||||
$data[ 'validity_time' ] = $validity_time;
|
||||
$data[ 'validity_day' ] = 0;
|
||||
break;
|
||||
}
|
||||
$cdk_length = $params[ 'cdk_length' ];//长度
|
||||
$cdk_type = $params[ 'cdk_type' ];//待激活卡类型
|
||||
$card_prefix = $params[ 'card_prefix' ];//前缀
|
||||
$card_suffix = $params[ 'card_suffix' ];//后缀
|
||||
$data[ 'cdk_length' ] = $cdk_length;
|
||||
$data[ 'cdk_type' ] = $cdk_type;
|
||||
$data[ 'card_prefix' ] = $card_prefix;
|
||||
$data[ 'card_suffix' ] = $card_suffix;
|
||||
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
switch ( $card_right_type ) {
|
||||
case 'balance'://储值
|
||||
$card_price = $params[ 'card_price' ] ?? 0;//购买礼品卡的单价
|
||||
$balance = $params[ 'balance' ];//储值余额数
|
||||
$data[ 'card_price' ] = $card_price;
|
||||
$data[ 'balance' ] = $balance;
|
||||
break;
|
||||
case 'goods'://商品
|
||||
$goods_sku_list = $params[ 'goods_sku_list' ];//[{"sku_id":1, 'goods_id':2, 'goods_price':10,'goods_num':30}]
|
||||
$giftcard_goods_list = array ();
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];//兑换商品业务形式 all 总体数量 item按照商品数量
|
||||
switch ( $card_right_goods_type ) {
|
||||
case 'all'://设置整体共享的数量
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];//可兑换的整体数量
|
||||
$data[ 'card_right_goods_count' ] = $card_right_goods_count;
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => $giftcard_id ];
|
||||
}
|
||||
break;
|
||||
case 'item'://单个每个商品的数量
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => $giftcard_id, 'goods_num' => $v[ 'goods_num' ] ];
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (empty($giftcard_goods_list))
|
||||
return $this->error([], '商品不存在!');
|
||||
break;
|
||||
}
|
||||
//每次都创建新的活动商品关联
|
||||
model('giftcard_goods')->delete($condition);
|
||||
$giftcard_id = model('giftcard')->update($data, $condition);
|
||||
if (!empty($giftcard_goods_list)) {
|
||||
model('giftcard_goods')->addList($giftcard_goods_list);
|
||||
}
|
||||
|
||||
$cron = new Cron();
|
||||
$cron->deleteCron([ [ 'event', '=', 'CronCardExpire' ] ]);
|
||||
$cron->addCron(2, 1, '礼品卡过期', 'CronCardExpire', time(), 0);
|
||||
return $this->success($giftcard_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡上架
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function giftcardOn($params)
|
||||
{
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$data = array (
|
||||
'status' => 1
|
||||
);
|
||||
$res = model('giftcard')->update($data, $condition);
|
||||
if ($res === false)
|
||||
return $this->error();
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡下架
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function giftcardOff($params)
|
||||
{
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$data = array (
|
||||
'status' => 0
|
||||
);
|
||||
$res = model('giftcard')->update($data, $condition);
|
||||
if ($res === false)
|
||||
return $this->error();
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
* @param $status
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifyStatus($status, $condition)
|
||||
{
|
||||
$res = model('giftcard')->update([ 'status' => $status ], $condition);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改礼品卡排序
|
||||
* @param $sort
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifyGiftcardSort($sort, $condition)
|
||||
{
|
||||
$data = array (
|
||||
'sort' => $sort,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动增加销量
|
||||
* @param $num
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function incSaleNum($num, $condition)
|
||||
{
|
||||
model('giftcard')->setInc($condition, 'sale_num', $num);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function deleteGiftcard($condition)
|
||||
{
|
||||
$data = array (
|
||||
'is_delete' => 1,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡商品信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡商品列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardGoodsList($condition = [], $field = '*', $order = '', $alias = '', $join = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_goods')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡商品分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_goods')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡活动详情
|
||||
* @param $params
|
||||
*/
|
||||
public function getGiftcardDetail($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
|
||||
$condition = array (
|
||||
[ 'g.giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'g.site_id', '=', $site_id ];
|
||||
}
|
||||
$info = $this->getGiftcardInfo($condition, 'g.*,gc.category_name', 'g', [
|
||||
[ 'giftcard_category gc', 'g.category_id=gc.category_id', 'left' ]
|
||||
])[ 'data' ] ?? [];
|
||||
if (!empty($info)) {
|
||||
//查询活动商品关联项
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$list = $this->getGiftcardGoodsList($condition)[ 'data' ] ?? [];
|
||||
if (!empty($list)) {
|
||||
$list = array_map([ $this, 'itemTran' ], $list);
|
||||
}
|
||||
$info[ 'goods_list' ] = $list;
|
||||
}
|
||||
$info = $this->tran($info);
|
||||
return $this->success($info);
|
||||
}
|
||||
/**
|
||||
* 获取礼品卡分页列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = $this->getGiftcardPageList($condition, $page, $page_size, $order, $field);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ]['list'] as $k => $v) {
|
||||
$list[ 'data' ]['list'][$k] = $this->tran($v);
|
||||
}
|
||||
}
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailList($condition = [], $field = '*', $order = '')
|
||||
{
|
||||
$list = $this->getGiftcardList($condition, $field, $order);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ] as $k => $v) {
|
||||
$list[ 'data' ][$k] = $this->tran($v);
|
||||
}
|
||||
}
|
||||
return $this->success($list[ 'data' ]);
|
||||
}
|
||||
/**
|
||||
* 获取礼品卡分页列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailPageListInAdmin($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = $this->getGiftcardPageList($condition, $page, $page_size, $order, $field);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ]['list'] as $k => $v) {
|
||||
$card_right_type = $v[ 'card_right_type' ] ?? '';
|
||||
if (!empty($card_right_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'card_right_type_name' ] = $this->card_right_type_list[ $card_right_type ] ?? '';
|
||||
}
|
||||
$card_right_goods_type = $v[ 'card_right_goods_type' ] ?? '';
|
||||
if (!empty($card_right_goods_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'card_right_goods_type_name' ] = $this->card_right_goods_type_list[ $card_right_goods_type ] ?? '';
|
||||
}
|
||||
$status = $v[ 'status' ] ?? -1;
|
||||
if ($status != -1) {
|
||||
$list[ 'data' ]['list'][$k][ 'status_name' ] = $this->status_list[ $status ] ?? '';
|
||||
}
|
||||
$validity_type = $v[ 'validity_type' ] ?? '';
|
||||
if (!empty($validity_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'validity_type_name' ] = $this->validity_type_list[ $validity_type ] ?? '';
|
||||
}
|
||||
$card_type = $v[ 'card_type' ] ?? '';
|
||||
if (!empty($card_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'card_type_name' ] = $this->card_type_list[ $card_type ] ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailListInAdmin($condition = [], $field = '*', $order = '')
|
||||
{
|
||||
$list = $this->getGiftcardList($condition, $field, $order);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ] as $k => $v) {
|
||||
$card_right_type = $v[ 'card_right_type' ] ?? '';
|
||||
if (!empty($card_right_type)) {
|
||||
$list[ 'data' ][$k][ 'card_right_type_name' ] = $this->card_right_type_list[ $card_right_type ] ?? '';
|
||||
}
|
||||
$card_right_goods_type = $v[ 'card_right_goods_type' ] ?? '';
|
||||
if (!empty($card_right_goods_type)) {
|
||||
$list[ 'data' ][$k][ 'card_right_goods_type_name' ] = $this->card_right_goods_type_list[ $card_right_goods_type ] ?? '';
|
||||
}
|
||||
$status = $v[ 'status' ] ?? -1;
|
||||
if ($status != -1) {
|
||||
$list[ 'data' ][$k][ 'status_name' ] = $this->status_list[ $status ] ?? '';
|
||||
}
|
||||
$validity_type = $v[ 'validity_type' ] ?? '';
|
||||
if (!empty($validity_type)) {
|
||||
$list[ 'data' ][$k][ 'validity_type_name' ] = $this->validity_type_list[ $validity_type ] ?? '';
|
||||
}
|
||||
$card_type = $v[ 'card_type' ] ?? '';
|
||||
if (!empty($card_type)) {
|
||||
$list[ 'data' ][$k][ 'card_type_name' ] = $this->card_type_list[ $card_type ] ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->success($list[ 'data' ]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动主表的一些映射翻译
|
||||
* @param $data
|
||||
* @return mixed
|
||||
*/
|
||||
public function tran($data)
|
||||
{
|
||||
$card_right_type = $data[ 'card_right_type' ] ?? '';
|
||||
if (!empty($card_right_type)) {
|
||||
$data[ 'card_right_type_name' ] = $this->card_right_type_list[ $card_right_type ] ?? '';
|
||||
}
|
||||
$card_right_goods_type = $data[ 'card_right_goods_type' ] ?? '';
|
||||
if (!empty($card_right_goods_type)) {
|
||||
$data[ 'card_right_goods_type_name' ] = $this->card_right_goods_type_list[ $card_right_goods_type ] ?? '';
|
||||
}
|
||||
$status = $data[ 'status' ] ?? -1;
|
||||
if ($status != -1) {
|
||||
$data[ 'status_name' ] = $this->status_list[ $status ] ?? '';
|
||||
}
|
||||
$validity_type = $data[ 'validity_type' ] ?? '';
|
||||
if (!empty($validity_type)) {
|
||||
$data[ 'validity_type_name' ] = $this->validity_type_list[ $validity_type ] ?? '';
|
||||
}
|
||||
$card_type = $data[ 'card_type' ] ?? '';
|
||||
if (!empty($card_type)) {
|
||||
$data[ 'card_type_name' ] = $this->card_type_list[ $card_type ] ?? '';
|
||||
}
|
||||
|
||||
$media_ids = $data[ 'media_ids' ] ?? '';
|
||||
if (!empty($media_ids)) {
|
||||
$media_model = new Media();
|
||||
$data[ 'media_list' ] = $media_model->getList([ [ 'media_id', 'in', (string) $media_ids ] ])[ 'data' ] ?? [];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动商品表的一些映射翻译
|
||||
* @param $data
|
||||
* @return mixed
|
||||
*/
|
||||
public function itemTran($data)
|
||||
{
|
||||
$goods_id = $data[ 'goods_id' ];
|
||||
$sku_id = $data[ 'sku_id' ];
|
||||
$goods_model = new Goods();
|
||||
$sku_condition = array (
|
||||
[ 'goods_id', '=', $goods_id ],
|
||||
[ 'sku_id', '=', $sku_id ]
|
||||
);
|
||||
$sku_info = $goods_model->getGoodsSkuInfo($sku_condition)[ 'data' ] ?? [];
|
||||
$data[ 'sku_info' ] = $sku_info;
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 购买须知拼接
|
||||
*/
|
||||
public function giftcardDesc($data)
|
||||
{
|
||||
$text = '';
|
||||
|
||||
if (isset($data[ 'valid_time' ])) {
|
||||
if ($data[ 'valid_time' ] == 0) {
|
||||
$text .= '1.该礼品卡永久有效。<br>';
|
||||
} else {
|
||||
$text .= '1.该礼品卡' . time_to_date($data[ 'valid_time' ]) . '过期,过期失效,请在有效期内使用。<br>';
|
||||
}
|
||||
} else {
|
||||
if ($data[ 'validity_type' ] == 'forever') {
|
||||
$text .= '1.该礼品卡永久有效。<br>';
|
||||
} else if ($data[ 'validity_type' ] == 'day') {
|
||||
$text .= '1.该礼品卡有效期为购买日起' . $data[ 'validity_day' ] . '天内有效,过期失效,请在有效期内使用。<br>';
|
||||
} else if ($data[ 'validity_type' ] == 'date') {
|
||||
$text .= '1.该礼品卡' . date('Y-m-d', $data[ 'validity_time' ]) . '过期,过期失效,请在有效期内使用。<br>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($data[ 'is_allow_transfer' ] == 1) {
|
||||
$text .= '2.本卡可在指定门店,可以本人使用,或者转赠他人,本卡仅限于店铺或者外带时消费使用,不适用于会员卡购买或者充值。<br>';
|
||||
} else {
|
||||
$text .= '2.本卡可在指定门店,可以本人使用,本卡仅限于店铺或者外带时消费使用,不适用于会员卡购买或者充值。<br>';
|
||||
}
|
||||
|
||||
$text .= '3.本卡不记名、不挂失、不可兑换现金、不找零。<br>';
|
||||
if (isset($data[ 'mobile' ]) && $data[ 'mobile' ]) {
|
||||
$text .= '4.如有疑问请拨打:<span style="color: #364385">' . $data[ 'mobile' ] . '</span>';
|
||||
}
|
||||
return $text;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成卡号
|
||||
* @param $giftcard_id
|
||||
* @param $num
|
||||
* @return array
|
||||
*/
|
||||
public function createCardNo($giftcard_id, $num)
|
||||
{
|
||||
$giftcard_info = model('giftcard')->getInfo([
|
||||
['giftcard_id', '=', $giftcard_id],
|
||||
]);
|
||||
if(empty($giftcard_info)){
|
||||
return $this->error(null, '礼品卡信息缺失');
|
||||
}
|
||||
Db::startTrans();
|
||||
try{
|
||||
$giftcard_info = Db::name('giftcard')->where([['giftcard_id', '=', $giftcard_id]])->lock(true)->find();
|
||||
if(empty($giftcard_info)){
|
||||
Db::rollback();
|
||||
return $this->error(null, '礼品卡信息缺失');
|
||||
}
|
||||
|
||||
$start_num = $giftcard_info['card_count'] + 1;
|
||||
$end_num = $giftcard_info['card_count'] + $num;
|
||||
$card_no_arr = [];
|
||||
for($i = $start_num;$i <= $end_num;$i ++){
|
||||
$card_no_arr[] = $giftcard_info['card_prefix'].$giftcard_id.sprintf('%04d', $i).$giftcard_info['card_suffix'];
|
||||
}
|
||||
model('giftcard')->update(['card_count'=>$end_num], [
|
||||
['giftcard_id', '=', $giftcard_id],
|
||||
]);
|
||||
|
||||
Db::commit();
|
||||
return $this->success($card_no_arr);
|
||||
}catch(\Exception $e){
|
||||
Db::rollback();
|
||||
return $this->error(null, $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
177
addon/giftcard/model/giftcard/Media.php
Executable file
177
addon/giftcard/model/giftcard/Media.php
Executable file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
use app\model\BaseModel;
|
||||
use app\model\upload\Upload;
|
||||
|
||||
class Media extends BaseModel
|
||||
{
|
||||
/**
|
||||
* 添加礼品卡素材
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function add($data)
|
||||
{
|
||||
$data[ 'create_time' ] = time();
|
||||
model('giftcard_media')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加礼品卡素材
|
||||
* @param array $list
|
||||
* @return array
|
||||
*/
|
||||
public function addList(array $list)
|
||||
{
|
||||
model('giftcard_media')->addList($list);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加礼品卡素材
|
||||
* @param $data
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function edit($data, $condition)
|
||||
{
|
||||
$data[ 'update_time' ] = time();
|
||||
model('giftcard_media')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除礼品卡素材
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($condition)
|
||||
{
|
||||
$info = $this->getInfo($condition, 'media_path,site_id')[ 'data' ] ?? [];
|
||||
|
||||
$giftcard_count = model('giftcard')->getCount([ [ 'card_cover', 'like', '%' . $info[ 'media_path' ] . '%' ] ], 'giftcard_id');
|
||||
if ($giftcard_count > 0) $this->error('', '删除失败,不能删除正在使用的图');
|
||||
|
||||
model('giftcard_media')->delete($condition);
|
||||
$upload_model = new Upload($info[ 'site_id' ]);
|
||||
$upload_model->deleteFile($info[ 'media_path' ]);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改礼品卡活动所在素材
|
||||
* @param $cartgory_id
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifyGiftCardCategoryMediaCategoryId($cartgory_id, $condition)
|
||||
{
|
||||
$data = array (
|
||||
'cartgory_id' => $cartgory_id,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard_media')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_media')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_media')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_media')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传图片并保存
|
||||
* @param $params
|
||||
*/
|
||||
public function upload($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$upload_model = new Upload($site_id);
|
||||
$path = $site_id > 0 ? 'common/giftcardimages/' . date('Ymd') . '/' : 'common/giftcardimages/' . date('Ymd') . '/';
|
||||
$result = $upload_model->setPath($path)->image($params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
return $result;
|
||||
}
|
||||
$result_data = $result[ 'data' ];
|
||||
$data = array (
|
||||
'media_path' => $result_data[ 'pic_path' ],
|
||||
'media_name' => $result_data[ 'pic_name' ],
|
||||
'media_spec' => $result_data[ 'pic_spec' ],
|
||||
'site_id' => $site_id,
|
||||
);
|
||||
$result = $this->add($data);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换素材
|
||||
* @param $params
|
||||
* @return array|false|\multitype|string
|
||||
*/
|
||||
public function replace($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$media_id = $params[ 'media_id' ];
|
||||
// 图片信息
|
||||
$info = $this->getInfo([ [ 'site_id', '=', $site_id ], [ 'media_id', '=', $media_id ] ])[ 'data' ] ?? [];
|
||||
// 判断是否找到有效图片
|
||||
if (empty($info)) {
|
||||
return json_encode(error('', '未查到素材信息', ''));
|
||||
}
|
||||
$upload_model = new Upload($site_id);
|
||||
$path = $site_id > 0 ? 'common/giftcardimages/' . date('Ymd') . '/' : 'common/giftcardimages/' . date('Ymd') . '/';
|
||||
$result = $upload_model->setPath($path)->image($params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
return $result;
|
||||
}
|
||||
$result_data = $result[ 'data' ];
|
||||
$data = array (
|
||||
'media_path' => $result_data[ 'pic_path' ],
|
||||
'media_name' => $result_data[ 'pic_name' ],
|
||||
'media_spec' => $result_data[ 'pic_spec' ],
|
||||
);
|
||||
$result = $this->edit($data, [ [ 'media_id', '=', $media_id ] ]);
|
||||
$upload_model->deleteFile($info[ 'media_path' ]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
299
addon/giftcard/model/membercard/MemberCard.php
Executable file
299
addon/giftcard/model/membercard/MemberCard.php
Executable file
@@ -0,0 +1,299 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\membercard;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\transfer\Blessing;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
|
||||
|
||||
class MemberCard extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 生成会员所属卡记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addMemberCard($params)
|
||||
{
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$member_id = $params[ 'member_id' ];
|
||||
// $condition = array(
|
||||
// ['card_id', '=', $card_id],
|
||||
// ['member_id', '=', $member_id]
|
||||
// );
|
||||
// $member_card_info = $this->getMemberCardInfo($condition)['data'] ?? [];
|
||||
// if(!empty($member_card_info)){
|
||||
// $this->deleteMemberCard($condition);
|
||||
// }
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'card_id' => $card_id,
|
||||
'from_member_id' => $params[ 'from_member_id' ] ?? 0,
|
||||
'member_id' => $member_id,
|
||||
// 'to_member_id' => $params['to_member_id'] ?? 0,
|
||||
// 'is_transfer' => $params['is_transfer'] ?? 0,
|
||||
'source' => $params[ 'source' ],
|
||||
'get_time' => time()
|
||||
);
|
||||
$member_card_id = model('giftcard_member_card')->add($data);
|
||||
return $this->success($member_card_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 赠送后的操作
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function memberCardTransfer($params)
|
||||
{
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', $member_id ],
|
||||
);
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$card_goods_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
);
|
||||
$card_goods_list = $card_model->getCardGoodsList($card_goods_condition)[ 'data' ] ?? [];
|
||||
|
||||
$snapshot = array (
|
||||
'card_info' => $card_info,
|
||||
'card_goods_list' => $card_goods_list
|
||||
);
|
||||
//赠送
|
||||
$data = array (
|
||||
'is_transfer' => 1,
|
||||
'to_member_id' => $params[ 'to_member_id' ],
|
||||
'transfer_time' => time(),
|
||||
'snapshot' => json_encode($snapshot)
|
||||
);
|
||||
model('giftcard_member_card')->update($data, [ [ 'member_card_id', '=', $member_card_id ] ]);
|
||||
model('giftcard_card')->update([ 'member_id' => $data[ 'to_member_id' ] ], [ [ 'card_id', '=', $card_id ] ]);
|
||||
|
||||
//使祝福语失效
|
||||
$blessing_model = new Blessing();
|
||||
$blessing_model->blessingToVoid([ [ 'member_card_id', '=', $member_card_id ] ]);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function deleteMemberCard($condition)
|
||||
{
|
||||
model('giftcard_member_card')->delete($condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_member_card')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardList($condition = [], $field = '*', $order = '', $limit = null, $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_member_card')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡详情列表
|
||||
* @param array $condition
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardDetailList($condition = [], $order = 'gmc.get_time asc', $limit = null)
|
||||
{
|
||||
$alias = 'gmc';
|
||||
$join = [
|
||||
[
|
||||
'giftcard_card gc',
|
||||
'gc.card_id = gmc.card_id',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m1',
|
||||
'gmc.from_member_id = m1.member_id or m1.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m2',
|
||||
'gmc.to_member_id = m2.member_id or m2.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m3',
|
||||
'gmc.member_id = m3.member_id or m3.member_id is null',
|
||||
'left'
|
||||
],
|
||||
];
|
||||
$field = 'gc.*,gmc.*,m1.nickname as from_nickname, m2.nickname as to_nickname, m3.nickname as member_nickname';
|
||||
$list = $this->getMemberCardList($condition, $field, $order, $limit, $alias, $join)[ 'data' ] ?? [];
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @param string $alias
|
||||
* @param array $join
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_member_card')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取我的卡券列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
|
||||
{
|
||||
$alias = 'gmc';
|
||||
$join = [
|
||||
[
|
||||
'giftcard_card gc',
|
||||
'gc.card_id = gmc.card_id',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m1',
|
||||
'gmc.from_member_id = m1.member_id or m1.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m2',
|
||||
'gmc.to_member_id = m2.member_id or m2.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m3',
|
||||
'gmc.member_id = m3.member_id or m3.member_id is null',
|
||||
'left'
|
||||
],
|
||||
];
|
||||
$field = 'gc.*,gmc.*,m1.nickname as from_nickname, m2.nickname as to_nickname, m3.nickname as member_nickname';
|
||||
$list = $this->getMemberCardPageList($condition, $page, $page_size, $order, $field, $alias, $join)[ 'data' ] ?? [];
|
||||
if (!empty($list[ 'list' ])) {
|
||||
$card_model = new Card();
|
||||
foreach ($list[ 'list' ] as $k => $v) {
|
||||
if ($v[ 'is_transfer' ] == 0) {
|
||||
$item_condition = array (
|
||||
[ 'card_id', '=', $v[ 'card_id' ] ]
|
||||
);
|
||||
$card_goods_list = $card_model->getCardGoodsList($item_condition)[ 'data' ] ?? [];
|
||||
} else {
|
||||
$snapshot = $v[ 'snapshot' ];
|
||||
$snapshot_array = json_decode($snapshot, true);
|
||||
$card_goods_list = $snapshot_array[ 'card_goods_list' ] ?? [];
|
||||
}
|
||||
$list[ 'list' ][ $k ][ 'card_goods_list' ] = $card_goods_list;
|
||||
}
|
||||
}
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 我的卡券详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardDetail($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($member_id > 0) {
|
||||
$condition[] = [ 'member_id', '=', $member_id ];
|
||||
}
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
$member_card_info = $this->getMemberCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error();
|
||||
|
||||
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
if ($member_card_info[ 'is_transfer' ] == 0) {
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardDetail([ 'site_id' => $site_id, 'card_id' => $card_id ])[ 'data' ] ?? [];
|
||||
} else {
|
||||
$snapshot = $member_card_info[ 'snapshot' ];
|
||||
$snapshot_array = json_decode($snapshot, true);
|
||||
$card_info = $snapshot_array[ 'card_info' ];
|
||||
$card_goods_list = $snapshot_array[ 'card_goods_list' ];
|
||||
$card_info[ 'card_goods_list' ] = $card_goods_list;
|
||||
}
|
||||
$member_model = new Member();
|
||||
|
||||
if ($member_card_info[ 'to_member_id' ] > 0) {
|
||||
$to_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_card_info[ 'to_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$card_info[ 'to_member_nickname' ] = $to_member_info[ 'nickname' ];
|
||||
$card_info[ 'to_member_headimg' ] = $to_member_info[ 'headimg' ];
|
||||
}
|
||||
if ($member_card_info[ 'from_member_id' ] > 0) {
|
||||
$from_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_card_info[ 'from_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$card_info[ 'from_member_nickname' ] = $from_member_info[ 'nickname' ];
|
||||
$card_info[ 'from_member_headimg' ] = $from_member_info[ 'headimg' ];
|
||||
}
|
||||
if ($member_card_info[ 'member_id' ] > 0) {
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_card_info[ 'member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$card_info[ 'member_nickname' ] = $member_info[ 'nickname' ];
|
||||
$card_info[ 'member_headimg' ] = $member_info[ 'headimg' ];
|
||||
}
|
||||
$info = array_merge($card_info, $member_card_info);
|
||||
return $this->success($info);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
266
addon/giftcard/model/membercard/Poster.php
Executable file
266
addon/giftcard/model/membercard/Poster.php
Executable file
@@ -0,0 +1,266 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\membercard;
|
||||
|
||||
use addon\giftcard\model\transfer\Blessing;
|
||||
use app\model\BaseModel;
|
||||
use app\model\system\Site;
|
||||
use app\model\upload\Upload;
|
||||
use extend\Poster as PosterExtend;
|
||||
|
||||
/**
|
||||
* 海报生成类
|
||||
*/
|
||||
class Poster extends BaseModel
|
||||
{
|
||||
/**
|
||||
* 海报
|
||||
*/
|
||||
public function poster($app_type, $page, $qrcode_param, $promotion_type, $site_id)
|
||||
{
|
||||
try {
|
||||
$blessing_model = new Blessing();
|
||||
$params = array (
|
||||
'no' => $qrcode_param[ 'no' ],
|
||||
'member_id' => $qrcode_param[ 'source_member' ]
|
||||
);
|
||||
$card_info = $blessing_model->getBlessingDetail($params)[ 'data' ] ?? [];
|
||||
if (empty($card_info)) return $this->error('未获取到信息');
|
||||
|
||||
$qrcode_info = $this->getQrcode($app_type, $page, $qrcode_param, $promotion_type, $site_id);
|
||||
if ($qrcode_info[ 'code' ] < 0) return $qrcode_info;
|
||||
//判断海报是否存在或停用
|
||||
// $site_model = new Site();
|
||||
// $condition = array (
|
||||
// [ "site_id", "=", $site_id ]
|
||||
// );
|
||||
// $site_info = $site_model->getSiteInfo($condition);
|
||||
if (!empty($qrcode_param[ 'source_member' ])) {
|
||||
$member_info = $this->getMemberInfo($qrcode_param[ 'source_member' ]);
|
||||
}
|
||||
|
||||
$poster_width = 720;
|
||||
$poster_height = 1280;
|
||||
$poster = new PosterExtend($poster_width, $poster_height);
|
||||
$option = [
|
||||
[
|
||||
'action' => 'imageCopy', // 背景图
|
||||
'data' => [
|
||||
img('upload/poster/bg/promotion_4.jpg'),
|
||||
0,
|
||||
0,
|
||||
720,
|
||||
1280,
|
||||
'square',
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageCopy', // 商品图
|
||||
'data' => [
|
||||
$card_info[ 'card_cover' ],
|
||||
100,
|
||||
300,
|
||||
520,
|
||||
310,
|
||||
'square',
|
||||
5,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageCopy', // 二维码
|
||||
'data' => [
|
||||
$qrcode_info[ 'data' ][ 'path' ],
|
||||
100,
|
||||
930,
|
||||
150,
|
||||
150,
|
||||
'square',
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入礼品卡名称
|
||||
'data' => [
|
||||
$card_info[ 'card_name' ],
|
||||
25,
|
||||
[34, 34, 34],
|
||||
100,
|
||||
660,
|
||||
540,
|
||||
2,
|
||||
true,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入祝福语
|
||||
'data' => [
|
||||
$card_info[ 'blessing' ],
|
||||
22,
|
||||
[255, 0, 0],
|
||||
150,
|
||||
800,
|
||||
480,
|
||||
1,
|
||||
false,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入固定文字
|
||||
'data' => [
|
||||
'扫码查看礼品详情',
|
||||
22,
|
||||
[51, 51, 51],
|
||||
290,
|
||||
1000,
|
||||
548,
|
||||
1,
|
||||
true,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入有效期
|
||||
'data' => [
|
||||
'有效期:' . ($card_info[ 'valid_time' ] > 0 ? time_to_date($card_info[ 'valid_time' ]) : '永久有效'),
|
||||
18,
|
||||
[51, 51, 51],
|
||||
290,
|
||||
1060,
|
||||
548,
|
||||
1,
|
||||
false,
|
||||
1
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
if (!empty($member_info)) {
|
||||
$member_option = [
|
||||
[
|
||||
'action' => 'imageCircularCopy', // 写入用户头像
|
||||
'data' => [
|
||||
!empty($member_info[ 'headimg' ]) ? $member_info[ 'headimg' ] : 'public/static/img/default_img/head.png',
|
||||
86,
|
||||
90,
|
||||
101,
|
||||
101
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入分享人昵称
|
||||
'data' => [
|
||||
$member_info[ 'nickname' ],
|
||||
28,
|
||||
[255, 255, 255],
|
||||
210,
|
||||
135,
|
||||
420,
|
||||
1,
|
||||
true,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText',
|
||||
'data' => [
|
||||
'送给您一张礼品卡',
|
||||
22,
|
||||
[255, 255, 255],
|
||||
200,
|
||||
185,
|
||||
430,
|
||||
1,
|
||||
0,
|
||||
1
|
||||
]
|
||||
]
|
||||
];
|
||||
$option = array_merge($option, $member_option);
|
||||
}
|
||||
|
||||
$option_res = $poster->create($option);
|
||||
if (is_array($option_res)) return $option_res;
|
||||
|
||||
$res = $option_res->jpeg('upload/poster/goods', 'goods_' . $promotion_type . '_' . $card_info[ 'no' ] . '_' . $qrcode_param[ 'source_member' ] . '_' . time() . '_' . $app_type);
|
||||
if ($res[ 'code' ] == 0) {
|
||||
$upload = new Upload($site_id);
|
||||
$cloud_res = $upload->fileCloud($res[ 'data' ][ 'path' ]);
|
||||
if ($cloud_res[ 'code' ] >= 0) {
|
||||
return $this->success(["path" => $cloud_res[ 'data' ]]);
|
||||
} else {
|
||||
return $this->error();
|
||||
}
|
||||
}
|
||||
return $res;
|
||||
} catch (\Exception $e) {
|
||||
return $this->error($e->getMessage() . $e->getFile() . $e->getLine());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
* @param $member_id
|
||||
* @return mixed
|
||||
*/
|
||||
private function getMemberInfo($member_id)
|
||||
{
|
||||
$info = model('member')->getInfo(['member_id' => $member_id], 'nickname,headimg');
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取二维码
|
||||
* @param unknown $app_type 请求类型
|
||||
* @param unknown $page uniapp页面路径
|
||||
* @param unknown $qrcode_param 二维码携带参数
|
||||
* @param string $promotion_type 活动类型 null为无活动
|
||||
*/
|
||||
private function getQrcode($app_type, $page, $qrcode_param, $promotion_type, $site_id)
|
||||
{
|
||||
$res = event('Qrcode', [
|
||||
'site_id' => $site_id,
|
||||
'app_type' => $app_type,
|
||||
'type' => 'create',
|
||||
'data' => $qrcode_param,
|
||||
'page' => $page,
|
||||
'qrcode_path' => 'upload/qrcode/goods',
|
||||
'qrcode_name' => 'goods_' . $promotion_type . '_' . $qrcode_param[ 'no' ] . '_' . $qrcode_param[ 'source_member' ] . '_' . $site_id,
|
||||
], true);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取海报信息
|
||||
* @param $template_id
|
||||
* @return mixed
|
||||
*/
|
||||
private function getTemplateInfo($template_id)
|
||||
{
|
||||
$info = model('poster_template')->getInfo(['template_id' => $template_id], 'template_id,template_status');
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除分享图片
|
||||
* @param int $pintuan_id
|
||||
*/
|
||||
public function clearShareImg(int $pintuan_id)
|
||||
{
|
||||
$dir = 'upload/share_img/pintuan_' . $pintuan_id;
|
||||
@deleteDir($dir);
|
||||
}
|
||||
}
|
||||
177
addon/giftcard/model/order/GiftCardOrder.php
Executable file
177
addon/giftcard/model/order/GiftCardOrder.php
Executable file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
class GiftCardOrder extends BaseModel
|
||||
{
|
||||
|
||||
public $order_status_list = [
|
||||
'topay' => '待支付',
|
||||
'complete' => '已完成',
|
||||
'close' => '已关闭',
|
||||
];
|
||||
|
||||
public $pay_type = [
|
||||
'ONLINE_PAY' => '在线支付',
|
||||
'BALANCE' => '余额支付',
|
||||
'offlinepay' => '线下支付'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* 获取支付方式
|
||||
*/
|
||||
public function getPayType()
|
||||
{
|
||||
//获取订单基础的其他支付方式
|
||||
$pay_type = $this->pay_type;
|
||||
//获取当前所有在线支付方式
|
||||
$onlinepay = event('PayType', []);
|
||||
if (!empty($onlinepay)) {
|
||||
foreach ($onlinepay as $k => $v) {
|
||||
$pay_type[ $v[ 'pay_type' ] ] = $v[ 'pay_type_name' ];
|
||||
}
|
||||
}
|
||||
return $pay_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_order')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderSum($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_order')->getSum($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_order')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = model('giftcard_order')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情分页列表
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = $this->getOrderPageList($condition, $page, $page_size, $order, $field, $alias, $join)[ 'data' ] ?? [];
|
||||
if (!empty($list[ 'list' ])) {
|
||||
$order_id_array = [];
|
||||
foreach ($list['list'] as $k => $v){
|
||||
$order_id_array[] = $v['order_id'];
|
||||
}
|
||||
$order_ids = implode(',', $order_id_array);
|
||||
$order_goods_list = model('giftcard_order_goods')->getList( [['order_id', 'in', $order_ids]], '*');
|
||||
foreach ($list[ 'list' ] as $k => $v) {
|
||||
|
||||
foreach ($order_goods_list as $ck => $cv) {
|
||||
$order_goods_list[ $ck ][ 'num' ] = numberFormat($order_goods_list[ $ck ][ 'num' ]);
|
||||
if($v['order_id'] == $cv['order_id'])
|
||||
{
|
||||
$list[ 'list' ][ $k ][ 'order_goods_list' ][] = $cv;
|
||||
}
|
||||
}
|
||||
$list[ 'list' ][ $k ] = $this->tran($v);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderDetail($params)
|
||||
{
|
||||
$order_id = $params[ 'order_id' ];
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'go.order_id', '=', $order_id ]
|
||||
);
|
||||
if ($site_id > 0) $condition[] = [ 'go.site_id', '=', $site_id ];
|
||||
if ($member_id > 0) $condition[] = [ 'go.member_id', '=', $member_id ];
|
||||
|
||||
$order_info = $this->getOrderInfo($condition, 'go.*,m.nickname,m.headimg,m.mobile', 'go', [
|
||||
[ 'member m', 'go.member_id=m.member_id', 'left' ]
|
||||
])[ 'data' ] ?? [];
|
||||
if (empty($order_info))
|
||||
return $this->error();
|
||||
|
||||
$order_goods_model = new GiftCardOrderGoods();
|
||||
$condition = array (
|
||||
[ 'order_id', '=', $order_id ]
|
||||
);
|
||||
if ($site_id > 0) $condition[] = [ 'site_id', '=', $site_id ];
|
||||
if ($member_id > 0) $condition[] = [ 'member_id', '=', $member_id ];
|
||||
$order_goods_list = $order_goods_model->getOrderGoodsList($condition)[ 'data' ] ?? [];
|
||||
if (empty($order_goods_list))
|
||||
return $this->error();
|
||||
|
||||
$order_info[ 'order_goods_list' ] = $order_goods_list;
|
||||
$order_info = $this->tran($order_info);
|
||||
return $this->success($order_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据字段转化翻译
|
||||
* @param $data
|
||||
* @return mixed
|
||||
*/
|
||||
public function tran($data)
|
||||
{
|
||||
$order_status = $data[ 'order_status' ] ?? '';
|
||||
if (!empty($order_status)) {
|
||||
$data[ 'order_status_name' ] = $this->order_status_list[ $order_status ];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
281
addon/giftcard/model/order/GiftCardOrderCreate.php
Executable file
281
addon/giftcard/model/order/GiftCardOrderCreate.php
Executable file
@@ -0,0 +1,281 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use addon\giftcard\model\giftcard\Media;
|
||||
use app\model\BaseModel;
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use app\model\order\Config;
|
||||
use app\model\system\Cron;
|
||||
use app\model\system\Pay;
|
||||
use app\model\system\Site;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 礼品卡订单创建
|
||||
* Class GiftCardOrderCreate
|
||||
* @package addon\giftcard\model\order
|
||||
*/
|
||||
class GiftCardOrderCreate extends BaseModel
|
||||
{
|
||||
|
||||
public function create($params)
|
||||
{
|
||||
if(isset($params['num']) && $params['num'] === '') $params['num'] = 0;
|
||||
$calculate_result = $this->calculate($params);
|
||||
if ($calculate_result[ 'code' ] < 0)
|
||||
return $calculate_result;
|
||||
|
||||
$calculate_data = $calculate_result[ 'data' ];
|
||||
|
||||
$member_id = $calculate_data[ 'member_id' ];
|
||||
$site_id = $calculate_data[ 'site_id' ];
|
||||
$pay = new Pay();
|
||||
$out_trade_no = $pay->createOutTradeNo($member_id);
|
||||
$order_no = $this->createOrderNo($site_id, $member_id);
|
||||
|
||||
$site_info = $calculate_data[ 'site_info' ];
|
||||
$site_name = $site_info[ 'site_name' ];
|
||||
$card_right_type = $calculate_data[ 'card_right_type' ];
|
||||
$giftcard_info = $calculate_data[ 'giftcard_info' ];
|
||||
|
||||
$validity_type = $giftcard_info[ 'validity_type' ];
|
||||
$validity_time = $giftcard_info[ 'validity_time' ];
|
||||
$validity_day = $giftcard_info[ 'validity_day' ];
|
||||
$common_data = array (
|
||||
'order_no' => $order_no,
|
||||
'site_id' => $site_id,
|
||||
'site_name' => $site_name,
|
||||
'member_id' => $member_id,
|
||||
);
|
||||
$pay_money = $calculate_data[ 'pay_money' ];
|
||||
$order_name = $calculate_data[ 'order_name' ];
|
||||
$order_data = [
|
||||
'out_trade_no' => $out_trade_no,
|
||||
'order_from' => $calculate_data[ 'order_from' ],
|
||||
'order_from_name' => $calculate_data[ 'order_from_name' ],
|
||||
'order_status' => 'topay',
|
||||
'buyer_ip' => request()->ip(),
|
||||
'goods_money' => $calculate_data[ 'goods_money' ],
|
||||
'order_money' => $calculate_data[ 'order_money' ],
|
||||
'pay_money' => $calculate_data[ 'pay_money' ],
|
||||
'create_time' => time(),
|
||||
'order_name' => $order_name,
|
||||
// 'buyer_message' => $calculate_data['buyer_message'],
|
||||
'giftcard_id' => $calculate_data[ 'giftcard_id' ],
|
||||
'card_right_type' => $card_right_type,
|
||||
'card_cover' => $calculate_data[ 'card_cover' ],
|
||||
'is_allow_transfer' => $calculate_data[ 'is_allow_transfer' ],
|
||||
'media_id' => $calculate_data[ 'media_id' ],
|
||||
'card_price' => $calculate_data[ 'item_money' ],
|
||||
'validity_type' => $validity_type,
|
||||
'validity_time' => $validity_time,
|
||||
'validity_day' => $validity_day,
|
||||
'num' => $calculate_data[ 'num' ],
|
||||
'card_right_goods_type' => $giftcard_info[ 'card_right_goods_type' ],
|
||||
'card_right_goods_count' => $giftcard_info[ 'card_right_goods_count' ],
|
||||
];
|
||||
model('giftcard_order')->startTrans();
|
||||
//循环生成多个订单
|
||||
try {
|
||||
$order_id = model('giftcard_order')->add(array_merge($common_data, $order_data));
|
||||
$order_goods_list = $calculate_data[ 'order_goods_list' ];
|
||||
$order_goods_data_list = [];
|
||||
foreach ($order_goods_list as $k => $v) {
|
||||
$order_goods_data_list[] = array_merge($common_data, [
|
||||
'order_id' => $order_id,
|
||||
'sku_id' => $v[ 'sku_id' ],
|
||||
'sku_name' => $v[ 'sku_name' ],
|
||||
'sku_image' => $v[ 'sku_image' ],
|
||||
'sku_no' => $v[ 'sku_no' ] ?? '',
|
||||
'goods_id' => $v[ 'goods_id' ] ?? 0,
|
||||
'goods_name' => $v[ 'goods_name' ] ?? '',
|
||||
'goods_class' => $v[ 'goods_class' ] ?? '',
|
||||
'goods_class_name' => $v[ 'goods_class_name' ] ?? '',
|
||||
'price' => $v[ 'price' ],
|
||||
'num' => $v[ 'num' ],
|
||||
'card_right_type' => $card_right_type,
|
||||
'goods_money' => $v[ 'goods_money' ],
|
||||
'balance' => $v[ 'balance' ] ?? 0,
|
||||
'total_balance' => $v[ 'total_balance' ] ?? 0,
|
||||
]);
|
||||
}
|
||||
model('giftcard_order_goods')->addList($order_goods_data_list);
|
||||
//生成整体付费支付单据
|
||||
$pay_model = new Pay();
|
||||
$res = $pay_model->addPay($site_id, $out_trade_no, 'ONLINE_PAY', $order_name, $order_name, $pay_money, '', 'GiftCardOrderPayNotify', '/pages_promotion/giftcard/order_detail?order_id=' . $order_id, $order_id, $member_id);
|
||||
if($res['code'] < 0){
|
||||
model('giftcard_order')->rollback();
|
||||
return $res;
|
||||
}
|
||||
|
||||
$config_model = new Config();
|
||||
$order_config = $config_model->getOrderEventTimeConfig($site_id)[ 'data' ];
|
||||
if ($order_config[ 'value' ][ 'auto_close' ] > 0) {
|
||||
$now_time = time();
|
||||
$execute_time = $now_time + $order_config[ 'value' ][ 'auto_close' ] * 60; //自动关闭时间
|
||||
$cron_model = new Cron();
|
||||
$cron_model->addCron(1, 0, '订单自动关闭', 'GiftCardOrderClose', $execute_time, $order_id);
|
||||
}
|
||||
|
||||
model('giftcard_order')->commit();
|
||||
return $this->success($out_trade_no);
|
||||
} catch (\Exception $e) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function calculate($params)
|
||||
{
|
||||
if(isset($params['num']) && $params['num'] === '') $params['num'] = 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ] ?? 0;
|
||||
$site_id = $params[ 'site_id' ];
|
||||
|
||||
$site_result = $this->initSite($params);
|
||||
if ($site_result[ 'code' ] < 0)
|
||||
return $site_result;
|
||||
|
||||
$params = $site_result[ 'data' ];
|
||||
$num = $params[ 'num' ] ?? 1;
|
||||
$item_result = $this->itemCalculate($params);
|
||||
if ($item_result[ 'code' ] < 0)
|
||||
return $item_result;
|
||||
|
||||
$params = $item_result[ 'data' ];
|
||||
$goods_money = $params[ 'goods_money' ];
|
||||
$total_money = $params[ 'giftcard_info' ][ 'card_price' ] * $num;
|
||||
$order_money = $total_money;
|
||||
$pay_money = $order_money;
|
||||
$params[ 'goods_money' ] = $total_money;
|
||||
$params[ 'order_money' ] = $order_money;
|
||||
$params[ 'pay_money' ] = $pay_money;
|
||||
$params[ 'item_money' ] = $params[ 'giftcard_info' ][ 'card_price' ];
|
||||
|
||||
return $this->success($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单项计算
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function itemCalculate($params)
|
||||
{
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$media_id = $params[ 'media_id' ];
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$info = $giftcard_model->getGiftcardDetail([ 'site_id' => $site_id, 'giftcard_id' => $giftcard_id ])[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error([], '当前礼品卡活动不存在');
|
||||
|
||||
if ($info[ 'status' ] != 1)
|
||||
return $this->error([], '当前礼品卡活动已下架');
|
||||
|
||||
$params[ 'giftcard_info' ] = $info;
|
||||
$media_model = new Media();
|
||||
$media_condition = array (
|
||||
[ 'media_id', '=', $media_id ],
|
||||
);
|
||||
$media_info = $media_model->getInfo($media_condition)[ 'data' ] ?? [];
|
||||
if (empty($media_info))
|
||||
return $this->error([], '封面图不存在');
|
||||
|
||||
$card_cover = $media_info[ 'media_path' ];
|
||||
$params[ 'card_cover' ] = $card_cover;
|
||||
$card_name = $info[ 'card_name' ];
|
||||
$params[ 'order_name' ] = $card_name;
|
||||
$goods_money = 0;
|
||||
$card_right_type = $info[ 'card_right_type' ];//卡券类型
|
||||
$params[ 'card_right_type' ] = $card_right_type;
|
||||
$params[ 'is_allow_transfer' ] = $info[ 'is_allow_transfer' ];
|
||||
$goods_item_list = [];
|
||||
switch ( $card_right_type ) {
|
||||
case 'goods'://商品
|
||||
$goods_list = $info[ 'goods_list' ];
|
||||
foreach ($goods_list as $v) {
|
||||
$item_sku_id = $v[ 'sku_id' ];
|
||||
$item_num = $v[ 'goods_num' ];
|
||||
$goods_id = $v[ 'goods_id' ];
|
||||
$item_goods_price = $v[ 'goods_price' ];
|
||||
$item_goods_money = $item_goods_price * $item_num;
|
||||
$goods_item_list[] = [
|
||||
'sku_id' => $item_sku_id,
|
||||
'goods_id' => $goods_id,
|
||||
'price' => $item_goods_price,
|
||||
'goods_money' => $item_goods_money,
|
||||
'num' => $item_num,
|
||||
'sku_name' => $v[ 'sku_info' ][ 'sku_name' ],
|
||||
'sku_image' => $v[ 'sku_info' ][ 'sku_image' ],
|
||||
'sku_no' => $v[ 'sku_info' ][ 'sku_no' ],
|
||||
'goods_class' => $v[ 'sku_info' ][ 'goods_class' ],
|
||||
'goods_class_name' => $v[ 'sku_info' ][ 'goods_class_name' ],
|
||||
'goods_name' => $v[ 'sku_info' ][ 'goods_name' ],
|
||||
];
|
||||
$goods_money = $info[ 'card_price' ];
|
||||
}
|
||||
break;
|
||||
case 'balance'://储值
|
||||
$num = 1;
|
||||
$item_goods_price = $info[ 'card_price' ];
|
||||
$item_goods_money = $item_goods_price * $num;
|
||||
$item_sku_name = $info[ 'balance' ] . '元储值卡';
|
||||
$item_sku_image = $card_cover;
|
||||
$balance = $info[ 'balance' ];
|
||||
$total_balance = $balance * $num;
|
||||
$goods_item_list[] = [
|
||||
'sku_id' => $giftcard_id,
|
||||
'price' => $item_goods_price,
|
||||
'goods_money' => $item_goods_money,
|
||||
'num' => $num,
|
||||
'sku_name' => $item_sku_name,
|
||||
'sku_image' => $item_sku_image,
|
||||
'goods_name' => $card_name,
|
||||
'balance' => $balance,
|
||||
'total_balance' => $total_balance
|
||||
];
|
||||
$goods_money += $item_goods_money;
|
||||
break;
|
||||
}
|
||||
$params[ 'order_goods_list' ] = $goods_item_list;
|
||||
$params[ 'goods_money' ] = $goods_money;
|
||||
return $this->success($params);
|
||||
}
|
||||
|
||||
|
||||
public function initSite($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$site_model = new Site();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $site_id ]
|
||||
);
|
||||
$site_info = $site_model->getSiteInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($site_info))
|
||||
return $this->error();
|
||||
$params[ 'site_info' ] = $site_info;
|
||||
return $this->success($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成订单编号
|
||||
* @param $site_id
|
||||
* @param int $member_id
|
||||
* @return string
|
||||
*/
|
||||
public function createOrderNo($site_id, $member_id = 0)
|
||||
{
|
||||
$time_str = date('YmdHi');
|
||||
$max_no = Cache::get($site_id . '_' . $member_id . '_' . $time_str);
|
||||
if (empty($max_no)) {
|
||||
$max_no = 1;
|
||||
} else {
|
||||
$max_no = $max_no + 1;
|
||||
}
|
||||
$order_no = $time_str . sprintf('%05d', $member_id) . sprintf('%03d', $max_no);
|
||||
Cache::set($site_id . '_' . $member_id . '_' . $time_str, $max_no);
|
||||
return $order_no;
|
||||
}
|
||||
}
|
||||
54
addon/giftcard/model/order/GiftCardOrderGoods.php
Executable file
54
addon/giftcard/model/order/GiftCardOrderGoods.php
Executable file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
|
||||
class GiftCardOrderGoods extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单项信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_order_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单项列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderGoodsList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_order_goods')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单项分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_order_goods')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
161
addon/giftcard/model/order/GiftCardOrderOperation.php
Executable file
161
addon/giftcard/model/order/GiftCardOrderOperation.php
Executable file
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use addon\giftcard\model\card\VirtualCard;
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use app\dict\member_account\AccountDict;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\MemberAccount;
|
||||
use app\model\system\Pay;
|
||||
use app\model\system\Stat;
|
||||
|
||||
class GiftCardOrderOperation extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 只涉及订单业务交互
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function orderPay($params)
|
||||
{
|
||||
$out_trade_no = $params[ 'out_trade_no' ];
|
||||
$order_model = new GiftCardOrder();
|
||||
$order_condition = array (
|
||||
[ 'out_trade_no', '=', $out_trade_no ]
|
||||
);
|
||||
$order_info = $order_model->getOrderInfo($order_condition)[ 'data' ] ?? [];
|
||||
if (empty($order_info))
|
||||
return $this->error();
|
||||
|
||||
$giftcard_id = $order_info[ 'giftcard_id' ];
|
||||
$num = $order_info[ 'num' ];//礼品卡套数
|
||||
$order_goods_model = new GiftCardOrderGoods();
|
||||
$order_goods_list = $order_goods_model->getOrderGoodsList([ [ 'order_id', '=', $order_info[ 'order_id' ] ] ])[ 'data' ] ?? [];
|
||||
$total_balance = 0;
|
||||
foreach ($order_goods_list as $k => $v) {
|
||||
$total_balance += $v[ 'total_balance' ];
|
||||
}
|
||||
|
||||
//订单支付后生成礼品卡
|
||||
$virtual_card_model = new VirtualCard();
|
||||
$order_info[ 'source' ] = 'order';
|
||||
$order_info[ 'goods_list' ] = $order_goods_list;
|
||||
$order_info[ 'balance' ] = $total_balance;
|
||||
$temp_num = 0;
|
||||
model('giftcard_order')->startTrans();
|
||||
try {
|
||||
while ($temp_num < $num) {
|
||||
$virtual_card_model->addCard($order_info);
|
||||
$temp_num++;
|
||||
}
|
||||
$pay_type = $params[ 'pay_type' ];
|
||||
//订单相关操作(业务复杂后会拆开步骤)
|
||||
$pay_type_list = $order_model->getPayType();
|
||||
$data = array (
|
||||
'order_status' => 'complete',
|
||||
'pay_status' => 1,
|
||||
'pay_time' => time(),
|
||||
'pay_type' => $pay_type,
|
||||
'pay_type_name' => $pay_type_list[ $pay_type ]
|
||||
);
|
||||
model('giftcard_order')->update($data, $order_condition);
|
||||
//可能是消费奖励
|
||||
event('GiftCardOrderPay', $order_info);
|
||||
|
||||
//业务和支付的融合
|
||||
$pay_money = new Pay();
|
||||
$pay_info = $pay_money->getPayInfo($out_trade_no)[ 'data' ] ?? [];
|
||||
if (!empty($pay_info)) {
|
||||
$balance = $pay_info[ 'balance' ];
|
||||
$balance_money = $pay_info[ 'balance_money' ];
|
||||
$member_account_model = new MemberAccount();
|
||||
if ($balance > 0) {
|
||||
$use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], AccountDict::balance, -$balance, 'order', $order_info[ 'order_id' ], '订单消费扣除');
|
||||
if ($use_res[ 'code' ] != 0) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $use_res;
|
||||
}
|
||||
}
|
||||
if ($balance_money > 0) {
|
||||
$use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'balance_money', -$balance_money, 'order', $order_info[ 'order_id' ], '订单消费扣除');
|
||||
if ($use_res[ 'code' ] != 0) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $use_res;
|
||||
}
|
||||
}
|
||||
}
|
||||
model('giftcard_order')->commit();
|
||||
//活动增加销量
|
||||
( new CardStat() )->stat([ 'stat_type' => 'sale', 'giftcard_id' => $giftcard_id, 'num' => $num ]);
|
||||
$stat_model = new Stat();
|
||||
$stat_model->switchStat([ 'type' => 'gift_card_order', 'data' => [ 'order_id' => $order_info[ 'order_id' ], 'site_id' => $order_info[ 'site_id' ] ] ]);
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除礼品卡订单(伪删除)
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($condition)
|
||||
{
|
||||
model('giftcard_order')->update([ 'is_delete' => 1 ], $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单关闭
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function close($params)
|
||||
{
|
||||
$order_id = $params[ 'order_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$close_cause = $params[ 'close_cause' ] ?? '长时间未支付,订单自动关闭';
|
||||
$condition = array (
|
||||
[ 'order_id', '=', $order_id ],
|
||||
[ 'order_status', '=', 'topay' ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$order_model = new GiftCardOrder();
|
||||
$info = $order_model->getOrderInfo($condition, 'order_status, out_trade_no, pay_status')[ 'data' ] ?? [];
|
||||
if (empty($info)) {
|
||||
return $this->error([], '订单不存在');
|
||||
}
|
||||
|
||||
if ($info[ 'order_status' ] != 'topay') {
|
||||
return $this->error([], '订单不是待支付状态');
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'order_status' => 'close',
|
||||
'close_time' => time(),
|
||||
);
|
||||
if (!empty($close_cause)) {
|
||||
$data[ 'close_cause' ] = $close_cause;
|
||||
}
|
||||
//关闭支付单据(没支付的话)
|
||||
if ($info[ 'pay_status' ] == 0) {
|
||||
$pay_model = new Pay();
|
||||
$pay_result = $pay_model->closePay($info[ 'out_trade_no' ]);
|
||||
if ($pay_result[ 'code' ] < 0) {
|
||||
return $pay_result;
|
||||
}
|
||||
}
|
||||
model('giftcard_order')->update($data, $condition);
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
}
|
||||
42
addon/giftcard/model/order/GiftCardOrderPay.php
Executable file
42
addon/giftcard/model/order/GiftCardOrderPay.php
Executable file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use app\model\BaseModel;
|
||||
use app\model\system\Pay;
|
||||
|
||||
class GiftCardOrderPay extends BaseModel
|
||||
{
|
||||
|
||||
public function resetPay($params)
|
||||
{
|
||||
$out_trade_no = $params[ 'out_trade_no' ];
|
||||
$order_condition = array (
|
||||
[ 'pay_status', '=', 0 ],
|
||||
[ 'out_trade_no', '=', $out_trade_no ]
|
||||
);
|
||||
$order_condition[] = [ 'out_trade_no', '=', $out_trade_no ];
|
||||
$giftcard_order_model = new GiftCardOrder();
|
||||
$order_info = $giftcard_order_model->getOrderInfo($order_condition, 'pay_money,site_id,member_id');
|
||||
if (empty($order_info))
|
||||
return $this->error([], '没有可支付订单!');
|
||||
|
||||
$pay_money = $order_info[ 'pay_money' ];
|
||||
$site_id = $order_info[ 'site_id' ];
|
||||
|
||||
$pay_model = new Pay();
|
||||
$result = $pay_model->closePay($out_trade_no);//关闭旧支付单据
|
||||
if ($result[ 'code' ] < 0) {
|
||||
return $result;
|
||||
}
|
||||
$member_id = $order_info[ 'member_id' ];
|
||||
$new_out_trade_no = $pay_model->createOutTradeNo($member_id ?? 0);
|
||||
$update_data = array (
|
||||
'out_trade_no' => $new_out_trade_no
|
||||
);
|
||||
model('giftcard_order')->update($update_data, $order_condition);
|
||||
$result = $pay_model->addPay($site_id, $new_out_trade_no, '', $params[ 'pay_body' ], $params[ 'pay_detail' ], $pay_money, '', 'GiftCardOrderPayNotify', '', $order_info['order_id'], $order_info['member_id']);
|
||||
return $this->success($new_out_trade_no);
|
||||
}
|
||||
}
|
||||
356
addon/giftcard/model/ordercreate/GiftcardOrderCreate.php
Executable file
356
addon/giftcard/model/ordercreate/GiftcardOrderCreate.php
Executable file
@@ -0,0 +1,356 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\ordercreate;
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\card\CardOperation;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\order\Config;
|
||||
use app\model\order\OrderCreate;
|
||||
use app\model\order\OrderCreateTool;
|
||||
use app\model\store\Store;
|
||||
use app\model\express\Express;
|
||||
use app\model\system\Pay;
|
||||
use app\model\express\Config as ExpressConfig;
|
||||
use app\model\express\Local;
|
||||
use extend\exception\OrderException;
|
||||
|
||||
/**
|
||||
* 订单创建(礼品卡)
|
||||
*/
|
||||
class GiftcardOrderCreate extends BaseModel
|
||||
{
|
||||
|
||||
use OrderCreateTool;
|
||||
|
||||
public $cart_id = 0;
|
||||
public $member_card_id = 0;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->promotion_type = 'giftcard';
|
||||
$this->promotion_type_name = '礼品卡';
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//计算
|
||||
$this->confirm();
|
||||
if ($this->error > 0) {
|
||||
return $this->error([ 'error_code' => $this->error ], $this->error_msg);
|
||||
}
|
||||
//订单创建数据
|
||||
$order_insert_data = $this->getOrderInsertData([ 'discount' ], 'invert');
|
||||
$order_insert_data[ 'store_id' ] = $this->store_id;
|
||||
$order_insert_data[ 'create_time' ] = time();
|
||||
$order_insert_data[ 'is_enable_refund' ] = 0;
|
||||
//订单类型以及状态
|
||||
$this->orderType();
|
||||
$order_insert_data[ 'order_type' ] = $this->order_type[ 'order_type_id' ];
|
||||
$order_insert_data[ 'order_type_name' ] = $this->order_type[ 'order_type_name' ];
|
||||
$order_insert_data[ 'order_status_name' ] = $this->order_type[ 'order_status' ][ 'name' ];
|
||||
$order_insert_data[ 'order_status_action' ] = json_encode($this->order_type[ 'order_status' ], JSON_UNESCAPED_UNICODE);
|
||||
model('order')->startTrans();
|
||||
//循环生成多个订单
|
||||
try {
|
||||
|
||||
|
||||
$this->order_id = model('order')->add($order_insert_data);
|
||||
|
||||
$order_goods_insert_data = [];
|
||||
//订单项目表
|
||||
foreach ($this->goods_list as &$order_goods_v) {
|
||||
$order_goods_insert_data[] = $this->getOrderGoodsInsertData($order_goods_v);
|
||||
}
|
||||
model('order_goods')->addList($order_goods_insert_data);
|
||||
|
||||
$card_goods_json = [];
|
||||
foreach ($this->getOrderGoodsList() as $k => $v) {
|
||||
$goods_item = $this->goods_list[ $k ];
|
||||
$card_goods_json[] = [
|
||||
'order_goods_id' => $v[ 'order_goods_id' ],
|
||||
'card_goods_id' => $goods_item[ 'id' ],
|
||||
'num' => $v[ 'num' ],
|
||||
];
|
||||
}
|
||||
$card_use_params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'order_id' => $this->order_id,
|
||||
'member_id' => $this->member_id,
|
||||
'member_card_id' => $this->member_card_id,
|
||||
'card_goods_json' => $card_goods_json
|
||||
);
|
||||
$card_operation_model = new CardOperation();
|
||||
$use_res = $card_operation_model->cardUse($card_use_params);
|
||||
if($use_res['code'] < 0){
|
||||
model('order')->rollback();
|
||||
return $use_res;
|
||||
}
|
||||
|
||||
//批量库存处理(卡密商品支付后在扣出库存)//todo 可以再商品中设置扣除库存步骤
|
||||
$this->batchDecOrderGoodsStock();
|
||||
model('order')->commit();
|
||||
//订单创建后事件
|
||||
$this->orderCreateAfter();
|
||||
$pay = new Pay();
|
||||
//生成整体支付单据
|
||||
$pay_res = $pay->addPay($this->site_id, $this->out_trade_no, $this->pay_type, $this->order_name, $this->order_name, $this->pay_money, '', 'OrderPayNotify', '/pages/order/detail?order_id=' . $this->order_id, $this->order_id, $this->member_id);
|
||||
if($pay_res['code'] < 0){
|
||||
model('order')->rollback();
|
||||
return $pay_res;
|
||||
}
|
||||
|
||||
return $this->success($this->out_trade_no);
|
||||
} catch (\Exception $e) {
|
||||
model('order')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单计算
|
||||
*/
|
||||
public function calculate()
|
||||
{
|
||||
//初始化地址
|
||||
$this->initMemberAddress();
|
||||
//初始化会员账户
|
||||
$this->initMemberAccount();
|
||||
//商品列表信息
|
||||
$this->getOrderGoodsCalculate();
|
||||
//订单计算
|
||||
$this->shopOrderCalculate();
|
||||
//获取发票相关
|
||||
$this->getInovice();
|
||||
$this->order_key = create_no();
|
||||
$this->setOrderCache(get_object_vars($this), $this->order_key);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 待付款订单
|
||||
*/
|
||||
public function orderPayment()
|
||||
{
|
||||
$this->calculate();
|
||||
//查询配送信息
|
||||
$this->getDeliveryData();
|
||||
//订单初始项
|
||||
event('OrderPayment', [ 'order_object' => $this ]);
|
||||
return get_object_vars($this);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品的计算信息
|
||||
* @param unknown $data
|
||||
*/
|
||||
public function getOrderGoodsCalculate()
|
||||
{
|
||||
$this->getCardGoodsList();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取组合套餐商品列表信息
|
||||
*/
|
||||
public function getCardGoodsList()
|
||||
{
|
||||
$this->member_card_id = $this->param[ 'member_card_id' ];
|
||||
$member_card_model = new MemberCard();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'member_card_id', '=', $this->member_card_id ],
|
||||
[ 'member_id', '=', $this->member_id ]
|
||||
);
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info)) return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', $this->member_id ]
|
||||
);
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info)) throw new OrderException('当前礼品卡不存在或已被使用!');
|
||||
if ($card_info[ 'status' ] != 'to_use') throw new OrderException('当前礼品卡已被使用!');
|
||||
$goods_sku_list = $this->param[ 'goods_sku_list' ];
|
||||
//组装商品列表
|
||||
$field = ' gcg.total_num,gcg.id,gcg.sku_id, ngs.sku_name, ngs.sku_no,
|
||||
ngs.price, ngs.discount_price, ngs.cost_price, ngs.stock, ngs.weight, ngs.volume, ngs.sku_image,
|
||||
ngs.site_id, ngs.goods_state, ngs.is_virtual, ngs.supplier_id,ngs.form_id,
|
||||
ngs.is_free_shipping, ngs.shipping_template, ngs.goods_class, ngs.goods_class_name, ngs.goods_id, ns.site_name,ngs.sku_spec_format,ngs.goods_name,ngs.support_trade_type';
|
||||
$alias = 'gcg';
|
||||
$join = [
|
||||
[
|
||||
'goods_sku ngs',
|
||||
'gcg.sku_id = ngs.sku_id',
|
||||
'inner'
|
||||
],
|
||||
|
||||
[
|
||||
'site ns',
|
||||
'ngs.site_id = ns.site_id',
|
||||
'inner'
|
||||
]
|
||||
];
|
||||
$card_model = new Card();
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
$card_right_goods_type = $card_info[ 'card_right_goods_type' ];
|
||||
|
||||
$card_goods_list = $card_model->getCardGoodsList($condition, $field, '', null, $alias, $join)[ 'data' ] ?? [];
|
||||
$card_goods_list_column = array_column($card_goods_list, null, 'sku_id');
|
||||
|
||||
if (!empty($card_goods_list)) {
|
||||
if ($card_right_goods_type == 'item') {
|
||||
foreach ($card_goods_list as $v) {
|
||||
$this->is_virtual = $v[ 'is_virtual' ];
|
||||
$num = $v[ 'total_num' ];
|
||||
$v[ 'num' ] = $num;
|
||||
$price = $v[ 'discount_price' ];
|
||||
$v[ 'price' ] = $price;
|
||||
$goods_money = $price * $num;
|
||||
$v[ 'goods_money' ] = $goods_money;
|
||||
$promotion_money = 0;
|
||||
$v[ 'real_goods_money' ] = $goods_money;
|
||||
$v[ 'coupon_money' ] = 0;//优惠券金额
|
||||
$v[ 'promotion_money' ] = $promotion_money;//优惠金额
|
||||
|
||||
|
||||
$this->goods_list[] = $v;
|
||||
$order_name = $this->order_name ?? '';
|
||||
if ($order_name) {
|
||||
$len = strlen_mb($order_name);
|
||||
if ($len > 200) {
|
||||
$this->order_name = str_sub($order_name, 200);
|
||||
} else {
|
||||
$this->order_name = string_split($order_name, ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
} else {
|
||||
$this->order_name = string_split('', ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
$this->site_name = $v[ 'site_name' ];
|
||||
$this->goods_num += $v[ 'num' ];
|
||||
$this->goods_money += $v[ 'goods_money' ];
|
||||
//以;隔开的商品项
|
||||
$goods_list_str = $this->goods_list_str ?? '';
|
||||
if ($goods_list_str) {
|
||||
$this->goods_list_str = $goods_list_str . ';' . $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
} else {
|
||||
$this->goods_list_str = $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$sku_info = $card_goods_list_column[ $v[ 'sku_id' ] ] ?? [];
|
||||
$v = array_merge($v, $sku_info);
|
||||
$this->is_virtual = $v[ 'is_virtual' ];
|
||||
$price = $sku_info[ 'discount_price' ];
|
||||
$v[ 'price' ] = $price;
|
||||
$goods_money = $price * $v[ 'num' ];
|
||||
$v[ 'goods_money' ] = $goods_money;
|
||||
$promotion_money = 0;
|
||||
$v[ 'real_goods_money' ] = $goods_money;
|
||||
$v[ 'coupon_money' ] = 0;//优惠券金额
|
||||
$v[ 'promotion_money' ] = $promotion_money;//优惠金额
|
||||
|
||||
$this->goods_list[] = $v;
|
||||
$order_name = $this->order_name ?? '';
|
||||
if ($order_name) {
|
||||
$len = strlen_mb($order_name);
|
||||
if ($len > 200) {
|
||||
$this->order_name = str_sub($order_name, 200);
|
||||
} else {
|
||||
$this->order_name = string_split($order_name, ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
} else {
|
||||
$this->order_name = string_split('', ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
$this->site_name = $v[ 'site_name' ];
|
||||
$this->goods_num += $v[ 'num' ];
|
||||
$this->goods_money += $v[ 'goods_money' ];
|
||||
//以;隔开的商品项
|
||||
$goods_list_str = $this->goods_list_str ?? '';
|
||||
if ($goods_list_str) {
|
||||
$this->goods_list_str = $goods_list_str . ';' . $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
} else {
|
||||
$this->goods_list_str = $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取店铺订单计算
|
||||
*/
|
||||
public function shopOrderCalculate()
|
||||
{
|
||||
$promotion_money = 0;
|
||||
foreach ($this->goods_list as &$v) {
|
||||
$item_goods_money = $v[ 'goods_money' ];
|
||||
$item_promotion_money = $item_goods_money;
|
||||
$real_goods_money = $item_goods_money - $item_promotion_money;
|
||||
$v[ 'real_goods_money' ] = $real_goods_money;
|
||||
$v[ 'promotion_money' ] = $item_promotion_money;
|
||||
$promotion_money += $item_promotion_money;
|
||||
}
|
||||
$this->promotion_money = $promotion_money;
|
||||
$this->is_free_delivery = true;
|
||||
//重新计算订单总额
|
||||
$this->getOrderMoney();
|
||||
//理论上是多余的操作
|
||||
if ($this->order_money < 0) {
|
||||
$this->order_money = 0;
|
||||
}
|
||||
//总结计算
|
||||
$this->pay_money = $this->order_money;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算后的进一步计算(不存缓存,每次都是重新计算)
|
||||
* @return array
|
||||
*/
|
||||
public function confirm()
|
||||
{
|
||||
$order_key = $this->param[ 'order_key' ];
|
||||
$this->getOrderCache($order_key);
|
||||
//初始化地址
|
||||
$this->initMemberAddress();
|
||||
//初始化门店信息
|
||||
$this->initStore();
|
||||
//配送计算
|
||||
$this->calculateDelivery();
|
||||
//批量校验配送方式
|
||||
$this->batchCheckDeliveryType();
|
||||
//计算发票相关
|
||||
$this->calculateInvoice();
|
||||
//计算余额
|
||||
$this->calculateBalcnce();
|
||||
$this->pay_money = $this->order_money - $this->balance_money;
|
||||
//设置过的商品项信息
|
||||
return get_object_vars($this);
|
||||
}
|
||||
}
|
||||
137
addon/giftcard/model/share/WchatShare.php
Executable file
137
addon/giftcard/model/share/WchatShare.php
Executable file
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\share;
|
||||
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use app\model\share\WchatShareBase as BaseModel;
|
||||
use app\model\system\Config as ConfigModel;
|
||||
|
||||
/**
|
||||
* 分享
|
||||
*/
|
||||
class WchatShare extends BaseModel
|
||||
{
|
||||
protected $config = [
|
||||
[
|
||||
'title' => '礼品卡列表',
|
||||
'config_key' => 'WCHAT_SHARE_CONFIG_GIGTCARD_LIST_PROMOTE',
|
||||
'path' => [ '/pages_promotion/giftcard/index' ],
|
||||
'method_prefix' => 'goodsList',
|
||||
],
|
||||
[
|
||||
'title' => '礼品卡详情',
|
||||
'config_key' => 'WCHAT_SHARE_CONFIG_GIGTCARD_PROMOTE',
|
||||
'path' => [ '/pages_promotion/giftcard/card_info' ],
|
||||
'method_prefix' => 'goodsDetail',
|
||||
],
|
||||
];
|
||||
|
||||
protected $sort = 5;
|
||||
|
||||
/**
|
||||
* 礼品卡分享数据
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function goodsListShareData($param)
|
||||
{
|
||||
//跳转路径
|
||||
$link = $this->getShareLink($param);
|
||||
$config_data = $this->goodsListShareConfig($param)[ 'value' ];
|
||||
|
||||
$data = [
|
||||
'link' => $link,
|
||||
'desc' => $config_data[ 'desc' ],
|
||||
'imgUrl' => $config_data[ 'imgUrl' ],
|
||||
'title' => $config_data[ 'title' ]
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'hideOptionMenu' => false,
|
||||
'hideMenuItems' => [],
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡列表分享配置
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
public function goodsListShareConfig($param)
|
||||
{
|
||||
$site_id = $param[ 'site_id' ];
|
||||
$config = $param[ 'config' ];
|
||||
|
||||
$config_model = new ConfigModel();
|
||||
$data = $config_model->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', $config[ 'config_key' ] ] ])[ 'data' ];
|
||||
if (empty($data[ 'value' ])) {
|
||||
$data[ 'value' ] = [
|
||||
'title' => "礼品卡列表",
|
||||
'desc' => "购卡送好礼",
|
||||
'imgUrl' => ''
|
||||
];
|
||||
}
|
||||
if (empty($data[ 'value' ][ 'imgUrl' ])) {
|
||||
$data[ 'value' ][ 'imgUrl' ] = img('addon/giftcard/icon.png');
|
||||
}
|
||||
return [
|
||||
'value' => $data[ 'value' ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡分享数据
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function goodsDetailShareData($param)
|
||||
{
|
||||
$site_id = $param[ 'site_id' ] ?? 0;
|
||||
$url = $param[ 'url' ];
|
||||
|
||||
//跳转路径
|
||||
$parse_res = parse_url($url);
|
||||
parse_str($parse_res[ 'query' ] ?? '', $query);
|
||||
|
||||
if (isset($query[ 'id' ]) || isset($query[ 'giftcard_id' ])) {
|
||||
$giftcard_id = $query['id'] ?? $query['giftcard_id'];
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$field = 'id,card_name,selling_price,point,goods_ids,balance,card_count,max_buy,time_type,youxiao_time,youxiao_day,card_cover,site_id,is_balance';
|
||||
$sku_info = $giftcard_model->getGiftcardGoodsInfo([ [ 'site_id', '=', $site_id ], [ 'id', '=', $giftcard_id ] ], $field)[ 'data' ];
|
||||
if (!empty($sku_info)) {
|
||||
$config_model = new \app\model\share\WchatShare();
|
||||
$config_data = $config_model->goodsDetailShareConfig($param);
|
||||
|
||||
$title = str_replace('{goods_name}', $sku_info[ 'card_name' ], $config_data[ 'value' ][ 'title' ]);
|
||||
$desc = str_replace('{price}', $sku_info[ 'selling_price' ], $config_data[ 'value' ][ 'desc' ]);
|
||||
$link = $this->getShareLink($param);
|
||||
$image_url = $sku_info[ 'card_cover' ];
|
||||
|
||||
$data = [
|
||||
'title' => $title,
|
||||
'desc' => $desc,
|
||||
'link' => $link,
|
||||
'imgUrl' => $image_url,
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'hideOptionMenu' => false,
|
||||
'hideMenuItems' => [],
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
90
addon/giftcard/model/share/WeappShare.php
Executable file
90
addon/giftcard/model/share/WeappShare.php
Executable file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\share;
|
||||
|
||||
use app\model\share\WeappShareBase;
|
||||
use app\model\system\Config as ConfigModel;
|
||||
|
||||
/**
|
||||
* 分享
|
||||
*/
|
||||
class WeappShare extends WeappShareBase
|
||||
{
|
||||
protected $config = [
|
||||
[
|
||||
'title' => '礼品卡列表',
|
||||
'config_key' => 'WEAPP_SHARE_CONFIG_GIFTCARD_LIST',
|
||||
'path' => ['/pages_promotion/giftcard/index'],
|
||||
'method_prefix' => 'giftcardList',
|
||||
],
|
||||
];
|
||||
|
||||
protected $sort = 4;
|
||||
|
||||
/**
|
||||
* 礼品卡列表
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function giftcardListShareData($param)
|
||||
{
|
||||
//获取和替换配置数据
|
||||
$config_data = $this->giftcardListShareConfig($param);
|
||||
$title = $config_data['value']['title'];
|
||||
$image_url = $config_data['value']['imageUrl'] ? img($config_data['value']['imageUrl']) : '';
|
||||
$path = $this->getSharePath($param);
|
||||
|
||||
$data = [
|
||||
'title' => $title,
|
||||
'path' => $path,
|
||||
'imageUrl' => $image_url,
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'onShareAppMessage' => true,
|
||||
'onShareTimeline' => true,
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡列表
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function giftcardListShareConfig($param)
|
||||
{
|
||||
$site_id = $param['site_id'];
|
||||
$config = $param['config'];
|
||||
|
||||
$config_model = new ConfigModel();
|
||||
$data = $config_model->getConfig([
|
||||
['site_id', '=', $site_id],
|
||||
['app_module', '=', 'shop'],
|
||||
['config_key', '=', $config['config_key']],
|
||||
])['data'];
|
||||
if (empty($data['value'])) {
|
||||
$data['value'] = [
|
||||
'title' => '跟我一起来领礼品卡吧!',
|
||||
'imageUrl' => '',
|
||||
];
|
||||
}
|
||||
$variable = [];
|
||||
|
||||
return [
|
||||
'value' => $data['value'],
|
||||
'variable' => $variable,
|
||||
];
|
||||
}
|
||||
}
|
||||
180
addon/giftcard/model/transfer/Blessing.php
Executable file
180
addon/giftcard/model/transfer/Blessing.php
Executable file
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\transfer;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
|
||||
|
||||
class Blessing extends BaseModel
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* 祝福语
|
||||
*/
|
||||
public function blessing($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$condition = array (
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'member_card_id', '=', $member_card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
|
||||
$is_transfer = $member_card_info[ 'is_transfer' ];
|
||||
if ($is_transfer == 1)
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
$blessing_id = model('giftcard_card_blessing')->update([ 'status' => 1 ], $condition);
|
||||
|
||||
$site_id = $member_card_info[ 'site_id' ];
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
$code = substr(md5(microtime(true) . $blessing_id), 0, 6);
|
||||
$data = array (
|
||||
'blessing' => $params[ 'blessing' ],
|
||||
'member_id' => $member_id,
|
||||
'member_card_id' => $member_card_id,
|
||||
'site_id' => $site_id,
|
||||
'card_id' => $card_id,
|
||||
'create_time' => time(),
|
||||
'no' => $code
|
||||
);
|
||||
model('giftcard_card_blessing')->add($data);
|
||||
return $this->success($code);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 使祝福语失效
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function blessingToVoid($condition)
|
||||
{
|
||||
model('giftcard_card_blessing')->update([ 'status' => 1 ], $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 祝福语详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getBlessingDetail($params)
|
||||
{
|
||||
$no = $params[ 'no' ] ?? '';
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$blessing_id = $params[ 'blessing_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'no', '=', $no ]
|
||||
);
|
||||
if ($blessing_id > 0) {
|
||||
$condition[] = [ 'blessing_id', '=', $blessing_id ];
|
||||
}
|
||||
if (!empty($code)) {
|
||||
$condition[] = [ 'code', '=', $code ];
|
||||
}
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$info = model('giftcard_card_blessing')->getInfo($condition);
|
||||
if (empty($info))
|
||||
return $this->error([], '礼品卡祝福不存在或已失效');
|
||||
|
||||
$member_model = new Member();
|
||||
if ($info[ 'to_member_id' ] > 0) {
|
||||
$to_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'to_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'to_member_nickname' ] = $to_member_info[ 'nickname' ];
|
||||
$info[ 'to_member_headimg' ] = $to_member_info[ 'headimg' ];
|
||||
}
|
||||
|
||||
if ($info[ 'member_id' ] > 0) {
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'member_nickname' ] = $member_info[ 'nickname' ];
|
||||
$info[ 'member_headimg' ] = $member_info[ 'headimg' ];
|
||||
}
|
||||
$info[ 'is_self' ] = $member_id == $info[ 'member_id' ] ? 1 : 0;
|
||||
$card_id = $info[ 'card_id' ];
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardDetail([ 'card_id' => $card_id ])[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '礼品卡祝福不存在或已失效');
|
||||
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_info = $member_card_model->getMemberCardInfo([ [ 'member_card_id', '=', $info[ 'member_card_id' ] ] ])[ 'data' ] ?? [];
|
||||
$info[ 'is_transfer' ] = $member_card_info[ 'is_transfer' ];
|
||||
return $this->success(array_merge($card_info, $info));
|
||||
}
|
||||
|
||||
|
||||
public function setBlessingToMember($params)
|
||||
{
|
||||
$blessing_id = $params[ 'blessing_id' ] ?? 0;
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$to_member_id = $params[ 'to_member_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'blessing_id', '=', $blessing_id ]
|
||||
);
|
||||
$data = array (
|
||||
'to_member_id' => $to_member_id,
|
||||
'to_time' => time(),
|
||||
'status' => 2
|
||||
);
|
||||
model('giftcard_card_blessing')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡祝福信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardBlessingInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_blessing')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡祝福列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardBlessingList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_blessing')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡祝福分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardBlessingPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_blessing')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
}
|
||||
113
addon/giftcard/model/transfer/Transfer.php
Executable file
113
addon/giftcard/model/transfer/Transfer.php
Executable file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\transfer;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\card\CardLog;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
|
||||
|
||||
class Transfer extends BaseModel
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* 赠送后的操作
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function transfer($params)
|
||||
{
|
||||
$blessing_id = $params[ 'blessing_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$blessing_model = new Blessing();
|
||||
$blessing_condition = array (
|
||||
[ 'blessing_id', '=', $blessing_id ],
|
||||
[ 'status', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$blessing_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$blessing_info = $blessing_model->getMemberCardBlessingInfo($blessing_condition)[ 'data' ] ?? [];
|
||||
if (empty($blessing_info))
|
||||
return $this->error([], '礼品卡祝福已被领取或已失效');
|
||||
|
||||
//todo 后续必然增加队列控制
|
||||
$member_card_id = $blessing_info[ 'member_card_id' ];
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ],
|
||||
[ 'is_transfer', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$member_card_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($member_card_condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$from_member_id = $member_card_info[ 'member_id' ];
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', $from_member_id ]
|
||||
);
|
||||
if ($from_member_id == $member_id)
|
||||
return $this->error([], '不能自己领取自己的礼品卡!');
|
||||
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$is_allow_transfer = $card_info[ 'is_allow_transfer' ];
|
||||
if ($is_allow_transfer == 0)
|
||||
return $this->error([], '当前礼品卡不允许转赠!');
|
||||
|
||||
if ($card_info[ 'status' ] != 'to_use')
|
||||
return $this->error([], '只有待使用的礼品卡才允许转赠!');
|
||||
|
||||
//将原所属者改变
|
||||
$transfer_params = array (
|
||||
'card_id' => $card_id,
|
||||
'member_id' => $from_member_id,
|
||||
'to_member_id' => $member_id,
|
||||
'member_card_id' => $member_card_id
|
||||
);
|
||||
$result = $member_card_model->memberCardTransfer($transfer_params);
|
||||
if ($result[ 'code' ] < 0)
|
||||
return $result;
|
||||
|
||||
$set_params = array (
|
||||
'blessing_id' => $blessing_id,
|
||||
'to_member_id' => $member_id
|
||||
);
|
||||
$result = $blessing_model->setBlessingToMember($set_params);
|
||||
if ($result[ 'code' ] < 0)
|
||||
return $result;
|
||||
|
||||
$card_params = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'from_member_id' => $from_member_id,
|
||||
'member_id' => $member_id,
|
||||
'card_id' => $card_id,
|
||||
'source' => 'gift',
|
||||
);
|
||||
$result = $member_card_model->addMemberCard($card_params);
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type' => 'transfer',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $member_id,
|
||||
'type_id' => $result[ 'data' ]
|
||||
]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user