|
@@ -6,8 +6,10 @@ use app\admin\validate\coupon\CouponValidate;
|
|
|
use app\admin\validate\device\DeviceValidate;
|
|
|
use app\controller\Curd;
|
|
|
use app\model\Coupon;
|
|
|
+use app\model\CouponGoods;
|
|
|
use app\model\Device;
|
|
|
use app\model\SysSerial;
|
|
|
+use support\Db;
|
|
|
use support\exception\BusinessException;
|
|
|
use support\Request;
|
|
|
use support\Response;
|
|
@@ -39,14 +41,54 @@ class CouponController extends Curd
|
|
|
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);
|
|
|
+ if (isset($whereArr[0]) && trim($whereArr[0]) == 'member_is_vip') {
|
|
|
+ $item['condition'] = 'is_vip';
|
|
|
+ } else if (isset($whereArr[0]) && 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')
|
|
|
+ $coupons = Coupon::where('coupon_status', 'ACTIVED')
|
|
|
+ ->select('coupon_id', 'coupon_name')
|
|
|
->get()
|
|
|
->toArray();
|
|
|
|
|
|
- return json_success('',$coupons);
|
|
|
+ return json_success('', $coupons);
|
|
|
}
|
|
|
|
|
|
// public function afterQuery($items)
|
|
@@ -59,12 +101,100 @@ class CouponController extends Curd
|
|
|
// 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("请选择关联的产品");
|
|
|
+ }
|
|
|
+
|
|
|
+// return json_fail("请选择关联的产品");
|
|
|
+ Db::beginTransaction();
|
|
|
+ try {
|
|
|
+ $data = $this->insertInput($request);
|
|
|
+ $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
|
|
|
{
|
|
|
- $data = $this->inputFilter($request->post());
|
|
|
- $data['coupon_id'] = "CO" . str_pad(SysSerial::getSerial(), 16, '0') . random_string(8, 'up');
|
|
|
- $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']));
|
|
|
+ $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;
|
|
|
}
|
|
@@ -83,4 +213,81 @@ class CouponController extends Curd
|
|
|
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);
|
|
|
+ }
|
|
|
}
|