1, 'type' => $parameter['type'], 'desc' => $parameter['desc'], 'request_data' => json_encode($_POST), 'operator_id' => $_POST['operator_id'], 'mer_id' => $_POST['merchantid'] ); action_log_v2($log_data); } //登录接口 protected function login() { if (IS_POST) { $userName = I("post.username"); $pwd = I("post.password"); $type = I("post.type"); $merchant = M('retail_merchant'); // 商户 $manager = M('retail_manager'); // 店长getLogo $map['mobile'] = $userName; $map['status'] = 1; //店长表:1:正常 2:被删除 商户表:1:正常 2:被禁用 3:被删除 只取1 $JMap['login_name'] = $userName; $JMap['state'] = 1; $JMap['status'] = 1; $JMap['first_pid'] = 0; //实例化插件类 $PlugApi = new Plug(); if ($type == 3) { //商户登录 $User = $merchant->where($map)->find(); $JMap['user_type'] = 3; $JMap['system_user_id'] = $User['id']; $JurUser = M('jurisdiction_user')->where($JMap)->find(); if (empty($User) || empty($JurUser)) { $res['status'] = 0; $res['msg'] = '账号不存在或已被禁用'; } else { //商户有使用失效限制,需要判断账号是否可用 $now = time(); if ($now > $User['begin_time'] && $now < $User['end_time']) { //账号可用 $CryptrModel = new \Addons\Api\Crypto(); $orignPwd = $CryptrModel->encrypt($pwd, date('YmdHis', $JurUser['add_time'])); if ($orignPwd == $JurUser['password']) { $time = time(); if ($User['begin_time'] < $time && $time < $User['end_time']) { $storelist = M('retail_store') ->where(array('merchantid' => $User['id'], 'state' => 0, 'store_status' => 0)) ->field('id as storeid,storetag as name') ->order('store_type asc,addtime asc') ->select(); $res['status'] = 1; $User2['usertype'] = 1; if (count($storelist) > 0) { $User2['storetag'] = $storelist[0]['name']; } else { $User2['storetag'] = "暂无门店"; $res['status'] = 0; $res['msg'] = '对不起,商户下无可用门店,无法登录'; $this->ajaxReturn($res); } $User2['storelist'] = $storelist; $User2['merchantid'] = $User['id']; $User2['uid'] = $User['id']; $User2['operator_id'] = $JurUser['id']; //获取付费插件列表及状态 $plug_result = $PlugApi->PlugPermissions(array( 'merchant_id' => $User2['merchantid'], 'identification_arr' => ['credit'] )); //商户是否存在赊账插件 $User2['is_credit'] = $plug_result['data']['plug']['credit'] && $plug_result['data']['plug']['credit'] > 0 ? true : false; $res['msg'] = '登录成功'; $res['userinfo'] = $User2; } else { $res['msg'] = '账号已到期,请联系商家'; } } else { $res['msg'] = '密码错误'; } } elseif ($now < $User['begin_time']) { //账号正常 但未到启用时间 $res['status'] = 0; $res['msg'] = '对不起,该账号还未到使用时间范围,无法登录'; } elseif ($now > $User['end_time']) { //账号过期 $res['status'] = 0; $res['msg'] = '对不起,该账号已过期,无法登录'; } } } elseif ($type == 4) { //店长登录 $cashier = $manager->where($map)->find(); $JMap['user_type'] = 4; $JMap['system_user_id'] = $cashier['id']; $JurUser = M('jurisdiction_user')->where($JMap)->find(); if (empty($cashier) || empty($JurUser)) { //查询不到 $res['status'] = 0; $res['msg'] = '账号不存在'; } else { $User = $merchant->where(array('id' => $cashier['merchantid']))->find(); $store = M("retail_store")->where(array('id' => $cashier['storeid']))->find(); //商户有使用失效限制,需要判断账号是否可用 //还需判断商户账号是否可用 if ($User['status'] == 1) { $now = time(); if ($now > $User['begin_time'] && $now < $User['end_time']) { //账号可用 //需要判断门店状态 if (empty($store)) { $res['status'] = 0; $res['msg'] = '不存在该门店,无法登录'; } elseif ($store['state'] == '1') { //被删除状态 $res['status'] = 0; $res['msg'] = '门店状态异常,无法登录'; } elseif ($store['state'] == '0' && $store['store_status'] == '0') { $CryptrModel = new \Addons\Api\Crypto(); $orignPwd = $CryptrModel->encrypt($pwd, date('YmdHis', $JurUser['add_time'])); if ($orignPwd == $JurUser['password']) { $inventorySet = new InventorySet(); $inventory_set = $inventorySet->getInfo([ 'user_type' => 4, 'merchant_id' => $cashier['merchantid'], 'store_id' => $cashier['storeid'] ]); $res['status'] = 1; $cashier['account_type'] = 2; $res['msg'] = '登录成功'; $userinfo['usertype'] = 2; $userinfo['storeid'] = $cashier['storeid']; $userinfo['merchantid'] = $cashier['merchantid']; $userinfo['uid'] = $cashier['id']; $userinfo['storetag'] = $store['storetag']; $userinfo['supplier_type'] = $store['supplier_type']; $userinfo['manager_id'] = $cashier['id']; $userinfo['operator_id'] = $JurUser['id']; $userinfo['modify_price_state'] = $inventory_set['modify_price_state']; //是否可以编辑零售价 //获取付费插件列表及状态 $plug_result = $PlugApi->PlugPermissions(array( 'merchant_id' => $userinfo['merchantid'], 'identification_arr' => ['credit'] )); //商户是否存在赊账插件 $userinfo['is_credit'] = $plug_result['data']['plug']['credit'] && $plug_result['data']['plug']['credit'] > 0 ? true : false; $res['userinfo'] = $userinfo; } else { $res['msg'] = '密码错误'; } } elseif ($store['state'] == '0' && $store['store_status'] == '1') { $res['status'] = 0; $res['msg'] = '门店状态异常,无法登录,请联系商家管理员'; } } elseif ($now < $User['begin_time']) { //账号正常 但未到启用时间 $res['status'] = 0; $res['msg'] = '对不起,该商户账号还未到使用时间范围,无法登录'; } elseif ($now > $User['end_time']) { //账号过期 $res['status'] = 0; $res['msg'] = '对不起,该商户账号已过期,无法登录'; } } else { //商户账号不可用 $res['status'] = 0; $res['msg'] = '商户账号不可用,无法登录'; } } } else if ($type == 5) { //收银员登录 A('CashierApi/Login')->doLogin_v1(); } $this->ajaxReturn($res); } else { $res['status'] = 0; $res['msg'] = '错误的请求方式,必须是post方式'; $this->ajaxReturn($res); } } /** * 2020-05-30 * 登录接口 */ protected function login_v1() { if (IS_POST) { $userName = I("post.username"); $pwd = I("post.password"); $type = I("post.type"); $merchant = M('retail_merchant'); // 商户 $manager = M('retail_manager'); // 店长getLogo $map['mobile'] = $userName; $map['status'] = 1; //店长表:1:正常 2:被删除 商户表:1:正常 2:被禁用 3:被删除 只取1 $JMap['login_name'] = $userName; $JMap['state'] = 1; $JMap['status'] = 1; $JMap['first_pid'] = 0; $PlugApi = new Plug(); if ($type == 3) { //商户登录 $User = $merchant->where($map)->find(); $JMap['user_type'] = 3; $JMap['system_user_id'] = $User['id']; $JurUser = M('jurisdiction_user')->where($JMap)->find(); if (empty($User) || empty($JurUser)) { $res['status'] = 0; $res['msg'] = '账号不存在或已被禁用'; } else { //商户有使用失效限制,需要判断账号是否可用 $now = time(); if ($now > $User['begin_time'] && $now < $User['end_time']) { //账号可用 $CryptrModel = new \Addons\Api\Crypto(); $orignPwd = $CryptrModel->encrypt($pwd, date('YmdHis', $JurUser['add_time'])); if ($orignPwd == $JurUser['password']) { $time = time(); if ($User['begin_time'] < $time && $time < $User['end_time']) { $storelist = M('retail_store') ->where(array('merchantid' => $User['id'], 'state' => 0, 'store_status' => 0)) ->field('id as storeid,storetag as name') ->order('store_type asc,addtime asc') ->select(); $res['status'] = 1; $User2['usertype'] = 1; if (count($storelist) > 0) { $User2['storetag'] = $storelist[0]['name']; } else { $User2['storetag'] = "暂无门店"; $res['status'] = 0; $res['msg'] = '对不起,商户下无可用门店,无法登录'; $this->ajaxReturn($res); } $User2['storelist'] = $storelist; $User2['merchantid'] = $User['id']; $User2['uid'] = $User['id']; $User2['operator_id'] = $JurUser['id']; //获取付费插件列表及状态 $plug_result = $PlugApi->merPlugState([ 'merchant_id' => $User2['merchantid'], 'identification_arr' => ['credit', 'moraleducationcoin'] ]); $User2['is_credit'] = $plug_result['credit']; $User2['moralEducationCoin'] = $plug_result['moraleducationcoin']; $RetailMerchantConfigModel = new RetailMerchantConfigModel(); $VipConfigModel = new VipConfigModel(); $User2['goods_integral_state'] = $VipConfigModel->getFindField(['merchantid' => $User['id']], 'goods_integral_state'); //1开启 2关闭 $User2['is_check_show_invenum'] = $RetailMerchantConfigModel->getFindField(['merchant_id' => $User['id']], 'is_check_show_invenum'); $User2['platform_type'] = $User['platform_type'] ? $User['platform_type'] : 1; if ($plug_result['moraleducationcoin']) { //商户德育币插件设置是否禁用非德育币支付方式 $MerModel = new \MoralEducationCoin\Model\MoralEducationCoinMerModel(); $conf = $MerModel->getFind(['merchant_id' => $User['id']], 'only_pay'); $User2['show_normal_pay'] = $conf['only_pay'] == 1 ? 0 : 1; } else { $User2['show_normal_pay'] = 1; } $res['msg'] = '登录成功'; $res['userinfo'] = $User2; } else { $res['msg'] = '账号已到期,请联系商家'; } } else { $res['msg'] = '密码错误'; } } elseif ($now < $User['begin_time']) { //账号正常 但未到启用时间 $res['status'] = 0; $res['msg'] = '对不起,该账号还未到使用时间范围,无法登录'; } elseif ($now > $User['end_time']) { //账号过期 $res['status'] = 0; $res['msg'] = '对不起,该账号已过期,无法登录'; } } } elseif ($type == 4) { //店长登录 $cashier = $manager->where($map)->find(); $JMap['user_type'] = 4; $JMap['system_user_id'] = $cashier['id']; $JurUser = M('jurisdiction_user')->where($JMap)->find(); if (empty($cashier) || empty($JurUser)) { //查询不到 $res['status'] = 0; $res['msg'] = '账号不存在'; } else { $User = $merchant->where(array('id' => $cashier['merchantid']))->find(); $store = M("retail_store")->where(array('id' => $cashier['storeid']))->find(); //商户有使用失效限制,需要判断账号是否可用 //还需判断商户账号是否可用 if ($User['status'] == 1) { $now = time(); if ($now > $User['begin_time'] && $now < $User['end_time']) { //账号可用 //需要判断门店状态 if (empty($store)) { $res['status'] = 0; $res['msg'] = '不存在该门店,无法登录'; } elseif ($store['state'] == '1') { //被删除状态 $res['status'] = 0; $res['msg'] = '门店状态异常,无法登录'; } elseif ($store['state'] == '0' && $store['store_status'] == '0') { $CryptrModel = new \Addons\Api\Crypto(); $orignPwd = $CryptrModel->encrypt($pwd, date('YmdHis', $JurUser['add_time'])); if ($orignPwd == $JurUser['password']) { $res['status'] = 1; $cashier['account_type'] = 2; $res['msg'] = '登录成功'; $userinfo['usertype'] = 2; $userinfo['storeid'] = $cashier['storeid']; $userinfo['merchantid'] = $cashier['merchantid']; $userinfo['uid'] = $cashier['id']; $userinfo['storetag'] = $store['storetag']; $userinfo['supplier_type'] = $store['supplier_type']; $userinfo['manager_id'] = $cashier['id']; $userinfo['operator_id'] = $JurUser['id']; $VipConfigModel = new VipConfigModel(); $userinfo['goods_integral_state'] = $VipConfigModel->getFindField(['merchantid' => $cashier['merchantid']], 'goods_integral_state'); //1开启 2关闭 $StoreConfigModel = new \Common\Model\StoreConfigModel(); $userinfo['is_check_show_invenum'] = $StoreConfigModel->getFindField(['store_id' => $store['id']], 'is_check_show_invenum'); //获取付费插件列表及状态 $plug_result = $PlugApi->merPlugState([ 'merchant_id' => $userinfo['merchantid'], 'identification_arr' => ['credit', 'moraleducationcoin'] ]); $userinfo['is_credit'] = $plug_result['credit']; $userinfo['moralEducationCoin'] = $plug_result['moraleducationcoin']; $userinfo['platform_type'] = $User['platform_type'] ? $User['platform_type'] : 1; if ($plug_result['moraleducationcoin']) { //商户德育币插件设置是否禁用非德育币支付方式 $MerModel = new \MoralEducationCoin\Model\MoralEducationCoinMerModel(); $conf = $MerModel->getFind(['merchant_id' => $userinfo['merchantid']], 'only_pay'); $userinfo['show_normal_pay'] = $conf['only_pay'] == 1 ? 0 : 1; } else { $userinfo['show_normal_pay'] = 1; } $res['userinfo'] = $userinfo; } else { $res['msg'] = '密码错误'; } } elseif ($store['state'] == '0' && $store['store_status'] == '1') { $res['status'] = 0; $res['msg'] = '门店状态异常,无法登录,请联系商家管理员'; } } elseif ($now < $User['begin_time']) { //账号正常 但未到启用时间 $res['status'] = 0; $res['msg'] = '对不起,该商户账号还未到使用时间范围,无法登录'; } elseif ($now > $User['end_time']) { //账号过期 $res['status'] = 0; $res['msg'] = '对不起,该商户账号已过期,无法登录'; } } else { //商户账号不可用 $res['status'] = 0; $res['msg'] = '商户账号不可用,无法登录'; } } } else if ($type == 5) { //收银员登录 A('CashierApi/Login')->doLogin_v1(); } $this->ajaxReturn($res); } else { $res['status'] = 0; $res['msg'] = '错误的请求方式,必须是post方式'; $this->ajaxReturn($res); } } /** * 助手数据汇总 * 2021年1月12日16:02:30 * @param storeid 门店id * @param user_type 用户类型 * @param operator_id 操作人员id * @author GuYunQinFeng */ protected function sellcount() { $storeid = I('post.storeid'); if (!$storeid) { $this->ajaxReturn(['status' => 0, 'msg' => '参数错误']); } $user_type = I('post.user_type'); if ($user_type == 3) { //收银员 $RetailCashierModel = new RetailCashierModel(); $cashier_id = I('post.operator_id'); if ($cashier_id) { $cashier_show_other_sell = $RetailCashierModel->getFindField(['id' => $cashier_id], 'cashier_show_other_sell'); if ($cashier_show_other_sell == 2) { $where['cashier_id'] = $cashier_id; } } } $BillOrderModel = new RetailBillOrderModel(); $PayOrderModel = new RetailPayOrderModel(); $start = strtotime(date('Y-m-d 00:00:00')); $end = $start + 86399; $where['add_time'] = ['between', [$start, $end]]; $where['pay_state'] = 1; $where['store_id'] = $storeid; $where['order_type'] = 1; $billAllMoney = $BillOrderModel->getSum($where, 'all_money'); $billALlCount = $BillOrderModel->getCount($where); $where['order_type'] = 2; $billRefundMoney = $BillOrderModel->getSum($where, 'all_money'); //快捷收银 $map = [ 'store_id' => $storeid, 'order_type' => 6, 'trade_date' => ['between', [$start, $end]], 'order_state' => 'SUCCESS', ]; if ($cashier_id && $cashier_show_other_sell == 2) { $map['cashier_id'] = $cashier_id; } $quickTotalMoney = $PayOrderModel->getSum($map, 'trade_amount'); $quickTotalCount = $PayOrderModel->getCount($map); $map['order_state'] = 'REFUND'; $quickRefundMoney = $PayOrderModel->getSum($map, 'trade_amount'); $repaymentMoney = 0; //实例化插件类 $PlugApi = new Plug(); //获取付费插件列表及状态 $plug_result = $PlugApi->PlugPermissions(array( 'merchant_id' => I('post.merchant_id'), 'identification_arr' => ['credit'] )); //商户是否存在赊账插件 if ($plug_result['data']['plug']['credit'] > 0) { $CreditRepaymentModel = new \Credit\Model\CreditRepaymentModel(); // 还款 $repayment_map = [ 'operate_type' => 1, //确保是收银员 'store_id' => $storeid, 'add_time' => ['between', [$start, $end]], ]; if ($cashier_id && $cashier_show_other_sell == 2) { $repayment_map['operate_id'] = $cashier_id; } $repaymentMoney = $CreditRepaymentModel->getSum($repayment_map, 'money'); } $all_money = round($repaymentMoney + $billAllMoney - $billRefundMoney + $quickTotalMoney - $quickRefundMoney, 2); //总的交易金额 $count = bcadd($billALlCount, $quickTotalCount, 0); //总的交易笔数(减去退款笔数) // 次卡销售金额统计 $subCardMap = [ 'store_id' => $storeid, 'scene_type' => 1, //付款订单 'order_type' => 7, //购买次卡 'trade_date' => ['between', [$start, $end]], ]; $sub_card_money = $PayOrderModel->getSum($subCardMap, 'trade_amount'); //次卡没有退款 $info = [ 'allmoney' => bcadd($all_money, $sub_card_money, 2), 'count' => $count ]; $store = M('retail_store_jurisdiction')->where(['storeid' => $storeid])->find(); $result = [ 'status' => 1, 'msg' => '搜索成功', 'info' => $info, 'jurisdiction' => $store ? $store : (object)array(), ]; $this->ajaxReturn($result); } // 收银员列表 protected function cashierlist() { if (IS_POST) { $this->newCashierList_v1(); } } //------------------------------------------------------------------收银员收款--------------------------------------------------------- protected function newcashierlist() { if (IS_POST) { $storeid = I('post.storeid'); if (!$storeid) { $rt['status'] = 0; $rt['msg'] = '参数错误'; $this->ajaxReturn($rt); exit(); } $needsellinfo = I('post.needsellinfo'); $list = M('retail_cashier') ->where(array('status' => 1, 'storeid' => $storeid)) ->field('id,name') ->select(); if ($list) { if ($needsellinfo) { $list = $list ? $list : array(); // $list = array_merge(array(array('id'=>0,'name'=>'商城订单收银统计')),$list); $endtime = I('post.endtime'); // 2018-10-11; $starttime = I('post.starttime'); // 2018-10-11; $start = strtotime($starttime . ' 00:00:00'); $end = strtotime($endtime . ' 23:59:59'); foreach ($list as $k => $v) { $count = 0; if ($v['id']) { $where['admin_id'] = $v['id']; } else { $where['admin_id'] = array(array('eq', 0), array('EXP', 'IS NULL'), 'OR'); } //----------------------------------------------------------------------------------------------// if (!$endtime && !$starttime) { $start = strtotime(date('Y-m-d 00:00:00', time())); $end = $start + 86399; } $where['addtime'] = array('between', array($start, $end)); $where['pay_state'] = 1; $where['storeid'] = $storeid; $where['order_type'] = 1; // 现金付款 $where['paytype'] = 1; $xj = M('retail_bill')->where($where)->sum('allmoney'); $xj_1 = M('retail_bill')->where($where)->sum('refund_money'); $xj_1 = $xj_1 ? round($xj_1, 2) : 0; $xj = $xj ? round($xj - $xj_1, 2) : 0; $count += M('retail_bill')->where($where)->count(); //微信支付 $where['paytype'] = 3; $wxpay = M('retail_bill')->where($where)->sum('allmoney'); $wxpay_1 = M('retail_bill')->where($where)->sum('refund_money'); $wxpay_1 = $wxpay_1 ? round($wxpay_1, 2) : 0; $wxpay = $wxpay ? round($wxpay - $wxpay_1, 2) : 0; $count += M('retail_bill')->where($where)->count(); //支付宝支付 $where['paytype'] = 4; $zfb = M('retail_bill')->where($where)->sum('allmoney'); $zfb_1 = M('retail_bill')->where($where)->sum('refund_money'); $zfb_1 = $zfb_1 ? round($zfb_1, 2) : 0; $zfb = $zfb ? round($zfb - $zfb_1, 2) : 0; $count += M('retail_bill')->where($where)->count(); //小程序微信支付 $where['paytype'] = 6; $xcxwx = M('retail_bill')->where($where)->sum('allmoney'); $xcxwx_1 = M('retail_bill')->where($where)->sum('refund_money'); $xcxwx = $xcxwx ? round($xcxwx - $xcxwx_1, 2) : 0; $xcxwx_1 = $xcxwx_1 ? round($xcxwx_1, 2) : 0; $count += M('retail_bill')->where($where)->count(); if ($v['id'] == 0) { // 拼团支付(今日) $g_map['paystatus'] = 2; $g_map['refundtype'] = 1; $g_map['paytime'] = array('between', array($start, $end)); $xcx_group = M('retail_group_order')->where($g_map)->sum('paymoney'); $count += M('retail_group_order')->where($g_map)->count(); // 拼团退款(今日) $g_map_1['paystatus'] = 2; $g_map_1['refundtype'] = 2; $g_map_1['refundtime'] = array('between', array($start, $end)); $xcx_group_1 = M('retail_group_order')->where($g_map_1)->sum('paymoney'); $xcx_group = $xcx_group ? round($xcx_group, 2) : 0; $xcx_group_1 = $xcx_group_1 ? round($xcx_group_1, 2) : 0; $count += M('retail_group_order')->where($g_map_1)->count(); // 小程序秒杀 $s_map['paystatus'] = 2; $s_map['status'] = 1; $s_map['paytime'] = array('between', array($start, $end)); $xcx_seckill = M('retail_seckill_order')->where($s_map)->sum('paymoney'); $xcx_seckill = $xcx_seckill ? round($xcx_seckill, 2) : 0; $count += M('retail_seckill_order')->where($s_map)->count(); } // 计算(整型) $xcx_sum_old = ($xcxwx * 100) + ($xcx_group * 100) + ($xcx_seckill * 100); $xcx_sum_old_1 = ($xcxwx_1 * 100) + ($xcx_group_1 * 100); // 转换成实际价钱 $xcx_sum = $xcx_sum_old / 100; $xcx_sum_1 = $xcx_sum_old_1 / 100; // 其他支付。 $where['paytype'] = 7; $other_pay = M('retail_bill')->where($where)->sum('allmoney'); $other_pay_1 = M('retail_bill')->where($where)->sum('refund_money'); $other_pay_1 = $other_pay_1 ? round($other_pay_1, 2) : 0; $other_pay = $other_pay ? round($other_pay - $other_pay_1, 2) : 0; $count += M('retail_bill')->where($where)->count(); //会员卡支付 $where['paytype'] = 5; $membermoney = M('retail_bill')->where($where)->sum('allmoney'); $membermoney_1 = M('retail_bill')->where($where)->sum('refund_money'); $membermoney_1 = $membermoney_1 ? round($membermoney_1, 2) : 0; $membermoney = $membermoney ? round($membermoney - $membermoney_1, 2) : 0; $count += M('retail_bill')->where($where)->count(); //统计今日退款金额 $refund = round($xj_1 + $wxpay_1 + $zfb_1 + $xcx_sum_1 + $other_pay_1 + $membermoney_1, 2); //今日总金额 $allmoney = round($xj + $wxpay + $zfb + $xcx_sum + $membermoney + $other_pay, 2); //-----------------------------------------------------------------------------------------------// // $where['addtime'] = array('between', array($start, $end)); // $where['pay_state'] = 1; // $where['storeid'] = $storeid; // $where['order_type'] = 1; // // 现金付款 // $where['paytype'] = 1; // $xj = M('retail_bill')->where($where)->sum('allmoney'); // $xj_1 = M('retail_bill')->where($where)->sum('refund_money'); // $count += M('retail_bill')->where($where)->count(); // $xj_1 = $xj_1 ? round($xj_1, 2) : 0; // $xj = $xj ? round($xj - $xj_1, 2) : 0; // // //微信支付 // $where['paytype'] = 3; // $wxpay = M('retail_bill')->where($where)->sum('allmoney'); // $wxpay_1 = M('retail_bill')->where($where)->sum('refund_money'); // $count += M('retail_bill')->where($where)->count(); // $wxpay_1 = $wxpay_1 ? round($wxpay_1, 2) : 0; // $wxpay = $wxpay ? round($wxpay - $wxpay_1, 2) : 0; // // //支付宝支付 // $where['paytype'] = 4; // $zfb = M('retail_bill')->where($where)->sum('allmoney'); // $zfb_1 = M('retail_bill')->where($where)->sum('refund_money'); // $count += M('retail_bill')->where($where)->count(); // $zfb_1 = $zfb_1 ? round($zfb_1, 2) : 0; // $zfb = $zfb ? round($zfb - $zfb_1, 2) : 0; // // //小程序微信支付 // $where['paytype'] = 6; // $xcxwx = M('retail_bill')->where($where)->sum('allmoney'); // $xcxwx_1 = M('retail_bill')->where($where)->sum('refund_money'); // $count += M('retail_bill')->where($where)->count(); // $xcxwx = $xcxwx ? round($xcxwx - $xcxwx_1, 2) : 0; // $xcxwx_1 = $xcxwx_1 ? round($xcxwx_1, 2) : 0; // if($v['id']==0) { // // 拼团支付(今日) // $g_map['paystatus'] = 2; // $g_map['refundtype'] = 1; // $g_map['paytime'] = array('between', array($start, $end)); // $xcx_group = M('retail_group_order')->where($g_map)->sum('paymoney'); // $count += M('retail_group_order')->where($g_map)->count(); // // 拼团退款(今日) // $g_map_1['paystatus'] = 2; // $g_map_1['refundtype'] = 2; // $g_map_1['refundtime'] = array('between', array($start, $end)); // $xcx_group_1 = M('retail_group_order')->where($g_map_1)->sum('paymoney'); // $count += M('retail_group_order')->where($g_map_1)->count(); // $xcx_group = $xcx_group ? round($xcx_group, 2) : 0; // $xcx_group_1 = $xcx_group_1 ? round($xcx_group_1, 2) : 0; // // 小程序秒杀 // $s_map['paystatus'] = 2; // $s_map['status'] = 1; // $s_map['paytime'] = array('between', array($start, $end)); // $xcx_seckill = M('retail_seckill_order')->where($s_map)->sum('paymoney'); // $count += M('retail_seckill_order')->where($s_map)->count(); // $xcx_seckill = $xcx_seckill ? round($xcx_seckill, 2) : 0; // // // 计算(整型) // $xcx_sum_old = ($xcxwx * 100) + ($xcx_group * 100) + ($xcx_seckill * 100); // $xcx_sum_old_1 = ($xcxwx_1 * 100) + ($xcx_group_1 * 100); // }else{ // // 计算(整型) // $xcx_sum_old = ($xcxwx * 100) ; // $xcx_sum_old_1 = ($xcxwx_1 * 100); // } // // 转换成实际价钱 // $xcx_sum = $xcx_sum_old / 100; // $xcx_sum_1 = $xcx_sum_old_1 / 100; // // // 其他支付。 // $where['paytype'] = 7; // $other_pay = M('retail_bill')->where($where)->sum('allmoney'); // $other_pay_1 = M('retail_bill')->where($where)->sum('refund_money'); // $count += M('retail_bill')->where($where)->count(); // $other_pay_1 = $other_pay_1 ? round($other_pay_1, 2) : 0; // $other_pay = $other_pay ? round($other_pay - $other_pay_1, 2) : 0; // // //会员卡支付 // $where['paytype'] = 5; // $membermoney = M('retail_bill')->where($where)->sum('allmoney'); // $membermoney_1 = M('retail_bill')->where($where)->sum('refund_money'); // $count += M('retail_bill')->where($where)->count(); // $membermoney_1 = $membermoney_1 ? round($membermoney_1, 2) : 0; // $membermoney = $membermoney ? round($membermoney - $membermoney_1, 2) : 0; // //统计今日退款金额 // $refund = round($xj_1 + $wxpay_1 + $zfb_1 + $xcx_sum_1 + $other_pay_1 + $membermoney_1, 2); //会员卡 $ww2['storeid'] = $storeid; $ww2['type'] = 1; // 会员充值 $ww2['addtime'] = array('between', array($start, $end)); if ($v['id']) { $ww2['usertype'] = 3; $ww2['adminid'] = $v['id']; } else { $ww2['adminid'] = array(array('eq', 0), array('EXP', 'IS NULL'), 'OR'); } $ww2['status'] = 1; $vipcard = M('recharge_order')->where($ww2)->sum('money'); $vipcard = $vipcard ? round($vipcard, 2) : 0; // // //今日总金额 // $allmoney = round($xj + $wxpay + $zfb + $xcx_sum + $membermoney + $other_pay, 2); $info = array( 'xj' => $xj, 'wx' => $wxpay, 'zfb' => $zfb, 'xcx' => $xcx_sum, 'refund' => $refund, 'vipcard' => $membermoney, 'vipaddmoney' => $vipcard, 'allmoney' => $allmoney, 'other_pay' => $other_pay, 'count' => $count ); $list[$k]['sellinfo'] = $info; } $rt['status'] = 1; $rt['msg'] = '查询成功'; $rt['list'] = $list; $rt['starttime'] = date('Y-m-d', $start); $rt['endtime'] = date('Y-m-d', $end); } else { $rt['status'] = 1; $rt['msg'] = '查询成功'; $rt['list'] = $list; $rt['starttime'] = date('Y-m-d', time()); $rt['endtime'] = date('Y-m-d', time()); } } else { $rt['status'] = 0; $rt['msg'] = '暂无收银员'; $rt['starttime'] = date('Y-m-d', time()); $rt['endtime'] = date('Y-m-d', time()); } $this->ajaxReturn($rt); } } // 商品分类数据 protected function goodscate() { if (IS_POST) { $merchantid = I('post.merchantid'); $keyword = I('post.keyword'); $classindextype = I('post.classtypeindex'); $classindextype = $classindextype ? $classindextype : 0; $type = I('post.type'); $user_type = I('post.user_type'); //user_type 1商户 2门店 $store_id = I('post.store_id'); $w = array('merchantid' => $merchantid, 'status' => 0); $w1 = array('merchantid' => $merchantid, 'status' => 0); $w2 = array('merchantid' => $merchantid, 'status' => 0); if ($user_type == 2 && !empty($store_id)) { //门店的行业对分类获取进行限制 $StoreModel = new RetailStoreModel(); $industry_id = $StoreModel->getFindField([ 'id' => $store_id ], 'industry_id'); if (!empty($industry_id)) { $w['industry_id'] = ['in', [0, $industry_id]]; $w1['industry_id'] = ['in', [0, $industry_id]]; $w2['industry_id'] = ['in', [0, $industry_id]]; } } if ($classindextype == 0) { if ($keyword) { $w['class_name'] = array('like', '%' . $keyword . '%'); } $w['type'] = 1; // 一级分类 $one = M('retail_goods_class') ->where($w) ->order('code asc') ->field('id,class_name') ->select(); if ($one) { foreach ($one as $k1 => $v1) { $w1['type'] = 2; $w1['pid'] = $v1['id']; $two = M('retail_goods_class') ->where($w1) ->order('code asc') ->field('id,class_name') ->select(); if ($two) { foreach ($two as $k2 => $v2) { $w2['type'] = 3; $w2['pid'] = $v2['id']; $three = M('retail_goods_class') ->where($w2) ->order('code asc') ->field('id,class_name') ->select(); if ($three) { if ($type) { $two[$k2]['childtwo'] = $three; } else { $two[$k2]['child'] = $three; } $two[$k2]['haschild'] = 1; $two[$k2]['show'] = false; } else { if ($type) { $two[$k2]['childtwo'] = array(); } else { $two[$k2]['child'] = array(); } $two[$k2]['haschild'] = 0; } } if ($type) { $one[$k1]['childone'] = $two; } else { $one[$k1]['child'] = $two; } $one[$k1]['haschild'] = 1; $one[$k1]['show'] = false; } else { if ($type) { $one[$k1]['childone'] = array(); } else { $one[$k1]['child'] = array(); } $one[$k1]['haschild'] = 0; } } } } else if ($classindextype == 1) { $w1['type'] = 2; if ($keyword) { $w1['class_name'] = array('like', '%' . $keyword . '%'); } $one = M('retail_goods_class') ->where($w1) ->order('code asc') ->field('id,class_name') ->select(); if ($one) { foreach ($one as $k2 => $v2) { $w2['type'] = 3; $w2['pid'] = $v2['id']; $three = M('retail_goods_class') ->where($w2) ->order('code asc') ->field('id,class_name') ->select(); if ($three) { if ($type) { $one[$k2]['childone'] = $three; } else { $one[$k2]['child'] = $three; } $one[$k2]['haschild'] = 1; $one[$k2]['show'] = false; } else { if ($type) { $one[$k2]['childone'] = array(); } else { $one[$k2]['child'] = array(); } $two[$k2]['haschild'] = 0; } } } } else if ($classindextype == 2) { if ($keyword) { $w['class_name'] = array('like', '%' . $keyword . '%'); } $w['type'] = 3; // 三级分类 $one = M('retail_goods_class') ->where($w) ->order('code asc') ->field('id,class_name') ->select(); } $goodsclass = $one; if ($goodsclass) { $rt['status'] = 1; $rt['msg'] = '搜索成功'; $rt['goodscate'] = $goodsclass; } else { $rt['status'] = 0; $rt['msg'] = '搜索失败'; } $this->ajaxReturn($rt); } } //获取规格信息 protected function skuInfo() { $merchant_id = I('post.merchantid'); $skuList = A('Api/Inventory')->getSkuAttr($merchant_id); $this->ajaxReturn($skuList); } /* * 添加规格属性 */ protected function addSkuAttr() { $user_type = I('post.user_type'); //1商户2门店3收银员 $user_type = $user_type ? $user_type : 0; $store_id = I('post.storeid'); $merchant_id = I('post.merchantid'); $name = I('post.name'); $success = A('Api/Inventory')->addSkuAttr_forAddMGoods($name, $user_type, $merchant_id, $store_id); $this->ajaxReturn($success); } //添加规格 protected function addSkuList() { $user_type = I('post.user_type'); $user_type = $user_type ? $user_type : 0; $store_id = I('post.storeid'); $merchant_id = I('post.merchantid'); $attr_id = I('post.attr_id'); $name = I('post.name'); $success = A('Api/Inventory')->addSkuList_forAddMGoods($attr_id, $name, $user_type, $merchant_id, $store_id); $this->ajaxReturn($success); } /** * 自动获取获取货号 */ public function auto_number() { $data = I("post."); $store_id = $data['storeid']; $merchant_id = $data['merchantid']; $user_type = $data['user_type']; //1商家 2门店 3员工 $i = 0; switch ($user_type) { case 1: $MGoods = D("RetailMgoods"); while (1) { $num = rand(1000, 99999); $map = array( $MGoods::MERCHANT_ID => $merchant_id, $MGoods::GOODS_NUMBER => $num, $MGoods::STATUS => array('in', '0,1') ); $info = $MGoods->getFindField($map, "id"); if (empty($info)) { $res['status'] = 1; $res['goods_number'] = $num; $res['msg'] = '获取成功'; $this->ajaxReturn($res); break; } $i++; if ($i > 30) { $res['status'] = 0; $res['msg'] = '获取失败,请重试'; $this->ajaxReturn($res); break; } } break; case 2: case 3; $Goods = D("RetailGoods"); while (1) { $num = rand(1000, 99999); $map = array( $Goods::STORE_ID => $store_id, $Goods::GOODS_NUMBER => $num, $Goods::STATUS => array('in', '0,1') ); $info = $Goods->getFindField($map, "id"); if (empty($info)) { $res['status'] = 1; $res['goods_number'] = $num; $res['msg'] = '获取成功'; $this->ajaxReturn($res); break; } $i++; if ($i > 30) { $res['status'] = 0; $res['msg'] = '获取失败,请重试'; $this->ajaxReturn($res); break; } } } } // 新增商品 protected function addgoods() { if (IS_POST) { $postInfo = I("post."); $usertype = $postInfo["user_type"] ? $postInfo["user_type"] : 3; //1商户 2门店 3收银员 $cashier_id = $postInfo['cashier_id']; //收银员id $store_id = $postInfo['storeid']; $merchant_id = $postInfo["merchantid"]; $supplier_type = D("RetailStore")->getFindField(array('id' => $store_id), "supplier_type"); if ($usertype == 1) { //商户 $warehouse_id = D('SaleWarehouse')->getFindField(array('merchant_id' => $merchant_id, 'status' => 1), "id"); } else { $addGoodsPower = M("retail_store_jurisdiction")->where(array('storeid' => $store_id))->getField("addgoods"); if ($addGoodsPower == 2) { $res['status'] = 0; $res['msg'] = "暂无添加商品权限"; $this->ajaxReturn($res); } if ($usertype == 3) { $cashierInfo = D("RetailCashier")->getFind(array('id' => $cashier_id), "cashier_add_goods"); if ($cashierInfo['cashier_add_goods'] == 2) { $res['status'] = 0; $res['msg'] = "暂无添加商品权限"; $this->ajaxReturn($res); } } $warehouse_id = D('SSaleWarehouse')->getFindField(array('store_id' => $store_id, 'status' => 1), "id"); } if (!$warehouse_id) { $res['status'] = 0; $res['msg'] = '请先创建仓库'; $this->ajaxReturn($res); } $data = array(); $data['goods_name'] = $postInfo["goods_name"]; //商品名称 $purchase_price = $postInfo["purch_price"]; $goods_number = $postInfo["goods_number"]; $goods_img_id = $postInfo["goodimage"]; $is_change_weight = $postInfo["is_change_weight"] ? $postInfo["is_change_weight"] : 1; $attribute_state = $postInfo["attribute_state"] ? $postInfo["attribute_state"] : 1; $goods_num = $postInfo["goods_num"] ? $postInfo["goods_num"] : 0; //商品库存 $data['status'] = 0; //商品状态 $data['more_num'] = $postInfo["more_num"]; //商品超量值 $data['less_num'] = $postInfo["less_num"]; //商品预警值 $data['goods_code'] = $postInfo["goods_code"]; //商品条码 $data['goods_class_id'] = $postInfo["goods_class_id"]; //商品分类 $data['retail_price'] = $postInfo["retail_price"]; //商品零售价 $data['company'] = $postInfo['company'] ? $postInfo['company'] : ''; if ($is_change_weight == 2 && $data['company'] == '') { $res['status'] = 0; $res['msg'] = '请输入单位'; $this->ajaxReturn($res); } if ($usertype == 1) { $data['merchantid'] = $merchant_id; //商户ID $data['storeid'] = $store_id; //门店ID $data['addtime'] = time(); $data['purch_price'] = $purchase_price; //商品进价 $data['good_number'] = $goods_number; //商品货号 $data['can_exchange_weigh'] = $is_change_weight; $data['attribute'] = $attribute_state; $data['goods_image_id'] = $goods_img_id; // 商户商品图片 } else { $data['merchant_id'] = $merchant_id; //商户ID $data['store_id'] = $store_id; //门店ID $data['add_time'] = time(); $data['purchase_price'] = $purchase_price; //商品进价 $data['goods_number'] = $goods_number; //商品货号 $data['pricing_method'] = $is_change_weight; $data['attribute_state'] = $attribute_state; $data['goods_img_id'] = $goods_img_id; // 商品图片 } $skuList = $_POST["skuList"]; $skuList = json_decode($skuList, true); if ($is_change_weight == 2 && $attribute_state == 2) { $res['status'] = 0; $res['msg'] = '规格与称重不能同时开启'; $this->ajaxReturn($res); } if ($attribute_state == 2 && empty($skuList)) { $res['status'] = 0; $res['msg'] = '规格信息有误'; $this->ajaxReturn($res); } if (empty($goods_number)) { $res['status'] = 0; $res['msg'] = '货号不能为空'; $this->ajaxReturn($res); } if ($goods_num > 0 && $purchase_price * 1 <= 0 || $purchase_price < 0) { $res['status'] = 0; $res['msg'] = '进价不得小于0'; $this->ajaxReturn($res); } if (!empty($data['goods_code']) && strlen($data['goods_code']) > 17) { $res['status'] = 0; $res['msg'] = '商品条码长度不得大于17'; $this->ajaxReturn($res); } if ($supplier_type != 2 && $goods_num * 1 < 0) { $res['status'] = 0; $res['msg'] = '库存不得小于0'; $this->ajaxReturn($res); } if ($data['more_num'] * 1 < 0) { $res['status'] = 0; $res['msg'] = '超量值不得小于0'; $this->ajaxReturn($res); } if ($data['less_num'] * 1 < 0) { $res['status'] = 0; $res['msg'] = '预警值不得小于0'; $this->ajaxReturn($res); } $map = array(); $map['status'] = array('neq', 2); if ($usertype == 1) { $map['merchantid'] = $merchant_id; $map['good_number'] = $goods_number; //商品货号 $one = M('retail_mgoods')->where($map)->find(); } else { $map['store_id'] = $store_id; $map['merchant_id'] = $merchant_id; $map['goods_number'] = $goods_number; //商品货号 $one = M('retail_goods')->where($map)->find(); } if ($one) { $res['status'] = 0; $res['msg'] = '商品货号重复'; $this->ajaxReturn($res); } if (!empty($data['goods_code'])) { $map = array(); $map['status'] = array('neq', 2); $map['goods_code'] = $data['goods_code']; //商品条码 if ($usertype == 1) { $map['merchantid'] = $merchant_id; $one = M('retail_mgoods')->where($map)->find(); } else { $map['store_id'] = $store_id; $map['merchant_id'] = $merchant_id; $one = M('retail_goods')->where($map)->find(); } if ($one) { $res['status'] = 0; $res['msg'] = '商品条码重复'; $this->ajaxReturn($res); } } if ($attribute_state == 2 && is_array($skuList) && !empty($skuList)) { $sku_attr_length = count($skuList[0]['id']); if ($sku_attr_length > 4) { $res['status'] = 0; $res['msg'] = '最多只能添加四种规格'; $this->ajaxReturn($res); } $sku_goods_num = 0; $codeArr = array(); $numberArr = array(); if (!empty($data['goods_code'])) { $codeArr[] = $data['goods_code']; } if (!empty($goods_number)) { $numberArr[] = $goods_number; } $all_sku_list_id = ''; foreach ($skuList as $key => $val) { if (!$val['sku_goods_number']) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的货号'; $this->ajaxReturn($res); } if (in_array($val['sku_goods_number'], $numberArr)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格货号已存在'; $this->ajaxReturn($res); } else { $numberArr[] = $val['sku_goods_number']; } $sku_map = array(); $sku_map['sku_goods_number'] = $val['sku_goods_number']; $sku_map['state'] = 0; if ($usertype == 1) { //商户 $sku_map['merchantid'] = $merchant_id; $skuInfo = M('retail_sku_mgoods')->where($sku_map)->find(); } else { $sku_map['store_id'] = $store_id; $skuInfo = M('retail_sku_goods')->where($sku_map)->find(); } if ($skuInfo) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格货号已存在'; $this->ajaxReturn($res); } if ($usertype == 1) { $map = array( 'good_number' => $val['sku_goods_number'], 'merchantid' => $merchant_id, 'status' => array('in', '0,1') ); $goodsInfo = M('retail_mgoods')->where($map)->find(); } else { $map = array( 'store_id' => $store_id, 'goods_number' => $val['sku_goods_number'], 'merchant_id' => $merchant_id, 'status' => array('in', '0,1') ); $goodsInfo = M('retail_goods')->where($map)->find(); } if ($goodsInfo) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格货号已存在'; $this->ajaxReturn($res); } if (!is_numeric($val['purchase_price']) || $val['purchase_price'] < 0) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的进价'; $this->ajaxReturn($res); } if ($val['goods_num'] > 0) { if (!$val['purchase_price'] || $val['purchase_price'] < 0.01 || $val['purchase_price'] != round($val['purchase_price'], 2)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的进价'; $this->ajaxReturn($res); } } if (!$val['retail_price'] || !is_numeric($val['retail_price']) || $val['retail_price'] < 0.01 || $val['retail_price'] != round($val['retail_price'], 2)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的零售价'; $this->ajaxReturn($res); } if (!empty($val['sku_code'])) { if (strlen($val['sku_code']) > 17) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格条码不能大于18位'; $this->ajaxReturn($res); } if (in_array($val['sku_code'], $codeArr)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格商品条码重复'; $this->ajaxReturn($res); } else { $codeArr[] = $val['sku_code']; } if ($usertype == 1) { $map = array( 'merchantid' => $merchant_id, 'sku_code' => $val['sku_code'], 'state' => 0 ); $old = M('retail_sku_mgoods')->where($map)->find(); } else { $map = array( 'store_id' => $store_id, 'sku_code' => $val['sku_code'], 'state' => 0 ); $old = M('retail_sku_goods')->where($map)->find(); } if ($usertype == 1) { $map = array( 'goods_code' => $val['sku_code'], 'merchantid' => $merchant_id, 'status' => array('in', '0,1') ); $old1 = M('retail_mgoods')->where($map)->find(); } else { $map = array( 'store_id' => $store_id, 'goods_code' => $val['sku_code'], 'merchant_id' => $merchant_id, 'status' => array('in', '0,1') ); $old1 = M('retail_goods')->where($map)->find(); } if (!empty($old) || !empty($old1)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格商品条码已存在'; $this->ajaxReturn($res); } } $sku_id_list = ''; $sku_name = ''; for ($i = 0; $i < $sku_attr_length; $i++) { if (!empty($val['id'][$i])) { $sku_id_list .= ',' . $val['id'][$i]; $sku_name .= ',' . $val['name'][$i]; } else { $res['val'] = $key . '-' . $i; $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '条规格数据的规格信息有误'; } $all_sku_list_id .= ',' . $sku_id_list; } $temp['sku_num'] = 1; $temp['name'] = ltrim($sku_name, ','); $temp['sku_id_list'] = ltrim($sku_id_list, ','); $temp['retail_price'] = $val['retail_price']; $temp['purchase_price'] = $val['purchase_price'] ? $val['purchase_price'] : 0; $temp['goods_num'] = is_numeric($val['goods_num']) ? $val['goods_num'] : 0; if (!empty($val['goods_num']) && (!is_numeric($val['goods_num']) || $val['goods_num'] != round($val['goods_num']))) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格的库存有误'; $this->ajaxReturn($res); } $temp['add_time'] = time(); $temp['status'] = 1; $temp['state'] = 0; $temp['sku_goods_number'] = $val['sku_goods_number']; $temp['sku_code'] = $val['sku_code']; if ($usertype == 1) { $temp['merchantid'] = $merchant_id; } else { $temp['store_id'] = $store_id; $temp['merchant_id'] = $merchant_id; } $skuArrData[] = $temp; unset($temp); } $all_sku_list_id = ltrim($all_sku_list_id, ','); $attr = M('retail_sku_attr as a') ->join('ls_retail_sku_list as l on l.attr_id=a.id') ->field('a.*') ->where(array('a.merchantid' => $merchant_id, 'a.state' => 0, 'l.id' => array('in', $all_sku_list_id))) ->group('l.attr_id') ->select(); if (count($attr) != $sku_attr_length) { $res['status'] = 0; $res['msg'] = '您添加的规格信息属性重复'; $this->ajaxReturn($res); } } $content = array(); $content = $data; if ($usertype == 1) { $create = M('retail_mgoods')->add($data); $content['merchant_id'] = $merchant_id; $content['goods_number'] = $goods_number; $content['pricing_method'] = $is_change_weight; $content['attribute_state'] = $attribute_state; } else { $create = M('retail_goods')->add($data); } $content['warehouse_id'] = $warehouse_id; $content['goods_id'] = $create; if ($create) { unset($content['retail_price']); if ($attribute_state == 1) { $content['goods_num'] = $goods_num; if ($usertype == 1) { $content['purchase_price'] = $purchase_price; //商户添加 A('Api/Inventory')->merAddSaleGoods($content, 1); } else { A('Api/Inventory')->addSaleGoods($content, 1); } } else if ($attribute_state == 2) { foreach ($skuArrData as $k => &$v) { $content['sku_name'] = $v['name']; $content['sku_id_list'] = $v['sku_id_list']; $content['sku_goods_number'] = $v['sku_goods_number']; $content['sku_code'] = $v['sku_code']; $content['goods_num'] = $v['goods_num']; $content['purchase_price'] = $v['purchase_price']; $content['add_time'] = $v['add_time']; $content['sku_num'] = 1; unset($content['more_num']); unset($content['less_num']); if ($usertype == 1) { $v['mgoods_id'] = $create; $v['addtime'] = $v['add_time']; $v['purch_price'] = $v['purchase_price']; unset($v['add_time']); unset($v['purchase_price']); } else { $v['goods_id'] = $create; } unset($v['id']); unset($v['goods_num']); if ($usertype == 1) { $add = M("retail_sku_mgoods")->add($v); $content['sku_id'] = $add; A('Api/Inventory')->merAddSaleGoods($content, 1); } else { $add = M("retail_sku_goods")->add($v); $content['sku_id'] = $add; A('Api/Inventory')->addSaleGoods($content, 1); } //添加规格 } } if ($usertype == 1 || $usertype == 2) { $parameter['desc'] = '商品档案-新增'; switch ($usertype) { case 1: $parameter['type'] = 3; break; case 2: $parameter['type'] = 4; break; } $this->system_parameter($parameter); } $res['status'] = 1; $res['msg'] = '录入成功'; } else { $res['status'] = 0; $res['msg'] = '录入失败'; } $this->ajaxReturn($res); } } // 新增商品2020-6-5 protected function addgoods_v1() { if (IS_POST) { $postInfo = I("post."); $usertype = $postInfo["user_type"] ? $postInfo["user_type"] : 3; //1商户 2门店 3收银员 $cashier_id = $postInfo['cashier_id']; //收银员id $store_id = $postInfo['storeid']; $merchant_id = $postInfo["merchantid"]; $supplier_type = D("RetailStore")->getFindField(array('id' => $store_id), "supplier_type"); if ($usertype == 1) { //商户 $warehouse_id = D('SaleWarehouse')->getFindField(array('merchant_id' => $merchant_id, 'status' => 1), "id"); } else { $addGoodsPower = M("retail_store_jurisdiction")->where(array('storeid' => $store_id))->getField("addgoods"); if ($addGoodsPower == 2) { $res['status'] = 0; $res['msg'] = "暂无添加商品权限"; $this->ajaxReturn($res); } if ($usertype == 3) { $cashierInfo = D("RetailCashier")->getFind(array('id' => $cashier_id), "cashier_add_goods"); if ($cashierInfo['cashier_add_goods'] == 2) { $res['status'] = 0; $res['msg'] = "暂无添加商品权限"; $this->ajaxReturn($res); } } $warehouse_id = D('SSaleWarehouse')->getFindField(array('store_id' => $store_id, 'status' => 1), "id"); } if (!$warehouse_id) { $res['status'] = 0; $res['msg'] = '请先创建仓库'; $this->ajaxReturn($res); } $data = array(); $data['status'] = $postInfo['status'] ? $postInfo['status'] : 0; //0,正常,1,下架,2,删除 $data['goods_name'] = $postInfo["goods_name"]; //商品名称 $data['more_num'] = $postInfo["more_num"]; //商品超量值 $data['less_num'] = $postInfo["less_num"]; //商品预警值 $data['goods_code'] = $postInfo["goods_code"]; //商品条码 $data['goods_class_id'] = $postInfo["goods_class_id"]; //商品分类 $data['retail_price'] = $postInfo["retail_price"]; //商品零售价 $data['company'] = $postInfo['company'] ? $postInfo['company'] : ''; //单位 $data['weight_value'] = $postInfo['weight_value'] ? $postInfo['weight_value'] : null; //重量 $data['online_price'] = $postInfo['online_price'] ? $postInfo['online_price'] : null; //商城价 $purchase_price = $postInfo["purch_price"]; $goods_number = $postInfo["goods_number"]; $goods_img_id = $postInfo["goodimage"]; $goods_image = $postInfo["goods_image"]; //商品云库图片 $item = array( 'add_time' => time(), 'from_type_id' => 19, 'localUrl' => 'Merchant/Goods', 'user_type' => 3, 'merchant_id' => $merchant_id, ); if ($usertype == 2) { $item['store_id'] = $store_id; $item['user_type'] = 4; $item['localUrl'] = 'Store/Goods'; $item['from_type_id'] = 28; } $uploads = uploadFiles($item); //本次请求的所有图片上传 if (!empty($uploads['image_file'])) { $data['goods_img_id'] = $uploads['image_file']['id']; //商品封面图 } if (!$data['goods_img_id'] && $goods_image) { $item['path'] = $goods_image; $goodsApi = new \Common\Business\Goods(); //商品类 $codeImage = $goodsApi->basisCodeAddImageGallery($item); //阿里云条码查询的商品图片存入库图片库 $goods_img_id = $codeImage['goods_image']['id']; } $is_change_weight = $postInfo["is_change_weight"] ? $postInfo["is_change_weight"] : 1; $attribute_state = $postInfo["attribute_state"] ? $postInfo["attribute_state"] : 1; $goods_num = $postInfo["goods_num"] ? $postInfo["goods_num"] : 0; //商品库存 $online_state = $postInfo['online_state'] ? $postInfo['online_state'] : 0; //0,不在,1,在商城出售。 if ($is_change_weight == 2) { if (empty($data['company'])) { $res['status'] = 0; $res['msg'] = '请输入单位'; $this->ajaxReturn($res); } switch ($data['company']) { case 'g': case 'G': case '克': $data['weight_value'] = 0.001; break; case '斤': case '市斤': $data['weight_value'] = 0.5; break; default: $data['weight_value'] = 1; break; } } if ($is_change_weight != 2 && !empty($data['weight_value']) && !preg_match("/^[+-]?\d*\.?\d{0,3}$/", $data['weight_value'])) { $res['status'] = 0; $res['msg'] = '请输入正确重量'; $this->ajaxReturn($res); } if (!empty($data['online_price']) && !preg_match("/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/", $data['online_price'])) { $res['status'] = 0; $res['msg'] = '商城价有误'; $this->ajaxReturn($res); } if ($usertype == 1) { $data['merchantid'] = $merchant_id; //商户ID $data['storeid'] = $store_id; //门店ID $data['addtime'] = time(); $data['purch_price'] = $purchase_price; //商品进价 $data['good_number'] = $goods_number; //商品货号 $data['can_exchange_weigh'] = $is_change_weight; $data['attribute'] = $attribute_state; $data['goods_image_id'] = $goods_img_id; // 商户商品图片 $data['issellonline'] = $online_state; } else { $data['merchant_id'] = $merchant_id; //商户ID $data['store_id'] = $store_id; //门店ID $data['add_time'] = time(); $data['purchase_price'] = $purchase_price; //商品进价 $data['goods_number'] = $goods_number; //商品货号 $data['pricing_method'] = $is_change_weight; $data['attribute_state'] = $attribute_state; $data['goods_img_id'] = $goods_img_id; // 商品图片 $data['online_state'] = $online_state; } $skuList = $_POST["skuList"]; $skuList = json_decode($skuList, true); if ($is_change_weight == 2 && $attribute_state == 2) { $res['status'] = 0; $res['msg'] = '规格与称重不能同时开启'; $this->ajaxReturn($res); } if ($attribute_state == 2 && empty($skuList)) { $res['status'] = 0; $res['msg'] = '规格信息有误'; $this->ajaxReturn($res); } if (empty($goods_number)) { $res['status'] = 0; $res['msg'] = '货号不能为空'; $this->ajaxReturn($res); } if ($goods_num > 0 && $purchase_price * 1 <= 0 || $purchase_price < 0) { $res['status'] = 0; $res['msg'] = '进价不得小于0'; $this->ajaxReturn($res); } if (!empty($data['goods_code']) && strlen($data['goods_code']) > 17) { $res['status'] = 0; $res['msg'] = '商品条码长度不得大于17'; $this->ajaxReturn($res); } if ($supplier_type != 2 && $goods_num * 1 < 0) { $res['status'] = 0; $res['msg'] = '库存不得小于0'; $this->ajaxReturn($res); } if ($data['more_num'] * 1 < 0) { $res['status'] = 0; $res['msg'] = '超量值不得小于0'; $this->ajaxReturn($res); } if ($data['less_num'] * 1 < 0) { $res['status'] = 0; $res['msg'] = '预警值不得小于0'; $this->ajaxReturn($res); } $map = array(); $map['status'] = array('neq', 2); if ($usertype == 1) { $map['merchantid'] = $merchant_id; $map['good_number'] = $goods_number; //商品货号 $one = M('retail_mgoods')->where($map)->find(); } else { $map['store_id'] = $store_id; $map['merchant_id'] = $merchant_id; $map['goods_number'] = $goods_number; //商品货号 $one = M('retail_goods')->where($map)->find(); } if ($one) { $res['status'] = 0; $res['msg'] = '商品货号重复'; $this->ajaxReturn($res); } if (!empty($data['goods_code'])) { $map = array(); $map['status'] = array('neq', 2); $map['goods_code'] = $data['goods_code']; //商品条码 if ($usertype == 1) { $map['merchantid'] = $merchant_id; $one = M('retail_mgoods')->where($map)->find(); } else { $map['store_id'] = $store_id; $map['merchant_id'] = $merchant_id; $one = M('retail_goods')->where($map)->find(); } if ($one) { $res['status'] = 0; $res['msg'] = '商品条码重复'; $this->ajaxReturn($res); } } if ($attribute_state == 2 && is_array($skuList) && !empty($skuList)) { $sku_attr_length = count($skuList[0]['id']); if ($sku_attr_length > 4) { $res['status'] = 0; $res['msg'] = '最多只能添加四种规格'; $this->ajaxReturn($res); } $sku_goods_num = 0; $codeArr = array(); $numberArr = array(); if (!empty($data['goods_code'])) { $codeArr[] = $data['goods_code']; } if (!empty($goods_number)) { $numberArr[] = $goods_number; } $all_sku_list_id = ''; foreach ($skuList as $key => $val) { if (!$val['sku_goods_number']) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的货号'; $this->ajaxReturn($res); } if (in_array($val['sku_goods_number'], $numberArr)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格货号已存在'; $this->ajaxReturn($res); } else { $numberArr[] = $val['sku_goods_number']; } if (!empty($val['weight_value']) && !preg_match("/^[+-]?\d*\.?\d{0,3}$/", $val['weight_value'])) { $res['status'] = 0; $res['msg'] = '请填写正确第' . ($key + 1) . '个规格重量'; $this->ajaxReturn($res); } $sku_map = array(); $sku_map['sku_goods_number'] = $val['sku_goods_number']; $sku_map['state'] = 0; if ($usertype == 1) { //商户 $sku_map['merchantid'] = $merchant_id; $skuInfo = M('retail_sku_mgoods')->where($sku_map)->find(); } else { $sku_map['store_id'] = $store_id; $skuInfo = M('retail_sku_goods')->where($sku_map)->find(); } if ($skuInfo) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格货号已存在'; $this->ajaxReturn($res); } if ($usertype == 1) { $map = array( 'good_number' => $val['sku_goods_number'], 'merchantid' => $merchant_id, 'status' => array('in', '0,1') ); $goodsInfo = M('retail_mgoods')->where($map)->find(); } else { $map = array( 'store_id' => $store_id, 'goods_number' => $val['sku_goods_number'], 'merchant_id' => $merchant_id, 'status' => array('in', '0,1') ); $goodsInfo = M('retail_goods')->where($map)->find(); } if ($goodsInfo) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格货号已存在'; $this->ajaxReturn($res); } if (!is_numeric($val['purchase_price']) || $val['purchase_price'] < 0) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的进价'; $this->ajaxReturn($res); } if ($val['goods_num'] > 0) { if (!$val['purchase_price'] || $val['purchase_price'] < 0.01 || $val['purchase_price'] != round($val['purchase_price'], 2)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的进价'; $this->ajaxReturn($res); } } if ($online_state == 1 && !preg_match("/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/", $val['online_price'])) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的商城价'; $this->ajaxReturn($res); } if (!$val['retail_price'] || !is_numeric($val['retail_price']) || $val['retail_price'] < 0.01 || $val['retail_price'] != round($val['retail_price'], 2)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '请填写第' . ($key + 1) . '个规格正确的零售价'; $this->ajaxReturn($res); } if (!empty($val['sku_code'])) { if (strlen($val['sku_code']) > 17) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格条码不能大于18位'; $this->ajaxReturn($res); } if (in_array($val['sku_code'], $codeArr)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格商品条码重复'; $this->ajaxReturn($res); } else { $codeArr[] = $val['sku_code']; } if ($usertype == 1) { $map = array( 'merchantid' => $merchant_id, 'sku_code' => $val['sku_code'], 'state' => 0 ); $old = M('retail_sku_mgoods')->where($map)->find(); } else { $map = array( 'store_id' => $store_id, 'sku_code' => $val['sku_code'], 'state' => 0 ); $old = M('retail_sku_goods')->where($map)->find(); } if ($usertype == 1) { $map = array( 'goods_code' => $val['sku_code'], 'merchantid' => $merchant_id, 'status' => array('in', '0,1') ); $old1 = M('retail_mgoods')->where($map)->find(); } else { $map = array( 'store_id' => $store_id, 'goods_code' => $val['sku_code'], 'merchant_id' => $merchant_id, 'status' => array('in', '0,1') ); $old1 = M('retail_goods')->where($map)->find(); } if (!empty($old) || !empty($old1)) { $res['val'] = $key; $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格商品条码已存在'; $this->ajaxReturn($res); } } $sku_id_list = ''; $sku_name = ''; for ($i = 0; $i < $sku_attr_length; $i++) { if (!empty($val['id'][$i])) { $sku_id_list .= ',' . $val['id'][$i]; $sku_name .= ',' . $val['name'][$i]; } else { $res['val'] = $key . '-' . $i; $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '条规格数据的规格信息有误'; } $all_sku_list_id .= ',' . $sku_id_list; } $temp['sku_num'] = 1; $temp['name'] = ltrim($sku_name, ','); $temp['sku_id_list'] = ltrim($sku_id_list, ','); $temp['retail_price'] = $val['retail_price']; $temp['purchase_price'] = $val['purchase_price'] ? $val['purchase_price'] : 0; $temp['goods_num'] = is_numeric($val['goods_num']) ? $val['goods_num'] : 0; if (!empty($val['goods_num']) && (!is_numeric($val['goods_num']) || $val['goods_num'] != round($val['goods_num']))) { $res['status'] = 0; $res['msg'] = '第' . ($key + 1) . '个规格的库存有误'; $this->ajaxReturn($res); } $temp['add_time'] = time(); $temp['status'] = 1; $temp['state'] = 0; $temp['sku_goods_number'] = $val['sku_goods_number']; $temp['sku_code'] = $val['sku_code']; if ($usertype == 1) { $temp['merchantid'] = $merchant_id; } else { $temp['store_id'] = $store_id; $temp['merchant_id'] = $merchant_id; } $skuArrData[] = $temp; unset($temp); } $all_sku_list_id = ltrim($all_sku_list_id, ','); $attr = M('retail_sku_attr as a') ->join('ls_retail_sku_list as l on l.attr_id=a.id') ->field('a.*') ->where(array('a.merchantid' => $merchant_id, 'a.state' => 0, 'l.id' => array('in', $all_sku_list_id))) ->group('l.attr_id') ->select(); if (count($attr) != $sku_attr_length) { $res['status'] = 0; $res['msg'] = '您添加的规格信息属性重复'; $this->ajaxReturn($res); } } $content = array(); $content = $data; if ($usertype == 1) { $create = M('retail_mgoods')->add($data); $content['merchant_id'] = $merchant_id; $content['goods_number'] = $goods_number; $content['pricing_method'] = $is_change_weight; $content['attribute_state'] = $attribute_state; } else { $create = M('retail_goods')->add($data); if (!empty($create)) { //存入商品变更记录表 $GoodsClass = new Goods(); $GoodsClass->goodsEditRecord([ 'store_id' => $store_id, 'merchant_id' => $merchant_id, 'goods_id' => $create ]); } } $content['warehouse_id'] = $warehouse_id; $content['goods_id'] = $create; if ($create) { unset($content['retail_price']); if ($attribute_state == 1) { $content['goods_num'] = $goods_num; if ($usertype == 1) { $content['purchase_price'] = $purchase_price; //商户添加 A('Api/Inventory')->merAddSaleGoods($content, 1); } else { A('Api/Inventory')->addSaleGoods($content, 1); } } else if ($attribute_state == 2) { foreach ($skuArrData as $k => &$v) { $content['sku_name'] = $v['name']; $content['sku_id_list'] = $v['sku_id_list']; $content['sku_goods_number'] = $v['sku_goods_number']; $content['sku_code'] = $v['sku_code']; $content['goods_num'] = $v['goods_num']; $content['purchase_price'] = $v['purchase_price']; $content['add_time'] = $v['add_time']; $content['sku_num'] = 1; unset($content['more_num']); unset($content['less_num']); if ($usertype == 1) { $v['mgoods_id'] = $create; $v['addtime'] = $v['add_time']; $v['purch_price'] = $v['purchase_price']; unset($v['add_time']); unset($v['purchase_price']); } else { $v['goods_id'] = $create; } unset($v['id']); unset($v['goods_num']); if ($usertype == 1) { $add = M("retail_sku_mgoods")->add($v); $content['sku_id'] = $add; A('Api/Inventory')->merAddSaleGoods($content, 1); } else { $add = M("retail_sku_goods")->add($v); $content['sku_id'] = $add; A('Api/Inventory')->addSaleGoods($content, 1); } //添加规格 } } if ($usertype == 1 || $usertype == 2) { $parameter['desc'] = '商品档案-新增'; switch ($usertype) { case 1: $parameter['type'] = 3; break; case 2: $parameter['type'] = 4; break; } $this->system_parameter($parameter); } $res['status'] = 1; $res['msg'] = '录入成功'; } else { $res['status'] = 0; $res['msg'] = '录入失败'; } $this->ajaxReturn($res); } } // 库存查询 protected function searchgoods() { if (IS_POST) { $storeid = I('post.storeid'); $keyword = I('post.keyword'); if (!$keyword) { $res['status'] = 0; $res['msg'] = '请输入查询内容'; } else { if ($keyword) { $w['store_id'] = $storeid; $w['goods_code|goods_number|goods_name'] = array('like', "%" . $keyword . "%"); $w['status'] = array('in', array(0, 1)); $field = "goods_name,goods_number,goods_code,cost_price as purchase_price,pricing_method,goods_num,sku_name,attribute_state,sku_code,sku_goods_number"; $goodslist = D('SSaleMGoods')->getSelect($w, $page = '', $limit = '', $field); if ($goodslist) { } else { $w = array(); $w['store_id'] = $storeid; $w['goods_name'] = array('like', '%' . $keyword . '%'); $w['status'] = array('in', array(0, 1)); $goodslist = D('SSaleMGoods')->getSelect($w, $page = '', $limit = '', $field); } } if ($goodslist) { foreach ($goodslist as $key => &$val) { $val['purchase_price'] = round($val['purchase_price'], 2); $val['goods_num'] = round($val['goods_num'], 3); if ($val['attribute_state'] == 2) { $val['goods_name'] = trim($val['goods_name'] . '-' . $val['sku_name'], ','); $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; } } $goodslist[0]['givenum'] = 0; $goodslist[0]['num'] = ""; $res['sql'] = M()->_sql(); $res['status'] = 1; $res['msg'] = '查询成功'; $res['goodslist'] = $goodslist; } else { $res['status'] = 0; $res['msg'] = '暂无数据'; } } $this->ajaxReturn($res); } } //2019-11-29 库存查询 protected function StockQuery() { $data = I("post."); $storeid = $data['storeid']; $keyword = $data['keyword']; $page = $data['page']; $limit = $data['limit']; if (!$keyword) { $res['status'] = 0; $res['msg'] = '请输入查询内容'; $this->ajaxReturn($res); } if ($keyword) { $where['goods_code | goods_number | goods_name | sku_code | sku_goods_number | sku_name'] = array('like', "%" . $keyword . "%"); } $where['store_id'] = $storeid; $where['status'] = array('in', '0,1'); $fields = "goods_number,sku_goods_number,goods_code,sku_code,attribute_state,goods_name,sku_name,cost_price,goods_num"; $list = D('SSaleMGoods')->getSelect($where, $page, $limit, $fields); if ($list) { foreach ($list as &$val) { if ($val['attribute_state'] == 2) { $val['goods_name'] = $val['goods_name'] . '-' . $val['sku_name']; $val['goods_number'] = $val['sku_goods_number']; $val['goods_code'] = $val['sku_code']; } $val['cost_price'] = round($val['cost_price'], 2); $val['goods_num'] = round($val['goods_num'], 3); } $res['msg'] = '查询成功'; } else { $res['msg'] = '暂无数据'; } $res['status'] = 1; $res['list'] = $list; $this->ajaxReturn($res); } //2019-11-26 protected function searchgoods_v1() { $data = I("post."); $storeid = $data['storeid']; $keyword = $data['keyword']; $person1 = $data['person1']; $person2 = $data['person2']; $person3 = $data['person3']; $page = $data['page']; $limit = $data['limit']; if ($keyword) { $where['s.goods_code | s.goods_number | s.goods_name | s.sku_code | s.sku_goods_number | s.sku_name'] = array('like', "%" . $keyword . "%"); } $flag = 0; if (!empty($person3)) { $where['s.goods_class_id'] = $person3; } else if (!empty($person2)) { $class = M('retail_goods_class as c2') ->join('ls_retail_goods_class as c3 on c2.id=c3.pid') ->where(array('c2.id' => $person2, 'c3.status' => 0)) ->field('c3.id')->select(); $flag = 1; } else if (!empty($person1)) { $class = M('retail_goods_class as c1') ->join('ls_retail_goods_class as c2 on c1.id=c2.pid') ->join('ls_retail_goods_class as c3 on c2.id=c3.pid AND c3.status=0', 'LEFT') ->where(array('c1.id' => $person1, 'c2.status' => 0)) ->field('c2.id,c3.id as c3_id')->select(); $flag = 1; } if (!empty($class)) { $arr = array(); foreach ($class as &$val) { if (!in_array($val['id'], $arr)) { $arr[] = $val['id']; } if (!empty($val['c3_id'])) { if (!in_array($val['c3_id'], $arr)) { $arr[] = $val['c3_id']; } } } $str = implode(',', $arr); $where['s.goods_class_id'] = array('in', $str . ',' . ($person2 ? $person2 : $person1)); } else if ($flag == 1) { $where['s.goods_class_id'] = $person2 ? $person2 : $person1; } $where['s.store_id'] = $storeid; $where['s.status'] = array('in', '0,1'); $fields = "s.goods_id,s.goods_code,s.goods_number,s.sku_goods_number,s.goods_class_id,s.goods_name,s.attribute_state,s.goods_num,s.sku_code,s.sku_id,s.sku_name,s.cost_price,g.retail_price,g.online_state,g.online_price,g.store_mem_status,g.store_mem_price,g.shop_mem_status,g.shop_mem_price,g.plus_mem_status,g.plus_price"; $goodslist = M("retail_store_sale_goods as s") ->join("ls_retail_goods as g on s.goods_id=g.id", "LEFT") ->where($where) ->field($fields) ->page($page, $limit) ->order("s.id desc") ->select(); if ($goodslist) { $count = M("retail_store_sale_goods as s") ->join("ls_retail_goods as g on s.goods_id=g.id", "LEFT") ->count(); foreach ($goodslist as $key => &$val) { if ($val['attribute_state'] == 2) { //规格商品 $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; $sku_info = D('RetailSkuGoods')->getFind(array('id' => $val['sku_id'], 'goods_id' => $val['goods_id']), "retail_price,online_price,shop_mem_price,store_mem_price,plus_price"); $val['retail_price'] = round($sku_info['retail_price'] ? $sku_info['retail_price'] : '', 2); //店内价 $val['online_price'] = round($sku_info['online_price'] ? $sku_info['online_price'] : '', 2); //小程序商城价格 $val['shop_mem_price'] = round($sku_info['shop_mem_price'] ? $sku_info['shop_mem_price'] : '', 2); //商城会员价格 $val['store_mem_price'] = round($sku_info['store_mem_price'] ? $sku_info['store_mem_price'] : '', 2); //店内会员价 $val['plus_price'] = round($sku_info['plus_price'] ? $sku_info['plus_price'] : '', 2); //小程序商城Plus价格 } else { $val['shop_mem_price'] = round($val['shop_mem_price'], 2); //商城会员价格 $val['store_mem_price'] = round($val['store_mem_price'], 2); //店内会员价 $val['online_price'] = round($val['online_price'], 2); //小程序商城价格 $val['plus_price'] = round($val['plus_price'], 2); //小程序商城Plus价格 $val['retail_price'] = round($val['retail_price'], 2); //零售价 } $val['goods_num'] = round($val['goods_num'], 3); $val['cost_price'] = round($val['cost_price'], 2); } } $res['status'] = 1; $res['msg'] = '查询成功'; $res['goodsList'] = $goodslist; $res['page'] = $page; $res['count'] = $count ? $count : 0; $this->ajaxReturn($res); } //旧版保存价格 protected function submitchangegoodsprice() { $storeid = I('post.storeid'); $newprice = I('post.newprice'); if (!preg_match('/^[0-9]+(.[0-9]{1,2})?$/', $newprice)) { $res['status'] = 0; $res['msg'] = '价格有误,请重新提交'; $this->ajaxReturn($res); } $goodsInfo = I('post.goodsInfo'); if ($goodsInfo) { switch ($goodsInfo['attribute_state']) { case 1: $save = D('RetailGoods')->updateOrder(array('id' => $goodsInfo['goods_id']), array('retail_price' => $newprice)); break; case 2: $save = D('RetailSkuGoods')->updateOrder(array('id' => $goodsInfo['sku_id'], 'goods_id' => $goodsInfo['goods_id']), array('retail_price' => $newprice)); } if ($save) { $res['status'] = 1; $res['msg'] = '操作成功'; } else { $res['status'] = 1; $res['msg'] = '暂无修改'; } } else { $res['status'] = 0; $res['msg'] = '数据接受失败,请重新提交'; } $this->ajaxReturn($res); } //改价2019-11-26 protected function PriceModify() { $data = I("post."); $store_id = $data['storeid']; $new_retail_price = $data["new_retail_price"]; $new_online_price = $data["new_online_price"]; $new_store_mem_price = $data["new_store_mem_price"]; $new_shop_mem_price = $data["new_shop_mem_price"]; $new_plus_price = $data["new_plus_price"]; if ($data['type'] == 'Android') { $goods_info = json_decode($data['goodsInfo'], true); } else { $goods_info = $data['goodsInfo']; } $store_mem_status = $goods_info["store_mem_status"]; $shop_mem_status = $goods_info["shop_mem_status"]; $plus_mem_status = $goods_info["plus_mem_status"]; $online_state = $goods_info["online_state"]; if (!preg_match('/^[0-9]+(.[0-9]{1,2})?$/', $new_retail_price) && !empty($new_retail_price)) { $res['status'] = 0; $res['msg'] = '售价有误,请重新提交'; $this->ajaxReturn($res); } if ($online_state == 1 && !empty($new_online_price) && !preg_match('/^[0-9]+(.[0-9]{1,2})?$/', $new_online_price)) { $res['status'] = 0; $res['msg'] = '商城价有误,请重新提交'; $this->ajaxReturn($res); } if ($store_mem_status == 1 && !empty($new_store_mem_price)) { if (!preg_match('/^[0-9]+(.[0-9]{1,2})?$/', $new_store_mem_price)) { $res['status'] = 0; $res['msg'] = '店内会员价,请重新提交'; $this->ajaxReturn($res); } if ((floatval($new_store_mem_price) > floatval($new_retail_price)) && !empty($new_retail_price)) { $res['status'] = 0; $res['msg'] = '店内会员价不能大于零售价'; $this->ajaxReturn($res); } } if ($shop_mem_status == 1 && !empty($new_shop_mem_price)) { if (!preg_match('/^[0-9]+(.[0-9]{1,2})?$/', $new_shop_mem_price)) { $res['status'] = 0; $res['msg'] = '商城会员价有误,请重新提交'; $this->ajaxReturn($res); } if ((floatval($new_shop_mem_price) > floatval($new_online_price)) && !empty($new_online_price)) { $res['status'] = 0; $res['msg'] = '商城会员价不能大于商城价'; $this->ajaxReturn($res); } } if (!empty($new_plus_price) && $plus_mem_status == 1) { if (!preg_match('/^[0-9]+(.[0-9]{1,2})?$/', $new_plus_price)) { $res['status'] = 0; $res['msg'] = 'plus价有误,请重新提交'; $this->ajaxReturn($res); } } if ($goods_info) { switch ($goods_info['attribute_state']) { case 1: if (!empty($new_retail_price)) { $content['retail_price'] = $new_retail_price; } if (!empty($new_online_price) && $online_state == 1) { $content['online_price'] = $new_online_price; } if (!empty($new_store_mem_price) && $store_mem_status == 1) { $content['store_mem_price'] = $new_store_mem_price; } if ($shop_mem_status == 1 && !empty($new_shop_mem_price)) { $content['shop_mem_price'] = $new_shop_mem_price; } if (!empty($new_plus_price) && $plus_mem_status == 1) { $content['plus_price'] = $new_plus_price; } if (!empty($content)) { $save = D('RetailGoods')->updateOrder(array('id' => $goods_info['goods_id']), $content); } else { $save = false; } break; case 2: if (!empty($new_retail_price)) { $content['retail_price'] = $new_retail_price; } if (!empty($new_online_price) && $online_state == 1) { $content['online_price'] = $new_online_price; } if (!empty($new_store_mem_price) && $store_mem_status == 1) { $content['store_mem_price'] = $new_store_mem_price; } if ($shop_mem_status == 1 && !empty($new_shop_mem_price)) { $content['shop_mem_price'] = $new_shop_mem_price; } if (!empty($new_plus_price) && $plus_mem_status == 1) { $content['plus_price'] = $new_plus_price; } if (!empty($content)) { $save = D('RetailSkuGoods')->updateOrder(array('id' => $goods_info['sku_id'], 'goods_id' => $goods_info['goods_id']), $content); } else { $save = false; } break; } if ($save) { $parameter = array( 'type' => 4, 'desc' => '商品改价' ); $this->system_parameter($parameter); $res['status'] = 1; $res['msg'] = '操作成功'; } else { $res['status'] = 1; $res['msg'] = '暂无修改'; } } else { $res['status'] = 0; $res['msg'] = '数据接受失败,请重新提交'; } $this->ajaxReturn($res); } // 商品列表 protected function goodsShow() { $skuvel = C('sku'); $skuvel = $skuvel ? $skuvel : 2; if ($skuvel == 2) { if (IS_POST) { $storeid = I('post.storeid'); $merchantid = I('post.merchantid'); $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; if (empty($storeid) || empty($merchantid)) { $res['status'] = 0; $res['msg'] = '参数错误,请重新登录'; } else { //由于分类属于商户管理范围,所以直接获取商户商品分类 $m_map['status'] = 0; $m_map['merchantid'] = $merchantid; $m_map['type'] = 2; $cate = M("retail_goods_class") ->where($m_map) ->select(); if (!empty($cate)) { $cates = $cate; foreach ($cates as $key => $value) { $son = M("retail_goods_class") ->where(array('pid' => $value['id'], 'merchantid' => $merchantid, 'type' => 3, 'status' => 0)) ->select(); $temp = array(); if (!empty($son)) { foreach ($son as $k => $val) { $goods = M("retail_goods") ->field("id,good_image,goods_num,goods_code,purch_price,good_number,goods_class_id,goods_name,retail_price,vip_retail_state,agoods_count,can_exchange_weigh") ->where(array('goods_class_id' => $val['id'], 'storeid' => $storeid, 'status' => 0))->select(); if (!empty($goods)) { foreach ($goods as $ks => $vals) { $vals['agoods_count'] = 0; if ($vals['good_image']) { $vals['good_image'] = $http_type . $_SERVER['HTTP_HOST'] . $vals['good_image']; } else { $vals['good_image'] = ""; } $temp[] = $vals; } } } } $cates[$key]['goods'] = $temp; } $newcates = array(); foreach ($cates as $k => $v) { if (count($v['goods']) == 0) { unset($cates[$k]); } else { $newcates[] = $v; } } $res['status'] = 1; $res['msg'] = '获取成功'; $res['data'] = $newcates; } else { $res['status'] = 0; $res['msg'] = '获取失败'; } } $this->ajaxReturn($res); } } else { /* * 启用规格 11-01 * */ if (IS_POST) { $storeid = I('post.storeid'); $merchantid = I('post.merchantid'); $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; if (!$storeid || !$merchantid) { $res['status'] = 0; $res['msg'] = '参数错误,请重新登录'; } else { //直接获取商户下面的分类 $m_map['status'] = 0; $m_map['merchantid'] = $merchantid; $m_map['type'] = 2; $cate = M("retail_goods_class")->field("id,class_name,pid,type")->where($m_map)->select(); $m_map['type'] = 3; $sonCate = M("retail_goods_class")->field("id,class_name,pid,type")->where($m_map)->select(); $goods = M("retail_goods") ->field("id,good_image,goods_num,goods_code,purch_price,good_number,goods_class_id,goods_name,retail_price,vip_retail_state,agoods_count,can_exchange_weigh,attribute,attributeid") ->where(array('merchantid' => $merchantid, 'storeid' => $storeid, 'status' => 0))->select(); $newgoods = array(); foreach ($goods as $key => $value) { foreach ($sonCate as $k => $v) { if ($value['goods_class_id'] == $v['id']) { $goods[$key]['pid'] = $v['pid']; } } $goods[$key]['agoods_count'] = 0; if ($value['good_image']) { $goods[$key]['good_image'] = $http_type . $_SERVER['HTTP_HOST'] . $value['good_image']; } else { $goods[$key]['good_image'] = ""; } //多规格商品 if ($value['attribute'] == 2) { //启用多规格,但存在没有添加规格商品的可能 if (isset($value['attributeid'])) { //添加了多规格商品 $skuitems = M('retail_goodsku')->where(array('goods_id' => $value['id'], "status" => 2))->select(); if (!$skuitems) { $goods[$key]['attribute'] = 1; $newgoods[] = $goods[$key]; $goods[$key]['skujson'] = array(); } else { $skujson = array(); foreach ($skuitems as $k => $v) { $skujson[$k]['id'] = $v['id']; $skujson[$k]['goods_id'] = $v['goods_id']; $skujson[$k]['sku'] = $v['sku']; $skujson[$k]['sku_res'] = $v['sku_res']; $skujson[$k]['retail_price'] = $v['goods_price']; $skujson[$k]['num'] = $v['num']; $sku = $skujson[$k]; $goods[$key]['sku'][] = $sku; $newgoods[] = $goods[$key]; } } } else { $goods[$key]['attribute'] = 1; $newgoods[] = $goods[$key]; } } else { $newgoods[] = $goods[$key]; } } $goods = $newgoods; foreach ($cate as $key => $value) { foreach ($goods as $k => $v) { if ($value['id'] == $v['pid']) { $cate[$key]['goods'][] = $v; } else { continue; } } } $newcates = array(); foreach ($cate as $k => $v) { if (count($v['goods']) == 0) { unset($cate[$k]); } else { $newcates[] = $v; } } if ($newcates) { $res['status'] = 1; $res['data'] = $newcates; } else { $res['status'] = 0; $res['data'] = array(); } } } $this->ajaxReturn($res); } } // 销售收银-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //现金支付 protected function cashPay() { // A('Sellapi/PayRefund')->cashPay(); A('Sellapi/Pay')->cashPay(); } // 会员支付 protected function cardpay() { A('Sellapi/Pay')->cardpay(); } // 获取会员信息 protected function getvipinfo() { if (IS_POST) { $vip_num = I('post.card_num'); //会员卡号; $merchantid = I('post.merchantid'); //商户id; $total_money = I('post.allMoney'); //用户消费金额(用来查询可用优惠券); if (strlen($vip_num) == 11) { $map['mobile_phone'] = $vip_num; } else { $map['card_key'] = $vip_num; } //先根据商户id查询出主店id 用来获取会员信息 $map['merchantid'] = $merchantid; $vip = M('retail_vip') ->where($map) ->field('id,nickname,name,balance,mobile_phone as cardnum,card_key,integral,grade_integral,status') ->find(); if (!empty($vip)) { //用来判断会员等级 $grade = M('retail_vip_integral') ->where(array('min_integral' => array('ELT', $vip['grade_integral']), 'merchantid' => $merchantid)) ->order('min_integral desc') ->find(); if (empty($grade)) { $vip['grade'] = 'vip'; $vip['cardname'] = '普通会员'; $vip['discount'] = 1; } else { $vip['grade'] = $grade['cardname']; $vip['cardname'] = $grade['cardname']; $vip['discount'] = $grade['discount']; } if ($vip['nickname'] == null || $vip['nickname'] == '') { $vip['nickname'] = $vip['name']; } if ($vip['name'] == null || $vip['name'] == '') { $vip['name'] = $vip['nickname']; } if ($vip['status'] == 1) { $storeid = I('post.storeid'); //查询优惠券条件(个人) $c_map['v.isuse'] = 1; //未使用优惠券 $c_map['v.vid'] = $vip['id']; //会员id $c_map['v.starttime'] = array("LT", time()); //优惠券使用期在今天范围内 $c_map['v.endtime'] = array("GT", time()); //优惠券使用期在今天范围内 $myCoupons = M("retail_vipmcoupon as v") ->join('ls_retail_mcoupon as m on m.id=v.mcouponid') ->field("m.coupon_name,v.id,v.vid,v.starttime,v.endtime,v.needmoney,v.reducemoney,v.canusestoreids,v.merchantid") ->where($c_map) ->select(); $cc = array(); if (!empty($myCoupons)) { foreach ($myCoupons as &$value) { $value['starttime'] = date("Y/m/d", $value['starttime']); $value['endtime'] = date("Y/m/d", $value['endtime']); if ($value['canusestoreids'] != 0) { $canUseStore = explode(",", trim($value['canusestoreids'], ',')); if (in_array($storeid, $canUseStore)) { $cc[] = $value; } } else { $cc[] = $value; } } } $vip['coupons'] = $cc; $res['status'] = 1; $res['msg'] = '查询成功'; $res['info'] = $vip; } else if ($vip['status'] == 3) { $res['status'] = 0; $res['msg'] = '会员卡已被冻结'; // $res['info'] = $vip; } else if ($vip['status'] == 4) { $res['status'] = 0; $res['msg'] = '会员卡已挂失'; // $res['info'] = $vip; } else { // $res['one'] = $one; $res['status'] = 1; $res['msg'] = '查询成功'; $res['info'] = $vip; } } else { $res['status'] = 0; $res['msg'] = '暂未查询到该会员'; } $this->ajaxReturn($res); } } // 会员信息 protected function vipIndex() { $storeid = I('post.storeid'); //门店id $merchantid = M('retail_store')->where(array('id' => $storeid))->getField("merchantid"); if ($storeid == null && $storeid == '') { $static['status'] = 0; $static['msg'] = '查询失败'; } else { $start = strtotime(date("Y-m-d 0:0:0", strtotime("-1day"))); //开始 $end = $start + 86400; //会员总数 $jurisdiction = M('retail_store_jurisdiction')->field("store_show_vip_info")->where(array('storeid' => $storeid))->find(); if (!empty($jurisdiction) && $jurisdiction['store_show_vip_info'] == 2) { $mem['v.storeid|p.storeid'] = $storeid; } $mem['v.merchantid'] = $merchantid; $mem['v.status'] = 1; $time = time(); $memcount = M('retail_vip as v') ->join('ls_retail_plus_vip as p on p.vip_id=v.id and p.start_time<' . $time . ' and p.end_time>' . $time, 'LEFT') ->where($mem) ->count(); //昨日新会员 $mem['v.addtime'] = array('between', array($start, $end)); $daycount = M('retail_vip as v') ->join('ls_retail_plus_vip as p on p.vip_id=v.id and p.start_time<' . $time . ' and p.end_time>' . $time, 'LEFT') ->where($mem) ->count(); $static['memcount'] = $memcount ? $memcount : '0'; //会员总数 $static['daycount'] = $daycount ? $daycount : '0'; //昨日会员 $static['status'] = 1; $static['msg'] = '成功'; } $this->ajaxReturn($static); } //会员详细信息 protected function queryMember() { if (IS_POST) { //门店id $storeid = I("post.storeid"); $merchantid = M("retail_store")->where(array("id" => $storeid))->getField("merchantid"); //查询会员条件 //列表 $keyword = I('post.keyword'); if (!empty($keyword)) { $map2['mobile_phone|name|nickname|card_key'] = array('like', "%{$keyword}%"); } $type = I('post.type'); if ($type == 1) { $start = strtotime(date("Y-m-d 0:0:0", strtotime("-1day"))); //开始 $end = $start + 86400; $map2['v.addtime'] = array('between', array($start, $end)); } $page = I('post.page'); $limit = 200; $jurisdiction = M('retail_store_jurisdiction')->field("store_show_vip_info")->where(array('storeid' => $storeid))->find(); if (!empty($jurisdiction) && $jurisdiction['store_show_vip_info'] == 2) { $map2['v.storeid|p.storeid'] = $storeid; } $map2['v.status'] = 1; $time = time(); $map2['v.merchantid'] = $merchantid; $list = M('retail_vip as v') ->join('ls_retail_plus_vip as p on p.vip_id=v.id and p.start_time<' . $time . ' and p.end_time>' . $time, 'LEFT') ->field('v.id,v.mobile_phone,v.integral,v.nickname,v.name,v.addtime,v.balance,v.grade_integral,v.card_key,v.headimgurl,v.plus_type') ->where($map2) ->page($page, $limit) ->order('v.grade_integral desc') ->select(); if (!empty($list)) { foreach ($list as $k => &$v) { $arr = $this->getgrade($merchantid, $v['grade_integral']); unset($list[$k]['grade_integral']); $list[$k]['grade'] = $arr['grade']; $list[$k]['cardname'] = $arr['cardname']; $list[$k]['addtime'] = date('Y-m-d', $v['addtime']); if ($v['headimgurl']) { $v['hasimg'] = "1"; } else { $v['hasimg'] = "2"; $list[$k]['headimgurl'] = "/images/defaultimg.png"; } if ($v['name'] == null || $v['name'] == '') { $v['zname'] = $v['nickname'] ? $v['nickname'] : "昵称"; } else { $v['zname'] = $v['name'] ? $v['name'] : "会员名称"; } unset($v['name']); unset($v['nickname']); } $count = M('retail_vip as v') ->join('ls_retail_plus_vip as p on p.vip_id=v.id', 'LEFT') ->where($map2) ->count(); $rt['status'] = 1; $rt['msg'] = '刷新成功'; $rt['count'] = $count; $rt['viplist'] = $list; } else { $rt['status'] = 0; $rt['msg'] = '暂无会员'; } $this->ajaxReturn($rt); } } public function getgrade($merchantid, $integral) { $wgrade['min_integral'] = array("elt", $integral); $wgrade['merchantid'] = $merchantid; $integrallist = M('retail_vip_integral') ->where($wgrade) ->order("min_integral desc") ->limit(1) ->select(); if ($integrallist) { $cardname = $integrallist[0]['cardname']; $grade = $integrallist[0]['cardname']; $grade_id = $integrallist[0]['id']; } else { $grade = "0"; $cardname = "普通会员"; } return array('grade' => $grade, 'cardname' => $cardname, 'grade_id' => $grade_id); } // 会员信息 protected function vipInfo() { if (IS_POST) { $vid = I('post.vid'); $merchantid = I('post.merchantid'); $user_type = I("post.user_type"); //1商户 2门店 3收银员 $cashier_id = I("post.cashier_id"); if ($user_type == 3) { $modifymem = D("RetailCashier")->getFindField(array('id' => $cashier_id), "modifymem"); } $modifymem = $modifymem ? $modifymem : ''; $map['id'] = $vid; $map['status'] = array('neq', 2); $vip = M("retail_vip")->where($map) ->field('id,mobile_phone,integral,nickname,name,addtime,balance,grade_integral,card_key,cardnum,plus_type') ->find(); if (!empty($vip)) { //所有等级 $VipIntegraModel = D("RetailVipIntegral"); $fields = "cardname,id,min_integral"; $order = "min_integral asc"; $gradeData = $VipIntegraModel->getSelect(array($VipIntegraModel::MERCHANT_ID => $merchantid), $fields, $order); if (!empty($gradeData) && $gradeData[0]['min_integral'] != 0) { array_unshift($gradeData, array('id' => 0, 'cardname' => '无等级')); } $arr = $this->getgrade($merchantid, $vip['grade_integral']); unset($vip['grade_integral']); $vip['grade_id'] = $arr['grade_id']; $vip['cardname'] = $arr['cardname']; $vip['mobile_phone'] = $vip['mobile_phone'] ? $vip['mobile_phone'] : ''; $vip['addtime'] = date('Y-m-d', $vip['addtime']); if ($vip['name'] == null || $vip['name'] == '') { $vip['zname'] = $vip['nickname']; } else { $vip['zname'] = $vip['name']; } $w['vid'] = $vid; $w['type'] = 1; $w['status'] = 1; $summoney = M('recharge_order')->where($w)->sum('all_money'); $vip['summoney'] = $summoney ? $summoney : 0; unset($vip['name']); unset($vip['nickname']); $rt['status'] = 1; $rt['msg'] = '搜索成功'; $rt['vip'] = $vip; $recharge = M('vip_recharge')->where(array('merchantid' => $merchantid))->select(); //充值优惠信息 $rt['recharge'] = $recharge ? $recharge : array(); $rt['gradeData'] = $gradeData; $rt['modifymem'] = $modifymem; } else { $rt['status'] = 0; $rt['msg'] = '暂未查询到该会员'; } $this->ajaxReturn($rt); } } protected function getVipEsteatment() { if (IS_POST) { $id = I("post.vid"); $w['vid'] = $id; $w['status'] = 1; $e = strtotime(date("Y-m-d 23:59:59")); //开始 $s = $e - 86400 * 30; $w['add_time'] = array('between', array($s, $e)); $recharge_order = M('recharge_order') ->field('id,state,user_type,vid,cashier_id,', true) ->where($w) ->order('add_time desc') ->select(); if ($recharge_order) { // storename storeid foreach ($recharge_order as $k => $v) { $recharge_order[$k]['timedetail'] = date('Y-m-d H:i:s', $v['add_time']); if ($v['type'] == 2) { if ($v['store_id']) { $recharge_order[$k]['storename'] = M('retail_store') ->where(array('id' => $v['store_id'])) ->getField('storetag'); } else { $recharge_order[$k]['storename'] = "其他消费(非门店内消费)"; } } else if ($v['type'] == 1) { if ($v['store_id']) { $recharge_order[$k]['storename'] = M('retail_store') ->where(array('id' => $v['store_id'])) ->getField('storetag'); } else { $recharge_order[$k]['storename'] = "其他充值(非门店内充值)"; } } } $rt['status'] = 1; $rt['msg'] = "查询成功"; $rt['paylist'] = $recharge_order; } else { $rt['status'] = 0; $rt['msg'] = "查询失败"; } $this->ajaxReturn($rt); } } // 今日会员充值与消费记录统计 protected function todayvipcardinfo() { if (IS_POST) { $keyword = I('post.keyword'); $merchantid = I('post.merchantid'); $page = I('post.page'); $limit = 20; if ($keyword) { $map['merchantid'] = $merchantid; $map['mobile_phone|nickname|name'] = $keyword; $vid = M('retail_vip') ->where($map) ->getField('id'); if (!$vid) { $rt['status'] = 0; $rt['msg'] = '未找到符合条件的会员'; $this->ajaxReturn($rt); } $w['vid'] = $vid; } $e = strtotime(date("Y-m-d 23:59:59")); //开始 $s = $e - 86400; $w['add_time'] = array('between', array($s, $e)); $w['status'] = 1; $w['merchant_id'] = $merchantid; $w['type'] = 1; $ccount = M('recharge_order')->where($w)->page($page, $limit)->count(); $cgetmoney = M('recharge_order')->where($w)->page($page, $limit)->sum('all_money'); $cpaymoney = M('recharge_order')->where($w)->page($page, $limit)->sum('money'); $resummoney = $cgetmoney - $cpaymoney; $w['type'] = array('in', array(2, 6)); $allpaycount = M('recharge_order')->where($w)->page($page, $limit)->count(); $allpay = M('recharge_order')->where($w)->page($page, $limit)->sum('all_money'); $w['type'] = 5; $refund = M('recharge_order')->where($w)->page($page, $limit)->sum('money'); $w['type'] = 8; $hdadd = M('recharge_order')->where($w)->page($page, $limit)->sum('all_money'); $rt['status'] = 1; $rt['msg'] = '查询成功'; $rt['summoney'] = $cpaymoney ? round($cpaymoney, 2) : 0; // 总充值支付 $rt['allmoney'] = $cgetmoney ? round($cgetmoney, 2) : 0; // 总充值获得 $rt['resummoney'] = $resummoney ? round($resummoney, 2) : 0; // 总充值赠送 $rt['ccount'] = $ccount ? round($ccount, 2) : 0; // 充值笔数。 $rt['pay'] = $allpay ? round($allpay, 2) : 0; $rt['paynum'] = $allpaycount ? round($allpaycount, 2) : 0; $rt['refund'] = $refund ? round($refund, 2) : 0; $rt['hdadd'] = $hdadd ? round($hdadd, 2) : 0; if ($allpaycount > 0) { $rt['ave'] = round($allpay / $allpaycount, 2); } else { $rt['ave'] = 0; } $this->ajaxReturn($rt); } } // 今日会员充值与消费记录列表 protected function todayVipCardList() { if (IS_POST) { $keyword = I('post.keyword'); $merchantid = I('post.merchantid'); $page = I('post.page'); $limit = 20; if ($keyword) { $map['merchantid'] = $merchantid; $map['mobile_phone|nickname|name'] = $keyword; $vid = M('retail_vip') ->where($map) ->getField('id'); if (!$vid) { $rt['status'] = 0; $rt['msg'] = '未找到符合条件的会员'; $this->ajaxReturn($rt); } $w['vid'] = $vid; } $e = strtotime(date("Y-m-d 23:59:59")); //开始 $s = $e - 86400; $w['add_time'] = array('between', array($s, $e)); $w['status'] = 1; $w['merchant_id'] = $merchantid; $list = M('recharge_order') ->where($w) ->page($page, $limit) ->select(); if ($list) { foreach ($list as $k => $v) { $list[$k]['addtime'] = date('Y-m-d H:i', $v['add_time']); if ($v['type'] == 1) { $list[$k]['typename'] = '充值'; } else if ($v['type'] == 2) { $list[$k]['typename'] = '消费'; } else if ($v['type'] == 5) { $list[$k]['typename'] = '余额退款'; } else if ($v['type'] == 6) { $list[$k]['typename'] = '红包充值'; } else if ($v['type'] == 8) { $list[$k]['typename'] = '礼品卡充值'; } if ($v['storeid']) { $list[$k]['storetag'] = M('retail_store') ->where(array('id' => $v['storeid'])) ->getField('storetag'); } } } $rt['status'] = 1; if ($keyword && $vid) { $rt['msg'] = '该会员今日无交易记录'; } else { $rt['msg'] = '查询成功'; } $rt['data'] = $list ? $list : array(); $rt['count'] = $limit; $this->ajaxReturn($rt); } } /** * 会员充值记录 */ public function vipRechargeRecord() { A('Terminalapi/Vip')->vipRechargeRecord(); } // 线上订单 protected function onlineorderInfo() { $storeid = I('post.storeid'); $data['storeid'] = $storeid; $order_num = I('post.order_number'); $page = I('post.page'); $num = 20; if ($storeid == '') { $res['status'] = 0; $this->ajaxReturn($res); exit; } else { $where['b.store_id'] = $storeid; //线上 $where['b.type'] = 1; if (!empty($order_num)) { $where['b.order_no|o.pick_code'] = $order_num; } else { $where['b.pay_state'] = 1; // 已付款 } $where['b.order_type'] = 1; // 购买订单 $where['o.status'] = array('neq', 0); //0未支付(不会用该值判断) 1未发货 2已发货 3已收货 $where['b.pay_state'] = 1; $order = M('retail_bill_order as b') ->join('ls_retail_bill_online as o on o.bill_id=b.id') ->join('ls_retail_bill_discount as d on d.bill_id=b.id') ->join('ls_retail_bill_group as g on g.bill_id=b.id and g.state=1', 'LEFT') ->join('ls_retail_bill_spike as s on s.bill_id=b.id and s.state=1', 'LEFT') ->where($where) ->order('b.id desc') ->page($page, $num) ->select(); $SerialClass = new SerialNumberGoods(); $plugClass = new Plug(); //订单获取祝福码,判断该门店是否,有,并且开启 $storePlugStatusPost = [ 'store_id' => $storeid, 'identification_arr' => ['blessing'], ]; $storePlugStatus = $plugClass->plugStoreStatus($storePlugStatusPost);//获取状态 foreach ($order as $key => &$val) { // 1未发货 2已发货 3已收货 4已评价 5下单成功未支付 6订单有被退款 $val['statusnum'] = $val['status']; if ($val['refund_status'] == 0) { switch ($val['status']) { case 1: $val['status'] = '未发货'; break; case 2: $val['status'] = '已发货'; break; case 3: $val['status'] = '已收货'; break; default: $val['status'] = '正常订单'; break; } } else if ($val['refund_status'] == 1) { $val['status'] = '申请售后'; } //支付方式 1现金 3微信支付 4支付宝支付 5会员卡余额支付 7其他支付方式 8组合支付 switch ($val['pay_type']) { case 1: $val['payname'] = '现金'; break; case 2: $val['payname'] = '银行卡'; break; case 3: $val['payname'] = '微信支付'; break; case 4: $val['payname'] = '支付宝支付'; break; case 5: $val['payname'] = '会员卡余额支付'; break; case 6: $val['payname'] = '微信小程序支付'; break; case 7: $val['payname'] = '其他支付'; break; case 8: $val['payname'] = '组合支付'; break; } switch ($val['order_genre']) { case 1: $val['order_genre'] = "普通订单"; break; case 2: $val['order_genre'] = "拼团订单"; break; case 3: $val['order_genre'] = "秒杀订单"; break; case 4: $val['order_genre'] = "预售订单"; break; default: break; } $sell_ids = M('retail_sell')->where(array('bill_id' => $val['id']))->getField('id', true); foreach ($sell_ids as $ke => &$va) { $sell_info = M('retail_sell')->where(array('id' => $va))->find(); if (empty($sell_info)) { $val['good_info'][$ke]['name'] = '详情数据被清除'; $val['good_info'][$ke]['yuan_price'] = '0'; $val['good_info'][$ke]['goods_allmoney'] = '0'; $val['good_info'][$ke]['discount'] = '0'; } else { $val['good_info'][$ke]['goods_id'] = $sell_info['goods_id']; if ($sell_info['attribute_state'] == 2) { $skuinfo = json_decode($sell_info['sku_json_info'], true); $val['good_info'][$ke]['skuinfo'] = $skuinfo; $val['good_info'][$ke]['name'] = $sell_info['goods_name'] . '(' . $skuinfo['name'] . ')'; $val['good_info'][$ke]['sku_id'] = $sell_info['sku_id']; } else { $val['good_info'][$ke]['name'] = $sell_info['goods_name']; } $val['good_info'][$ke]['num'] = $sell_info['num']; $val['good_info'][$ke]['company'] = $sell_info['company']; $val['good_info'][$ke]['yuan_price'] = $sell_info['original_price']; $val['good_info'][$ke]['goods_allmoney'] = $sell_info['all_money']; $val['good_info'][$ke]['discount'] = $sell_info['vip_discount']; //串号信息 $val['good_info'][$ke]['serial_number_state'] = $sell_info['serial_number_state']; if ($sell_info['serial_number_state'] == 1) { $serialResult = $SerialClass->sellSerialList([ 'id' => $sell_info['id'] ]); $val['good_info'][$ke]['serial_list'] = $serialResult['data']['list']; } } } if (empty($val['vip_dis_money'])) { $val['coupon'] = 0; } else { $val['coupon'] = $val['vip_dis_money']; } $val['add_time'] = date('m-d H:i:s', $val['add_time']); if (!empty($val['delivery_time'])) { $val['delivery_time'] = date('Y-m-d H:i:s', $val['delivery_time']); } if ($val['pickup_type'] == 1) { //自提 $val['address_name'] = $val['user_name']; $val['address_phone'] = $val['user_phone']; $val['address_address'] = '自提暂无地址'; $val['user_select_time'] = date('Y-m-d H:i:s', $val['user_select_time']); } else if ($val['pickup_type'] == 2) { //配送 $val['address_name'] = $val['user_name']; $val['address_phone'] = $val['user_phone']; $val['address_address'] = $val['user_address']; $val['user_select_time'] = date('Y-m-d H:i:s', $val['user_select_time']); } else if ($val['pickup_type'] == 3) { //配送 $val['address_name'] = $val['user_name']; $val['address_phone'] = $val['user_phone']; $val['address_address'] = $val['user_address']; } unset($val['sellid']); unset($val['paytype']); unset($val['vipid']); unset($val['storeid']); unset($val['merchantid']); unset($val['admin_id']); unset($val['people_class']); unset($val['vip_card']); if ($storePlugStatus === true) { //有权限 $extractionCode = new Index(); $val['extraction_code'] = $extractionCode->obtainExtractionCode($val['id']);//祝福码 } else { //无权限 $val['extraction_code'] = null; } } $res['count'] = 20; $res['status'] = 1; $res['order'] = $order ? $order : array(); } $this->ajaxReturn($res); } // 自提货操作 protected function distribution_zt() { $res = A('CashierApi/Order')->selfMention_v1(); return $res; } // 配送操作 protected function distribution_ps() { $res = A('CashierApi/Order')->deliveryOrder_v2(); return $res; } //查询商品库信息30 protected function checkgoodscode() { $data = I('post.'); if (empty($data['code'])) { $this->ajaxReturn(['status' => 0, 'msg' => '请输入条码']); } $merchantModel = new RetailMerchantModel(); $partner_id = $merchantModel->getFindField(['id' => $data['merchant_id']], "partnerid"); $goods = new Goods(); $result = $goods->basisCodeGetGoodsInfo($data['code'], $partner_id); if ($result['status'] == 1) { $res = [ 'status' => 1, 'msg' => '查询成功', 'data' => $result['data']['goods'] ]; } else { $res = [ 'status' => 0, 'msg' => '未找到该商品' ]; } $this->ajaxReturn($res); } // 添加商品检测货号 protected function checkgoodsnum() { if (IS_POST) { $code = I('post.code'); $storeid = I('post.storeid'); $info = M('retail_goods')->where(array('goods_number' => $code, 'store_id' => $storeid, ""))->field('id')->find(); if ($info) { $rt['status'] = 0; $rt['msg'] = '重复,货号不可用'; } else { $rt['status'] = 1; $rt['msg'] = '货号可用'; } $this->ajaxReturn($rt); } } //查询线上订单未读的数量 public function unreadshow() { $storeid = I('post.storeid'); $starttime = strtotime("-30 day"); $endtime = time(); $where['addtime'] = array('between', array($starttime, $endtime)); $where['storeid'] = $storeid; $where['paytype'] = array('neq', 0); $where['type'] = 1; $where['unread'] = 1; $count = M('retail_bill')->where($where)->count(); if ($count) { $res['status'] = 1; $res['count'] = $count; } else { $res['status'] = 0; $res['count'] = 0; } $this->ajaxReturn($res); } //修改订单未读状态 public function modifyUnread() { $storeid = I('post.storeid'); $startime = strtotime("-30 day"); $endtime = time(); $where['patype'] = array('neq', 0); $where['type'] = 1; $where['storeid'] = $storeid; $where['addtime'] = array('between', array($startime, $endtime)); $save = M('retail_bill')->where($where)->save(array('unread' => 2)); if ($save) { $res['status'] = 1; } else { $res['statuus'] = 0; } $this->ajaxReturn($res); } protected function newGoodsList_v1() { A('Sellapi/GoodShow')->newGoodsList_V1(); } protected function newGoodsList_v3() { if (IS_POST) { $storeid = I('post.storeid'); $merchantid = I('post.merchantid'); $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; if (!$storeid || !$merchantid) { $res['status'] = 0; $res['msg'] = '参数错误,请重新登录'; } else { //直接获取商户下面的分类 $m_map['c.status'] = 0; $m_map['c.merchantid'] = $merchantid; $m_map['g.store_id'] = $storeid; $m_map['g.status'] = 0; $commonUse = array(); $tempClass = array(); $tempIndexArr = array(); $field = "c.id as c_id,c.class_name,g.usual_state,g.id,g.goods_img_id, g.goods_code,g.purchase_price,g.goods_number,g.goods_name,g.retail_price, g.vip_retail_state,g.pricing_method,g.attribute_state, g.store_mem_status,g.store_mem_price"; $goods = M("retail_goods as g") ->join('ls_retail_goods_class as c on g.goods_class_id=c.id') ->where($m_map) ->field($field) ->select(); $skufield = 'id,sku_id_list,retail_price,goods_img,sku_code,store_mem_price'; foreach ($goods as &$value) { if (!empty($value['goods_img_id'])) { $img = D('ImageGallery')->getFieldPath(array('id' => $value['goods_img_id'])); } else { $defaultimg = M('retail_goods_defaultimg') ->where(array('storeid' => $storeid)) ->cache(true, 300)// 缓存300s ->field('default_goods_img,default_goods_img_id')->find(); if (!empty($defaultimg['default_goods_img_id'])) { $img = D('ImageGallery')->getFieldPath(array('id' => $defaultimg['default_goods_img_id'])); if (!$img) { $img = $http_type . $_SERVER['HTTP_HOST'] . "/Public/images/empty-goods-images.png"; } } else { if (!$defaultimg['default_goods_img'] || $defaultimg['default_goods_img'] == '/Uploads') { $img = $http_type . $_SERVER['HTTP_HOST'] . "/Public/images/empty-goods-images.png"; } else { $img = $http_type . $_SERVER['HTTP_HOST'] . $defaultimg['default_goods_img']; } } } $value['good_image'] = $img; if ($value['pricing_method'] == 2) { $value['attribute'] = 1; } $value['goods_type'] = 1; //多规格商品 $value['skuAttr'] = array(); $value['skuList'] = array(); if ($value['attribute_state'] == 2) { //启用多规格,但存在没有添加规格商品的可能 $str = ''; $goodsSku = M('retail_sku_goods') ->where(array('goods_id' => $value['id'], 'state' => 0)) ->order('retail_price asc') ->field($skufield) ->select(); if (empty($goodsSku)) { $value['attribute_state'] = 1; } else { foreach ($goodsSku as &$val) { $str .= ',' . $val['sku_id_list']; if (empty($val['goods_img'])) { $val['goods_img'] = $value['good_image']; } else { $val['goods_img'] = $http_type . $_SERVER['HTTP_HOST'] . $val['goods_img']; } $name = M('retail_sku_list')->where(array('id' => array('in', $val['sku_id_list'])))->getField('name', true); $val['name'] = implode(',', $name); $val['store_mem_status'] = $value['store_mem_status']; } $str = ltrim($str, ','); $sku_id_list = explode(',', $goodsSku[0]['sku_id_list']); $attr = array(); foreach ($sku_id_list as $v) { $tempAttr = M('retail_sku_list as l') ->join('ls_retail_sku_attr as a on l.attr_id=a.id') ->where(array('l.id' => $v)) ->field('a.id,a.name') ->find(); $tempAttr['list'] = M('retail_sku_list') ->where(array('id' => array('in', $str), 'attr_id' => $tempAttr['id'], 'state' => 0)) ->field('id,name') ->select(); $attr[] = $tempAttr; } $value['skuAttr'] = $attr; $value['skuList'] = $goodsSku; } } if ($value['usual_state'] == 2) { $commonUse[] = $value; } $class_name = $value['class_name']; $key = array_search($class_name, $tempIndexArr); if ($key !== false) { unset($value['c_id']); unset($value['class_name']); $tempClass[$key]['goods'][] = $value; } else { $tempIndexArr[] = $class_name; $tempArr['id'] = $value['c_id']; $tempArr['class_name'] = $class_name; unset($value['c_id']); unset($value['class_name']); $tempArr['goods'][] = $value; $tempClass[] = $tempArr; unset($tempArr); } } if (!empty($commonUse)) { $newCate = array( 'class_name' => '常用商品', 'goods' => $commonUse, 'id' => 0 ); array_unshift($tempClass, $newCate); } if ($tempClass) { $res['status'] = 1; $res['data'] = $tempClass; } else { $res['status'] = 0; $res['data'] = array(); } } } $this->ajaxReturn($res); } protected function getGoodsList_v1() { $res = A('CashierApi/GoodsShow')->goodsList_v1(); return $res; } protected function dadadelivery() { A('Sellapi/Order')->dadadelivery(); } /* * 2019-1-26收银员收款统计 * */ protected function newCashierList_v1() { if (IS_POST) { $storeid = I('post.storeid'); $cashier_id = I('post.operator_id'); if (!$storeid) { $rt['status'] = 0; $rt['msg'] = '参数错误'; $this->ajaxReturn($rt); exit(); } $PayOrderModel = D("RetailPayOrder"); //支付流水模型 $needsellinfo = I('post.needsellinfo'); $cashier_show_other_sell = M('retail_cashier')->where(array('id' => $cashier_id))->getField("cashier_show_other_sell"); $where_cashier = array( 'status' => 1, 'storeid' => $storeid, ); if ($cashier_show_other_sell == 2) { $where_cashier['id'] = $cashier_id; } $list = M('retail_cashier') ->where($where_cashier) ->field('id,name') ->select(); if ($list || $needsellinfo) { if ($needsellinfo) { $list = $list ? $list : array(); $endtime = I('post.endtime'); $starttime = I('post.starttime'); $start = strtotime($starttime . ' 00:00:00'); $end = strtotime($endtime . ' 23:59:59'); if (!$endtime && !$starttime) { $start = strtotime(date('Y-m-d 00:00:00', time())); $end = $start + 86399; } $PlugApi = new Plug(); //获取付费插件列表及状态 $plug_result = $PlugApi->PlugPermissions(array( 'merchant_id' => I('post.merchantid'), 'identification_arr' => ['credit'] )); //商户是否存在赊账插件 $isCredit = $plug_result['data']['plug']['credit'] && $plug_result['data']['plug']['credit'] > 0 ? true : false; if ($isCredit) { $CreditArrearageModel = new \Credit\Model\CreditArrearageModel(); // 赊账 $CreditRepaymentModel = new \Credit\Model\CreditRepaymentModel(); // 还款 } foreach ($list as $k => $v) { $where = array(); $where['cashier_id'] = $v['id']; $where['add_time'] = array('between', array($start, $end)); $where['pay_state'] = 1; $where['store_id'] = $storeid; $where['order_type'] = 1; $where['type'] = 2; $where['pay_type'] = array('neq', '0'); $count = M('retail_bill_order')->where($where)->count(); $allmoney = M('retail_bill_order')->where($where)->sum('all_money'); //今日总金额 $allmoney = $allmoney ? $allmoney : 0; $where['order_type'] = 2; $refund_store = M('retail_bill_order')->where($where)->sum('refund_money'); //统计今日门店退款金额 $refund_store = $refund_store ? $refund_store : 0; //赊账数据统计 if ($isCredit) { $arrearage_map = [ 'cashier_id' => $v['id'], 'add_time' => ['between', [$start, $end]], 'store_id' => $storeid, ]; $arrearageMoney = $CreditArrearageModel->getSum($arrearage_map, 'total_money'); $repayment_map = [ 'operate_type' => 1, //确保是收银员 'operate_id' => $v['id'], 'store_id' => $storeid, 'add_time' => ['between', [$start, $end]], ]; $repaymentMoney = $CreditRepaymentModel->getSum($repayment_map, 'money'); } //快捷收银 $map = array(); $map[$PayOrderModel::CASHIER_ID] = $v['id']; $map[$PayOrderModel::ORDER_TYPE] = 6; $map[$PayOrderModel::ORDER_STATE] = 'SUCCESS'; $map[$PayOrderModel::TRADE_DATE] = array('between', array($start, $end)); $q_all_money = $PayOrderModel->getSum($map, $PayOrderModel::TRADE_AMOUNT); //快捷下单总金额 $q_all_money = $q_all_money ? $q_all_money : 0; $allmoney = round($allmoney + $q_all_money, 2); $map[$PayOrderModel::ORDER_STATE] = 'REFUND'; $q_refund_money = $PayOrderModel->getSum($map, $PayOrderModel::TRADE_AMOUNT); //快捷下单退款金额 $q_refund_money = $q_refund_money ? $q_refund_money : 0; $refund_store = round($refund_store + $q_refund_money, 2); //会员卡 $ww2['store_id'] = $storeid; $ww2['type'] = 1; // 会员充值 $ww['scene_type'] = 1; $ww2['add_time'] = array('between', array($start, $end)); $ww2['cashier_id'] = $v['id']; $ww2['status'] = 1; $vipcard = M('recharge_order')->where($ww2)->sum('money'); $vipcard = $vipcard ? round($vipcard, 2) : 0; $payList = A('PayApi/SellData')->getPayData_v1($start, $end, $storeid, $v['id']); //支付方式总额统计数据 $info = array( 'xj' => $payList['cash_amount'], 'wx' => $payList['weChat_amount'], 'zfb' => $payList['ali_amount'], 'xcx' => 0, 'refund' => $refund_store, 'vipcard' => $payList['vip_amount'], 'vipaddmoney' => $vipcard, 'allmoney' => $allmoney, 'other_pay' => $payList['other_amount'], 'count' => $count, 'arrearageMoney' => $arrearageMoney ? $arrearageMoney : 0, 'repaymentMoney' => $repaymentMoney ? $repaymentMoney : 0, ); $list[$k]['sellinfo'] = $info; } $parameter = array( 'store_id' => $storeid, 'start_time' => $start, 'end_time' => $end ); $shoppingMall = new ShoppingMall(); $shoppingMallInfo = $shoppingMall->getShopAmountTotal($parameter); $count = $shoppingMallInfo['place_count']; $allmoney = $shoppingMallInfo['xcx_amount_total']; $wxpay = $shoppingMallInfo['xcx_wx_actual_received']; $membermoney = $shoppingMallInfo['xcx_member_actual_received']; $refund_shop = $shoppingMallInfo['xcx_amount_refund_total']; $ww['store_id'] = $storeid; $ww['type'] = 1; // 会员充值 $ww['scene_type'] = 4; $ww['add_time'] = array('between', array($start, $end)); $ww['status'] = 1; $vipcard = M('recharge_order')->where($ww)->sum('money'); $vipcard = $vipcard ? round($vipcard, 2) : 0; $sellinfo = array( 'sellinfo' => array( 'xj' => 0, 'wx' => 0, 'zfb' => 0, 'xcx' => $wxpay, 'refund' => $refund_shop, 'vipcard' => $membermoney, 'vipaddmoney' => $vipcard, 'allmoney' => $allmoney, 'other_pay' => 0, 'count' => $count ), 'id' => 0, 'name' => '商城订单收银统计' ); array_unshift($list, $sellinfo); $rt['status'] = 1; $rt['msg'] = '查询成功'; $rt['list'] = $list; $rt['starttime'] = date('Y-m-d', $start); $rt['endtime'] = date('Y-m-d', $end); } else { $rt['status'] = 1; $rt['msg'] = '查询成功'; $rt['list'] = $list; $rt['starttime'] = date('Y-m-d', time()); $rt['endtime'] = date('Y-m-d', time()); } } else { $rt['status'] = 0; $rt['msg'] = '暂无收银员'; $rt['starttime'] = date('Y-m-d', time()); $rt['endtime'] = date('Y-m-d', time()); } $this->ajaxReturn($rt); } } /** * 2020-10-29 商城收款统计 */ public function shoppingStoreList() { if (IS_POST) { $storeid = I('post.storeid') ? I('post.storeid') : I('post.store_id'); //小程序小助手store_id 安卓小助手storeid if (!$storeid) { $rt['status'] = 0; $rt['msg'] = '参数错误'; $this->ajaxReturn($rt); exit(); } $needsellinfo = I('post.needsellinfo'); if ($needsellinfo) { $endtime = I('post.endtime'); $starttime = I('post.starttime'); $start = strtotime($starttime . ' 00:00:00'); $end = strtotime($endtime . ' 23:59:59'); if (!$endtime && !$starttime) { $start = strtotime(date('Y-m-d 00:00:00', time())); $end = $start + 86399; } $parameter = array( 'store_id' => $storeid, 'start_time' => $start, 'end_time' => $end ); $shoppingMall = new ShoppingMall(); $shoppingMallInfo = $shoppingMall->getShopAmountTotal($parameter); $count = $shoppingMallInfo['place_count']; $allmoney = $shoppingMallInfo['xcx_amount_actual_received_total']; $wxpay = $shoppingMallInfo['xcx_wx_actual_received']; $membermoney = $shoppingMallInfo['xcx_member_actual_received']; $refund_shop = $shoppingMallInfo['xcx_amount_refund_total']; $ww['store_id'] = $storeid; $ww['type'] = 1; // 会员充值 $ww['scene_type'] = 4; $ww['add_time'] = array('between', array($start, $end)); $ww['status'] = 1; $vipcard = M('recharge_order')->where($ww)->sum('money'); $vipcard = $vipcard ? round($vipcard, 2) : 0; $list[] = array( 'sellinfo' => array( 'xj' => 0, 'wx' => 0, 'zfb' => 0, 'xcx' => $wxpay, 'refund' => $refund_shop, 'vipcard' => $membermoney, 'vipaddmoney' => $vipcard, 'allmoney' => $allmoney, 'other_pay' => 0, 'count' => $count ), 'id' => 0, 'name' => '商城订单收银统计' ); $rt['status'] = 1; $rt['msg'] = '查询成功'; $rt['list'] = $list; $rt['starttime'] = date('Y-m-d', $start); $rt['endtime'] = date('Y-m-d', $end); } else { $rt['status'] = 0; $rt['msg'] = '查询失败'; $rt['starttime'] = date('Y-m-d', time()); $rt['endtime'] = date('Y-m-d', time()); } $this->ajaxReturn($rt); } } /** * 2020-10-29 收银员收款统计 */ public function newCashierCollecting() { if (IS_POST) { $storeid = I('post.storeid') ? I('post.storeid') : I('post.store_id'); //小程序小助手store_id 安卓小助手storeid $cashier_id = I('post.operator_id'); $user_type = I('post.user_type'); if (!$storeid) { $this->ajaxReturn(['status' => 0, 'msg' => '参数错误']); } $PayOrderModel = new RetailPayOrderModel(); //支付流水模型 $RetailCashierModel = new RetailCashierModel(); $needsellinfo = I('post.needsellinfo'); if ($user_type == 3) { $cashier_show_other_sell = $RetailCashierModel->getFindField(['id' => $cashier_id], 'cashier_show_other_sell'); } $where_cashier = [ 'status' => 1, 'storeid' => $storeid, ]; if ($cashier_show_other_sell == 2) { $where_cashier['id'] = $cashier_id; } $list = $RetailCashierModel->getSelect($where_cashier, 'id,name'); if ($list || $needsellinfo) { if ($needsellinfo) { $list = $list ? $list : []; $endtime = I('post.endtime'); $starttime = I('post.starttime'); $start = strtotime($starttime . ' 00:00:00'); $end = strtotime($endtime . ' 23:59:59'); if (!$endtime && !$starttime) { $start = strtotime(date('Y-m-d 00:00:00')); $end = $start + 86399; } $PlugApi = new Plug(); //获取付费插件列表及状态 $plug_result = $PlugApi->PlugPermissions(array( 'merchant_id' => I('post.merchantid'), 'identification_arr' => ['credit'] )); //商户是否存在赊账插件 $isCredit = $plug_result['data']['plug']['credit'] && $plug_result['data']['plug']['credit'] > 0 ? true : false; if ($isCredit) { $CreditArrearageModel = new \Credit\Model\CreditArrearageModel(); // 赊账 $CreditRepaymentModel = new \Credit\Model\CreditRepaymentModel(); // 还款 } $RetailBillOrderModel = new RetailBillOrderModel(); $RechargeOrderModel = new RechargeOrderModel(); $SellDataController = new \PayApi\Controller\SellDataController(); foreach ($list as &$v) { $where = []; $where['cashier_id'] = $v['id']; $where['add_time'] = ['between', [$start, $end]]; $where['pay_state'] = 1; $where['store_id'] = $storeid; $where['order_type'] = 1; $where['type'] = 2; $where['pay_type'] = ['neq', '0']; $count = $RetailBillOrderModel->getCount($where); $allmoney = $RetailBillOrderModel->getSum($where, 'all_money'); //今日总金额 $allmoney = $allmoney ? $allmoney : 0; $where['order_type'] = 2; $refund_store = $RetailBillOrderModel->getSum($where, 'refund_money'); //统计今日门店退款金额 $refund_store = $refund_store ? $refund_store : 0; //赊账数据统计 if ($isCredit) { $arrearage_map = [ 'cashier_id' => $v['id'], 'add_time' => ['between', [$start, $end]], 'store_id' => $storeid, ]; $arrearageMoney = $CreditArrearageModel->getSum($arrearage_map, 'total_money'); $repayment_map = [ 'operate_type' => 1, //确保是收银员 'operate_id' => $v['id'], 'store_id' => $storeid, 'add_time' => ['between', [$start, $end]], ]; $repaymentMoney = $CreditRepaymentModel->getSum($repayment_map, 'money'); } //快捷收银 $map = []; $map['cashier_id'] = $v['id']; $map['order_type'] = 6; $map['order_state'] = 'SUCCESS'; $map['trade_date'] = ['between', [$start, $end]]; $q_all_money = $PayOrderModel->getSum($map, 'trade_amount'); //快捷下单总金额 $q_all_money = $q_all_money ? $q_all_money : 0; $allmoney = round($allmoney + $q_all_money, 2); $map['order_state'] = 'REFUND'; $q_refund_money = $PayOrderModel->getSum($map, 'trade_amount'); //快捷下单退款金额 $q_refund_money = $q_refund_money ? $q_refund_money : 0; $refund_store = round($refund_store + $q_refund_money, 2); //会员卡 $ww2['store_id'] = $storeid; $ww2['type'] = 1; // 会员充值 $ww2['add_time'] = ['between', [$start, $end]]; $ww2['cashier_id'] = $v['id']; $ww2['status'] = 1; $vipcard = $RechargeOrderModel->getSum($ww2, 'money'); $vipcard = $vipcard ? round($vipcard, 2) : 0; $payList = $SellDataController->getPayData_v1($start, $end, $storeid, $v['id']); //支付方式总额统计数据 $info = [ 'xj' => $payList['cash_amount'], 'wx' => $payList['weChat_amount'], 'zfb' => $payList['ali_amount'], 'xcx' => 0, 'refund' => $refund_store, 'vipcard' => $payList['vip_amount'], 'vipaddmoney' => $vipcard, 'allmoney' => $allmoney, 'other_pay' => $payList['other_amount'], 'count' => $count, 'arrearageMoney' => $arrearageMoney ? $arrearageMoney : 0, 'repaymentMoney' => $repaymentMoney ? $repaymentMoney : 0, ]; $v['sellinfo'] = $info; } $result = [ 'status' => 1, 'msg' => '查询成功', 'list' => $list, 'starttime' => date('Y-m-d', $start), 'endtime' => date('Y-m-d', $end), ]; } else { $result = [ 'status' => 1, 'msg' => '查询成功', 'list' => $list, 'starttime' => date('Y-m-d'), 'endtime' => date('Y-m-d'), ]; } } else { $result = [ 'status' => 0, 'msg' => '暂无收银员', 'starttime' => date('Y-m-d'), 'endtime' => date('Y-m-d'), ]; } $this->ajaxReturn($result); } } public function refund() { $res = array( 'status' => 1, 'msg' => '开发中,请到收银端或后台操作' ); $this->ajaxReturn($res); /* $res = A('CashierApi/Refund')->onlineOrderRefund_v1(); return $res;*/ } public function verifyCode() { A('Sellapi/Checkpassword')->refundcode(); exit; } public function getLogo() { if (IS_POST) { $logoinfo = M('retail_logo')->find(); if (!empty($logoinfo) && !empty($logoinfo['aide_logo'])) { if (!empty($logoinfo['aide_logo_id'])) { $img = D('ImageGallery')->getFieldPath(array('id' => $logoinfo['aide_logo_id'])); if (!$img) { $res['status'] = 0; $res['msg'] = '未设置'; } else { $res['img'] = $img; $res['status'] = 1; $res['msg'] = '查询成功'; } } else { $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; $res['img'] = $http_type . $_SERVER['HTTP_HOST'] . $logoinfo['aide_logo']; $res['status'] = 1; $res['msg'] = '查询成功'; } } else { $res['status'] = 0; $res['msg'] = '未设置'; } $this->ajaxReturn($res); } } public function newPlaceOrderPay_v3() { $res = A("CashierApi/Pay")->placeOrderPay_v1(); return $res; } public function vipLogin_v1() { if (IS_POST) { $code = I('post.vipCode'); //会员卡号; $merchantid = I('post.merchantid'); //商户id; $storeid = I("post.storeid"); //门店id 查询门店优惠券 if (empty($code) || empty($merchantid) || empty($storeid)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $temp = (int)substr($code, 0, 2); if (is_numeric($code) && strlen($code) == 18 && $temp >= 86 && $temp <= 89) { $map = array( 'code' => $code, 'status' => 0, 'state' => 0, 'merchantid' => $merchantid ); $old = M('vip_dynamic_code')->where($map)->find(); if (empty($old) || $old['failure_time'] <= time()) { $res['status'] = 0; $res['msg'] = '请会员刷新动态码'; $this->ajaxReturn($res); } else { M('vip_dynamic_code')->where($map)->save(array('status' => 1, 'use_storeid' => $storeid)); } $vip = M('retail_vip')->where(array('id' => $old['vid'], 'status' => array('neq', 2))) ->field('id,nickname,name,balance,mobile_phone as cardnum,card_key,integral,grade_integral,status') ->find(); $vip['login_type'] = 1; $vip['payCode'] = $code; } else { if (is_numeric($code) && strlen($code) == 11) { $map['mobile_phone'] = $code; } else if (is_numeric($code) && strlen($code) == 4) { $map['mobile_phone'] = array('like', '%' . $code); } else if (is_numeric($code)) { $map['card_key|cardnum'] = $code; } else { $map['card_key'] = $code; } $map['merchantid'] = $merchantid; $map['status'] = array('neq', 2); $vip = M('retail_vip') ->where($map) ->field('id,nickname,name,balance,mobile_phone as cardnum,card_key,integral,grade_integral,status') ->find(); if (empty($vip)) { $res['status'] = 0; $res['msg'] = '未查询到会员'; $this->ajaxReturn($res); } $vip['payCode'] = $vip['cardnum'] ? $vip['cardnum'] : $vip['card_key']; $vip['login_type'] = 2; } //用来判断会员等级 $grade = M('retail_vip_integral') ->where(array('min_integral' => array('ELT', $vip['grade_integral']), 'merchantid' => $merchantid)) ->order('min_integral desc') ->find(); if (empty($grade)) { $vip['grade'] = 'vip'; $vip['cardname'] = '普通会员'; $vip['discount'] = 1; } else { $vip['grade'] = $grade['grade']; $vip['cardname'] = $grade['cardname']; $vip['discount'] = $grade['discount']; } if (empty($vip['nickname'])) { $vip['nickname'] = $vip['name']; } if (empty($vip['name'])) { $vip['name'] = $vip['nickname']; } if ($vip['status'] == 1) { $c_map['v.isuse'] = 1; //未使用优惠券 $c_map['v.vid'] = $vip['id']; //会员id $c_map['v.starttime'] = array("LT", time()); //优惠券使用期在今天范围内 $c_map['v.endtime'] = array("GT", time()); //优惠券使用期在今天范围内 $Coupons = M("retail_vipmcoupon as v") ->join('ls_retail_mcoupon as m on m.id=v.mcouponid') ->field("m.coupon_name,v.id,v.vid,v.starttime,v.endtime,v.needmoney,v.reducemoney,v.canusestoreids,v.merchantid") ->where($c_map) ->select(); $tempCoupon = array(); if (!empty($Coupons)) { foreach ($Coupons as &$value) { $value['starttime'] = date("Y/m/d", $value['starttime']); $value['endtime'] = date("Y/m/d", $value['endtime']); if ($value['canusestoreids'] != 0) { $canUseStore = explode(",", trim($value['canusestoreids'], ',')); if (in_array($storeid, $canUseStore)) { $tempCoupon[] = $value; } } else { $tempCoupon[] = $value; } } } $vip['coupons'] = $tempCoupon; $res['status'] = 1; $res['msg'] = '查询成功'; $res['info'] = $vip; } else if ($vip['status'] == 3) { $res['status'] = 0; $res['msg'] = '会员卡已被冻结'; } else if ($vip['status'] == 4) { $res['status'] = 0; $res['msg'] = '会员卡已挂失'; } else if ($vip['status'] == 2) { $res['status'] = 0; $res['msg'] = '会员卡已删除'; } $this->ajaxReturn($res); } } public function vipLogin_v2() { $res = A("CashierApi/GetVipInfo")->vipLogin(); return $res; } public function newPlaceOrderPay_v4() { $res = A("CashierApi/Pay")->orderPay_v1(); return $res; } /* * 2019-9-30收银支付接口 */ public function orderPay_v2() { $res = A("CashierApi/Pay")->OrderPay_v3(); return $res; } /** * 获取导购 * @param int $store_id 门店id * @param int $merchant_id 商户id * @return array $res */ public function getGuideList() { // 接收参数 $store_id = I('post.store_id'); $merchant_id = I('post.merchant_id'); // 判断门店id if (!$store_id) { $res = array('status' => 0, 'msg' => '缺少必要的store_id'); $this->ajaxReturn($res); } // 判断商户id if (!$merchant_id) { $res = array('status' => 0, 'msg' => '缺少必要的merchant_id'); $this->ajaxReturn($res); } // 实例化模型 $GuideModel = D('RetailGuide'); $map = array( $GuideModel::MERCHANT_ID => $merchant_id, $GuideModel::STORE_ID => $store_id, $GuideModel::STATUS => 1, ); $field = array($GuideModel::ID, $GuideModel::NAME); $guide_list = $GuideModel->getSelect($map, $field); if ($guide_list) { $res = array('status' => 1, 'guide_list' => $guide_list); } else { $res = array('status' => 0, 'msg' => '暂无导购'); } $this->ajaxReturn($res); } /** * @param int|string $user_type 操作人员类型 1.商户 2.店长 3.收银员 * @param int $use_id 操作人员id * @param int $store_id 门店id * @param int $merchant_id 商户id * @param int $vip_info 表单提交 * @return array $res */ public function addVipInfo() { // 接收参数 $user_type = I('post.user_type'); $use_id = I('post.use_id'); $store_id = I('post.store_id'); $merchant_id = I('post.merchant_id'); $platform_type = I('post.platform_type'); $vip_info = json_decode($_POST['vip_info'], true); // 判断操作人员 if (!$use_id) { $res = array('status' => 0, 'msg' => '缺少必要的操作人员参数'); $this->ajaxReturn($res); } // 判断门店id if (!$store_id) { $res = array('status' => 0, 'msg' => '缺少必要的store_id'); $this->ajaxReturn($res); } // 判断商户id if (!$merchant_id) { $res = array('status' => 0, 'msg' => '缺少必要的merchant_id'); $this->ajaxReturn($res); } // 判断人员类型 switch ($user_type) { case 1: // 查询商户 $RMerchantModel = D('RetailMerchant'); $result = $RMerchantModel->getFindNormalMerchant($use_id); if ($result['status'] == 0) { $this->ajaxReturn($result); } break; case 2: // 查询店长 $RManagerModel = D('RetailManager'); $manager = $RManagerModel->getFind(array($RManagerModel::MERCHANT_ID => $merchant_id, $RManagerModel::STORE_ID => $store_id, $RManagerModel::STATUS => 1, $RManagerModel::ID => $use_id)); if (empty($manager)) { $res = array('status' => 0, 'msg' => '未知的店长人员'); $this->ajaxReturn($res); } break; case 3: // 查询收银员 $CashierModel = D('RetailCashier'); $cashier = $CashierModel->getFind(array($CashierModel::ID => $use_id, $CashierModel::STORE_ID => $store_id, $CashierModel::MERCHANT_ID => $merchant_id)); if (empty($cashier)) { $res = array('status' => 0, 'msg' => '未知的收银人员'); $this->ajaxReturn($res); } break; default: $res = array('status' => 0, 'msg' => '未知的操作人员'); $this->ajaxReturn($res); break; } // 判断表单提交 if (!$vip_info['card_key']) { // 未绑定实体卡 if (!$vip_info['name'] || !$vip_info['mobile_phone'] || strlen($vip_info['mobile_phone']) != 11) { $res = array('status' => 0, 'msg' => '请检查表单提交信息是否正确'); $this->ajaxReturn($res); } if (!$vip_info['password']) { $password = substr($vip_info['mobile_phone'], -6); } else { if (strlen($vip_info['password']) != 6) { $res = array('status' => 0, 'msg' => '密码格式错误'); $this->ajaxReturn($res); } $password = $vip_info['password']; } } else { // 绑定实体卡 if (!$vip_info['password'] || strlen($vip_info['password']) != 6) { $res = array('status' => 0, 'msg' => '密码格式错误'); $this->ajaxReturn($res); } $password = $vip_info['password']; } // 添加会员 $VipModel = D('RetailVip'); $time = time(); $cr[$VipModel::NAME] = $vip_info[$VipModel::NAME]; // 手机号 if ($vip_info[$VipModel::MOBILE_PHONE]) { // 验证手机号 $test_phone = "/^1[3456789]\d{9}$/"; if (!preg_match($test_phone, $vip_info[$VipModel::MOBILE_PHONE])) { $res = array('status' => 0, 'msg' => '手机号格式有误'); $this->ajaxReturn($res); } // 判断手机号是否被使用 $vMap = array( $VipModel::MOBILE_PHONE => $vip_info[$VipModel::MOBILE_PHONE], $VipModel::STATUS => array('neq', 2), $VipModel::MERCHANT_ID => $merchant_id, ); $used_phone = $VipModel->getSelect($vMap); if ($used_phone) { $res = array('status' => 0, 'msg' => '该手机号已被注册'); $this->ajaxReturn($res); } $cr[$VipModel::MOBILE_PHONE] = $vip_info[$VipModel::MOBILE_PHONE]; } // 密码 $cryptoModel = new \Addons\Api\Crypto(); $cr[$VipModel::PASSWORD] = $cryptoModel->encrypt($password, date('YmdHis', $time)); // 生日 if ($vip_info['birthday']) { $cr[$VipModel::BIRTHDAY] = $vip_info['birthday']; } // 实体卡 if ($vip_info['card_key']) { // 判断实体卡是否被使用 $vMap = array( $VipModel::CARD_KEY => $vip_info['card_key'], $VipModel::STATUS => array('neq', 2), $VipModel::MERCHANT_ID => $merchant_id, ); $used_card_key = $VipModel->getSelect($vMap); if ($used_card_key) { $res = array('status' => 0, 'msg' => '该实体卡已被绑定'); $this->ajaxReturn($res); } $cr[$VipModel::CARD_KEY] = $vip_info['card_key']; } // 导购员 if ($vip_info['guide_id']) { // 判断导购是否存在 $GuideModel = D('RetailGuide'); $gMap = array( $GuideModel::ID => $vip_info['guide_id'], $GuideModel::MERCHANT_ID => $merchant_id, $GuideModel::STORE_ID => $store_id, $GuideModel::STATUS => 1, ); $guide_info = $GuideModel->getFind($gMap); if (!$guide_info) { $res = array('status' => 0, 'msg' => '未查询到导购信息'); $this->ajaxReturn($res); } $cr[$VipModel::GUIDE_ID] = $vip_info['guide_id']; } // 二次判断 if (!$cr) { $res = array('status' => 0, 'msg' => '请填写表单提交信息'); $this->ajaxReturn($res); } $cr[$VipModel::MERCHANT_ID] = $merchant_id; $cr[$VipModel::STORE_ID] = $store_id; $cr[$VipModel::ADD_TIME] = $time; if ($platform_type == 2) { //第三方平台 if (empty($cr[$VipModel::MOBILE_PHONE])) { $res = array('status' => 0, 'msg' => '请输入手机号'); $this->ajaxReturn($res); } $ThirdVipClass = new Vip(); $ThirdGoodsClass = new \LittleGift\Business\Goods(); $storeResult = $ThirdGoodsClass->storeCode($store_id); if (empty($storeResult['data'])) { $res = array('status' => 0, 'msg' => '第三方平台门店编码有误'); $this->ajaxReturn($res); } $thirdData = [ 'merchant_id' => $merchant_id, 'vip_info' => [ 'Code' => $cr[$VipModel::MOBILE_PHONE], 'Source' => '收银端添加', 'Customer_Code' => $storeResult['data'], 'Name' => $cr[$VipModel::NAME] ] ]; if (!empty($vip_info['birthday'])) { $thirdData['vip_info']['DateOfBirth'] = "/Date(" . (newStrToTime($vip_info['birthday']) * 1000) . "+0800)/"; } $thirdData['vip_info'] = json_encode($thirdData['vip_info']); $thirdResult = $ThirdVipClass->vipInsert($thirdData); if ($thirdResult['status'] == 0) { $res = array('status' => 0, 'msg' => '第三方平台添加失败' . $thirdResult['message']); $this->ajaxReturn($res); } if (!empty($thirdResult['data']) && !empty($thirdResult['data']['Code'])) { //Q3已存在更新Q3的会员信息 $third_vip = $thirdResult['data']; if (!empty($third_vip['Source'])) { $cr['source_channel'] = $third_vip['Source']; } if (!empty($third_vip['Name'])) { $cr['name'] = $third_vip['Name']; } if (!empty($third_vip['DateOfBirth'])) { $cr['birthday'] = date('Y-m-d', substr($third_vip['DateOfBirth'], 6, 10)); } if ($storeResult['data'] != $third_vip['Customer_Code']) { $StoreModel = new RetailStoreModel(); $new_store_id = $StoreModel->getFindField([ 'third_code' => $third_vip['Customer_Code'], 'merchantid' => $merchant_id, 'state' => 0 ], 'id'); if (!empty($new_store_id)) { $cr['storeid'] = $new_store_id; } } } } $add_result = $VipModel->addOrder($cr); if (!$add_result) { $res = array('status' => 0, 'msg' => '添加失败'); $this->ajaxReturn($res); } // 新会员注册福利 A('PayApi/Vip')->newVipWelfare($add_result, $merchant_id, 1, $vip_info['vip_type']); $res = array('status' => 1, 'msg' => '添加成功'); $this->ajaxReturn($res); } /* * *************************************会员编辑资料***************************** */ /* * 编辑提交 * @param $user_type 1商户 2门店 3收银员 * @param $operator_id 操作员id * @param $vid 会员id * @param $vip_type 3常规会员 2plus会员 * @param $grade_id 等级id *@param $modify_vip_code 收银员权限码 */ public function VipEdit() { $PlusVipModel = D("RetailPlusVip"); $VipModel = D("RetailVip"); $StoreAuthModel = D('RetailStoreAuth'); $retailCashierModel = D('RetailCashier'); $content = I("post."); $merchant_id = $content['merchantid']; $store_id = $content["storeid"]; $user_type = $content["user_type"]; $operator_id = $content['operator_identity_id']; $modify_vip_code = $content["modify_vip_code"]; $vip_type = $content["vip_type"]; $vid = $content['vid']; $grade_id = $content["grade_id"]; $phoneNew = $content["mobile_phone"]; $balance = $content["balance"]; $name = $content["name"]; $time = time(); if (!$vip_type) { $res = array( "status" => 0, "msg" => "请选择会员类型" ); $this->ajaxReturn($res); } if (!is_numeric($balance) || $balance < 0) { $res = array( "status" => 0, "msg" => "余额不能小于0" ); $this->ajaxReturn($res); } if ($vip_type == 3) { if (!isset($grade_id)) { $res = array( "status" => 0, "msg" => "请选择会员等级" ); $this->ajaxReturn($res); } } switch ($user_type) { case 1: if (!$merchant_id || !$vid) { $res = array( 'status' => 0, 'msg' => "参数缺失" ); $this->ajaxReturn($res); } break; case 2: if (!$merchant_id || !$store_id || !$vid) { $res = array( 'status' => 0, 'msg' => "参数缺失" ); $this->ajaxReturn($res); } // 判断门店权限 $edit_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => $store_id), $StoreAuthModel::EDIT_VIP); if ($edit_vip && $edit_vip == 2) { $res = array( 'status' => 0, 'msg' => '门店暂无编辑权限' ); $this->ajaxReturn($res); } break; case 3: if (!$merchant_id || !$store_id || !$vid) { $res = array( "status" => 0, "msg" => "参数缺失" ); $this->ajaxReturn($res); } //判断门店权限 $edit_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => $store_id), $StoreAuthModel::EDIT_VIP); if ($edit_vip && $edit_vip == 2) { $res = array( 'status' => 0, 'msg' => '门店暂无编辑权限' ); $this->ajaxReturn($res); } if (!$modify_vip_code) { $res = array( 'status' => 0, 'msg' => '请输入权限码' ); $this->ajaxReturn($res); } $map = array( $retailCashierModel::ID => $operator_id, $retailCashierModel::STATUS => 1 ); $cashier = $retailCashierModel->getFind($map); if (!$cashier) { $res = array( "status" => 0, "msg" => "未找到该收银员,请重新登录" ); $this->ajaxReturn($res); } // 判断收银员 if (!$cashier[$retailCashierModel::MODIFY_VIP_STATE] || $cashier[$retailCashierModel::MODIFY_VIP_STATE] == 1) { $res = array( "status" => 0, "msg" => "暂无权限编辑会员资料" ); $this->ajaxReturn($res); } if ($modify_vip_code != $cashier[$retailCashierModel::MODIFY_VIP_CODE]) { $res = array( 'status' => 0, 'msg' => '权限码错误' ); $this->ajaxReturn($res); } break; } $map['id'] = $vid; $map['merchantid'] = $merchant_id; $map['status'] = array('neq', 2); $vip = D("RetailVip")->getFind($map); if (empty($vip)) { $res = array( "status" => 0, "msg" => "未找到该会员" ); $this->ajaxReturn($res); } if ($user_type == 3 && ($balance > $vip["balance"])) { $res = array( "status" => 0, "msg" => "增加会员余额,请从充值入口进行充值" ); $this->ajaxReturn($res); } if (!empty($name)) { $data['name'] = $name; } if ($vip['mobile_phone'] != $phoneNew) { $test_phone = "/^1[3456789]\d{9}$/"; if (!preg_match($test_phone, $phoneNew)) { $res = array( 'status' => 0, 'msg' => '手机号格式有误' ); $this->ajaxReturn($res); } //使用新的手机号 if (!empty($phoneNew)) { $map['id'] = array('neq', $vid); $map['mobile_phone'] = $phoneNew; $map['status'] = array('neq', 2); $oldVip = D("RetailVip")->getFind($map);; if (!empty($oldVip)) { $res = array( "status" => 0, "msg" => "该手机号已被占用" ); $this->ajaxReturn($res); } $data['mobile_phone'] = $phoneNew; $data['cardnum'] = $phoneNew; } else { if (!empty($vip['mobile_phone'])) { $res = array( "status" => 0, "msg" => "不能将原有手机号删除" ); $this->ajaxReturn($res); } } } if ($balance != $vip['balance']) { $data['balance'] = $balance; } if ($vip_type == 3) { //常规会员 $gradeVip = M('retail_vip_integral') ->where(array('min_integral' => array('ELT', $vip['grade_integral']), 'merchantid' => $merchant_id)) ->order('min_integral desc') ->find(); if ($gradeVip['id'] != $grade_id) { $gradeInfo = M('retail_vip_integral')->where(array('id' => $grade_id))->find(); if (empty($gradeInfo)) { if ($grade_id == 0) { $data['grade_integral'] = 0; } else { $res = array( "status" => 0, "msg" => "会员等级有误" ); $this->ajaxReturn($res); } } else { $data['grade_integral'] = $gradeInfo['min_integral']; } } } else if ($vip_type == 2 && $vip['plus_type'] != 2) { //plus会员 $start_time = $time; $end_time = strtotime("+1 year"); $plus_vip_info = $PlusVipModel->getFind(array('vip_id' => $vip['id'], 'merchantid' => $merchant_id)); if ($plus_vip_info) { $PlusVipModel->updateOrder(array('vip_id' => $vip['id'], 'merchantid' => $merchant_id), array('state' => 1, 'start_time' => $start_time, 'end_time' => $end_time)); $plus_add = $plus_vip_info['id']; } else { $plus_data = array( "vip_id" => $vid, "merchantid" => $merchant_id, "addtime" => $time, "start_time" => $start_time, "end_time" => $end_time, "state" => 1, "storeid" => $vip['storeid'] ); $plus_add = $PlusVipModel->addOrder($plus_data); } if ($plus_add) { $xcx_info = M('retail_xcxvip')->where(array('merchantid' => $merchant_id, 'vip_id' => $vip['id']))->find(); if ($xcx_info) { M('retail_xcxvip')->where(array('id' => $xcx_info['id']))->save(array('plus_vip_id' => $plus_add, 'type' => 2)); $PlusVipModel->updateOrder(array('id' => $plus_add), array('xcx_vip_id' => $xcx_info['id'])); } $data['plus_id'] = $plus_add; $data['plus_type'] = 2; $data['plus_state'] = 1; } } if (!empty($data)) { $save = $VipModel->updateOrder(array('id' => $vid), $data); if ($save) { if ($balance != $vip['balance']) { if ($balance < $vip['balance']) { $money = round($vip['balance'] - $balance, 2); $add['type'] = 4; $add['money'] = $money; $str = '扣除'; } else { $money = round($balance - $vip['balance'], 2); $add['type'] = 3; $add['money'] = 0; $str = '增加'; } switch ($user_type) { case 1: $add['remark'] = '小助手商户修改余额' . $str . $money . '元'; break; case 2: $add['remark'] = '小助手店长修改余额' . $str . $money . '元'; break; case 3: $add['remark'] = '小助手收银员修改余额' . $str . $money . '元'; break; } $add['vid'] = $vid; $add['status'] = 1; $add['all_money'] = $money; $add['state'] = 1; $add['add_time'] = $time; $add['merchant_id'] = $merchant_id; $add['user_type'] = $user_type; if ($user_type == 2 || $user_type == 3) { $add['store_id'] = $store_id; } $add['scene_type'] = 6; D("RetailRechargeOrder")->add($add); } $record = array(); $record['operator'] = $user_type; $record['operator_id'] = $operator_id; $record['merchant_id'] = $merchant_id; if ($user_type == 2 || $user_type == 3) { $record['store_id'] = $store_id; } if ($vip['mobile_phone'] != $phoneNew) { $record['before_phone'] = $vip['mobile_phone'] ? $vip['mobile_phone'] : ''; $record['after_phone'] = $phoneNew ? $phoneNew : ''; } if ($vip_type == 3) { if ($gradeVip['id'] != $grade_id) { $record['before_grade'] = $gradeVip['cardname'] ? $gradeVip['cardname'] : '无等级'; $record['after_grade'] = $gradeInfo['cardname'] ? $gradeInfo['cardname'] : '无等级'; } } else if ($vip_type == 2 && $vip['plus_type'] != 2) { $gradeVip = M('retail_vip_integral') ->where(array('min_integral' => array('ELT', $vip['grade_integral']), 'merchantid' => $merchant_id)) ->order('min_integral desc') ->find(); $record['before_grade'] = $gradeVip['cardname'] ? $gradeVip['cardname'] : '无等级'; $record['after_grade'] = "Plus会员"; } if ($balance != $vip['balance']) { $record['before_balance'] = $vip['balance'] ? $vip['balance'] : 0; $record['after_balance'] = $balance ? $balance : 0; } $record['add_time'] = $time; $record['vip_id'] = $vid; $addRecord = D('RetailVipChange')->add($record); if ($addRecord) { $saves = 1; } else { $saves = 2; } } else { $saves = 0; } } else { $saves = 1; } switch ($saves) { case 1: $res = array( "status" => 1, "msg" => "操作成功" ); break; case 2: $res = array( "status" => 1, "msg" => "操作成功,记录存入失败" ); break; case 3: $res = array( "status" => 0, "msg" => "操作失败" ); break; default: $res = array( "status" => 0, "msg" => "暂无修改" ); break; } if (($saves == 1 || $saves == 2) && ($user_type == 1 || $user_type == 2)) { $parameter['desc'] = '会员编辑'; switch ($user_type) { case 1: $parameter['type'] = 3; break; case 2: $parameter['type'] = 4; break; } $this->system_parameter($parameter); } $this->ajaxReturn($res); } public function VipEdit_v1() { $data = I('post.'); $data['operator_type'] = 3; $data['operator_id'] = $data['operator_identity_id']; $data['merchant_id'] = $data['merchantid']; $data['store_id'] = $data['storeid']; $data['cashier_id'] = $data['operator_identity_id']; switch ($data['user_type']) { case 1: $data['user_type'] = 3; break; case 2: $data['user_type'] = 4; break; case 3: $data['user_type'] = 6; break; } $VipEditClass = new VipEdit(); $result = $VipEditClass->editInfo($data); $this->ajaxReturn($result); } /* * 会员充值 */ public function VipRecharge() { A('CashierApi/Recharge')->VipRecharge(); } /* * 充值获取会员信息 */ public function getRechargeActivity() { A('CashierApi/Vip')->getRechargeActivity(); } /* * *****************************************销售记录列表********************************* */ /* * 收银员列表 */ public function cashierInfo() { $CashierModel = D("RetailCashier"); $data = I("post."); $map = array( $CashierModel::STORE_ID => $data['storeid'], $CashierModel::STATUS => 1 ); $fields = $CashierModel::ID . ',' . $CashierModel::NAME; $cashierList = $CashierModel->getSelect($map, $fields); $cashierList = $cashierList ? $cashierList : array(); $res = array( 'status' => 1, 'data' => $cashierList ); $this->ajaxReturn($res); } //订单商品信息 public function sell_list() { $data = I('post.'); $SellClass = new Sell(); $result = $SellClass->sellList($data); $this->ajaxReturn($result); } //销售明细的串号列表 public function sellSerialList() { $data = I('post.'); $SerialClass = new SerialNumberGoods(); $result = $SerialClass->sellSerialList($data); $this->ajaxReturn($result); } /* * 商品销售记录 */ public function getSellList() { $data = I("post."); $store_id = $data['storeid']; $merchant_id = $data['merchantid']; $start_time = $data['start_time']; $end_time = $data['end_time']; $keyword = $data['keyword']; $page = $data['page']; $limit = $data['limit']; if (!$store_id) { $res = array('status' => 0, 'msg' => '登录超时,请重新登录'); $this->ajaxReturn($res); } /* 查看进价权限 */ $show_purch_price = M("retail_store_jurisdiction")->where(array('storeid' => $store_id))->getField("showpurch_price"); // 时间搜索 if (!empty($start_time) && !empty($end_time)) { $start_time = strtotime($start_time . "00:00:00"); $end_time = strtotime($end_time . "23:59:59"); $map['s.add_time'] = array('between', array($start_time, $end_time)); } else if (!empty($start_time)) { $start_time = strtotime($start_time . "00:00:00"); $map['s.add_time'] = array('gt', $start_time); } else if (!empty($end_time)) { $end_time = strtotime($end_time . "23:59:59"); $map['s.add_time'] = array('lt', $end_time); } // 货号、条码 if (!empty($keyword)) { $map['g.goods_number|g.goods_name'] = array('like', '%' . $keyword . "%"); } $map['s.pay_type'] = array('neq', 0); $map['s.pay_state'] = 1; $map['s.merchant_id'] = $merchant_id; $map['s.store_id'] = $store_id; $fields = 's.id,s.serial_number_state,s.goods_id,s.company,s.price,s.num,s.all_money,s.add_time,s.purchase_price,s.sell_type,g.goods_name,g.goods_number'; $sell_list = M('retail_sell as s') ->join('ls_retail_goods as g on s.goods_id=g.id', 'LEFT') ->field($fields) ->where($map) ->page($page, $limit) ->order('s.add_time desc') ->select(); if ($sell_list) { foreach ($sell_list as $key => &$val) { $val['index'] = $key + 1; $val['goods_name'] = $val['goods_name'] ? $val['goods_name'] : '无码商品'; $val['goods_number'] = $val['goods_number'] ? $val['goods_number'] : '无'; $val['add_time'] = date('Y-m-d H:i:s', $val['add_time']); $val['price'] = round($val['price'], 2); $val['num'] = round($val['num'], 3); $val['subtotal'] = floatval(round($val['price'] * $val['num'], 2)); // 小计 if ($show_purch_price == 2) { $val['purchase_price'] = '***'; } if ($val['sell_type'] == 1) { $val['sell_mold'] = '售'; } else if ($val['sell_type'] == 2) { $val['sell_mold'] = '退'; } else { $val['sell_mold'] = '未知'; } } } $sell_list = $sell_list ? $sell_list : array(); $res = array( 'status' => 1, 'sell_list' => $sell_list ); $this->ajaxReturn($res); } /* * 店内经营订单 * @param storeid 门店id * @param add_time 时间搜索 * @param order_no 订单号 * @param cashier_id 收银员id * @param pay_type 支付方式 * @param order_type 订单类型 1:购买订单 2:退款订单 * @param type 1商城2店内 */ public function StoreOrderList() { $data = I("post."); $store_id = $data['storeid']; $start_time = $data['start_time']; $end_time = $data['end_time']; $order_no = $data['order_no']; $admin_id = $data['cashier_id']; $pay_type = $data['pay_type']; $order_type = $data['order_type']; $type = $data['type']; $page = $data["page"]; $limit = $data["limit"]; if (!empty($start_time) && !empty($end_time)) { $start_time = strtotime($start_time . "00:00:00"); $end_time = strtotime($end_time . "23:59:59"); $map['b.add_time'] = array('between', array($start_time, $end_time)); } else if (!empty($start_time)) { $start_time = strtotime($start_time . "00:00:00"); $map['b.add_time'] = array('gt', $start_time); } else if (!empty($end_time)) { $end_time = strtotime($end_time . "23:59:59"); $map['b.add_time'] = array('lt', $end_time); } if (!empty($order_no)) { $map['b.order_no'] = $order_no; } if (!empty($admin_id)) { $map['b.cashier_id'] = $admin_id; } if (!empty($pay_type)) { $map['b.pay_type'] = $pay_type; } if (!empty($order_type)) { $map['b.order_type'] = $order_type; } if (!empty($type)) { $map['b.type'] = $type; } $map['b.pay_state'] = 1; $map['b.store_id'] = $store_id; $sell_list = M('retail_bill_order as b') ->join('ls_retail_cashier as c on c.id=b.cashier_id', 'LEFT') ->join('ls_retail_vip as v on v.id=b.vid', 'LEFT') ->join('ls_retail_bill_discount as d on d.bill_id=b.id', 'LEFT') ->field('b.*,v.name as vip_name,v.nickname,v.mobile_phone as vip_mobile,v.card_key,c.name as adminname,d.coupon_money,d.vip_dis_money,d.cashier_dis_money,d.discount,d.small_changes_money') ->where($map) ->order("b.id desc") ->page($page, $limit) ->select(); if ($sell_list) { $BillOrder = new BillOrder(); $Plug = new Plug(); $plug_result = $Plug->merPlugState([ 'merchant_id' => $data['merchant_id'], 'identification_arr' => ['moraleducationcoin'] ]); $StoreModel = new RetailStoreModel(); $villageId = $StoreModel->getFindField(['id'=>$store_id],'third_code'); foreach ($sell_list as $key => &$val) { $val['index'] = $key + 1; $val['add_time'] = date('Y-m-d H:i:s', $val['add_time']); $total_discount = round($val['coupon_money'] + $val['cashier_dis_money'] + $val['vip_dis_money'] + $val[' small_changes_money'], 2); // 总减少金额 $val['type_name'] = $val['type'] == 1 ? '商城' : '店内'; $val['all_money'] = floatval($val['all_money']) . '(元)'; // 消费金额 $val['discount'] = $val['discount'] >= 1 ? '无折扣' : floatval($val['discount']) . ' 折'; // 手动折扣 $val['coupon_money'] = $val['coupon_money'] && $val['coupon_money'] > 0 ? floatval($val['coupon_money']) . '(元)' : '无优惠'; // 优惠券金额 $val['cashier_dis_money'] = $val['cashier_dis_money'] && $val['cashier_dis_money'] > 0 ? floatval($val['cashier_dis_money']) . '(元)' : '无优惠'; // 手动折扣金额 $val['vip_dis_money'] = $val['vip_dis_money'] && $val['vip_dis_money'] > 0 ? floatval($val['vip_dis_money']) . '(元)' : '无优惠'; $val['small_changes_money'] = $val['small_changes_money'] && $val['small_changes_money'] > 0 ? floatval($val['small_changes_money']) . '(元)' : '未抹零'; // 手动折扣金额 $val['total_discount'] = $total_discount ? $total_discount . '(元)' : '无优惠'; if ($val['vid']) { // 会员信息 $val['vip_name'] = $val['vip_name'] ? $val['vip_name'] : ($val['nickname'] ? $val['nickname'] : '会员'); $val['vip_mobile'] = $val['vip_mobile'] ? $val['vip_mobile'] : '未设置'; $val['card_key'] = $val['card_keycard_key'] ? $val['card_key'] : '未绑定'; } else if ($plug_result['moraleducationcoin']) { $val['vip_name'] = $val['third_vip_name']; $val['villageId'] = $villageId; $val['vip_mobile'] = ''; $val['card_key'] = ''; } else { $val['vip_name'] = '散客'; $val['vip_mobile'] = '未设置'; $val['card_key'] = '未绑定'; } $val['pay_name'] = $BillOrder->getPayType($val['pay_type'], $val['id']); /* 订单类型 */ if ($val['order_type'] == 2) { $val['status_name'] = '退款订单'; } else { if ($val['refund_status'] == 3) { $val['status_name'] = '有退款'; } else { $val['status_name'] = '购买订单'; } } /* 导购员 */ if ($val['guideid']) { $guide_name = M('retail_guide')->where(array('id' => $val['guideid']))->getField('guidename'); $val['guide_name'] = $guide_name ? $guide_name : '自购'; } else { $val['guide_name'] = '自购'; } } } $sell_list = $sell_list ? $sell_list : array(); $res['status'] = 1; $res['data'] = $sell_list; $this->ajaxReturn($res); } /* * 组合支付详情 * @param id 订单id */ public function payTypeShow() { $id = I('post.id'); $PayOrder = new PayOrder(); $info = $PayOrder->getFindPayList('', '', $id); $res['data'] = $info ? $info : array(); $this->ajaxReturn($res); } //收银员交班交班统计数据 public function record() { A('CashierApi/Record')->record(); } public function submitWork() { A('CashierApi/Record')->submitWork(); } public function printerRecordData_v1() { A('CashierApi/Record')->printerRecordData_v1(); } /* * ***********************************************盘点模块****************************** */ //盘点信息列表 public function InventoryList() { $data = I("post."); $user_type = $data["user_type"]; // 1商户 2店长 3收银员 $merchant_id = $data['merchantid']; $store_id = $data['storeid']; $page = $data['page']; $limit = $data['limit']; $order_number = $data['order_number']; $start_time = $data['start_time']; $end_time = $data['end_time']; if (!empty($order_number)) { $where['order_number'] = array('like', $order_number . '%'); } if (!empty($start_time) && !empty($end_time)) { $start_time = strtotime($start_time . "00:00:00"); $end_time = strtotime($end_time . "23:59:59"); $where['add_time'] = array('between', array($start_time, $end_time)); } else if (!empty($start_time)) { $start_time = strtotime($start_time . "00:00:00"); $where['add_time'] = array('gt', $start_time); } else if (!empty($end_time)) { $end_time = strtotime($end_time . "23:59:59"); $where['add_time'] = array('lt', $end_time); } $where['merchant_id'] = $merchant_id; $where['status'] = array('in', '1,2'); switch ($user_type) { case 1: $info = D('InventoryOrder')->getSelect($where, $page, $limit, $field = "*", $order = "id desc"); if ($info) { foreach ($info as $key => &$val) { $val['index'] = $key + 1; $val['operator'] = A('Api/Inventory')->OperatorName($val['operator_id']); $val['add_time'] = date('Y-m-d H:i:s', $val['add_time']); $val['amount'] = round($val['amount'], 2); $val['quantity'] = round($val['quantity'], 3); switch ($val['status']) { case 1: $val['status_name'] = '完成'; break; case 2: $val['status_name'] = '进行中'; break; default: $val['status_name'] = '失败'; break; } } } break; case 2: case 3: //门店与收银员盘点列表 $where['store_id'] = $store_id; $info = D('SInventoryOrder')->getSelect($where, $page, $limit, $field = "*", $order = "id desc"); if ($info) { $showpurch_price = M("retail_store_jurisdiction")->where(array('storeid' => $store_id))->getField("showpurch_price"); foreach ($info as $key => &$val) { $val['index'] = $key + 1; if ($val['operator_type'] == 1) { //收银员 $val['operator'] = D('Cashier')->getFindField(array('id' => $val['operator_id']), "name"); } else { $val['operator'] = A('Api/Inventory')->OperatorName($val['operator_id']); } $val['add_time'] = date('Y-m-d H:i:s', $val['add_time']); $val['quantity'] = round($val['quantity'], 3); if ($showpurch_price == 2) { $val['amount'] = '***'; } else { $val['amount'] = strval(round($val['amount'], 2)); } switch ($val['status']) { case 1: $val['status_name'] = '完成'; break; case 2: $val['status_name'] = '进行中'; break; default: $val['status_name'] = '失败'; break; } } } break; } $res['status'] = 1; $res['data'] = $info ? $info : array(); $res['msg'] = '查询成功'; $this->ajaxReturn($res); } //盘点详情的串号列表 public function inventorySerial() { $data = I('post.'); $data['serial_type'] = 4; switch ($data['user_type']) { case 1: $data['user_type'] = 3; break; case 2: case 3: $data['user_type'] = 4; break; } $SerialClass = new SerialNumberGoods(); $result = $SerialClass->recordSerialList($data); $this->ajaxReturn($result); } //盘点单详情 public function InventoryInfo() { $data = I("post."); $user_type = $data["user_type"]; //1商户 2门店 3收银员 $id = $data["id"]; $where['inventory_order_id'] = $id; switch ($user_type) { case 1: $detailsList = D('InventoryGoods')->getSelect($where, $page = '', $limit = ''); if ($detailsList) { foreach ($detailsList as $key => &$val) { $val['index'] = $key + 1; $val['inventory_num'] = round($val['inventory_num'], 3); $val['cost_price'] = round($val['cost_price'], 2); $val['subtotal'] = round($val['subtotal'], 2); $val['sku_num'] = round($val['sku_num'], 3); $val['goods_num'] = round($val['goods_num'], 3); $val['num'] = round($val['num'], 3); if ($val['attribute_state'] == 2) { $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; } } } break; case 2: case 3: $purchase_model = new SPurchaseOrderModel(); $supplier_type = D('RetailStore')->getFindField(array('id' => $data['storeid']), "supplier_type"); $detailsList = D('SInventoryGoods')->getSelect($where, $page = '', $limit = ''); if ($detailsList) { $showpurch_price = M("retail_store_jurisdiction")->where(array('storeid' => $data['storeid']))->getField("showpurch_price"); foreach ($detailsList as $key => &$val) { $val['index'] = $key + 1; $val['inventory_num'] = round($val['inventory_num'], 3); $val['sku_num'] = round($val['sku_num'], 3); $val['goods_num'] = round($val['goods_num'], 3); $val['num'] = round($val['num'], 3); if ($val['attribute_state'] == 2) { $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; } if ($showpurch_price == 2) { $val['cost_price'] = '***'; $val['subtotal'] = '***'; } else { $val['cost_price'] = strval(round($val['cost_price'], 2)); $val['subtotal'] = strval(round($val['subtotal'], 2)); } if ($supplier_type == 2 && !empty($val['purchase_order_id'])) { $val['purchase_order_number'] = $purchase_model->getFindField(array('id' => $val['purchase_order_id']), "order_number"); } } } break; } $res['data'] = $detailsList ? $detailsList : array(); $res['status'] = 1; $this->ajaxReturn($res); } //盘点的商品信息接口 public function GoodsListShow() { $content = I("post."); $user_type = $content['user_type'] ? $content['user_type'] : 2; //1商户 2门店 3收银员 $merchant_id = $content['merchantid']; $store_id = $content['storeid']; $page = $content['page']; $limit = $content['limit']; $searchText = $content['searchText']; $notInIds = $content['notInIds']; $person1 = $content['person1']; $person2 = $content['person2']; $person3 = $content['person3']; $supplier_type = D("RetailStore")->getFindField(array('id' => $store_id), "supplier_type"); if (!empty($searchText)) { $where['goods_name|sku_name|goods_code|sku_code|goods_number|sku_goods_number'] = array('like', '%' . $searchText . '%'); } $flag = 0; if (!empty($person3)) { $where['goods_class_id'] = $person3; } else if (!empty($person2)) { $class = M('retail_goods_class as c2') ->join('ls_retail_goods_class as c3 on c2.id=c3.pid') ->where(array('c2.id' => $person2, 'c3.status' => 0)) ->field('c3.id')->select(); $flag = 1; } else if (!empty($person1)) { $class = M('retail_goods_class as c1') ->join('ls_retail_goods_class as c2 on c1.id=c2.pid') ->join('ls_retail_goods_class as c3 on c2.id=c3.pid AND c3.status=0', 'LEFT') ->where(array('c1.id' => $person1, 'c2.status' => 0)) ->field('c2.id,c3.id as c3_id')->select(); $flag = 1; } if (!empty($class)) { $arr = array(); foreach ($class as &$val) { if (!in_array($val['id'], $arr)) { $arr[] = $val['id']; } if (!empty($val['c3_id'])) { if (!in_array($val['c3_id'], $arr)) { $arr[] = $val['c3_id']; } } } $str = implode(',', $arr); $where['goods_class_id'] = array('in', $str . ',' . ($person2 ? $person2 : $person1)); } else if ($flag == 1) { $where['goods_class_id'] = $person2 ? $person2 : $person1; } if (!empty($notInIds)) { $where['id'] = array('not in', $notInIds); } $where['merchant_id'] = $merchant_id; $where['status'] = array('in', '0,1'); $where['cost_price'] = array('gt', 0); switch ($user_type) { case 1: $info = D('SaleMGoods')->getSelect($where, $page, $limit, $field = '', $order = "id desc"); if ($info) { foreach ($info as $key => &$value) { $value['index'] = $key + 1; $value['inventory_num'] = ""; $value['goods_num'] = round($value['goods_num'], 3); $value['cost_price'] = round($value['cost_price'], 2); $value['checked'] = false; } } break; case 2: case 3: //商品列表 $where['store_id'] = $store_id; $info = D('SSaleMGoods')->getSelect($where, $page, $limit, $field = '', $order = "id desc"); if ($info) { foreach ($info as $key => &$value) { $value['index'] = $key + 1; $value['inventory_num'] = ""; $value['goods_num'] = round($value['goods_num'], 3); $value['cost_price'] = round($value['cost_price'], 2); $value['checked'] = false; if ($supplier_type == 2) { $parameter = array( 'goods_id' => $value['goods_id'], 'sku_id' => $value['sku_id'], 'store_id' => $store_id, ); $value['pur_id'] = D('SSaleMGoods')->getPurchaseId($parameter); $value['purchase_order_id'] = ''; } } } break; } $res['status'] = 1; $res['msg'] = '查询成功'; $res['data'] = $info ? $info : array(); $this->ajaxReturn($res); } //盘点商品查询2020-11-5 public function GoodsListShow_v1() { $data = I('post.'); $data['operator_type'] = 3; $data['merchant_id'] = $data['merchantid']; switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: case 3: //门店 $data['store_id'] = $data['storeid']; $data['user_type'] = 4; break; } $data['search_info'] = isset($data['search_info']) ? $data['search_info'] : $data['searchText']; $data['exists_id_arr'] = isset($data['exists_id_arr']) ? $data['exists_id_arr'] : $data['notInIds']; $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->InventorySearchGoods($data); $this->ajaxReturn($result); } //盘点扫码查询商品2020-11-5 public function InventoryScanCodeGoods() { $data = I('post.'); $data['operator_type'] = 3; $data['merchant_id'] = $data['merchantid']; switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: case 3: //门店 $data['store_id'] = $data['storeid']; $data['user_type'] = 4; $StoreClass = new Store(); $data['supplier_type'] = $StoreClass->getSupplierType($data['storeid']); break; } $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->InventoryScanCodeGoods($data); $this->ajaxReturn($result); } //盘点串号验证 public function inventorySerialVerify() { $data = I('post.'); switch ($data['user_type']) { case 1: $data['user_type'] = 3; break; case 2: $data['user_type'] = 4; break; case 3: $data['user_type'] = 6; break; } $data['operator_type'] = 3; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->inventorySerialVerify($data); $this->ajaxReturn($result); } /* * 继续盘点的原盘点订单的商品明细 * @param inventory_order_id 盘点订单id * @param user_type 1商家 2门店 3收银员 */ public function InventoryConduct() { $inventory_order_id = I("post.inventory_order_id"); $user_type = I('post.user_type'); $store_id = I("storeid"); switch ($user_type) { case 1: $user_type = 3; break; case 2: $user_type = 4; break; case 3: $user_type = 6; break; } $RetailStoreModel = new RetailStoreModel(); $supplier_type = $RetailStoreModel->getFindField(array('id' => $store_id), "supplier_type"); $InventoryRecordClass = new InventoryRecord(); $result = $InventoryRecordClass->keepInventory([ 'user_type' => $user_type, 'store_id' => $store_id ? $store_id : 0, 'inventory_order_id' => $inventory_order_id, 'supplier_type' => $supplier_type ]); $goodsList = $result['data']; $res = array( 'status' => 1, 'inventory_order_id' => $inventory_order_id, 'goodsList' => $goodsList ); $this->ajaxReturn($res); } /*@param merchantid 商户id * @param storeid 门店id * @param remarks 备注 * @param goodsList 盘点商品信息 * @param user_type 盘点人身份 * @param operator_id 操作人id * @param status 1盘点 2保存草稿箱 * @param inventory_order_id 盘点单id */ public function InventorySbu() { if (IS_POST) { $data = I("post."); $merchant_id = $data['merchantid']; $store_id = $data['storeid']; $remarks = $data['remarks'] ? $data['remarks'] : ""; $status = I("post.status"); $inventory_order_id = I("post.inventory_order_id"); $goodsList = $data['goodsList']; $goodsList = json_decode(htmlspecialchars_decode($goodsList), true); $user_type = $data['user_type'] ? $data['user_type'] : 2; //1商户 2店长 3收银员 $operator_id = $data['operator_id']; if (!$operator_id || !$user_type) { $res['status'] = 0; $res['msg'] = "缺少参数,请重新登录"; $this->ajaxReturn($res); } if (!$goodsList || count($goodsList) == 0) { $res['status'] = 0; $res['msg'] = "请添加盘点的商品"; $this->ajaxReturn($res); } if (count($goodsList) > 500) { $res['status'] = 0; $res['msg'] = "单次盘点上限为500种商品"; $this->ajaxReturn($res); } switch ($user_type) { case 1: $parameter = array( 'merchant_id' => $merchant_id, 'operator_id' => $operator_id, 'remarks' => $remarks, 'goodsList' => $goodsList, 'status' => $status, 'inventory_order_id' => $inventory_order_id ); $res = A('Api/Inventory')->MerInventorying_V1($parameter); break; case 2: case 3: $supplier_type = D('RetailStore')->getFindField(array('id' => $store_id), "supplier_type"); $parameter = array( 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'operator_id' => $operator_id, 'user_type' => $user_type, 'remarks' => $remarks, 'goodsList' => $goodsList, 'status' => $status, 'inventory_order_id' => $inventory_order_id, 'supplier_type' => $supplier_type ); $res = A('Api/Inventory')->Inventorying_V1($parameter); break; } } else { $res['status'] = 0; $res['msg'] = "网络错误"; } $this->ajaxReturn($res); } //删除盘点商品记录 public function deleteGoodsRecord() { $data = I('post.'); switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: //门店 $data['user_type'] = 4; break; case 3: //收银员 $data['user_type'] = 6; break; } $InventoryClass = new InventoryOperation(); $result = $InventoryClass->deleteGoodsRecord($data); $this->ajaxReturn($result); } //新版盘点 public function InventorySbu_v1() { $data = I('post.'); $data['merchant_id'] = $data['merchantid']; $data['store_id'] = $data['storeid'] ? $data['storeid'] : 0; $data['operator_type'] = 3; $data['goodsList'] = json_decode(htmlspecialchars_decode($data['goodsList']), true); switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: //门店 $data['user_type'] = 4; break; case 3: //收银员 $data['user_type'] = 6; break; } if ($data['user_type'] == 4 || $data['user_type'] == 6) { $StoreClass = new Store(); $data['supplier_type'] = $StoreClass->getSupplierType($data['store_id']); } unset($data['merchantid']); unset($data['storeid']); $InventoryClass = new InventoryOperation(); $result = $InventoryClass->storeReal($data); $this->ajaxReturn($result); } //采购已经入库的串号列表 public function purchaseWarehouseSerial() { $data = I('post.'); switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: //门店 $data['user_type'] = 4; break; case 3: //收银员 $data['user_type'] = 6; break; } $SerialClass = new SerialNumberGoods(); $result = $SerialClass->purchaseWarehouseSerial($data); $this->ajaxReturn($result); } //采购已经退货的串号列表 public function purchaseRetreatSerial() { $data = I('post.'); switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: //门店 $data['user_type'] = 4; break; case 3: //收银员 $data['user_type'] = 6; break; } $SerialClass = new SerialNumberGoods(); $result = $SerialClass->purchaseRetreatSerial($data); $this->ajaxReturn($result); } /* * *************************************快捷收银*************************************************** */ /* * 快捷收银会员登录 */ public function VipSign() { $data = I("post."); $code = $data["vipCode"]; //会员卡号; if (empty($code)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $merchant_id = $data["merchantid"]; //商户id; $store_id = $data["storeid"]; //门店id $user_type = $data["user_type"]; // 1商户 2店长 3收银员 $cashier_id = $data["cashier_id"]; $VipDynamicCodeModel = D('RetailVipDynamicCode'); $VipModel = D('RetailVip'); $temp = (int)substr($code, 0, 2); $field = array( $VipModel::ID, $VipModel::NICK_NAME, $VipModel::NAME, $VipModel::BALANCE, $VipModel::MOBILE_PHONE . ' as cardnum', $VipModel::CARD_KEY, $VipModel::INTEGRAL, $VipModel::GRADE_INTEGRAL, $VipModel::STATUS, $VipModel::PLUS_TYPE, $VipModel::DENSITY_FREE ); if (is_numeric($code) && strlen($code) == 18 && $temp >= 86 && $temp <= 89) { $map = array( $VipDynamicCodeModel::CODE => $code, $VipDynamicCodeModel::STATUS => 0, $VipDynamicCodeModel::STATE => 0, $VipDynamicCodeModel::MERCHANT_ID => $merchant_id ); $old = $VipDynamicCodeModel->getFind($map); if (empty($old) || $old[$VipDynamicCodeModel::FAILURE_TIME] <= time()) { $res['status'] = 0; $res['msg'] = '请会员刷新动态码'; $this->ajaxReturn($res); } else { $save = array( $VipDynamicCodeModel::STATUS => 1, $VipDynamicCodeModel::USE_STORE_ID => $store_id, ); if ($user_type == 3) { $save[$VipDynamicCodeModel::USE_CASHIER_ID] = $cashier_id; } $VipDynamicCodeModel->updateOrder($map, $save); } $where[$VipModel::ID] = $old[$VipDynamicCodeModel::VID]; $where[$VipModel::STATUS] = array('neq', 2); $vip = $VipModel->getSelect($where, $field); $login_type = 1; $payCode = $code; $vipList = $vip; } else { $map[$VipModel::MERCHANT_ID] = $merchant_id; $map[$VipModel::STATUS] = array('neq', 2); if (is_numeric($code) && strlen($code) == 11) { $map[$VipModel::MOBILE_PHONE] = $code; } else if (is_numeric($code) && strlen($code) == 4) { $map[$VipModel::MOBILE_PHONE] = array('like', '%' . $code); } else if (is_numeric($code)) { $map[$VipModel::CARD_KEY . '|' . $VipModel::CARD_NUM] = $code; } else { $map[$VipModel::CARD_KEY] = $code; } $vipList = $VipModel->getSelect($map, $field); $login_type = 2; } if (!empty($vipList)) { foreach ($vipList as &$value) { $value['login_type'] = $login_type; $value['payCode'] = !empty($payCode) ? $payCode : ($value[$VipModel::CARD_NUM] ? $value[$VipModel::CARD_NUM] : $value[$VipModel::CARD_KEY]); if (empty($value[$VipModel::NICK_NAME])) { $value['nickname'] = $value[$VipModel::NAME]; } if (empty($value[$VipModel::NAME])) { $value['name'] = $value[$VipModel::NICK_NAME]; } } $StoreModel = D('RetailStore'); $store = D('RetailStore')->getOrderFind(array($StoreModel::ID => $store_id), $StoreModel::DENSITY_FREE_STATE); $res['density_free_state'] = $store[$StoreModel::DENSITY_FREE_STATE]; $res['info'] = $vipList; $res['status'] = 1; $res['msg'] = '查询成功'; } else { $res['status'] = 0; $res['msg'] = '查询失败'; } $this->ajaxReturn($res); } /* *快捷收银下单2019-9-30 */ public function QuickCashier_v1() { $data = I("post."); $store_id = $data["storeid"]; $merchant_id = $data["merchantid"]; $user_type = $data["user_type"]; // 1商户 2店长 3收银员 $operator_id = $data['operator_identity_id']; //操作人员id $pay_type = $data["pay_type"]; //支付类型 1微信 2支付宝 3现金 5其他 6会员余额 $pay_money = $data['pay_money']; //支付金额 $code = $data["code"]; //支付宝、微信付款码 $vip_login_type = $data["vip_login_type"]; //会员登录方式1动态码 2账号登录 $vid = $data["vid"]; //会员id $password = $data["password"]; //会员支付密码 $card_code = $data["card_code"]; //会员动态码 if (!$merchant_id || !$store_id || !$operator_id || !$pay_type) { $res['status'] = 0; $res['msg'] = "参数缺失,请重新登录"; $this->ajaxReturn($res); } if (round($pay_money, 2) > 100000) { $res = array( "status" => 0, "msg" => "金额不能超过10万元" ); $this->ajaxReturn($res); } if (!in_array($user_type, array('2', '3'))) { $res['status'] = 0; $res['msg'] = "登录超时,请重新登录"; $this->ajaxReturn($res); } if (!in_array($pay_type, array('1', '2', '3', '6'))) { $res['status'] = 0; $res['msg'] = "支付类型有误"; $this->ajaxReturn($res); } //验证支付金额 if (!verifyPrice($pay_money)) { $result['status'] = 0; $result['msg'] = '支付金额有误,请输入大于0的支付金额'; $this->ajaxReturn($result); } $Order = array(); $PayOrderModel = D("RetailPayOrder"); switch ($pay_type) { case '1': case '2': //微信支付 if (!empty($code)) { //刷卡支付、付款码支付 $map = array( $PayOrderModel::STORE_ID => $store_id, $PayOrderModel::CODE => $code ); $historyOrder = $PayOrderModel->getFind($map); if (!empty($historyOrder)) { $result['status'] = 0; $result['msg'] = '请用户刷新付款码'; $this->ajaxReturn($result); } $text = substr($code, 0, 2); if ($text >= 25 && $text <= 30) { //支付宝付款码支付 $pay_type = 2; } else if ($text >= 10 && $text <= 15) { //微信的付款码支付 $pay_type = 1; } else { $result['status'] = 0; $result['msg'] = "请扫描正确的付款码"; $this->ajaxReturn($result); } $Order[$PayOrderModel::CODE] = $code; } else { $result['status'] = 0; $result['msg'] = '缺少支付参数code'; $this->ajaxReturn($result); } $PaySetModel = D('RetailPaySet'); $paySet = $PaySetModel->getFindMerchantConfig($merchant_id, $pay_type); if ($paySet['status'] != 1) { $result['status'] = 0; $result['msg'] = $paySet['msg']; $this->ajaxReturn($result); } $config = $paySet['config']; $Order[$PayOrderModel::M_PAY_TYPE] = $paySet['m_pay_type']; break; case '6': if (empty($vid) || empty($vip_login_type)) { $result['status'] = 0; $result['msg'] = '缺少会员参数'; $this->ajaxReturn($result); } $Order[$PayOrderModel::VID] = $vid; break; } $Order[$PayOrderModel::PAY_TYPE] = $pay_type; $Order[$PayOrderModel::STORE_ID] = $store_id; $Order[$PayOrderModel::MERCHANT_ID] = $merchant_id; if ($user_type == 2) { //店长 $Order[$PayOrderModel::SHOPOWNER_ID] = $operator_id; } else if ($user_type == 3) { //收银员 $Order[$PayOrderModel::CASHIER_ID] = $operator_id; } $Order[$PayOrderModel::TRADE_AMOUNT] = round($pay_money, 2); $Order[$PayOrderModel::ORDER_TYPE] = 6; $Order[$PayOrderModel::ORDER_STATE] = 'WAIT_BUYER_PAY'; $Order[$PayOrderModel::ADD_TIME] = time(); $pay_order = $PayOrderModel->addPayOrder($Order); if (!$pay_order) { $result['status'] = 0; $result['msg'] = '创建订单失败,请重试'; $this->ajaxReturn($result); } $Order[$PayOrderModel::ID] = $pay_order[$PayOrderModel::ID]; $Order[$PayOrderModel::OUT_TRADE_NO] = $pay_order[$PayOrderModel::OUT_TRADE_NO]; switch ($pay_type) { case '1': case '2': //微信 //支付宝 if ($Order[$PayOrderModel::M_PAY_TYPE] == 3) { //新大陆支付 $res = A('Pay/PayContinent')->toContinentPay_v3($Order, "小助手快捷收银"); } else if ($Order[$PayOrderModel::M_PAY_TYPE] == 4) { //云闪付 $payObj = new CloudPayController(); $res = $payObj->soltCard($Order, $config, $pay_type); } else if ($Order[$PayOrderModel::M_PAY_TYPE] == 7) { //钱客云 $res = $this->paymentQuery($Order, $config, $pay_type); } else { if ($pay_type == 1) { //微信 $res = A('Pay/NewWxPay')->toWxPay_v2($Order, $config); } else { //支付宝 $res = A('Pay/NewAliPay')->toAliPay_v2($Order, $config); } } if ($res['status'] == 1) { $result['status'] = 1; $result['msg'] = '付款成功'; } else { $result = $res; } break; case '3': //现金 $save = array( $PayOrderModel::ORDER_STATE => 'SUCCESS', $PayOrderModel::TRADE_DATE => time(), ); $up = $PayOrderModel->updateOrder(array($PayOrderModel::ID => $pay_order[$PayOrderModel::ID]), $save); if (!$up) { $result['status'] = 0; $result['msg'] = '数据库发成故障,支付流水表更新失败,请重新支付'; } else { $result['status'] = 1; $result['msg'] = '付款成功'; } break; case '6': //会员余额 $res = $this->toVipPay_v1($Order, $password, $vip_login_type, $card_code); if ($res['status'] == 1) { $result['status'] = 1; $result['msg'] = ""; } else { $result = $res; } break; } if ($user_type == 2 && $result['status'] == 1) { $parameter = array( 'type' => 4, 'desc' => '快速收款' ); $this->system_parameter($parameter); } $result['out_trade_no'] = $Order[$PayOrderModel::OUT_TRADE_NO]; $this->ajaxReturn($result); } //钱客云,快速收款,支付,查询 public function paymentQuery($Order, $config, $pay_type) { $moneyGuest = new \MoneyGuestPay\Business\MoneyGuest(); $param['pay_order_info'] = $Order; $param['config'] = $config; $param['pay_type'] = $pay_type; //支付 $res = $moneyGuest->moneyGuestPay($param); if ($res['status'] == 1) { //发起支付成功,查询订单,是否支付 $result = $this->searchAndUpdateOrder_v3($param); $res = $result; } $res['pay_channel'] = 7; return $res; } /** * 用户等待支付 * @param $param * @return mixed */ public function searchAndUpdateOrder_v3($param) { $Order = $param['pay_order_info']; $canReturn = false; $PayOrderModel = D('RetailPayOrder'); while (!$canReturn) { $moneyGuest = new \MoneyGuestPay\Business\MoneyGuest(); $data = $moneyGuest->moneyGuestQueryOrder([ 'pay_order' => $Order, 'config' => $param['config'] ]);//查询订单状态 $res = $data['payInfo']; if ($res['code'] == 200) { if ($res['obj']['status'] == 1) { //支付中 $time = get_runtime(); if ($time >= 60) { //超时,撤销订单 $result['status'] = 0; $result['msg'] = '用户取消支付'; $canReturn = true; } } else if ($res['obj']['status'] == 2) { //支付成功 $save[$PayOrderModel::TRADE_NO] = $res['obj']['orderNumber']; $save[$PayOrderModel::ORDER_STATE] = 'SUCCESS'; $save[$PayOrderModel::TRADE_DATE] = time(); $save[$PayOrderModel::EXTEND_CONTENT] = json_encode($res); $up = $PayOrderModel->updateOrder(array($PayOrderModel::ID => $Order[$PayOrderModel::ID]), $save); //支付成功,走分润 A('Pay/Base')->doAddRate($res['obj']['orderNumber'], $Order, 7);//分润(云闪付) if ($up) { $result['status'] = 1; $result['msg'] = '支付成功'; } else { $result['status'] = 0; $result['msg'] = '支付成功但订单更新失败2,请联系管理员'; } $canReturn = true; } else { $result['status'] = 0; $result['msg'] = '用户取消支付2'; $canReturn = true; } } else { $result['status'] = 0; $result['res'] = $res; $result['msg'] = '用户取消支付3'; $canReturn = true; } } return $result; } /** * 会员卡支付 2019-9-11 快捷支付 * @param $Order pay_order * @param $password 会员支付密码 * @param $vipLoginType 会员登录方式 1动态码 2手机号或实体卡号 * @param $cardCode 会员动态码或手机号实体卡号 * @return mixed */ public function toVipPay_v1($Order, $password, $vipLoginType, $cardCode) { $VipModel = D('RetailVip'); $PayOrderModel = D('RetailPayOrder'); $vipMap = array( $VipModel::ID => $Order[$PayOrderModel::VID] ); $vipInfo = $VipModel->getFind($vipMap); if ($vipLoginType == 1) { $DynamicModel = D('RetailVipDynamicCode'); $map = array( $DynamicModel::CODE => $cardCode, $DynamicModel::STATUS => 1, $DynamicModel::STATE => 0, $DynamicModel::MERCHANT_ID => $Order[$PayOrderModel::MERCHANT_ID], $DynamicModel::USE_STORE_ID => $Order[$PayOrderModel::STORE_ID], ); if (!empty($Order[$PayOrderModel::CASHIER_ID])) { $map[$DynamicModel::USE_CASHIER_ID] = $Order[$PayOrderModel::CASHIER_ID]; } $old = $DynamicModel->getFind($map); if (empty($old) || $old[$DynamicModel::FAILURE_TIME] <= time()) { $result['status'] = 0; $result['msg'] = '请会员刷新动态码'; return $result; } else { $DynamicModel->updateOrder($map, array($DynamicModel::STATUS => 2)); } } else { $StoreModel = D('RetailStore'); $store = D('RetailStore')->getOrderFind(array($StoreModel::ID => $Order[$PayOrderModel::STORE_ID]), $StoreModel::DENSITY_FREE_STATE); if ($vipInfo[$VipModel::DENSITY_FREE] != 1 && !$store[$StoreModel::DENSITY_FREE_STATE]) { //非免密 if (empty($password)) { $result['status'] = 3; $result['msg'] = '请输入会员支付密码'; return $result; } } else { $password = null; } } $result = $this->pay(6, 2, $password, $Order[$PayOrderModel::ID]); return $result; } /** * @param $bill_id * @param $scene_type 场景 1收银机 2商户后台 3门店后台 4小程序 5公众号 6小助手快捷收银 * @param $type 类型 1充值 2消费 3编辑增加 4编辑减少 5退款增加 6红包充值 7大转盘充值 8礼品卡充值 * @param null $password * @param null $pay_order_id * @return mixed */ public function pay($scene_type, $type, $password = null, $pay_order_id = null) { $PayOrderModel = D('RetailPayOrder'); if (!empty($pay_order_id)) { $payMap[$PayOrderModel::ID] = $pay_order_id; } $payOrder = $PayOrderModel->getFind($payMap); if (empty($payOrder)) { $res['status'] = 0; $res['msg'] = '订单不存在'; return $res; } if ($payOrder[$PayOrderModel::PAY_TYPE] = !6 || empty($payOrder[$PayOrderModel::VID])) { $res['status'] = 0; $res['msg'] = '您的请求有误'; return $res; } $VipModel = D('RetailVip'); $vipMap = array( $VipModel::ID => $payOrder[$PayOrderModel::VID], ); $vipInfo = $VipModel->getFind($vipMap); if (empty($vipInfo)) { $res['status'] = 0; $res['msg'] = '数据库发生错误'; return $res; } if (!empty($password) && !checkPassword($vipInfo[$VipModel::PASSWORD], $password, $vipInfo[$VipModel::ADD_TIME])) { $res['status'] = 0; $res['msg'] = '支付密码错误'; return $res; } $payMoney = $payOrder[$PayOrderModel::TRADE_AMOUNT]; if (round($vipInfo[$VipModel::BALANCE] - $payMoney, 2) < 0) { $res['status'] = 0; $res['msg'] = '会员卡余额不足,无法支付'; return $res; } $pay = $VipModel->toSetDec($vipMap, $VipModel::BALANCE, $payMoney); if ($pay) { $RechargeOrderModel = D('RetailRechargeOrder'); $remark = ''; switch ($scene_type) { case 6: $remark = '小助手快捷收银' . $payMoney . '元'; break; } $item = array( $RechargeOrderModel::STORE_ID => $payOrder[$PayOrderModel::STORE_ID], $RechargeOrderModel::MERCHANT_ID => $payOrder[$PayOrderModel::MERCHANT_ID], $RechargeOrderModel::PAY_ORDER_ID => $payOrder[$PayOrderModel::ID], $RechargeOrderModel::MONEY => $payMoney, $RechargeOrderModel::ALL_MONEY => $payMoney, $RechargeOrderModel::STATE => 1, $RechargeOrderModel::SCENE_TYPE => $scene_type, //1收银机 2商户后台 3门店后台 4小程序 5公众号 6小助手 $RechargeOrderModel::TYPE => $type, //1充值 2消费 3编辑增加 4编辑减少 5退款增加 6红包充值 7大转盘充值 8礼品卡充值 $RechargeOrderModel::ADD_TIME => time(), $RechargeOrderModel::VID => $vipInfo[$VipModel::ID], $RechargeOrderModel::REMARK => $remark, ); if (!empty($payOrder[$PayOrderModel::CASHIER_ID])) { $item[$RechargeOrderModel::CASHIER_ID] = $payOrder[$PayOrderModel::CASHIER_ID]; } $add = $RechargeOrderModel->addOrder($item); if ($add) { $res['status'] = 1; $res['msg'] = '支付成功'; $save = array( $PayOrderModel::ORDER_STATE => 'SUCCESS', $PayOrderModel::TRADE_DATE => time() ); $PayOrderModel->updateOrder($payMap, $save); } else { $res['status'] = 0; $res['msg'] = '支付成功,添加记录失败,请联系系统管理员'; } } else { $res['status'] = 0; $res['msg'] = '会员卡支付失败,请刷新动态码重试'; } return $res; } //快捷收银退款2019-9-30 public function QuickRefund_v1() { $data = I("post."); $merchant_id = $data['merchantid']; $store_id = $data['storeid']; $out_trade_no = $data["out_trade_no"]; //订单编号 $user_type = $data["user_type"]; // 1商户 2店长 3收银员 $operator_id = $data['operator_identity_id']; //操作人员id $username = $data["username"]; //店长账号 $refund_code = $data["refund_code"]; //退款密码 if (!$out_trade_no || !$user_type || !$operator_id || !$merchant_id) { $res['status'] = 0; $res['msg'] = "参数缺失"; $this->ajaxReturn($res); } if ($user_type == 3 && (empty($refund_code) && empty($username))) { $res['status'] = 0; $res['msg'] = "请输入退款码"; $this->ajaxReturn($res); } if ($user_type == 3) { $verify_type = $user_type == 3 ? 1 : $user_type; $res = A("CashierApi/Refund")->verifyRefund($verify_type, $refund_code, $username); if ($res['status'] != 1) { $this->ajaxReturn($res); } } $PayOrderModel = D("RetailPayOrder"); $wap['trade_no'] = $out_trade_no; $wap['out_trade_no'] = $out_trade_no; $wap['_logic'] = 'or'; $where['_complex'] = $wap; $where['store_id'] = $store_id; $where['order_type'] = 6; $payOrder = $PayOrderModel->getOrderFind($where); if (!$payOrder) { $res['status'] = 0; $res['msg'] = "未找到快捷收银支付成功订单"; $this->ajaxReturn($res); } if ($payOrder[$PayOrderModel::ORDER_STATE] != "SUCCESS") { $res['status'] = 0; $res['msg'] = "该订单未支付成功,无法退款"; $this->ajaxReturn($res); } $where = array( $PayOrderModel::PAY_ORDER_ID => $payOrder[$PayOrderModel::ID], $PayOrderModel::ORDER_STATE => "REFUND" ); $refundOrder = $PayOrderModel->getOrderFind($where); if ($refundOrder) { $res['status'] = 0; $res['msg'] = "该订单已退款"; $this->ajaxReturn($res); } if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $key = "quick_refund_" . $out_trade_no; if ($ApiRedis::$redis->exists($key)) { $res['status'] = 0; $res['msg'] = "正在退款,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($key, 10, $out_trade_no); } $paySet = D('RetailPaySet')->getFindMerchantPaySet($merchant_id); $config = $paySet['config']; $item = array( $PayOrderModel::PAY_ORDER_ID => $payOrder[$PayOrderModel::ID], //'退款原订单id', $PayOrderModel::ORDER_TYPE => 6, //'6快捷收银', $PayOrderModel::SCENE_TYPE => 2, //'1付款 2退款', $PayOrderModel::PAY_TYPE => $payOrder[$PayOrderModel::PAY_TYPE], //'1微信 2支付宝 3现金 4小程序微信 5其他支付方式 6会员余额', $PayOrderModel::TRADE_AMOUNT => $payOrder[$PayOrderModel::TRADE_AMOUNT], //'订单金额', $PayOrderModel::STORE_ID => $payOrder[$PayOrderModel::STORE_ID], //'门店id', $PayOrderModel::MERCHANT_ID => $payOrder[$PayOrderModel::MERCHANT_ID], //'商户id', $PayOrderModel::VID => $payOrder[$PayOrderModel::VID], //'会员id', $PayOrderModel::TRADE_NO => $payOrder[$PayOrderModel::TRADE_NO], //'订单微信支付宝流水号', $PayOrderModel::ADD_TIME => time(), //'订单创建时间', $PayOrderModel::M_PAY_TYPE => $payOrder[$PayOrderModel::M_PAY_TYPE], //'订单支付类型 1普通商户模式 2服务商模式 3新大陆模式', ); if ($user_type == 2) { //店长 $item[$PayOrderModel::SHOPOWNER_ID] = $operator_id; } else if ($user_type == 3) { $item[$PayOrderModel::CASHIER_ID] = $operator_id; //'收银员id', } $new_pay_order = $PayOrderModel->addPayOrder($item); if ($new_pay_order) { switch ($item[$PayOrderModel::PAY_TYPE]) { case '1': case '2': //微信 //支付宝 $new_pay_order['before_amount'] = $payOrder[$PayOrderModel::TRADE_AMOUNT]; $new_pay_order['before_trade_no'] = $payOrder[$PayOrderModel::OUT_TRADE_NO]; if ($new_pay_order[$PayOrderModel::M_PAY_TYPE] == 3) { //新大陆 $res = A('Pay/PayContinent')->toOrderRefund_v3($new_pay_order); } else if ($new_pay_order[$PayOrderModel::M_PAY_TYPE] == 4) { //云闪付 $payObj = new CloudPayController(); $res = $payObj->cloudRefund($new_pay_order, $config, $new_pay_order[$PayOrderModel::PAY_TYPE]); } else if ($new_pay_order[$PayOrderModel::M_PAY_TYPE] == 7) { //钱客云 $moneyGuest = new \MoneyGuestPay\Business\MoneyGuest(); $res = $moneyGuest->moneyGuestRefund($new_pay_order, $config); if ($res['status'] == 1) { //退款成功之后,走退款分润 A('Pay/Base')->doRefundRate($new_pay_order['trade_no'], $new_pay_order['trade_amount'], 6);//钱客云分润 } } else if ($new_pay_order[$PayOrderModel::PAY_TYPE] == 1) { //微信 if (!empty($payOrder['pay_coupon_id_str']) && $payOrder['pay_coupon_fee'] > 0) { $new_pay_order['trade_amount'] = bcadd($new_pay_order['trade_amount'], $payOrder['pay_coupon_fee'], 2); $new_pay_order['before_amount'] = $new_pay_order['trade_amount']; } $res = A('Pay/NewWxPay')->toWxRefund_v2($new_pay_order, $config); } else { //支付宝 $res = A('Pay/NewAliPay')->toAliRefund_v2($new_pay_order, $config); } break; case '3': //现金 $res = array( 'status' => 1 ); break; case '6': //会员余额 $res = A('PayApi/VipPay')->refundForVip_v1($item, 6, 5); break; default: $res = array( 'status' => 0, 'msg' => '数据库发生错误' ); } if ($res['status'] == 1) { $save = array( $PayOrderModel::ORDER_STATE => 'REFUND', $PayOrderModel::EXTEND_CONTENT => $res['data'] ? json_encode($res['data']) : '', $PayOrderModel::TRADE_DATE => time() ); if ($new_pay_order[$PayOrderModel::PAY_TYPE] == 1 && $res['response']['coupon_refund_count'] > 0) { //代金券退款 $PaymentRefundClass = new PaymentRefund(); $couponResult = $PaymentRefundClass->paymentRefund(json_encode([ 'refund_info' => $res['response'], 'merchant_id' => $payOrder['merchant_id'], 'type' => 2, 'old_pay_order_id' => $item['pay_order_id'] ])); if ($couponResult['status'] == 1) { $save['pay_coupon_id_str'] = $couponResult['data']['pay_coupon_id_str']; $save['pay_coupon_fee'] = $payOrder['pay_coupon_fee']; $save['refund_coupon_fee'] = $couponResult['data']['pay_coupon_fee']; $PayOrderModel->toSetInc([ 'id' => $item['pay_order_id'] ], 'refund_coupon_fee', $couponResult['data']['pay_coupon_fee']); } } $PayOrderModel->updateOrder(array($PayOrderModel::ID => $new_pay_order[$PayOrderModel::ID]), $save); //更新新的pay_order数据 $PayOrderModel->toSetInc(array($PayOrderModel::ID => $item[$PayOrderModel::PAY_ORDER_ID]), $PayOrderModel::REFUND_MONEY, $payOrder[$PayOrderModel::TRADE_AMOUNT]); //增加原pay_order的退款金额 if ($user_type == 2) { $parameter = array( 'type' => 4, 'desc' => '快速收款-退款' ); $this->system_parameter($parameter); } $result['status'] = 1; $result['msg'] = '退款成功'; } else { $result['res'] = $res; $result['status'] = 0; $result['msg'] = $res['msg']; } } else { $result['status'] = 0; $result['msg'] = '退款订单创建失败'; } if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($key); } $this->ajaxReturn($result); } //快捷收银列表 public function QuickList() { $PayOrderModel = D("RetailPayOrder"); $data = I("post."); $user_type = $data["user_type"]; //1商户 2门店 3收银员 $merchant_id = $data['merchant_id']; $store_id = $data['store_id']; $cashier_id = $data['cashier_id']; //收银员id $out_trade_no = $data['out_trade_no']; //内部流水号 $page = $data['page'] ? $data['page'] : 1; $limit = $data['limit'] ? $data['limit'] : 1; $start_time = $data['start_time']; $end_time = $data['end_time']; if (!$store_id || !$merchant_id || !$user_type) { $res = array( "status" => 0, "msg" => "参数缺失" ); $this->ajaxReturn($res); } if ($user_type == 3) { $cashierInfo = D('RetailCashier')->getFind(array('id' => $cashier_id), "cashier_show_other_sell"); if ($cashierInfo['cashier_show_other_sell'] == 2) { $where[$PayOrderModel::CASHIER_ID] = $cashier_id; } } if (!empty($start_time) && !empty($end_time)) { $start_time = strtotime($start_time . "00:00:00"); $end_time = strtotime($end_time . "23:59:59"); $where[$PayOrderModel::ADD_TIME] = array('between', array($start_time, $end_time)); } else if (!empty($start_time)) { $start_time = strtotime($start_time . "00:00:00"); $where[$PayOrderModel::ADD_TIME] = array('gt', $start_time); } else if (!empty($end_time)) { $end_time = strtotime($end_time . "23:59:59"); $where[$PayOrderModel::ADD_TIME] = array('lt', $end_time); } switch ($user_type) { case 1: $where[$PayOrderModel::MERCHANT_ID] = $merchant_id; break; case 2: case 3: $where[$PayOrderModel::MERCHANT_ID] = $merchant_id; $where[$PayOrderModel::STORE_ID] = $store_id; break; } if (!empty($out_trade_no)) { $where[$PayOrderModel::OUT_TRADE_NO] = array('like', '%' . $out_trade_no . '%'); } $where[$PayOrderModel::ORDER_TYPE] = 6; $where[$PayOrderModel::ORDER_STATE] = array('in', "SUCCESS,REFUND"); $order = "id desc"; $page = $page . ',' . $limit; $list = $PayOrderModel->getSelect($where, "pay_type,order_state,trade_date,shopowner_id,cashier_id,out_trade_no,trade_amount", $order, $page); if ($list) { foreach ($list as $key => &$val) { $val['index'] = $key + 1; switch ($val['pay_type']) { case 1: $val['pay_name'] = "微信"; break; case 2: $val['pay_name'] = "支付宝"; break; case 3: $val['pay_name'] = "现金"; break; case 6: $val['pay_name'] = "会员"; break; } switch ($val['order_state']) { case "SUCCESS": $val["order_name"] = "支付订单"; if ($val['refund_money'] == 0) { $val['type'] = 1; //可退款 } else if ($val['refund_money'] == $val['trade_amount']) { $val['type'] = 2; //已退款 } break; case "REFUND": $val['type'] = 3; //退款订单 $val["order_name"] = "退款订单"; break; } $val['trade_date'] = date("Y-m-d H:i:s", $val['trade_date']); //支付时间 if (!empty($val['shopowner_id'])) { $val['operator_name'] = M("retail_manager")->where(array('id' => $val['shopowner_id']))->getField("name"); } else if (!empty($val['cashier_id'])) { $cashierInfo = D("RetailCashier")->getFind(array('id' => $val['cashier_id']), "name"); $val['operator_name'] = $cashierInfo['name']; } } } $res['status'] = 1; $res["data"] = $list ? $list : array(); $this->ajaxReturn($res); } //生成二维码 public function GetCode() { $data = I("post."); $store_id = $data["storeid"]; $merchant_id = $data["merchantid"]; $user_type = $data["user_type"]; // 1商户 2店长 3收银员 $operator_id = $data['operator_id']; //操作人员id $pay_type = $data["pay_type"]; //支付类型 1微信 2支付宝 3现金 5其他 6会员余额 $pay_money = $data['pay_money']; //支付金额 if (!$merchant_id || !$store_id || !$operator_id || !$pay_type) { $res['status'] = 0; $res['msg'] = "参数缺失,请重新登录"; $this->ajaxReturn($res); } if (round($pay_money, 2) > 100000) { $res = array( "status" => 0, "msg" => "金额不能超过10万元" ); $this->ajaxReturn($res); } if (!in_array($user_type, array('2', '3'))) { $res['status'] = 0; $res['msg'] = "登录超时,请重新登录"; $this->ajaxReturn($res); } if (!in_array($pay_type, array('1', '2'))) { $res['status'] = 0; $res['msg'] = "支付类型有误"; $this->ajaxReturn($res); } //验证支付金额 if (!verifyPrice($pay_money)) { $result['status'] = 0; $result['msg'] = '支付金额有误,请输入大于0的支付金额'; $this->ajaxReturn($result); } $Order = array(); $PayOrderModel = D("RetailPayOrder"); $PaySetModel = D('RetailPaySet'); $paySet = $PaySetModel->getFindMerchantConfig($merchant_id, $pay_type); if ($paySet['status'] != 1) { $result['status'] = 0; $result['msg'] = $paySet['msg']; $this->ajaxReturn($result); } $config = $paySet['config']; $Order[$PayOrderModel::M_PAY_TYPE] = $paySet['m_pay_type']; $Order[$PayOrderModel::PAY_TYPE] = $pay_type; $Order[$PayOrderModel::STORE_ID] = $store_id; $Order[$PayOrderModel::MERCHANT_ID] = $merchant_id; if ($user_type == 2) { //店长 $Order[$PayOrderModel::SHOPOWNER_ID] = $operator_id; } else if ($user_type == 3) { //收银员 $Order[$PayOrderModel::CASHIER_ID] = $operator_id; } $Order[$PayOrderModel::TRADE_AMOUNT] = round($pay_money, 2); $Order[$PayOrderModel::ORDER_TYPE] = 6; $Order[$PayOrderModel::ORDER_STATE] = 'WAIT_BUYER_PAY'; $Order[$PayOrderModel::ADD_TIME] = time(); $pay_order = $PayOrderModel->addPayOrder($Order); if (!$pay_order) { $result['status'] = 0; $result['msg'] = '创建订单失败,请重试'; $this->ajaxReturn($result); } $Order[$PayOrderModel::ID] = $pay_order[$PayOrderModel::ID]; $Order[$PayOrderModel::OUT_TRADE_NO] = $pay_order[$PayOrderModel::OUT_TRADE_NO]; $storeInfo = D("RetailStore")->getFind(array('id' => $store_id), "storetag"); $store_name = $storeInfo['storetag']; if ($pay_order[$PayOrderModel::M_PAY_TYPE] == 3) { //新大陆 $res = A('Pay/PayContinent')->sweepCodePay($pay_order); if ($res['status'] == 0) { $this->ajaxReturn($res); } $res['status'] = 1; } else if ($pay_order[$PayOrderModel::M_PAY_TYPE] == 4) { //云闪付 $payObj = new CloudPayController(); $res = $payObj->cloudPaybarCodeAll($Order, $config, $pay_type, $store_name); if ($res['status'] == 0) { $this->ajaxReturn($res); } $res['status'] = 1; } else if ($pay_type == 1) { // 微信 $result = A("Api/PaymentCodes")->createWxPayOrder($Order, $config, $store_name, 2); if ($result['status'] == 1) { $res['qr_code'] = $result['data']['code_url']; $res['status'] = 1; } else { $res = $result; } } else if ($pay_type == 2) { // 支付宝 $result = A("Api/PaymentCodes")->createAliPayOrder($Order, $config, $store_name, 2); if ($result['status'] == 1) { $res['qr_code'] = $result['qr_code']; $res['status'] = 1; } else { $res = $result; } } else { $res = array( 'status' => 0, 'msg' => "支付方式有误" ); } $res['out_trade_no'] = $pay_order[$PayOrderModel::OUT_TRADE_NO]; $this->ajaxReturn($res); } /** * 快捷收单查询扫码支付订单状态 * @param string $out_trade_no pay_order订单号 * @return array $res */ public function searchOrderPayState() { // 接受数据 $out_trade_no = I('post.out_trade_no'); // 判断订单号 if (!$out_trade_no) { $res = array( 'status' => 0, 'msg' => '请求错误' ); $this->ajaxReturn($res); } // 查询订单 $RPOModel = D('RetailPayOrder'); $pay_order = $RPOModel->getFind(array($RPOModel::OUT_TRADE_NO => strval($out_trade_no))); // 判断订单 if (empty($pay_order)) { $res = array( 'status' => 0, 'msg' => '订单异常' ); $this->ajaxReturn($res); } // 判断支付 if ($pay_order[$RPOModel::ORDER_STATE] == 'REVOKED') { $res = array( 'status' => 0, 'msg' => '订单已撤销成功' ); } else if ($pay_order[$RPOModel::ORDER_STATE] == 'SUCCESS') { $res = array( 'status' => 1, 'msg' => '支付成功' ); } else { $res = array( 'status' => 2, 'msg' => '等待支付' ); } $this->ajaxReturn($res); } /* * *************************************商户模块*********************************** */ /** * 门店之间调拨列表 */ public function StoreAllocatList() { $data = I("post."); $merchant_id = $data['merchantid']; $page = $data['page']; $limit = $data['limit']; $order_number = $data['order_number']; $add_time = $data['add_time']; $store_id = $data['store_id']; $examine_status = $data['examine_status']; if (!empty($order_number)) { $where['order_number'] = $order_number; } if (!empty($add_time)) { $start_time = strtotime($add_time[0] . "00:00:00"); $end_time = strtotime($add_time[1] . "23:59:59"); $where['add_time'] = array('between', array($start_time, $end_time)); } if (!empty($store_id)) { $where['store_id'] = $store_id; } if ($examine_status != '') { $where['examine_status'] = $examine_status; } $where['merchant_id'] = $merchant_id; $where['type'] = 3; $where['status'] = 1; $orderList = D('SStockOutOrder')->getSelect($where, $page, $limit); if ($orderList) { foreach ($orderList as $key => &$val) { $val['index'] = $key + 1; $val['store_name'] = D('Store')->getStoreName(array('id' => $val['store_id'])); $val['transfer_name'] = D('Store')->getStoreName(array('id' => $val['transfer_to_store_id'])); $val['money_total'] = round($val['money_total'], 2); $val['add_time'] = date('Y-m-d H:i:s', $val['add_time']); $val['warehouse_time'] = date('Y-m-d H:i:s', $val['warehouse_time']); switch ($val['examine_status']) { case 0: $val['examine_name'] = '未审核'; break; case 1: if (!$val['warehousing_status']) { $val['examine_name'] = '未入库'; } else { $val['examine_name'] = '已入库'; $val['real_money_total'] = round($val['real_money_total'], 2); } break; case 2: $val['examine_name'] = '审核失败'; break; } } } $res['status'] = 1; $res['msg'] = ''; $res['data'] = $orderList; $this->ajaxReturn($res); } /** *审核通过 */ public function Examine() { $id = I("post.id"); $type = I("post.type"); $data = array(); $data['examine_status'] = $type; $success = D('SStockOutOrder')->updateData(array('id' => $id), $data); if ($success['status'] == 0) { $res['status'] = 0; $res['msg'] = '操作失败'; $this->ajaxReturn($res); } $success = D('SWarehousingRecord')->updateData(array('stock_out_id' => $id, 'type' => 5), $data); if ($success['status'] == 0) { $res['status'] = 0; $res['msg'] = '操作失败'; $this->ajaxReturn($res); } $res['status'] = 1; $res['msg'] = '操作成功'; $this->ajaxReturn($res); } /** * 门店列表 */ public function storeInfo() { $user_type = I("post.user_type"); //1商户 2门店 3收银员 $merchant_id = I("post.merchantid"); if ($user_type == 2) { $store_id = I("post.storeid"); } else { $store_id = ''; } $res = A('Api/Inventory')->storeList($merchant_id, $store_id); $this->ajaxReturn($res); } //商户出库商品列表 public function AllocateGoodsList() { $data = I('post.'); $data['operator_type'] = 3; $data['user_type'] = 3; $data['merchant_id'] = $data['merchantid']; $data['exists_id_arr'] = isset($data['exists_id_arr']) ? $data['exists_id_arr'] : $data['notInIds']; $data['search_info'] = isset($data['search_info']) ? $data['search_info'] : $data['searchText']; $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->warehouseSearchGoods($data); $result['msg'] = $result['message']; $result['data'] = $result['data']['list']; $this->ajaxReturn($result); } /* * 入库商品信息 */ public function warehousingGoodsList() { $id = I("post.id"); $StockOutGoodsModel = new StockOutGoodsModel(); $StockSerialModel = new StockGoodsSerialModel(); $goodsList = $StockOutGoodsModel->getSelect(array('stock_out_id' => $id)); if (!empty($goodsList)) { $where = [ 'merchant_id' => $this->merchant_id, 'num' => ['gt', 0] ]; $fields = 'id,main_serial_number,auxiliary_serial_number_one,auxiliary_serial_number_two'; foreach ($goodsList as $key => &$val) { $val['stock_num'] = round($val['stock_num'], 3); $val['warehouse_num'] = $val['stock_num']; $val['warehouse_price'] = $val['stock_price']; $val['build_date'] = ''; $val['quality_guarantee_period'] = ''; if ($val['serial_number_state'] == 1) { $where['outside_id'] = $val['id']; $val['serial_list'] = $StockSerialModel->getSelect($where, '', '', $fields); } } } $res['status'] = 1; $res['data'] = $goodsList; $this->ajaxReturn($res); } //商户出库扫码查询商品 public function AllocateScanCodeGoods() { $data = I('post.'); $data['operator_type'] = 3; $data['user_type'] = 3; $data['merchant_id'] = $data['merchantid']; $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->warehouseScanCodeGoods($data); $this->ajaxReturn($result); } /** * 商户确认出库操作 * @parame type 出库类型 0其他出库 1调拨出库 2盘亏出库 3门店申请调拨出库 4退货出库 * @param store_id 目标门店 */ public function AllocateConfirm() { A("Terminalapi/Stock")->AllocateConfirm(); } /** * 商户出库单 * @param order_number 订单号 * @param add_time 时间 * @param type 1调拨出库 2盘亏出库 3门店申请调拨出库 */ public function AllocateOrder() { A("Terminalapi/Stock")->AllocateOrder(); } /** * 商户调拨单列表 * @param order_number 订单号 * @param add_time 时间 * @param status 1申请 2已出库 3已入库 */ public function AllocateOrderList() { A("Terminalapi/Stock")->AllocateOrderList(); } public function AllocateApply() { A("Terminalapi/Stock")->AllocateApply(); } //商户出库单详情 public function AllocateInfo() { $data = I('post.'); $data['user_type'] = 3; $OutboundOrderClass = new OutboundOrder(); $result = $OutboundOrderClass->detailList($data); $this->ajaxReturn($result); } /** *商户端调拨单的门店入库单详情 */ public function WarehousingList() { $id = I("post.id"); $SWarehousingGoodsModel = new SWarehousingGoodsModel(); $list = $SWarehousingGoodsModel->getSelect(array('warehouse_record_id' => $id)); if (!empty($list)) { foreach ($list as $key => &$val) { if ($val['attribute_state'] == 2) { $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; } if (!empty($val['build_date'])) { $val['build_date'] = date('Y-m-d', $val['build_date']); } $val['index'] = $key + 1; $val['sku_num'] = round($val['sku_num'], 3); $val['warehouse_num'] = round($val['warehouse_num'], 3); $val['warehouse_price'] = round($val['warehouse_price'], 2); $val['subtotal'] = round($val['subtotal'], 2); } } $res['status'] = 1; $res['data'] = $list; $this->ajaxReturn($res); } /* * 出库详情列表 */ public function WarehousingOutList() { $id = I("post.id"); $AllocationGoodsModel = new \Common\Model\AllocationGoodsModel(); $SaleMGoodsModel = new \Common\Model\SaleMGoodsModel(); $list = $AllocationGoodsModel->getSelect(array('allocation_id' => $id), $page = '', $limit = '', $fields = '', 'id asc'); foreach ($list as $key => &$val) { $where = [ 'goods_id' => $val['goods_id'] ]; if ($val['attribute_state'] == 2) { $where['sku_id'] = $val['sku_id']; } $goods = $SaleMGoodsModel->getFind($where); $val['apply_num'] = round($val['apply_num'], 3); if ($val['serial_number_state'] == 1) { $val['stock_num'] = 0; } else { $val['stock_num'] = $val['apply_num']; } $val['sku_num'] = round($val['sku_num'], 3); $val['goods_num'] = round($goods['goods_num'], 3); $val['cost_price'] = round($goods['cost_price'], 2); $stockInfo = D('StockOutGoods')->getFind($where, "id desc"); if ($stockInfo) { $val['stock_price'] = $stockInfo['stock_price']; } else { $val['stock_price'] = $goods['cost_price']; } $val['stock_price'] = round($val['stock_price'], 2); $val['subtotal'] = round($val['stock_price'] * $val['stock_num'], 2); } $res['status'] = 1; $res['data'] = $list; $this->ajaxReturn($res); } /** *商户采购单列表 */ public function MerPurchaseOrder() { A("Terminalapi/PurchaseOrder")->PurchaseOrder(); } /** *商户采购仓与供货商 */ public function MerWarehouseInfo() { A("Terminalapi/PurchaseOrder")->WarehouseInfo(); } /** *商户采购选择的商品 */ public function MerPurGoods() { A("Terminalapi/PurchaseOrder")->GoodsInfo(); } //采购串号验证 public function MerPurGoodsSerialVerify() { A("Terminalapi/PurchaseOrder")->serialVerify(); } /** *商户采购选择的商品 2020-11-4 */ public function MerPurGoods_v1() { A("Terminalapi/PurchaseOrder")->GoodsInfo_v1(); } /** *商户采购扫码查询的商品 2020-11-4 */ public function MerPurScanCodeGoods() { $data = I('post.'); $data['operator_type'] = 3; $data['user_type'] = 3; $data['merchant_id'] = $data['merchantid']; $PurchaseGoodsClass = new SaleGoods(); $result = $PurchaseGoodsClass->purchaseScanCodeGoods($data); $this->ajaxReturn($result); } /** *商户采购提交操作 */ public function MerPurchaseOperation() { A("Terminalapi/PurchaseOrder")->PurchaseOperation(); } //采购详情串号列表 public function merPurDetailSerialList() { A("Terminalapi/PurchaseOrder")->detailSerialList(); } /** *商户采购详情 */ public function MerPurDetails() { A("Terminalapi/PurchaseOrder")->DetailsList(); } /** *商户采购编辑提交 */ public function MerPurOrderEdit() { A("Terminalapi/PurchaseOrder")->PurchaseOrderEdit(); } /** *商户采购入库 */ public function MerWarehouseOperation() { A("Terminalapi/PurchaseOrder")->WarehousingOperation(); } //采购基础数据 public function addPurchaseOrderBasics() { $data = I('post.'); $data['merchant_id'] = $data['merchantid']; switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: case 3: //门店 $data['user_type'] = 4; $data['store_id'] = $data['storeid']; break; } //采购修改售价权限 $InventorySetClass = new InventorySet(); $info = $InventorySetClass->getInfo($data); $this->ajaxReturn([ 'status' => 1, 'message' => '查询成功', 'data' => [ 'modify_price_state' => $info['modify_price_state'] ] ]); } //商户退货列表 public function MerRetreatOrder() { A("Terminalapi/PurchaseOrder")->RetreatOrder(); } //采购退货详情的串号列表 public function merRetreatDetailSerial() { A("Terminalapi/PurchaseOrder")->retreatDetailSerialList(); } /** *商户退货详情 */ public function MerRetreatDetails() { A("Terminalapi/PurchaseOrder")->RetreatDetails(); } //采购退货可退的串号 public function MerRetreatGoodsSerial() { A("Terminalapi/PurchaseOrder")->serialList(); } /** *商户采购退货选择的商品 */ public function MerRetreatGoods() { A("Terminalapi/PurchaseOrder")->RetreatGoods(); } /** *商户采购退货选择的商品 2020-11-4 */ public function MerRetreatScanCodeGoods() { A("Terminalapi/PurchaseOrder")->returnableScanCodeGoods(); } /** *商户采购退货操作 */ public function MerRetreatAction() { A("Terminalapi/PurchaseOrder")->RetreatAction(); } /** * 商户的门店间调拨列表 */ public function AllocationTube() { A("Terminalapi/AllocationTube")->OrderList(); } /** * 商户的门店间调拨审核操作 */ public function ExamineAction() { A("Terminalapi/AllocationTube")->ExamineAction(); } /** * 商户的门店间调拨的出库详情 */ public function AllocationDetails() { A("Terminalapi/AllocationTube")->AllocationDetails(); } /** * 商户的门店间调拨入库详情 */ public function WarehousingDetails() { A("Terminalapi/AllocationTube")->WarehousingDetails(); } //商户报损列表 public function LossReportList() { A("Terminalapi/LossReport")->LossReportList(); } /** * 商户报损商品查询 */ public function LossGoodsList() { A("Terminalapi/LossReport")->LossGoodsList(); } //报损选择商品的串号列表 public function LossGoodsSerial() { $data = I('post.'); $data['operator_type'] = 3; $data['merchant_id'] = $data['merchantid']; switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: case 3: //门店 $data['user_type'] = 4; $data['store_id'] = $data['storeid']; break; } $SerialClass = new SerialNumberGoods(); $result = $SerialClass->warehouseSerialList($data); $this->ajaxReturn($result); } //商户报损商品查询2020-11-5 public function LossGoodsList_v1() { $data = I('post.'); $data['merchant_id'] = $data['merchantid']; $data['operator_type'] = 3; switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: case 3: //门店 $data['user_type'] = 4; $data['store_id'] = $data['storeid']; break; } $data['exists_id_arr'] = isset($data['exists_id_arr']) ? $data['exists_id_arr'] : $data['notInIds']; $data['search_info'] = isset($data['search_info']) ? $data['search_info'] : $data['searchText']; $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->lossSearchGoods($data); $this->ajaxReturn($result); } //报损扫码查询2020-11-5 public function lossScanCodeGoods() { $data = I('post.'); $data['merchant_id'] = $data['merchantid']; $data['operator_type'] = 3; switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: case 3: //门店 $data['user_type'] = 4; $data['store_id'] = $data['storeid']; break; } $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->lossScanCodeGoods($data); $this->ajaxReturn($result); } /** * 商户报损提交操作 */ public function LossOperation() { A("Terminalapi/LossReport")->LossOperation(); } //商户报损单详情的串号列表 public function lossInfoSerial() { A("Terminalapi/LossReport")->lossInfoSerial(); } //商户报损单详情 public function LossInfo() { A("Terminalapi/LossReport")->LossInfo(); } /* * *************************************************门店模块******************************* */ /** * 门店入库详情可编辑 * @param *[ * id 入库单id * type 4商户调拨 5门店调拨 * } */ public function SEnterInfo() { $id = I("post.id"); $type = I("post.type"); $fields = 'id,main_serial_number,auxiliary_serial_number_one,auxiliary_serial_number_two'; $map = [ 'num' => ['gt', 0] ]; switch ($type) { case 4: //商户调拨 $where = array(); $where['warehouse_record_id'] = $id; $where['type'] = 1; $StockOutGoodsModel = new StockOutGoodsModel(); $StockSerialModel = new StockGoodsSerialModel(); $goodsList = $StockOutGoodsModel->getSelect($where); if ($goodsList) { foreach ($goodsList as $key => &$val) { $val['stock_num'] = round($val['stock_num'], 3); $val['warehouse_num'] = round($val['stock_num'], 3); $val['warehouse_price'] = round($val['stock_price'], 2); if ($val['serial_number_state'] == 1) { $map['outside_id'] = $val['id']; $val['serial_list'] = $StockSerialModel->getSelect($map, '', '', $fields); } } } break; case 5: //门店调拨 $where = array(); $where['warehouse_record_id'] = $id; $where['type'] = 3; $SStockOutGoodsModel = new SStockOutGoodsModel(); $SStockSerialModel = new SStockGoodsSerialModel(); $goodsList = $SStockOutGoodsModel->getSelect($where); if ($goodsList) { foreach ($goodsList as $key => &$val) { $val['stock_num'] = round($val['stock_num'], 3); $val['warehouse_num'] = round($val['stock_num'], 3); $val['warehouse_price'] = round($val['stock_price'], 2); if ($val['serial_number_state'] == 1) { $map['outside_id'] = $val['id']; $val['serial_list'] = $SStockSerialModel->getSelect($map, '', '', $fields); } } } } $res['status'] = 1; $res['data'] = $goodsList; $this->ajaxReturn($res); } /** * 门店确认调拨入库判断商品信息 */ public function goodsVerification() { $data = I("post."); $store_id = $data["storeid"]; $merchant_id = $data['merchantid']; $goodsList = $data["goodsList"]; $id = $data['post.id']; $goodsList = json_decode(htmlspecialchars_decode($goodsList), true); if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $key_name = "Retail_merchant_id_" . $merchant_id . "_store_id_" . $store_id . "_warehousing_id_" . $id; if ($ApiRedis::$redis->exists($key_name)) { $res['status'] = 0; $res['msg'] = "正在入库,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($key_name, 60, $id); } $success = A('Api/Inventory')->goodsVerify($merchant_id, $store_id, $goodsList); if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($key_name); } $this->ajaxReturn($success); } //出库操作 public function stockOperation() { $merchant_id = I("post.merchantid"); $operator_id = I("post.operator_id"); $goodsList = I("post.goodsList"); $goodsList = json_decode(htmlspecialchars_decode($goodsList), true); $id = I("post.id"); $remarks = I("post.remarks"); if (!$id || !$goodsList) { $res['status'] = 0; $res['msg'] = "参数错误"; $this->ajaxReturn($res); } $AllocationOrderModel = new \Common\Model\AllocationOrderModel(); $info = $AllocationOrderModel->getFind(array('id' => $id)); if (!$info) { $res['status'] = 0; $res['msg'] = '未找到该订单'; $this->ajaxReturn($res); } if ($info['status'] == 2) { $res['status'] = 0; $res['msg'] = '已出库,请勿重复操作'; $this->ajaxReturn($res); } $store_id = $info['store_id']; $SaleWarehouseModel = new \Common\Model\SaleWarehouseModel(); $warehouse_id = $SaleWarehouseModel->getFindField(array('merchant_id' => $merchant_id, 'status' => 1), "id"); $type = 3;//门店申请调拨出库 $order_number = $info['order_number']; foreach ($goodsList as $key => &$val) { $val['output_num'] = round($val['stock_num'], 3); if ($val['serial_number_state'] == 1 && $val['output_num'] != count($val['serial_list'])) { $res = ['status' => 0, 'msg' => '串号信息与数量不符']; $this->ajaxReturn($res); } unset($val['stock_num']); } if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $key_name = "Retail_merchant_id_" . $merchant_id . "_store_id_" . $store_id . "_allocation_id_" . $id; if ($ApiRedis::$redis->exists($key_name)) { $res['status'] = 0; $res['msg'] = "正在入库,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($key_name, 60, $id); } $parameter = array( 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'operator_id' => $operator_id, 'warehouse_id' => $warehouse_id, 'type' => $type, 'goodsList' => $goodsList, 'remarks' => $remarks, 'order_number' => $order_number ); $res = A("Api/Inventory")->MerStockOut($parameter); if ($res['status'] == 1) { //出库成功 $saveData = array(); $saveData['stock_order_id'] = $res['stockOrderId']; $saveData['warehouse_order_id'] = $res['warehouseOrderId']; $saveData['goods_species'] = $res['goods_species']; $saveData['money_total'] = $res['money_total']; $saveData['status'] = 2; $saveData['stock_time'] = time(); $saveData['m_operator_id'] = session("jurisdiction_user")['id']; $res = D('AllocationOrder')->updateData(array('id' => $id), $saveData); if ($res['status'] == 1) { $log_data = [ 'source' => 1, 'type' => 4, 'desc' => '调拨单-申请出库', 'request_data' => json_encode($_POST), 'operator_id' => $operator_id, 'mer_id' => $merchant_id ]; action_log_v2($log_data); } } else { $res['status'] = 0; } if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($key_name); } $this->ajaxReturn($res); } /** * 将门店未有的商品信息同步到门店 * @param * [ * goodsIds array 未有的商品id * type 4商户调拨过来 5其他门店调拨过来 * ] */ public function batchSync() { $data = I("post."); $merchant_id = $data['merchantid']; $store_id = $data["storeid"]; $goodsIds = $data["goodsIds"]; $type = $data["type"]; $id = $data['id']; if (!$store_id || !$goodsIds || !$type) { $res['status'] = 0; $res['msg'] = '登录超时,请重新登录'; $this->ajaxReturn($res); } if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $key_name = "Retail_merchant_id_" . $merchant_id . "_store_id_" . $store_id . "_warehousing_id_" . $id; if ($ApiRedis::$redis->exists($key_name)) { $res['status'] = 0; $res['msg'] = "正在入库,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($key_name, 60, $id); } $success = A('Api/Inventory')->batchSync([ 'operate_id' => $data['operator_id'], 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'goodsIds' => $goodsIds, 'type' => $type ]); if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($key_name); } $this->ajaxReturn($success); } /** * 门店入库操作 * [ * id 入库单id * order_number 入库订单号 * goodsList 入库商品 * refuseList 拒收的商品 * warehouse_id 仓库id * textarea 备注 * type 入库类型 0其他入库 1采购入库 2补货入库 3盘盈入库 4商户调拨入库 5其他门店调拨入库 6该门店申请调拨入库 7初始化商品档案入库 8拼团退货入库 9秒杀退货入库 10拆分入库 11收银退货入库 12商城退货入库 * ] */ public function SEnterOperation() { $data = I("post."); $id = $data["id"]; $store_id = $data["storeid"]; $merchant_id = $data['merchantid']; $goodsList = $data["goodsList"]; //入库商品 $refuseList = $data['refuseList']; //拒收商品 $goodsList = json_decode(htmlspecialchars_decode($goodsList), true); if (!empty($refuseList)) { $refuseList = json_decode(htmlspecialchars_decode($refuseList), true); } $warehouse_id = D("SSaleWarehouse")->getFindField(array("merchant_id" => $merchant_id, "store_id" => $store_id, "status" => 1), "id"); $remarks = $data['remarks'] ? $data['remarks'] : ''; if (!$warehouse_id) { $res['status'] = 0; $res['msg'] = "请先创建供给仓"; $this->ajaxReturn($res); } if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $key_name = "Retail_merchant_id_" . $merchant_id . "_store_id_" . $store_id . "_warehousing_id_" . $id; if ($ApiRedis::$redis->exists($key_name)) { $res['status'] = 0; $res['msg'] = "正在入库,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($key_name, 120, $id); } $res = A("Api/Inventory")->goodsVerify($merchant_id, $store_id, $goodsList); //参数验证 if ($res['status'] == 1) { $parameter = array( 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'id' => $id, //入库单id 'type' => $data["type"], 'order_number' => $data["order_number"], 'goodsList' => $goodsList, //入库商品 'refuseList' => $refuseList, //拒收商品 'warehouse_id' => $warehouse_id, //仓库id 'remarks' => $remarks, //备注 'operator_id' => $data['operator_id'], //操作人id ); $success = A("Api/Inventory")->allocationWarehousing($parameter); //入库操作 if ($success) { $res['status'] = 1; $res['msg'] = '操作成功'; } else { $res['status'] = 0; $res['msg'] = '操作失败'; } } if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($key_name); } $this->ajaxReturn($res); } /* * 门店申请调拨入库操作 */ public function warehousingOperation() { $merchant_id = I("post.merchantid"); $store_id = I("post.storeid"); $id = I("post.id"); $goodsList = json_decode(htmlspecialchars_decode(I("post.goodsList")), true); $refuseList = json_decode(htmlspecialchars_decode(I("post.refuse_list")), true); $remarks = I("post.remarks"); if (!$id || !$goodsList) { $res['status'] = 0; $res['msg'] = '参数错误'; $this->ajaxReturn($res); } $info = D('AllocationOrder')->getFind(array('id' => $id)); if (!$info) { $res['status'] = 0; $res['msg'] = '未找到该订单'; $this->ajaxReturn($res); } if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $key_name = "Retail_merchant_id_" . $merchant_id . "_store_id_" . $store_id . "_allocation_id_" . $id; if ($ApiRedis::$redis->exists($key_name)) { $res['status'] = 0; $res['msg'] = "正在入库,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($key_name, 60, $id); } $warehouse_id = D('SSaleWarehouse')->getFindField(array('store_id' => $store_id, 'merchant_id' => $merchant_id, 'status' => 1), "id"); $parameter = array( 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'id' => $info['warehouse_order_id'], 'type' => 6, //申请调拨入库, 'order_number' => $info['order_number'], 'goodsList' => $goodsList, 'warehouse_id' => $warehouse_id, 'remarks' => $remarks, 'operator_id' => I("post.operator_id"), 'refuseList' => $refuseList, ); $res = A('Api/Inventory')->allocationWarehousing($parameter); if ($res['status'] == 1) { $saveData = array( 'accept_goods_species' => $res['accept_goods_species'], 'accept_money_total' => $res['accept_money_total'], 'accept_total_cost_money' => $res['accept_total_cost_money'], 'status' => 3, 'storage_time' => time(), ); if ($res['refuse_status'] == 2) { //有拒收 $saveData['refuse_status'] = 2; $saveData['refuse_total_cost_money'] = $res['refuse_total_cost_money']; $saveData['refuse_total_stock_money'] = $res['refuse_total_stock_money']; $saveData['refuse_goods_species'] = $res['refuse_goods_species']; } $res = D('AllocationOrder')->updateData(array('id' => $id), $saveData); if ($res['status'] == 1) { $log_data = [ 'source' => 1, 'type' => 4, 'desc' => '调拨单-入库', 'request_data' => json_encode($_POST), 'operator_id' => I("post.operator_id"), 'mer_id' => $merchant_id ]; action_log_v2($log_data); } } else { $res['status'] = 0; $res['msg'] = '操作失败'; } if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($key_name); } $this->ajaxReturn($res); } /** * 门店入库单ID获取单个入库详情信息 * @param * [ * id 门店入库单id * ] */ public function getStoreWarehousingInfo() { $id = I('post.id'); $warehousing = new WarehousingRecord(); $result = $warehousing->getStoreWarehousingOrderInfo($id); $this->ajaxReturn($result); } /** * 门店入库单拒绝入库操作 */ public function storeRefuseWarehousing() { A('Terminalapi/RefuseWarehousing')->storeRefuseWarehousing(); } public function refuse() { A('Terminalapi/RefuseWarehousing')->refuse(); } //拒收详情的串号列表 public function refuseSerial() { $data = I('post.'); $SerialClass = new SerialNumberGoods(); $result = $SerialClass->refuseSerialList($data); $this->ajaxReturn($result); } /** * 门店拒收详情 * @param id 出库单id * @param $type */ public function storeRefuseInfo() { $data = I("post."); $id = $data['stock_out_id']; $type = $data['type']; switch ($type) { case 4: case 6: $refuse_type = 1; //拒收商户调拨商品 break; case 5: $refuse_type = 2; //拒收门店调拨商品 break; default: $user_type = $data['user_type']; switch ($user_type) { case 1: //商户调拨 $refuse_type = 1; //默认拒收商户调拨商品 break; case 2: //门店调拨 $refuse_type = 2; //默认拒收门店调拨商品 break; } break; } $RefuseWarehousing = new RefuseWarehousing(); $list = $RefuseWarehousing->refuseOrderList($id, $refuse_type); $res = ['status' => 1, 'message' => '查询成功', 'data' => ['list' => $list]]; $this->ajaxReturn($res); } /** * 门店入库单列表 * [ * merchant_id 商户id * store_id 门店id * order_number 入库订单号 * supplier_id 供货商id * type 0其他入库 1采购入库 2补货入库 3盘盈入库 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库 * status 0入库出错 1入库成功 * start_time 入库开始时间 移动端 * end_time 入库结束时间 移动端 * operator_type 1后台 2收银 3助手 * ] */ public function SEnterOrderList() { $content = I("post."); $content['merchant_id'] = $content['merchantid']; $content['store_id'] = $content['storeid']; $content['operator_type'] = 3; $warehousingRecord = new WarehousingRecord(); $result = $warehousingRecord->storeWarehousingOrderList($content); //获取入库单列表 $res['status'] = 1; $res['data'] = $result['data']['list']; $res['msg'] = $result['message']; $this->ajaxReturn($res); } /** * 门店的调拨详情 * @parameter * [ * id 门店的入库单id * type 0其他入库 1采购入库 2补货入库 3盘盈入库 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库 * ] */ public function SAllocateDetails() { $data = I("post."); $data['show_type'] = 2; $warehousingRecord = new WarehousingRecord(); $result = $warehousingRecord->getStoreAllocationGoodsList($data); //获取调拨商品列表 $this->ajaxReturn($result); } //入库详情串号列表 public function storeDetailsSerial() { $data = I('post.'); $data['user_type'] = 4; $data['serial_type'] = 2; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->recordSerialList($data); $this->ajaxReturn($result); } /** * 门店入库详情 */ public function SEnterDetails() { $id = I("post.id"); //入库单id $warehousingRecord = new WarehousingRecord(); $result = $warehousingRecord->getStoreWarehousingGoodsList(array('id' => $id)); //获取入库商品列表 $this->ajaxReturn($result); } /** * 门店重新调拨获取出库单信息 */ public function SStockInfo() { A('Terminalapi/SStock')->addStockOut(); } /* * 门店出库时仓库商品状态明细 */ public function SStockGoods() { A('Terminalapi/SStock')->StockGoods(); } //门店出库扫码查询 public function SStockScanCodeGoods_v1() { $data = I('post.'); $data['operator_type'] = 3; $data['user_type'] = 4; $data['merchant_id'] = $data['merchantid']; $data['store_id'] = $data['storeid']; $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->warehouseScanCodeGoods($data); $this->ajaxReturn($result); } //门店出库提交页面数据初始化 public function addStockOutInitial() { $data = I('post.'); $StockRecordClass = new StockRecord(); $result = $StockRecordClass->addStockOutInitial($data); $this->ajaxReturn($result); } /** * 门店出库操作 */ public function SStockOperation() { A('Terminalapi/SStock')->StockOperation(); } /** * 门店出库单列表 */ public function SStockOrderList() { A('Terminalapi/SStock')->StockOrderList(); } /** * 门店出库详情列表 */ public function SStockDetails() { A('Terminalapi/SStock')->StockDetails(); } //商户门店出库单的详情的串号列表 public function stockGoodsInfoSerial() { $data = I('post.'); $data['serial_type'] = 3; switch ($data['user_type']) { case 1: //商户 $data['user_type'] = 3; break; case 2: case 3: //门店 $data['user_type'] = 4; break; } $SerialClass = new SerialNumberGoods(); $result = $SerialClass->recordSerialList($data); $this->ajaxReturn($result); } /** * 门店出库单的入库详情列表 */ public function SStockEnterDetails() { A('Terminalapi/SStock')->StockEnterDetails(); } /** * 门店采购单列表 */ public function StorePurchaseOrder() { A('Terminalapi/StorePurchaseOrder')->PurchaseOrder(); } /** * 采购仓与供货商信息 */ public function StoreWarehouseInfo() { A('Terminalapi/StorePurchaseOrder')->WarehouseInfo(); } /** * 门店采购选择商品列表 */ public function StorePurGoods() { A('Terminalapi/StorePurchaseOrder')->GoodsInfo(); } //采购串号验证 public function StorePurGoodsSerialVerify() { A('Terminalapi/StorePurchaseOrder')->serialVerify(); } /** * 门店采购选择商品列表2020-11-5 */ public function StorePurGoods_v1() { A('Terminalapi/StorePurchaseOrder')->goodsList(); } //门店采购选择商品列表2020-1-5 public function StorePurScanCodeGoods() { $data = I('post.'); $data['operator_type'] = 3; $data['user_type'] = 4; $data['merchant_id'] = $data['merchantid']; $data['store_id'] = $data['storeid']; $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->purchaseScanCodeGoods($data); $this->ajaxReturn($result); } /** * 门店采购提交操作 */ public function StorePurchaseOperation() { A('Terminalapi/StorePurchaseOrder')->PurchaseOperation(); } //门店采购详情串号列表 public function storePurDetailSerialList() { A('Terminalapi/StorePurchaseOrder')->detailSerialList(); } /** * 门店采购单详情 */ public function StorePurDetails() { A('Terminalapi/StorePurchaseOrder')->PurchaseDetails(); } /** * 门店编辑采购单提交 */ public function StorePurEdit() { A('Terminalapi/StorePurchaseOrder')->PurchaseOrderEdit(); } /** * 门店采购单入库到供给仓操作 */ public function StoreWarehouseOperation() { A('Terminalapi/StorePurchaseOrder')->WarehousingOperation(); } /** *门店退货列表 */ public function StoreRetreatOrder() { A('Terminalapi/StorePurchaseOrder')->RetreatOrder(); } //采购退货详情的串号列表 public function storeRetreatDetailSerial() { A('Terminalapi/StorePurchaseOrder')->retreatDetailSerialList(); } //门店采购退货详情 public function StoreRetreatDetails() { A('Terminalapi/StorePurchaseOrder')->RetreatDetails(); } //门店采购退货串号列表 public function StoreRetreatGoodsSerial() { A('Terminalapi/StorePurchaseOrder')->serialList(); } /** * 门店采购退货选择的商品 * */ public function StoreRetreatGoods() { A('Terminalapi/StorePurchaseOrder')->RetreatGoods(); } //采购退货扫码查询商品2020-11-5 public function StoreRetreatScanCodeGoods() { $data = I('post.'); $data['operator_type'] = 3; $data['user_type'] = 4; $data['merchant_id'] = $data['merchantid']; $data['store_id'] = $data['storeid']; $PurchaseGoodsClass = new PurchaseGoodsInfo(); $result = $PurchaseGoodsClass->returnablePurchaseScanCodeGoods($data); $this->ajaxReturn($result); } /** * 门店采购退货操作 * */ public function StoreRetreatAction() { A('Terminalapi/StorePurchaseOrder')->RetreatAction(); } /** * 门店报损列表 */ public function StoreLossReportList() { A('Terminalapi/LossReport')->StoreLossReportList(); } /** * 门店报损商品列表 */ public function StoreLossGoodsList() { A('Terminalapi/LossReport')->StoreLossGoodsList(); } /** * 门店提交报损操作 */ public function StoreLossOperation() { A('Terminalapi/LossReport')->StoreLossOperation(); } //门店报损详情 public function StoreLossInfo() { A('Terminalapi/LossReport')->StoreLossInfo(); } public function storeLossInfoSerial() { A('Terminalapi/LossReport')->storeLossInfoSerial(); } /** * 会员分析-活跃会员 */ public function MemberAnalyzeActive() { $type = I('post.type'); $store_id = I('post.store_id'); $merchant_id = I('post.merchant_id'); $MemberAnalyzeModel = new MemberAnalyzeModel(); $result = $MemberAnalyzeModel->getActiveUserBread($type, $store_id, $merchant_id); $this->ajaxReturn($result); } /* * 会员分析-根据月份获取用户数据 */ public function MemberAnalyzeActiveList() { $timestamp = I('post.timestamp'); // 查询月份 $page = I('post.page') ? I('post.page') : 0; $pageSize = I('post.pageSize') ? I('post.pageSize') : 10; $type = I('post.type'); // 沉睡会员/活跃会员 $store_id = I('post.store_id'); $merchant_id = I('post.merchant_id'); $MemberAnalyzeModel = new MemberAnalyzeModel(); $result = $MemberAnalyzeModel->getActiveUserByMonth($timestamp, $type, $page, $pageSize, $store_id, $merchant_id); $this->ajaxReturn($result); } /* * 会员分析-会员生日统计 */ public function MemberAnalyzeBirth() { $store_id = I('post.store_id'); $merchant_id = I('post.merchant_id'); $MemberAnalyzeModel = new MemberAnalyzeModel(); $result = $MemberAnalyzeModel->getBirthUserBread($merchant_id); $this->ajaxReturn($result); } /* * 会员分析-根据月份获取用户数据 */ public function MemberAnalyzeBirthList() { $type = I('post.type'); $page = I('post.page') ? I('post.page') : 0; $pageSize = I('post.pageSize') ? I('post.pageSize') : 10; $store_id = I('post.store_id'); $merchant_id = I('post.merchant_id'); $MemberAnalyzeModel = new MemberAnalyzeModel(); $result = $MemberAnalyzeModel->getActiveUserByBirth($type, $page, $pageSize, $merchant_id); $this->ajaxReturn($result); } /** * 2021年1月9日11:25:19 * 助手商城收款统计 */ public function getTerminalShopTotal() { $Statistics = new Statistics(); $result = $Statistics->getTerminalShopTotal([ 'store_id' => I('post.store_id'), 'start_time' => I('post.start_time'), 'end_time' => I('post.end_time'), ]); $this->ajaxReturn($result); } /** * 2021年1月11日09:43:24 * 助手收银员收款统计 */ public function getTerminalCashierTotal() { $Statistics = new Statistics(); $result = $Statistics->getTerminalCashierTotal([ 'store_id' => I('post.store_id'), 'merchant_id' => I('post.merchant_id'), 'cashier_id' => I('post.cashier_id'), 'user_type' => I('post.user_type'), 'start_time' => I('post.start_time'), 'end_time' => I('post.end_time'), ]); $this->ajaxReturn($result); } //串号修改 public function serialModify() { $data = I('post.'); $data['user_type'] = 6; $data['operator_type'] = 3; $data['cashier_id'] = $data['operator_id']; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->serialModify($data); $this->ajaxReturn($result); } //仓库的串号列表 public function SaleSerialList() { $data = I('post.'); switch ($data['user_type']) { case 1: $data['user_type'] = 3; break; case 2: case 3: $data['user_type'] = 4; break; } $SerialClass = new SerialNumberGoods(); $result = $SerialClass->warehouseSerialList($data); $this->ajaxReturn($result); } // 获取流水 public function lineOrderTotal() { echo "10000"; } }