OrderLogic.php
12.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
<?php
/**
* tpshop
* ============================================================================
* 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
* 网站地址: http://www.tp-shop.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* Date: 2015-09-14
*/
namespace app\admin\logic;
use think\Model;
use think\Db;
class OrderLogic extends Model
{
/**
* @param array $condition 搜索条件
* @param string $order 排序方式
* @param int $start limit开始行
* @param int $page_size 获取数量
*/
public function getOrderList($condition,$order='',$start=0,$page_size=20){
$res = M('order')->alias('a')->join('pick_up b','a.pickup_id=b.pickup_id')->where($condition)->limit("$start,$page_size")->order($order)->select();
return $res;
}
/*
* 获取订单商品详情
*/
public function getOrderGoods($order_id){
$sql = "SELECT g.sku as sku0,g.*,o.*,(o.goods_num * o.account) AS goods_total FROM __PREFIX__order_goods o ".
"LEFT JOIN __PREFIX__goods g ON o.goods_id = g.goods_id WHERE o.order_id = $order_id";
$res = DB::query($sql);
return $res;
}
/*
* 获取订单商品详情
*/
public function getOrderGoods1($order_id){
$sql = "SELECT g.sku as sku0,g.*,o.*,(o.goods_num * o.account) AS goods_total FROM __PREFIX__order_goods o ".
"LEFT JOIN __PREFIX__goods g ON o.goods_id = g.goods_id WHERE o.order_id = $order_id and o.is_send<2";
$res = DB::query($sql);
return $res;
}
/*
* 获取订单信息
*/
public function getOrderInfo($order_id)
{
// 订单总金额查询语句
$sql='select a.*,b.*,s.store_name,s.store_name,s.store_logo,s.store_contact,s.store_tel,s.store_address,s.store_qqlist,s.ERPId,s.soft_cloud,s.api_token,s.store_desc,d.invoice_no,u.mobile as user_mobile,u.vipname as user_vipname from wxd_order a';
$sql.=" left join wxd_users u on a.user_id=u.user_id";
$sql.=" LEFT JOIN wxd_pick_up b on a.pickup_id=b.pickup_id LEFT JOIN wxd_store s on a.store_id=s.store_id LEFT JOIN wxd_delivery_doc d on a.order_sn=d.order_sn where ";
$sql.=' a.order_id='.$order_id;
$rs=Db::query($sql);
if($rs) {
$order=$rs[0];
// $order['address2'] = $this->getAddressName($order['province'], $order['city'], $order['district']);
$order['address2'] = $order['more_address'] . $order['address'];
$order = set_btn_order_status($order);
return $order;
}
}
/*
* 根据商品型号获取商品
*/
public function get_spec_goods($goods_id_arr){
if(!is_array($goods_id_arr)) return false;
foreach($goods_id_arr as $key => $val)
{
$arr = array();
$goods = M('goods')->where("goods_id = $key")->find();
$arr['goods_id'] = $key; // 商品id
$arr['goods_name'] = $goods['goods_name'];
$arr['goods_sn'] = $goods['goods_sn'];
$arr['market_price'] = $goods['market_price'];
$arr['goods_price'] = $goods['shop_price'];
$arr['cost_price'] = $goods['cost_price'];
$arr['member_goods_price'] = $goods['shop_price'];
foreach($val as $k => $v)
{
$arr['goods_num'] = $v['goods_num']; // 购买数量
// 如果这商品有规格
if($k != 'key')
{
$arr['spec_key'] = $k;
$spec_goods = M('spec_goods_price')->where("goods_id = $key and `key` = '{$k}'")->find();
$arr['spec_key_name'] = $spec_goods['key_name'];
$arr['member_goods_price'] = $arr['goods_price'] = $spec_goods['price'];
$arr['sku'] = $spec_goods['sku']; // 参考 sku http://www.zhihu.com/question/19841574
}
$order_goods[] = $arr;
}
}
return $order_goods;
}
/*
* 订单操作记录
*/
public function orderActionLog($order_id,$action,$note='',$admin_id=0){
$order = M('order')->where(array('order_id'=>$order_id))->find();
$data['store_id'] = $order['store_id'];
$data['order_id'] = $order_id;
if (session('admin_id'))
{
$admin_id=session('admin_id');
$data['user_type'] =1;
}
$data['action_user'] =$admin_id;
$data['action_note'] = $note;
$data['order_status'] = $order['order_status'];
$data['pay_status'] = $order['pay_status'];
$data['shipping_status'] = $order['shipping_status'];
$data['log_time'] = time();
$data['status_desc'] = $action;
return M('order_action')->add($data);//订单操作记录
}
/*
* 获取订单商品总价格
*/
public function getGoodsAmount($order_id){
$sql = "SELECT SUM(goods_num * goods_price) AS goods_amount FROM __PREFIX__order_goods WHERE order_id = {$order_id}";
$res = DB::query($sql);
return $res[0]['goods_amount'];
}
/**
* 得到发货单流水号
*/
public function get_delivery_sn()
{
/* 选择一个随机的方案 */send_http_status('310');
mt_srand((double) microtime() * 1000000);
return date('YmdHi') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
}
/*
* 获取当前可操作的按钮
*/
public function getOrderButton($order){
/*
* 操作按钮汇总 :付款、设为未付款、确认、取消确认、无效、去发货、确认收货、申请退货
*
*/
$os = $order['order_status'];//订单状态
$ss = $order['shipping_status'];//发货状态
$ps = $order['pay_status'];//支付状态
$btn = array();
if($order['pay_code'] == 'cod') {
if($os == 0 && $ss == 0){
$btn['confirm'] = '确认';
}elseif($os == 1 && $ss == 0 ){
$btn['delivery'] = '去发货';
$btn['cancel'] = '取消确认';
}elseif($ss == 1 && $os == 1 && $ps == 0){
$btn['pay'] = '付款';
}elseif($ps == 1 && $ss == 1 && $os == 1){
$btn['pay_cancel'] = '设为未付款';
}
}else{
if($ps == 0 && $os == 0){
$btn['pay'] = '付款';
}elseif($os == 0 && $ps == 1){
$btn['pay_cancel'] = '设为未付款';
$btn['confirm'] = '确认';
}elseif($os == 1 && $ps == 1 && $ss==0){
$btn['cancel'] = '取消确认';
$btn['delivery'] = '去发货';
}
}
if($ss == 1 && $os == 1 && $ps == 1){
$btn['delivery_confirm'] = '确认收货';
$btn['refund'] = '申请退货';
}elseif($os == 2 || $os == 4){
$btn['refund'] = '申请退货';
}elseif($os == 3 || $os == 5){
$btn['remove'] = '移除';
}
if($os != 5){
$btn['invalid'] = '无效';
}
return $btn;
}
public function orderProcessHandle($order_id,$act,$ext=array()){
$updata = array();
switch ($act){
case 'pay': //付款
$order_sn = M('order')->where("order_id = $order_id")->getField("order_sn");
update_pay_status($order_sn,$ext); // 调用确认收货按钮
return true;
case 'pay_cancel': //取消付款
$updata['pay_status'] = 0;
$this->order_pay_cancel($order_id);
return true;
case 'confirm': //确认订单
$updata['order_status'] = 1;
break;
case 'cancel': //取消确认
$updata['order_status'] = 0;
break;
case 'invalid': //作废订单
$updata['order_status'] = 5;
break;
case 'remove': //移除订单
$this->delOrder($order_id);
break;
case 'delivery_confirm'://确认收货
confirm_order($order_id); // 调用确认收货按钮
return true;
default:
return true;
}
return M('order')->where("order_id=$order_id")->save($updata);//改变订单状态
}
//管理员取消付款
function order_pay_cancel($order_id)
{
//如果这笔订单已经取消付款过了
$count = M('order')->where("order_id = $order_id and pay_status = 1")->count(); // 看看有没已经处理过这笔订单 支付宝返回不重复处理操作
if($count == 0) return false;
// 找出对应的订单
$order = M('order')->where("order_id = $order_id")->find();
// 增加对应商品的库存
$orderGoodsArr = M('OrderGoods')->where("order_id = $order_id")->select();
foreach($orderGoodsArr as $key => $val)
{
if(!empty($val['spec_key']))// 有选择规格的商品
{ // 先到规格表里面增加数量 再重新刷新一个 这件商品的总数量
M('SpecGoodsPrice')->where("goods_id = {$val['goods_id']} and `key` = '{$val['spec_key']}'")->setInc('store_count',$val['goods_num']);
refresh_stock($val['goods_id']);
}else{
M('Goods')->where("goods_id = {$val['goods_id']}")->setInc('store_count',$val['goods_num']); // 增加商品总数量
}
M('Goods')->where("goods_id = {$val['goods_id']}")->setDec('sales_sum',$val['goods_num']); // 减少商品销售量
//更新活动商品购买量
if($val['prom_type']==1 || $val['prom_type']==2){
$prom = get_goods_promotion($val['goods_id']);
if($prom['is_end']==0){
$tb = $val['prom_type']==1 ? 'flash_sale' : 'group_buy';
M($tb)->where("id=".$val['prom_id'])->setDec('buy_num',$val['goods_num']);
M($tb)->where("id=".$val['prom_id'])->setDec('order_num');
}
}
}
// 根据order表查看消费记录 给他会员等级升级 修改他的折扣 和 总金额
M('order')->where("order_id=$order_id")->save(array('pay_status'=>0));
update_user_level($order['user_id']);
// 记录订单操作日志
logOrder($order['order_id'],'订单取消付款','付款取消',$order['user_id']);
//分销设置
M('rebate_log')->where("order_id = {$order['order_id']}")->save(array('status'=>0));
}
/**
* 处理发货单
* @param array $data 查询数量
*/
public function deliveryHandle($data){
$order = $this->getOrderInfo($data['order_id']);
$orderGoods = $this->getOrderGoods($data['order_id']);
$selectgoods = $data['goods'];
$data['order_sn'] = $order['order_sn'];
$data['delivery_sn'] = $this->get_delivery_sn();
$data['zipcode'] = $order['zipcode'];
$data['user_id'] = $order['user_id'];
$data['admin_id'] = getAdminId();
$data['consignee'] = $order['consignee'];
$data['mobile'] = $order['mobile'];
$data['country'] = $order['country'];
$data['province'] = $order['province'];
$data['city'] = $order['city'];
$data['district'] = $order['district'];
$data['address'] = $order['address'];
$data['shipping_code'] = $order['shipping_code'];
$data['shipping_name'] = $order['shipping_name'];
$data['shipping_price'] = $order['shipping_price'];
$data['create_time'] = time();
$did = M('delivery_doc')->add($data);
$is_delivery = 0;
foreach ($orderGoods as $k=>$v){
if($v['is_send'] == 1){
$is_delivery++;
}
if($v['is_send'] == 0 && in_array($v['rec_id'],$selectgoods)){
$res['is_send'] = 1;
$res['delivery_id'] = $did;
$r = M('order_goods')->where("rec_id=".$v['rec_id'])->save($res);//改变订单商品发货状态
$is_delivery++;
}
}
$updata['shipping_time'] = time();
if($is_delivery == count($orderGoods)){
$updata['shipping_status'] = 1;
}else{
$updata['shipping_status'] = 2;
}
M('order')->where("order_id=".$data['order_id'])->save($updata);//改变订单状态
$s = $this->orderActionLog($order['order_id'],'delivery',$data['note']);//操作日志
return $s && $r;
}
/**
* 获取地区名字
* @param int $p
* @param int $c
* @param int $d
* @return string
*/
public function getAddressName($p=0,$c=0,$d=0){
$p = M('region')->where(array('id'=>$p))->field('name')->find();
$c = M('region')->where(array('id'=>$c))->field('name')->find();
$d = M('region')->where(array('id'=>$d))->field('name')->find();
return $p['name'].','.$c['name'].','.$d['name'].',';
}
/**
* 删除订单
*/
function delOrder($order_id){
$a = M('order')->where(array('order_id'=>$order_id))->delete();
$b = M('order_goods')->where(array('order_id'=>$order_id))->delete();
return $a && $b;
}
}