storeStockOrderRefuseInfo($id); //拒收订单信息 } else { $info = $this->merchantStockOrderRefuseInfo($id); //拒收订单信息 } $goodsList = $this->refuseOrderList($id, $type); //拒收商品信息 $fileds_name = "拒收详情导出"; $arr = array( array('index', '序号'), array('goods_name', '商品名称'), array('sku_name', '规格'), array('goods_number', '货号'), array('goods_code', '条码'), array('company', '单位'), array('sku_num', '规格基数'), array('stock_price', '出库价'), array('refuse_num', '数量'), array('subtotal', '合计'), array('remarks', '备注'), ); $str = array(); $str[0] = $fileds_name . ',导出日期:' . date('Y-m-d H:i:s', time()); $str[1] = '出库单号:' . $info['order_number'] . " 出库仓库:" . $info['warehouse'] . " 类型:" . $info['stock_name'] . " 出货方:" . $info['supplier_name'] . " 货至:" . $info['store_name']; $str[2] = '操作时间:' . $info['refuse_time'] . " 合计:" . $info['refuse_goods_species'] . " 金额:" . strval($info['refuse_total_stock_money']); $str[3] = "备注:" . $info['remarks']; detailGetExcel($fileds_name, $arr, $goodsList, $str); } /** * 商户出库单的拒收详情 * @param $id 出库单id * @return array 出库单信息 */ public function merchantStockOrderRefuseInfo($id) { if (empty($id)) { return []; } try { $stockOrderModel = new StockOutOrderModel(); $warehouseModel = new SaleWarehouseModel(); $storeModel = new RetailStoreModel(); $merchantModel = new RetailMerchantModel(); $info = $stockOrderModel->getFind(array('id' => $id)); //出库订单详情 $warehouse = $warehouseModel->getFind(array('id' => $info['warehouse_id'])); //仓库名 $info['supplier_name'] = $merchantModel->getFindField(array('id' => $info['merchant_id']), "name"); $info['store_name'] = $storeModel->getFindField(array('id' => $info['store_id']), 'storetag'); $info['operator'] = A('Api/Inventory')->OperatorName($info['operator_id']); switch ($info['type']) { case 1: $info['stock_name'] = '调拨出库后门店拒收的商品'; break; case 3: $info['stock_name'] = '申请调拨出库后门店拒收的商品'; break; } $info['warehouse'] = $warehouse['name']; $info['refuse_total_stock_money'] = round($info['refuse_total_stock_money'], 2); $info['refuse_time'] = date('Y-m-d H:i:s', $info['refuse_time']); return $info; } catch (\Exception $e) { return []; } } /** * 门店出库单拒收详情 * @param $id * @return array */ public function storeStockOrderRefuseInfo($id) { if (empty($id)) { return []; } try { $stockOrderModel = new SStockOutOrderModel(); $warehouseModel = new SSaleWarehouseModel(); $storeModel = new RetailStoreModel(); $info = $stockOrderModel->getFind(array('id' => $id)); //出库订单详情 $warehouse = $warehouseModel->getFind(array('id' => $info['warehouse_id'])); //仓库名 $info['supplier_name'] = $storeModel->getFindField(array('id' => $info['store_id']), 'storetag'); $info['store_name'] = $storeModel->getFindField(array('id' => $info['transfer_to_store_id']), 'storetag'); $info['operator'] = A('Api/Inventory')->OperatorName($info['operator_id']); switch ($info['type']) { case 3: $info['stock_name'] = '其他门店调拨拒收的商品'; break; } $info['warehouse'] = $warehouse['name']; $info['refuse_total_stock_money'] = round($info['refuse_total_stock_money'], 2); $info['refuse_time'] = date('Y-m-d H:i:s', $info['refuse_time']); return $info; } catch (\Exception $e) { return []; } } /** * 拒收列表 * @param $id 出库单id * @param $type 1拒收商户 2拒收门店 * @return array 拒收商品信息 */ public function refuseOrderList($id, $type) { if (empty($id) || empty($type)) { return []; } switch ($type) { case 1: $where['type'] = array('in', '1,2'); //1拒收商户调拨 2拒收申请商户调拨 break; case 2: $where['type'] = 3; //3拒收门店调拨 break; } $where['stock_out_id'] = $id; try { $refuseGoodsModel = new RefuseWarehousingModel(); $list = $refuseGoodsModel->getSelect($where); if (!empty($list)) { foreach ($list as $key => &$val) { $val['index'] = $key + 1; 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['sku_num'] = round($val['sku_num'], 3); $val['refuse_num'] = round($val['refuse_num'], 3); $val['cost_price'] = round($val['cost_price'], 2); $val['stock_price'] = round($val['stock_price'], 2); $val['subtotal'] = round($val['subtotal'], 2); } } return $list; } catch (\Exception $e) { return []; } } /** * 门店直接拒绝调拨的入库单 * @param $parameter * [ * type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库], * stock_out_id=>出库单id * warehousing_id=>入库单id * store_id 门店id * merchant_id 商户id * ] * @return array * [ * status * message * data=>[ * lose=>原路返回失败的商品信息 * refuse_goods_species 拒收商品种数 * refuse_total_stock_money 拒收的出库总金额 * refuse_total_cost_money 拒收的出库成本总金额 * ] * ] */ public function refuseMerchantAllocation($parameter) { $verify = $this->paramVerify($parameter); //验证参数 if ($verify['status'] == 0) { return $verify; } $goodsList = $this->getStockOrderGoods($parameter); //获取出库单商品信息 if (empty($goodsList)) { return ['status' => 0, 'message' => '未找到商品信息']; } $parameter['goodsList'] = $goodsList; M()->startTrans(); $record = $this->refuseGoodsRecord($parameter); //将拒收的商品信息存入拒收记录表 if ($record['status'] != 1) { M()->rollback(); return ['status' => 0, 'message' => '操作失败']; } $lost = $record['data']['lose']; //存入失败的商品 $parameter['refuse_goods_species'] = $record['data']['refuse_goods_species']; //拒收的商品种数 $parameter['refuse_total_stock_money'] = $record['data']['refuse_total_stock_money']; //拒收的出库价合计金额 $parameter['refuse_total_cost_money'] = $record['data']['refuse_total_cost_money']; //拒收成本价 $this->modifyOrder($parameter); //修改出入库订单表 switch ($parameter['type']) { case 4: case 6: $result = $this->warehousingRecord($parameter); //拒收的商品原路返还商户仓库 break; case 5: //其他门店调拨 $SStockOrderModel = new SStockOutOrderModel(); $parameter['store_id'] = $SStockOrderModel->getFindField(array('id' => $parameter['stock_out_id']), "store_id"); $result = $this->storeWarehousingRecord($parameter); //拒收商品原路返回调拨门店的仓库 break; } M()->commit(); $result['data']['lose'] = array_merge($lost, $result['data']['lose']); $result['message'] = '拒收成功'; $result['data']['refuse_goods_species'] = $record['data']['refuse_goods_species']; $result['data']['refuse_total_stock_money'] = $record['data']['refuse_total_stock_money']; $result['data']['refuse_total_cost_money'] = $record['data']['refuse_total_cost_money']; return $result; } /** * 拒收的参数验证 * @param $parameter * [ * type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库], * stock_out_id=>出库单id * warehousing_id=>入库单id * ] * @return array * */ public function paramVerify($parameter) { if (empty($parameter['type']) || empty($parameter['stock_out_id']) || empty($parameter['warehousing_id']) || empty($parameter['store_id']) || empty($parameter['merchant_id']) || empty($parameter['operator_id'])) { return ['status' => 0, 'message' => '参数缺失']; } if (!in_array($parameter['type'], [4, 5, 6])) { return ['status' => 0, 'message' => '参数类型不符']; } return ['status' => 1, 'message' => '验证成功']; } /** * 商户出库单的商品信息 * @param $parameter * [ * stock_out_id=>出库单id * type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库] * ] * @return mixed array */ public function getStockOrderGoods($parameter) { try { $where = array(); $where['stock_out_id'] = $parameter['stock_out_id']; switch ($parameter['type']) { case 4: //商户调拨 $where['type'] = 1; $StockOutGoodsModel = new StockOutGoodsModel(); $goodsList = $StockOutGoodsModel->getSelect($where); $user_type = 3; break; case 5: $where['type'] = 3; $storeStockGoods = new SStockOutGoodsModel(); $goodsList = $storeStockGoods->getSelect($where); $user_type = 4; break; case 6: //申请调拨 $where['type'] = 3; $StockOutGoodsModel = new StockOutGoodsModel(); $goodsList = $StockOutGoodsModel->getSelect($where); $user_type = 3; break; } if (!empty($goodsList)) { $SerialClass = new SerialNumberGoods(); foreach ($goodsList as &$val) { //串号信息 if ($val['serial_number_state'] == 1) { $result = $SerialClass->recordSerialList([ 'user_type' => $user_type, 'id' => $val['id'], 'serial_type' => 3 ]); $val['serial_list'] = $result['data']['list']; } } } return $goodsList; } catch (\Exception $e) { return []; } } /** * 拒收商品存表操作 * @param $parameter * [ * stock_out_id=>出库单id, * warehousing_id=>入库单id, * type=>[ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库], * goodsList=>拒收商品信息(array) * ] * @return array * [data=>[ * lose=>存入失败商品信息, * refuse_goods_species=>拒收商品种数 * refuse_total_stock_money=>拒收出库总金额 * refuse_total_cost_money=>拒收出库时的成本总金额 * ] * ] */ public function refuseGoodsRecord($parameter) { $merchant_id = $parameter['merchant_id']; //商户id $store_id = $parameter['store_id']; //门店id $stock_out_id = $parameter['stock_out_id']; //出库单id $warehousing_id = $parameter['warehousing_id']; //入库单id $type = $parameter['type']; //拒绝的场景 $goodsList = $parameter['goodsList']; //拒收的商品信息 $time = $_SERVER['REQUEST_TIME']; switch ($type) { case 4: //拒收商户调拨 $refuse_type = 1; break; case 5: //其他门店调拨入库 $refuse_type = 3; break; case 6: //拒收申请调拨 $refuse_type = 2; break; } $RefuseModel = new RefuseWarehousingModel(); $SerialClass = new SerialNumberGoods(); $refuse_goods_species = 0; //拒收的商品种数 $refuse_total_stock_money = 0; //拒收出库价的金额 $refuse_total_cost_money = 0; //拒收总成本价 $lose = []; //存入失败的商品 foreach ($goodsList as $val) { $data = [ 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'stock_out_id' => $stock_out_id, 'warehouse_record_id' => $warehousing_id, 'goods_class_id' => $val['goods_class_id'], 'goods_id' => $val['goods_id'], 'goods_name' => $val['goods_name'], 'goods_number' => $val['goods_number'], 'goods_code' => $val['goods_code'], 'company' => $val['company'], 'attribute_state' => $val['attribute_state'], 'pricing_method' => $val['pricing_method'], 'cost_price' => $val['cost_price'], 'stock_price' => $val['stock_price'], 'refuse_num' => $val['stock_num'], 'subtotal' => round($val['stock_price'] * $val['stock_num'], 2), 'remarks' => $val['remarks'], 'type' => $refuse_type, 'add_time' => $time, 'serial_number_state' => $val['serial_number_state'] ? $val['serial_number_state'] : 0 ]; if ($val['attribute_state'] == 2) { $data['sku_id'] = $val['sku_id']; $data['sku_name'] = $val['sku_name']; $data['sku_id_list'] = $val['sku_id_list']; $data['sku_goods_number'] = $val['sku_goods_number']; $data['sku_code'] = $val['sku_code']; $data['sku_num'] = $val['sku_num'] ? $val['sku_num'] : 1; } $state = $RefuseModel->addData($data); if ($state['status'] == 0) { return ['status' => 0, 'msg' => '拒收商品保存失败']; } //串号信息 if ($val['serial_number_state'] == 1) { $serialResult = $SerialClass->refuseSerial([ 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'outside_id' => $state['data'], 'goods_id' => $val['goods_id'], 'sku_id' => $val['sku_id'] ? $val['sku_id'] : 0, 'type' => $refuse_type, 'add_time' => $time, 'serial_list' => $val['serial_list'] ]); if ($serialResult['status'] != 1) { return ['status' => 0, 'msg' => '拒收商品的串号信息保存失败']; } } $refuse_goods_species++; $refuse_total_stock_money += $data['subtotal']; $refuse_total_cost_money += round($data['cost_price'] * $val['stock_num'], 2); } $result = [ 'status' => 1, 'message' => '成功', 'data' => [ 'lose' => $lose, 'refuse_goods_species' => $refuse_goods_species, 'refuse_total_stock_money' => round($refuse_total_stock_money, 2), 'refuse_total_cost_money' => $refuse_total_cost_money ] ]; return $result; } /** * 更新出入库订单信息 * @param $parameter * [ * type 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库 * operator_id=>操作人id * refuse_goods_species=>拒收商品种树 * refuse_total_stock_money=>拒收出库总金额 * refuse_total_cost_money=>拒收出库总成本金额 * stock_out_id 出库单id * ] * @return array * [ * status * message * ] */ public function modifyOrder($parameter) { try { $warehousing_order = new SWarehousingRecordModel(); $data = array( 'operator_id' => $parameter['operator_id'], 'refuse_goods_species' => $parameter['refuse_goods_species'], 'refuse_total_stock_money' => $parameter['refuse_total_stock_money'], 'refuse_total_cost_money' => $parameter['refuse_total_cost_money'], 'refuse_time' => time(), 'refuse_status' => 2 ); switch ($parameter['type']) { case 4: case 6: $stock_order = new StockOutOrderModel(); $stock_order->updateData(array('id' => $parameter['stock_out_id']), $data); break; case 5: $storeStockOrder = new SStockOutOrderModel(); $storeStockOrder->updateData(array('id' => $parameter['stock_out_id']), $data); break; } $warehousing_order->updateData(array('id' => $parameter['warehousing_id']), $data); return ['status' => 1, 'message' => '更新成功']; } catch (\Exception $e) { //$parameter $e->getError(); 将异常信息存入日志文件 return ['status' => 0, 'message' => '更新失败']; } } /** * 商户入库(门店拒收的商品) * @param $parameter * [ * goodsList 拒收的商品信息 * merchant_id 商户id * type [ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库] * ] * @return mixed * [ * status * message * data=>[ * lose 入库存入失败的商品信息 * cost 成本价记录失败的商品信息 * moneyTotal 总入库金额 * ] * ] */ public function warehousingRecord($parameter) { $goodsList = $parameter['goodsList']; //商品信息 foreach ($goodsList as $key => &$val) { $val['warehouse_price'] = $val['cost_price']; $val['warehouse_num'] = $val['stock_num']; } $data = array( 'goodsList' => $goodsList, 'merchant_id' => $parameter['merchant_id'], ); switch ($parameter['type']) { case 4: //商户调拨入库 $data['type'] = 6; break; case 6: // 6门店申请调拨入库 $data['type'] = 7; break; } $result = A('Api/Inventory')->MerchantWarehousingRecord($data); //商户入库记录更新成本价 return $result; } /** * 调拨门店入库(门店拒收的商品) * @param $parameter * [ * goodsList 拒收的商品信息 * merchant_id 商户id * type [ 4商户调拨入库 5其他门店调拨入库 6门店申请调拨入库] * ] * @return mixed * [ * status * message * data=>[ * lose 入库存入失败的商品信息 * cost 成本价记录失败的商品信息 * moneyTotal 总入库金额 * ] * ] */ public function storeWarehousingRecord($parameter) { $goodsList = $parameter['goodsList']; //商品信息 foreach ($goodsList as $key => &$val) { $val['warehouse_price'] = $val['cost_price']; $val['warehouse_num'] = $val['stock_num']; } $data = array( 'goodsList' => $goodsList, 'merchant_id' => $parameter['merchant_id'], 'store_id' => $parameter['store_id'], ); switch ($parameter['type']) { case 5: //门店调拨拒收入库 $data['type'] = 21; break; } $result = A('Api/Inventory')->storeWarehousingGoodsOperation($data); //门店入库记录表添加成本价更新 return $result; } }