Ejemplo n.º 1
0
 def test_add_patient(self):
     new_user = User("*****@*****.**", "123456")
     new_user.type = UserStatus.patent
     User.save(new_user)
     new_patient = Patient(new_user.id)
     Patient.save(new_patient)
     new_userrole = UserRole(new_user.id, RoleId.Patient)
     UserRole.save(new_userrole)
Ejemplo n.º 2
0
 def test_add_patient(self):
     new_user = User("*****@*****.**", "123456")
     new_user.type = UserStatus.patent
     User.save(new_user)
     new_patient = Patient(new_user.id)
     Patient.save(new_patient)
     new_userrole = UserRole(new_user.id, RoleId.Patient)
     UserRole.save(new_userrole)
Ejemplo n.º 3
0
def generatorPdf(diagnoseId):

    diagnose=Diagnose.getDiagnoseById(diagnoseId)
    if session.has_key('userId'):
        userId=session['userId']
    if userId is None:
        return redirect('/loginPage')

    resHtml = None

    if UserRole.checkRole(db_session,userId,constant.RoleId.Patient) and Patient.is_patient_under_user(int(userId),diagnose.patientId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if UserRole.checkRole(db_session,userId,constant.RoleId.Admin) and (int(userId) == diagnose.adminId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if UserRole.checkRole(db_session,userId,constant.RoleId.Doctor) and (int(userId) == diagnose.doctorId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if UserRole.checkRole(db_session,userId,constant.RoleId.HospitalUser) and (int(userId) == diagnose.uploadUserId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if resHtml:
        return resHtml
    else:
        return redirect('/error')
Ejemplo n.º 4
0
def getPatientFile(patientId):
    userId = None
    if session.has_key('userId'):
        userId = session['userId']
    if userId is None:
        return redirect(LOGIN_URL)

    if patientId is None or patientId < 0:
        return jsonify(FAILURE)
    patient = Patient.get_patient_by_id(patientId)
    if patient is None or patient.userID != string.atoi(userId):
        return jsonify(FAILURE)

    pathologs = Pathology.getByPatientId(patientId)
    files = []
    if pathologs and len(pathologs) > 0:
        for patholog in pathologs:
            files.extend(File.getFilebypathologyId(patholog.id),
                         constant.FileType.FileAboutDiagnose)
    fileResults = None
    if len(files) > 0:
        fileResults = dataChangeService.getFilesResult(files)
    resultStatus = rs.ResultStatus(rs.SUCCESS.status, rs.SUCCESS.msg,
                                   fileResults)
    return jsonify(resultStatus.__dict__)
Ejemplo n.º 5
0
def patient_profile():
    patientId = request.args['patientId']
    patient = Patient.get_patient_by_id(patientId)
    resultStatus = rs.ResultStatus(rs.SUCCESS.status, rs.SUCCESS.msg, patient.__dict__)
    if patient is None:
        return jsonify(resultStatus.__dict__)
    resultStatus.data = dataChangeService.get_patient(patient)
    return jsonify(resultStatus.__dict__)
Ejemplo n.º 6
0
def applyDiagnose():

    if session.has_key('userId'):
        userId = session['userId']
    if userId is None:
        return redirect('/loginPage')

    data = {}
    hospitals = Hospital.getAllHospitals(db_session)
    hospitalsDict = object2dict.objects2dicts(hospitals)
    data['hospitals'] = hospitalsDict

    positions = Position.getPositions()
    positionsDict = object2dict.objects2dicts(positions)
    data['positions'] = positionsDict

    locations = Location.getAllLocations(db_session)
    locationsDict = object2dict.objects2dicts(locations)
    data['locations'] = locationsDict

    #hospital user
    if 'type' in request.args.keys():
        data['type'] = int(request.args.get('type'))
    if 'edit' in request.args.keys() and 'diagnoseid' in request.args.keys():
        new_diagnose = Diagnose.getDiagnoseById(request.args['diagnoseid'])
        data['edit'] = 1
    else:
        new_diagnose = Diagnose.getNewDiagnoseByStatus(ModelStatus.Draft,
                                                       session['userId'])

    if new_diagnose is not None:
        data['doctor'] = new_diagnose.doctor
        data['patient'] = new_diagnose.patient
        data['pathology'] = new_diagnose.pathology

        new_file = File.getFiles(new_diagnose.pathologyId,
                                 constant.FileType.Dicom)
        data['dicomfile'] = new_file
        new_files = File.getFiles(new_diagnose.pathologyId,
                                  constant.FileType.FileAboutDiagnose)
        data['fileAboutDiagnose'] = new_files

        pathologyPositions = []
        if hasattr(new_diagnose, 'pathology') and hasattr(
                new_diagnose.pathology, 'pathologyPostions'):
            pathologyPositions = object2dict.objects2dicts(
                new_diagnose.pathology.pathologyPostions)
        data['pathologyPositions'] = pathologyPositions

    patients = Patient.get_patient_by_user(session['userId'])
    if patients is None or len(patients) < 1:
        patientdict = []
    else:
        patientdict = object2dict.objects2dicts(patients)

    data['patientdict'] = patientdict

    return render_template("applyDiagnose.html", result=data)
Ejemplo n.º 7
0
def updateReport():

    userId = session['userId']
    user = User.getById(userId)
    if user is None:
        return json.dumps(rs.NO_DATA.__dict__, ensure_ascii=False)

    # if UserRole.checkRole(db_session,userId,constant.RoleId.Doctor):
    #     return  json.dumps(rs.PERMISSION_DENY.__dict__,ensure_ascii=False)

    form = ReportForm(request.form)

    patient_id = Diagnose.get_patientID_by_diagnoseID(form.diagnoseId)
    identity_Phone = Patient.get_identityPhone_by_patientID(patient_id)
    #identityPhone = Patient.get_identityPhone_by_patientID(patient_id)[0].decode(encoding='UTF-8')

    identityPhone = identity_Phone[0]
    #print(identityPhone)

    if form.reportId:
        #session['remember_me'] = form.remember_me.data
        # login and validate the user...
        if form.status and form.status == constant.ReportStatus.Commited:

            #first update based on form , then generate html
            Report.update(reportId=form.reportId,
                          techDesc=form.techDesc,
                          imageDesc=form.imageDesc,
                          diagnoseDesc=form.diagnoseDesc)
            # fileUrl=pdf_utils.generatorPdf(form.diagnoseId, identityPhone)#需要先生存文檔上傳到服務器,獲取url
            fileUrl = pdf_utils.generatorHtml(form.diagnoseId, identityPhone)
            if fileUrl:
                report = Report.update(form.reportId,
                                       constant.ReportType.Doctor, form.status,
                                       fileUrl, form.techDesc, form.imageDesc,
                                       form.diagnoseDesc)
                Diagnose.changeDiagnoseStatus(
                    form.diagnoseId, constant.DiagnoseStatus.Diagnosed)
                #需要給用戶發信和記錄操作日誌
                diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
                sendMessageAndRecordLog(diagnose, userId)
            else:
                return json.dumps(rs.FAILURE.__dict__, ensure_ascii=False)
        else:
            fileUrl = None  #這是草稿,不需要生存文檔

            diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            if diagnose is None:
                return json.dumps(rs.NO_DATA.__dict__, ensure_ascii=False)
            report = Report.update(form.reportId, constant.ReportType.Doctor,
                                   form.status, fileUrl, form.techDesc,
                                   form.imageDesc, form.diagnoseDesc)
            recordDiagnoseLog(diagnose, userId)

        return json.dumps(rs.SUCCESS.__dict__, ensure_ascii=False)
    return json.dumps(rs.FAILURE.__dict__, ensure_ascii=False)
Ejemplo n.º 8
0
def patient_profile():
    if 'patientId' in request.args.keys():
        patientId = request.args['patientId']
        patient = Patient.get_patient_by_id(patientId)
        resultStatus = rs.ResultStatus(rs.SUCCESS.status, rs.SUCCESS.msg,
                                       patient.__dict__)
        if patient is None:
            return jsonify(resultStatus.__dict__)
        resultStatus.data = dataChangeService.get_patient(patient)
        return jsonify(resultStatus.__dict__)
    return jsonify(SUCCESS.__dict__)
Ejemplo n.º 9
0
def applyDiagnose():

    if session.has_key('userId'):
        userId=session['userId']
    if userId is None:
        return redirect('/loginPage')

    data = {}
    hospitals = Hospital.getAllHospitals(db_session)
    hospitalsDict = object2dict.objects2dicts(hospitals)
    data['hospitals'] = hospitalsDict

    positions = Position.getPositions()
    positionsDict = object2dict.objects2dicts(positions)
    data['positions'] = positionsDict

    locations = Location.getAllLocations(db_session)
    locationsDict = object2dict.objects2dicts(locations)
    data['locations'] = locationsDict


    if 'edit' in request.args.keys() and 'diagnoseid' in request.args.keys():
        new_diagnose = Diagnose.getDiagnoseById(request.args['diagnoseid'])
        data['edit'] = 1
    else:
        new_diagnose = Diagnose.getNewDiagnoseByStatus(ModelStatus.Draft, session['userId'])

    if new_diagnose is not None:
        data['doctor'] = new_diagnose.doctor
        data['patient'] = new_diagnose.patient
        data['pathology'] = new_diagnose.pathology

        new_file = File.getFiles(new_diagnose.pathologyId, constant.FileType.Dicom)
        data['dicomfile'] = new_file
        new_files = File.getFiles(new_diagnose.pathologyId, constant.FileType.FileAboutDiagnose)
        data['fileAboutDiagnose'] = new_files

        pathologyPositions = []
        if hasattr(new_diagnose, 'pathology') and hasattr(new_diagnose.pathology, 'pathologyPostions'):
            pathologyPositions = object2dict.objects2dicts(new_diagnose.pathology.pathologyPostions)
        data['pathologyPositions'] = pathologyPositions


    patients = Patient.get_patient_by_user(session['userId'])
    if patients is None or len(patients) < 1:
        patientdict = []
    else:
        patientdict = object2dict.objects2dicts(patients)

    data['patientdict'] = patientdict

    return render_template("applyDiagnose.html", result=data)
Ejemplo n.º 10
0
 def test_addPatient(self):
     user=User('liclu','15210892443','123456')
     user.sex=0
     user.status=0
     user.email='*****@*****.**'
     user.address='四川省 通江县'
     user.phone = '15210892443'
     User.save(user)
     patient=Patient()
     patient.gender=0
     patient.Name='程成'
     patient.status=0
     patient.userID=user.id
     Patient.save(patient)
     new_userrole = UserRole(user.id, RoleId.Patient)
     UserRole.save(new_userrole)
Ejemplo n.º 11
0
def updateReport():

    userId=session['userId']
    user=User.getById(userId)
    if user is None:
        return  json.dumps(rs.NO_DATA.__dict__,ensure_ascii=False)

    # if UserRole.checkRole(db_session,userId,constant.RoleId.Doctor):
    #     return  json.dumps(rs.PERMISSION_DENY.__dict__,ensure_ascii=False)

    form =  ReportForm(request.form)

    patient_id = Diagnose.get_patientID_by_diagnoseID(form.diagnoseId)
    identity_Phone = Patient.get_identityPhone_by_patientID(patient_id)
    #identityPhone = Patient.get_identityPhone_by_patientID(patient_id)[0].decode(encoding='UTF-8')

    identityPhone = identity_Phone[0]
    #print(identityPhone)

    if form.reportId:
        #session['remember_me'] = form.remember_me.data
        # login and validate the user...
        if form.status and form.status==constant.ReportStatus.Commited:


            #first update based on form , then generate html
            Report.update(reportId=form.reportId,techDesc=form.techDesc,imageDesc=form.imageDesc,diagnoseDesc=form.diagnoseDesc)
            # fileUrl=pdf_utils.generatorPdf(form.diagnoseId, identityPhone)#需要先生存文檔上傳到服務器,獲取url
            fileUrl=pdf_utils.generatorHtml(form.diagnoseId, identityPhone)
            if fileUrl:
                report=Report.update(form.reportId,constant.ReportType.Doctor,form.status,fileUrl,form.techDesc,form.imageDesc,form.diagnoseDesc)
                Diagnose.changeDiagnoseStatus(form.diagnoseId,constant.DiagnoseStatus.Diagnosed)
                #需要給用戶發信和記錄操作日誌
                diagnose=Diagnose.getDiagnoseById(form.diagnoseId)
                sendMessageAndRecordLog(diagnose,userId)
            else:
                return json.dumps(rs.FAILURE.__dict__,ensure_ascii=False)
        else:
            fileUrl=None#這是草稿,不需要生存文檔

            diagnose=Diagnose.getDiagnoseById(form.diagnoseId)
            if diagnose is None:
                return  json.dumps(rs.NO_DATA.__dict__,ensure_ascii=False)
            report=Report.update(form.reportId,constant.ReportType.Doctor,form.status,fileUrl,form.techDesc,form.imageDesc,form.diagnoseDesc)
            recordDiagnoseLog(diagnose,userId)

        return json.dumps(rs.SUCCESS.__dict__,ensure_ascii=False)
    return json.dumps(rs.FAILURE.__dict__,ensure_ascii=False)
Ejemplo n.º 12
0
def getPatientFile(patientId):
    userId=None
    if session.has_key('userId'):
        userId=session['userId']
    if userId is None:
        redirect(LOGIN_URL)

    if patientId is None or patientId<0 :
        return  jsonify(FAILURE)
    patient=Patient.get_patient_by_id(patientId)
    if patient is None or patient.userID!=string.atoi(userId):
        return  jsonify(FAILURE)

    pathologs=Pathology.getByPatientId(patientId)
    files=[]
    if pathologs and len(pathologs)>0:
       for patholog in pathologs:
           files.extend(File.getFilebypathologyId(patholog.id),constant.FileType.FileAboutDiagnose)
    fileResults=None
    if len(files)>0:
        fileResults=dataChangeService.getFilesResult(files)
    resultStatus = rs.ResultStatus(rs.SUCCESS.status, rs.SUCCESS.msg, fileResults)
    return jsonify(resultStatus.__dict__)
Ejemplo n.º 13
0
    def test_addSuperUser(self):
        user=User('zhoufan','13426026573','123456')
        user.sex=0
        user.status=0
        user.email='*****@*****.**'
        user.address='四川省 通江县'
        user.phone = '13426026573'
        user.type = UserStatus.doctor
        user.name = "张西"
        User.save(user)


        patient=Patient()
        patient.gender=0
        patient.Name='zf'
        patient.status=0
        patient.userID=user.id
        Patient.save(patient)
        new_userrole = UserRole(user.id, RoleId.Patient)
        UserRole.save(new_userrole)

        new_doctor_1 = Doctor(user.id)
        new_doctor_1.identityPhone = "029-12345567"
        new_doctor_1.username = "******"
        new_doctor_1.diagnoseCount = 10
        new_doctor_1.feedbackCount = 5
        new_doctor_1.goodFeedbackCount = 5
        new_doctor_1.hospitalId = 1
        new_doctor_1.departmentId = 1
        new_doctor_1.title = "副主任医师"
        new_doctor_1.status = 0


        Doctor.save(new_doctor_1)
        new_doctor2skill_1_1 = Doctor2Skill(new_doctor_1.id,1)
        Doctor2Skill.save(new_doctor2skill_1_1)
        new_userrole1 = UserRole(user.id, RoleId.Doctor)
        UserRole.save(new_userrole1)
        new_userrole2 = UserRole(user.id, RoleId.Admin)
        UserRole.save(new_userrole2)
Ejemplo n.º 14
0
def generatorPdf(diagnoseId):

    diagnose = Diagnose.getDiagnoseById(diagnoseId)
    if session.has_key('userId'):
        userId = session['userId']
    if userId is None:
        return redirect('/loginPage')

    resHtml = None

    if UserRole.checkRole(
            db_session, userId,
            constant.RoleId.Patient) and Patient.is_patient_under_user(
                int(userId), diagnose.patientId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if UserRole.checkRole(db_session, userId,
                          constant.RoleId.Admin) and (int(userId)
                                                      == diagnose.adminId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if UserRole.checkRole(db_session, userId,
                          constant.RoleId.Doctor) and (int(userId)
                                                       == diagnose.doctorId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if UserRole.checkRole(
            db_session, userId,
            constant.RoleId.HospitalUser) and (int(userId)
                                               == diagnose.uploadUserId):
        resHtml = renderHtmlFromDiagnose(diagnose)

    if resHtml:
        return resHtml
    else:
        return redirect('/error')
Ejemplo n.º 15
0
def applyDiagnoseForm(formid):
    if (int(formid) == 1) :
        form = DiagnoseForm3(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:
            if(form.diagnoseId):
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(DiagnoseStatus.Draft, session['userId'])
            if(new_diagnose is None):
                new_diagnose = Diagnose()
                new_diagnose.status = DiagnoseStatus.Draft

            new_diagnose.doctorId = form.doctorId
            new_diagnose.uploadUserId = session['userId']

            Diagnose.save(new_diagnose)
            form_result.data = {'formId': 2, 'diagnoseId': new_diagnose.id}
        return jsonify(form_result.__dict__)
    elif (int(formid) == 2) :
        form = DiagnoseForm1(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:
            if form.diagnoseId is not None:
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(DiagnoseStatus.Draft, int(session['userId']))
            if(new_diagnose is not None):
                # 去拿没有draft的用户
                if(form.exist):
                    new_patient = Patient.get_patient_by_id(form.patientid)
                else:
                    new_patient = Patient.get_patient_draft(new_diagnose.patientId)
                if new_patient is None:
                    new_patient = Patient()
                    new_patient.type = PatientStatus.diagnose
                    new_patient.userID = session['userId']
                    new_patient.realname = form.patientname
                    new_patient.gender = form.patientsex
                    new_patient.birthDate = datetime.strptime(form.birthdate, "%Y-%m-%d")
                    new_patient.identityCode = form.identitynumber
                    new_patient.locationId = form.locationId
                    new_patient.identityPhone = form.phonenumber
                    new_patient.status = ModelStatus.Draft
                    # new_patient.locationId = form.location
                    Patient.save(new_patient)
                new_diagnose.patientId = new_patient.id
                Diagnose.save(new_diagnose)

                # Hospital User 注册用户
                if(form.isHospitalUser):
                    new_user = User(form.phonenumber, random.sample('zyxwvutsrqponmlkjihgfedcba1234567890',6), False)
                    new_user.type = UserStatus.patent
                    new_user.status = ModelStatus.Draft
                    User.save(new_user)
                    new_patient.userID = new_user.id
                    Patient.save(new_patient)
                    new_userrole = UserRole(new_user.id, RoleId.Patient)
                    UserRole.save(new_userrole)

                form_result.data = {'formId': 3, }
            else:
                form_result = ResultStatus(FAILURE.status, "找不到第一步草稿")
        return jsonify(form_result.__dict__)
    elif (int(formid) == 3):
        form = DiagnoseForm2(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:

            if form.diagnoseId is not None:
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(DiagnoseStatus.Draft, int(session['userId']))

            if new_diagnose is not None:

                if form.exist:
                    new_pathology = Pathology.getById(form.pathologyId)
                elif new_diagnose.pathologyId:
                    new_pathology = Pathology.getById(new_diagnose.pathologyId)
                else:
                    new_pathology = Pathology.getByPatientStatus(session['userId'], ModelStatus.Draft)

                if new_pathology is None:
                    new_pathology = Pathology(new_diagnose.patientId)

                new_pathology.diagnoseMethod = form.dicomtype
                new_pathology.status = ModelStatus.Draft
                new_pathology.save(new_pathology)

                PathologyPostion.deleteByPathologyId(new_pathology.id)
                for position in form.patientlocation:
                    new_position_id = PathologyPostion(new_pathology.id, position)
                    PathologyPostion.save(new_position_id)

                File.cleanDirtyFile(form.fileurl, new_pathology.id, FileType.Dicom)
                for fileurl in form.fileurl:
                    new_file = File.getFilebyId(int(fileurl))
                    new_file.pathologyId = new_pathology.id
                    File.save(new_file)

                new_diagnose.pathologyId = new_pathology.id
                Diagnose.save(new_diagnose)
                form_result.data = {'formId': 4}
            else:
                form_result = ResultStatus(FAILURE.status, "找不到上步的草稿")
        return jsonify(form_result.__dict__)
    elif (int(formid) == 4):
        form = DiagnoseForm4(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:
            if form.diagnoseId is not None:
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(DiagnoseStatus.Draft, int(session['userId']))
            if(new_diagnose is not None):
                new_pathology = Pathology.getById(new_diagnose.pathologyId)
                if(new_pathology is not None):
                    new_pathology.caseHistory = form.illnessHistory
                    new_pathology.hospitalId = form.hospitalId
                    new_pathology.status = ModelStatus.Normal
                    Pathology.save(new_pathology)

                    File.cleanDirtyFile(form.fileurl, new_pathology.id, FileType.FileAboutDiagnose)
                    for fileurl in form.fileurl:
                        new_file = File.getFilebyId(int(fileurl))
                        new_file.pathologyId = new_pathology.id
                        File.save(new_file)

                    new_patient = Patient.get_patient_by_id(new_diagnose.patientId)
                    new_patient.status = PatientStatus.diagnose
                    new_diagnose.status = DiagnoseStatus.NeedPay
                    Diagnose.save(new_diagnose)
                    new_diagnoselog = DiagnoseLog(new_diagnose.uploadUserId, new_diagnose.id, DiagnoseLogAction.NewDiagnoseAction)
                    DiagnoseLog.save(db_session, new_diagnoselog)
                else:
                    form_result = ResultStatus(FAILURE.status, "找不到上步的草稿1")
            else:
                form_result = ResultStatus(FAILURE.status, "找不到上步的草稿2")
        form_result.data = {'isFinal': True}
        return jsonify(form_result.__dict__)
    else:
        return jsonify(ResultStatus(FAILURE.status, "错误的表单号").__dict__)
Ejemplo n.º 16
0
def applyDiagnoseForm(formid):
    if (int(formid) == 1):
        form = DiagnoseForm3(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:
            if (form.diagnoseId):
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(
                    DiagnoseStatus.Draft, session['userId'])
            if (new_diagnose is None):
                new_diagnose = Diagnose()
                new_diagnose.status = DiagnoseStatus.Draft

            new_diagnose.doctorId = form.doctorId
            new_diagnose.uploadUserId = session['userId']

            Diagnose.save(new_diagnose)
            form_result.data = {'formId': 2, 'diagnoseId': new_diagnose.id}
        return jsonify(form_result.__dict__)
    elif (int(formid) == 2):
        form = DiagnoseForm1(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:
            if form.diagnoseId is not None:
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(
                    DiagnoseStatus.Draft, int(session['userId']))
            if (new_diagnose is not None):
                needcreateNewUserByHospitalUser = True
                # 去拿没有draft的用户
                if (form.exist):
                    #select exist patient , from list, when modify exist diagnose
                    new_patient = Patient.get_patient_by_id(form.patientid)
                else:
                    #update draft patient when modify exist diagnose
                    new_patient = Patient.getPatientDraftByPatienId(
                        new_diagnose.patientId)
                    if new_patient:
                        new_patient.realname = form.patientname
                        new_patient.gender = form.patientsex
                        new_patient.birthDate = datetime.strptime(
                            form.birthdate, "%Y-%m-%d")
                        new_patient.identityCode = form.identitynumber
                        new_patient.locationId = form.locationId
                        new_patient.identityPhone = form.phonenumber
                        Patient.save(new_patient)
                        needcreateNewUserByHospitalUser = False
                #create a new patient
                if new_patient is None:
                    new_patient = Patient()
                    new_patient.type = PatientStatus.diagnose
                    new_patient.userID = session['userId']
                    new_patient.realname = form.patientname
                    new_patient.gender = form.patientsex
                    new_patient.birthDate = datetime.strptime(
                        form.birthdate, "%Y-%m-%d")
                    new_patient.identityCode = form.identitynumber
                    new_patient.locationId = form.locationId
                    new_patient.identityPhone = form.phonenumber
                    new_patient.status = ModelStatus.Draft
                    # new_patient.locationId = form.location
                    Patient.save(new_patient)
                new_diagnose.patientId = new_patient.id
                Diagnose.save(new_diagnose)

                # Hospital User 注册用户
                if form.isHospitalUser and (
                        not form.exist) and needcreateNewUserByHospitalUser:
                    userQuery = User.getByPhone(form.phonenumber)
                    if userQuery.count() <= 0:
                        passwd = random.sample(
                            'zyxwvutsrqponmlkjihgfedcba1234567890', 6)
                        passwd = ''.join(passwd)
                        new_user = User(form.patientname, form.phonenumber,
                                        passwd, True)
                        new_user.type = UserStatus.patent
                        new_user.status = ModelStatus.Normal
                        User.save(new_user)
                        new_patient.userID = new_user.id
                        Patient.save(new_patient)
                        new_userrole = UserRole(new_user.id, RoleId.Patient)
                        UserRole.save(new_userrole)
                        sendRegisterMobileMessage(session.get('userId'),
                                                  new_diagnose, new_user.phone,
                                                  passwd)
                    else:
                        new_patient.userID = userQuery.first().id
                        Patient.save(new_patient)
                form_result.data = {
                    'formId': 3,
                }
            else:
                form_result = ResultStatus(FAILURE.status, "找不到第一步草稿")
        return jsonify(form_result.__dict__)
    elif (int(formid) == 3):
        form = DiagnoseForm2(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:

            if form.diagnoseId is not None:
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(
                    DiagnoseStatus.Draft, int(session['userId']))

            if new_diagnose is not None:
                #直接选择的病例,不是新建或者更改
                isExistingPathology = False
                if form.exist:
                    new_pathology = Pathology.getById(form.pathologyId)
                    isExistingPathology = True
                elif new_diagnose.pathologyId:
                    new_pathology = Pathology.getById(new_diagnose.pathologyId)
                else:
                    new_pathology = Pathology.getByPatientStatus(
                        session['userId'], ModelStatus.Draft)

                if new_pathology is None:
                    new_pathology = Pathology(new_diagnose.patientId)
                if not isExistingPathology:
                    new_pathology.diagnoseMethod = form.dicomtype
                    new_pathology.status = ModelStatus.Draft
                    new_pathology.save(new_pathology)

                    PathologyPostion.deleteByPathologyId(new_pathology.id)
                    for position in form.patientlocation:
                        new_position_id = PathologyPostion(
                            new_pathology.id, position)
                        PathologyPostion.save(new_position_id)

                    File.cleanDirtyFile(form.fileurl, new_pathology.id,
                                        FileType.Dicom)
                    if form.fileurl and len(form.fileurl) > 0:
                        for fileurl in form.fileurl:
                            new_file = File.getFilebyId(int(fileurl))
                            new_file.pathologyId = new_pathology.id
                            File.save(new_file)
                new_diagnose.pathologyId = new_pathology.id
                Diagnose.save(new_diagnose)
                form_result.data = {'formId': 4}
            else:
                form_result = ResultStatus(FAILURE.status, "找不到上步的草稿")
        return jsonify(form_result.__dict__)
    elif (int(formid) == 4):
        form = DiagnoseForm4(request.form)
        form_result = form.validate()
        if form_result.status == rs.SUCCESS.status:
            if form.diagnoseId is not None:
                new_diagnose = Diagnose.getDiagnoseById(form.diagnoseId)
            else:
                new_diagnose = Diagnose.getNewDiagnoseByStatus(
                    DiagnoseStatus.Draft, int(session['userId']))
            if (new_diagnose is not None):
                new_pathology = Pathology.getById(new_diagnose.pathologyId)
                if (new_pathology is not None):
                    new_pathology.caseHistory = form.illnessHistory
                    new_pathology.hospitalId = form.hospitalId
                    new_pathology.status = ModelStatus.Normal
                    Pathology.save(new_pathology)

                    File.cleanDirtyFile(form.fileurl, new_pathology.id,
                                        FileType.FileAboutDiagnose)
                    if form.fileurl and len(form.fileurl) > 0:
                        for fileurl in form.fileurl:
                            new_file = File.getFilebyId(int(fileurl))
                            new_file.pathologyId = new_pathology.id
                            File.save(new_file)

                    new_patient = Patient.get_patient_by_id(
                        new_diagnose.patientId)
                    new_patient.status = PatientStatus.diagnose
                    #add for need update scenario
                    if new_diagnose.status == constant.DiagnoseStatus.NeedUpdate:
                        new_diagnoselog = DiagnoseLog(
                            new_diagnose.uploadUserId, new_diagnose.id,
                            DiagnoseLogAction.DiagnoseNeedUpateRecommitAction)
                        DiagnoseLog.save(db_session, new_diagnoselog)
                        new_diagnose.status = DiagnoseStatus.Triaging
                        Diagnose.save(new_diagnose)
                    #hospitalUser type=1
                    else:
                        if form.type == '1' and not checkFilesExisting(
                                new_diagnose):
                            new_diagnoselog = DiagnoseLog(
                                new_diagnose.uploadUserId, new_diagnose.id,
                                DiagnoseLogAction.NewDiagnoseAction)
                            DiagnoseLog.save(db_session, new_diagnoselog)
                            #update by lichuan , save diagnose and change to needPay
                            new_diagnose.status = DiagnoseStatus.HospitalUserDiagnoseNeedCommit
                            Diagnose.save(new_diagnose)
                            #end update
                        else:
                            #产生alipay,发送短消息
                            userId = session.get('userId')

                            new_diagnose.ossUploaded = constant.DiagnoseUploaed.Uploaded
                            new_diagnose.status = DiagnoseStatus.NeedPay

                            Diagnose.save(new_diagnose)
                            sendAllMessage(userId, new_diagnose)

                else:
                    form_result = ResultStatus(FAILURE.status, "找不到上步的草稿1")
            else:
                form_result = ResultStatus(FAILURE.status, "找不到上步的草稿2")
        form_result.data = {'isFinal': True}
        return jsonify(form_result.__dict__)
    else:
        return jsonify(ResultStatus(FAILURE.status, "错误的表单号").__dict__)