Beispiel #1
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 #2
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 #3
0
 def set_evaluationanswer(self):
     """设置题目选项"""
     data = parameter_required((
         'eiid', 'eaname', 'eaindex',
         'eapoint') if not request.json.get('delete') else ('eaid', ))
     if not is_admin():
         return AuthorityError()
     ea_dict = {
         "EIid": data.get('eiid'),
         "EAname": data.get('eaname'),
         "EAindex": data.get('eaindex'),
         "EApoint": Decimal(str(data.get('eapoint') or 0))
     }
     eaid = data.get("eaid")
     with db.auto_commit():
         if not eaid:
             # 新增
             ea_dict["EAid"] = str(uuid.uuid1())
             ea_instance = EvaluationAnswer.create(ea_dict)
             msg = "新增成功"
         else:
             ea_instance = EvaluationAnswer.query.filter(
                 EvaluationAnswer.EAid == eaid).first_("未找到该选项")
             if data.get("delete"):
                 ea_instance.update({"isdelete": 1})
                 msg = "删除成功"
             else:
                 ea_instance.update(ea_dict)
                 msg = "修改成功"
         db.session.add(ea_instance)
     return Success(message=msg)
Beispiel #4
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 #5
0
 def set_evaluationitem(self):
     """设置问卷题目"""
     data = parameter_required((
         'evid',
         'einame',
         'eiindex',
     ) if not request.json.get('delete') else ('eiid', ))
     if not (is_hign_level_admin() or is_admin()):
         return AuthorityError()
     ei_dict = {
         "EVid": data.get('evid'),
         "EIname": data.get('einame'),
         "EIindex": data.get('eiindex')
     }
     eiid = data.get("eiid")
     with db.auto_commit():
         if not eiid:
             # 新增
             ei_dict["EIid"] = str(uuid.uuid1())
             ei_instance = EvaluationItem.create(ei_dict)
             msg = "新增成功"
         else:
             ei_instance = EvaluationItem.query.filter(
                 EvaluationItem.EIid == eiid).first_("未找到该题目")
             if data.get("delete"):
                 ei_instance.update({"isdelete": 1})
                 msg = "删除成功"
             else:
                 ei_instance.update(ei_dict)
                 msg = "修改成功"
         db.session.add(ei_instance)
     return Success(message=msg)
Beispiel #6
0
 def set_evaluation(self):
     """设置问卷主体"""
     data = parameter_required((
         'evname',
         'evpicture',
     ) if not request.json.get('delete') else ('evid', ))
     if not is_admin():
         return AuthorityError()
     ev_dict = {
         "EVname": data.get('evname'),
         "EVpicture": data.get('evpicture')
     }
     evid = data.get("evid")
     with db.auto_commit():
         if not evid:
             # 新增
             ev_dict["EVid"] = str(uuid.uuid1())
             ev_instance = Evaluation.create(ev_dict)
             msg = "新增成功"
         else:
             ev_instance = Evaluation.query.filter(
                 Evaluation.EVid == evid).first_("未找到该问卷")
             if data.get("delete"):
                 ev_instance.update({"isdelete": 1})
                 msg = "删除成功"
             else:
                 ev_instance.update(ev_dict)
                 msg = "修改成功"
         db.session.add(ev_instance)
     return Success(message=msg)
Beispiel #7
0
 def get(self):
     """获取优惠券详情(后台)"""
     args = parameter_required(('token', 'coid', ))
     if not is_admin():
         return AuthorityError('无权限')
     coupon = Coupon.query.filter(Coupon.isdelete == 0, Coupon.COid == args.get('coid')).first_("未找到该优惠券")
     coupon.fill("costatus_zh", CouponStatus(coupon.COstatus).zh_value)
     return Success(message="获取优惠券信息成功", data=coupon)
Beispiel #8
0
 def list_relatives(self):
     """获取申请人亲属"""
     usid = request.args.to_dict().get('usid') if is_admin() and request.args.to_dict().get('usid') else getattr(
         request, 'user').id
     relatives = AssistanceRelatives.query.filter(AssistanceRelatives.isdelete == false(),
                                                  AssistanceRelatives.USid == usid
                                                  ).order_by(AssistanceRelatives.ARtype.asc(),
                                                             AssistanceRelatives.createtime.desc()).all()
     for re in relatives:
         re.fill('artype_zh', FamilyType(re.ARtype).zh_value)
     return Success(data=relatives)
Beispiel #9
0
 def delete(self):
     """删除评论"""
     if not is_admin():
         return AuthorityError()
     data = request.json
     with db.auto_commit():
         for rvid in data:
             rvid = rvid["rvid"]
             review_instance = Review.query.filter(Review.RVid == rvid).first_("未找到该评论")
             review_instance.update({"isdelete": 1})
             db.session.add(review_instance)
     return Success('删除成功')
Beispiel #10
0
 def refresh_token(self):
     """刷新token"""
     token = ''
     if is_admin():
         admin = Admin.query.filter(Admin.isdelete == 0, Admin.ADid == getattr(request, 'user').id).first()
         if admin:
             token = usid_to_token(admin.ADid, 'Admin', admin.ADlevel, username=admin.ADname)
     else:
         doctor = Doctor.query.filter(Doctor.isdelete == 0, Doctor.DOid == getattr(request, 'user').id).first()
         if doctor:
             token = usid_to_token(doctor.DOid, 'Doctor', 3, username=doctor.DOname)
     return Success(data={'token': token})
Beispiel #11
0
 def set_setmeal(self):
     """
     新增/修改/删除课时套餐
     """
     if not (is_admin() or is_hign_level_admin()):
         return AuthorityError('无权限')
     data = parameter_required((
         'clid', 'smnum',
         'smprice') if not request.json.get('delete') else ('smid', ))
     smid = data.get('smid')
     if smid:
         setmeal = Setmeal.query.filter(
             Setmeal.SMid == smid).first_("未找到该套餐信息")
         classes = Classes.query.filter(
             Classes.isdelete == 0,
             Classes.CLid == setmeal.CLid).first_("未找到该课程信息")
     else:
         classes = Classes.query.filter(
             Classes.isdelete == 0,
             Classes.CLid == data.get('clid')).first_("未找到该课程信息")
     clname = classes["CLname"]
     sm_dict = {
         "CLid": data.get('clid'),
         "CLname": clname,
         "SMnum": data.get('smnum'),
         "SMprice": data.get('smprice')
     }
     with db.auto_commit():
         if not smid:
             """新增"""
             sm_dict['SMid'] = str(uuid.uuid1())
             sm_instance = Setmeal.create(sm_dict)
             msg = '添加成功'
         else:
             """修改/删除"""
             sm_instance = Setmeal.query.filter_by_(
                 SMid=smid).first_('未找到该轮播图信息')
             if data.get('delete'):
                 sm_instance.update({'isdelete': 1})
                 msg = '删除成功'
             else:
                 sm_instance.update(sm_dict, null='not')
                 msg = '编辑成功'
         db.session.add(sm_instance)
     return Success(message=msg, data={'smid': sm_instance.SMid})
Beispiel #12
0
 def set_class(self):
     """
     创建/编辑/删除课程
     """
     if not (is_admin() or is_hign_level_admin()):
         return AuthorityError('无权限')
     data = parameter_required((
         'clname', "clpicture", "deid", "clintroduction",
         "clprice") if not request.json.get('delete') else ('clid', ))
     clid = data.get('clid')
     if clid:
         classes = Classes.query.filter(
             Classes.CLid == clid).first_("未找到课程信息")
         department = Departments.query.filter(
             Departments.DEid == classes.DEid).first_("未找到科室信息")
     else:
         department = Departments.query.filter(
             Departments.DEid == data.get("deid")).first_("未找到科室信息")
     cl_dict = {
         'CLname': data.get('clname'),
         'CLpicture': data.get('clpicture'),
         'DEid': data.get('deid'),
         'DEname': department['DEname'],
         'CLintroduction': data.get('clintroduction'),
         'CLprice': data.get('clprice')
     }
     with db.auto_commit():
         if not clid:
             """新增"""
             cl_dict['CLid'] = str(uuid.uuid1())
             cl_instance = Classes.create(cl_dict)
             msg = '添加成功'
         else:
             """修改/删除"""
             cl_instance = Classes.query.filter_by_(
                 CLid=clid).first_('未找到该轮播图信息')
             if data.get('delete'):
                 cl_instance.update({'isdelete': 1})
                 msg = '删除成功'
             else:
                 cl_instance.update(cl_dict, null='not')
                 msg = '编辑成功'
         db.session.add(cl_instance)
     return Success(message=msg, data={'clid': cl_instance.CLid})
Beispiel #13
0
    def list(self):
        data = parameter_required()
        syid = data.get('syid')
        index = data.get('index', 'list')
        examples_sql = Example.query.join(Symptom,
                                          Symptom.SYid == Example.SYid).filter(
                                              Example.isdelete == 0,
                                              Symptom.isdelete == 0)
        if syid:
            examples_sql = examples_sql.filter(Example.SYid == syid)
        else:
            if not is_admin():
                raise AuthorityError()
        examples = examples_sql.order_by(
            Example.EXsort.asc(), Example.createtime.desc()).all_with_page()
        for exm in examples:
            self._fill_example(exm, index)

        return Success('获取成功', data=examples)
Beispiel #14
0
 def update_pointtask(self):
     """更新任务积分以及次数"""
     # 后台更新次数以及积分数,负表示仅限次数,0表示无限次,正表示每日可完成次数
     if not (is_admin() or is_hign_level_admin()):
         return AuthorityError()
     data = parameter_required(('ptid', 'ptnumber', 'pttime', 'pticon'))
     if not data.get('ptnumber'):
         data['ptnumber'] = 0
     if not data.get('pttime'):
         data['pttime'] = 0
     pt_dict = {
         "PTnumber": data.get('ptnumber'),
         "PTtime": data.get('pttime'),
         "PTicon": data.get('pticon')
     }
     pt_instance = PointTask.query.filter(PointTask.PTid == data.get('ptid')).first_("未找到该任务")
     with db.auto_commit():
         pt_instance.update(pt_dict, null='not')
         db.session.add(pt_instance)
     return Success(message="更新任务成功")
Beispiel #15
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 #16
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 #17
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 #18
0
    def get(self):
        """获取评测详情"""
        args = parameter_required(('evid', ))
        evid = args.get("evid")
        evaluation = Evaluation.query.filter(
            Evaluation.isdelete == 0, Evaluation.EVid == evid).first_("未找到该评测")
        evaluationitem = EvaluationItem.query.filter(EvaluationItem.isdelete == 0, EvaluationItem.EVid == evid) \
            .order_by(EvaluationItem.EIindex.asc()).all()
        for item in evaluationitem:
            eiid = item["EIid"]
            evaluationanswer = EvaluationAnswer.query.filter(EvaluationAnswer.isdelete == 0,
                                                             EvaluationAnswer.EIid == eiid) \
                .order_by(EvaluationAnswer.EAindex.asc()).all()
            item.fill("ea_list", evaluationanswer)
        evaluation.fill("ei_list", evaluationitem)

        if is_admin():
            ep_list = EvaluationPoint.query.filter(EvaluationPoint.isdelete == 0, EvaluationPoint.EVid == evid) \
                .order_by(EvaluationPoint.EPstart.asc()).all()
            evaluation.fill("ep_list", ep_list)

        return Success(message="获取评测成功", data=evaluation)
Beispiel #19
0
    def list_submitter(self):
        if not is_admin():
            raise AuthorityError('权限不足')

        data = parameter_required({'evid': '问卷'})
        evid = data.get('evid')
        an_list = Answer.query.filter(
            Evaluation.EVid == Answer.EVid, Answer.EVid == evid,
            Answer.isdelete == 0, Evaluation.isdelete == 0).order_by(
                Answer.createtime.desc()).all_with_page()

        usid_list = [an.USid for an in an_list]
        user_list = User.query.filter(User.USid.in_(usid_list),
                                      User.isdelete == 0).all()
        user_dict = {user.USid: user for user in user_list}
        for an in an_list:
            user = user_dict.get(an.USid)
            if not user:
                continue
            an.fill('USname', user.USname or '')
            an.fill('UStelphone', user.UStelphone or '')
            an.fill('USavatar', user['USavatar'] or '')
        return Success(data=an_list)
Beispiel #20
0
    def list(self):
        data = parameter_required()
        filter_args = [
            Products.isdelete == 0,
        ]
        dename = data.get('dename')
        if dename:
            filter_args.append(Departments.DEname.ilike('%{}%'.format(dename)))
            filter_args.append(Departments.DEid == Products.DEid)
        if not is_admin():
            filter_args.append(Products.PRstatus == ProductStatus.usual.value)
        else:
            prtitle, prstatus, prtype = data.get('prtitle'), data.get(
                'prstatus'), data.get('prtype')

            if prtitle:
                filter_args.append(
                    Products.PRtitle.ilike('%{}%'.format(prtitle)))
            if prstatus:
                try:
                    prstatus = ProductStatus(int(str(prstatus))).value
                except:
                    raise ParamsError('商品状态异常')
                filter_args.append(Products.PRstatus == prstatus)
            if prtype:
                try:
                    prtype = ProductType(int(str(prtype))).value
                except:
                    raise ParamsError('商品类型筛选异常')
                filter_args.append(Products.PRtype == prtype)

        products = Products.query.filter(*filter_args).order_by(
            Products.PRsort.asc(), Products.createtime.desc()).all_with_page()
        for product in products:
            self._fill_coupon(product)
        return Success('获取成功', data=products)
Beispiel #21
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 #22
0
    def set_evaluationpoint(self):
        """设置分数区间"""
        data = parameter_required((
            'evid', 'epstart', 'epend',
            'epanswer') if not request.json.get('delete') else ('epid', ))
        epid = data.get("epid")
        if not is_admin():
            return AuthorityError()
        if data.get('epstart') and data.get('epend'):
            epstart = Decimal(str(data.get('epstart') or 0))
            epend = Decimal(str(data.get('epend') or 0))
            if epstart >= epend:
                return PointError("区间大小设置错误")
        else:
            epstart = 0
            epend = 0
        epsharelevel = data.get('epsharelevel')
        if not data.get('delete'):
            try:
                epsharelevel = EvaluationPointLevel(int(epsharelevel)).value
            except:
                raise ParamsError('分享等级目前只支持3级')
            doid = data.get('doid')
            title = data.get('eptitle') or ''
            if len(title) > 4:
                raise ParamsError('分享图标题 长度超标')
            analysis = data.get('epanalysis') or ''
            if len(analysis) > 12:
                raise ParamsError('初步分析 长度超标')

            evaluation = data.get('epevaluation') or ''
            if len(evaluation) > 162:
                raise ParamsError('评估建议 长度超标')
            award = data.get('epaward') or ''
            if len(award) > 15:
                raise ParamsError('奖励语 长度超标')
            shareWords = data.get('epshareWords') or ''
            if len(shareWords) > 63:
                raise ParamsError('分享文案 长度超标')
            ep_dict = {
                "EVid": data.get('evid'),
                "EPstart": epstart,
                "EPtitle": title,
                "EPanalysis": analysis,
                "EPevaluation": evaluation,
                "EPshareWords": shareWords,
                "EPshareLevel": epsharelevel,
                "EPend": epend,
                "EPanswer": data.get('epanswer')
            }
            if epsharelevel == EvaluationPointLevel.good.value:
                if not award:
                    raise ParamsError('请输入奖励词')
                ep_dict['EPaward'] = award
                ep_dict['DOid'] = ''
                ep_dict['DOname'] = ''
            elif epsharelevel == EvaluationPointLevel.vigilant.value:
                doctor = Doctor.query.filter(Doctor.DOid == doid,
                                             Doctor.isdelete == 0).first()
                if not doctor:
                    raise ParamsError('当前医生不存在')
                ep_dict['DOid'] = doid
                ep_dict['DOname'] = doctor.DOname
                ep_dict['EPaward'] = ''
            else:
                ep_dict['EPaward'] = ''
                ep_dict['DOid'] = ''
                ep_dict['DOname'] = ''

            epid = data.get("epid")
            if data.get('evid'):
                filter_args = [
                    EvaluationPoint.EVid == data.get('evid'),
                    EvaluationPoint.isdelete == 0
                ]
                if epid:
                    filter_args.append(EvaluationPoint.EPid != epid)
                ep_list = EvaluationPoint.query.filter(*filter_args).all()
                for ep in ep_list:
                    if not (epstart > Decimal(str(ep["EPend"] or 0))
                            or epend < Decimal(str(ep["EPstart"]) or 0)):
                        return PointError('存在重叠分数区间')
        with db.auto_commit():
            if not epid:
                # 新增
                ep_dict["EPid"] = str(uuid.uuid1())
                ep_instance = EvaluationPoint.create(ep_dict)
                msg = "新增成功"
            else:
                ep_instance = EvaluationPoint.query.filter(
                    EvaluationPoint.EPid == epid).first_("未找到该分数区间")
                if data.get("delete"):
                    ep_instance.update({"isdelete": 1})
                    msg = "删除成功"
                else:
                    ep_instance.update(ep_dict)
                    msg = "修改成功"
            db.session.add(ep_instance)
        return Success(message=msg)
Beispiel #23
0
    def set_coupon(self):
        """
        创建/编辑/删除优惠券
        """
        if not is_admin():
            return AuthorityError('无权限')
        data = parameter_required(('costarttime', "coendtime", "cosubtration", "colimitnum")
                                  if not request.json.get('delete') else('coid',))
        if data.get('codownline'):
            codownline = data.get('codownline')
        else:
            codownline = 0
        costarttime = data.get('costarttime')
        coendtime = data.get('coendtime')
        if costarttime:
            start_time = datetime.datetime.strptime(costarttime, "%Y-%m-%d %H:%M:%S")
        else:
            start_time = datetime.datetime.now()
        if coendtime:
            end_time = datetime.datetime.strptime(coendtime, "%Y-%m-%d %H:%M:%S")
        else:
            end_time = datetime.datetime.now()
        co_dict = {
            'COstarttime': costarttime,
            'COendtime': coendtime,
            'COdownline': codownline,
            'COlimitnum': data.get('colimitnum'),
            'COsubtration': Decimal(str(data.get('cosubtration') or 0)),
            'COgetnum': 0
        }
        coid = data.get('coid')
        with db.auto_commit():
            if not coid:
                """新增"""
                if end_time < start_time or datetime.datetime.now() > start_time:
                    return TimeError()
                co_dict['COid'] = str(uuid.uuid1())
                co_dict["COstatus"] = 501
                co_instance = Coupon.create(co_dict)
                msg = '添加成功'

                # 添加优惠券到期时的定时任务
                add_async_task(func=change_coupon_status, start_time=end_time,
                               func_args=(co_dict['COid'],), conn_id='end_coupon{}'.format(co_dict['COid']))
            else:
                """修改/删除"""
                co_instance = Coupon.query.filter(Coupon.COid == coid).first_('未找到该优惠券信息')
                cancel_async_task(conn_id='end_coupon{}'.format(co_instance.COid))  # 取消已有定时任务
                if data.get('delete'):
                    co_instance.update({'isdelete': 1})
                    msg = '删除成功'
                else:
                    if not (end_time > start_time >= datetime.datetime.now()):
                        raise TimeError('结束时间需大于开始时间,开始时间需大于当前时间')
                    co_instance.update(co_dict, null='not')
                    msg = '编辑成功'

                    # 重新添加优惠券到期时的定时任务
                    add_async_task(func=change_coupon_status, start_time=end_time,
                                   func_args=(co_instance.COid,), conn_id='end_coupon{}'.format(co_instance.COid))
            db.session.add(co_instance)
        return Success(message=msg)