ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 扫描商品唯一码,判断唯一码是否符合发货条件 **位置:** Common\Lib\FlowLib.class.php **参数:** * @param $data array 订单信息(如:订单类型,订单ID) * @return array 判断唯一码返回提示信息 **调用:** * $flow = new FlowLib(); * $order_arr = $flow->scanGoods($data); **完整代码:** ~~~ /** * 扫描商品 * @param $data array 订单ID、发货位置ID、扫描的唯一码 * @return array 返回提示信息数组 * whz 2018-01-30 * */ public function scanGoods($data) { //1、判断唯一码是否存在 $exit_res = M("goods_no") ->where(array('no'=>$data['no'], 'is_delete'=>0)) ->select(); if (count($exit_res) == 0) { return array('success'=>false, 'code'=>201, 'msg'=>"此商品不存在或未入库,请重新扫描!"); } if ($data['del'] != 1) { if (in_array($data['no'],$data['no_arr'])) { return array('success'=>false, 'code'=>209, 'msg'=>'唯一码'.$data['no'].'已添加,请勿重复'); } } M()->startTrans(); //首次生成装箱单 if ($data['box_id'] == "" && $data['del'] != 1) { //2、装箱单ID没有生成,就是首次生成装箱单 $order_type = M('wms_flow') ->field('type') ->where(array('id'=>$data['id'])) ->find(); //商品部新建的订单(需要考虑扫描唯一码是否超过了SKU数量) if ($order_type['type'] == 1) { //第一步、计算SKU所属唯一码数(还没有封箱保存的) $sku_num = 0; //用来存储计算的数量(唯一码状态:未扫描) $sku = substr($data['no'],0,strlen($data['no'])-4); //当前扫描唯一码SKU //判断扫描唯一码是否在发货范围 $goods_id = M('wms_sku') ->field('id, num') ->where(array('type'=>$data['order_type'], 'order_id'=>$data['id'], 'sku'=>$sku)) ->find(); if (count($goods_id)<1) { return array('success'=>false, 'code'=>209, 'msg'=>'扫描的唯一码不在发货范围!'); } foreach ($data['sku_arr'] as $k => $v) { if($sku == $v){ $sku_num += 1; } } //第二步、统计已经封箱所属SKU唯一码数量(唯一码状态:已扫描) $sku_nums = M('wms_no') ->where(array('goods_id'=>$goods_id['id'], 'status'=>1, 'is_delete'=>0)) ->count(); //扫描唯一码数量是否超过要配SKU数量 if ($sku_num + $sku_nums >= $goods_id['num']) { return array('success'=>false, 'code'=>209, 'msg'=>'扫描的唯一码超过了发货SKU数量!'); } } } //3、勾选删除后伪删除唯一码 if ($data['del'] == 1) { $wheres['no'] = $data['no']; $wheres['status'] = 1; $wheres['type'] = $data['order_type']; $wheres['order_id'] = $data['id']; $wheres['is_delete'] = 0; //查询流通唯一码表保证当前扫描的商品已经扫描 $exit_num = M("wms_no") ->where($wheres) ->find(); if (count($exit_num)>0) { //(第一步、在流通唯一码表表里面删除要删的唯一码。2、要删的唯一码所属装箱单箱内商品数量减一) $del_num = M('wms_no') ->where(array('id'=>$exit_num['id'])) ->save(array('is_delete' => 1)); if ($del_num === false) { M()->rollback(); return array('success'=>false, 'code' => 205, 'msg'=>"唯一码伪删除失败!"); } //查询当前装箱单现在箱内商品数量 $num = M("wms_box") ->field('num,box_no') ->where(array('id'=>$data['box_id'])) ->find(); $edit_box = M("wms_box") ->where(array('id'=>$data['box_id'])) ->save(array('num'=>$num['num']-1)); if ($edit_box === false) { M()->rollback(); return array('success'=>false, 'code' => 206, 'msg'=>"装箱单数量更新失败!"); } //删除已经封箱的唯一码,还原商品状态 if ($data['order_type'] == 1 || $data['order_type'] == 4) { $delivery = 1; } if ($data['order_type'] == 2 || $data['order_type'] == 3) { $delivery = 2; } $status_no = M('goods_no') ->where(array('no'=>$data['no'], 'is_delete'=>0)) ->save(array('delivery_status'=>$delivery)); if ($status_no === false) { M()->rollback(); return array('success'=>false, 'code'=>206, 'msg'=>"唯一码状态改变失败!"); } //记录日志信息 $add_log['description'] = $data['no'] . "已从箱号:".$num['box_no'] . "拿出!"; $add_log['order_id'] = $data['id']; $add_log['type']= $data['order_type']; $log_add = $this->addLog($add_log); if(!$log_add){ M()->rollback(); return array('success'=>false, 'code'=>202, 'msg'=>'日志记录失败!'); } M()->commit(); return array('success'=>true, 'code'=>200, 'msg'=>$data['no'] . "已从箱号:" . $num['box_no'] . "拿出!", 'url'=>U('aview',array('id'=>$data['id'], 'box_id'=>$data['box_id']))); } else { return array('success'=>false, 'code'=>205, 'msg'=>"找不到该扫描商品,删除失败!"); } } else { //第一步:判断扫描唯一码是否已经扫描 $where['no'] = $data['no']; $where['is_delete'] = 0; $where['status'] = 1; $nos = M('wms_no') ->where($where) ->select(); if (count($nos)>0) { return array('success'=>false, 'code'=>205, 'msg'=>'唯一码' . $data['no'] . '已扫描,请勿重复'); } //第二步:判断扫描唯一码在发货位置是否存在,是否超过了发货数量 $res = $this->scansGoods($data['id'], $data['no']); if (!$res['success']) { return $res; } $array = $res['data']; return array('success'=>true, 'code'=>200, 'data'=>$array); } } ~~~