access_token; } /* * @Title: 拉取部位 * @Description: TODO */ protected function getOriginalNext($costsystem_deptcode, $deptcode, $token) { $response = Http::withVerify(false)->post('https://cbgl.sxlq.com:8090/Api/Engineering/WbsApi/GetAllWbs?access_token=' . $token . '&PageSize=' . $this->pageSize . '&Page=' . $this->pageIndex . '&MainProjectCode=' . $costsystem_deptcode); $res = $response->json(); if ($res->errcode == 1) { return sparkSuccess(dataReturn(0, $res->errmsg)); } if (empty($res->Objects)) { return sparkSuccess(dataReturn(0, '获取完毕')); } $resArr = json_decode(json_encode($res->Objects), true); $selectedKeys = [ 'MainWbsId' => 'usedpart_wbs', 'MainParentId' => 'usedpart_parent_wbs', 'MainParentCode' => 'main_parent_code', 'MainProjectCode' => 'deptcode', 'MainCode' => 'code', 'MainName' => 'name', 'MainUnit' => 'main_unit', 'Amount' => 'amount', 'Price' => 'price', 'Value' => 'value', 'PlanBeginDate' => 'plan_start_time', 'PlanEndDate' => 'plan_end_time', 'ActualBeginDate' => 'actual_begin_date', 'ActualEndDate' => 'actual_end_date', 'EstimatedEndDate' => 'estimated_end_date', 'ParentName' => 'parent_name', 'FullId' => 'full_id', 'FullName' => 'full_name', 'LevelNo' => 'level', 'FullOrderNo' => 'full_order_no', 'IsLeaf' => 'is_leaf', 'IsUnitWbs' => 'is_calculate', 'FinishAmount' => 'finish_amount', 'Remark' => 'remark' ]; $extractedData = []; foreach ($resArr as $item) { $extractedItem = []; foreach ($selectedKeys as $key => $value) { if (isset($item[$key])) { //因为成本控制系统的deptcode编码有一部分跟主数据不一样,我们做了映射查询,但是当存在我们数据库之后,还是按照主数据库正确的组织编码来存,所以需要对deptcode单独来出来 if ($value == 'deptcode') { $extractedItem[$value] = $deptcode; } else { $extractedItem[$value] = $item[$key]; } } else { $extractedItem[$value] = ''; } } $extractedData[] = $extractedItem; } (new Usedpart)->insertOrIgnore($extractedData); unset($response); unset($res); unset($resArr); unset($selectedKeys); unset($extractedData); unset($extractedItem); $this->pageIndex++; $this->getOriginalNext($costsystem_deptcode, $deptcode, $token); } /* * @Title: 同步部位 * @Description: TODO */ public function getOriginal() { $token = $this->getAuth(); $org = (new AdminOrg)->getInfoById(get_current_org_id()); $usedPartModel = new Usedpart(); $usedPartModel->where('deptcode', $org['deptcode'])->delete(); //因为成本控制系统的deptcode与主数据的deptcode有一部分一致,有一部分不一致,所以建了一个成本系统的deptcode映射字段costsystem_deptcode,采用这个字段从成本系统拉 if (!empty($org['costsystem_deptcode'])) { $this->getOriginalNext($org['costsystem_deptcode'], $org['deptcode'], $token); } return sparkSuccess(dataReturn(0, '同步完毕')); } /* * @Title: 部位的查询 * @Description: TODO */ public function index(Request $request) { if (request()->isAjax()) { $param = request()->all(); $adminOrgModel = new AdminOrg(); $where = []; $usedPartModel = new Usedpart(); $name = isset($param['name']) ? $param['name'] : ''; if (!empty($name)) { $where[] = ['name', 'like', '%' . $name . '%']; } $node_id = $param['node_id']; $org = $adminOrgModel->getInfoById(get_current_org_id()); if (!empty($node_id)) { $where[] = ['usedpart_parent_wbs', '=', $node_id]; $where[] = ['deptcode', '=', $org['deptcode']]; } else { $where[] = ['usedpart_parent_wbs', '=', 0]; $where[] = ['deptcode', '=', $org['deptcode']]; } $list = $usedPartModel->where($where) ->paginate(10); return sparkSuccess(dataReturn(0, 'success', $list)); } $adminOrgModel = new AdminOrg(); $list = $adminOrgModel->get()->toArray(); $adminOrg = $adminOrgModel->getInfoById(get_current_org_id(), ['pid', 'name']); $parentNameString = get_parent_name_string($list, $adminOrg['pid']); $where[] = ['usedpart_parent_wbs', '=', 0]; $org = $adminOrgModel->getInfoById(get_current_org_id()); $where[] = ['deptcode', '=', $org['deptcode']]; $usedPartModel = new Usedpart(); $nodesAdd = $nodes = $usedPartModel->where($where) ->get()->toArray(); $firstNode = [ "usedpart_wbs" => 0, 'usedpart_parent_wbs' => -1, "name" => $adminOrg['name'], 'is_calculate' => 0 ]; array_unshift($nodes, $firstNode); array_unshift($nodesAdd, $firstNode); // dump(makeTreeUsedpart($nodes)); View::assign([ 'parentNameString' => $parentNameString . $adminOrg['name'], 'nodes' => json_encode(makeTreeUsedpart($nodes)), 'nodesAdd' => json_encode(makeTreeUsedpart($nodesAdd)), 'org_id' => get_current_org_id() ]); return view('safebasic/usedpart/index'); } /* * @Title: 部位的添加 * @Description: 部位的添加 */ public function store() { $param = request()->post(); $usedPartModel = new Usedpart(); $param['org_id'] = get_current_org_id(); $usedPartModel->insertOne($param); return sparkSuccess(dataReturn(0, '添加成功')); } /* * @Title: 部位的编辑 * @Description: 部位的编辑 */ public function update() { $param = request()->post(); $usedPartModel = new Usedpart(); $usedPart = $usedPartModel->getInfoById($param['pid'], ['pid', 'name']); if (empty($usedPart)) { $adminOrgModel = new AdminOrg(); $adminOrg = $adminOrgModel->getInfoById(get_current_org_id(), ['pid', 'name']); return sparkSuccess(dataReturn(0, 'success', $adminOrg['name'])); } return sparkSuccess(dataReturn(0, 'success', $usedPart['name'])); } /* * @Title: 部位编辑 * @Description: 部位编辑 */ public function updatePost() { $param = request()->post(); $usedPartModel = new Usedpart(); $usedPartModel->updateById($param, $param['id']); // 同步下级状态 if ($param['is_sync_sub_status'] == 1) { $list = $usedPartModel->get()->toArray(); $childrenIds = get_children_id($list, $param['id']); $usedPartModel->updateByIds(['status' => $param['status']], $childrenIds); } return sparkSuccess(dataReturn(0, '编辑成功')); } /* * @Title: 部位删除 * @Description: TODO */ public function destroy() { $param = request()->get(); $usedPartModel = new Usedpart(); // 删除所有下级 $list = $usedPartModel->get()->toArray(); $childrenIds = get_children_id($list, $param['id']); $usedPartModel->delById($param['id']); $usedPartModel->delByIds($childrenIds); return sparkSuccess(dataReturn(0, '删除成功')); } /* * @Title: 部位子节点 * @Description: TODO */ public function getChildrens() { $param = request()->get(); $usedPartModel = new Usedpart(); $where[] = ['usedpart_parent_wbs', '=', $param['id']]; $org = (new AdminOrg)->getInfoById(get_current_org_id()); $where[] = ['deptcode', '=', $org['deptcode']]; $list = $usedPartModel->where($where) ->get()->toArray(); return sparkSuccess(dataReturn(0, 'success', $list)); } /* * @Title: 模板下载 * @Description: TODO */ public function download() { return redirect('/storage/static/工号模板.xlsx'); } /* * @Title: 部位导入 * @Description: TODO */ public function import() { $param = request()->all(); // 获取最大usedpart_wbs $orgCurrent = getOrg(get_current_org_id()); $latest = (new Usedpart) ->where('deptcode', '=', $orgCurrent['deptcode']) ->latest('id') ->value('usedpart_wbs'); $plus = (int)$latest + 1; // 基本处理 foreach ($param as $k => $v) { $param[$k]['level'] = strlen($v['code']) / 2; $param[$k]['usedpart_wbs'] = $plus++; $param[$k]['deptcode'] = $orgCurrent['deptcode']; } // 关系处理 foreach ($param as $k => $v) { $param[$k]['usedpart_parent_wbs'] = $this->setParent($param, $v['code']); } // code处理 foreach ($param as $k => $v) { $param[$k]['code'] = rtrim(preg_replace('/(.{2})/', '$1-', $v['code']), '-'); } (new Usedpart)->insertOrIgnore($param); return sparkSuccess(dataReturn(0, '导入成功')); } protected function setParent($param, $code) { foreach ($param as $k => $v) { if ($v['code'] == substr($code, 0, -2)) { $temp = $v['usedpart_wbs']; break; } else { $temp = 0; break; } } return $temp; } }