display(); } /** * 获取收银员列表 * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function lists() { $keyword = I("post.keyword"); $add_time = I('post.add_time'); if (!empty($keyword)) { $map['name|mobile'] = array('like', "%" . $keyword . "%"); } if (!empty($add_time)) { $start_time = strtotime($add_time[0]); $end_time = strtotime($add_time[1]); $map['addtime'] = array('between', array($start_time, $end_time)); } $map['merchantid'] = $this->merchant_id; $map['storeid'] = $this->store_id; $map['status'] = 1; $info = M("retail_cashier")->where($map)->page(I("post.page"), I("post.limit"))->select(); $count = M("retail_cashier")->where($map)->count(); foreach ($info as $key => $value) { $info[$key]['index'] = $key + 1; $info[$key]['storetag'] = M("retail_store")->where(array('id' => $value['storeid']))->getField('storetag'); $info[$key]['addtime'] = date("Y-m-d H:i:s", $value['addtime']); $info[$key]['canrefund'] = $value['canrefund'] == 2 ? "开启" : "关闭"; $info[$key]['canrecharge'] = $value['canrecharge'] == 2 ? "开启" : "关闭"; $info[$key]['modifymem'] = $value['modifymem'] == 2 ? "开启" : "关闭"; $info[$key]['customviprecharge'] = $value['customviprecharge'] == 2 ? "开启" : "关闭"; $info[$key]['salesdiction'] = $value['salesdiction'] == 1 ? "开启" : "关闭"; $info[$key]['preferential'] = $value['preferential'] == 1 ? "开启" : "关闭"; $info[$key]['sku_discount'] = $value['sku_discount'] == 1 ? "开启" : "关闭"; $info[$key]['code_auth'] = $value['code_auth'] == 1 ? "开启" : "关闭"; $info[$key]['goods_gifts_auth'] = $value['goods_gifts_auth'] == 1 ? "开启" : "关闭"; } $res['code'] = 0; $res['count'] = $count; $res['data'] = $info; $this->ajaxReturn($res); } /** * 收银员信息导出 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function cashierInfoExport() { $keyword = I("get.keyword"); if (!empty($keyword)) { if (is_numeric($keyword)) { $map['mobile'] = $keyword; } else { $map['name'] = array('like', "%" . $keyword . "%"); } } $map['merchantid'] = $this->merchant_id; $map['storeid'] = $this->store_id; $map['status'] = 1; $info = M("retail_cashier")->where($map)->select(); foreach ($info as $key => $value) { $info[$key]['index'] = $key + 1; $info[$key]['storetag'] = M("retail_store")->where(array('id' => $value['storeid']))->getField('storetag'); $info[$key]['addtime'] = date("Y-m-d H:i:s", $value['addtime']); $info[$key]['canrefund'] = $value['canrefund'] == 2 ? "开启" : "关闭"; $info[$key]['canrecharge'] = $value['canrecharge'] == 2 ? "开启" : "关闭"; $info[$key]['modifymem'] = $value['modifymem'] == 2 ? "开启" : "关闭"; $info[$key]['customviprecharge'] = $value['customviprecharge'] == 2 ? "开启" : "关闭"; $info[$key]['salesdiction'] = $value['salesdiction'] == 1 ? "开启" : "关闭"; $info[$key]['preferential'] = $value['preferential'] == 1 ? "开启" : "关闭"; } $field_name = '收银员信息'; $arr = array( array('index', '序号'), array('name', '姓名'), array('jobnum', '工号'), array('mobile', '手机号码'), array('storetag', '门店'), array('addtime', '加入时间'), array('canrefund', '退款权限'), array('canrecharge', '充值权限'), array('modifymem', '编辑资料权限'), array('customviprecharge', '赠送金额权限(自定义)'), array('salesdiction', '销售明细权限'), array('preferential', '结算打折'), ); $str = $field_name . '导出日期' . date('Y-m-d H:i:s', time()); $this->getExcel($field_name, $arr, $info, $str); } /** * 新增收银员 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function addCashier() { $store_id = $this->store_id; if (IS_POST) { $data = I("post."); //需要先判断手机号是否被使用过 $map = array( 'c.mobile' => $data['mobile'], 'c.status' => 1, 's.state' => 0, ); $cashier = M('retail_cashier as c') ->join('ls_retail_store as s on s.id=c.storeid') ->where($map) ->find(); if (empty($cashier)) { if (strlen($data['password']) > 16) { $res['status'] = 0; $res['msg'] = '密码不能大于16位'; $this->ajaxReturn($res); exit; } //工号不可重复 $jobnum = M("retail_cashier")->where(array('storeid' => $store_id, 'jobnum' => $data['jobnum'], 'status' => 1))->find(); if (empty($jobnum)) { $NowTime = time(); $data['password'] = createPassword($data['password'], $NowTime); $data['storeid'] = $store_id; $data['merchantid'] = $this->merchant_id; $data['addtime'] = $NowTime; $create = M("retail_cashier")->add($data); if ($create) { $Role = new Role(); $jurData = [ 'login_name' => $data['mobile'], 'password' => $data['password'], 'name' => $data['name'], 'add_time' => $data['addtime'], 'user_type' => 6, 'system_user_id' => $create, 'pid' => $this->login_user['id'], 'jurisdiction_group_id' => $Role->createSystemGroup(['type' => 6]), ]; $JurisdictionUserModel = new JurisdictionUserModel(); $JurisdictionUserModel->addOrder($jurData); //操作日志记录 $source = 0; //请求来源: 0pc系统 1小助手 $type = 4; //平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST); //请求参数 json数据 $desc = '收银员-添加'; //操作行为描述 action_log($source, $type, $request_data, $desc); $res['status'] = 1; $res['msg'] = '添加成功'; } else { $res['status'] = 0; $res['msg'] = '添加失败'; } } else { $res['status'] = 0; $res['msg'] = '工号已存在,请更换工号'; } } else { $res['status'] = 0; $res['msg'] = '该手机号已被使用,请更换手机号'; } $this->ajaxReturn($res); } //门店名称 $map['id'] = $store_id; $map['merchantid'] = $this->merchant_id; $storetag = M("retail_store")->where($map)->getField('storetag'); $this->assign('storetag', $storetag); $this->display(); } /** * 删除收银员 */ public function delCashier() { if (IS_POST) { $id = I('post.id'); $w['id'] = $id; $w['storeid'] = $this->store_id; $data['status'] = 2; $ret = M('retail_cashier')->where($w)->save($data); if ($ret) { //操作日志记录 $source = 0; //请求来源: 0pc系统 1小助手 $type = 4; //平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST); //请求参数 json数据 $desc = '收银员-删除'; //操作行为描述 action_log($source, $type, $request_data, $desc); $rt['status'] = 1; $rt['msg'] = '删除成功'; } else { $rt['status'] = 2; $rt['msg'] = '删除失败'; } $this->ajaxReturn($rt); } } /** * 编辑收银员 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function editadCashier() { if (IS_POST) { $data = I("post."); if (empty($data['id'])) { $res['status'] = 0; $res['msg'] = '参数错误,请重试'; } else { if (empty($data['password'])) { //不修改密码 //手机号是否使用 $map['status'] = 1; $map['mobile'] = $data['mobile']; $map['id'] = array('neq', $data['id']); $find = M("retail_cashier")->where($map)->find(); unset($map['mobile']); $map['jobnum'] = $data['jobnum']; $map['storeid'] = session("storeid"); $jobunm = M("retail_cashier")->where($map)->find(); if (empty($find)) { if (empty($jobunm)) { unset($data['password']); $save = M("retail_cashier")->where(array('id' => $data['id']))->save($data); if ($save) { //操作日志记录 $source = 0; //请求来源: 0pc系统 1小助手 $type = 4; //平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST); //请求参数 json数据 $desc = '收银员-编辑-不修改密码'; //操作行为描述 action_log($source, $type, $request_data, $desc); $res['status'] = 1; $res['msg'] = '修改成功'; } else { $res['status'] = 0; $res['msg'] = '修改失败'; } } else { $res['status'] = 0; $res['msg'] = '该工号已被使用,请更换工号'; } } else { $res['status'] = 0; $res['msg'] = '该手机号已被使用,请更换手机账号'; } } else { //修改密码 if (strlen($data['password']) > 16) { $res['status'] = 0; $res['msg'] = '密码不能大于16位'; $this->ajaxReturn($res); exit; } $map['status'] = 1; $map['mobile'] = $data['mobile']; $map['id'] = array('neq', $data['id']); $find = M("retail_cashier")->where($map)->find(); unset($map['mobile']); $map['jobnum'] = $data['jobnum']; $map['storeid'] = session("storeid"); $jobunm = M("retail_cashier")->where($map)->find(); if (empty($find)) { if (empty($jobunm)) { //查询出用户的创建时间 $ctime = M("retail_cashier")->where(array('id' => $data['id']))->getField("addtime"); $CryptrModel = new \Addons\Api\Crypto(); $data['password'] = $CryptrModel->encrypt($data['password'], date('YmdHis', $ctime)); $save = M("retail_cashier")->where(array('id' => $data['id']))->save($data); if ($save) { //操作日志记录 $source = 0; //请求来源: 0pc系统 1小助手 $type = 4; //平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST); //请求参数 json数据 $desc = '收银员-编辑-修改密码'; //操作行为描述 action_log($source, $type, $request_data, $desc); $res['status'] = 1; $res['msg'] = '修改成功'; } else { $res['status'] = 0; $res['msg'] = '修改失败'; } } else { $res['status'] = 0; $res['msg'] = '该工号已被使用,请更换工号'; } } else { $res['status'] = 0; $res['msg'] = '该手机号已被使用,请更换手机账号'; } } } $this->ajaxReturn($res); } $id = I("get.id"); $info = M("retail_cashier")->where(array('id' => $id))->find(); $info['storetag'] = M("retail_store")->where(array('id' => $info['storeid']))->getField('storetag'); $this->assign("info", $info); $this->display(); } /** * 交接班数据页面 */ public function shiftingdetail() { $id = I('get.id'); $this->assign('id', $id); $arr = array( 'cashierExport' => '/index.php//Retail/Cashier/cashierExport', ); $authArr = checkFunction($arr); $this->assign('authArr', $authArr); $this->display(); } /** * 收银金额统计 * @param $where 搜索条件 * @return mixed * $rmbpay 现金 * $wxpay 微信 * $alipay 支付宝 * $other_pay 其他 * $recharge_cash 现金充值 * $recharge_wx 微信充值 * $recharge_zfb 支付宝充值 * $mec_money 德育币支付金额 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function cashierMoneyTotal($where) { $cashierInfo = M('retail_record')->where($where)->select(); $rmbpay = 0; $wxpay = 0; $alipay = 0; $other_pay = 0; $recharge_cash = 0; $recharge_wx = 0; $recharge_zfb = 0; $mec_money = 0; $cash_box = 0; if ($cashierInfo) { foreach ($cashierInfo as $key => &$val) { if (!empty($val['rmbpay'])) { $rmbpay += $val["rmbpay"]; } if (!empty($val['wxpay'])) { $wxpay += $val['wxpay']; } if (!empty($val['alipay'])) { $alipay += $val['alipay']; } if (!empty($val['other_pay'])) { $other_pay += $val['other_pay']; } if (!empty($val['recharge_cash'])) { $recharge_cash += $val['recharge_cash']; } if (!empty($val['recharge_wx'])) { $recharge_wx += $val['recharge_wx']; } if (!empty($val['cash_box'])) { $cash_box += $val['cash_box']; } if (!empty($val['recharge_zfb'])) { $recharge_zfb += $val['recharge_zfb']; } if (!empty($val['mec_money'])) { $mec_money += $val['mec_money']; } } } $store_id = session('storeid'); $cashier_id = $where['cashierid']; $WorkRecordModel = D('WorkRecord'); $map = array( $WorkRecordModel::STORE_ID => $store_id, $WorkRecordModel::CASHIER_ID => $cashier_id ); $record = $WorkRecordModel->getOrderFind($map, '*', $WorkRecordModel::START_TIME . ' desc'); if (!empty($record) && empty($record[$WorkRecordModel::END_TIME])) { $SellData = new SellDataController(); $payList = $SellData->getPayData_v1($record[$WorkRecordModel::START_TIME], time(), $store_id, $cashier_id); $rmbpay += $payList['cash_amount']; $wxpay += $payList['weChat_amount']; $alipay += $payList['ali_amount']; $other_pay += $payList['other_amount']; $recharge_cash += $payList['recharge_cash_amount']; $recharge_wx += $payList['recharge_weChat_amount']; $recharge_zfb += $payList['recharge_ali_amount']; $mec_money += $payList['MoralEducationCoin']; } $arr['isOpenCredit'] = false; if (in_array('Credit', C('MODULE_ALLOW_LIST'))) { $arr['isOpenCredit'] = true; $creditArrearage = new \Credit\Model\CreditArrearageModel(); $creditRepayment = new \Credit\Model\CreditRepaymentModel(); //赊账 $ArrearageMap = [ 'cashier_id' => $where['cashierid'], 'add_time' => $where['start_time'], ]; //未交班赊账数据 $workingCreditArrMap = [ 'cashier_id' => $where['cashierid'], 'add_time' => ['between', [$record['start_time'], time()]], ]; $workingCreditArr = $creditArrearage->getSum($workingCreditArrMap, 'bill_money'); $creditArreaMoney = $creditArrearage->getSum($ArrearageMap, 'bill_money'); $arr['credit_arrea_money'] = round($workingCreditArr + $creditArreaMoney, 2); //还款 $RepaymentMap = [ 'operate_type' => 1, //操作人员类型为收银员 'operate_id' => $where['cashierid'], 'add_time' => $where['start_time'], ]; //未交班还款数据 $workingCreditRypayMap = [ 'operate_type' => 1, //操作人员类型为收银员 'operate_id' => $where['cashierid'], 'add_time' => ['between', [$record['start_time'], time()]], ]; $workingCreditRepay = $creditRepayment->getSum($workingCreditRypayMap, 'money'); $creditRepayMoney = $creditRepayment->getSum($ArrearageMap, 'money'); $arr['credit_repay_money'] = round($workingCreditRepay + $creditRepayMoney, 2); } $arr['rmbpay'] = round($rmbpay, 2); $arr['wxpay'] = round($wxpay, 2); $arr['alipay'] = round($alipay, 2); $arr['other_pay'] = round($other_pay, 2); $arr['recharge_cash'] = round($recharge_cash, 2); $arr['recharge_wx'] = round($recharge_wx, 2); $arr['recharge_zfb'] = round($recharge_zfb, 2); $arr['mec_money'] = round($mec_money, 2); return $arr; } /** * 交班记录列表 * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function shiftingdetailinfo() { $StoreConfigModel = new StoreConfigModel(); $id = I('post.id'); $time = I('post.date01'); $page = I('post.page'); $limit = I('post.limit'); $admin = M('retail_cashier')->where(array('id' => $id))->find(); if (!empty($time)) { $time = explode("至", $time); $start_time = strtotime($time[0] . "00:00:00"); $end_time = strtotime($time[1] . "23:59:59"); $where['start_time'] = array('between', array($start_time, $end_time)); } $where['cashierid'] = $id; $count = M('retail_record')->where($where)->count(); $records = M('retail_record')->where($where)->page($page, $limit)->order('start_time desc')->select(); $index = 1; //判断赊账插件是否存在 $Plug = new Plug(); $PlugData = $Plug->PlugPermissions([ 'merchant_id' => $admin['merchantid'], 'identification_arr' => ['credit'] ]); if (!empty($PlugData['data']['plug']['credit'])) { $is_credit = $StoreConfigModel->getFindField(['store_id' => $admin['storeid']], 'is_credit'); $rt['isOpenCredit'] = $is_credit == 1 ? true : false; $creditArrearage = new \Credit\Model\CreditArrearageModel(); $creditRepayment = new \Credit\Model\CreditRepaymentModel(); //赊账 $ArrearageMap = [ 'cashier_id' => $id, ]; //还款 $RepaymentMap = [ 'operate_type' => 1, //操作人员类型为收银员 'operate_id' => $id, ]; } else { $rt['isOpenCredit'] = false; } $SellData = new SellDataController(); foreach ($records as &$val) { $val['index'] = $index; $val['name'] = $admin['name']; $val['start_time'] = date('Y-m-d H:i:s', $val['start_time']); if ($val['end_time']) { $val['end_time'] = date('Y-m-d H:i:s', $val['end_time']); $jgtime = strtotime($val['end_time']) - strtotime($val['start_time']); $val['jg_time'] = round($jgtime / 3600, 0) . '时' . round(($jgtime / 60) % 60, 0) . '分'; $val['other_pay_json'] = json_decode($val['other_pay_json'], true); } else { $now_time = time(); $payList = $SellData->getPayData_v1($val['start_time'], $now_time, $admin['storeid'], $id); $val['end_time'] = '尚未交班'; $time = $now_time - strtotime($val['start_time']); $val['jg_time'] = round($time / 3600, 0) . '时' . round(($time / 60) % 60, 0) . '分'; $val['wxpay'] = $payList['weChat_amount']; $val['alipay'] = $payList['ali_amount']; $val['rmbpay'] = $payList['cash_amount']; $val['cash_box'] = floatval($val['cash_box']); $val['recharge'] = round($payList['recharge_cash_amount'] + $payList['recharge_weChat_amount'] + $payList['recharge_ali_amount'], 2); $val['recharge_cash'] = $payList['recharge_cash_amount']; $val['recharge_wx'] = $payList['recharge_weChat_amount']; $val['recharge_zfb'] = $payList['recharge_ali_amount']; $val['other_pay'] = $payList['other_amount']; $val['mec_money'] = $payList['MoralEducationCoin']; $val['other_pay_json'] = $payList['other_amount_array']; //赊账数据 if ($rt['isOpenCredit']) { $ArrearageMap['add_time'] = ['gt', $val['start_time']]; $RepaymentMap['add_time'] = ['gt', $val['start_time']]; $val['credit_arrea_money'] = $creditArrearage->getSum($ArrearageMap, 'bill_money'); $val['credit_repay_money'] = $creditRepayment->getSum($ArrearageMap, 'money'); } $val['cash_box'] = round($val['cash_box'] + $val['rmbpay'] + $val['recharge_cash'], 2); $index++; } $json_array = ''; if ($val['other_pay_json']) { foreach ($val['other_pay_json'] as $json) { $json_array .= $json['name'] . ' : ¥' . $json['money'] . ' '; } } else { $json_array = $val['other_pay']; } $val['other_pay'] = $json_array; } $rt['code'] = 0; $rt['msg'] = ''; $rt['count'] = $count; $rt['data'] = $records; $this->ajaxReturn($rt); } /** * 获取修改钱箱记录 * @param type 类型 1增加 2减少 * @param page 页码 * @param limit 页长 */ public function getCashEditRecord() { $id = I('post.id'); if (!$id) { $this->ajaxReturn(['status' => 0, 'msg' => '缺少必要参数']); } $type = I('post.type'); $page = I('post.page') ? I('post.page') : 1; $limit = I('post.limit') ? I('post.limit') : 10; $CashBoxRecordModel = new CashBoxRecordModel(); $field = [ 'type', 'remark', 'add_time', 'operate_id', 'edit_money', ]; $map = ['record_id' => $id]; if ($type) { $map['type'] = $type; } $list = $CashBoxRecordModel->getSelect($map, $field, 'id desc', $page . ',' . $limit); foreach ($list as &$val) { $val['add_time'] = date("Y-m-d H:i:s", $val['add_time']); $val['type_name'] = $val['type'] == 1 ? '增加' : '减少'; } $RetailRecordModel = new RetailRecordModel(); $record = $RetailRecordModel->getFind(['id' => $id]); $startTime = date('Y-m-d H:i:s', $record['start_time']); $endTime = $record['end_time'] ? date('Y-m-d H:i:s', $record['end_time']) : date('Y-m-d H:i:s'); $result = [ 'status' => 1, 'msg' => empty($list) ? '暂无数据' : '获取成功', 'data' => [ 'list' => $list ? $list : [], 'count' => $CashBoxRecordModel->getCount($map), 'time' => $startTime . '-' . $endTime, ], ]; $this->ajaxReturn($result); } /* * 搜索收银员金额统计 */ public function cashierSearch() { $date01 = I('post.date01'); if (!empty($date01)) { $time = explode("至", $date01); $start_time = strtotime($time[0] . "00:00:00"); $end_time = strtotime($time[1] . "23:59:59"); $where['start_time'] = array('between', array($start_time, $end_time)); } $where['cashierid'] = I('post.id'); $cashierInfo = $this->cashierMoneyTotal($where); $res['status'] = 1; $res['cashierInfo'] = $cashierInfo; $this->ajaxReturn($res); } /* * 交班记录导出 */ public function cashierExport() { $StoreConfigModel = new StoreConfigModel(); $id = I('get.id'); $time = I('get.date01'); $admin = M('retail_cashier')->where(array('id' => $id))->find(); if (!empty($time)) { $time = explode("至", $time); $start_time = strtotime($time[0] . "00:00:00"); $end_time = strtotime($time[1] . "23:59:59"); $where['start_time'] = array('between', array($start_time, $end_time)); } $where['cashierid'] = $id; $records = M('retail_record')->where($where)->order('start_time desc')->select(); $index = 1; $Plug = new Plug(); $PlugData = $Plug->PlugPermissions([ 'merchant_id' => $admin['merchantid'], 'identification_arr' => ['credit'] ]); if (!empty($PlugData['data']['plug']['credit'])) { $is_credit = $StoreConfigModel->getFindField(['store_id' => $admin['storeid']], 'is_credit'); $rt['isOpenCredit'] = $is_credit == 1 ?: false; $creditArrearage = new \Credit\Model\CreditArrearageModel(); $creditRepayment = new \Credit\Model\CreditRepaymentModel(); //赊账 $ArrearageMap = [ 'cashier_id' => $id, ]; //还款 $RepaymentMap = [ 'operate_type' => 1, //操作人员类型为收银员 'operate_id' => $id, ]; } else { $rt['isOpenCredit'] = false; } foreach ($records as $k => $v) { $records[$k]['index'] = $index; $records[$k]['name'] = $admin['name']; //赊账数据 if ($rt['isOpenCredit']) { if ($records[$k]['end_time']) { $ArrearageMap['add_time'] = ['between', [$records[$k]['start_time'], $records[$k]['end_time']]]; $RepaymentMap['add_time'] = ['between', [$records[$k]['start_time'], $records[$k]['end_time']]]; } else { $ArrearageMap['add_time'] = ['gt', $records[$k]['start_time']]; $RepaymentMap['add_time'] = ['gt', $records[$k]['start_time']]; } $records[$k]['credit_arrea_money'] = $creditArrearage->getSum($ArrearageMap, 'bill_money'); $records[$k]['credit_repay_money'] = $creditRepayment->getSum($ArrearageMap, 'money'); } $records[$k]['start_time'] = date('Y-m-d H:i:s', $v['start_time']); if ($v['end_time']) { $records[$k]['end_time'] = date('Y-m-d H:i:s', $v['end_time']); $jgtime = $v['end_time'] - $v['start_time']; $records[$k]['jg_time'] = round($jgtime / 3600, 0) . '时' . round(($jgtime / 60) % 60, 0) . '分'; } else { $records[$k]['end_time'] = '尚未交班'; $records[$k]['jg_time'] = '--'; $records[$k]['wxpay'] = '--'; $records[$k]['alipay'] = '--'; $records[$k]['rmbpay'] = '--'; $records[$k]['recharge'] = '--'; $records[$k]['recharge_cash'] = '--'; $records[$k]['recharge_wx'] = '--'; $records[$k]['recharge_zfb'] = '--'; $records[$k]['other_pay'] = '--'; } $index++; } $field = '收银员交班记录导出'; $arr = [ ['index', '序号'], ['name', '姓名'], ['jobnum', '工号'], ['start_time', '开班时间'], ['end_time', '交班时间'], ['jg_time', '间隔时间'], ['wxpay', '微信金额(元)'], ['alipay', '支付宝金额(元)'], ['rmbpay', '现金(元)'], ['other_pay', '其他支付(元)'], ['recharge_cash', '现金充值支付(元)'], ['recharge_wx', '微信充值支付(元)'], ['recharge_zfb', '支付宝充值支付(元)'], ['recharge', '充值总金额(元)'], ]; if (in_array('Credit', C('MODULE_ALLOW_LIST'))) { $arr = [ ['index', '序号'], ['name', '姓名'], ['jobnum', '工号'], ['start_time', '开班时间'], ['end_time', '交班时间'], ['jg_time', '间隔时间'], ['wxpay', '微信金额(元)'], ['alipay', '支付宝金额(元)'], ['rmbpay', '现金(元)'], ['other_pay', '其他支付(元)'], ['recharge_cash', '现金充值支付(元)'], ['recharge_wx', '微信充值支付(元)'], ['recharge_zfb', '支付宝充值支付(元)'], ['recharge', '赊账金额'], ['recharge', '赊账还款金额'], ['recharge', '充值总金额(元)'], ]; } $str = $field . '导出日期' . date('Y-m-d H:i:s', time()); getExcel($field, $arr, $records, $str); } /** * 收银员 模板设置页面 * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function model() { $type = I('get.type'); if (empty($type)) { $this->error('访问错误'); } $store_id = $this->store_id; if ($type == 2) { $id = I('get.id'); if (empty($id)) { $this->error('访问错误'); } $cashier = M('retail_cashier')->where(array('storeid' => $store_id, 'id' => $id, 'status' => 1))->find(); if (empty($cashier)) { $this->error('收银员不存在'); } $this->assign('status', $cashier['cash_model']); $this->assign('id', $id); } else { $all = M('retail_cashier')->where(array('storeid' => $store_id, 'status' => 1))->count(); $all1 = M('retail_cashier')->where(array('storeid' => $store_id, 'status' => 1, 'cash_model' => 1))->count(); if ($all && $all == $all1) { $this->assign('status', 1); } else if ($all && $all1 == 0) { $this->assign('status', 2); } } $this->assign('type', $type); $this->display(); } /** * 设置收银员模板 */ public function setModel() { $store_id = $this->store_id; $type = I('post.type'); $id = I('post.id'); $status = I('post.status'); if (empty($status) || empty($type)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } if ($type == 1) { $update = M('retail_cashier')->where(array('storeid' => $store_id, 'status' => 1))->save(array('cash_model' => $status)); } else if ($type == 2) { if (empty($id)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $update = M('retail_cashier')->where(array('storeid' => $store_id, 'status' => 1, 'id' => $id))->save(array('cash_model' => $status)); } else { $res['status'] = 0; $res['msg'] = '参数有误'; $this->ajaxReturn($res); } if ($update) { //操作日志记录 $source = 0; //请求来源: 0pc系统 1小助手 $type = 4; //平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST); //请求参数 json数据 $desc = '收银员-模板设置'; //操作行为描述 action_log($source, $type, $request_data, $desc); $res['status'] = 1; $res['msg'] = '设置成功'; } else { $res['status'] = 0; $res['msg'] = '设置成功'; } $this->ajaxReturn($res); } /** * 权限设置 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function permiset() { if (IS_POST) { $id = I('post.id'); $field = array( 'refundcode', 'canrefund', 'canrecharge', 'rechargecode', 'modifymem', 'modifymemcode', 'modify_plus_mem', 'cash_model', 'print_time', 'salesdiction', 'preferential', 'customviprecharge', 'cashier_show_other_sell', 'cashier_add_goods', 'manual_discount', 'manual_min_discount', 'manual_max_amount', 'goods_gifts_auth', 'goods_gifts_num', 'credit_user_manage', 'credit_money_manage', 'push_state', 'openid', 'is_goods_manage', 'goods_manage_edit', 'goods_manage_del', 'goods_manage_operate', 'is_scales_author', //传秤权限 'edit_goods_price', //收银员修改商品价格权限 'use_no_code_goods', //使用无码商品的权限 1开启 2关闭 'del_out_line_data', //收银员删除离线数据的权限 1开启 2关闭 'other_store_goods', //收银员查看其他门店商品库存的权限 1开启 2关闭 'small_changes_state', //收银员抹零的权限 1开启 2关闭 ); $info = M("retail_cashier")->where(array('id' => $id))->field($field)->find(); if (!empty($info)) { if ($info['goods_gifts_num']) { $info['goods_gifts_num'] = intval($info['goods_gifts_num']); } $url = getServerUrl() . '/index.php/Retail/AuthMerchant/auth?merchant_id=' . $this->merchant_id . '&cashier_id=' . $id; $Plug = new Plug(); $plug_auth = $Plug->PlugPermissions(array( 'merchant_id' => $this->merchant_id, 'identification_arr' => ['credit'] )); $this->ajaxReturn(array( 'status' => 1, 'msg' => '获取成功', 'data' => array( 'info' => $info, 'code_url' => $url, 'plug' => $plug_auth['data']['plug'], 'bind_wx_state' => empty($info['openid']) ? false : true, ), )); } else { $this->ajaxReturn(array( 'status' => 0, 'msg' => '收银员不存在', )); } } else { $this->display(); } } /** * 修改权限并提交 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function permisetsub() { if (IS_POST) { $store_id = $this->store_id; $info = I('post.'); if (empty($info['id'])) { $res['status'] = 0; $res['msg'] = '参数有误'; $this->ajaxReturn($res); exit; } $canrecharge = $info['canrecharge'] == 2 ? 2 : 1; $canrefund = $info['canrefund'] == 2 ? 2 : 1; $modifymem = $info['modifymem'] == 2 ? 2 : 1; $modify_plus_mem = $info['modify_plus_mem'] == 2 ? 2 : 1; $salesdiction = $info['salesdiction'] == 1 ? 1 : 2; $preferential = $info['preferential'] == 1 ? 1 : 0; $cashier_show_other_sell = $info['cashier_show_other_sell'] == 1 ? 1 : 2; $cashier_add_goods = $info['cashier_add_goods'] == 1 ? 1 : 2; $data['push_state'] = $info['push_state'] == 1 ? 1 : 2; $data['code_auth'] = $info['code_auth'] == 1 ? 1 : 0; // 授权码总权限 是否需要授权码(总):0=不需要,1=需要 // 单品打折 $data['manual_discount'] = $info['manual_discount'] == 1 ? 1 : 0; // 手动打折权限:0=未开启,1=开启 $data['manual_min_discount'] = (float)$info['manual_min_discount']; // 手动打折最低折扣 $data['manual_max_amount'] = (float)$info['manual_max_amount']; // 手动打折最多优惠金额 $data['goods_gifts_auth'] = $info['goods_gifts_auth'] == 1 ? 1 : 0; // 收银员赠品权限:0=关闭,1=开启 $data['goods_gifts_num'] = $info['goods_gifts_num'] ? $info['goods_gifts_num'] : null; // 收银员赠品最大数量 // 商品管理 $data['is_goods_manage'] = $info['is_goods_manage'] == 1 ? 1 : 2; // 收银端商品管理权限 1开启 2关闭 $data['goods_manage_edit'] = $info['goods_manage_edit'] ? $info['goods_manage_edit'] : 2; //编辑商品权限 1开启 2关闭 $data['goods_manage_del'] = $info['goods_manage_del'] ? $info['goods_manage_del'] : 2; //删除商品权限 1开启 2关闭 $data['goods_manage_operate'] = $info['goods_manage_operate'] ? $info['goods_manage_operate'] : 2; //批量修改商品权限 1开启 2关闭 $data['is_scales_author'] = $info['is_scales_author'] ? $info['is_scales_author'] : 1; //收银员传称权限 1开启 2关闭 $data['edit_goods_price'] = $info['edit_goods_price'] ? $info['edit_goods_price'] : 2; //收银员修改商品价格权限 1开启 2关闭 $data['use_no_code_goods'] = $info['use_no_code_goods'] == 1 ? 1 : 2; //使用无码商品的权限 1开启 2关闭 $data['del_out_line_data'] = $info['del_out_line_data'] == 1 ? 1 : 2; //收银员删除离线数据的权限 1开启 2关闭 $data['other_store_goods'] = $info['other_store_goods'] == 1 ? 1 : 2; //收银员查看其他门店商品库存的权限 1开启 2关闭 $data['small_changes_state'] = $info['small_changes_state'] == 1 ? 1 : 2; //收银员抹零权限 1开启 2关闭 if (!empty($data['code_auth'])) { if (empty($data['sku_discount_code']) || strlen($data['sku_discount_code']) > 30) { $res['status'] = 0; $res['msg'] = '单品打折授权码有误'; $this->ajaxReturn($res); } } if ($data['manual_discount'] == 1 && empty($data['manual_min_discount'])) { $res['status'] = 0; $res['msg'] = '请输入最低折扣'; $this->ajaxReturn($res); } if (!empty($data['manual_min_discount'])) { if (($data['manual_min_discount'] > 1 || $data['manual_min_discount'] <= 0 || !is_numeric($data['manual_min_discount']))) { $res['status'] = 0; $res['msg'] = '最低折扣值有误'; $this->ajaxReturn($res); } } else { $data['manual_min_discount'] = null; } if (!empty($data['manual_max_amount'])) { if ($data['manual_max_amount'] < 0 || !is_numeric($data['manual_max_amount'])) { $res['status'] = 0; $res['msg'] = '优惠金额错误'; $this->ajaxReturn($res); } } else { $data['manual_max_amount'] = null; } if ($data['goods_gifts_auth'] == 1) { // 整数判断 if (!is_numeric($data['goods_gifts_num']) || strpos($data['goods_gifts_num'], '.') !== false) { $res['status'] = 0; $res['msg'] = '请填写整数!'; $this->ajaxReturn($res); } if (($data['goods_gifts_num'] > 9999.99 || $data['goods_gifts_num'] <= 0 || !is_numeric($data['goods_gifts_num']))) { $res['status'] = 0; $res['msg'] = '赠送数量有误!'; $this->ajaxReturn($res); } } if ($modifymem == 2 || $modify_plus_mem == 2) { $jurisdiction = M('retail_store_jurisdiction')->field("store_operation_vip,store_edit_vip_info")->where(array('storeid' => $store_id))->find(); if (!empty($jurisdiction) && $jurisdiction['store_operation_vip'] == 2) { $res['status'] = 0; $res['msg'] = '门店暂无编辑会员资料权限'; $this->ajaxReturn($res); exit; } if (!empty($jurisdiction) && $jurisdiction['store_edit_vip_info'] == 2) { $res['status'] = 0; $res['msg'] = '门店暂无编辑会员资料权限'; $this->ajaxReturn($res); exit; } } //充值 $data['canrecharge'] = $canrecharge; $data['refundcode'] = $info['refundcode']; //退款码 $data['canrefund'] = $canrefund; $data['rechargecode'] = $info['rechargecode']; //修改资料 $data['modifymem'] = $modifymem; $data['modifymemcode'] = $info['modifymemcode']; $data['customviprecharge'] = $info['customviprecharge'] == 2 ? 2 : 1; //打印销售明细 $data['salesdiction'] = $salesdiction; //打印次数 $data['print_time'] = intval($info['print_time']); if ($canrecharge == 2 && empty($data['rechargecode']) || $canrecharge == 2 && strlen($data['rechargecode']) > 30) { $res['status'] = 0; $res['msg'] = '充值权限权限码有误'; $this->ajaxReturn($res); } if ($canrefund == 2 && empty($data['refundcode']) || $canrefund == 2 && strlen($data['refundcode']) > 30) { $res['status'] = 0; $res['msg'] = '退款权限权限码有误'; $this->ajaxReturn($res); } if ($modifymem == 2 && empty($data['modifymemcode']) || $modifymem == 2 && strlen($data['modifymemcode']) > 30) { $res['status'] = 0; $res['msg'] = '编辑会员权限码有误'; $this->ajaxReturn($res); } if (empty($data['print_time']) || $data['print_time'] < 0 || !is_numeric($data['print_time'])) { $res['status'] = 0; $res['msg'] = '打印次数格式错误'; $this->ajaxReturn($res); } //赊账 $data['credit_user_manage'] = $info['credit_user_manage'] == 2 ? 2 : 1; $data['credit_money_manage'] = $info['credit_money_manage'] == 2 ? 2 : 1; $data['preferential'] = $preferential; $data['cashier_show_other_sell'] = $cashier_show_other_sell; $data['cashier_add_goods'] = $cashier_add_goods; $data['modify_plus_mem'] = $modify_plus_mem; $save = M('retail_cashier')->where(array('id' => $info['id']))->save($data); if ($save) { //操作日志记录 $source = 0; //请求来源: 0pc系统 1小助手 $type = 4; //平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST); //请求参数 json数据 $desc = '收银员-设置'; //操作行为描述 action_log($source, $type, $request_data, $desc); $res['status'] = 1; $res['msg'] = '设置成功'; } else { $res['status'] = 1; $res['msg'] = '暂无修改'; } } else { $res['status'] = 0; $res['msg'] = '非法请求'; } $this->ajaxReturn($res); } /** * 获取门店的收银员列表共选择 */ public function getChooseCashierList() { $Cashier = new Cashier(); $store_id = I('post.store_id'); $this->ajaxReturn($Cashier->getChooseCashierList(['store_id' => $store_id ? $store_id : $this->store_id])); } }