|
@@ -8,12 +8,14 @@
|
|
|
namespace app\admin\model\order;
|
|
namespace app\admin\model\order;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+use app\admin\model\ump\StoreCouponUser;
|
|
|
use app\admin\model\wechat\WechatUser;
|
|
use app\admin\model\wechat\WechatUser;
|
|
|
use app\admin\model\ump\StorePink;
|
|
use app\admin\model\ump\StorePink;
|
|
|
use app\admin\model\order\StoreOrderCartInfo;
|
|
use app\admin\model\order\StoreOrderCartInfo;
|
|
|
use app\admin\model\store\StoreProduct;
|
|
use app\admin\model\store\StoreProduct;
|
|
|
use app\admin\model\routine\RoutineFormId;
|
|
use app\admin\model\routine\RoutineFormId;
|
|
|
-use app\admin\model\routine\RoutineTemplate;
|
|
|
|
|
|
|
+use app\routine\model\routine\RoutineTemplate;
|
|
|
|
|
+use service\ProgramTemplateService;
|
|
|
use service\PHPExcelService;
|
|
use service\PHPExcelService;
|
|
|
use traits\ModelTrait;
|
|
use traits\ModelTrait;
|
|
|
use basic\ModelBasic;
|
|
use basic\ModelBasic;
|
|
@@ -21,6 +23,8 @@ use service\WechatTemplateService;
|
|
|
use service\RoutineTemplateService;
|
|
use service\RoutineTemplateService;
|
|
|
use think\Url;
|
|
use think\Url;
|
|
|
use think\Db;
|
|
use think\Db;
|
|
|
|
|
+use app\admin\model\user\User;
|
|
|
|
|
+use app\admin\model\user\UserBill;
|
|
|
/**
|
|
/**
|
|
|
* 订单管理Model
|
|
* 订单管理Model
|
|
|
* Class StoreOrder
|
|
* Class StoreOrder
|
|
@@ -38,9 +42,10 @@ class StoreOrder extends ModelBasic
|
|
|
$data['jy']=self::statusByWhere(4,new self())->count();
|
|
$data['jy']=self::statusByWhere(4,new self())->count();
|
|
|
$data['tk']=self::statusByWhere(-1,new self())->count();
|
|
$data['tk']=self::statusByWhere(-1,new self())->count();
|
|
|
$data['yt']=self::statusByWhere(-2,new self())->count();
|
|
$data['yt']=self::statusByWhere(-2,new self())->count();
|
|
|
- $data['general']=self::where(['pink_id'=>0,'combination_id'=>0,'seckill_id'=>0])->count();
|
|
|
|
|
- $data['pink']=self::where('pink_id|combination_id','neq',0)->count();
|
|
|
|
|
- $data['seckill']=self::where('seckill_id','neq',0)->count();
|
|
|
|
|
|
|
+ $data['general']=self::where(['pink_id'=>0,'combination_id'=>0,'seckill_id'=>0,'bargain_id'=>0])->count();
|
|
|
|
|
+ $data['pink']=self::where('pink_id|combination_id','>',0)->count();
|
|
|
|
|
+ $data['seckill']=self::where('seckill_id','>',0)->count();
|
|
|
|
|
+ $data['bargain']=self::where('bargain_id','>',0)->count();
|
|
|
return $data;
|
|
return $data;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -84,14 +89,15 @@ class StoreOrder extends ModelBasic
|
|
|
$item['color'] = '#457856';
|
|
$item['color'] = '#457856';
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
+ }elseif ($item['seckill_id']){
|
|
|
|
|
+ $item['pink_name'] = '[秒杀订单]';
|
|
|
|
|
+ $item['color'] = '#32c5e9';
|
|
|
|
|
+ }elseif ($item['bargain_id']){
|
|
|
|
|
+ $item['pink_name'] = '[砍价订单]';
|
|
|
|
|
+ $item['color'] = '#12c5e9';
|
|
|
}else{
|
|
}else{
|
|
|
- if($item['seckill_id']){
|
|
|
|
|
- $item['pink_name'] = '[秒杀订单]';
|
|
|
|
|
- $item['color'] = '#32c5e9';
|
|
|
|
|
- }else{
|
|
|
|
|
- $item['pink_name'] = '[普通订单]';
|
|
|
|
|
- $item['color'] = '#895612';
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $item['pink_name'] = '[普通订单]';
|
|
|
|
|
+ $item['color'] = '#895612';
|
|
|
}
|
|
}
|
|
|
if($item['paid']==1){
|
|
if($item['paid']==1){
|
|
|
switch ($item['pay_type']){
|
|
switch ($item['pay_type']){
|
|
@@ -276,6 +282,9 @@ HTML;
|
|
|
if($item['seckill_id']){
|
|
if($item['seckill_id']){
|
|
|
$item['pink_name'] = '[秒杀订单]';
|
|
$item['pink_name'] = '[秒杀订单]';
|
|
|
$item['color'] = '#32c5e9';
|
|
$item['color'] = '#32c5e9';
|
|
|
|
|
+ }elseif ($item['bargain_id']){
|
|
|
|
|
+ $item['pink_name'] = '[砍价订单]';
|
|
|
|
|
+ $item['color'] = '#12c5e9';
|
|
|
}else{
|
|
}else{
|
|
|
$item['pink_name'] = '[普通订单]';
|
|
$item['pink_name'] = '[普通订单]';
|
|
|
$item['color'] = '#895612';
|
|
$item['color'] = '#895612';
|
|
@@ -336,7 +345,7 @@ HTML;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 退款发送模板消息
|
|
|
|
|
|
|
+ * TODO 公众号退款发送模板消息
|
|
|
* @param $oid
|
|
* @param $oid
|
|
|
* $oid 订单id key
|
|
* $oid 订单id key
|
|
|
*/
|
|
*/
|
|
@@ -352,6 +361,28 @@ HTML;
|
|
|
],Url::build('wap/My/order',['uni'=>$order['order_id']],true,true));
|
|
],Url::build('wap/My/order',['uni'=>$order['order_id']],true,true));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * TODO 小程序余额退款模板消息
|
|
|
|
|
+ * @param $oid
|
|
|
|
|
+ * @return bool|mixed
|
|
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
|
|
+ * @throws \think\exception\DbException
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function refundRoutineTemplate($oid){
|
|
|
|
|
+ $order = self::where('id',$oid)->find();
|
|
|
|
|
+ $formId = RoutineFormId::getFormIdOne($order['uid']);
|
|
|
|
|
+ $data['keyword1']['value'] = $order['order_id'];
|
|
|
|
|
+ $data['keyword2']['value'] = date('Y-m-d H:i:s',time());
|
|
|
|
|
+ $data['keyword3']['value'] = $order['pay_price'];
|
|
|
|
|
+ if($order['pay_type'] == 'yue') $data['keyword4']['value'] = '余额支付';
|
|
|
|
|
+ else if($order['pay_type'] == 'weixin') $data['keyword4']['value'] = '微信支付';
|
|
|
|
|
+ else if($order['pay_type'] == 'offline') $data['keyword4']['value'] = '线下支付';
|
|
|
|
|
+ $data['keyword5']['value'] = '已成功退款';
|
|
|
|
|
+ RoutineFormId::delFormIdOne($formId);
|
|
|
|
|
+ return RoutineTemplateService::sendTemplate(WechatUser::uidToRoutineOpenid($order['uid']),RoutineTemplateService::setTemplateId(RoutineTemplateService::ORDER_REFUND_SUCCESS),'',$data,$formId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 处理where条件
|
|
* 处理where条件
|
|
|
* @param $where
|
|
* @param $where
|
|
@@ -364,7 +395,7 @@ HTML;
|
|
|
if($where['is_del'] != '' && $where['is_del'] != -1) $model = $model->where($aler.'is_del',$where['is_del']);
|
|
if($where['is_del'] != '' && $where['is_del'] != -1) $model = $model->where($aler.'is_del',$where['is_del']);
|
|
|
if(isset($where['combination_id'])){
|
|
if(isset($where['combination_id'])){
|
|
|
if($where['combination_id'] =='普通订单'){
|
|
if($where['combination_id'] =='普通订单'){
|
|
|
- $model = $model->where($aler.'combination_id',0)->where($aler.'seckill_id',0);
|
|
|
|
|
|
|
+ $model = $model->where($aler.'combination_id',0)->where($aler.'seckill_id',0)->where($aler.'bargain_id',0);
|
|
|
}
|
|
}
|
|
|
if($where['combination_id'] =='拼团订单'){
|
|
if($where['combination_id'] =='拼团订单'){
|
|
|
$model = $model->where($aler.'combination_id',">",0)->where($aler.'pink_id',">",0);
|
|
$model = $model->where($aler.'combination_id',">",0)->where($aler.'pink_id',">",0);
|
|
@@ -372,18 +403,25 @@ HTML;
|
|
|
if($where['combination_id'] =='秒杀订单'){
|
|
if($where['combination_id'] =='秒杀订单'){
|
|
|
$model = $model->where($aler.'seckill_id',">",0);
|
|
$model = $model->where($aler.'seckill_id',">",0);
|
|
|
}
|
|
}
|
|
|
|
|
+ if($where['combination_id'] =='砍价订单'){
|
|
|
|
|
+ $model = $model->where($aler.'bargain_id',">",0);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
if(isset($where['type'])){
|
|
if(isset($where['type'])){
|
|
|
switch ($where['type']){
|
|
switch ($where['type']){
|
|
|
case 1:
|
|
case 1:
|
|
|
- $model = $model->where($aler.'combination_id',0)->where($aler.'seckill_id',0);
|
|
|
|
|
|
|
+ $model = $model->where($aler.'combination_id',0)->where($aler.'seckill_id',0)->where($aler.'bargain_id',0);
|
|
|
break;
|
|
break;
|
|
|
case 2:
|
|
case 2:
|
|
|
- $model = $model->where($aler.'combination_id',">",0)->where($aler.'pink_id',">",0);
|
|
|
|
|
|
|
+// $model = $model->where($aler.'combination_id',">",0)->where($aler.'pink_id',">",0);
|
|
|
|
|
+ $model = $model->where($aler.'combination_id',">",0);
|
|
|
break;
|
|
break;
|
|
|
case 3:
|
|
case 3:
|
|
|
$model = $model->where($aler.'seckill_id',">",0);
|
|
$model = $model->where($aler.'seckill_id',">",0);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case 4:
|
|
|
|
|
+ $model = $model->where($aler.'bargain_id',">",0);
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -670,7 +708,7 @@ HTML;
|
|
|
switch ($where['type']){
|
|
switch ($where['type']){
|
|
|
case 1:
|
|
case 1:
|
|
|
//普通商品
|
|
//普通商品
|
|
|
- $model=$model->where('combination_id',0)->where('seckill_id',0);
|
|
|
|
|
|
|
+ $model=$model->where('combination_id',0)->where('seckill_id',0)->where('bargain_id',0);
|
|
|
break;
|
|
break;
|
|
|
case 2:
|
|
case 2:
|
|
|
//拼团商品
|
|
//拼团商品
|
|
@@ -897,22 +935,31 @@ HTML;
|
|
|
];
|
|
];
|
|
|
if($postageData['delivery_type'] == 'send'){//送货
|
|
if($postageData['delivery_type'] == 'send'){//送货
|
|
|
$goodsName = StoreOrderCartInfo::getProductNameList($order['id']);
|
|
$goodsName = StoreOrderCartInfo::getProductNameList($order['id']);
|
|
|
- $group = array_merge($group,[
|
|
|
|
|
- 'keyword1'=>$goodsName,
|
|
|
|
|
- 'keyword2'=>$order['pay_type'] == 'offline' ? '线下支付' : date('Y/m/d H:i',$order['pay_time']),
|
|
|
|
|
- 'keyword3'=>$order['user_address'],
|
|
|
|
|
- 'keyword4'=>$postageData['delivery_name'],
|
|
|
|
|
- 'keyword5'=>$postageData['delivery_id']
|
|
|
|
|
- ]);
|
|
|
|
|
- WechatTemplateService::sendTemplate($openid,WechatTemplateService::ORDER_DELIVER_SUCCESS,$group,$url);
|
|
|
|
|
-
|
|
|
|
|
- }else if($postageData['delivery_type'] == 'express'){//发货
|
|
|
|
|
- $group = array_merge($group,[
|
|
|
|
|
- 'keyword1'=>$order['order_id'],
|
|
|
|
|
- 'keyword2'=>$postageData['delivery_name'],
|
|
|
|
|
- 'keyword3'=>$postageData['delivery_id']
|
|
|
|
|
- ]);
|
|
|
|
|
- WechatTemplateService::sendTemplate($openid,WechatTemplateService::ORDER_POSTAGE_SUCCESS,$group,$url);
|
|
|
|
|
|
|
+ if($order['is_channel']){
|
|
|
|
|
+ //小程序送货模版消息
|
|
|
|
|
+ RoutineTemplate::sendOrderPostage($order);
|
|
|
|
|
+ }else{//公众号
|
|
|
|
|
+ $group = array_merge($group,[
|
|
|
|
|
+ 'keyword1'=>$goodsName,
|
|
|
|
|
+ 'keyword2'=>$order['pay_type'] == 'offline' ? '线下支付' : date('Y/m/d H:i',$order['pay_time']),
|
|
|
|
|
+ 'keyword3'=>$order['user_address'],
|
|
|
|
|
+ 'keyword4'=>$postageData['delivery_name'],
|
|
|
|
|
+ 'keyword5'=>$postageData['delivery_id']
|
|
|
|
|
+ ]);
|
|
|
|
|
+ WechatTemplateService::sendTemplate($openid,WechatTemplateService::ORDER_DELIVER_SUCCESS,$group,$url);
|
|
|
|
|
+ }
|
|
|
|
|
+ }else if($postageData['delivery_type'] == 'express') {//发货
|
|
|
|
|
+ if ($order['is_channel']) {
|
|
|
|
|
+ //小程序发货模版消息
|
|
|
|
|
+ RoutineTemplate::sendOrderPostage($order);
|
|
|
|
|
+ } else {//公众号
|
|
|
|
|
+ $group = array_merge($group, [
|
|
|
|
|
+ 'keyword1' => $order['order_id'],
|
|
|
|
|
+ 'keyword2' => $postageData['delivery_name'],
|
|
|
|
|
+ 'keyword3' => $postageData['delivery_id']
|
|
|
|
|
+ ]);
|
|
|
|
|
+ WechatTemplateService::sendTemplate($openid, WechatTemplateService::ORDER_POSTAGE_SUCCESS, $group, $url);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
/**
|
|
/**
|
|
@@ -986,4 +1033,67 @@ HTML;
|
|
|
public static function getOrderPayMonthCount($is_promoter = 0){
|
|
public static function getOrderPayMonthCount($is_promoter = 0){
|
|
|
return self::where('o.paid',1)->alias('o')->whereTime('o.pay_time','last month')->join('User u','u.uid=o.uid')->where('u.is_promoter',$is_promoter)->count();
|
|
return self::where('o.paid',1)->alias('o')->whereTime('o.pay_time','last month')->join('User u','u.uid=o.uid')->where('u.is_promoter',$is_promoter)->count();
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /** 订单收货处理积分
|
|
|
|
|
+ * @param $order
|
|
|
|
|
+ * @return bool
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function gainUserIntegral($order)
|
|
|
|
|
+ {
|
|
|
|
|
+ if($order['gain_integral'] > 0){
|
|
|
|
|
+ $userInfo = User::get($order['uid']);
|
|
|
|
|
+ ModelBasic::beginTrans();
|
|
|
|
|
+ $res1 = false != User::where('uid',$userInfo['uid'])->update(['integral'=>bcadd($userInfo['integral'],$order['gain_integral'],2)]);
|
|
|
|
|
+ $res2 = false != UserBill::income('购买商品赠送积分',$order['uid'],'integral','gain',$order['gain_integral'],$order['id'],bcadd($userInfo['integral'],$order['gain_integral'],2),'购买商品赠送'.floatval($order['gain_integral']).'积分');
|
|
|
|
|
+ $res = $res1 && $res2;
|
|
|
|
|
+ ModelBasic::checkTrans($res);
|
|
|
|
|
+ return $res;
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /** 收货后发送模版消息
|
|
|
|
|
+ * @param $order
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function orderTakeAfter($order)
|
|
|
|
|
+ {
|
|
|
|
|
+ if($order['is_channel']){//小程序
|
|
|
|
|
+
|
|
|
|
|
+ }else{
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+// $openid = WechatUser::getOpenId($order['uid']);
|
|
|
|
|
+// RoutineTemplateService::sendTemplate($openid,RoutineTemplateService::ORDER_TAKE_SUCCESS,[
|
|
|
|
|
+// 'first'=>'亲,您的订单已成功签收,快去评价一下吧',
|
|
|
|
|
+// 'keyword1'=>$order['order_id'],
|
|
|
|
|
+// 'keyword2'=>'已收货',
|
|
|
|
|
+// 'keyword3'=>date('Y/m/d H:i',time()),
|
|
|
|
|
+// 'keyword4'=>implode(',',StoreOrderCartInfo::getProductNameList($order['id'])),
|
|
|
|
|
+// 'remark'=>'点击查看订单详情'
|
|
|
|
|
+// ],Url::build('My/order',['uni'=>$order['order_id']],true,true));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static function integralBack($id){
|
|
|
|
|
+ $order = self::get($id)->toArray();
|
|
|
|
|
+ if(!(float)bcsub($order['use_integral'],0,2) && !$order['back_integral']) return true;
|
|
|
|
|
+ if($order['back_integral'] && !(int)$order['use_integral']) return true;
|
|
|
|
|
+ ModelBasic::beginTrans();
|
|
|
|
|
+ $data['back_integral'] = bcsub($order['use_integral'],$order['use_integral'],0);
|
|
|
|
|
+ if(!$data['back_integral']) return true;
|
|
|
|
|
+ $data['use_integral'] = 0;
|
|
|
|
|
+ $data['deduction_price'] = 0.00;
|
|
|
|
|
+ $data['pay_price'] = 0.00;
|
|
|
|
|
+ $data['coupon_id'] = 0.00;
|
|
|
|
|
+ $data['coupon_price'] = 0.00;
|
|
|
|
|
+ $res4 = true;
|
|
|
|
|
+ $integral = User::where('uid',$order['uid'])->value('integral');
|
|
|
|
|
+ $res1 = User::bcInc($order['uid'],'integral',$data['back_integral'],'uid');
|
|
|
|
|
+ $res2 = UserBill::income('商品退积分',$order['uid'],'integral','pay_product_integral_back',$data['back_integral'],$order['id'],bcadd($integral,$data['back_integral'],2),'订单退积分'.floatval($data['back_integral']).'积分到用户积分');
|
|
|
|
|
+ $res3 = self::edit($data,$id);
|
|
|
|
|
+ if($order['coupon_id']) $res4 = StoreCouponUser::recoverCoupon($order['coupon_id']);
|
|
|
|
|
+ StoreOrderStatus::setStatus($id,'integral_back','商品退积分:'.$data['back_integral']);
|
|
|
|
|
+ $res = $res1 && $res2 && $res3 && $res4;
|
|
|
|
|
+ ModelBasic::checkTrans($res);
|
|
|
|
|
+ return $res;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|