| | |
| | | tAppUser.setPassword(Md5Util.MD5Encode("111111", null)); |
| | | tAppUser.setIsVip(0); |
| | | tAppUser.setState(1); |
| | | tAppUser.setInsertTime(new Date()); |
| | | this.baseMapper.insert(tAppUser); |
| | | } |
| | | if (tAppUser.getState() == 2) { |
| | |
| | | } |
| | | } |
| | | pointsMerchandise.setCode(code); |
| | | pointsMerchandise.setInsertTime(new Date()); |
| | | returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise); |
| | | } |
| | | |
| | |
| | | packagePayment.setStatus(1); |
| | | packagePayment.setState(1); |
| | | packagePayment.setCode(code); |
| | | packagePayment.setInsertTime(new Date()); |
| | | // paymentClient.savePaymentCoursePackage(packagePayment); |
| | | |
| | | OrderDto orderDto = new OrderDto(); |
| | |
| | | coupon.setCouponId(exchangeType.getGoodId()); |
| | | coupon.setUserId(userIdFormRedis); |
| | | coupon.setStatus(1); |
| | | coupon.setInsertTime(new Date()); |
| | | ucponClient.insertToAppuserCoupon(coupon); |
| | | } |
| | | break; |
| | |
| | | /** |
| | | * 优惠券支付宝支付 |
| | | * |
| | | * @param uid |
| | | * @param paymentPrice |
| | | * @param paymentCourseVo |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | |
| | | coupon.setCouponId(userPointsMerchandises.get(0).getPointsMerchandiseId()); |
| | | coupon.setUserId(userPointsMerchandises.get(0).getUserId()); |
| | | coupon.setStatus(1); |
| | | coupon.setInsertTime(new Date()); |
| | | ucponClient.insertToAppuserCoupon(coupon); |
| | | break; |
| | | default: |
| | |
| | | coupon.setCouponId(userPointsMerchandises.get(0).getPointsMerchandiseId()); |
| | | coupon.setUserId(userPointsMerchandises.get(0).getUserId()); |
| | | coupon.setStatus(1); |
| | | coupon.setInsertTime(new Date()); |
| | | ucponClient.insertToAppuserCoupon(coupon); |
| | | break; |
| | | default: |
| | |
| | | saveParticipant.setWeight(student.getWeight()); |
| | | saveParticipant.setPhone(student.getPhone()); |
| | | saveParticipant.setIdcard(student.getIdCard()); |
| | | |
| | | participantClient.saveParticipant(saveParticipant); |
| | | return ResultUtil.success(); |
| | | } |
| | |
| | | //detailsResponse.setRid(rid); |
| | | // todo 修改区域id 临时 |
| | | // 根据门店id 写死区域id 后续调整为门票指定多个区域 |
| | | // 以下代码均为临时代码 |
| | | // 以下代码均为临时代码=============================== |
| | | for (Integer integer : collect) { |
| | | ArrayList<Integer> list2 = new ArrayList<>(); |
| | | if (integer==2024){ |
| | |
| | | } |
| | | } |
| | | } |
| | | //====================================================== |
| | | } |
| | | } |
| | | |
| | |
| | | public Integer add(@RequestBody PointsMerchandise pointsMerchandise) { |
| | | Integer storeId = pointsMerchandise.getShelves(); |
| | | pointsMerchandise.setShelves(1); |
| | | pointsMerchandise.setInsertTime(new Date()); |
| | | boolean save = pmdsService.save(pointsMerchandise); |
| | | if (save && ToolUtil.isNotEmpty(storeId) && pointsMerchandise.getType() == 2) { |
| | | PointsMerchandiseStore pointsMerchandiseStore = new PointsMerchandiseStore(); |
| | |
| | | /** |
| | | * 根据id获取用户优惠券数据 |
| | | * |
| | | * @param id |
| | | * @param |
| | | * @return |
| | | */ |
| | | @ResponseBody |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2023/11/28 11:12 |
| | |
| | | @ResponseBody |
| | | @PostMapping("/userCouponPayment/addUserCouponPayment") |
| | | public void addUserCouponPayment(@RequestBody UserCouponPayment userCouponPayment){ |
| | | userCouponPayment.setInsertTime(new Date()); |
| | | userCouponPaymentService.save(userCouponPayment); |
| | | } |
| | | |
| | |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.dsh.activity.mapper.UserPointsMerchandiseMapper"> |
| | | <update id="changeState"> |
| | | update t_benefits_videos set |
| | | update t_user_points_merchandise set |
| | | state = #{state} |
| | | <where> |
| | | <if test="ids != null and ids.size()>0"> |
| | | AND t_benefits_videos.id IN |
| | | AND t_user_points_merchandise.id IN |
| | | <foreach collection="ids" separator="," item="id" open="(" close=")"> |
| | | #{id} |
| | | </foreach> |
| | |
| | | if (paymentCompetitionVo.getPayType() == 3) {//玩湃币 |
| | | money = new BigDecimal(competition.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN); |
| | | if (money.compareTo(new BigDecimal(appUser.getPlayPaiCoins())) > 0) { |
| | | |
| | | return new ResultUtil(2, "报名失败,玩湃币不足,请充值"); |
| | | } |
| | | } |
| | |
| | | } else { |
| | | one = new Participant(); |
| | | BeanUtils.copyProperties(saveParticipant, one); |
| | | one.setInsertTime(new Date()); |
| | | this.save(one); |
| | | } |
| | | } |
| | |
| | | @ResponseBody |
| | | @PostMapping("/coursePackage/addCoursePackage") |
| | | public Integer addCoursePackage(@RequestBody TCoursePackage coursePackage) { |
| | | coursePackage.setInsertTime(new Date()); |
| | | coursePackage.setNeedNum(coursePackage.getCodeTime()); |
| | | return coursePackageService.addCoursePackage(coursePackage); |
| | | } |
| | |
| | | calendar.setTime(new Date()); |
| | | calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays); |
| | | coursePackageOrderStudent.setUseTime(calendar.getTime()); |
| | | |
| | | coursePackageOrderStudent.setInsertTime(new Date()); |
| | | coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent); |
| | | Integer studentId = Integer.valueOf(byId1.getStudentIds()); |
| | | //开始排课 |
| | |
| | | calendar9.add(Calendar.DAY_OF_MONTH, byId.getValidDays()); |
| | | Date time = calendar9.getTime(); |
| | | coursePackageOrderStudent.setUseTime(time); |
| | | coursePackageOrderStudent.setInsertTime(new Date()); |
| | | coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent); |
| | | Integer studentId = Integer.valueOf(byId1.getStudentIds()); |
| | | //中间断课,没有连续续费的情况需要重新排课 |
| | |
| | | courseCounsum.setNum(orderDto.getClassHours()); |
| | | courseCounsum.setInsertTime(new Date()); |
| | | courseCounsum.setReason("积分兑换"); |
| | | courseCounsum.setInsertTime(new Date()); |
| | | courseCounsumService.save(courseCounsum); |
| | | |
| | | |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | @ResponseBody |
| | | @PostMapping("/coursePackageStudent/addCoursePackageStudent") |
| | | public void addCoursePackageStudent(@RequestBody CoursePackageStudent coursePackageStudent) { |
| | | coursePackageStudent.setInsertTime(new Date()); |
| | | coursePackageStudentService.save(coursePackageStudent); |
| | | } |
| | | } |
| | |
| | | coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + coursePackagePaymentConfig.getClassHours()); |
| | | coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + coursePackagePaymentConfig.getClassHours()); |
| | | coursePackageOrderStudent.setStatus(1); |
| | | coursePackageOrderStudent.setInsertTime(new Date()); |
| | | Integer validDays = coursePackage.getValidDays(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(useTime.compareTo(new Date()) < 0 ? new Date() : useTime); |
| | |
| | | @Override |
| | | public Integer addCoursePackage(TCoursePackage coursePackage) { |
| | | try { |
| | | |
| | | coursePackage.setInsertTime(new Date()); |
| | | this.baseMapper.insert(coursePackage); |
| | | |
| | | if (coursePackage.getClassStartTime() != null && coursePackage.getClassStartTime() != "") { |
| | | //生成排课数据 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | |
| | | public String proportionAuth(Model model,@PathVariable("id") Integer id) { |
| | | model.addAttribute("id",id); |
| | | TOperator data = operatorService.getById(id); |
| | | User byId = userService.getById(data.getUserId()); |
| | | model.addAttribute("user",byId); |
| | | List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); |
| | | model.addAttribute("provinceList",list); |
| | | model.addAttribute("data",data); |
| | |
| | | */ |
| | | @RequestMapping(value = "/auth") |
| | | @ResponseBody |
| | | public Object auth(String beneficiaryEnd,String businessEnd,String legalEnd, String name,String phone,String number,Integer operatorId,String bodyType,Integer type,String businessName,String businessNumber, |
| | | public Object auth(String beneficiaryEnd,String businessEnd,String legalEnd, String name,String phone,String number |
| | | ,Integer operatorId,String bodyType,Integer type,String businessName,String businessNumber, |
| | | String legalRepresentative,String registerAddress,String businessTerm,String businessPicture, |
| | | String legalPerson,String legalNumber,String legalPhone,String legalEmail,String legalTerm, |
| | | String legalAddress,String legalFront,String legalBack,Integer accountType,String bank, |
| | |
| | | // 营业执照 |
| | | String string = uploadImg(businessPicture).toString(); |
| | | // 法人身份证正面照 |
| | | legalFront = uploadImg(legalFront).toString(); |
| | | legalFront = uploadImg(legalFront).toString(); |
| | | // 法人身份证背面照 |
| | | legalBack = uploadImg(legalBack).toString(); |
| | | legalBack = uploadImg(legalBack).toString(); |
| | | |
| | | if (bodyType.equals("ENTERPRISE")){ |
| | | // 受益人身份证正面照 |
| | |
| | | // String orderStatus = r.getString("order_status"); |
| | | operatorAuth.setOrderNo(order_no); |
| | | operatorAuth.setOrderStatus(order_status); |
| | | |
| | | |
| | | operatorAuthService.saveOrUpdate(operatorAuth); |
| | | // 通过运营商id找到用户id |
| | | TOperator byId = operatorService.getById(operatorId); |
| | |
| | | if (userId1!=null){ |
| | | // 设置为审核中状态 |
| | | userId1.setAlipayAudit(1); |
| | | userId1.setWechatAudit(1); |
| | | // userId1.setWechatAudit(1); |
| | | operatorUserService.updateById(userId1); |
| | | operatorAuth.setQrCode(null); |
| | | operatorAuthService.saveOrUpdate(operatorAuth); |
| | | } |
| | | } |
| | | } else { |
| | |
| | | data.setState(1); |
| | | operatorService.updateById(data); |
| | | if (type != 1){ |
| | | if (SinataUtil.isNotEmpty(comArr)){ |
| | | JSONArray jsonArray = JSON.parseArray(comArr); |
| | | int size = jsonArray.size(); |
| | | for (int i = 0; i < size; i++) { |
| | | JSONObject jsonObject = jsonArray.getJSONObject(i); |
| | | TOperatorCity province = new TOperatorCity(); |
| | | TOperatorCity city = new TOperatorCity(); |
| | | TOperatorCity one1 = operatorCityService.getOne(new QueryWrapper<TOperatorCity>() |
| | | .eq("name", jsonObject.getString("province")) |
| | | .eq("operatorId", data.getId())); |
| | | // 省 |
| | | if (one1==null){ |
| | | province.setName(jsonObject.getString("province")); |
| | | province.setCode(jsonObject.getInteger("provinceCode")); |
| | | province.setPid(0); |
| | | province.setType(jsonObject.getInteger("areaType")); |
| | | province.setOperatorId(data.getId()); |
| | | city.setPid(province.getId()); |
| | | operatorCityService.save(province); |
| | | // 市 |
| | | if (!jsonObject.getString("city").equals("")){ |
| | | city.setName(jsonObject.getString("city")); |
| | | city.setCode(jsonObject.getInteger("cityCode")); |
| | | if (SinataUtil.isNotEmpty(comArr)){ |
| | | JSONArray jsonArray = JSON.parseArray(comArr); |
| | | int size = jsonArray.size(); |
| | | for (int i = 0; i < size; i++) { |
| | | JSONObject jsonObject = jsonArray.getJSONObject(i); |
| | | TOperatorCity province = new TOperatorCity(); |
| | | TOperatorCity city = new TOperatorCity(); |
| | | TOperatorCity one1 = operatorCityService.getOne(new QueryWrapper<TOperatorCity>() |
| | | .eq("name", jsonObject.getString("province")) |
| | | .eq("operatorId", data.getId())); |
| | | // 省 |
| | | if (one1==null){ |
| | | province.setName(jsonObject.getString("province")); |
| | | province.setCode(jsonObject.getInteger("provinceCode")); |
| | | province.setPid(0); |
| | | province.setType(jsonObject.getInteger("areaType")); |
| | | province.setOperatorId(data.getId()); |
| | | city.setPid(province.getId()); |
| | | city.setType(jsonObject.getInteger("areaType")); |
| | | city.setOperatorId(data.getId()); |
| | | operatorCityService.save(city); |
| | | } |
| | | }else{ |
| | | // 市 |
| | | if (!jsonObject.getString("city").equals("")){ |
| | | city.setName(jsonObject.getString("city")); |
| | | city.setCode(jsonObject.getInteger("cityCode")); |
| | | city.setPid(one1.getId()); |
| | | city.setType(jsonObject.getInteger("areaType")); |
| | | city.setOperatorId(data.getId()); |
| | | operatorCityService.save(city); |
| | | operatorCityService.save(province); |
| | | // 市 |
| | | if (!jsonObject.getString("city").equals("")){ |
| | | city.setName(jsonObject.getString("city")); |
| | | city.setCode(jsonObject.getInteger("cityCode")); |
| | | city.setPid(province.getId()); |
| | | city.setType(jsonObject.getInteger("areaType")); |
| | | city.setOperatorId(data.getId()); |
| | | operatorCityService.save(city); |
| | | } |
| | | }else{ |
| | | // 市 |
| | | if (!jsonObject.getString("city").equals("")){ |
| | | city.setName(jsonObject.getString("city")); |
| | | city.setCode(jsonObject.getInteger("cityCode")); |
| | | city.setPid(one1.getId()); |
| | | city.setType(jsonObject.getInteger("areaType")); |
| | | city.setOperatorId(data.getId()); |
| | | operatorCityService.save(city); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return ResultUtil.success("添加成功"); |
| | | } |
| | |
| | | |
| | | <select id="listAll" resultType="com.dsh.guns.modular.system.model.OperatorUserVO"> |
| | | SELECT t1.id AS id, |
| | | t1.operatorId, |
| | | t1.operatorName, |
| | | t1.userName, |
| | | t1.phone, |
| | | t1.platform, |
| | | t1.proportion, |
| | | t1.number, |
| | | t1.audit, |
| | | t1.type |
| | | FROM ( |
| | | SELECT t3.id, |
| | | t1.id AS operatorId, |
| | | t1.name AS operatorName, |
| | | t2.name AS userName, |
| | | t2.phone, |
| | | t3.alipay AS platform, |
| | | t3.alipayProportion AS proportion, |
| | | t3.alipayNum AS number, |
| | | t3.alipayAudit AS audit, |
| | | t3.alipayType AS type |
| | | FROM t_operator_user t3 |
| | | t1.operatorId, |
| | | t1.operatorName, |
| | | t1.userName, |
| | | t1.phone, |
| | | t1.platform, |
| | | t1.proportion, |
| | | t1.number, |
| | | t1.audit, |
| | | t1.type |
| | | FROM ( |
| | | SELECT t3.id, |
| | | t1.id AS operatorId, |
| | | t1.name AS operatorName, |
| | | t2.name AS userName, |
| | | t2.phone, |
| | | t3.alipay AS platform, |
| | | t3.alipayProportion AS proportion, |
| | | t3.alipayNum AS number, |
| | | t3.alipayAudit AS audit, |
| | | t3.alipayType AS type |
| | | FROM t_operator_user t3 |
| | | LEFT JOIN t_operator t1 ON t3.operatorId = t1.id |
| | | LEFT JOIN sys_user t2 ON t1.userId = t2.id AND t2.objectType = 2 |
| | | |
| | | UNION ALL |
| | | UNION ALL |
| | | |
| | | SELECT t3.id, |
| | | t1.id AS operatorId, |
| | | t1.name AS operatorName, |
| | | t2.name AS userName, |
| | | t2.phone, |
| | | t3.wechat AS platform, |
| | | t3.wechatProportion AS proportion, |
| | | t3.wechatNum AS number, |
| | | t3.wechatAudit AS audit, |
| | | t3.wechatType AS type |
| | | FROM t_operator_user t3 |
| | | SELECT t3.id, |
| | | t1.id AS operatorId, |
| | | t1.name AS operatorName, |
| | | t2.name AS userName, |
| | | t2.phone, |
| | | t3.wechat AS platform, |
| | | t3.wechatProportion AS proportion, |
| | | t3.wechatNum AS number, |
| | | t3.wechatAudit AS audit, |
| | | t3.wechatType AS type |
| | | FROM t_operator_user t3 |
| | | LEFT JOIN t_operator t1 ON t3.operatorId = t1.id |
| | | LEFT JOIN sys_user t2 ON t1.userId = t2.id AND t2.objectType = 2 |
| | | ) AS t1 |
| | | ORDER BY t1.id; |
| | | ) AS t1 |
| | | where 1=1 |
| | | <if test="userName !=null and userName !=''"> |
| | | and t1.userName like concat("%",#{userName},"%") |
| | | </if> |
| | | <if test="phone !=null and phone !=''"> |
| | | and t1.phone like concat("%",#{phone},"%") |
| | | </if> |
| | | <if test="platform !=null and platform !='' and platform==1"> |
| | | and t1.platform = "微信" |
| | | </if> |
| | | <if test="platform !=null and platform !='' and platform==2"> |
| | | and t1.platform = "支付宝" |
| | | </if> |
| | | <if test="type !=null and type !='' "> |
| | | and t1.type = #{type} |
| | | </if> |
| | | <if test="state !=null and state !=''"> |
| | | and t1.audit = #{state} |
| | | </if> |
| | | ORDER BY t1.id; |
| | | |
| | | </select> |
| | | </mapper> |
| | |
| | | <div class="form-horizontal" id="carInfoForm"> |
| | | <h2>商户信息</h2> |
| | | <div style="display: flex"> |
| | | <h3>运营商名称:</h3><h3>${data.name}</h3> |
| | | <span>运营商名称:</span><span>${data.name}</span> |
| | | <span>管理员姓名:</span><span>${user.name}</span> |
| | | <span>管理员电话:</span><span>${user.phone}</span> |
| | | </div> |
| | | |
| | | <h2>商户号信息</h2> |
| | |
| | | <div class="col-lg-6" style=""> |
| | | <div class="form-group"> |
| | | <label class="col-sm-4 control-label" > |
| | | 主题类型:<input checked type="radio" name="bodyType" value="IND_BIZ" onclick="updateHalf(1)">个人 |
| | | 主体类型:<input checked type="radio" name="bodyType" value="IND_BIZ" onclick="updateHalf(1)">个人 |
| | | <input type="radio" name="bodyType" value="ENTERPRISE" onclick="updateHalf(2)">企业 |
| | | </label> |
| | | </div> |
| | |
| | | </div> |
| | | <select style="width: 300px" class="form-control" id="type" name = "platform"> |
| | | <option value="">全部</option> |
| | | <option value="1">法人</option> |
| | | <option value="2">个人</option> |
| | | <option value="1">个人</option> |
| | | <option value="2">企业</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | |
| | | 审核状态 |
| | | </button> |
| | | </div> |
| | | <select class="form-control" id="state" > |
| | | <select style="width: 300px" class="form-control" id="state" > |
| | | <option value="">全部</option> |
| | | <option value="1">待审核</option> |
| | | <option value="2">审核中</option> |
| | | <option value="2">已审核</option> |
| | | <option value="2">已拒绝</option> |
| | | <option value="0">未认证</option> |
| | | <option value="1">审核中</option> |
| | | <option value="2">待联系人确认</option> |
| | | <option value="3">待法人确认</option> |
| | | <option value="4">审核通过</option> |
| | | <option value="5">审核失败</option> |
| | | <option value="6">已冻结</option> |
| | | <option value="7">已撤回</option> |
| | | <option value="8">联系人处理中</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | |
| | | {title: '认证平台', field: 'platform', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '认证类型', field: 'type', visible: true, align: 'center', valign: 'middle', |
| | | formatter:function (data) { |
| | | if (data==1){ |
| | | return "个人" |
| | | }else if (data==2){ |
| | | return "企业" |
| | | }else{ |
| | | return "未认证" |
| | | } |
| | | if (data==1){ |
| | | return "个人" |
| | | }else if (data==2){ |
| | | return "企业" |
| | | }else{ |
| | | return "未认证" |
| | | } |
| | | |
| | | } |
| | | }, |
| | | {title: '分账比例', field: 'proportion', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '审核状态', field: 'audit', visible: true, align: 'center', valign: 'middle', |
| | | formatter:function (data) { |
| | | return {1:"待审核",2:"审核中",3:"已通过",4:"已拒绝"}[data] |
| | | return {0:"未认证",1:"审核中",2:"待联系人确认",3:"待法人确认",5:"审核失败",6:"已冻结",7:"已撤回",8:"联系人处理中"}[data] |
| | | } |
| | | }, |
| | | {title: '操作', field: 'audit', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (data,row) { |
| | | var btn = ""; |
| | | if(data==1) { |
| | | if(data==0) { |
| | | var str = '<button class="btn btn-outline btn-primary" onclick="TSite.auth('+row.operatorId+')" >去认证</button>' |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>'] |
| | | }else if (data==2){ |
| | | var str = '<button class="btn btn-outline btn-primary" onclick="TSite.auth('+row.operatorId+')" >详情</button>' |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>'] |
| | | }else if(data==4){ |
| | | }else if(data !=4){ |
| | | var str = '<button class="btn btn-outline btn-primary" onclick="TSite.auth('+row.operatorId+')" >详情</button>' |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>'] |
| | | } else if(data==4){ |
| | | var str = '<h3>已绑定</h3>' |
| | | btn = [str] |
| | | } |