|
@@ -8,11 +8,13 @@ use app\controller\Curd;
|
|
|
use app\model\Coupon;
|
|
|
use app\model\CouponGoods;
|
|
|
use app\model\Device;
|
|
|
+use app\model\Member;
|
|
|
use app\model\SysSerial;
|
|
|
use support\Db;
|
|
|
use support\exception\BusinessException;
|
|
|
use support\Request;
|
|
|
use support\Response;
|
|
|
+use Tinywan\Jwt\JwtToken;
|
|
|
|
|
|
class CouponController extends Curd
|
|
|
{
|
|
@@ -41,6 +43,48 @@ class CouponController extends Curd
|
|
|
return $this->doFormat($query, $format, $limit);
|
|
|
}
|
|
|
|
|
|
+ protected function doSelect(array $where, string $field = null, string $order = 'desc')
|
|
|
+ {
|
|
|
+ $model = $this->model->with([
|
|
|
+ 'category' => function ($query) {
|
|
|
+ $query->select('category_id', 'category_name');
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ foreach ($where as $column => $value) {
|
|
|
+ if (is_array($value)) {
|
|
|
+ if ($value[0] === 'like' || $value[0] === 'not like') {
|
|
|
+ $model = $model->where($column, $value[0], "%$value[1]%");
|
|
|
+ } elseif (in_array($value[0], ['>', '=', '<', '<>'])) {
|
|
|
+ $model = $model->where($column, $value[0], $value[1]);
|
|
|
+ } elseif ($value[0] == 'in' && !empty($value[1])) {
|
|
|
+ $valArr = $value[1];
|
|
|
+ if (is_string($value[1])) {
|
|
|
+ $valArr = explode(",", trim($value[1]));
|
|
|
+ }
|
|
|
+ $model = $model->whereIn($column, $valArr);
|
|
|
+ } elseif ($value[0] == 'not in' && !empty($value[1])) {
|
|
|
+ $valArr = $value[1];
|
|
|
+ if (is_string($value[1])) {
|
|
|
+ $valArr = explode(",", trim($value[1]));
|
|
|
+ }
|
|
|
+ $model = $model->whereNotIn($column, $valArr);
|
|
|
+ } elseif ($value[0] == 'null') {
|
|
|
+ $model = $model->whereNull($column);
|
|
|
+ } elseif ($value[0] == 'not null') {
|
|
|
+ $model = $model->whereNotNull($column);
|
|
|
+ } elseif ($value[0] !== '' || $value[1] !== '') {
|
|
|
+ $model = $model->whereBetween($column, $value);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $model = $model->where($column, $value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($field) {
|
|
|
+ $model = $model->orderBy($field, $order);
|
|
|
+ }
|
|
|
+ return $model;
|
|
|
+ }
|
|
|
+
|
|
|
protected function afterQuery($items)
|
|
|
{
|
|
|
foreach ($items as &$item) {
|
|
@@ -50,8 +94,7 @@ class CouponController extends Curd
|
|
|
if (isset($couponJson['member']['list']) && !empty($couponJson['member']['list'])) {
|
|
|
$item['coupon_use_member'] = 'member';
|
|
|
$item['memberList'] = $couponJson['member']['list'];
|
|
|
- }
|
|
|
- if (isset($couponJson['member']['where']) && !empty($couponJson['member']['where'])) {
|
|
|
+ } else if (isset($couponJson['member']['where']) && !empty($couponJson['member']['where'])) {
|
|
|
if (trim($couponJson['member']['where']) == '1') {
|
|
|
$item['coupon_use_member'] = 'all';
|
|
|
} else {
|
|
@@ -59,13 +102,12 @@ class CouponController extends Curd
|
|
|
$where = str_replace('`', '', urldecode($couponJson['member']['where']));
|
|
|
$whereArr = explode('=', $where);
|
|
|
// dump($whereArr);
|
|
|
-// dump($whereArr[1]);
|
|
|
- if (isset($whereArr[1]) && trim($whereArr[1]) == 'member_is_vip') {
|
|
|
+ if (isset($whereArr[0]) && trim($whereArr[0]) == 'member_is_vip') {
|
|
|
$item['condition'] = 'is_vip';
|
|
|
- } else if (isset($whereArr[1]) && trim($whereArr[1]) == 'member_classify') {
|
|
|
- if (isset($whereArr[1]) && trim($whereArr[1]) == 'MEMBER') {
|
|
|
+ } else if (isset($whereArr[0]) && trim($whereArr[0]) == 'member_classify') {
|
|
|
+ if (isset($whereArr[1]) && str_replace("'", '', trim($whereArr[1])) == 'MEMBER') {
|
|
|
$item['condition'] = 'is_member';
|
|
|
- } else if (isset($whereArr[1]) && trim($whereArr[1]) == 'EMPLOY') {
|
|
|
+ } else if (isset($whereArr[1]) && str_replace("'", '', trim($whereArr[1])) == 'EMPLOY') {
|
|
|
$item['condition'] = 'is_employ';
|
|
|
}
|
|
|
}
|
|
@@ -103,6 +145,14 @@ class CouponController extends Curd
|
|
|
// return $items;
|
|
|
// }
|
|
|
|
|
|
+ /**
|
|
|
+ * @Desc 添加优惠券
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/8/14 15:16
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return Response
|
|
|
+ */
|
|
|
public function insert(Request $request): Response
|
|
|
{
|
|
|
if ($this->validate && !$this->validateClass->scene('add')->check($request->post())) {
|
|
@@ -116,7 +166,7 @@ class CouponController extends Curd
|
|
|
Db::beginTransaction();
|
|
|
try {
|
|
|
$data = $this->insertInput($request);
|
|
|
- dump($data);
|
|
|
+ $data['coupon_creator_user_id'] = JwtToken::getCurrentId();
|
|
|
$this->doInsert($data);
|
|
|
// 关联优惠券和商品、规格
|
|
|
$this->insertCouponGoods($goods, $data['coupon_id']);
|
|
@@ -200,17 +250,129 @@ class CouponController extends Curd
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @Desc 修改优惠券
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/8/14 15:48
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return Response
|
|
|
+ */
|
|
|
+ public function update(Request $request): Response
|
|
|
+ {
|
|
|
+ if ($this->validate && !$this->validateClass->scene('update')->check($request->post())) {
|
|
|
+ return json_fail($this->validateClass->getError());
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::beginTransaction();
|
|
|
+ try {
|
|
|
+ [$id, $data] = $this->updateInput($request);
|
|
|
+ $this->updateCouponGoods($request->post('goodsContentList'),$id);
|
|
|
+ $this->doUpdate($id, $data);
|
|
|
+ Db::commit();
|
|
|
+
|
|
|
+ return json_success('success');
|
|
|
+ } catch (BusinessException $e) {
|
|
|
+ Db::rollBack();
|
|
|
+ return json_fail($e->getMessage());
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Db::rollBack();
|
|
|
+ dump($e->getMessage());
|
|
|
+ return json_fail('数据更新失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public function updateCouponGoods($goods, $couponId)
|
|
|
+ {
|
|
|
+ try{
|
|
|
+ $couponGoodsIds = CouponGoods::where('join_goods_coupon_id',$couponId)->pluck('join_coupon_goods_id')->toArray();
|
|
|
+ $goodsIds = array_column($goods,'goods_id');
|
|
|
+ // 新的差集
|
|
|
+ $goodsDiff = array_diff($goodsIds,$couponGoodsIds);
|
|
|
+ // 旧的差集
|
|
|
+ $couponDiff = array_diff($couponGoodsIds,$goodsIds);
|
|
|
+ foreach ($goods as $good) {
|
|
|
+ // 更新两个中都有的
|
|
|
+ if (in_array($good['goods_id'], $couponGoodsIds)) {
|
|
|
+ CouponGoods::where('join_goods_coupon_id', $couponId)->where('join_coupon_goods_id', $good['goods_id'])->update(['join_coupon_goods_sku_id' => $good['sku_id']]);
|
|
|
+ } elseif (in_array($good['goods_id'], $goodsDiff)) { // 新加的
|
|
|
+ CouponGoods::insert([
|
|
|
+ 'join_goods_coupon_id' => $couponId,
|
|
|
+ 'join_coupon_goods_id' => $good['goods_id'],
|
|
|
+ 'join_coupon_goods_sku_id' => $good['sku_id'],
|
|
|
+ 'coupon_goods_json' => '[]',
|
|
|
+ 'coupon_goods_extend_json' => '[]',
|
|
|
+ 'coupon_goods_addtimes' => time()
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!empty($couponDiff)){ // 去掉的
|
|
|
+ foreach ($couponDiff as $item){
|
|
|
+ CouponGoods::where('join_goods_coupon_id', $couponId)->where('join_coupon_goods_id', $item)->delete();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch (\Exception $e){
|
|
|
+ throw new BusinessException('关联产品更新失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
protected function updateInput(Request $request): array
|
|
|
{
|
|
|
+ $params = $request->post();
|
|
|
$primary_key = $this->model->getKeyName();
|
|
|
$id = $request->post($primary_key);
|
|
|
- $data = $this->inputFilter($request->post());
|
|
|
- $data['coupon_begindate'] = date("Y-m-d H:i:s", strtotime($data['coupon_begindate']));
|
|
|
- $data['coupon_enddate'] = date("Y-m-d H:i:s", strtotime($data['coupon_enddate']));
|
|
|
+ $data = $this->inputFilter($params);
|
|
|
+ $data['coupon_validdate_begin'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_begin']));
|
|
|
+ $data['coupon_validdate_end'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_end']));
|
|
|
$model = $this->model->find($id);
|
|
|
if (!$model) {
|
|
|
throw new BusinessException('记录不存在', 2);
|
|
|
}
|
|
|
+ $couponJson = [];
|
|
|
+ if (!empty($model->coupon_json)) {
|
|
|
+ $couponJson = json_decode($model->coupon_json, true);
|
|
|
+ }
|
|
|
+ if ($params['coupon_use_member'] == 'member' && isset($params['member_list'])) {
|
|
|
+ $couponJson['member']['list'] = $params['member_list'];
|
|
|
+ if (isset($couponJson['member']['range'])){
|
|
|
+ $couponJson['member']['range'] = '';
|
|
|
+ }
|
|
|
+ if (isset($couponJson['member']['where'])){
|
|
|
+ $couponJson['member']['where'] = '';
|
|
|
+ }
|
|
|
+ } else if ($params['coupon_use_member'] == 'condition') {
|
|
|
+ if (isset($params['condition']) && $params['condition'] == 'is_vip') {
|
|
|
+ $couponJson['member']['range'] = 'VIP会员';
|
|
|
+ $couponJson['member']['where'] = urlencode(" `member_is_vip` = 'Y'");
|
|
|
+ } elseif (isset($params['condition']) && $params['condition'] == 'is_employ') {
|
|
|
+ $couponJson['member']['range'] = '公司员工';
|
|
|
+ $couponJson['member']['where'] = urlencode(" `member_classify` = 'EMPLOY'");
|
|
|
+ } elseif (isset($params['condition']) && $params['condition'] == 'is_member') {
|
|
|
+ $couponJson['member']['range'] = '会员';
|
|
|
+ $couponJson['member']['where'] = urlencode(" `member_classify` = 'MEMBER'");
|
|
|
+ }
|
|
|
+ if (isset($couponJson['member']['list'])){
|
|
|
+ $couponJson['member']['list'] = [];
|
|
|
+ }
|
|
|
+ } else if ($params['coupon_use_member'] == 'all') {
|
|
|
+ $couponJson['member']['range'] = '不限';
|
|
|
+ $couponJson['member']['where'] = urlencode(" 1");
|
|
|
+
|
|
|
+ if (isset($couponJson['member']['list'])){
|
|
|
+ $couponJson['member']['list'] = [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($params['premises_range']) && $params['premises_range'] == 'all') {
|
|
|
+ $couponJson['premises_range'] = '所有门店可用';
|
|
|
+ } elseif (!empty($params['premises_range']) && $params['premises_range'] == 'part') {
|
|
|
+ $couponJson['premises'] = $params['premises'];
|
|
|
+ $couponJson['premises_range'] = '部分门店可用';
|
|
|
+ }
|
|
|
+
|
|
|
+ $data['coupon_json'] = json_encode($couponJson, JSON_UNESCAPED_UNICODE);
|
|
|
+
|
|
|
unset($data[$primary_key]);
|
|
|
return [$id, $data];
|
|
|
}
|
|
@@ -240,10 +402,6 @@ class CouponController extends Curd
|
|
|
->toArray();
|
|
|
$goodsIds = [];
|
|
|
$goodsContent = [];
|
|
|
- /**
|
|
|
- * ({goods_id:itemSub3.goods_id,sku_id:sku_id,sku_name:sku_name,goods_name:itemSub3.name,goods_classify:goods_classify,
|
|
|
- * goods_sales_price:goods_sales_price,nbr:1,skus:itemSub3.sku})
|
|
|
- */
|
|
|
foreach ($couponGoods as $couponGood) {
|
|
|
$goodsIds[] = $couponGood['join_coupon_goods_id'];
|
|
|
$content = [
|
|
@@ -255,20 +413,21 @@ class CouponController extends Curd
|
|
|
$content['goods_classify'] = $couponGood['goods']['goods_classify'];
|
|
|
}
|
|
|
if (isset($couponGood['sku']) && isset($couponGood['sku']['goods_sku_specs_json'])) {
|
|
|
- $skuSpecsJson = json_decode($couponGood['sku']['goods_sku_specs_json'], true);
|
|
|
- $skuName = '';
|
|
|
- foreach ($skuSpecsJson as $item) {
|
|
|
- if (is_array($item)) {
|
|
|
- $item = implode('', $item);
|
|
|
- }
|
|
|
- $skuName .= $item . ',';
|
|
|
- }
|
|
|
- $content['sku_name'] = rtrim($skuName, ',');
|
|
|
+// $skuSpecsJson = json_decode($couponGood['sku']['goods_sku_specs_json'], true);
|
|
|
+// $skuName = '';
|
|
|
+// foreach ($skuSpecsJson as $item) {
|
|
|
+// if (is_array($item)) {
|
|
|
+// $item = implode('', $item);
|
|
|
+// }
|
|
|
+// $skuName .= $item . ',';
|
|
|
+// }
|
|
|
+// $content['sku_name'] = rtrim($skuName, ',');
|
|
|
$content['goods_sales_price'] = $couponGood['sku']['goods_sku_sales_price'];
|
|
|
}
|
|
|
if (isset($couponGood['skus'])) {
|
|
|
foreach ($couponGood['skus'] as $key => $skus) {
|
|
|
if (!empty($skus['goods_sku_specs_json'])) {
|
|
|
+ $skuSpecsJson = json_decode($skus['goods_sku_specs_json'], true);
|
|
|
$skuName = '';
|
|
|
foreach ($skuSpecsJson as $item) {
|
|
|
if (is_array($item)) {
|
|
@@ -283,12 +442,72 @@ class CouponController extends Curd
|
|
|
}
|
|
|
$goodsContent[] = $content;
|
|
|
}
|
|
|
+ // 选中的会员
|
|
|
+ $memberLists = [];
|
|
|
+ if (!empty($coupon->coupon_json)) {
|
|
|
+ $couponJson = json_decode($coupon->coupon_json, true);
|
|
|
+ if (isset($couponJson['member']) && isset($couponJson['member']['list']) && !empty($couponJson['member']['list'])) {
|
|
|
+ $res = Db::table('member')
|
|
|
+ ->leftjoin('member_cert', 'member.member_id', '=', 'member_cert.join_cert_member_id')
|
|
|
+ ->leftjoin('member_info', 'member.member_id', '=', 'member_info.join_info_member_id')
|
|
|
+ ->select('member.member_id', 'member.member_mobile', 'member_cert.member_cert_name', 'member_info.member_info_nickname')
|
|
|
+ ->where('member_status', 'ACTIVED')
|
|
|
+ ->whereIn('member_id', $couponJson['member']['list'])
|
|
|
+ ->get();
|
|
|
+ $memberLists = [];
|
|
|
+ foreach ($res as $item) {
|
|
|
+ $name = '';
|
|
|
+ if (!empty($item->member_cert_name)) {
|
|
|
+ $name = $item->member_cert_name;
|
|
|
+ } else if (!empty($item->member_info_nickname)) {
|
|
|
+ $name = $item->member_info_nickname;
|
|
|
+ }
|
|
|
+ $value = !empty($name) ? $name . '-' : '';
|
|
|
+ if ($item->member_mobile != '0000') {
|
|
|
+ $value .= $item->member_mobile;
|
|
|
+ }
|
|
|
+ if (empty($value)) {
|
|
|
+ $value = $item->member_mobile;
|
|
|
+ }
|
|
|
+ $value = rtrim($value, '-');
|
|
|
+ $memberLists[] = [
|
|
|
+ 'key' => $item->member_id,
|
|
|
+ 'value' => $value,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
$data = [
|
|
|
'goods_ids' => $goodsIds,
|
|
|
- 'goods_content' => $goodsContent
|
|
|
+ 'goods_content' => $goodsContent,
|
|
|
+ 'member_lists' => $memberLists
|
|
|
];
|
|
|
|
|
|
return json_success('', $data);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除
|
|
|
+ * @param Request $request
|
|
|
+ * @return Response
|
|
|
+ * @throws BusinessException
|
|
|
+ */
|
|
|
+ public function delete(Request $request): Response
|
|
|
+ {
|
|
|
+ $ids = $this->deleteInput($request);
|
|
|
+ Db::beginTransaction();
|
|
|
+ try {
|
|
|
+ // 删除优惠券关联的产品
|
|
|
+ foreach ($ids as $id){
|
|
|
+ CouponGoods::where('join_goods_coupon_id',$id)->delete();
|
|
|
+ }
|
|
|
+ $this->doDelete($ids);
|
|
|
+ Db::commit();
|
|
|
+ return json_success('success');
|
|
|
+ }catch (\Exception $e){
|
|
|
+ Db::rollBack();
|
|
|
+ return json_fail('删除失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|