getSaleWarehouseId([ 'user_type' => 3, 'merchant_id' => $merchant_id ]); if (empty($warehouseResult['data'])) { return ['status' => 0, 'msg' => '请创建供给仓库']; } $warehouse_id = $warehouseResult['data']; } else { $warehouse_id = $param['warehouse_id']; } if (empty($id) || empty($goodsList) || empty($order_number) || empty($merchant_id) || empty($store_id)) { return ['status' => 0, 'msg' => '缺少必要参数']; } $time = $_SERVER['REQUEST_TIME']; $reg1 = "/^[0-9]+(.[0-9]{1,2})?$/"; $reg2 = "/^[0-9]+(.[0-9]{1,3})?$/"; $reg3 = "/^\+?[1-9][0-9]*$/"; try{ $SaleMGoodsModel = new SaleMGoodsModel(); foreach ($goodsList as $key => &$val) { if (!$val['warehouse_price']) { return ['status' => 0, 'msg' => $val['goods_name'] . $val['sku_name'] . '请输入正确价格']; } if (!preg_match($reg1, $val['warehouse_price'])) { return ['status' => 0, 'msg' => $val['goods_name'] . $val['sku_name'] . '请输入正确价格']; } if ($val['attribute_state'] == 1) { if ($val['pricing_method'] == 1) { //无称重 if (!preg_match($reg3, $val['warehouse_num'])) { return ['status' => 0, 'msg' => $val['goods_name'] . '请输入正确数量']; } } else { if (!preg_match($reg2, $val['warehouse_num'])) { return ['status' => 0, 'msg' => $val['goods_name'] . '请输入正确数量']; } } } else if ($val['attribute_state'] == 2) { if (!preg_match($reg3, $val['warehouse_num'])) { return ['status' => 0, 'msg' => $val['goods_name'] . $val['sku_name'] . '请输入正确数量']; } } if ($val['warehouse_num'] > $val['stock_num']) { return ['status' => 0, 'msg' => $val['goods_name'] . $val['sku_name'] . '入库数量不能大于辅助数量']; } $m_where = []; if ($val['attribute_state'] == 2) { //规格 $m_where['sku_goods_number'] = $val['sku_goods_number']; } else { //无规格 $m_where['goods_number'] = $val['goods_number']; } $m_where['status'] = array('in', '0,1'); $m_where['merchant_id'] = $merchant_id; $m_goods_count = $SaleMGoodsModel->getCount($m_where); if ($m_goods_count > 1) { return ['status' => 0, 'msg' => $val['goods_name'] . $val['sku_name'] . '存在货号相同的商品']; } else if ($m_goods_count == 1) { $m_goods_info = D('SaleMGoods')->getFind($m_where); if ($m_goods_info['attribute_state'] != $val['attribute_state']) { return ['status' => 0, 'msg' => $val['goods_name'] . $val['sku_name'] . '规格类型不同']; } //存在某商品 if ($val['attribute_state'] == 2) { if (empty($val['sku_id_list'])) { return ['status' => 0, 'msg' => $val['goods_name'] . $val['sku_name'] . '规格信息错误']; } $m_sku_ids = explode(',', $m_goods_info['sku_id_list']); $s_sku_ids = explode(',', $val['sku_id_list']); $sku_list_diff = array_diff($s_sku_ids, $m_sku_ids); if (!empty($sku_list_diff)) { return ['status' => 0, 'msg' => '商品' . $val['goods_name'] . $val['sku_name'] . '与门店' . '规格不同']; } } } else { return ['status' => 0, 'msg' => '未能通过' . $val['goods_name'] . $val['sku_name'] . '商品货号找到此商品']; } $m_goods_code_count = 0; //相同条码的商品数 if ($val['attribute_state'] == 2) { if (!empty($val['sku_code'])) { unset($m_where['sku_goods_number']); $m_where['sku_code'] = $val['sku_code']; $m_goods_code_count = D('SaleMGoods')->getCount($m_where); } } else { if (!empty($val['goods_code'])) { unset($m_where['goods_number']); $m_where['goods_code'] = $val['goods_code']; $m_goods_code_count = D('SaleMGoods')->getCount($m_where); } } if ($m_goods_code_count > 1) { return ['status'=>0,'msg'=>'商品' . $val['goods_name'] . $val['sku_name'] . '与门店' . '存在条码重复']; } //串号信息判断 if($val['serial_number_state'] == 1 && count($val['serial_list']) != $val['warehouse_num']){ return ['status'=>0,'msg'=>'入库数量与串号信息不匹配']; } } //操作 M()->startTrans(); $WarehousingGoodsModel = new WarehousingGoodsModel(); $SerialClass = new SerialNumberGoods(); $money_total = 0; foreach ($goodsList as $key => &$val) { $m_where = []; if ($val['attribute_state'] == 2) { $m_where['sku_goods_number'] = $val['sku_goods_number']; } else { $m_where['goods_number'] = $val['goods_number']; } $m_where['status'] = array('in', '0,1'); $m_where['merchant_id'] = $merchant_id; $m_goods_info = $SaleMGoodsModel->getFind($m_where); $data = [ 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'warehouse_id' => $warehouse_id, 'warehouse_record_id' => $id, 'goods_class_id' => $m_goods_info['goods_class_id'], 'goods_id' => $m_goods_info['goods_id'], 'goods_name' => $val['goods_name'], 'goods_number' => $m_goods_info['goods_number'], 'goods_code' => $m_goods_info['goods_code'], 'company' => $val['company'], 'attribute_state' => $m_goods_info['attribute_state'], 'pricing_method' => $m_goods_info['pricing_method'], 'sku_num' => round($val['sku_num'], 3), 'warehouse_price' => round($val['warehouse_price'], 2), 'warehouse_num' => round($val['warehouse_num'], 3), 'surplus_num' => round($val['warehouse_num'], 3), 'subtotal' => round($val['warehouse_price'] * $val['warehouse_num'], 2), 'remarks' => $val['remarks'], 'warehouse_order_number' => $order_number, 'type' => 4, 'add_time' => $time, 'serial_number_state'=>$val['serial_number_state']?$val['serial_number_state']:0 ]; if($m_goods_info['attribute_state'] == 2){ $data['sku_id'] = $m_goods_info['sku_id']; $data['sku_name'] = $val['sku_name']; $data['sku_id_list'] = $val['sku_id_list']; $data['sku_goods_number'] = $m_goods_info['sku_goods_number']; $data['sku_code'] = $m_goods_info['sku_code']; } $res = $WarehousingGoodsModel->addData($data); //入库记录 if ($res['status'] == 0) { M()->rollback(); return ['status'=>0,'msg'=>'入库记录添加失败']; } //串号信息 if($val['serial_number_state'] == 1){ $serialResult = $SerialClass->warehouseSerial([ 'user_type'=>3, 'merchant_id'=>$merchant_id, 'outside_id'=>$res['data'], 'goods_id'=>$m_goods_info['goods_id'], 'sku_id'=>$m_goods_info['sku_id'], 'type'=>4, 'add_time'=>$time, 'serial_list'=>$val['serial_list'] ]); if($serialResult['status'] != 1){ M()->rollback(); return ['status'=>0,'msg'=>'串号保存失败']; } } $money_total += $data['subtotal']; $map = [ 'merchant_id'=>$merchant_id, 'warehouse_id'=>$warehouse_id, 'goods_id'=>$m_goods_info['goods_id'] ]; if ($val['attribute_state'] == 2) { $map['sku_id'] = $m_goods_info['sku_id']; } $val['goods_id'] = $m_goods_info['goods_id']; $val['goods_class_id'] = $m_goods_info['goods_class_id']; $val['warehouse_num'] = round($val['warehouse_num'], 3); $val['warehouse_price'] = round($val['warehouse_price'], 2); $val['add_time'] = $time; A('Api/Inventory')->MerGoodsStockOperation($map, $val);//数量与成本价操作 } //门店入库单状态修改 $text = [ 'real_goods_species'=>count($goodsList), 'real_money_total'=>$money_total, 'add_time'=>$time, 'status'=>1, 'remarks'=>$param['remarks'], 'operator_id'=>$param['operator_id'] ]; $WarehousingRecordModel = new WarehousingRecordModel(); $success = $WarehousingRecordModel->updateData(array('id' => $id), $text); if (!$success) { M()->rollback(); return ['status'=>0,'msg'=>'订单状态修改失败']; } $SStockOutOrderModel = new SStockOutOrderModel(); $real_data = [ 'warehousing_status'=>1, 'warehouse_time'=>$time, 'real_goods_species'=>count($goodsList), 'real_money_total'=>$money_total, ]; $result = $SStockOutOrderModel->updateData(array('warehouse_record_id' => $id, 'type' => 1), $real_data); if ($result['status'] != 1) { M()->rollback(); return ['status'=>0,'msg'=>'商户调拨单状态修改失败']; } M()->commit(); return ['status'=>1,'msg'=>'操作成功']; }catch (\Exception $e){ return ['status'=>1,'msg'=>'操作失败']; } } /* *门店入库商品验证 (用于门店处理调拨进来的商品验证) *@param $merchant_id 商户id *@param $store_id 门店id *@param $goodsList 入库的商品信息 */ public function goodsListVerify($merchant_id, $store_id, $goodsList) { $reg1 = "/^[0-9]+(.[0-9]{1,2})?$/"; $reg2 = "/^[0-9]+(.[0-9]{1,3})?$/"; $reg3 = "/^\+?[1-9][0-9]*$/"; $goodsIds = array(); //未找到的商品信息 foreach ($goodsList as $key => $val) { if (!empty($val['quality_guarantee_period']) && !preg_match($reg3, $val['quality_guarantee_period'])) { $res['status'] = 0; $res['msg'] = $val['goods_name'] . "请输入正确保质期"; return $res; } if (!$val['warehouse_price']) { $res['status'] = 0; $res['msg'] = $val['goods_name'] . "请输入正确价格"; return $res; } if (!preg_match($reg1, $val['warehouse_price'])) { $res['status'] = 0; $res['msg'] = $val['goods_name'] . "请输入正确价格"; return $res; } if ($val['attribute_state'] == 1) { if (!preg_match($reg2, $val['warehouse_num'])) { $res['status'] = 0; $res['msg'] = $val['goods_name'] . "请输入正确数量"; return $res; } } else { if (!preg_match($reg3, $val['warehouse_num'])) { $res['status'] = 0; $res['msg'] = $val['goods_name'] . $val['sku_name'] . "请输入正确数量"; return $res; } } if ($val['warehouse_num'] > $val['stock_num']) { $res['status'] = 0; $res['msg'] = $val['goods_name'] . $val['sku_name'] . "入库数量不能大于辅助数量"; return $res; } $verifyResult = $this->goodsVerify($merchant_id, $store_id, $val); //单品验证 if ($verifyResult['status'] != 1) { return $verifyResult; } if (!empty($verifyResult['data']) && !in_array($goodsList[$key]['goods_id'], $goodsIds)) { array_push($goodsIds, $goodsList[$key]['goods_id']); } } if (!empty($goodsIds)) { $res['status'] = 3; $res['goodsIds'] = $goodsIds; $res['msg'] = "有" . count($goodsIds) . "条商品信息不存在,是否一键同步商品信息到门店"; return $res; } return callBack(statusCode()['success'], "验证成功"); } /** * 单品验证 * @param $merchant_id * @param $store_id * @param $goods_info * @return mixed */ public function goodsVerify($merchant_id, $store_id, $goods_info) { $where = []; $add_goods_id = ''; if ($goods_info['attribute_state'] == 2) { //规格 $where['sku_goods_number'] = $goods_info['sku_goods_number']; } else { //无规格 $where['goods_number'] = $goods_info['goods_number']; } $where['status'] = ['in', '0,1']; $where['store_id'] = $store_id; $where['merchant_id'] = $merchant_id; $SaleGoods = new SSaleMGoodsModel(); $s_goods_count = $SaleGoods->getCount($where); if ($s_goods_count > 1) { //货号相同 return callBack(statusCode()['error'], $goods_info['goods_name'] . $goods_info['sku_name'] . "存在货号相同的情况"); } else if ($s_goods_count == 1) { //存在这个货号的商品 $s_goods_info = $SaleGoods->getFind($where); if ($s_goods_info['attribute_state'] != $goods_info['attribute_state']) { return callBack(statusCode()['error'], $goods_info['goods_name'] . $goods_info['sku_name'] . "规格类型不同"); } if ($s_goods_info['serial_number_state'] != $goods_info['serial_number_state']) { return callBack(statusCode()['error'], $goods_info['goods_name'] . $goods_info['sku_name'] . "串号类型不同"); } $codeVerify = $this->codeVerify($merchant_id, $store_id, $goods_info, $s_goods_info); //货号条码验证 if ($codeVerify['status'] != 1) { return $codeVerify; } //规格属性验证 if ($goods_info['attribute_state'] == 2) { if (empty($goods_info['sku_id_list'])) { return callBack(statusCode()['error'], $goods_info['goods_name'] . $goods_info['sku_name'] . "规格信息错误"); } $s_sku_ids = explode(',', $s_goods_info['sku_id_list']); $m_sku_ids = explode(',', $goods_info['sku_id_list']); $sku_list_diff = array_diff($m_sku_ids, $s_sku_ids); if (!empty($sku_list_diff)) { return callBack(statusCode()['error'], '商品' . $goods_info['goods_name'] . $goods_info['sku_name'] . '与门店' . '规格属性不同'); } } } else { $codeVerify = $this->codeVerify($merchant_id, $store_id, $goods_info, []); //货号条码验证 if ($codeVerify['status'] != 1) { return $codeVerify; } $add_goods_id = $goods_info['goods_id']; } return callBack(statusCode()['success'], "验证成功", $add_goods_id); } /** * 条码验证 * @param $merchant_id * @param $store_id * @param $goods_info 入库的商品信息 * @param $s_goods_info 存在的商品信息 * @return mixed */ public function codeVerify($merchant_id, $store_id, $goods_info, $s_goods_info) { $where = [ 'status' => ['in', '0,1'], 'store_id' => $store_id, 'merchant_id' => $merchant_id ]; $s_goods_code_count = 0; $s_goods_number_count = 0; $SaleGoodsModel = new SSaleMGoodsModel(); if ($goods_info['attribute_state'] == 2) { if (!empty($s_goods_info)) { //已经存在该货号商品 $where['sku_id'] = array('neq', $s_goods_info['sku_id']); } //条码验证 if (!empty($goods_info['sku_code'])) { $where['sku_code'] = $goods_info['sku_code']; $s_goods_code_count = $SaleGoodsModel->getCount($where); } if (!empty($s_goods_info['sku_code']) && !empty($goods_info['sku_code']) && ($s_goods_info['sku_code'] != $goods_info['sku_code'])) { return callBack(statusCode()['error'], '商品' . $goods_info['goods_name'] . $goods_info['sku_name'] . '与门店' . '存在规格条码不一样'); } //货号验证 if (!empty($goods_info['sku_goods_number'])) { unset($where['sku_code']); $where['sku_goods_number'] = $goods_info['sku_goods_number']; $s_goods_number_count = $SaleGoodsModel->getCount($where); } if ($s_goods_number_count >= 1) { return callBack(statusCode()['error'], '商品' . $goods_info['goods_name'] . $goods_info['sku_name'] . '与门店' . '存在规格货号重复'); } if (!empty($s_goods_info['sku_goods_number']) && !empty($goods_info['sku_goods_number']) && ($s_goods_info['sku_goods_number'] != $goods_info['sku_goods_number'])) { return callBack(statusCode()['error'], '商品' . $goods_info['goods_name'] . $goods_info['sku_name'] . '与门店' . '存在规格货号不一样'); } } else { if (!empty($goods_info['goods_code'])) { $where['goods_code'] = $goods_info['goods_code']; if (!empty($s_goods_info)) { $where['goods_id'] = array('neq', $s_goods_info['goods_id']); } $s_goods_code_count = $SaleGoodsModel->getCount($where); } if (!empty($s_goods_info['goods_code']) && !empty($goods_info['goods_code']) && ($s_goods_info['goods_code'] != $goods_info['goods_code'])) { return callBack(statusCode()['error'], '商品' . $goods_info['goods_name'] . $goods_info['sku_name'] . '与门店' . '存在条码不一样'); } } if ($s_goods_code_count >= 1) { return callBack(statusCode()['error'], '商品' . $goods_info['goods_name'] . $goods_info['sku_name'] . '与门店' . '存在条码重复'); } return callBack(statusCode()['success'], "条码验证通过"); } }