123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- declare (strict_types = 1);
- namespace app\store\controller;
- use app\common\library\helper;
- use app\common\service\Order as OrderService;
- use app\common\service\order\Refund as RefundService;
- use app\store\model\groupbuylb\GroupBuyLbActivity as GroupBuyLbActivityModel;
- use app\store\model\groupbuylb\GroupBuyLbActivityAction as GroupBuyLbActivityActionModel;
- use app\store\model\groupbuylb\GroupBuyLbGoods;
- use app\store\model\groupbuylb\GroupBuyLbHelp;
- use app\store\model\groupbuylb\GroupBuyLbJoin;
- use app\store\model\groupbuylb\GroupBuyLbCoupon;
- use think\App;
- use app\common\service\goods\source\Factory as StockFactory;
- use app\common\enum\order\OrderSource as OrderSourceEnum;
- use app\store\model\Coupon;
- /**
- * 拼团裂变管理
- * Class GroupBuyLbActivity
- * @package app\store\controller
- */
- class GroupBuyLbActivity extends Controller
- {
- private $actModel;
- public function __construct(App $app)
- {
- parent::__construct($app);
- $this->actModel = new GroupBuyLbActivityModel();
- }
- /**
- *
- * @return array
- * @author: zq
- * @Time: 2022/4/6 16:49
- */
- public function list(){
- $list = $this->actModel->getList($this->request->param());
- return $this->renderSuccess(compact('list'));
- }
- /**
- * 添加拼团活动
- * @return array|string
- */
- public function add()
- {
- // 新增记录
- $param = $this->postForm();
-
- $param['audit_user'] = $this->store['user']['real_name']?:'';
- $param['audit_admin_id'] = $this->store['user']['store_user_id']?:'';
- $activity_time = between_time_format($param['between_time']); // 生成活动编号
- $param['start_time'] = date("Y-m-d H:i:s",$activity_time['start_time']);
- $param['end_time'] = date("Y-m-d H:i:s",$activity_time['end_time']);
- if (empty($param['goods']) || !count($param['goods'])){
- return $this->renderError('请选择拼团裂变商品');
- }
- if (isset($param['role']) && $param['role'] == 1){
- $param['audit_time'] = Date("Y-m-d H:i:s",time());
- $param['audit_status'] = 1;
- }else{
- $param['audit_status'] = 0;
- }
- $arr = array_column($param['goods'],'limit_stock','goods_id');
- $goods_id = helper::getArrayColumn($param['goods'],'goods_id');
- $goods = \app\store\model\Goods::whereIn('goods_id',$goods_id)->select();
- foreach ($goods as $good){
- if(isset($arr[$good['goods_id']]) && $arr[$good['goods_id']]<=0){
- return $this->renderError('商品 '.$good['goods_name'].' 库存不能设置为0');
- }
- if(isset($arr[$good['goods_id']]) && $good['stock_total']<$arr[$good['goods_id']]){
- return $this->renderError('商品 '.$good['goods_name'].' 库存不足');
- }
- }
- $flag = $this->actModel->addOne($param);
- if ($flag == 1) {
- return $this->renderSuccess('添加成功');
- }
- if ($flag == 3){
- return $this->renderError('该商品已参加其他拼团裂变活动');
- }
- return $this->renderError($this->actModel->getError() ?: '添加失败');
- }
- /**
- * 更新拼团裂变活动
- * @return array|string
- */
- public function update()
- {
- // 新增记录
- $param = $this->postForm();
- $model = GroupBuyLbActivityModel::detail(intval($param['id']));
- $param['audit_user'] = $this->store['user']['real_name']?:'';
- $param['audit_admin_id'] = $this->store['user']['store_user_id']?:'';
- $activity_time = between_time_format($param['between_time']);
- $param['start_time'] = date("Y-m-d H:i:s",$activity_time['start_time']);
- $param['end_time'] = date("Y-m-d H:i:s",$activity_time['end_time']);
- if (empty($param['goods']) || !count($param['goods'])){
- return $this->renderError('请选择拼团裂变商品');
- }
- if (isset($param['role']) && $param['role'] == 1){
- $param['audit_time'] = Date("Y-m-d H:i:s",time());
- $param['audit_status'] = 1;
- }else{
- $param['audit_status'] = 0;
- }
- $arr = array_column($param['goods'],'limit_stock','goods_id');
- $goods_id = helper::getArrayColumn($param['goods'],'goods_id');
- $goods = \app\store\model\Goods::whereIn('goods_id',$goods_id)->select();
- foreach ($goods as $good){
- if(isset($arr[$good['goods_id']]) && $arr[$good['goods_id']]<=0){
- return $this->renderError('商品 '.$good['goods_name'].' 库存不能设置为0');
- }
- $fullSendGoods = GroupBuyLbGoods::where(['group_buy_lb_activity_id'=>$param['id'],'goods_id'=>$good['goods_id']])->find();
- if(isset($arr[$good['goods_id']]) && $good['stock_total']<($arr[$good['goods_id']]-$fullSendGoods['purchase_stock'])){
- return $this->renderError('商品 '.$good['goods_name'].' 库存不足');
- }
- }
- $flag = $model->updOne($param);
- if ($flag == 1) {
- return $this->renderSuccess('修改成功');
- }elseif ($flag == 3){
- return $this->renderError('该商品已参加其他拼团裂变活动');
- }
- return $this->renderError($model->getError() ?: '修改失败');
- }
- /**
- * 更新拼团裂变活动
- * @return array|string
- */
- public function edit()
- {
- // 新增记录
- $param = $this->postForm();
- $model = GroupBuyLbActivityModel::detail(intval($param['id']));
- $param['audit_user'] = $this->store['user']['real_name']?:'';
- $param['audit_admin_id'] = $this->store['user']['store_user_id']?:'';
- $flag = $model->editOne($param);
- if ($flag == 1) {
- return $this->renderSuccess('修改成功');
- }
- return $this->renderError($model->getError() ?: '修改失败');
- }
- //拼团裂变详情
- public function detail(int $act_id){
- $detail = GroupBuyLbActivityModel::detail($act_id,['goodsExcept','relcoupon']);
- $model = new GroupBuyLbActivityActionModel();
- $detail['history'] = $model->getLists($act_id);
- $detail['coupon'] =[];
- if(isset($detail['relcoupon'])){
- $coupon_id_arr = array_column($detail['relcoupon']->toArray(), 'coupon_id' ,'coupon_id');
- $detail['coupon'] = $this->couponlist($coupon_id_arr);
- }
- return $this->renderSuccess(compact('detail'));
- }
- //拼团裂变所有订单列表
- public function allList(){
- $list = (new GroupBuyLbHelp)->getAllList($this->request->param());
- return $this->renderSuccess(compact('list'));
- }
- /**
- *拼团裂变详情启用/禁用
- * @return array|bool
- */
- public function status(){
- $postData = $this->postForm();
- $model = GroupBuyLbActivityModel::detail($postData['activity_id']);
- $res ='操作成功';
- $status =$postData['status'];
- if($status==1){
- $res = '已启用';
- }
- if($status==0){
- $res = '已禁用';
- }
- $flag = $model->status($postData);
- if ($flag) {
- return $this->renderSuccess($postData,$res);
- }
- if ($status==1){
- return $this->renderError( '与其他活动时间范围重叠,请检查活动时间');
- }
- return $this->renderError($model->getError() ?: '操作失败');
- }
- /**
- * 拼团裂变审核
- * @param
- * @return array|bool
- */
- public function audit()
- {
- // 确认审核
- $postData = $this->postForm();
- $model = GroupBuyLbActivityModel::detail(intval($postData['activity_id']));
- if(empty($model)){
- return $this->renderError('找不到拼团裂变活动');
- }
- $res ='操作成功';
- $audit_status =$postData['audit_status'];
- if($audit_status == 1){
- $res = '已审核通过';
- $postData['status'] = 1;//启用
- $path = "/pages/activity/pages/groupShopping/groupGoodsDetail/groupGoodsDetail?activity_id=".$model['id']."&isfission=1&share=xcx";
- $postData['wx_qrcode'] = request()->domain()."/api/mp_wx/qrcode?path=".urlencode($path);
- }
- if($audit_status == 2){
- $res = '已审核不通过';
- $postData['status'] = 1;//启用
- }
- $postData['audit_time'] = Date("Y-m-d H:i:s",time());
- $postData['audit_user'] = $this->store['user']['real_name']?:'';
- $postData['audit_admin_id'] = $this->store['user']['store_user_id']?:'';
- $flag = $model->audit($postData);
- if ($flag) {
- return $this->renderSuccess($postData,$res);
- }
- if($audit_status == 1){
- return $this->renderError( '已有拼团裂变活动处于进行中,请重新修改活动时间');
- }
- return $this->renderError($model->getError() ?: '操作失败');
- }
- /**
- * 行动日志
- * @param int $act_id
- * @return array
- */
- public function actionsList(int $act_id){
- $model = new GroupBuyLbActivityAction();
- $list = $model->getLists($act_id);
- return $this->renderSuccess(compact('list'));
- }
- /**
- * 拼团裂变统计
- * @param int $act_id
- * @return array
- */
- public function ptStats(int $act_id){
-
- $helpM = new GroupBuyLbHelp();
- //拼团数
- $gc = GroupBuyLbJoin::countActJoin($act_id);
- //参团人数
- $pc = $helpM->sumActHelpCount($act_id);
- //活动累计成交额
- $sale_volume = $helpM->sumActSaleVolume($act_id);
- $detail = GroupBuyLbActivityModel::detail($act_id,['goodsExcept','relcoupon']);
- $action = new GroupBuyLbActivityActionModel();
- $detail['history'] = $action->getLists($act_id);
- $detail['coupon'] =[];
- if(isset($detail['relcoupon'])){
- $coupon_id_arr = array_column($detail['relcoupon']->toArray(), 'coupon_id' ,'coupon_id');
- $detail['coupon'] = $this->couponlist($coupon_id_arr);
- }
- return $this->renderSuccess(compact('gc','pc','sale_volume','detail'));
- }
- /**
- * 拼团记录分页
- * @param int $act_id
- * @return array
- * @throws \think\db\exception\DbException
- */
- public function ptRecord(int $act_id){
- $m = new GroupBuyLbJoin();
- $list = $m->getList($act_id);
- return $this->renderSuccess(compact('list'));
- }
- /**
- * 订单列表
- * @param int $join_id
- * @return array
- */
- public function joinOrders(int $join_id){
- $m = new GroupBuyLbHelp();
- $list = $m->getList($join_id);
- return $this->renderSuccess(compact('list'));
- }
- /**
- *
- * @param int $join_id
- * @return array
- */
- public function failedGroup(int $join_id){
- $m = new GroupBuyLbHelp();
- $list = $m->getFailedGroupList($join_id);
- return $this->renderSuccess(compact('list'));
- }
- /**
- * 手动发起退款
- * @param int $help_id
- * @return array
- * @throws \app\common\exception\BaseException
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function refundAct(int $help_id){
- $m = new GroupBuyLbHelp();
- $help = $m->find($help_id);
- if (empty($help)){
- return $this->renderError('记录不存在');
- }
- if ($help['finance_refund'] == 1){
- return $this->renderError('已经退过款了');
- }
- if ($help['finance_refund'] != 0 || $help['order_id'] != 0 || $help['pay_state'] != 1){
- return $this->renderError('不支持退款');
- }
- $help['pay_price'] = $help['pay_money'];
- $flag1 = false;
- //退到米卡
- if($help->rice_card_id > 0){
- $flag = riceCardReturn($help->rice_card_id,$help->rice_card_money,$help->order_no,$help->pay_money);
- if ($flag == false){
- log_record('groupBuyHelpLbId::'.$help_id.'::退款退到米卡失败','error');
- return $this->renderError('系统繁忙,稍后再试');
- }
- }
- $data['finance_refund'] = 0;
- $data['finance_time'] = time();
- if ($help['pay_money'] > 0){
- $refund_number = OrderService::createOrderNoPrefix('TKGB'); //申请单编号
- //直接退款逻辑
- $RefundService = new RefundService();
- $refund_ret = $RefundService->execute($help,$refund_number,$help['pay_money']);
- $data['refund_number'] = $refund_number;
- if ($refund_ret['status'] == 200) {
- $data['refund_transaction_id'] = $refund_ret['data']['transaction_id']; // 微信退款交易号
- $flag1 = true;
- }else{
- //退款失败
- log_record('groupBuyLbHelpLbId::'.$help_id.'::微信退款失败','error');
- $data['finance_refund'] = 2;
- }
- }else{
- $flag1 = true;
- }
- if ($flag1 == true){
- $data['finance_refund'] = 1 ;
- $msg = '已尝试退款,请联系用户核对';
- }else{
- $msg = '退款失败';
- return $this->renderError($msg);
- }
-
- try {
- $m->where('id',$help_id)->update($data);
- }catch (\Exception $e){
- log_record('groupBuyLbHelpId::'.$help_id.'::更新groupBuyLbHelp失败::'.$e->getMessage(),'error');
- return $this->renderError('系统繁忙,稍后再试');
- }
- //取消订单 回退库存
- $groupgoods = GroupBuyLbGoods::where('group_buy_lb_activity_id',$help['group_buy_lb_activity_id'])->find();
- if($groupgoods){
- StockFactory::getFactory(OrderSourceEnum::GROUPBUYLB)->backGoodsSkuStockExpress($groupgoods->goods_id,$groupgoods->goods_sku_id,$help['goods_num']);
- StockFactory::getFactory(OrderSourceEnum::GROUPBUYLB)->updateStockSalesExpress($groupgoods->goods_id,$help['goods_num'],false);
- }
- return $this->renderSuccess($msg);
- }
- //优惠券
- public function couponlist($coupon_id_arr = []){
- $p[] = ['coupon_id','in',$coupon_id_arr];
- return (new Coupon())->getCouponGroupBuyLblist($p);
- }
- }
|