849 行
37 KiB
PHP
可执行文件
849 行
37 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace CashierApi\Business;
|
|
|
|
//[1.9.20]
|
|
|
|
use Common\Business\SerialNumberGoods;
|
|
use Common\Business\SkuAttribute;
|
|
use Common\Model\RetailGoodsModel;
|
|
use Common\Model\RetailVipModel;
|
|
use Common\Model\RetailSellModel;
|
|
use Common\Model\RetailGuideModel;
|
|
use Common\Model\RetailStoreModel;
|
|
use Common\Model\RetailCashierModel;
|
|
use Common\Model\RetailDaOrderModel;
|
|
use Common\Model\RetailUuOrderModel;
|
|
use Common\Model\RetailPayOrderModel;
|
|
use Common\Model\RetailBillOrderModel;
|
|
use Common\Model\RetailBillAdvanceModel;
|
|
|
|
use Common\Model\SellSerialModel;
|
|
use Common\Order\BillOrder;
|
|
use Make\Model\MakeOrderModel;
|
|
use PayApi\Controller\SellDataController;
|
|
|
|
use Blessing\Business\Index;
|
|
use Common\Business\Plug;
|
|
|
|
/**
|
|
* 收银端流水
|
|
* Class OrderWater
|
|
* [
|
|
* 获取商城流水合计 orderOfWaterTotal
|
|
* 获取商城流水列表 orderOfWaterList
|
|
* ]
|
|
* @package CashierApi\Business
|
|
*/
|
|
class OrderWater
|
|
{
|
|
public function orderOfWaterList($param)
|
|
{
|
|
$SkuAttribute = new SkuAttribute();
|
|
$VipModel = new RetailVipModel();
|
|
$SellModel = new RetailSellModel();
|
|
$GuideModel = new RetailGuideModel();
|
|
$CashierModel = new RetailCashierModel();
|
|
$DaOrderModel = new RetailDaOrderModel();
|
|
$uuOrderModel = new RetailUuOrderModel();
|
|
$PayOrderModel = new RetailPayOrderModel();
|
|
$BillModel = new RetailBillOrderModel();
|
|
$BillAdvanceModel = new RetailBillAdvanceModel();
|
|
$SerialClass = new SerialNumberGoods();
|
|
$plugClass = new Plug();
|
|
//订单获取祝福码,判断该门店是否,有,并且开启
|
|
$storeId = $param['store_id'];
|
|
$storePlugStatusPost = [
|
|
'store_id' => $storeId,
|
|
'identification_arr' => ['blessing'],
|
|
];
|
|
$storePlugStatus = $plugClass->plugStoreStatus($storePlugStatusPost);//获取状态
|
|
|
|
$verifyRes = $this->paramVerify($param, 1);
|
|
if ($verifyRes['status']) {
|
|
return $verifyRes;
|
|
} else {
|
|
$where = $verifyRes;
|
|
}
|
|
$num = $param['num'];
|
|
$page = $param['page'];
|
|
|
|
if ($param['line'] == 2) { //线上 小程序订单
|
|
$insertRes = $this->conditionInsert($param, 1);
|
|
$where = array_merge($where, $insertRes);
|
|
$res['order_count'] = 0;
|
|
$res['order_money'] = 0;
|
|
$res['refund_order_count'] = 0;
|
|
$res['refund_order_money'] = 0;
|
|
$res['all_money'] = '0';
|
|
switch ($param['order_genre']) {
|
|
case 1:
|
|
//商城
|
|
$modelRes = $BillModel->getOnlineOrder($where, $page, $num);
|
|
break;
|
|
case 2:
|
|
//拼团
|
|
$modelRes = $BillModel->getOnlineGroupOrder($where, $page, $num);
|
|
break;
|
|
case 3:
|
|
//秒杀
|
|
$modelRes = $BillModel->getOnlineSkillOrder($where, $page, $num);
|
|
break;
|
|
case 4:
|
|
//预售
|
|
$modelRes = $BillModel->getAdvanceOrder($where, $page, $num);
|
|
break;
|
|
}
|
|
} else {
|
|
/* 收银员是否可以查看所有订单 */
|
|
$where = $this->cashierAuthCheck($param, 1, $where);
|
|
$where['type'] = 2;
|
|
//获取付费插件列表及状态
|
|
$PlugApi = new Plug();
|
|
$result = $PlugApi->merPlugState([
|
|
'merchant_id' => $param['merchant_id'],
|
|
'identification_arr' => ['credit']
|
|
]);
|
|
if ($result['credit']) {
|
|
$modelRes = $BillModel->getCreditOutlineOrder($where, $page, $num);
|
|
} else {
|
|
$modelRes = $BillModel->getOutlineOrder($where, $page, $num);
|
|
}
|
|
}
|
|
$order = $modelRes['data'];
|
|
$order_count = $modelRes['count'];
|
|
|
|
if (!empty($order)) {
|
|
$cashiInfo = [];
|
|
$cashiIdArr = [];
|
|
foreach ($order as $key => &$val) {
|
|
if (!$val['ca_id']) {
|
|
unset($val['ca_id']);
|
|
}
|
|
$val['coupon_money'] = $val['coupon_money'] ? $val['coupon_money'] : '0.00';
|
|
$val['pay_coupon_fee'] = $val['pay_coupon_fee'] ? floatval($val['pay_coupon_fee']) : '0.00';
|
|
$val['cashier_dis_money'] = $val['cashier_dis_money'] ? $val['cashier_dis_money'] : '0.00';
|
|
$val['small_changes_money'] = $val['small_changes_money'] ? $val['small_changes_money'] : '0.00';
|
|
$val['integral_dis_money'] = $val['integral_dis_money'] ? $val['integral_dis_money'] : '0.00';
|
|
$val['cashier_manual_money'] = $val['cashier_manual_money'] ? $val['cashier_manual_money'] : '0.00';
|
|
$val['cashier_dis_money'] = $val['cashier_dis_money'] ? $val['cashier_dis_money'] : '0.00';
|
|
|
|
$val['user_select_time'] = $val['user_select_time'] ? date('m-d H:i', $val['user_select_time']) : '';
|
|
if (!empty($val['vid'])) {
|
|
$val['vipInfo'] = $VipModel->getFind(["id" => $val['vid']], "nickname,name,balance,mobile_phone,integral");
|
|
}
|
|
//商城订单返回数据
|
|
if ($param['line'] == 2) {
|
|
if ($val['order_genre'] == 4) {
|
|
if ($val['advance_type'] == 2) {
|
|
//定金
|
|
$val['earnest_pay_time'] = date('Y-m-d H:i:s', $val['earnest_pay_time']);
|
|
$val['all_earnest_price'] = round($val['all_earnest_price'], 2);
|
|
$val['all_arrive_price'] = $val['all_arrive_price'] ? round($val['all_arrive_price']) : '';
|
|
$val['tail_pay_money'] = round($val['all_money'] - $val['all_earnest_price'], 2); //尾款
|
|
$val['advance_type_name'] = "定金 + 尾款";
|
|
} else {
|
|
//全额
|
|
$val['tail_pay_money'] = round($val['all_money'], 2);
|
|
$val['finish_time'] = date('Y-m-d H:i:s', $val['finish_time']);
|
|
$val['advance_type_name'] = "全额";
|
|
}
|
|
if ($val['state'] == 2) {
|
|
$tail_time = $PayOrderModel->getFindField(['id' => $val['tail_pay_order_id']], "trade_date");
|
|
$val['trade_date'] = date('Y-m-d H:i:s', $tail_time);
|
|
}
|
|
}
|
|
switch ($val['delivery_type']) {
|
|
case 1:
|
|
//门店配送
|
|
if ($val['status'] == 1 && $value['pickup_type'] = 2) {
|
|
$val['order_status'] = 0;
|
|
}
|
|
break;
|
|
case 2:
|
|
//达达配送
|
|
$clerkInfo = $DaOrderModel->getOrderFind(['order_no' => strval($val['order_no']), 'id' => $val['delivery_record_id']], '*', 'id desc');
|
|
$val['order_status'] = $clerkInfo['order_status'];
|
|
break;
|
|
case 3:
|
|
//Uu配送转成达达订单状态显示
|
|
$state_uu = $uuOrderModel->getOrderFindField(['origin_id' => $val['id'], 'id' => $val['delivery_record_id']], 'state', 'id desc');
|
|
if ($state_uu == 1) {
|
|
$val['order_status'] = 1;
|
|
} else if ($state_uu == 3 || $state_uu == 4) {
|
|
$val['order_status'] = 2;
|
|
} else if ($state_uu == 5 || $state_uu == 6) {
|
|
$val['order_status'] = 3;
|
|
} else if ($state_uu == -1) {
|
|
$val['order_status'] = 5;
|
|
} else {
|
|
$val['order_status'] = 4;
|
|
}
|
|
$val['delivery'] = 2;
|
|
break;
|
|
case 5:
|
|
//码科配送
|
|
$MakeOrderModel = new MakeOrderModel();
|
|
$status = $MakeOrderModel->getOrderFindField(['bill_id' => $val['id']], "status", "id desc");
|
|
switch ($status) {
|
|
case 'payed':
|
|
//待接单
|
|
$val['order_status'] = 1;
|
|
break;
|
|
case 'accepted':
|
|
//'待取件
|
|
$val['order_status'] = 2;
|
|
break;
|
|
case 'geted':
|
|
//待收件
|
|
$val['order_status'] = 3;
|
|
break;
|
|
case 'gotoed':
|
|
//待评价
|
|
$val['order_status'] = 4;
|
|
break;
|
|
case 'completed':
|
|
//订单已完成
|
|
$val['order_status'] = 4;
|
|
break;
|
|
case 'cancel':
|
|
//已取消
|
|
$val['order_status'] = 5;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if ($val['type'] == 1) {
|
|
//商城
|
|
if ($val['pickup_type'] == 2) {
|
|
if ($val['user_address']) {
|
|
$val['address_name'] = $val['user_name'];
|
|
$val['address_phone'] = $val['user_phone'];
|
|
$val['address_address'] = $val['user_address'];
|
|
}
|
|
} else {
|
|
$val['address_name'] = $val['user_name'];
|
|
$val['address_phone'] = $val['user_phone'];
|
|
}
|
|
}
|
|
switch ($val['status']) {
|
|
case 0:
|
|
if ($val['order_genre'] == 4 && $val['pay_state'] == 2) {
|
|
if ($val['cancel_time'] > 0) {
|
|
$val['state_name'] = '已申请售后';
|
|
} else if ($val['tail_end_time'] < time()) {
|
|
$val['state_name'] = '超出尾款支付时间';
|
|
} else if ($val['tail_start_time'] > time()) {
|
|
$val['state_name'] = '未到尾款支付时间';
|
|
} else {
|
|
$val['state_name'] = '待付尾款';
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if ($val['refund_status'] == 0) {
|
|
$val['state_name'] = '待发货';
|
|
if ($val["pickup_type"] == 1) {
|
|
$val['state_name'] = '待自取';
|
|
}
|
|
} else if ($val["refund_status"] == 1) {
|
|
$val['state_name'] = '已申请售后';
|
|
}
|
|
break;
|
|
case 2:
|
|
$val['state_name'] = '待收货';
|
|
break;
|
|
case 3:
|
|
$val['state_name'] = '交易完成';
|
|
if ($val["refund_status"] == 1) {
|
|
$val['state_name'] = '已申请售后';
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!empty($val['cashier_id'])) {
|
|
// 防止多次查询同一收银员id
|
|
if (in_array($val['cashier_id'], $cashiIdArr)) {
|
|
$val['jobnum'] = $cashiInfo[$val['cashier_id']]['jobnum'];
|
|
$val['cashier_name'] = $cashiInfo[$val['cashier_id']]['name'];
|
|
} else {
|
|
$cashier_info = $CashierModel->getFind(['id' => $val['cashier_id']], "name,jobnum");
|
|
$val['jobnum'] = $cashier_info['jobnum'];
|
|
$val['cashier_name'] = $cashier_info['name'];
|
|
$cashiIdArr[] = $val['cashier_id'];
|
|
$cashiInfo[$val['cashier_id']] = $cashier_info;
|
|
}
|
|
}
|
|
$val['key'] = $key + 1;
|
|
//判断支付人员类型
|
|
if (!empty($val['vid']) || !empty($val['third_vip_code'])) {
|
|
$val['vip_class'] = '会员';
|
|
} else {
|
|
$val['vip_class'] = '散客';
|
|
}
|
|
if (!empty($val['third_vip_code'])) {
|
|
$val['mec_vip'] = [
|
|
'name' => $val['third_vip_name'],
|
|
'code' => $val['third_vip_code'],
|
|
];
|
|
}
|
|
|
|
if ($val['order_genre'] == 4) {
|
|
$val['payList'] = $BillAdvanceModel->payMode($val);
|
|
} else if ($val['settlement_type'] == 2) {
|
|
$CreditRecord = new \Credit\Business\CreditRecord();
|
|
$val['payList'] = $CreditRecord->getCreditPayTypeList($val['id'], $val['all_money']);
|
|
} else {
|
|
$val['payList'] = getPayTypeList($val['pay_type'], $val['all_money'], $val['id']);
|
|
}
|
|
if (count($val['payList']) > 1) {
|
|
$val['pay_type_name'] = '组合支付';
|
|
} else if ($val['settlement_type'] == 2) {
|
|
$val['pay_type_name'] = '赊账';
|
|
} else {
|
|
$val['pay_type_name'] = $val['payList'][0]['name'];
|
|
}
|
|
|
|
$fields = [
|
|
'vip_discount',
|
|
'goods_id',
|
|
'goods_name',
|
|
'num',
|
|
'refund_num',
|
|
'vip_price',
|
|
'price',
|
|
'original_price',
|
|
'plus_vip_price',
|
|
'original_price',
|
|
'all_money',
|
|
'goods_type',
|
|
'attribute_state',
|
|
'sku_json_info',
|
|
'pricing_method',
|
|
'integral_marketing',
|
|
'mem_integral',
|
|
'use_integral',
|
|
'cashier_manual_discount',
|
|
'cashier_manual_discount_money',
|
|
"company",
|
|
"goods_gifts_id",
|
|
"goods_gifts_type",
|
|
'id',
|
|
'serial_number_state',
|
|
'code_price_state',
|
|
];
|
|
$sellList = $SellModel->getSelect(['bill_id' => $val['id']], $fields);
|
|
$beforeAllMoney = 0;
|
|
$v_discount = 1;
|
|
$cashier_manual_discount = 1;
|
|
$GoodsModel = new RetailGoodsModel();
|
|
foreach ($sellList as &$v) {
|
|
if (($v['goods_type'] == 2 || $v['goods_id'] == 0) && empty($v['goods_name'])) {
|
|
$v['goods_name'] = '无码商品';
|
|
}
|
|
$v['goods_code'] = '';
|
|
if ($v['goods_type'] == 1) {
|
|
$v['goods_code'] = $GoodsModel->getFindField(['id' => $v['goods_id']], 'goods_code');
|
|
}
|
|
if (!empty($v['sku_json_info'])) {
|
|
$sku = json_decode($v['sku_json_info'], true);
|
|
$v['sku_name'] = $sku['name'];
|
|
if (!$v['sku_name']) {
|
|
$sku_name = $SkuAttribute->basisSkuIdListSkuNameArr($sku['sku_id_list']);
|
|
$v['sku_name'] = implode(',', $sku_name);
|
|
}
|
|
$v['sku_id'] = $sku['id'];
|
|
}
|
|
$v['num'] = round($v['num'], 3);
|
|
|
|
if (floatval($v['vip_discount']) < 1 && floatval($v['vip_discount']) > 0) {
|
|
$v_discount = floatval($v['vip_discount']);
|
|
}
|
|
|
|
if (floatval($v['cashier_manual_discount']) < 1 && floatval($v['cashier_manual_discount_money']) > 0) {
|
|
$cashier_manual_discount = floatval($v['cashier_manual_discount']);
|
|
}
|
|
|
|
$v['mem_integral'] = intval($v['mem_integral']);
|
|
$v['price'] = floatval($v['price']);
|
|
$v['original_price'] = floatval($v['original_price']);
|
|
$v['plus_vip_price'] = floatval($v['plus_vip_price']);
|
|
$v['vip_price'] = floatval($v['vip_price']);
|
|
$v['before_all_money'] = round($v['price'] * $v['num'], 2);
|
|
$beforeAllMoney += $v['before_all_money'];
|
|
//串号信息
|
|
if ($v['serial_number_state'] == 1) {
|
|
$serialResult = $SerialClass->sellSerialList([
|
|
'id' => $v['id']
|
|
]);
|
|
$v['serial_list'] = $serialResult['data']['list'];
|
|
}
|
|
}
|
|
$val['v_discount'] = $v_discount;
|
|
$val['cashier_manual_discount'] = $cashier_manual_discount;
|
|
$val['beforeAllMoney'] = $beforeAllMoney;
|
|
$val['goods_info'] = $sellList;
|
|
//配送
|
|
$val['add_time'] = date('Y-m-d H:i:s', $val['add_time']);
|
|
$val['cashier_dis_money'] = !empty($val['cashier_dis_money']) ? $val['cashier_dis_money'] : 0;
|
|
//优惠金额
|
|
$val['discount_amount'] = round($val['coupon_money'] + $val['vip_dis_money'] + $val['cashier_dis_money'] + $val['small_changes_money'] + $val['cashier_manual_money'], 2);
|
|
$guide_name = '';
|
|
if (!empty($val['guide_id'])) {
|
|
$guide_name = $GuideModel->getFindField(['id' => $val['guide_id']], 'guidename');
|
|
}
|
|
$val['guide_name'] = $guide_name;
|
|
unset($val['vid']);
|
|
unset($val['store_id']);
|
|
unset($val['merchant_id']);
|
|
unset($val['cashier_id']);
|
|
if ($storePlugStatus === true) {
|
|
//门店有权限,并开启插件,查询订单是否有祝福码
|
|
$extractionCode = new Index();
|
|
$val['extraction_code'] = $extractionCode->obtainExtractionCode($val['id']);
|
|
} else {
|
|
//门店无权限,或没开启
|
|
$val['extraction_code'] = null;
|
|
}
|
|
}
|
|
} else {
|
|
$order = [];
|
|
}
|
|
$res['status'] = 1;
|
|
$res['order'] = $order;
|
|
$res['count'] = $order_count;
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 获取商城流水合计
|
|
* @param $param
|
|
* [
|
|
* order_number 选填 订单号
|
|
* vipCode 选填 会员信息
|
|
* judge unaccounted param
|
|
* line 必填 1线下收银端 2线上小程序
|
|
* time 必填 时间段
|
|
* status 选填 类型查询条件 当line=2时必填
|
|
* order_genre 选填 1.商城订单 2.拼团订单 3.秒杀订单 4预售订单 当line=2时必填
|
|
* cashier_id 必填 收银员id
|
|
* store_id 必填 门店id
|
|
* ]
|
|
*/
|
|
public function orderOfWaterTotal($param)
|
|
{
|
|
$BillModel = new RetailBillOrderModel();
|
|
|
|
$verifyRes = $this->paramVerify($param, 2);
|
|
$map = $verifyRes['map'];
|
|
$refund_map = $verifyRes['refund_map']; //$refund_map 退款
|
|
$credit_map = $verifyRes['credit_map']; //$credit_map 赊账
|
|
$map['pay_state'] = 1;
|
|
|
|
if ($param['line'] == 2) { //线上 小程序订单
|
|
$insertRes = $this->conditionInsert($param, 2);
|
|
$map = array_merge($map, $insertRes);
|
|
if (!empty($map)) {
|
|
$map['type'] = 1;
|
|
switch ($param['order_genre']) {
|
|
case 1:
|
|
//商城
|
|
$resBack = $BillModel->getOnlineAllData($map); //获取总条数和总金额
|
|
break;
|
|
case 2:
|
|
//拼团
|
|
$resBack = $BillModel->getOnlineGroupAllData($map); //获取总条数和总金额
|
|
break;
|
|
case 3:
|
|
//秒杀
|
|
$resBack = $BillModel->getOnlineSkillAllData($map); //获取总条数和总金额
|
|
break;
|
|
case 4:
|
|
//预售
|
|
$resBack = $BillModel->getAdvanceData($map); //获取总条数和总金额
|
|
break;
|
|
}
|
|
$order_count = $resBack['num'];
|
|
$order_money = $resBack['money'];
|
|
} else {
|
|
$order_count = 0;
|
|
$order_money = 0;
|
|
}
|
|
if (!empty($refund_map)) {
|
|
$refund_map['type'] = 1;
|
|
$refund_map['order_type'] = 2;
|
|
switch ($param['order_genre']) {
|
|
case 1:
|
|
//商城
|
|
$resBack = $BillModel->getOnlineAllData($refund_map); //获取总条数和总金额
|
|
break;
|
|
case 2:
|
|
//拼团
|
|
$resBack = $BillModel->getOnlineGroupAllData($refund_map); //获取总条数和总金额
|
|
break;
|
|
case 3:
|
|
//秒杀
|
|
$resBack = $BillModel->getOnlineSkillAllData($refund_map); //获取总条数和总金额
|
|
break;
|
|
}
|
|
$refund_order_count = $resBack['num'];
|
|
$refund_order_money = $resBack['money'] ? $resBack['money'] : 0;
|
|
} else {
|
|
$refund_order_count = 0;
|
|
$refund_order_money = 0;
|
|
}
|
|
$all_money = $order_money - $refund_order_money;
|
|
$res['order_count'] = $order_count;
|
|
$res['order_money'] = $order_money;
|
|
$res['refund_order_count'] = $refund_order_count;
|
|
$res['refund_order_money'] = $refund_order_money;
|
|
$res['all_money'] = $all_money > 0 ? round($all_money, 2) : '0';
|
|
} else {
|
|
/* 收银员是否可以查看所有订单 */
|
|
$condition = [
|
|
'map' => $map,
|
|
'refund_map' => $refund_map,
|
|
'credit_map' => $credit_map,
|
|
];
|
|
$authRes = $this->cashierAuthCheck($param, 2, $condition);
|
|
$map = $authRes['condition']['map'];
|
|
$refund_map = $authRes['condition']['refund_map'];
|
|
$credit_map = $authRes['condition']['credit_map'];
|
|
//现金支付
|
|
$map['type'] = 2;
|
|
$SellDataApi = new SellDataController();
|
|
$combination = $SellDataApi->combinationPayment($map, 1);
|
|
$map['pay_type'] = 1;
|
|
$map['order_type'] = 1;
|
|
$x_money = $BillModel->getSum($map, 'all_money');
|
|
|
|
$x_money = round($x_money + $combination['combination_xj'], 2);
|
|
// 微信支付
|
|
$map['pay_type'] = ['in', '3,6'];
|
|
$w_money = $BillModel->getSum($map, 'all_money');
|
|
$w_money = round($w_money + $combination['combination_wxpay'], 2);
|
|
//支付宝支付
|
|
$map['pay_type'] = 4;
|
|
$z_money = $BillModel->getSum($map, 'all_money');
|
|
$z_money = round($z_money + $combination['combination_zfb'], 2);
|
|
//会员卡余额
|
|
$map['pay_type'] = 5;
|
|
$h_money = $BillModel->getSum($map, 'all_money');
|
|
$h_money = round($h_money + $combination['combination_membermoney'], 2);
|
|
//其他支付
|
|
$map['pay_type'] = 7;
|
|
$other_money = $BillModel->getSum($map, 'all_money');
|
|
$other_money = round($other_money + $combination['combination_other_pay'], 2);
|
|
//德育币支付
|
|
$map['pay_type'] = 9;
|
|
$moralEducationCoin_money = $BillModel->getSum($map, 'all_money');
|
|
$moralEducationCoin_money = round($moralEducationCoin_money + $combination['combination_mec_pay'], 2);
|
|
//赊账
|
|
$PlugApi = new Plug();
|
|
$plug_result = $PlugApi->merPlugState([
|
|
'merchant_id' => $param['merchant_id'],
|
|
'identification_arr' => ['credit']
|
|
]);
|
|
if ($plug_result['credit']) {
|
|
$ArrearageModel = new \Credit\Model\CreditArrearageModel();
|
|
$credit_map['ca.store_id'] = $param['store_id'];
|
|
$credit_map['ca.status'] = 1;
|
|
if ($authRes['condition']['cashier_show_other_sell'] == 2) {
|
|
$credit_map['rbo.cashier_id'] = $param['cashier_id'];
|
|
}
|
|
$res['c_money'] = (float)$ArrearageModel->getPcCreditMoney($credit_map);
|
|
}
|
|
//退款金额
|
|
$refund_map['order_type'] = 2;
|
|
$refund_map['pay_state'] = 1;
|
|
$refund_map['type'] = 2;
|
|
$refund_money = $BillModel->getSum($refund_map, 'all_money');
|
|
$refund_money = $refund_money ? round($refund_money, 2) : 0;
|
|
|
|
$res['x_money'] = $x_money;
|
|
$res['w_money'] = $w_money;
|
|
$res['z_money'] = $z_money;
|
|
$res['h_money'] = $h_money;
|
|
$res['o_money'] = $other_money;
|
|
$res['r_money'] = $refund_money;
|
|
$res['mec_money'] = $moralEducationCoin_money;
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 参数处理
|
|
* @param $param 参数
|
|
* @param $type 类型 1流水 2统计
|
|
*/
|
|
private function paramVerify($param, $type)
|
|
{
|
|
$VipModel = new RetailVipModel();
|
|
$StoreModel = new RetailStoreModel();
|
|
$SellSerialModel = new SellSerialModel();
|
|
if (!$param['start_time'] || !$param['end_time']) {
|
|
$start_time = strtotime(date('Y-m-d 0:0:0', time()));
|
|
$end_time = strtotime(date('Y-m-d 0:0:0', time())) + 86399;
|
|
} else {
|
|
$start_time = strtotime($param['start_time']);
|
|
$end_time = strtotime($param['end_time']);
|
|
}
|
|
// 订单号搜索
|
|
if ($param['order_num']) {
|
|
switch ($param['judge']) {
|
|
case 1:
|
|
$where['b.order_no'] = ['like', '%' . $param['order_num']];
|
|
$map['order_no'] = ['like', '%' . $param['order_num']];
|
|
$refund_map['order_no'] = ['like', '%' . $param['order_num']];
|
|
$credit_map['rbo.order_no'] = ['like', '%' . $param['order_num']];
|
|
break;
|
|
case 2:
|
|
$where['o.pick_code'] = $param['order_num'];
|
|
$map['o.pick_code'] = $param['order_num'];
|
|
$refund_map['o.pick_code'] = $param['order_num'];
|
|
break;
|
|
case 3:
|
|
//串码
|
|
$order_id_arr = $SellSerialModel->basisSerialOrderId($param['order_num'], 1);
|
|
if (!empty($order_id_arr)) {
|
|
$where['b.id'] = ['in', $order_id_arr];
|
|
$map['id'] = ['in', $order_id_arr];
|
|
$refund_map['id'] = ['in', $order_id_arr];
|
|
$credit_map['ca.id'] = ['in', $order_id_arr];
|
|
} else {
|
|
$res = [
|
|
'status' => 1,
|
|
'order' => [],
|
|
'msg' => '串号不存在',
|
|
'count' => 0,
|
|
];
|
|
return $res;
|
|
}
|
|
break;
|
|
}
|
|
unset($where['b.add_time']);
|
|
unset($map['add_time']);
|
|
unset($refund_map['add_time']);
|
|
unset($credit_map['ca.add_time']);
|
|
}
|
|
|
|
if ($param['vipCode']) {
|
|
$merchant_id = $StoreModel->getFindField(['id' => $param['store_id']], 'merchantid');
|
|
$vMap = [
|
|
'mobile_phone|cardnum|card_key' => ['like', '%' . $param['vipCode'] . '%'],
|
|
'merchantid' => $merchant_id,
|
|
'status' => 1
|
|
];
|
|
$vip_id = $VipModel->getFindField($vMap, 'id', true);
|
|
}
|
|
switch ($type) {
|
|
case 1:
|
|
$where['b.store_id'] = $param['store_id'];
|
|
$where['b.pay_state'] = 1;
|
|
$where['b.add_time'] = ['between', [$start_time, $end_time]];
|
|
if ($param['vipCode']) {
|
|
if (empty($vip_id)) {
|
|
$res = [
|
|
'status' => 1,
|
|
'order' => [],
|
|
'msg' => '会员不存在或已被冻结、挂失',
|
|
'count' => 0,
|
|
];
|
|
return $res;
|
|
} else {
|
|
$where['b.vid'] = ['in', $vip_id];
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
$map['store_id'] = $param['store_id'];
|
|
$refund_map['store_id'] = $param['store_id'];
|
|
$map['add_time'] = ['between', [$start_time, $end_time]];
|
|
$refund_map['add_time'] = ['between', [$start_time, $end_time]];
|
|
$credit_map['rbo.add_time'] = ['between', [$start_time, $end_time]];
|
|
|
|
if ($param['vipCode'] && $vip_id) {
|
|
$map['vid'] = ['in', $vip_id];
|
|
$credit_map['rc.vid'] = ['in', $vip_id];
|
|
}
|
|
break;
|
|
}
|
|
if ($type == 1) {
|
|
return $where;
|
|
} elseif ($type == 2) {
|
|
return ['map' => $map, 'credit_map' => $credit_map, 'refund_map' => $refund_map];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 参数处理
|
|
* @param $param 参数
|
|
* @param $type 类型 1流水 2统计
|
|
*/
|
|
private function conditionInsert(&$param, $type)
|
|
{
|
|
switch ($param['order_genre']) {
|
|
case 2:
|
|
//拼团
|
|
$condition['g.state'] = ['in', '2,3'];
|
|
break;
|
|
case 3:
|
|
//秒杀
|
|
$condition['s.state'] = ['in', '0,1'];
|
|
break;
|
|
case 4:
|
|
$condition['a.state'] = ['in', '1,2'];
|
|
break;
|
|
}
|
|
switch ($param['status']) {
|
|
case 0: // 全部订单
|
|
$condition['order_type'] = 1;
|
|
break;
|
|
case 1: // 待自提订单
|
|
$condition['o.pickup_type'] = 1;
|
|
$condition['order_type'] = 1;
|
|
$condition['o.status'] = 1;
|
|
$condition['refund_status'] = 0;
|
|
break;
|
|
case 2: // 已自提订单
|
|
$condition['o.pickup_type'] = 1;
|
|
$condition['order_type'] = 1;
|
|
$condition['o.status'] = 3;
|
|
$condition['refund_status'] = 0;
|
|
break;
|
|
case 3: // 待发货
|
|
$condition['o.pickup_type'] = 2;
|
|
$condition['order_type'] = 1;
|
|
$condition['o.status'] = 1;
|
|
$condition['refund_status'] = 0;
|
|
break;
|
|
case 4: // 配送中
|
|
$condition['o.pickup_type'] = 2;
|
|
$condition['order_type'] = 1;
|
|
$condition['o.status'] = 2;
|
|
$condition['refund_status'] = 0;
|
|
break;
|
|
case 5: // 已收货
|
|
$condition['o.pickup_type'] = 2;
|
|
$condition['order_type'] = 1;
|
|
$condition['o.status'] = 3;
|
|
$condition['refund_status'] = 0;
|
|
break;
|
|
case 6: // 正常购买
|
|
$condition['order_type'] = 1;
|
|
$condition['refund_status'] = 0;
|
|
break;
|
|
case 9: // 购买订单
|
|
$condition['order_type'] = 1;
|
|
break;
|
|
case 10:
|
|
//待付尾款已过期
|
|
$condition['a.state'] = 1;
|
|
$condition['a.tail_end_time'] = ['lt', time()];
|
|
$condition['a.advance_type'] = 2;
|
|
break;
|
|
case 11:
|
|
//待付尾款未过期
|
|
$condition['a.state'] = 1;
|
|
$condition['a.tail_end_time'] = ['gt', time()];
|
|
$condition['a.advance_type'] = 2;
|
|
break;
|
|
case 12:
|
|
//已付款
|
|
$condition['a.state'] = 2;
|
|
break;
|
|
default:
|
|
$condition['order_type'] = 1;
|
|
}
|
|
switch ($type) {
|
|
case 1:
|
|
$condition['pay_state'] = ['in', '1,2'];
|
|
$condition['type'] = 1;
|
|
$condition['b.order_type'] = 1;
|
|
break;
|
|
case 2:
|
|
$condition['pay_state'] = ['in', '1,2'];
|
|
$condition['o.order_genre'] = $param['order_genre'];
|
|
$condition['b.order_type'] = 1;
|
|
break;
|
|
}
|
|
return $condition;
|
|
}
|
|
|
|
/**
|
|
* 收银员是否可以查看所有订单
|
|
* @param $param 参数
|
|
* @param $type 类型 1流水 2统计
|
|
*/
|
|
private function cashierAuthCheck($param, $type, $condition)
|
|
{
|
|
$CashierModel = new RetailCashierModel();
|
|
|
|
$cashier_show_other_sell = $CashierModel->getFindField(['id' => $param['cashier_id']], 'cashier_show_other_sell');
|
|
$cashier_show_other_sell = $cashier_show_other_sell ? $cashier_show_other_sell : 2;
|
|
|
|
switch ($type) {
|
|
case 1:
|
|
$where = $condition;
|
|
//选择赊账状态 1未还清 2已还清
|
|
if ($param['credit_type']) {
|
|
$where['ca.state'] = $param['credit_type'] == 1 ? 2 : 1;
|
|
}
|
|
//支付方式 1微信 2支付宝 3现金 4余额 5德育币支付
|
|
if ($param['pay_type']) {
|
|
switch ($param['pay_type']) {
|
|
case 1:
|
|
$where['b.pay_type'] = 3;
|
|
break;
|
|
case 2:
|
|
$where['b.pay_type'] = 4;
|
|
break;
|
|
case 3:
|
|
$where['b.pay_type'] = 1;
|
|
break;
|
|
case 4:
|
|
$where['b.pay_type'] = 5;
|
|
break;
|
|
case 5:
|
|
$where['b.pay_type'] = 9;
|
|
break;
|
|
}
|
|
}
|
|
//订单类型 1普通订单 2赊账订单
|
|
$PlugApi = new Plug();
|
|
$plug_result = $PlugApi->merPlugState([
|
|
'merchant_id' => $param['merchant_id'],
|
|
'identification_arr' => ['credit']
|
|
]);
|
|
if ($param['bill_type'] && $plug_result['credit']) {
|
|
$where['b.settlement_type'] = $param['bill_type'];
|
|
}
|
|
break;
|
|
case 2:
|
|
$map = $condition['map'];
|
|
$refund_map = $condition['refund_map'];
|
|
$credit_map = $condition['credit_map'];
|
|
break;
|
|
}
|
|
|
|
if ($cashier_show_other_sell == 2) { // 收银员查看自己订单
|
|
$where['b.cashier_id'] = $param['cashier_id'];
|
|
$map['cashier_id'] = $param['cashier_id'];
|
|
$refund_map['cashier_id'] = $param['cashier_id'];
|
|
$credit_map['ca.cashier_id'] = $param['cashier_id'];
|
|
}
|
|
|
|
$condition = [
|
|
'map' => $map,
|
|
'refund_map' => $refund_map,
|
|
'credit_map' => $credit_map,
|
|
];
|
|
if ($type == 1) {
|
|
return $where;
|
|
} else if ($type == 2) {
|
|
return ['condition' => $condition, 'cashier_show_other_sell' => $cashier_show_other_sell];
|
|
}
|
|
}
|
|
}
|