Beispiel #1
0
    def list(self):
        data = parameter_required()
        restatus = int(data.get('restatus', 0))
        filter_args = [Register.isdelete == 0, ]
        if is_user():
            usid = getattr(request, 'user').id
            filter_args.append(Register.USid == usid)
            telphone = data.get('telphone')
            if restatus:
                filter_args.append(or_(Register.REstatus > RegisterStatus.transfer.value,
                                       Register.REstatus == RegisterStatus.cancle.value))
            elif telphone and telphone != 'null' and not restatus:  # 手机号查看报告单时,显示该用户所有挂号记录报告单
                filter_args.append(Register.REstatus > RegisterStatus.cancle.value)
            else:
                filter_args.append(and_(Register.REstatus < RegisterStatus.commenting.value,
                                        Register.REstatus > RegisterStatus.cancle.value))

            if telphone:
                family = Family.query.filter(Family.FAtel == telphone, Family.USid == usid,
                                             Family.isdelete == 0).first()
                if family:
                    filter_args.append(Register.FAid == family.FAid)
        elif is_doctor():
            doctor = Doctor.query.filter(Doctor.DOid == getattr(
                request, 'user').id, Doctor.isdelete == 0).first_('账号已注销')
            filter_args.append(Register.DEid == doctor.DEid)
        # index = data.get('index')
        if not is_user():
            # 后台筛选专用字段
            if restatus:
                try:
                    restatus = RegisterStatus(int(str(restatus))).value
                except:
                    raise ParamsError('挂号状态筛选有误')
                filter_args.append(Register.REstatus == restatus)

            deid, usid, doid, redate, reamorpm = data.get('deid'), data.get('usid'), data.get(
                'doid'), data.get('redate'), data.get('reamorpm')
            if deid: filter_args.append(Register.DEid == deid)
            if usid: filter_args.append(Register.USid == usid)
            if doid: filter_args.append(Register.DOid == doid)
            redate = self._check_time(redate)
            if redate: filter_args.append(or_(Register.REdate == redate, Register.REtansferDate == redate))
            if reamorpm is not None:
                try:
                    reamorpm = RegisterAmOrPm(int(str(reamorpm))).value
                except:
                    raise ParamsError('时间段筛选有误')
                filter_args.append(or_(Register.REamOrPm == reamorpm, Register.REtansferAmOrPm == reamorpm))

        register_list = Register.query.filter(*filter_args).order_by(Register.createtime.desc()).all_with_page()
        for register in register_list:
            self._fill_resgister(register)
        return Success('获取成功', data=register_list)
Beispiel #2
0
    def get(self):
        data = parameter_required('prid')
        prid = data.get('prid')
        filter_args = [Products.PRid == prid, Products.isdelete == 0]
        if is_user():
            filter_args.append(Products.PRstatus == ProductStatus.usual.value)
        product = Products.query.filter(*filter_args).first_('商品已下架')
        product.add('PRdesc', 'PRdetails')
        self._fill_coupon(product)
        address = Setting.query.filter(Setting.STname == 'address',
                                       Setting.STtype == 2,
                                       Setting.isdelete == 0).first()
        telphone = Setting.query.filter(Setting.STname == 'telphone',
                                        Setting.STtype == 2,
                                        Setting.isdelete == 0).first()
        if address:
            product.fill('address', address.STvalue)
        else:
            product.fill('address', "")
        if telphone:
            product.fill('telphone', telphone.STvalue)
        else:
            product.fill('telphone', "")
        if product.DEid:
            dep = Departments.query.filter(Departments.DEid == product.DEid,
                                           Departments.isdelete == 0).first()
            if dep:
                product.fill('dename', dep.DEname)
            else:
                product.fill('dename', '')
        else:
            product.fill('dename', '')

        return Success('获取成功', data=product)
Beispiel #3
0
 def get_setmeal(self):
     """
     获取课时套餐
     """
     if is_admin() or is_hign_level_admin():
         setmeal = Setmeal.query.filter(
             Setmeal.isdelete == 0).all_with_page()
         return Success(message="获取课时套餐成功", data=setmeal)
     elif is_user():
         args = parameter_required(('clid', ))
         classes = Classes.query.filter(
             Classes.isdelete == 0,
             Classes.CLid == args.get('clid')).first_("未找到该课程信息")
         setmeal_list = []
         setmeal_list.append({
             "smid": "1",
             "clid": args.get('clid'),
             "clname": classes["CLname"],
             "smnum": 1,
             "smprice": classes["CLprice"]
         })
         setmeal = Setmeal.query.filter(
             Setmeal.isdelete == 0, Setmeal.CLid == args.get("clid")).all()
         setmeal.sort(key=lambda x: x["SMnum"])
         for setmeal_one in setmeal:
             setmeal_list.append(setmeal_one)
         return Success(message="获取课时套餐成功", data=setmeal_list)
Beispiel #4
0
def _invitation_records():
    secret_user_id = request.args.to_dict().get('secret_usid')
    if not secret_user_id:
        return
    from hospital.extensions.interface.user_interface import is_user
    if not is_user():
        return
    current_app.logger.info('>>>>>>>>record invitation<<<<<<<<')
    try:
        inviter_id = base_decode(secret_user_id)
        current_app.logger.info(f'secret_usid --> inviter_id: {inviter_id}')
    except Exception as e:
        current_app.logger.error(f'解析secret_usid时出错: {e}')
        return
    usid = getattr(request, 'user').id
    if inviter_id == usid:
        current_app.logger.info('inviter == invitee')
        return
    from hospital.models.user import UserInvitation
    from hospital.extensions.register_ext import db
    import uuid
    try:
        with db.auto_commit():
            uin = UserInvitation.create({
                'UINid': str(uuid.uuid1()),
                'USInviter': inviter_id,
                'USInvitee': usid,
                'UINapi': request.path
            })
            current_app.logger.info(f'{request.path} 创建邀请记录')
            db.session.add(uin)
    except Exception as e:
        current_app.logger.error(f'存储邀请记录时出错: {e}')
Beispiel #5
0
 def info(self):
     """活动详情"""
     args = request.args.to_dict()
     uaid = args.get('uaid')
     if uaid:
         ua = self._ua_filter(
             (UserActivity.UAid == uaid, ), ).first_('活动不存在')
         acid = ua.ACid
     else:
         parameter_required('acid', datafrom=args)
         acid = args.get('acid')
     activity = Activity.query.filter(
         Activity.isdelete == false(),
         Activity.ACid == acid).first_('未找到活动信息')
     if not is_admin():
         activity.hide('ACnumber')
     if is_user():
         activity.fill('signed_up',
                       bool(
                           self._ua_filter([
                               UserActivity.ACid == acid,
                               UserActivity.USid == getattr(
                                   request, 'user').id
                           ]).first()))  # 是否已报名
     activity.fill('acstatus_zh',
                   ActivityStatus(activity.ACstatus).zh_value)
     activity.fill('remain_people',
                   self._query_activity_remain_people(activity))
     return Success(data=activity)
Beispiel #6
0
    def userlist(self):
        """获取用户优惠券(前台)"""
        args = parameter_required(('ucalreadyuse', ))
        # 601已使用602未使用603已过期604可使用
        if not is_user():
            return AuthorityError()
        usid = request.user.id
        ucalreadyuse = int(args.get('ucalreadyuse'))
        if ucalreadyuse in [601, 602, 603]:
            coupon_list = CouponUser.query.filter(CouponUser.isdelete == 0, CouponUser.USid == usid,
                                                  CouponUser.UCalreadyuse == ucalreadyuse)\
                .order_by(CouponUser.createtime.desc()).all_with_page()
        elif ucalreadyuse in [604]:
            coupon_list = CouponUser.query.filter(CouponUser.isdelete == 0, CouponUser.USid == usid,
                                                  CouponUser.UCalreadyuse == 602,
                                                  CouponUser.COstarttime < datetime.datetime.now(),
                                                  CouponUser.COendtime > datetime.datetime.now())\
                .order_by(CouponUser.createtime.desc()).all_with_page()
        else:
            coupon_list = []
        for coupon in coupon_list:
            coupon.fill("ucalreadyuse_zh", CouponUserStatus(coupon.UCalreadyuse).zh_value)
            if coupon.COdownline == 0:
                coupon.fill("codownline_zh", "无限制")
            else:
                coupon.fill("codownline_zh", "满足{0}元即可使用".format(Decimal(str(coupon.COdownline))))
            coupon.fill("cotime", "{0}月{1}日-{2}月{3}日".format(coupon.COstarttime.month, coupon.COstarttime.day,
                                                             coupon.COendtime.month, coupon.COendtime.day))

        return Success(message="获取优惠券成功", data=coupon_list)
Beispiel #7
0
    def get_review(self):
        """获取评论"""
        """案例404id/医生id/活动id403/视频id405/评价人名称==>rvtype+rvtypeid/usname/doid"""
        """当前使用场景用于pc后台和前台业务页面,不涉及用户个人"""
        args = parameter_required()
        if is_admin() or is_user():
            filter_args = [Review.isdelete == 0]
            if args.get('rvtype') and args.get('rvtypeid') and args.get('rvtypeid') != 'undefined':
                filter_args.append(Review.RVtypeid == args.get('rvtypeid'))
            if args.get('doid'):
                filter_args.append(Review.DOid == args.get('doid'))
            if args.get('usname'):
                filter_args.append(Review.USname.like("%{0}%".format(args.get('usname'))))
            review_list = Review.query.filter(*filter_args).order_by(Review.createtime.desc()).all_with_page()
            for review in review_list:
                if review["DOid"]:
                    doctor = Doctor.query.filter(Doctor.DOid == review["DOid"], Doctor.isdelete == 0).first_("未找到医生信息")
                    review.fill("doname", doctor["DOname"])
                rp = ReviewPicture.query.filter(ReviewPicture.RVid == review["RVid"], ReviewPicture.isdelete == 0).all()
                review.fill("createtime", review["createtime"])
                review.fill("rp_list", rp)
                rvtype = review["RVtype"]
                review.fill("rvtype_zn", ReviewStatus(rvtype).zh_value)

            return Success(message="获取评论成功", data=review_list)
        else:
            return AuthorityError()
Beispiel #8
0
 def relatives(self):
     """亲属详情"""
     args = parameter_required('arid')
     arid = args.get('arid')
     filter_args = [AssistanceRelatives.ARid == arid, ]
     if is_user():
         filter_args.append(AssistanceRelatives.USid == getattr(request, 'user').id)
     relative = self._exist_assistance_relative(filter_args, '未找到任何信息')
     relative.fill('artype_zh', FamilyType(relative.ARtype).zh_value)
     return Success(data=relative)
Beispiel #9
0
    def list(self):
        data = parameter_required()
        usid = getattr(request, 'user').id
        omstatus = data.get('omstatus')
        omname = data.get('omname')
        omtype = data.get('omtype', 0)
        filter_args = [
            OrderMain.isdelete == 0,
        ]
        try:
            omtype = OrderMainType(int(omtype)).value
        except:
            raise ParamsError('订单类型有误 {}'.format(omtype))

        if is_user():
            filter_args.append(
                OrderMain.OMstatus >= OrderMainStatus.ready.value)
            filter_args.append(OrderMain.OMtype == omtype)
            filter_args.append(OrderMain.USid == usid)
        elif omstatus is not None:
            try:
                omstatus = OrderMainStatus(int(str(omstatus))).value
            except:
                raise ParamsError('订单状态筛选参数异常')
            filter_args.append(OrderMain.OMstatus == omstatus)
        if omname:
            filter_args.append(
                or_(OrderMain.CLname.ilike('%{}%'.format(omname)),
                    OrderMain.PRtitle.ilike('%{}%'.format(omname))))
        if is_admin():
            filter_args.append(OrderMain.OMtype == 0)
        omlist = OrderMain.query.filter(*filter_args).order_by(
            OrderMain.createtime.desc()).all_with_page()
        if is_user():
            uh_list = UserHour.query.filter(UserHour.USid == usid,
                                            UserHour.isdelete == 0).all()
            # 可用时长统计
            smsum = sum([int(uh.UHnum) for uh in uh_list])
            return Success('获取成功', data={'omlist': omlist, 'smsum': smsum})

        return Success('获取成功', data={'omlist': omlist})
Beispiel #10
0
    def get_pointtask(self):
        """获取任务列表"""
        args = parameter_required(('token', ))
        # user = token_to_user_(args.get('token'))
        usid = getattr(request, 'user').id
        if is_doctor():
            return AuthorityError()
        else:
            pointtask_list = PointTask.query.filter(PointTask.isdelete == 0).order_by(PointTask.PTid.asc()).all()
            if is_user():
                # 前台需要增加是否可完成的状态
                for pointtask in pointtask_list:
                    userintegral = UserIntegral.query.filter(UserIntegral.isdelete == 0, UserIntegral.UItrue == 0,
                                                             UserIntegral.UItype == 1, UserIntegral.USid == usid,
                                                             UserIntegral.UIaction == pointtask.PTtype).all()
                    if userintegral:
                        pointtask.fill("is_get", 1)
                    else:
                        pointtask.fill("is_get", 0)
                    time_now = datetime.datetime.now()
                    pttime = pointtask.PTtime or 0
                    if pttime > 0:
                        userintegral_end = UserIntegral.query.filter(UserIntegral.isdelete == 0,
                                                                     UserIntegral.UItrue == 1,
                                                                     UserIntegral.UItype == 1,
                                                                     UserIntegral.USid == usid,
                                                                     UserIntegral.UIaction == pointtask.PTtype,
                                                                     UserIntegral.createtime >
                                                                     datetime.datetime(time_now.year,
                                                                                       time_now.month,
                                                                                       time_now.day, 0, 0, 0),
                                                                     UserIntegral.createtime <
                                                                     datetime.datetime(time_now.year,
                                                                                       time_now.month,
                                                                                       time_now.day, 23, 59, 59)
                                                                     ).all()
                        if pttime <= len(userintegral_end):
                            pointtask.is_get = 2
                    elif pttime < 0:
                        pttime = abs(pttime)
                        userintegral_end = UserIntegral.query.filter(UserIntegral.isdelete == 0,
                                                                     UserIntegral.UItrue == 1,
                                                                     UserIntegral.UItype == 1,
                                                                     UserIntegral.USid == usid,
                                                                     UserIntegral.UIaction == pointtask.PTtype
                                                                     ).all()
                        if pttime <= len(userintegral_end):
                            pointtask.is_get = 2
                    else:
                        pass

        return Success(message="获取任务列表成功", data=pointtask_list)
Beispiel #11
0
    def _fill_resgister(self, register):
        if is_user():
            register.hide('USid')
        restatus = register.REstatus
        register.fill('restatus_zh', RegisterStatus(restatus).zh_value)
        if is_user():
            register.REcode = register.REcode or '等待排号中'
        reamorpm = register.REtansferAmOrPm
        if reamorpm is None:
            reamorpm = register.REamOrPm
        register.fill('reamorpm_zh', RegisterAmOrPm(reamorpm).zh_value)
        register.fill('reamorpm', reamorpm)
        register.fill('REdate', register.REtansferDate or register.REdate)

        register.add('createtime')
        family = Family.query.filter(Family.FAid == register.FAid, Family.isdelete == 0).first()
        if family:
            register.fill('FAname', family.FAname)
            register.fill('FAtel', family.FAtel)
            register.fill('FAaddress', family.FAaddress)
        dep = Departments.query.filter(Departments.DEid == register.DEid, Departments.isdelete == 0).first()
        if dep:
            register.fill('DEname', dep.DEname)
Beispiel #12
0
 def get(self):
     """
     课程详情
     """
     args = parameter_required(('clid'))
     classes = Classes.query.filter(
         Classes.isdelete == 0,
         Classes.CLid == args.get('clid')).first_("未查到课程信息")
     if is_user():
         doctor_list2 = []
         doctor_list = Course.query.with_entities(
             Course.DOid).distinct().all_with_page()
         for doctor in doctor_list:
             doid = doctor.DOid
             doctor_dict = Doctor.query.filter(
                 Doctor.DOid == doid,
                 Doctor.isdelete == 0).first_("未找到医生信息")
             doctor = doctor_dict
             doctor_media = DoctorMedia.query.filter(
                 DoctorMedia.isdelete == 0, DoctorMedia.DMtype == 0,
                 DoctorMedia.DOid == doid).first()
             doctor.fill("doctormainpic", doctor_media["DMmedia"])  # 医生主图
             department = Departments.query.filter(Departments.isdelete == 0,
                                                   Departments.DEid == doctor["DEid"])\
                 .first_("未找到科室信息")
             doctor.fill("dename", department["DEname"])  # 科室名称
             review_good = Review.query.filter(Review.isdelete == 0,
                                               Review.RVnum >= 4,
                                               Review.DOid == doid).all()
             review = Review.query.filter(Review.isdelete == 0,
                                          Review.DOid == doid).all()
             if len(review) == 0:
                 # 无评论情况下默认100%好评率
                 review_percentage = Decimal('1')
             else:
                 review_percentage = Decimal(
                     str(len(review_good) / len(review) or 0))
             doctor.fill("favorablerate", "{0}%".format(
                 (review_percentage * 100).quantize(Decimal('0.0'))))  # 好评率
             register = Register.query.filter(Register.DOid == doid,
                                              Register.isdelete == 0).all()
             doctor.fill("treatnum", len(register))  # 接诊次数
             doctor_list2.append(doctor)
         classes.fill("doctor_list", doctor_list2)
     return Success(message="获取课程信息成功", data=classes)
Beispiel #13
0
    def list(self):
        data = parameter_required()
        constatus = data.get('constatus', 0)
        doid = data.get('doid')
        condate = data.get('condate')

        filter_args = [
            Consultation.isdelete == 0,
        ]
        if is_doctor():
            doid = getattr(request, 'user').id

        if doid:
            filter_args.append(Consultation.DOid == doid)
        if not constatus and is_user():
            filter_args.append(
                Consultation.CONstatus == ConsultationStatus.ready.value)
        elif constatus:
            try:
                constatus = ConsultationStatus(int(str(constatus))).value
            except:
                raise ParamsError('状态筛选参数异常')
            filter_args.append(Consultation.CONstatus == constatus)

        if condate:
            if not isinstance(condate, date):
                try:
                    condate = datetime.strptime(str(condate),
                                                format_forweb_no_HMS).date()
                except:
                    raise ParamsError('日期筛选 {} 参数错误'.format(
                        data.get('condate')))
            filter_args.append(
                cast(Consultation.CONstartTime, Date) == condate)

        con_list = Consultation.query.filter(*filter_args).order_by(
            Consultation.createtime.desc()).all_with_page()

        for con in con_list:
            self._fill_doctor_mainpic(con)
            con_count = db.session.query(func.count(Enroll.ENid)).filter(
                Enroll.CONid == con.CONid, Enroll.isdelete == 0).scalar()
            con.fill('conremainder', (int(con.CONlimit) - int(con_count)))
        return Success('获取成功', data=con_list)
Beispiel #14
0
 def _query_my_activity(self):
     if not is_user():
         raise TokenError
     uas = self._ua_filter(
         [UserActivity.USid == getattr(request,
                                       'user').id]).all_with_page()
     ac_list = []
     for ua in uas:
         activity = Activity.query.filter(Activity.ACid == ua.ACid).first()
         if not activity:
             current_app.logger.error('activity not found: acid:{}'.format(
                 ua.ACid))
             continue
         activity.fields = ['ACid', 'ACname', 'ACbanner']
         activity.fill('uastatus', ua.UAstatus)
         activity.fill('uastatus_zh',
                       UserActivityStatus(ua.UAstatus).zh_value)
         activity.fill('uaid', ua.UAid)
         ac_list.append(activity)
     return Success(data=ac_list)
Beispiel #15
0
 def get_integral(self):
     """获取个人积分变动情况"""
     # 后台可筛选,前台默认用户token
     args = parameter_required(('token', ))
     filter_args = [UserIntegral.isdelete == 0]
     user = token_to_user_(args.get('token'))
     if is_user():
         filter_args.append(UserIntegral.USid == user.id)
         filter_args.append(UserIntegral.UItrue == 1)
     else:
         if not (is_admin() or is_hign_level_admin()):
             return AuthorityError()
         if args.get('usid'):
             filter_args.append(UserIntegral.USid == args.get('usid'))
     userIntegral = UserIntegral.query.filter(*filter_args).order_by(UserIntegral.createtime.desc()).all_with_page()
     for user_item in userIntegral:
         user = User.query.filter(User.USid == user_item.USid).first()
         user_item.fill('usname', user.USname)
         user_item.fill('utname', PointTaskType(user_item.UIaction).zh_value)
         user_item.fill('createtime', user_item.createtime)
     return Success(message="获取积分变动成功", data=userIntegral)
Beispiel #16
0
    def get_assistance(self):
        if is_user():
            usid = getattr(request, 'user').id
            assistance = Assistance.query.filter(Assistance.isdelete == false(), Assistance.USid == usid
                                                 ).order_by(Assistance.createtime.desc()).first()
            res = {}
            if assistance:
                current_app.logger.info(f'get assistance id: {assistance.ATid}')
                res['atstatus'] = assistance.ATstatus
                res['atstatus_zh'] = ApplyStatus(assistance.ATstatus).zh_value
                res['can_submit'] = False if assistance.ATstatus == ApplyStatus.waiting.value else True
            return Success(data=res)
        else:
            if not is_admin():
                raise AuthorityError
            args = parameter_required('atid')
            assistance = Assistance.query.filter(Assistance.isdelete == false(),
                                                 Assistance.ATid == args.get('atid')).first_('未找到申请信息')
            self._fill_assistance(assistance)

            # 添加证明图片
            dia_pics, pove_pics = [], []
            as_pics = AssistancePicture.query.filter(AssistancePicture.isdelete == false(),
                                                     AssistancePicture.ATid == assistance.ATid
                                                     ).order_by(AssistancePicture.createtime.asc()).all()
            [dia_pics.append(pic) if pic.APtype == AssistancePictureType.diagnosis.value else pove_pics.append(pic) for
             pic in as_pics]
            assistance.fill('diagnosis', dia_pics)
            assistance.fill('poverty', pove_pics)
            # 添加亲属信息
            relatives_list = []
            for arid in json.loads(assistance.ARids):
                relative = self._exist_assistance_relative([AssistanceRelatives.ARid == arid, ])
                if not relative:
                    current_app.logger.error('arid not found: {}'.format(arid))
                    continue
                relative.fill('artype_zh', FamilyType(relative.ARtype).zh_value)
                relatives_list.append(relative)
            assistance.fill('relatives', relatives_list)
            return Success(data=assistance)
Beispiel #17
0
 def list_activity(self):
     """首页活动展示 / 我的活动"""
     args = parameter_required(('page_size', 'page_num'))
     option = args.get('option')
     time_now = datetime.now()
     if option == 'my':
         return self._query_my_activity()
     filter_args = []
     if is_anonymous() or is_user():
         filter_args.extend([
             Activity.ACstatus == ActivityStatus.ready.value,
             Activity.ACstartTime > time_now
         ])
     ac_list = Activity.query.filter(
         Activity.isdelete == false(), *filter_args).order_by(
             Activity.ACstatus.asc(),
             Activity.ACstartTime.desc()).all_with_page()
     for ac in ac_list:
         ac.fields = ['ACid', 'ACname', 'ACbanner']
         ac.fill('acstatus_zh', ActivityStatus(ac.ACstatus).zh_value)
         if filter_args:
             remain = ac.ACstartTime - time_now
             remain_day = remain.days
             remain_str = f'{remain.seconds // 3600}小时' if (
                 remain.seconds //
                 3600) else f'{(remain.seconds % 3600) // 60}分钟' if (
                     (remain.seconds % 3600) //
                     60) else f'{remain.seconds}秒'
             ac.fill('remain_time',
                     f'{remain_day}天' if remain_day else remain_str)
         if is_admin():
             ac.fill(
                 'signed_number',
                 f'{self._ua_filter([UserActivity.ACid == ac.ACid, ]).count()} / {ac.ACnumber}'
             )
     return Success(data=ac_list)
Beispiel #18
0
    def sign_up(self):
        """用户报名"""
        if not is_user():
            raise TokenError
        data = parameter_required('acid')
        usid = getattr(request, 'user').id
        user = User.query.filter(User.isdelete == false(),
                                 User.USid == usid).first_('请重新登录')
        if not user.UStelphone:
            raise StatusError("请先在 '我的 - 我的家人' 中完善本人信息")
        activity = Activity.query.filter(
            Activity.isdelete == false(),
            Activity.ACstatus == ActivityStatus.ready.value,
            Activity.ACstartTime >= datetime.now(),
            Activity.ACid == data.get('acid')).first_('活动已结束或不存在')
        if self._ua_filter(
            [UserActivity.USid == usid,
             UserActivity.ACid == activity.ACid]).first():
            raise StatusError('您已报名过该活动')
        if self._query_activity_remain_people(activity) <= 0:
            raise StatusError('该活动报名人数已满,请期待下次活动')
        with db.auto_commit():
            ua = UserActivity.create({
                'UAid': str(uuid.uuid1()),
                'USid': usid,
                'ACid': activity.ACid,
                'UAstatus': UserActivityStatus.ready.value
            })
            db.session.add(ua)

        # 活动报名 积分任务
        from .CConfig import CConfig
        from ..config.enums import PointTaskType
        CConfig()._judge_point(PointTaskType.make_activity.value, 1, user.USid)

        return Success('报名成功', data={'uaid': ua.UAid})
Beispiel #19
0
 def make_evaluation(self):
     """提交评测"""
     data = parameter_required(('evid', 'ei_list'))
     # user = getattr(request, 'user')
     if not is_user():
         raise AuthorityError('权限不足')
     usid = getattr(request, 'user').id
     evid = data.get('evid')
     anid = str(uuid.uuid1())
     with db.auto_commit():
         point = Decimal(0.0)
         evaluationitem_all = EvaluationItem.query.filter(
             EvaluationItem.isdelete == 0,
             EvaluationItem.EVid == evid).all()
         if len(evaluationitem_all) != len(data.get('ei_list')):
             return EvaluationNumError()
         for ei in data.get('ei_list'):
             eiid = ei["eiid"]
             eaid = ei["eaid"]
             evaluationitem = EvaluationItem.query.filter(EvaluationItem.EIid == eiid,
                                                          EvaluationItem.isdelete == 0) \
                 .first_("未找到该题目")
             evaluationanswer = EvaluationAnswer.query.filter(EvaluationAnswer.EAid == eaid,
                                                              EvaluationAnswer.isdelete == 0) \
                 .first_("未找到该选项")
             ai_dict = {
                 "AIid": str(uuid.uuid1()),
                 "EIname": evaluationitem["EIname"],
                 "EAindex": evaluationanswer["EAindex"],
                 "EApoint": evaluationanswer["EApoint"],
                 "EAname": evaluationanswer["EAname"],
                 "USid": usid,
                 "ANid": anid
             }
             point = Decimal(str(evaluationanswer["EApoint"]
                                 or 0)) + Decimal(str(point or 0))
             ai_instance = AnswerItem.create(ai_dict)
             db.session.add(ai_instance)
         evaluation = Evaluation.query.filter(
             Evaluation.isdelete == 0,
             Evaluation.EVid == evid).first_("未找到该评测")
         # 总积分逻辑改为平均分
         # point = Decimal(str(point / len(evaluationitem_all)))
         current_app.logger.info(point)
         evaluationpoint = EvaluationPoint.query.filter(EvaluationPoint.EPstart <= point,
                                                        EvaluationPoint.EVid == evid,
                                                        EvaluationPoint.EPend >= point,
                                                        EvaluationPoint.isdelete == 0) \
             .first_("未找到评测结论")
         answer = evaluationpoint["EPanswer"]
         an_dict = {
             "ANid": anid,
             "USid": usid,
             "EVid": evid,
             "EVname": evaluation["EVname"],
             "EVpoint": point,
             "EPanswer": answer
         }
         an_instance = Answer.create(an_dict)
         share_url = Share(usid, point, an_instance).drawshare()
         an_instance.EVshare = share_url
         db.session.add(an_instance)
         # todo 创建分享图
     from .CConfig import CConfig
     from ..config.enums import PointTaskType
     CConfig()._judge_point(PointTaskType.make_evaluation.value, 1, usid)
     return Success(message="提交评测成功",
                    data={
                        "answer": answer,
                        'share': HTTP_HOST + share_url
                    })
Beispiel #20
0
    def get_subscribe_list(self):
        """
        分页获取预约列表
        """
        filter_args = [Subscribe.isdelete == 0]
        args = request.args.to_dict()
        user_id = getattr(request, 'user').id
        if is_user():
            filter_args.append(Subscribe.USid == user_id)
        elif is_doctor():
            filter_args.append(Subscribe.DOid == user_id)
        else:
            pass
        if args.get('sustatus'):
            filter_args.append(Subscribe.SUstatus == int(args.get('sustatus')))
        if args.get('usname'):
            filter_args.append(
                Subscribe.USname.like("%{0}%".format(args.get('usname'))))
        if args.get('clname'):
            filter_args.append(
                Subscribe.CLname.like("%{0}%".format(args.get('clname'))))
        if args.get('doname'):
            filter_args.append(
                Subscribe.DOname.like("%{0}%".format(args.get('doname'))))
        if args.get('codate'):

            filter_args.append(
                Subscribe.COstarttime.date() == datetime.datetime.strptime(
                    args.get('codate'), "%Y-%m-%d").date())
        subcribe_list = Subscribe.query.filter(*filter_args).order_by(
            Subscribe.createtime).all_with_page()
        for subcribe in subcribe_list:
            subcribe.fill("sustatus_zh",
                          SubscribeStatus(int(subcribe["SUstatus"])).zh_value)
            doid = subcribe["DOid"]
            doctor = Doctor.query.filter(
                Doctor.DOid == doid).first_("未找到该医生信息")
            subcribe.fill('dotitle', doctor.DOtitle)
            docmedia = DoctorMedia.query.filter(
                DoctorMedia.DOid == doid, DoctorMedia.DMtype == 0,
                DoctorMedia.isdelete == 0).first()
            subcribe.fill('doctormainpic', docmedia.DMmedia)
            coid = subcribe["COid"]
            course = Course.query.filter(
                Course.COid == coid, Course.isdelete == 0).first_("未找到课程排班信息")
            clid = course["CLid"]
            classes = Classes.query.filter(
                Classes.CLid == clid, Classes.isdelete == 0).first_("未找到课程信息")
            subcribe.fill("dename", classes["DEname"])
            subcribe.fill("createtime", subcribe["createtime"])
            subcribe.fill("coendtime", course["COendtime"])
            if subcribe["COstarttime"].hour < 12:
                subcribe.fill(
                    "date", "{0}.{1}.{2}".format(subcribe["COstarttime"].year,
                                                 subcribe["COstarttime"].month,
                                                 subcribe["COstarttime"].day))
                subcribe.fill(
                    "time", "{0} {1}:{2}-{3}:{4}".format(
                        "上午", subcribe["COstarttime"].hour,
                        subcribe["COstarttime"].minute,
                        subcribe["coendtime"].hour,
                        subcribe["coendtime"].minute))
            else:
                subcribe.fill(
                    "date", "{0}.{1}.{2}".format(subcribe["COstarttime"].year,
                                                 subcribe["COstarttime"].month,
                                                 subcribe["COstarttime"].day))
                subcribe.fill(
                    "time", "{0} {1}:{2}-{3}:{4}".format(
                        "下午", subcribe["COstarttime"].hour - 12,
                        subcribe["COstarttime"].minute,
                        subcribe["coendtime"].hour - 12,
                        subcribe["coendtime"].minute))

        return Success(message="获取预约列表成功", data=subcribe_list)
Beispiel #21
0
    def set_review(self):
        """
        创建评论
        """
        if not is_user():
            return AuthorityError()
        data = parameter_required(("rvcontent", "rvtype", "rvtypeid", "rvnum"))
        usid = request.user.id
        rvtype = int(data.get('rvtype'))
        rvtypeid = data.get('rvtypeid')
        if rvtype == 401:
            """课程"""
            subscribe = Subscribe.query.filter(Subscribe.SUid == rvtypeid).first_("未找到预约信息")
            classes = Course.query.filter(Course.COid == subscribe.COid).first_("未找到该课程排班")
            doid = classes["DOid"]
        elif rvtype == 402:
            """挂诊"""
            register = Register.query.filter(Register.REid == rvtypeid).first_("未找到该挂诊信息")
            doid = register["DOid"]
        elif rvtype == 403:
            """活动"""
            doid = None
        elif rvtype == 404:
            """案例"""
            doid = None
        elif rvtype == 405:
            """视频"""
            video = Video.query.filter(Video.VIid == rvtypeid).first_("未找到该视频信息")
            doid = video["DOid"]
        else:
            return StatusError("评论种类异常")
        rvid = str(uuid.uuid1())
        user_dict = User.query.filter(User.USid == usid).first_("未找到该用户")
        if (rvtype == 401 or rvtype == 402) and Review.query.filter(
                Review.isdelete == 0, Review.USid == usid, Review.RVtype == rvtype,
                Review.RVtypeid == data.get('rvtypeid')).first():
            raise StatusError('您已进行过评价')
        rv_dict = {
            "USid": usid,
            "USname": user_dict["USname"],
            "USavatar": user_dict["USavatar"],
            "RVcontent": data.get('rvcontent'),
            "DOid": doid,
            "RVtype": rvtype,
            "RVtypeid": data.get('rvtypeid'),
            "RVnum": Decimal(str(data.get('rvnum') or 0))
        }
        if data.get('rppicture_list'):
            rppicture_list = data.get('rppicture_list')
        else:
            rppicture_list = []
        with db.auto_commit():
            if rvtype == 401:
                subscribe_instance = Subscribe.query.filter(Subscribe.SUid == rvtypeid).first_("未找到预约信息")
                subscribe_instance.update({
                    "SUstatus": 203
                })
                db.session.add(subscribe_instance)
            elif rvtype == 402:
                register_instance = Register.query.filter(Register.REid == rvtypeid).first_("未找到该挂诊信息")
                register_instance.update({
                    "REstatus": 4
                })
                db.session.add(register_instance)
            elif rvtype == 403:
                #  更改用户活动状态为已评价
                rv_dict["RVtypeid"] = self._change_user_activity_comment_status(rvtypeid, usid)
            else:
                pass
            for repicture in rppicture_list:
                rp_dict = {
                    "RPid": str(uuid.uuid1()),
                    "RVid": rvid,
                    "RPpicture": repicture["rppicture"]
                }
                rv_instance = ReviewPicture.create(rp_dict)
                db.session.add(rv_instance)
            rv_dict["RVid"] = rvid
            rv_instance = Review.create(rv_dict)
            db.session.add(rv_instance)
        from .CConfig import CConfig
        from ..config.enums import PointTaskType
        CConfig()._judge_point(PointTaskType.review.value, 1, usid)

        return Success("评论成功")