KjActivity.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\store\controller;
  13. use app\common\model\kjactivity\KjActivity as KjActivityModel;
  14. use app\common\model\kjactivity\KjActivityJoin as KjActivityJoinModel;
  15. use app\common\model\kjactivity\KjActivityGood as KjActivityGoodModel;
  16. use app\common\model\kjactivity\KjActivityHelp as KjActivityHelpModel;
  17. use app\common\service\Export as ExportService;
  18. use think\facade\Validate;
  19. use app\common\model\Goods;
  20. use app\common\model\GoodsSku;
  21. use app\common\library\helper;
  22. use think\facade\Db;
  23. /**
  24. * 活动中心 ▸ 砍价管理
  25. * Class Files
  26. * @package app\store\controller
  27. */
  28. class KjActivity extends Controller
  29. {
  30. /**
  31. * 添加
  32. * @return array|string
  33. */
  34. public function add()
  35. {
  36. // 新增记录
  37. $model = new KjActivityModel;
  38. $post = $this->postForm();
  39. $post['code'] = rand(10000000,99999999);
  40. $c = $this->checkTimeRange($post);
  41. if($c){
  42. return $this->renderError("已存在同一时间活动id:".$c->id??0);
  43. }
  44. if (isset($post['role']) && $post['role'] == 1){
  45. $post['audit_status_zg'] = 10;
  46. $post['is_up'] = 1;
  47. }else{
  48. $post['audit_status_zg'] = 0;
  49. }
  50. $arr = array_column($post['goods'],'limit_stock','goods_id');
  51. $goods_id = helper::getArrayColumn($post['goods'],'goods_id');
  52. $goods = \app\store\model\Goods::whereIn('goods_id',$goods_id)->select();
  53. foreach ($goods as $good){
  54. if(isset($arr[$good['goods_id']]) && $arr[$good['goods_id']]<=0){
  55. return $this->renderError('商品 '.$good['goods_name'].' 库存不能设置为0');
  56. }
  57. if(isset($arr[$good['goods_id']]) && $good['stock_total']<$arr[$good['goods_id']]){
  58. return $this->renderError('商品 '.$good['goods_name'].' 库存不足');
  59. }
  60. }
  61. if ($model->addOne($post)&&$model->getError()=='') {
  62. return $this->renderSuccess('添加成功');
  63. }
  64. return $this->renderError($model->getError() ?: '添加失败');
  65. }
  66. /**
  67. * 时间和现有活动是否重叠
  68. * @param $data
  69. * @return FullSendActivity|array|\think\Model|null
  70. * @throws \think\db\exception\DataNotFoundException
  71. * @throws \think\db\exception\DbException
  72. * @throws \think\db\exception\ModelNotFoundException
  73. */
  74. public function checkTimeRange($data){
  75. $id = $data['id']??0;
  76. return KjActivityModel::where('is_up',1)->where('id',"<>",$id)->where(function ($s) use ($data){
  77. $s->whereOr(function($query) use ($data){
  78. $query->whereBetweenTime('start_time', $data['start_time'], $data['end_time']);
  79. })->whereOr(function ($query) use ($data){
  80. $query->whereBetweenTime('end_time',$data['start_time'],$data['end_time']);
  81. })->whereOr(function ($query) use ($data){
  82. $query->where('start_time','<',$data['start_time'])->where('end_time','>',$data['end_time']);
  83. });
  84. })->find();
  85. }
  86. public function edit(){
  87. // 新增记录
  88. $model = new KjActivityModel;
  89. $post = $this->postForm();
  90. if (isset($post['role']) && $post['role'] == 1){
  91. $post['audit_status_zg'] = 10;
  92. $post['is_up'] = 1;
  93. }else{
  94. $post['audit_status_zg'] = 0;
  95. }
  96. $c = $this->checkTimeRange($post);
  97. if($c){
  98. return $this->renderError("已存在同一时间活动id:".$c->id);
  99. }
  100. $model = KjActivityModel::where('id',$post['id'])->find();
  101. $arr = array_column($post['goods'],'limit_stock','goods_id');
  102. $goods_id = helper::getArrayColumn($post['goods'],'goods_id');
  103. $goods = \app\store\model\Goods::whereIn('goods_id',$goods_id)->select();
  104. foreach ($goods as $good){
  105. if(isset($arr[$good['goods_id']]) && $arr[$good['goods_id']]<=0){
  106. return $this->renderError('商品 '.$good['goods_name'].' 库存不能设置为0');
  107. }
  108. $fullSendGoods = KjActivityGoodModel::where(['activity_id'=>$post['id'],'goods_id'=>$good['goods_id']])->find();
  109. if(isset($arr[$good['goods_id']]) && $good['stock_total']<($arr[$good['goods_id']]-$fullSendGoods['purchase_stock'])){
  110. return $this->renderError('商品 '.$good['goods_name'].' 库存不足');
  111. }
  112. }
  113. if ($model->edit($post)&&$model->getError()=='') {
  114. return $this->renderSuccess('修改成功');
  115. }
  116. return $this->renderError($model->getError() ?: '添加失败');
  117. }
  118. /**
  119. * 审核
  120. * @param int $coupon_id
  121. * @return array|bool
  122. */
  123. public function audit()
  124. {
  125. // 确认审核
  126. $postData = $this->postForm();
  127. $model = KjActivityModel::where('id',$postData['id'])->find();
  128. if(empty($model)){
  129. return $this->renderError('找不到数据');
  130. }
  131. unset($postData['id']);
  132. $res ='操作成功';
  133. $audit_status = $postData['audit_status_zg'];
  134. if($audit_status==10){
  135. $res = '已审核通过';
  136. }
  137. if($audit_status==20){
  138. $res = '已审核不通过';
  139. }
  140. $postData['audit_time'] = Date("Y-m-d H:i:s",time());
  141. $postData['audit_user'] = $this->store['user']['real_name'];
  142. if ($model->audit($postData)) {
  143. return $this->renderSuccess($postData,$res);
  144. }
  145. return $this->renderError($model->getError() ?: '操作失败');
  146. }
  147. //活动详情
  148. public function detail(int $id){
  149. $detail = KjActivityModel::detail($id,['goods','his']);
  150. $newarr = [];
  151. $goods_ids = helper::getArrayColumn($detail['goods'],'goods_id');
  152. $arr = \app\store\model\Goods::whereIn('goods_id',$goods_ids)->column('stock_total','goods_id');
  153. foreach($detail['goods'] as &$item){
  154. // 商品信息
  155. $goods = Goods::detail($item['goods_id'], ['images' => ['file'], 'skuList' => ['image']]);
  156. if (empty($goods)) {
  157. $this->error = "商品信息错误";
  158. continue;
  159. // return false;
  160. }
  161. if(isset($arr[$item['goods_id']])){
  162. $item['stock_total'] = $arr[$item['goods_id']];
  163. }
  164. $goodsInfo['goods_id'] = $item['goods_id'];
  165. $goodsInfo['limit_stock'] = $item['limit_stock'];
  166. $goodsInfo['residue_stock'] = $item['residue_stock'];
  167. $goodsInfo['goods_sku_id'] = $item['goods_sku_id'];
  168. $goodsInfo['goods_no'] = $goods['goods_no'];
  169. $goodsInfo['goods_images'] = helper::getArrayColumn($goods['images'], 'file');
  170. // 商品主图
  171. $goodsInfo['goods_image'] = current($goodsInfo['goods_images'])['preview_url'];
  172. $goodsInfo['image_id'] = current($goodsInfo['goods_images'])['file_id'];
  173. $goodsSku = GoodsSku::detail($item['goods_id'], $item['goods_sku_id']);
  174. // if(empty($goodsSku)) {
  175. // $this->error = "商品信息错误";
  176. // continue;
  177. // return false;
  178. // }
  179. $goodsInfo['goods_price_min'] = $goods['goods_price_min'];
  180. // $goodsInfo['goods_price'] = $goodsSku['goods_price'];
  181. $goodsInfo['status'] = $goods['status'];
  182. $goodsInfo['goods_name'] = $goods['goods_name'];
  183. $goodsInfo['low_price'] = $item['low_price'];
  184. $goodsInfo['help_kj_up_cnt'] = $item['help_kj_up_cnt'];
  185. unset($goodsInfo['goods_images']);
  186. $newarr[] = $goodsInfo;
  187. }
  188. $detail['goods_list'] = $newarr;
  189. return $this->renderSuccess(compact('detail'));
  190. }
  191. /**
  192. * 启用 禁用
  193. * @param int $coupon_id
  194. * @return array|bool
  195. */
  196. public function down(int $id){
  197. // 确认审核
  198. // $postData = $this->postForm();
  199. $model = KjActivityModel::where('id',$id)->find();
  200. if(empty($model)){
  201. return $this->renderError('找不到数据');
  202. }
  203. if($model['is_up']==0){
  204. return $this->renderError('已经作废了,不要重复操作');
  205. }
  206. $postData['is_up'] = 0;
  207. $postData['end_time'] = Date("Y-m-d H:i:s",time()-1);
  208. if ($model->down($postData)) {
  209. return $this->renderSuccess($postData,'作废成功,活动已失效');
  210. }
  211. return $this->renderError($model->getError() ?: '操作失败');
  212. }
  213. //活动信息
  214. public function activityinfo(int $activity_id){
  215. $this->tj();
  216. $activity = KjActivityModel::where('id',$activity_id)->find();
  217. if(empty($activity)){
  218. return $this->renderError("找不到信息");
  219. }
  220. $kjgoods = KjActivityGoodModel::where('activity_id',$activity_id)->find();
  221. $goods = Goods::detail($kjgoods['goods_id'],[]);
  222. $kjgoods['goods_name'] = $goods['goods_name'];
  223. $kjgoods['goods_price_min'] = $goods['goods_price_min'];
  224. $data['activity'] = $activity;
  225. $data['goods'] = $kjgoods;
  226. $join_cnt = KjActivityJoinModel::where('activity_id',$activity_id)->count();
  227. $help_cnt = KjActivityHelpModel::where('activity_id',$activity_id)->count();
  228. $submit_order_cnt = KjActivityJoinModel::where('activity_id',$activity_id)->where('is_submit_order',1)->count();
  229. $is_pay_cnt = KjActivityJoinModel::where('activity_id',$activity_id)->where('is_pay',1)->count();
  230. $kj_price_sum = KjActivityJoinModel::where('activity_id',$activity_id)->where('is_pay',1)->sum('order_price');
  231. $tj['help_cnt'] = $help_cnt;
  232. $tj['join_cnt'] = $join_cnt;
  233. $tj['submit_order_cnt'] = $submit_order_cnt;
  234. $tj['is_pay_cnt'] = $is_pay_cnt;
  235. $tj['kj_price_sum'] = $kj_price_sum;
  236. $data['tj'] = $tj;
  237. return $this->renderSuccess(compact("data"));
  238. }
  239. //
  240. public function cancelForbidden($join_id){
  241. KjActivityJoinModel::where("id",$join_id)->where('forbidden',1)->update(['forbidden'=>2]);
  242. return $this->renderSuccess();
  243. }
  244. public function tj(){
  245. $sql = 'select order_id from yoshop_order where order_id in (SELECT order_id FROM yoshop_kj_activity_join) and pay_status=20';
  246. $result = Db::query($sql);
  247. $order_id_arr = [];
  248. foreach($result as $row){
  249. $order_id_arr[] = $row['order_id'];
  250. }
  251. $orderstr = implode(',', $order_id_arr);
  252. if(!empty($order_id_arr)){
  253. $sqlup = 'update yoshop_kj_activity_join set is_pay=1 where order_id in ('.$orderstr.')';
  254. Db::query($sqlup);
  255. }
  256. }
  257. //
  258. public function joinlist(int $activity_id){
  259. $model = new KjActivityJoinModel;
  260. $param = $this->request->param();
  261. $param = array_merge($param,['activity_id'=>$activity_id]);
  262. $list = $model->getList($param);
  263. return $this->renderSuccess(compact('list'));
  264. }
  265. /**
  266. * 列表
  267. * @return array
  268. * @throws \think\db\exception\DbException
  269. */
  270. public function list()
  271. {
  272. $model = new KjActivityModel;
  273. $list = $model->getList($this->request->param());
  274. return $this->renderSuccess(compact('list'));
  275. }
  276. }