Jelajahi Sumber

公司列表、添加公司、删除公司、获取公司、更新公司详情

zhangnaiwen 2 tahun lalu
induk
melakukan
348050eb4c

+ 165 - 51
src/app/api/organization.py

@@ -1,76 +1,190 @@
 from flask import request, jsonify
 from flask_restx import Resource, Namespace, reqparse
+from sqlalchemy import select, insert, delete, update
+from sqlalchemy.orm import Session
+from werkzeug.datastructures import FileStorage
 
 from app.defines import StatesCode
+from app.database import engine
+from app.modle.organization import Company, Department
+from app.utils.to_dict import to_dict
 
 ns = Namespace('organization', description='组织管理接口')
 
+company_list = reqparse.RequestParser(bundle_errors=True)
+company_list.add_argument(name='page_size', type=int, location='args', required=False, help='每页记录数量,默认:20')
+company_list.add_argument(name='page', type=int, location='args', required=False, help='第几页')
 
-@ns.route('/organization_list')
-class OrganizationListApi(Resource):
-    # @ns.doc(id='get_organization_list', description='获取组织列表')
-    @ns.doc(id='get_corporation_list', description='获取公司列表')
-    @ns.expect()
+
+@ns.route('/company_list')
+class CompanyListApi(Resource):
+    @ns.doc(id='get_company_list', description='获取公司列表')
+    @ns.expect(company_list)
     def get(self):
-        """获取组织列表"""
-        data = [
-            {"name": "中讯邮电咨询设计院有限公司", "code": 4032, "corporate": "张三", "contacts": "张三",
-             "mobile": "13912345678"},
-            {"name": "北京电信设计院有限公司", "code": 9417, "corporate": "李四", "contacts": "李四",
-             "mobile": "13912345670"}
-        ]
-        return jsonify(code=StatesCode.SUCCESS, message='成功', data=data)
-
-@ns.route('/organization')
-class OrganizationApi(Resource):
-    @ns.doc(id='get_organization', description='搜索公司')
+        """获取公司列表"""
+
+        page_size = int(request.args.get('page_size', 20))
+        page = int(request.args.get('page', 1))
+
+        with Session(engine) as session:
+            stmt = select(Company).offset(page_size * (page - 1)).limit(page_size)
+            results = session.execute(stmt).scalars().all()
+
+        return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
+
+
+company_details = reqparse.RequestParser(bundle_errors=True)
+company_details.add_argument(name='id', type=int, location='form', required=False, help='id')
+company_details.add_argument(name='company_name', type=str, location='form', required=True, help='公司名')
+company_details.add_argument(name='logo', type=FileStorage, location='files', required=False, help='商标')
+company_details.add_argument(name='abbreviation', type=str, location='form', required=False, help='公司简称')
+company_details.add_argument(name='code', type=str, location='form', required=False, help='统一社会信用代码')
+company_details.add_argument(name='registered_address', type=str, location='form', required=False, help='注册地址')
+company_details.add_argument(name='business_address', type=str, location='form', required=False, help='经营地址')
+company_details.add_argument(name='legal_person_name', type=str, location='form', required=False, help='法人姓名')
+company_details.add_argument(name='company_code', type=str, location='form', required=False, help='公司编码')
+company_details.add_argument(name='staff_size', type=str, location='form', required=False, help='编制人数')
+company_details.add_argument(name='on_guard_size', type=str, location='form', required=False, help='在岗人数')
+
+delete_company = reqparse.RequestParser(bundle_errors=True)
+delete_company.add_argument(name='id', type=int, location='form', required=False, help='id')
+
+
+@ns.route('/company')
+class CompanyApi(Resource):
+    @ns.doc(id='get_company', description='搜索公司')
     @ns.expect()
     def get(self):
         """搜索公司"""
         return {"code": StatesCode.SUCCESS, "message": "成功", "data": '查询'}
 
-    @ns.doc(id='add_organization', description='添加公司')
-    @ns.expect()
+    @ns.doc(id='add_company', description='添加公司')
+    @ns.expect(company_details)
     def post(self):
         """添加公司"""
 
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": '添加公司'}
-
-    @ns.doc(id='delete_organization', description='添加公司')
-    @ns.expect()
+        company_name = request.form.get('company_name')
+        logo = request.files.get('logo')
+        if logo:
+            logo = logo.read()
+        abbreviation = request.form.get('abbreviation')
+        code = request.form.get('code')
+        registered_address = request.form.get('registered_address')
+        business_address = request.form.get('business_address')
+        legal_person_name = request.form.get('legal_person_name')
+        company_code = request.form.get('company_code')
+        staff_size = request.form.get('staff_size')
+        on_guard_size = request.form.get('on_guard_size')
+
+        if company_name is None:
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message="公司名不能为空")
+
+        with Session(engine) as session:
+            # 判断公司是否存在
+            stmt = select(Company).where(Company.company_name == company_name)
+            result = session.execute(stmt).scalars().first()
+            if result:
+                return jsonify(code=StatesCode.UNKNOWN_ERROR, message="公司已存在")
+
+            # 添加公司
+            session.execute(
+                insert(Company).values(
+                    company_name=company_name,
+                    logo=logo,
+                    abbreviation=abbreviation,
+                    code=code,
+                    registered_address=registered_address,
+                    business_address=business_address,
+                    legal_person_name=legal_person_name,
+                    company_code=company_code,
+                    staff_size=staff_size,
+                    on_guard_size=on_guard_size
+                )
+            )
+
+            session.commit()
+
+        return jsonify(code=StatesCode.SUCCESS, message='添加成功')
+
+    @ns.doc(id='delete_company', description='删除公司')
+    @ns.expect(delete_company)
     def delete(self):
         """删除公司"""
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": '删除公司'}
+        company_id = request.form.get('id')
 
+        if company_id is None:
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message="公司id不能为空")
 
-@ns.route('/organization_details')
-class OrganizationDetailsApi(Resource):
+        with Session(engine) as session:
+            stmt = select(Company).where(Company.id == company_id)
 
-    @ns.doc(id='get_organization_details', description='获取公司详情')
-    @ns.expect()
+            session.delete(session.execute(stmt).scalars().first())
+            session.commit()
+
+        return jsonify(code=StatesCode.SUCCESS, message="删除成功")
+
+
+get_company_details = reqparse.RequestParser(bundle_errors=True)
+get_company_details.add_argument(name='id', type=int, location='args', required=False, help='id')
+
+
+@ns.route('/company_details')
+class CompanyDetailsApi(Resource):
+
+    @ns.doc(id='get_company_details', description='获取公司详情')
+    @ns.expect(get_company_details)
     def get(self):
-        """获取organization组织详情"""
+        """获取公司详情"""
 
-        data = {
-            "full_name": "北京电信规划设计院有限公司",
-            "for_short": "北京规划院",
-            "superior_company": "中讯邮电咨询设计有限公司",
-            "credit_code": 9111111111,
-            "registered_address": "北京海淀区首体南路9号",
-            "business_address": "北京海淀区首体南路9号",
-            "corporate": "张三",
-            "company_code": 11111,
-            "authorized_strength": 222,
-            "staff_num": 100,
-        }
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": data}
+        company_id = request.args.get('id')
 
-    @ns.doc(id='update_organization_details', description='修改公司详情')
-    @ns.expect()
-    def put(self):
-        """更新organization组织详情"""
+        if company_id is None:
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message="公司id不能为空")
 
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": '修改公司详情'}
+        with Session(engine) as session:
+            stmt = select(Company).where(Company.id == company_id)
+            results = session.execute(stmt).scalars().all()
+
+        return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
+
+    @ns.doc(id='update_company_details', description='修改公司详情')
+    @ns.expect(company_details)
+    def put(self):
+        """更新公司详情"""
+        id = request.form.get('id')
+        company_name = request.form.get('company_name')
+        logo = request.files.get('logo')
+        if logo:
+            logo = logo.read()
+        abbreviation = request.form.get('abbreviation')
+        code = request.form.get('code')
+        registered_address = request.form.get('registered_address')
+        business_address = request.form.get('business_address')
+        legal_person_name = request.form.get('legal_person_name')
+        company_code = request.form.get('company_code')
+        staff_size = request.form.get('staff_size')
+        on_guard_size = request.form.get('on_guard_size')
+
+        if company_name is None:
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message="公司名不能为空")
+
+        with Session(engine) as session:
+            stmt = update(Company).where(Company.id == id).values(
+                company_name=company_name,
+                logo=logo,
+                abbreviation=abbreviation,
+                code=code,
+                registered_address=registered_address,
+                business_address=business_address,
+                legal_person_name=legal_person_name,
+                company_code=company_code,
+                staff_size=staff_size,
+                on_guard_size=on_guard_size
+            )
+            session.execute(stmt)
+            session.commit()
+
+        return jsonify(code=StatesCode.SUCCESS, message='修改成功')
 
 
 @ns.route('/department')
@@ -83,7 +197,7 @@ class DepartmentApi(Resource):
 
         return {"code": StatesCode.SUCCESS, "message": "成功", "data": '添加部门'}
 
-    @ns.doc(id='delete_organization_details', description='删除部门')
+    @ns.doc(id='delete_company_details', description='删除部门')
     @ns.expect()
     def delete(self):
         """删除部门"""
@@ -114,7 +228,7 @@ class DepartmentDetailsApi(Resource):
         }
         return {"code": StatesCode.SUCCESS, "message": "成功", "data": data}
 
-    @ns.doc(id='update_organization_details', description='修改部门详情')
+    @ns.doc(id='update_company_details', description='修改部门详情')
     @ns.expect()
     def put(self):
         """更新department部门详情"""
@@ -122,8 +236,8 @@ class DepartmentDetailsApi(Resource):
         return {"code": StatesCode.SUCCESS, "message": "成功", "data": '修改部门详情'}
 
 
-@ns.route('/batch_delete_organization')
-class BatchDeleteOrganizationApi(Resource):
+@ns.route('/batch_delete_company')
+class BatchDeletecompanyApi(Resource):
     @ns.doc(id='batch_delete_users', description='批量删除公司')
     @ns.expect()
     def delete(self):

+ 16 - 16
src/app/api/users.py

@@ -40,6 +40,7 @@ class GetUserListApi(Resource):
 
 
 add_user = reqparse.RequestParser(bundle_errors=True)
+add_user.add_argument(name='id', type=str, required=True, location='form', help='用户id')
 add_user.add_argument(name='username', type=str, required=True, location='form', help='用户名')
 add_user.add_argument(name='password', type=str, required=True, location='form', help='密码')
 add_user.add_argument(name='photograph', type=str, required=False, location='form', help='照片')
@@ -161,21 +162,20 @@ class UsersApi(Resource):
 user_details = reqparse.RequestParser(bundle_errors=True)
 user_details.add_argument(name='id', type=int, required=True, location='args', help='用户id')
 
-user_details_update = reqparse.RequestParser(bundle_errors=True)
-user_details_update.add_argument(name='id', type=str, required=True, location='form', help='用户id')
-user_details_update.add_argument(name='username', type=str, required=False, location='form', help='用户名')
-user_details_update.add_argument(name='password', type=str, required=False, location='form', help='密码')
-user_details_update.add_argument(name='photograph', type=str, required=False, location='form', help='照片')
-user_details_update.add_argument(name='name', type=str, required=False, location='form', help='姓名')
-user_details_update.add_argument(name='phone', type=str, required=False, location='form', help='电话')
-user_details_update.add_argument(name='email', type=str, required=False, location='form', help='邮箱')
-user_details_update.add_argument(name='company', type=str, required=False, location='form', help='公司')
-user_details_update.add_argument(name='department', type=str, required=False, location='form', help='部门')
-user_details_update.add_argument(name='role', type=str, required=False, location='form', help='角色')
-user_details_update.add_argument(name='permission', type=str, required=False, location='form', help='权限')
-user_details_update.add_argument(name='on_job_status', type=str, required=False, location='form', help='在职状态')
-user_details_update.add_argument(name='duty', type=str, required=False, location='form', help='职务')
-user_details_update.add_argument(name='nationality', type=str, required=False, location='form', help='国籍')
+# user_details_update = reqparse.RequestParser(bundle_errors=True)
+# user_details_update.add_argument(name='username', type=str, required=False, location='form', help='用户名')
+# user_details_update.add_argument(name='password', type=str, required=False, location='form', help='密码')
+# user_details_update.add_argument(name='photograph', type=str, required=False, location='form', help='照片')
+# user_details_update.add_argument(name='name', type=str, required=False, location='form', help='姓名')
+# user_details_update.add_argument(name='phone', type=str, required=False, location='form', help='电话')
+# user_details_update.add_argument(name='email', type=str, required=False, location='form', help='邮箱')
+# user_details_update.add_argument(name='company', type=str, required=False, location='form', help='公司')
+# user_details_update.add_argument(name='department', type=str, required=False, location='form', help='部门')
+# user_details_update.add_argument(name='role', type=str, required=False, location='form', help='角色')
+# user_details_update.add_argument(name='permission', type=str, required=False, location='form', help='权限')
+# user_details_update.add_argument(name='on_job_status', type=str, required=False, location='form', help='在职状态')
+# user_details_update.add_argument(name='duty', type=str, required=False, location='form', help='职务')
+# user_details_update.add_argument(name='nationality', type=str, required=False, location='form', help='国籍')
 
 
 @ns.route('/user_details')
@@ -196,7 +196,7 @@ class GetUsersApi(Resource):
         return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
 
     @ns.doc(id='update_users_details', description='更新用户详情')
-    @ns.expect(user_details_update)
+    @ns.expect(add_user)
     def put(self):
         """更新用户详情"""
 

+ 41 - 0
src/app/modle/organization.py

@@ -0,0 +1,41 @@
+from sqlalchemy import String, Column, Integer, DateTime, Text, ForeignKey
+from sqlalchemy.orm import relationship
+
+from app.modle import Base
+
+
+class Company(Base):
+    """公司表"""
+
+    __tablename__ = "company"
+
+    id = Column(Integer, primary_key=True, autoincrement=True, nullable=False, unique=True, doc='id')
+    company_name = Column(String, nullable=False, unique=True, index=False, doc='公司名')
+    logo = Column(String, nullable=True, unique=False, index=False, doc='商标')
+    abbreviation = Column(String, nullable=True, unique=False, index=False, doc='公司简称')
+    code = Column(Integer, nullable=True, unique=False, index=False, doc='统一社会信用代码')
+    registered_address = Column(String, nullable=True, unique=False, index=False, doc='注册地址')
+    business_address = Column(String, nullable=True, unique=False, index=False, doc='经营地址')
+    legal_person_name = Column(String, nullable=True, unique=False, index=False, doc='法人姓名')
+    company_code = Column(Integer, nullable=True, unique=False, index=False, doc='公司编码')
+    staff_size = Column(Integer, nullable=True, unique=False, index=False, doc='编制人数')
+    on_guard_size = Column(Integer, nullable=True, unique=False, index=False, doc='在岗人数')
+    department = relationship('Department', cascade='all, delete-orphan')
+
+
+class Department(Base):
+    """部门表"""
+
+    __tablename__ = "department"
+
+    id = Column(Integer, primary_key=True, autoincrement=True, nullable=False, unique=True, doc='id')
+    company_id = Column(Integer, ForeignKey(Company.id), doc='上级公司')
+    department_name = Column(String, nullable=False, unique=False, index=False, doc='部门名')
+    principal = Column(String, nullable=True, unique=False, index=False, doc='负责人')
+    liaison_officer = Column(String, nullable=True, unique=False, index=False, doc='接口人')
+    Duplicate_name = Column(String, nullable=True, unique=False, index=False, doc='拍重名')
+    on_guard = Column(Integer, nullable=True, unique=False, index=False, doc='在岗人数')
+    freelance_staff = Column(Integer, nullable=True, unique=False, index=False, doc='自由员工')
+    cooperation_staff = Column(Integer, nullable=True, unique=False, index=False, doc='协作员工')
+    thirdparty_staff = Column(Integer, nullable=True, unique=False, index=False, doc='第三方员工')
+    censure = Column(Text, nullable=True, unique=False, index=False, doc='职责')

+ 2 - 2
src/app/modle/users.py

@@ -1,6 +1,6 @@
 from datetime import datetime
-import time
-from sqlalchemy import create_engine, String, Column, Integer, DateTime
+
+from sqlalchemy import String, Column, Integer, DateTime
 from werkzeug.security import check_password_hash, generate_password_hash
 
 from app.modle import Base

+ 2 - 1
src/app/utils/to_dict.py

@@ -4,6 +4,7 @@ def to_dict(results):
     for result in results:
         result_dict = result.__dict__
         del result_dict['_sa_instance_state']
-        result_dict['register_time'] = result_dict.get('register_time').strftime("%Y-%m-%d %H:%M:%S")
+        if result_dict.get('register_time'):
+            result_dict['register_time'] = result_dict.get('register_time').strftime("%Y-%m-%d %H:%M:%S")
         data.append(result_dict)
     return data