admin_id; $staff_id = $this->staff_id; $keyword = $this->keyword; $centralize_goods_type = $this->centralize_goods_type; $query = AgentFrontCentralizeGoods::find()->alias('a') ->leftJoin(['s' => Supplier::tableName()], 's.cloud_supplier_id = a.supplier_id AND s.is_delete = 0') ->where(['a.is_delete' => 0, 'front_admin_id' => $admin_id]) ->andWhere(['>', 'a.goods_num', 0]); if (is_numeric($centralize_goods_type) && in_array($centralize_goods_type, [0, 1])) { $query->andWhere(['a.centralize_goods_type' => $centralize_goods_type]); } // if (!empty(trim($goods_no))) { // $query->andWhere(['LIKE', 'a.goods_no', trim($goods_no)]); // } if (!empty(trim($keyword))) { $query->andWhere(['OR', ['LIKE', 'a.goods_name', trim($keyword)], ['LIKE', 'a.goods_no', trim($keyword)]]); } if (intval($this->type)) { //查分拣记录 $driverLineOrderId = AgentFrontStaffOperateLog::find()->where(['operate_type' => AgentFrontStaffOperateLog::OPERATE_TYPE_GOODS_SORTING, 'staff_id' => $staff_id]) ->select('type_id')->column(); // $centralize_goods_id = DriverLineOrder::find()->where(['id' => $driverLineOrderId])->select('centralize_goods_id')->column(); $query->leftJoin(['ae' => AgentFrontCentralizeGoodsExt::tableName()], 'ae.centralize_goods_id = a.id'); $query->leftJoin(['dlo' => DriverLineOrder::tableName()], 'dlo.centralize_goods_ext_id = ae.id'); $query->leftJoin(['log' => AgentFrontStaffOperateLog::tableName()], 'log.type_id = dlo.id AND log.operate_type = ' . AgentFrontStaffOperateLog::OPERATE_TYPE_GOODS_SORTING ); $query->andWhere(['dlo.id' => $driverLineOrderId]); $query->select('a.goods_name, a.pic_url, a.goods_no, a.centralize_goods_type, a.goods_num as goods_num, a.sorting_num as a_sorting_num, a.attr_info, SUM(dlo.goods_num) as sorting_num, MAX(log.created_at) as created_at'); } else { $query->andWhere('a.goods_num > a.sorting_num')->andWhere(['a.status' => AgentFrontCentralizeGoods::STATUS_SORTING]); $query->select('a.id,a.goods_name, a.pic_url, a.goods_no, a.centralize_goods_type, a.goods_num, a.attr_info, a.sorting_num'); } $query->groupBy('a.id'); $query->orderBy(['a.id' => SORT_DESC]); $line_query = clone $query; // $sql = $query->groupBy('a.id')->orderBy(['a.id' => SORT_DESC])->createCommand()->getRawSql(); $list = pagination_make($query); // $list['sql'] = $sql; foreach ($list['list'] as &$item) { $item['centralize_goods_type'] = intval($item['centralize_goods_type']); $item['attr_info'] = json_decode($item['attr_info'], true); $item['order_num'] = AgentFrontCentralizeGoodsExt::find()->where(['centralize_goods_id' => $item['id'], 'is_delete' => 0]) ->select('goods_num')->sum('goods_num');//这里是下单数量 后期可能需要改动 $item['num'] = $item['goods_num'] - $item['sorting_num']; if (isset($item['created_at'])) { $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']); } } // $query = AgentFrontCentralizeGoods::find()->alias('a') // ->leftJoin(['ae' => AgentFrontCentralizeGoodsExt::tableName()], 'ae.centralize_goods_id = a.id') // ->where(['a.is_delete' => 0, 'a.front_admin_id' => $admin_id]); // // if (intval($this->type)) { // $driverLineOrderInfoArr = []; // // $type_id_arr = AgentFrontStaffOperateLog::find()->where(['operate_type' => AgentFrontStaffOperateLog::OPERATE_TYPE_GOODS_SORTING, // 'staff_id' => $staff_id])->select('type_id')->column(); //// if ($type_id_arr) { //// $driverLineOrderInfoArr = DriverLineOrder::find()->where(['id' => $type_id_arr]) //// ->select('centralize_goods_ext_id')->column(); //// } //// if (!empty($driverLineOrderInfoArr)) { //// $query->andWhere(['ae.id' => $driverLineOrderInfoArr]); //// } // $query->leftJoin(['dlo' => DriverLineOrder::tableName()], 'dlo.centralize_goods_ext_id = ae.id'); // $query->andWhere(['dlo.id' => $type_id_arr]); // $query->select('ae.goods_num as goods_num, dlo.goods_num as sorting_num, a.centralize_goods_type'); // } else { // $query->andWhere(['ae.status' => AgentFrontCentralizeGoodsExt::STATUS_WAIT_SORTING, 'a.status' => AgentFrontCentralizeGoods::STATUS_SORTING]) // ->select('ae.goods_num as goods_num, ae.sorting_num as sorting_num, a.centralize_goods_type'); // } $list['goods_sql'] = $line_query->createCommand()->getRawSql(); $agentFrontCentralizeGoods = $line_query->asArray()->all(); $list['md_goods'] = [ 'goods_num' => 0, 'sorting_num' => 0, ]; $list['line_goods'] = [ 'goods_num' => 0, 'sorting_num' => 0, ]; $list['agent_front_name'] = Admin::findOne($admin_id)->name; foreach ($agentFrontCentralizeGoods as $goods_item) { if ($goods_item['centralize_goods_type']) { $list['md_goods']['goods_num'] += $goods_item['goods_num'] ?? 0; $list['md_goods']['sorting_num'] += $goods_item['sorting_num'] ?? 0; } else { $list['line_goods']['goods_num'] += $goods_item['goods_num'] ?? 0; $list['line_goods']['sorting_num'] += $goods_item['sorting_num'] ?? 0; } } return [ 'code' => 0, 'msg' => '', 'data' => $list ]; } //获取单品分拣 public function getSortingGoodsDetail() { $id = $this->id; if (empty($id)) { return [ 'code' => 1, 'msg' => '参数错误' ]; } $info = AgentFrontCentralizeGoods::find()->where(['id' => $id]) ->select('goods_name, pic_url, goods_num, sorting_num, attr_info, goods_no, centralize_goods_type')->asArray()->one(); $query = AgentFrontCentralizeGoodsExt::find()->alias('a') ->leftJoin(['c' => AgentFrontCentralizeGoods::tableName()], 'a.centralize_goods_id = c.id') ->leftJoin(['md' => Md::tableName()], 'a.md_id = md.id') ->leftJoin(['mdb' => DriverMdBind::tableName()], 'a.md_id = mdb.md_id AND mdb.is_delete = 0') ->leftJoin(['d' => Driver::tableName()], 'mdb.driver_id = d.id') ->where(['a.centralize_goods_id' => $id, 'a.is_delete' => 0, 'a.status' => AgentFrontCentralizeGoodsExt::STATUS_WAIT_SORTING]); if (!intval($info['centralize_goods_type'])) {//线货 $query->groupBy('d.id')->select('GROUP_CONCAT(a.id) as id, SUM(a.goods_num) as goods_num, SUM(a.sorting_num) as sorting_num, c.goods_name, c.pic_url, c.goods_no, c.centralize_goods_type, c.attr_info, d.line_name, SUM(a.pre_sorting_num) as pre_sorting_num, a.md_id')->orderBy('a.id DESC'); } else {//团货 $query->select('a.id, a.goods_num, a.sorting_num, c.goods_name, c.pic_url, c.goods_no, c.centralize_goods_type, c.attr_info, d.line_name, a.pre_sorting_num, a.md_id, a.sort_key')->orderBy('a.sort_key ASC'); } $list = pagination_make($query); foreach ($list['list'] as &$item) { $item['centralize_goods_type'] = intval($item['centralize_goods_type']); $item['attr_info'] = json_decode($item['attr_info'], true); $item['num'] = $item['goods_num'] - $item['sorting_num'];//待分拣数量 // $item['order_num'] = $item['goods_num'];//这里是下单数量 后期可能需要改动 $item['line_name'] = $item['line_name'] ?? '未绑定线路'; $item['md_name'] = Md::findOne($item['md_id'])->name ?? ''; if (!empty($item['sort_key'])) { $item['md_name'] = $item['md_name'] . '[团货' . $item['sort_key'] . ']'; } } $info['attr_info'] = json_decode($info['attr_info'], true); $info['centralize_goods_type'] = intval($info['centralize_goods_type']); $list['info'] = $info; return [ 'code' => 0, 'msg' => '', 'data' => $list ]; } /** * 提交进度 */ public function submitSorting() { try { $params = json_decode($this->params, true); foreach ($params as $item) { $agentFrontCentralizeGoodsExt = AgentFrontCentralizeGoodsExt::findOne(['id' => $item['id'], 'status' => AgentFrontCentralizeGoodsExt::STATUS_WAIT_SORTING]); if (!$agentFrontCentralizeGoodsExt) { throw new \Exception('部分产品已经分拣完成'); } if ($item['num'] > ($agentFrontCentralizeGoodsExt->goods_num - $agentFrontCentralizeGoodsExt->sorting_num)) { throw new \Exception('分拣数量超出可分拣数量'); } $agentFrontCentralizeGoodsExt->pre_sorting_num = $item['num']; if (!$agentFrontCentralizeGoodsExt->save()) { throw new \Exception(implode(';', array_values($agentFrontCentralizeGoodsExt->firstErrors))); } } return [ 'code' => 0, 'msg' => '提交成功' ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } //商品查询 public function searchGoods() { $keyword = $this->keyword; $admin_id = $this->admin_id; $centralize_goods_type = $this->centralize_goods_type; $query = AgentFrontCentralizeGoods::find()->where(['front_admin_id' => $admin_id, 'is_delete' => 0]); if (!empty(trim($keyword))) { $query->andWhere(['OR', ['LIKE', 'goods_name', trim($keyword)], ['LIKE', 'goods_no', trim($keyword)]]); } if (is_numeric($centralize_goods_type) && in_array($centralize_goods_type, [0, 1])) { $query->andWhere(['a.centralize_goods_type' => $centralize_goods_type]); } $query->select('id, goods_name, attr_info, goods_no, goods_num, sorting_num, pic_url, created_at')->orderBy('id DESC'); $list = pagination_make($query); foreach ($list['list'] as &$item) { $item['md_count'] = AgentFrontCentralizeGoodsExt::find()->where(['centralize_goods_id' => $item['id'], 'is_delete' => 0]) ->groupBy('md_id')->count(); $item['attr_info'] = json_decode($item['attr_info'], true); $driverLineOrder = DriverLineOrder::find()->where(['centralize_goods_id' => $item['id']])->orderBy('id DESC') ->select('created_at')->asArray()->one(); if ($driverLineOrder) { $item['created_at'] = date('Y-m-d H:i:s', $driverLineOrder['created_at']); } else { $item['created_at'] = '暂未分拣'; } } return [ 'code' => 0, 'msg' => '', 'data' => $list ]; } //商品详情 public function goodsDetail() { $id = $this->id; $driver_id = $this->driver_id; if (!$id) { return [ 'code' => 1, 'msg' => '缺少参数' ]; } $keyword = $this->keyword; $status = $this->status; $query = AgentFrontCentralizeGoodsExt::find()->alias('a'); $query->leftJoin(['md' => Md::tableName()], 'a.md_id = md.id'); $query->leftJoin(['do' => DriverLineOrder::tableName()], 'a.id = do.centralize_goods_ext_id'); $query->leftJoin(['dl' => DriverLine::tableName()], 'dl.id = do.line_id'); $query->where(['a.centralize_goods_id' => $id, 'a.is_delete' => 0])->andWhere(['>', 'a.md_id', 0]); if (!empty(trim($keyword))) { $query->andWhere(['OR', ['LIKE', 'md.name', trim($keyword)], ['LIKE', 'do.line_no', trim($keyword)]]); } if ($status !== null && $status !== '' && in_array($status, [DriverLine::STATUS_WAIT, DriverLine::STATUS_FINISH])) { $query->andWhere(['do.status' => $status]); } if ($driver_id) { $query->andWhere(['dl.driver_id' => $driver_id]); } $query->select('a.id, a.goods_num, a.sorting_num, md.name, md.mobile, do.status, do.created_at'); $list = pagination_make($query); foreach ($list['list'] as &$item) { $item['status'] = intval($item['status']); $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']); } $agentFrontCentralizeGoods = AgentFrontCentralizeGoods::find()->where(['id' => $id]) ->select('id, goods_name, attr_info, goods_no, pic_url')->asArray()->one(); if ($agentFrontCentralizeGoods) { $agentFrontCentralizeGoodsExt = AgentFrontCentralizeGoodsExt::find()->where(['centralize_goods_id' => $agentFrontCentralizeGoods['id']]) ->select('created_at')->orderBy('id desc')->asArray()->one(); $driverLineOrder = DriverLineOrder::find()->where(['centralize_goods_id' => $agentFrontCentralizeGoods['id']])->orderBy('id DESC') ->select('created_at')->asArray()->one(); if ($driverLineOrder) { $agentFrontCentralizeGoods['created_at'] = date('Y-m-d H:i:s', $driverLineOrder['created_at']); } else { $agentFrontCentralizeGoods['created_at'] = '暂未分拣'; } $agentFrontCentralizeGoods['attr_info'] = json_decode($agentFrontCentralizeGoods['attr_info'], true); } $list['goods_info'] = $agentFrontCentralizeGoods; return [ 'code' => 0, 'msg' => '', 'data' => $list ]; } //获取单品分拣记录 public function getGoodsSortingRecord() { try { $id = $this->id; $driverLineOrder = DriverLineOrder::find()->where(['centralize_goods_id' => $id])->select('id, goods_num') ->asArray()->all(); $data = []; foreach ($driverLineOrder as $index => $item) { $data[$index]['goods_num'] = $item['goods_num']; $log = AgentFrontStaffOperateLog::findOne([ 'operate_type' => AgentFrontStaffOperateLog::OPERATE_TYPE_GOODS_SORTING, 'type_id' => $item['id'] ]); $data[$index]['created_at'] = date('Y-m-d H:i:s', $log->created_at); $admin = Admin::findOne($log->front_agent_admin_id); $data[$index]['nickname'] = $admin->name; if ($log->staff_id) { $staff = AgentFrontStaff::findOne($log->staff_id); if ($staff) { $saasUser = SaasUser::findOne($staff->saas_id); if ($saasUser) { $data[$index]['nickname'] = $saasUser->name; } } } } return [ 'code' => 0, 'msg' => '', 'data' => $data ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }