You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

301 lines
11 KiB

<?php
namespace app\service\order;
use app\model\AccountRatioDetail;
use app\model\AccountRatioSetting;
use app\model\Admin;
use app\model\Order;
use app\model\OrderGoodsDetail;
use app\model\OrderUser;
use app\model\PaySetting;
use app\model\UserAccountBill;
use app\service\BaseService;
use app\service\user\UserService;
class AccountCloseService extends BaseService
{
public function __construct()
{
parent::__construct();
}
public function getPaySetting(){
$setting = PaySetting::where('id', 1)->field('alipay,wechat_pay,ebank_pay')->find();
if(!$setting){
$setting = [
"alipay" => 0,
"wechat_pay" => 0,
"ebank_pay" => 0,
];
}
return $setting;
}
public function setPaySetting($alipay, $wechat_pay, $ebank_pay){
$setting = [
"alipay" => $alipay,
"wechat_pay" => $wechat_pay,
"ebank_pay" => $ebank_pay,
];
if(PaySetting::where('id', 1)->value('id')){
$flag = PaySetting::where('id', 1)->update($setting);
}else{
$flag = (new PaySetting())->insert($setting);
}
return $flag;
}
public function ratioList($rule_name, $user_id, $status, $createtime, $page, $limit){
$where = [];
$where['is_deleted'] = 0;
if(!empty($rule_name)){
$where['rule_name'] = $rule_name;
}
if(!empty($user_id)){
$where['user_id'] = $user_id;
}
if($status !== ""){
$where['status'] = $status;
}
if(!empty($createtime)){
$where['createtime'] = $createtime;
}
$search = $this->buildSearch(['rule_name', 'createtime', 'order'], $where);
$list = (new AccountRatioSetting())->list($search, $where, $limit, []);
$list->each(function ($item){
$item['username'] = Admin::where('id', $item['user_id'])->value('account_name');
return $item;
});
$list = $list->toArray();
$start = ($page - 1) * $limit + 1;
$end = $page * $limit;
if($list['total'] < $end){
$end = $list['total'];
}
if($list['total'] < $start){
$start = $end = $list['total'];
}
$list['start'] = $start;
$list['end'] = $end;
return $list;
}
public function ratioDetail($id){
$result = AccountRatioDetail::where('setting_id', $id)->select();
if(!$result){
throw new \think\Exception('未查询到该设置详情', 400);
}
return $result->toArray();
}
public function setRatio($ratio = [], $rule_name){
$setting = [
'user_id' => $this->admin_id,
'rule_name' => $rule_name
];
$id = (new AccountRatioSetting())->insertGetId($setting);
$sum_ration = 0;
foreach($ratio as $item){
if($item['role_type'] == 1 || $item['role_type'] == 3){
$sum_ration += $item['ratio'];
}
}
if($sum_ration != 100){
throw new \think\Exception('委托方与平台方比例之和未等于100,创建失败', 400);
}
foreach($ratio as $value){
$res = [
'role_type' => $value['role_type'],
'cost_type' => $value['cost_type'],
'calculate' => $value['calculate'],
'amount' => $value['amount'],
'ratio' => $value['ratio'],
'setting_id' => $id,
];
(new AccountRatioDetail())->insert($res);
}
}
public function ratioStatus($id){
$setting = AccountRatioSetting::where('id', $id)->where('is_deleted', 0)->find();
if(!$setting){
throw new \think\Exception('未查询到该设置', 400);
}
if($setting->status == 0){
AccountRatioSetting::where('status', 1)->where('is_deleted', 0)->update(['status' => 0]);
$setting->status = 1;
$setting->save();
}else{
throw new \think\Exception('修改状态失败,至少要设置一条分账比例!', 400);
}
}
public function closeList($user_name, $close_account, $bank_account, $status, $type, $limit, $page){
$result = (new OrderUser())->alias('user')->join('order o', 'o.batchcode = user.batchcode')->where('user.id', 'in', function ($query) {
$query->table("order_user")->field('max(id)')->group('islicode')->select();
})->where(function ($query) use($user_name, $bank_account, $status, $type){
if($type == 2){
$query->where('user.id', -1);
}
if($user_name){
$query->whereLike('user.name', "%{$user_name}%", 'or')->whereLike('user.islicode', "%{$user_name}%", 'or');
}
if($bank_account){
$query->whereLike('user.publicAccount', "%{$bank_account}%");
}
if($status){
if($status == 1){
$query->where('o.close_status', 1);
}else{
$query->whereIn('o.close_status', '2,3,4,5');
}
}
})->field('user.islicode,user.name,user.publicAccount,user.bankName,user.userType,o.close_status')->group('islicode')->order('user.id', 'desc')->paginate($limit)->toArray();
$start = ($page - 1) * $limit + 1;
$end = $page * $limit;
if($result['total'] < $end){
$end = $result['total'];
}
if($result['total'] < $start){
$start = $end = $result['total'];
}
$result['start'] = $start;
$result['end'] = $end;
return $result;
}
public function getCloseAccountInfo($user_isli){
$userinfo = (new UserService())->getUserInfo($user_isli);
return $userinfo;
}
public function getBillDetail($user_isli, $batchcode, $status, $page, $limit){
$where = [];
$where['bill.user_isli'] = $user_isli;
if(!empty($batchcode)){
$where['bill.batchcode'] = $batchcode;
}
$batchcodes = "";
if(!empty($status)){
if($status != 6){
$batchcodes = OrderGoodsDetail::where('close_status', $status)->where('entrust_islicode', $user_isli)->where('is_deleted', 0)->field('batchcode')->select()->toArray();
if($batchcodes){
$batchcodes = implode(',', array_column($batchcodes, 'batchcode'));
}else{
$batchcodes = -1;
}
}else{
$batchcodes = Order::where('buy_islicode', $user_isli)->where('status', 'in', '2,3,4')->field('batchcode')->select()->toArray();
if($batchcodes){
$batchcodes = implode(',', array_column($batchcodes, 'batchcode'));
}else{
$batchcodes = -1;
}
}
}
$income = UserAccountBill::alias('bill')->join('order order', 'bill.batchcode = order.batchcode')->where(function ($query) use($batchcodes){
if(!empty($batchcodes)){
$query->where('bill.batchcode', 'in', $batchcodes);
}
})->where(function ($query){
$query->whereOr('bill.thatday_sale_money', '>', 0)->whereOr('bill.thatday_buy_money', '>', 0);
})->where($where)->where('order.status', 'in', '2,3,4')->sum('thatday_sale_money');
$disburse = UserAccountBill::alias('bill')->join('order order', 'bill.batchcode = order.batchcode')->where(function ($query) use($batchcodes){
if(!empty($batchcodes)){
$query->where('bill.batchcode', 'in', $batchcodes);
}
})->where(function ($query){
$query->whereOr('bill.thatday_sale_money', '>', 0)->whereOr('bill.thatday_buy_money', '>', 0);
})->where($where)->where('order.status', 'in', '2,3,4')->sum('thatday_buy_money');
$list = UserAccountBill::alias('bill')->join('order order', 'bill.batchcode = order.batchcode')->where(function ($query) use($batchcodes){
if(!empty($batchcodes)){
$query->where('bill.batchcode', 'in', $batchcodes);
}
})->where(function ($query){
$query->whereOr('bill.thatday_sale_money', '>', 0)->whereOr('bill.thatday_buy_money', '>', 0);
})->where($where)->where('order.status', 'in', '2,3,4')->field('bill.*,order.createtime as order_createtime,order.completetime as order_completetime')->order('order_createtime', 'desc')->paginate($limit);
$list->each(function ($item) use(&$income, &$disburse){
if(empty($item['order_completetime'])){
$item['order_completetime'] = "-";
}
$item['callback_msg'] = OrderGoodsDetail::where('batchcode', $item['batchcode'])->where('is_deleted', 0)->where('entrust_islicode', $item['user_isli'])->value('callback_msg');
if(empty($item['callback_msg'])){
$item['callback_msg'] = '-';
}
$order_user = OrderUser::where('batchcode', $item['batchcode'])->where('islicode', $item['user_isli'])->find();
$item['order_user'] = $order_user->toArray();
if(Order::where('batchcode', $item['batchcode'])->where('buy_islicode', $item['user_isli'])->value('id')){
$item['close_status'] = 6;
$item['order_completetime'] = Order::where('batchcode', $item['batchcode'])->where('buy_islicode', $item['user_isli'])->value('paymenttime');
$item['callback_msg'] = Order::where('batchcode', $item['batchcode'])->where('buy_islicode', $item['user_isli'])->value('payid');
}else{
$item['close_status'] = OrderGoodsDetail::where('batchcode', $item['batchcode'])->where('entrust_islicode', $item['user_isli'])->where('is_deleted', 0)->value('close_status');
if($item['close_status'] == 5){
$item['callback_msg'] = OrderGoodsDetail::where('batchcode', $item['batchcode'])->where('entrust_islicode', $item['user_isli'])->where('is_deleted', 0)->value('close_serial_number');
}elseif($item['close_status'] == 2){
$item['callback_msg'] = '受理成功';
}
}
// $disburse += Order::where('buy_islicode', $item['user_isli'])->where('pay_status', 2)->sum('total_money');
// $disburse += $item['thatday_buy_money'];
// $income += $item['thatday_sale_money'];
// $money = OrderGoodsDetail::alias('detail')->join('order order', 'order.batchcode = detail.batchcode')
// ->where('detail.entrust_islicode', $item['user_isli'])
// ->where('detail.is_deleted', 0)
// ->where('order.pay_status', 2)->sum('detail.money');
// $income += $money;
return $item;
});
$list = $list->toArray();
$start = ($page - 1) * $limit + 1;
$end = $page * $limit;
if($list['total'] < $end){
$end = $list['total'];
}
if($list['total'] < $start){
$start = $end = $list['total'];
}
$list['start'] = $start;
$list['end'] = $end;
$list['income'] = round($income, 2);
$list['disburse'] = round($disburse, 2);
return $list;
}
}