model = new Coupon(); $this->validate = true; $this->validateClass = new CouponValidate(); } /** * @Desc 列表 * @Author Gorden * @Date 2024/3/28 15:01 * * @param Request $request * @return Response * @throws \support\exception\BusinessException */ public function select(Request $request): Response { [$where, $format, $limit, $field, $order] = $this->selectInput($request); $order = $request->get('order', 'desc'); $field = $field ?? 'coupon_addtimes'; $query = $this->doSelect($where, $field, $order); return $this->doFormat($query, $format, $limit); } protected function afterQuery($items) { foreach ($items as &$item) { if (!empty($item['coupon_json'])) { $couponJson = json_decode($item['coupon_json'], true); if (isset($couponJson['member'])) { 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'])) { if (trim($couponJson['member']['where']) == '1') { $item['coupon_use_member'] = 'all'; } else { $item['coupon_use_member'] = 'condition'; $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') { $item['condition'] = 'is_vip'; } else if (isset($whereArr[1]) && trim($whereArr[1]) == 'member_classify') { if (isset($whereArr[1]) && trim($whereArr[1]) == 'MEMBER') { $item['condition'] = 'is_member'; } else if (isset($whereArr[1]) && trim($whereArr[1]) == 'EMPLOY') { $item['condition'] = 'is_employ'; } } } } } if (isset($couponJson['premises'])) { $item['premises'] = $couponJson['premises']; } else { $item['premises_range'] = 'all'; } } } return $items; } public function selectList() { $coupons = Coupon::where('coupon_status', 'ACTIVED') ->select('coupon_id', 'coupon_name') ->get() ->toArray(); return json_success('', $coupons); } // public function afterQuery($items) // { // foreach ($items as &$item) { // $item->coupon_begindate = date('Y-m-d H:i:s', $item->coupon_begindate); // $item->coupon_enddate = date('Y-m-d H:i:s', $item->coupon_enddate); // } // // return $items; // } public function insert(Request $request): Response { if ($this->validate && !$this->validateClass->scene('add')->check($request->post())) { return json_fail($this->validateClass->getError()); } $goods = $request->post('goodsContentList', []); if (empty($goods)) { return json_fail("请选择关联的产品"); } Db::beginTransaction(); try { $data = $this->insertInput($request); dump($data); $this->doInsert($data); // 关联优惠券和商品、规格 $this->insertCouponGoods($goods, $data['coupon_id']); Db::commit(); return json_success('success'); } catch (BusinessException $customException) { Db::rollBack(); dump($customException->getMessage()); return json_fail($customException->getMessage()); } catch (\Exception $e) { Db::rollBack(); dump($e->getMessage()); return json_fail('数据写入失败'); } } /** * @Desc 关联优惠券、产品、规格 * @Author Gorden * @Date 2024/8/14 14:32 * * @param $goods * @param $couponId * @return void * @throws BusinessException */ public function insertCouponGoods($goods, $couponId) { try { foreach ($goods as $good) { 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() ]); } } catch (\Exception $e) { throw new BusinessException("关联产品失败"); } } protected function insertInput(Request $request): array { $params = $request->post(); $data = $this->inputFilter($params); $data['coupon_id'] = "CU" . str_pad(SysSerial::getSerial(), 6, '0') . random_string(6, 'up'); $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'])); $couponJson = []; if ($params['coupon_use_member'] == 'member' && isset($params['member_list'])) { $couponJson['member']['list'] = $params['member_list']; } 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'"); } } else if ($params['coupon_use_member'] == 'all') { $couponJson['member']['range'] = '不限'; $couponJson['member']['where'] = urlencode(" 1"); } 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); return $data; } protected function updateInput(Request $request): array { $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'])); $model = $this->model->find($id); if (!$model) { throw new BusinessException('记录不存在', 2); } unset($data[$primary_key]); return [$id, $data]; } /** * 优惠券详情 */ public function info(Request $request): Response { $couponId = $request->get('coupon_id', ''); if (!$couponId) { return json_fail('参数异常'); } $coupon = Coupon::where('coupon_id', $couponId)->first(); if (!$coupon) { return json_fail('数据异常'); } // 拼选择的商品 $couponGoods = CouponGoods::with([ 'goods' => function ($query) { $query->select('goods_id', 'goods_id as id', 'goods_name as name', 'join_goods_category_id as pid', 'goods_classify', 'goods_sales_price', 'goods_cover'); }, 'skus', 'sku' ])->where('join_goods_coupon_id', $couponId) ->get() ->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 = [ 'goods_id' => $couponGood['join_coupon_goods_id'], 'sku_id' => $couponGood['join_coupon_goods_sku_id'], ]; if (isset($couponGood['goods'])) { $content['goods_name'] = $couponGood['goods']['name']; $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, ','); $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'])) { $skuName = ''; foreach ($skuSpecsJson as $item) { if (is_array($item)) { $item = implode('', $item); } $skuName .= $item . ','; } $couponGood['skus'][$key]['sku_name'] = rtrim($skuName, ','); } } $content['skus'] = $couponGood['skus']; } $goodsContent[] = $content; } $data = [ 'goods_ids' => $goodsIds, 'goods_content' => $goodsContent ]; return json_success('', $data); } }