getSelect($map, $page = '', $limit = '', $fields); $this->assign('warehouse', json_encode($warehouse)); } /* * 商品分类 */ private function goodsClass($merchant_id) { $class_name = M('retail_goods_class')->where(array('merchantid' => $merchant_id, 'status' => 0, 'type' => 1))->order('code asc')->select(); $this->assign('goodsClass1', json_encode($class_name)); } /* * 出单信息 */ public function index() { $arr = array( 'addStockOut' => '/index.php/Retail/SStockOutOrder/addStockOut', 'exportOperation' => '/index.php/Retail/SStockOutOrder/export', 'OrderInfo' => '/index.php/Retail/SStockOutOrder/details', 'warehouseInfo' => '/index.php/Retail/SStockOutOrder/warehouseInfo', 'refuseInfo' => '/index.php/Retail/SStockOutOrder/refuseInfo' ); $authArr = checkFunction($arr); $this->assign('authArr', $authArr); $user = session("ls_userinfo"); $store_id = session("storeid"); $this->Info($user['merchantid'], $store_id); $supplier = D("SSupplier")->getSelect(array('merchant_id' => $user['merchantid'], 'store_id' => $store_id, 'status' => 1), $page = '', $limit = '', "id,supplier_name"); $this->assign('supplier', json_encode($supplier)); $this->assign('showPrice', self::$showPrice); $this->assign('identity', self::$identity); $this->assign("global_store_jurisdiction", self::$global_store_jurisdiction); $this->display(); } //出库单列表 public function stockOrderList() { $content = I("post."); $content['merchant_id'] = $this->merchant_id; $content['store_id'] = $this->store_id; $content['operator_type'] = 1; $outboundOrder = new OutboundOrder(); $result = $outboundOrder->getStoreStockOrderList($content); //获取列表 $this->ajaxReturn($result); } //出库单金额统计 public function stockOrderTotal() { $content = I("post."); $content['merchant_id'] = $this->merchant_id; $content['store_id'] = $this->store_id; $content['operator_type'] = 1; $content['user_type'] = 4; $outboundOrder = new OutboundOrder(); $result = $outboundOrder->getStockOrderTotalMoney($content); //出库金额统计列表 $this->ajaxReturn($result); } /* * 新增出库单信息 */ public function addStockOut() { $arr = array( 'goodsChoice' => '/index.php/Retail/SStockOutOrder/goodsList', 'onSubmit' => '/index.php/Retail/SStockOutOrder/StockOutOperation' ); $authArr = checkFunction($arr); $store_id = $this->store_id; $id = I('get.stock_order_id'); //出库单id $this->goodsClass($this->merchant_id); //分类查询 if (!empty($id)) { $type = 3; //调拨出库 $store_status = true; $SStockOutOrderModel = new SStockOutOrderModel(); $StockOrderInfo = $SStockOutOrderModel->getFieldInfo(array('id' => $id), "transfer_to_store_id,order_number"); $transfer_to_store_id = $StockOrderInfo['transfer_to_store_id']; $order_number = $StockOrderInfo['order_number']; $StoreModel = new RetailStoreModel(); $store = $StoreModel->getSelect(array('id' => $transfer_to_store_id)); //门店间调拨审核拒绝继续调拨 $SStockOutGoodsModel = new SStockOutGoodsModel(); $goodsList = $SStockOutGoodsModel->getSelect(array('stock_out_id' => $id), '', '', "*", 'id asc'); if (!empty($goodsList)) { $SSaleMGoodsModel = new SSaleMGoodsModel(); $SStockGoodsSerialModel = new SStockGoodsSerialModel(); $SWarehouseGoodsSerialModel = new SWarehouseGoodsSerialModel(); foreach ($goodsList as $key => &$val) { $val['index'] = $key + 1; $val['stock_id'] = $val['id']; $goods_info = $SSaleMGoodsModel->getFieldInfo(array('goods_id' => $val['goods_id'], 'sku_id' => $val['sku_id']), "goods_num,id"); $val['id'] = $goods_info['id']; $val['goods_num'] = round($goods_info['goods_num'], 3); $val['output_num'] = round($val['stock_num'], 3); //串号信息 if ($val['serial_number_state'] == 1) { $serialList = $SStockGoodsSerialModel->getSelect([ 'outside_id' => $val['id'] ], '', '', 'main_serial_number,auxiliary_serial_number_one,auxiliary_serial_number_two'); if (!empty($serialList)) { foreach ($serialList as &$v) { $where = [ 'store_id' => $store_id, 'merchant_id' => $this->merchant_id, 'goods_id' => $val['goods_id'], 'main_serial_number' => $v['main_serial_number'], 'num' => ['gt', 0] ]; if ($val['sku_id']) { $where['sku_id'] = $val['sku_id']; } $v['id'] = $SWarehouseGoodsSerialModel->basisOrderGetFindField($where, 'id', 'id desc'); } $val['serial_list'] = $serialList; } } } } } else { $store_map = array( 'merchantid' => $this->merchant_id, 'state' => 0, 'id' => array('neq', $store_id), 'supplier_type' => 1 ); $store = D('RetailStore')->getSelect($store_map); } //供货商 $supplier = D("SSupplier")->getSelect(array('store_id' => $store_id, 'status' => 1), $page = '', $limit = '', "id,supplier_name"); $goodsList = $goodsList ? $goodsList : array(); //出库单商品明细 $id = $id ? $id : 0; //出库单id $order_number = $order_number ? $order_number : ""; //出库订单号 $type = $type ? $type : ''; //出库类型 $store_status = $store_status ? $store_status : false; //门店显示 $transfer_to_store_id = $transfer_to_store_id ? $transfer_to_store_id : ""; //调拨的目标门店id $this->assign('authArr', $authArr); $this->assign('id', $id); $this->assign('order_number', $order_number); $this->assign('type', $type); $this->assign('store_status', $store_status); $this->assign('transfer_to_store_id', $transfer_to_store_id); $this->assign("goodsList", json_encode($goodsList)); $this->assign('store', json_encode($store)); $this->assign("supplier", json_encode($supplier)); $this->assign('showPrice', self::$showPrice); $this->assign('identity', self::$identity); $this->display(); } //出库页面数据初始化 public function addStockOutInitial() { $StockRecordClass = new StockRecord(); $result = $StockRecordClass->addStockOutInitial([ 'store_id' => $this->store_id ]); $this->ajaxReturn($result); } //串号列表 public function serialList() { $data = I('post.'); $data['user_type'] = 4; $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->warehouseSerialList($data); $this->ajaxReturn($result); } //出库时仓库商品状态明细 public function goodsList() { $data = I('post.'); $data['operator_type'] = 1; $data['user_type'] = 4; $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $SaleGoodsClass = new SaleGoods(); $result = $SaleGoodsClass->warehouseSearchGoods($data); $this->ajaxReturn($result); } /* * 出库单详情 */ public function details() { $arr = array( 'exportOperation' => '/index.php/Retail/SStockOutOrder/detailsExport', ); $authArr = checkFunction($arr); $this->assign('authArr', $authArr); $id = I('get.id'); $type = I("get.type"); $operator = I('get.operator'); $this->assign('operator', $operator); $where['id'] = $id; $info = D('SStockOutOrder')->getFind($where); $info['add_time'] = date('Y-m-d H:i:s', $info['add_time']); $info['remarks'] = str_replace("\n", "", $info['remarks']); $warehouse = D('SSaleWarehouse')->getFindField(array('id' => $info['warehouse_id']), "name"); switch ($type) { case 0: $stock_name = "其他出库"; break; case 1: $stock_name = "退货至商户出库"; break; case 2: $stock_name = "盘亏出库"; break; case 3: $stock_name = "调拨出库"; $store_name = D('Store')->getStoreName(array('id' => $info['transfer_to_store_id'])); break; case 9: $stock_name = "退货至供货商出库"; $store_name = D("SSupplier")->getFindField(array('id' => $info['supplier_id']), "supplier_name"); break; } $store_name = $store_name ? $store_name : ""; $this->assign('id', $id); $this->assign('type', $type); $this->assign('info', $info); $this->assign('warehouse', $warehouse); $this->assign('stock_name', $stock_name); $this->assign('store_name', $store_name); $this->assign('showPrice', self::$showPrice); $this->assign('identity', self::$identity); $this->assign("global_store_jurisdiction", self::$global_store_jurisdiction); $this->display(); } //出库记录串号列表 public function detailSerialList() { $data = I('post.'); $data['user_type'] = 4; $data['serial_type'] = 3; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->recordSerialList($data); $this->ajaxReturn($result); } //出库详情 public function detailsList() { $data = I('post.'); $data['user_type'] = 4; $OutboundOrderClass = new OutboundOrder(); $result = $OutboundOrderClass->detailList($data); $this->ajaxReturn($result); } /* * 商户入库详情 */ public function warehouseInfo() { $arr = array( 'exportOperation' => '/index.php/Retail/SStockOutOrder/warehouseInfoExport', ); $authArr = checkFunction($arr); $this->assign('authArr', $authArr); $id = I("get.id"); $type = I("get.type"); $goods_to_name = I("get.goods_to_name"); $transfer_to_store_id = I('get.transfer_to_store_id'); $m_warehouse_id = D('SStockOutGoods')->getFindField(array('stock_out_id' => $id), "warehouse_record_id"); if ($type == 1) { //商户入库 $mWarehouseInfo = D('WarehousingRecord')->getFind(array('id' => $m_warehouse_id)); $mWarehouseInfo['add_time'] = date('Y-m-d H:i:s', $mWarehouseInfo['add_time']); $warehouse = D('SaleWarehouse')->getFindField(array('id' => $mWarehouseInfo['warehouse_id']), "name"); } else if ($type == 3) { //门店入库 $mWarehouseInfo = D('SWarehousingRecord')->getFind(array('id' => $m_warehouse_id)); $mWarehouseInfo['add_time'] = date('Y-m-d H:i:s', $mWarehouseInfo['add_time']); $warehouse = D('SSaleWarehouse')->getFindField(array('id' => $mWarehouseInfo['warehouse_id']), "name"); } $mWarehouseInfo['remarks'] = str_replace("\n", "", $mWarehouseInfo['remarks']); $this->assign('info', $mWarehouseInfo); $this->assign('goods_to_name', $goods_to_name); $this->assign('warehouse', $warehouse); $this->assign('id', $m_warehouse_id); $this->assign('stock_id', $id); $this->assign('type', $type); $this->assign('showPrice', self::$showPrice); $this->assign('identity', self::$identity); $this->assign("global_store_jurisdiction", self::$global_store_jurisdiction); $this->display(); } //调拨出库的入库详情的串号列表 public function warehousingSerial() { $data = I('post.'); if ($data['type'] == 1) { $data['user_type'] = 3; } else { $data['user_type'] = 4; } unset($data['type']); $data['serial_type'] = 2; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->recordSerialList($data); $this->ajaxReturn($result); } public function WarehouseInfoList() { $id = I("post.id"); $type = I("post.type"); if ($type == 1) { //商户入库 $goodsList = D('WarehousingGoods')->getSelect(array('warehouse_record_id' => $id)); } else if ($type == 3) { //门店入库 $goodsList = D('SWarehousingGoods')->getSelect(array('warehouse_record_id' => $id)); } $StockRecordClass = new StockRecord(); $stateResult = $StockRecordClass->addStockOutInitial([ 'store_id' => $this->store_id ]); $cost_price_state = $stateResult['data']; if ($goodsList) { foreach ($goodsList as $key => &$val) { if ($val['attribute_state'] == 2) { $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; } $val['index'] = $key + 1; $val['sku_num'] = round($val['sku_num'], 3); $val['warehouse_num'] = round($val['warehouse_num'], 3); if ($cost_price_state == 2) { $val['warehouse_price'] = '***'; } else { $val['warehouse_price'] = round($val['warehouse_price'], 2); } $val['subtotal'] = round($val['subtotal'], 2); } } $res['status'] = 1; $res['data'] = $goodsList; $this->ajaxReturn($res); } /* * *************************************************操作****************************************************** */ /*门店出库操作 * @param $merchant_id 商户id * @param $store_id 门店id * @param $operator_id 操作人id * @param $user_type 1商户 2门店 3收银员 * @param $warehouse_id 出库仓库id * @param $remarks 备注 * @param $type 0其他出库 1向商户退货出库 2盘亏出库 3调拨出库 * @param $goodsList 出库商品 * @param $transfer_id 调拨至目标门店id */ public function StockOutOperation() { $data = I('post.'); $data['user_type'] = 4; $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $data['operator_id'] = session("jurisdiction_user")['id']; $result = A('Api/Inventory')->stockOut($data); if ($result['status'] == 1) { //操作日志记录 $source = 0;//请求来源: 0pc系统 1小助手 $type = 4;//平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST);//请求参数 json数据 $desc = '出库单-新增';//操作行为描述 action_log($source, $type, $request_data, $desc); } $this->ajaxReturn($result); } //导出 public function export() { $content = I("get."); $content['merchant_id'] = session("ls_userinfo")['merchantid']; $content['store_id'] = session("storeid"); $content['operator_type'] = 1; //web端 $outboundOrder = new OutboundOrder(); $result = $outboundOrder->getStoreStockOrderList($content); $fileds_name = "出库单导出"; $arr = array( array('index', '序号'), array('operator', '操作人'), array('add_time', '出库时间'), array('warehouse_time', '入库时间'), array('order_number', '出库单号'), array('warehouse_name', '出库仓库'), array('type_name', '出库类型'), array('goods_to_name', '货至'), array('goods_species', '出库商品种数'), array('total_cost_price', '出库成本价'), array('money_total', '出库价'), array('real_goods_species', '实收商品种数'), array('real_total_cost_money', '实收成本价'), array('real_money_total', '实收金额'), array('difference_money', '实收盈亏金额'), array('refuse_goods_species', '拒收商品种数'), array('refuse_total_cost_money', '拒收成本价'), array('refuse_total_stock_money', '拒收出库价'), array('remarks', '备注'), array('warehousing_name', '货至状态'), ); $str = $fileds_name . ',导出日期:' . date('Y-m-d H:i:s', time()); getExcel($fileds_name, $arr, $result['data']['list'], $str); } //出库导出 public function detailsExport() { $id = I('get.id'); $type = I("get.type"); $where['id'] = $id; $info = D('SStockOutOrder')->getFind($where); $info['add_time'] = date('Y-m-d H:i:s', $info['add_time']); $warehouse = D('SSaleWarehouse')->getFindField(array('id' => $info['warehouse_id']), "name"); switch ($type) { case 0: $stock_name = "其他出库"; break; case 1: $stock_name = "退货至商户出库"; break; case 2: $stock_name = "盘亏出库"; break; case 3: $stock_name = "调拨出库"; $store_name = D('Store')->getStoreName(array('id' => $info['transfer_to_store_id'])); break; case 9: $stock_name = "退货至供货商出库"; $store_name = D("SSupplier")->getFindField(array('id' => $info['supplier_id']), "supplier_name"); break; } $store_name = $store_name ? $store_name : ""; $where = array(); $where['stock_out_id'] = $id; $detailsList = D('SStockOutGoods')->getSelect($where, $page = '', $limit = '', $fields = '', 'id asc'); if ($detailsList) { foreach ($detailsList as $key => &$val) { $val['index'] = $key + 1; $val['stock_num'] = strval(round($val['stock_num'], 3)); if (self::$showPrice == 2 && self::$identity == 2) { $val['stock_price'] = "***"; $val['subtotal'] = "***"; } else { $val['stock_price'] = strval(round($val['stock_price'], 2)); $val['subtotal'] = strval(round($val['subtotal'], 2)); } $val['sku_num'] = strval(round($val['sku_num'], 3)); if ($val['attribute_state'] == 2) { $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; } $val['build_date'] = $val['build_date'] ? date('Y-m-d', $val['build_date']) : ''; } } if (self::$showPrice == 2 && self::$identity == 2) { $info['money_total'] = "***"; } $fileds_name = "出库详情导出"; $arr = array( array('index', '序号'), array('goods_name', '商品名称'), array('sku_name', '规格'), array('goods_number', '货号'), array('goods_code', '条码'), array('company', '单位'), array('sku_num', '规格基数'), array('build_date', '生产日期'), array('quality_guarantee_period', '保质期'), array('stock_price', '出库价'), array('stock_num', '数量'), array('subtotal', '合计'), array('remarks', '备注'), ); $str = array(); $str[0] = $fileds_name . ',导出日期:' . date('Y-m-d H:i:s', time()); if ($type == 3 || $type == 9) { $str[1] = '出库单号:' . $info['order_number'] . ' 出货仓库:' . $warehouse . " 类型:" . $stock_name . " 货至:" . $store_name; } else { $str[1] = '出库单号:' . $info['order_number'] . " 出货仓库:" . $warehouse . " 类型:" . $stock_name; } $str[2] = '出库时间:' . $info['add_time'] . " 合计:" . $info['goods_species'] . "种" . " 金额:" . strval($info['money_total']); $str[3] = "备注:" . $info['remarks']; detailGetExcel($fileds_name, $arr, $detailsList, $str); } //导出 public function warehouseInfoExport() { $id = I("get.id"); $type = I("get.type"); if ($type == 1) { //退货出库 $mWarehouseInfo = D('WarehousingRecord')->getFind(array('id' => $id)); $mWarehouseInfo['add_time'] = date('Y-m-d H:i:s', $mWarehouseInfo['add_time']); $warehouse = D('SaleWarehouse')->getFindField(array('id' => $mWarehouseInfo['warehouse_id']), "name"); } else if ($type == 3) { //调拨出库 $mWarehouseInfo = D('SWarehousingRecord')->getFind(array('id' => $id)); $mWarehouseInfo['add_time'] = date('Y-m-d H:i:s', $mWarehouseInfo['add_time']); $warehouse = D('SSaleWarehouse')->getFindField(array('id' => $mWarehouseInfo['warehouse_id']), "name"); } if ($type == 1) { //退货出库 $goodsList = D('WarehousingGoods')->getSelect(array('warehouse_record_id' => $id)); } else if ($type == 3) { //调拨出库 $goodsList = D('SWarehousingGoods')->getSelect(array('warehouse_record_id' => $id)); } if ($goodsList) { foreach ($goodsList as $key => &$val) { if ($val['attribute_state'] == 2) { $val['goods_code'] = $val['sku_code']; $val['goods_number'] = $val['sku_goods_number']; } $val['index'] = $key + 1; $val['sku_num'] = strval(round($val['sku_num'], 3)); $val['warehouse_num'] = strval(round($val['warehouse_num'], 3)); if (self::$showPrice == 2 && self::$identity == 2) { $val['warehouse_price'] = "***"; $val['subtotal'] = "***"; } else { $val['warehouse_price'] = strval(round($val['warehouse_price'], 2)); $val['subtotal'] = strval(round($val['subtotal'], 2)); } } } if (self::$showPrice == 2 && self::$identity == 2) { $mWarehouseInfo['real_money_total'] = "***"; } $fileds_name = "入库详情导出"; $arr = array( array('index', '序号'), array('goods_name', '商品名称'), array('sku_name', '规格'), array('goods_number', '货号'), array('goods_code', '条码'), array('company', '单位'), array('sku_num', '规格基数'), array('warehouse_price', '入库价'), array('warehouse_num', '数量'), array('subtotal', '合计'), array('remarks', '备注'), ); $str = array(); $str[0] = $fileds_name . ',导出日期:' . date('Y-m-d H:i:s', time()); $str[1] = '入库单号:' . $mWarehouseInfo['order_number'] . " 入库仓库:" . $warehouse . " 入库时间:" . $mWarehouseInfo['add_time']; $str[2] = "合计:" . $mWarehouseInfo['real_goods_species'] . "种" . " 金额:" . strval($mWarehouseInfo['real_money_total']); $str[3] = "备注:" . $mWarehouseInfo['remarks']; detailGetExcel($fileds_name, $arr, $goodsList, $str); } //拒收详情 public function refuseInfo() { $arr = array( 'exportOperation' => '/index.php/Retail/SStockOutOrder/refuseLisExport', ); $authArr = checkFunction($arr); $id = I("get.id"); $refuseInfo = new RefuseWarehousing(); $info = $refuseInfo->storeStockOrderRefuseInfo($id); //拒收详情 $this->assign('authArr', $authArr); $this->assign('global_store_jurisdiction', session("identity")); $this->assign('identity', session("global_store_jurisdiction")); $this->assign('id', $id); $this->assign('info', $info); $this->display(); } //拒收商品的串号列表 public function refuseSerial() { $data = I('post.'); $SerialClass = new SerialNumberGoods(); $result = $SerialClass->refuseSerialList($data); $this->ajaxReturn($result); } //拒收列表 public function refuseList() { $id = I("post.id"); $refuse = new RefuseWarehousing(); $list = $refuse->refuseOrderList($id, 2); $result = ['status' => 1, 'message' => '查询成功', 'data' => ['list' => $list]]; $this->ajaxReturn($result); } //拒收导出 public function refuseLisExport() { $id = I("get.id"); $refuse = new RefuseWarehousing(); $refuse->merchantRefuseInfoExport($id, 2); } }