Files
duolamaojiazhen/application/admin/logic/OrderautoLogic.php
2025-12-22 13:59:40 +08:00

705 lines
27 KiB
PHP

<?php
namespace app\admin\logic;
use app\common\logic\AccountLogLogic;
use app\admin\logic\UserLogic;
use app\common\server\UrlServer;
use think\Db;
use think\Exception;
class OrderautoLogic{
/**
* 显示查询列表的内容
* @param $get
* @return array
*/
public static function lists($get){
$where = [];
//判断已经支付的订单
$where[] = ['pay_status', '=', 1];
if(isset($get['type']) && $get['type'] != ''){
$where[] = ['static','=',$get['type']];
}
//等级查询
if(isset($get['id']) && $get['id'] != ''){
$where[] = ['order_sn','=',$get['id']];
}
if(isset($get['name']) && $get['name']!= ''){
$where[] = ['consignee', 'like', '%' . $get['name'] . '%'];
}
//电话查询
if(isset($get['phone']) && $get['phone'] != ''){
$where[] = ['mobile','=',$get['phone']];
}
//地区查询
if(isset($get['area_id']) && $get['area_id']!= ''){
$where[] = ['area_id','=',$get['area_id']];
}
// 执行状态查询
if(isset($get['status']) && $get['status']!= ''){
$where[] = ['status','=',$get['status']];
}
// 执行状态查询
if(isset($get['admin']) && $get['admin']!= ''){
$where[] = ['admin_id','=',$get['admin']];
}
// 订单的来源查询
if(isset($get['pid']) && $get['pid']!= ''){
$where[] = ['channel_id','=',$get['pid']];
}
//执行时间
if(isset($get['start_time']) && $get['start_time']!=''){
$where[] = ['create_time','>=',strtotime($get['start_time'])];
}
if(isset($get['end_time']) && $get['end_time']!=''){
$where[] = ['create_time','<=',strtotime($get['end_time'])];
}
//订单的来源
$channel = Db::name('orderchannel')->column('name','id');
//订单的类型
$brand = Db::name('goods_brand')->where('del',0)->column('name','id');
$order_count = Db::name('order')
->where($where)
->count();
$order_list = Db::name('order')
->where($where)
->field('password,pay_password,salt',true)
->page($get['page'],$get['limit'])
->order('id desc')
->select();
foreach ($order_list as &$item){
$item['channel'] = '系统自助下单';
$item['create_time']=date("Y-m-d",$item['create_time']);
if(isset($channel[$item['channel_id']])){
$item['channel'] = $channel[$item['channel_id']];
}
if(isset($brand[$item['type_id']])){
$item['brand'] = $brand[$item['type_id']];
}
//获取到用户信息
$user=Db::name('user_address')->where('id',$item['user_id'])->find();
if($user){
$item['nickname']=$user['contact'];
if($user['wx']==2){
$item['wx']='已添加企业微信';
}else{
$item['wx']='未添加企业微信';
}
$item['areas']=$user['areas'];
$item['staff_remarks']=$user['staff_remarks'];
$item['admin_remarks']=$user['admin_remarks'];
$item['pet']=$user['pet'];
$item['hbl']=$user['hbl'];
}
$userimg=Db::name('user')->where('id',$item['user_id'])->find();
if($userimg){
$item['avatar']=$userimg['avatar'];
}
//获取订单的商品
$goods=Db::name('goods')->where('id',$item['goods_id'])->find();
if($goods){
$item['goods_name']=$goods['name'];
}
$item['sycs']=Db::name('order_exe')->where('order_sn',$item['order_sn'])->where('status',1)->count();
if($item['code']==0){
$update=Db::name('order')->where('order_sn',$item['order_sn'])->update(['static'=>2]);
}
if($item['number']==$item['sycs']){
$update=Db::name('order')->where('order_sn',$item['order_sn'])->update(['static'=>2]);
}
}
return ['count'=>$order_count , 'lists'=>$order_list];
}
/**
* 选择客户的列表
* @param $get
* @return array
*/
public static function getUserList($get,$is_item = false){
$where = [];
$where[] = ['del', '=', '0'];
//根据客户电话查询
if(isset($get['phone']) && $get['phone'] != ''){
$phone=Db::name('user_address')->whereLike('phone',$get['phone'])->find();
$where[] = ['user_id','=',$phone['user_id']];
}
//根据客户姓名查询
if(isset($get['name']) && $get['name'] != ''){
$phone=Db::name('user_address')->whereLike('consignee',$get['name'])->find();
$where[] = ['user_id','=',$phone['user_id']];
}
$goods_count = Db::name('user')
->where($where)
->count();
$goods_list = Db::name('user')
->where($where)
->page($get['page'], $get['limit'])
->column('*','id');
foreach ($goods_list as &$item) {
$item['avatar'] = UrlServer::getFileUrl($item['avatar']);
$adder=Db::name('user_address')->where('user_id',$item['user_id'])->find();
$item['phone']= $adder['phone'];
$item['name']= $adder['consignee'];
}
return ['count' => $goods_count, 'list' =>array_values($goods_list)];
}
/**
* 增加预排的订单
* @param $get
* @return array
*/
public static function add($post,$admin){
$orderinfo=OrderLogic::orderinfo($post['order_sn']);
$logdate=[
'admin_id'=>$admin,
'order_sn'=>$orderinfo['id'],
'show'=>'创建预排订单',
'cram_time'=>time()
];
$log=Db::name('log_order')->data($logdate)->insert();
$count=count(explode(',',$post['privilege']));
$staff=explode(',',$post['privilege']);
$post['fworder_sn']=createSn('order_exe', 'fworder_sn', '', 6);
//非常固定单执行的代码
if($post['type']==3){
for($i=0;$i<$post['number'];$i++){
$data=[
'order_sn'=>$post['order_sn'],
'remark'=>$post['remark'],
'create_time'=>time(),
'fworder_sn'=> $post['fworder_sn'],
'date'=>$post['end_time'],
'xq'=>UserLogic::Get_Chinese_WeekDay($post['end_time']),
'type'=>$post['type'],
'status'=>0,
'addtime'=>$post['addtim'],
'autotime'=>strtotime($post['end_time']),
];
$list=Db::name('order_exe')->data($data)->insert();
}
if($list){
$order=db::name('order')->where('order_sn',$post['order_sn'])->update(['code'=>$orderinfo['code']-$post['number']]);
return $list;
}
}
//判断日期固定派单
else if($post['type']==1){
if($post['datas']==''){
return $list=3;
}
//段一个人去执行的炒作
for($s=0;$s<$count;$s++){
$data=[
'order_sn'=>$post['order_sn'],
'staff_id'=>$staff[$s++],
'remark'=>$post['remark'],
'create_time'=>time(),
'fworder_sn'=> $post['fworder_sn'],
'xq'=>UserLogic::Get_Chinese_WeekDay($post['end_time']),
'type'=>3,
'status'=>0,
'addtime'=>$post['addtims'],
'autotime'=>strtotime($post['end_time']),
];
for($i=0;$i<$post['datas'];$i+1){
$number=$post['datatime']*$i++;
$time=strtotime($post['end_time']);
$seconds_to= $number*24*60*60;
$data['autotime']=$time+$seconds_to;
$data['date']=date("Y-m-d H:i:s", $data['autotime']);;
$list=Db::name('order_exe')->data($data)->insert();
}
if($list){
$order=db::name('order')->where('order_sn',$post['order_sn'])->update(['code'=>$orderinfo['code']-$post['datas']]);
return $list;
}
}
return $list;
}
else if($post['type']==2){
if($count!=(int)$post['number']){
return $list=3;
}
if(isset($post['arr1_data'])) {
$data1=$post['arr1_data'];
}else{
$data1=[];
}
//判断获取数组二为空
if(isset($post['arr2_data'])) {
$data2=$post['arr2_data'];
}else{
$data2=[];
}
foreach($data1 as $v=>$k){
foreach($data1[$v] as $item=>$s){
$data1[$v][$item]['order_sn']=$post['order_sn'];
$data1[$v][$item]['fworder_sn']= $post['fworder_sn'];
$data1[$v][$item]['create_time']=time();
$data1[$v][$item]['addtime']=1;
$data1[$v][$item]['staff_id']=$staff[0];
$data1[$v][$item]['remark']=$post['remark'];
}
}
foreach($data2 as $v=>$k){
foreach($data2[$v] as $item=>$s){
$data2[$v][$item]['order_sn']=$post['order_sn'];
$data2[$v][$item]['fworder_sn']= $post['fworder_sn'];
$data2[$v][$item]['create_time']=time();
$data2[$v][$item]['addtime']=2;
$data2[$v][$item]['staff_id']=$staff[0];
$data2[$v][$item]['remark']=$post['remark'];
}
}
$data=array_merge($data1,$data2);
$one_dimensional_array = call_user_func_array('array_merge', $data);
foreach($one_dimensional_array as $v=>$k){
$list=Db::name('order_exe')->data($one_dimensional_array[$v])->insert();
}
//判断是不是俩个人
if($count==2){
$data1=$post['arr1_data'];
//判断获取数组二为空
if(isset($post['arr2_data'])) {
$data2=$post['arr2_data'];
}else{
$data2=[];
}
foreach($data1 as $v=>$k){
foreach($data1[$v] as $item=>$s){
$data1[$v][$item]['order_sn']=$post['order_sn'];
$data1[$v][$item]['fworder_sn']= $post['fworder_sn'];
$data1[$v][$item]['create_time']=time();
$data1[$v][$item]['addtime']=1;
$data1[$v][$item]['staff_id']=$staff[1];
$data1[$v][$item]['remark']=$post['remark'];
}
}
foreach($data2 as $v=>$k){
foreach($data2[$v] as $item=>$s){
$data2[$v][$item]['order_sn']=$post['order_sn'];
$data2[$v][$item]['fworder_sn']= $post['fworder_sn'];
$data2[$v][$item]['create_time']=time();
$data2[$v][$item]['addtime']=2;
$data2[$v][$item]['staff_id']=$staff[1];
$data2[$v][$item]['remark']=$post['remark'];
}
}
$data=array_merge($data1,$data2);
$one_dimensional_array = call_user_func_array('array_merge', $data);
foreach($one_dimensional_array as $v=>$k){
$list=Db::name('order_exe')->data($one_dimensional_array[$v])->insert();
}
}
}
$order=db::name('order')->where('order_sn',$post['order_sn'])->update(['code'=>0,'type'=>1]);
}
/**
* 获取渠道来源
* @return array
*/
public static function infoPosition($pid)
{
$position_list = Db::name('orderchannel')
->where(['id' => $pid])
->group('name')
->column('id,name', 'id');
asort($position_list);
return $position_list;
}
/**
* 修改员工的基础信息
* @param $id 员工的ID
* @return array
*/
public static function edits($post){
$data = [
'updatetime' => time(),
'name'=>$post['name'],
'mobile'=>$post['mobile'],
'sex'=>$post['sex'],
'age'=>$post['age'],
'group_id'=>$post['brand_id'],
'first_order'=>2,
'identity'=>$post['identity'],
'lng'=>$post['lng'],
'addr'=>$post['addr'],
'avatar'=>$post['image'],
'lat'=>$post['lat'],
'province'=>$post['first_category_id'],
'city'=>$post['second_category_id'],
'area'=>$post['third_category_id'],
];
$list=Db::name('staff')->where('id',$post['id'])->data($data)->update();
return $list;
}
public static function exportFile($get)
{
$where[] = ['del','=', '0'];
//查询
if(isset($get['keyword']) && $get['keyword']){
$where[] = [$get['keyword_type'],'like','%'.$get['keyword'].'%'];
}
//等级查询
if(isset($get['level']) && $get['level'] != ''){
$where[] = ['level','=',$get['level']];
}
//分组查询
if(isset($get['group_id']) && $get['group_id']){
$where[] = ['group_id','=',$get['group_id']];
}
//消费金额
if(isset($get['total_amount_start']) && $get['total_amount_start']){
$where[] = ['total_order_amount','>=',$get['total_amount_start']];
}
if(isset($get['total_amount_end']) && $get['total_amount_end']){
$where[] = ['total_order_amount','<=',$get['total_amount_end']];
}
//注册时间
if(isset($get['start_time']) && $get['start_time']!=''){
$where[] = ['create_time','>=',strtotime($get['start_time'])];
}
if(isset($get['end_time']) && $get['end_time']!=''){
$where[] = ['create_time','<=',strtotime($get['end_time'])];
}
$user_list = Db::name('user')->where($where)
->order('id desc')
->select();
//会员分组
$user_group = Db::name('user_group')->where(['del'=>0])->column('name','id');
//会员等级
$user_level = Db::name('user_level')->where(['del'=>0])->column('name','id');
// 所有会员信息
$all_user_list = User::where(['del'=>0])->column('sn,nickname,mobile,level','id');
$exportData = [];
foreach ($user_list as $item){
$groupName = '-';
$levelName = '无等级';
//会员所属分组
if(isset($user_group[$item['group_id']])){
$groupName = $user_group[$item['group_id']];
}
if(isset($user_level[$item['level']])){
$levelName = $user_level[$item['level']];
}
$referrer_user_info = '';
$referrer_nickname = '';
$referrer_sn = '';
$referrer_mobile = '';
$referrer_level_name = '-';
if(isset($all_user_list[$item['first_leader']])){
$referrer_user = $all_user_list[$item['first_leader']];
$referrer_nickname = $referrer_user['nickname'];
$referrer_sn = $referrer_user['sn'];
$referrer_mobile = $referrer_user['mobile'];
if(isset($user_level[$referrer_user['level']])){
$referrer_level_name =$user_level[$referrer_user['level']];
}
$referrer_user_info.= '【昵称:'.$referrer_nickname.' 编号:'.$referrer_sn. ' 手机:'. $referrer_mobile . ' 等级:'. $referrer_level_name.'】';
}
$loginTime = date('Y-m-d H:i:s', $item['login_time']);
$exportData[] = [$item['sn'], $item['nickname'], $levelName, $groupName, $referrer_user_info, $item['total_order_amount'], $item['user_money'], $item['user_integral'], $loginTime];
}
$exportTitle = ['会员编号', '会员昵称', '会员等级', '会员分组', '推荐人信息', '消费金额', '账户余额', '积分', '最后登录时间'];
$exportExt = 'xls';
return ['exportTitle'=> $exportTitle, 'exportData' => $exportData, 'exportExt'=>$exportExt, 'exportName'=>'会员列表'.date('Y-m-d H:i:s')];
}
/**
* Notes: 获取会员信息
* @param $id
* @param bool $getdata 是否获取原始数据
* @param bool $expenditure 是否显示会员消费
* @return User|mixed
*/
public static function getUser($id,$getdata = false,$expenditure = false){
$user = User::get($id);
$user->append(['level_name','group_name']);
if($getdata){
$user = $user->getData();
if($user['birthday']) $user['birthday'] = date('Y-m-d',$user['birthday']);
}
$user['abs_avatar'] = UrlServer::getFileUrl($user['avatar']);
if($expenditure){
//本月的消费金额
$month_amount = Db::name('order')
->where('order_status','not in',[Order::STATUS_CLOSE,Order::STATUS_WAIT_PAY])
->where(['user_id'=>$id,'pay_status'=>Pay::ISPAID])
->whereTime('create_time', 'month')
->sum('order_amount');
//本月的订单笔数
$month_num = Db::name('order')
->where('order_status','not in',[Order::STATUS_CLOSE,Order::STATUS_WAIT_PAY])
->where(['user_id'=>$id,'pay_status'=>Pay::ISPAID])
->whereTime('create_time', 'month')
->count();
//累计消费笔数
$total_num =Db::name('order')
->where('order_status','not in',[Order::STATUS_CLOSE,Order::STATUS_WAIT_PAY])
->where(['user_id'=>$id,'pay_status'=>Pay::ISPAID])
->sum('order_amount');
$avg_amount = Db::name('order')
->where('order_status','not in',[Order::STATUS_CLOSE,Order::STATUS_WAIT_PAY])
->where(['user_id'=>$id,'pay_status'=>Pay::ISPAID])
->avg('order_amount');
$user['month_amount'] = '¥'.round($month_amount,2);
$user['month_num'] = round($month_num,2);
$user['total_num'] = round($total_num,2);
$user['avg_amount'] = '¥'.round($avg_amount,2);
//分销会员
$user['distribution_tips'] = '否';
$user['superior_referrer'] = '-';
$user['superior_referrer_sn'] = '-';
if($user['is_distribution']){
$user['distribution_tips'] = '是';
$superior_referrer = Db::name('user')->where(['id'=>$user['first_leader']])->field('nickname,sn')->findOrEmpty();
$user['superior_referrer'] = '-';
$user['superior_referrer_sn'] = '-';
if($superior_referrer) {
$user['superior_referrer'] = $superior_referrer['nickname'];
$user['superior_referrer_sn'] = $superior_referrer['sn'];
}
}
// 头像
$user['avatar'] = UrlServer::getFileUrl($user['avatar']);
}
return $user;
}
/*
* 批量设置会员分组
*/
public static function setGroup($post){
return Db::name('user')->where(['id'=>$post['user_ids']])->update(['group_id'=>$post['group_id']]);
}
/*
* 根据订单编号查询订单编号
*/
public static function info($id){
$list=Db::name('order')->where('order_sn',$id)->find();
$ordernumber=Db::name('order_exe')->where('order_sn', $list['order_sn'])->where('status',0)->count();
$list['sycs']= $ordernumber;
$list['ysycs']= Db::name('order_exe')->where('order_sn', $list['order_sn'])->where('status',1)->count();
$list['ztcs']=Db::name('order_exe')->where('order_sn', $list['order_sn'])->where('status',3)->count();
return $list;
}
/*
* 查看预排的订单的
*/
public static function infolist($get){
$order=Db::name('order')->where('order_sn',$get['order_sn'])->find(); //获取订单的坐标
$orderexe=Db::name('order_exe')->where('order_sn',$get['order_sn'])->count(); //获取订单的总条数
$number= $orderexe- $order['number'];
if($number>0){
$del=Db::name('order_exe')->where('order_sn',$get['order_sn'])->order('autotime desc')->limit($number)->delete();
}
$list=Db::name('order_exe')->where('order_sn',$get['order_sn'])
->page($get['page'],$get['limit'])
->order('autotime asc')
->select();
$count=Db::name('order_exe')->where('order_sn',$get['order_sn'])
->order('autotime asc')
->count();
foreach ($list as &$item){
if($item['staff_id']==0){
$staff=[];
$staff['lat']='26.59064600';
$staff['lng']='106.67770700';
$item['staff_name']='无保洁';
$item['mobile']='无';
}else{
$staff=StaffLogic::infostaff($item['staff_id']); //获取员工定位
if($staff){
$item['staff_id']=$staff['id'];
$item['staff_name']=$staff['name'];
$item['staff_mobile']=$staff['mobile'];
$item['km']=number_format(UserLogic::haversine_distance($order['lat'], $order['lng'],$staff['lat'],$staff['lng'])/ 1000,1);
}
}
if(intval(($item['autotime']-time())/86400)>1){
$item['jldate']=intval(($item['autotime']-time())/86400);
}else{
$item['jldate']='-';
}
$item['autotime']=date("Y-m-d",$item['autotime']);
if($item['addtime']==1){
$item['addtime']="上午";
}else if($item['addtime']==2){
$item['addtime']="下午";
}
$item['consignee']=$order['consignee'];
$item['mobile']=$order['mobile'];
$item['address']=$order['address'];
}
return ['count'=>$count,'list' =>$list];
}
/*
* 修改固定排单的时间
*/
public static function eittime($id,$post){
$xq=UserLogic::Get_Chinese_WeekDay($post['end_time']); //获取星期
$date=date('Y-m-d',strtotime($post['end_time']));
$addtime=intval($post['addtime']);
return Db::name('order_exe')->where('id',$id)->update(['xq'=>$xq,'autotime'=>strtotime($post['end_time']),'addtime'=>$addtime,'staff_id'=>$post['privilege'],'date'=>$date,'staff_status'=>0]);
}
public static function staff($id,$post){
$count=count(explode(',',$post['privilege']));
$staff=explode(',',$post['privilege']);
if($count>=2){
return $list=2;
}else{
return Db::name('order_exe')->where('id',$id)->update(['staff_id'=>intval($post['privilege'])]);
}
}
public static function prent($id){
$list=Db::name('order')->where('id',$id)->update(['status'=>1]);
$order_id=OrderLogic::orderinfoid($id);
$order_exe=Db::name('order_exe')->where('order_sn',$order_id['order_sn'])->where('status',0)->update(['status'=>3]);
return $order_exe;
}
public static function prentsd($id){
$list=Db::name('order')->where('id',$id)->update(['status'=>0,'type'=>0]);
$order_id=OrderLogic::orderinfoid($id);
$order_exe=Db::name('order_exe')->where('order_sn',$order_id['order_sn'])->where('status',3)->update(['status'=>0]);
return $order_exe;
}
/**
* Notes: 订单备注
* @param $post
* @param string $type
* @return int|string
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public static function remarks($post, $type="get")
{
if ($type==='get') {
return Db::name('order_exe')->field('id,remark')
->where(['id'=>$post['id']])
->findOrEmpty();
} else {
return Db::name('order_exe')
->where(['id'=>$post['id']])
->update(['remark'=>$post['order_remarks']]);
}
}
/**
* Notes: 根据执行ID查询订单的经纬度
* @param $post
* @param string $type
* @return int|string
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public static function orderexeinfo($id){
$list=Db::name('order_exe')->where('id',$id)->find();
$order=OrderLogic::orderinfo($list['order_sn']);
$list['lng']= $order['lng'];
$list['lat']= $order['lat'];
$list['date']=date('Y-m-d H:i:s',strtotime($list['date']));
return $list;
}
public static function log($get){
$count=Db::name('log_order')->where('order_sn',$get['order_sn'])->count();
$lists=Db::name('log_order')->where('order_sn',$get['order_sn'])
->page($get['page'], $get['limit'])
->order('id desc')
->select();
foreach ($lists as &$item) {
$admin=Db::name('admin')->where('id',$item['admin_id'])->find();
$item['admin_name']=$admin['name'];
$item['createtime']=date("Y-m-d H:i:s",$item['cram_time']);
}
return ['count'=>$count , 'lists'=>$lists];
}
public static function orderlog($get){
$count=Db::name('log_orders')->where('order_sn',$get['order_sn'])->count();
$lists = Db::name('log_orders')
//->where('order_sn', 'like', '%' . $get['order_sn'] . '%')
->where('order_sn',$get['order_sn'])
->page($get['page'], $get['limit'])
->order('id desc')
->select();
foreach ($lists as &$item) {
$admin=Db::name('admin')->where('id',$item['admin_id'])->find();
$item['admin_name']=$admin['name'];
$item['createtime']=date("Y-m-d H:i:s",$item['cram_time']);
}
return ['count'=>$count , 'lists'=>$lists];
}
public static function orderinfo($get){
$data=Db::name('user_order_imges')->where('order_id',$get['id'])->find();
if($data){
$data['image1'] = json_decode($data['image1'],true);
$data['image2'] = json_decode($data['image2'],true);
$data['image3'] = json_decode($data['image3'],true);
foreach ($data['image1'] as $k=>$v){
$data['image1'][$k]['url'] = 'https://web.dulmao.com'.$v['url'];
}
foreach ($data['image2'] as $k=>$v){
$data['image2'][$k]['url'] = 'https://web.dulmao.com'.$v['url'];
}
foreach ($data['image3'] as $k=>$v){
$data['image3'][$k]['url'] = 'https://web.dulmao.com'.$v['url'];
}
return $data;
}
}
}