Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/qijisheng
| | |
| | | */ |
| | | @TableField("shop_id") |
| | | private Integer shopId; |
| | | /** |
| | | * 角色(1=店长,2=店员,3=技师) |
| | | */ |
| | | @TableField("role_type") |
| | | private Integer roleType; |
| | | } |
| | |
| | | @ApiModelProperty(value = "预约单id") |
| | | private String technicianSubscribeId; |
| | | |
| | | @ApiModelProperty("核销码BASE64") |
| | | private String writeOffCode; |
| | | |
| | | } |
| | |
| | | <groupId>org.projectlombok</groupId> |
| | | <artifactId>lombok</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.google.zxing</groupId> |
| | | <artifactId>core</artifactId> |
| | | <version>3.4.1</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.google.zxing</groupId> |
| | | <artifactId>javase</artifactId> |
| | | <version>3.4.1</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.common.core.utils.uuid; |
| | | |
| | | import com.google.zxing.BarcodeFormat; |
| | | import com.google.zxing.WriterException; |
| | | import com.google.zxing.client.j2se.MatrixToImageWriter; |
| | | import com.google.zxing.common.BitMatrix; |
| | | import com.google.zxing.qrcode.QRCodeWriter; |
| | | |
| | | import java.io.ByteArrayOutputStream; |
| | | import java.io.IOException; |
| | | import java.util.Base64; |
| | | |
| | | public class QRCodeGenerator { |
| | | |
| | | /** |
| | | * 生成二维码图片的base64编码 |
| | | * @param text |
| | | * @param width |
| | | * @param height |
| | | * @return |
| | | * @throws WriterException |
| | | * @throws IOException |
| | | */ |
| | | public static String generateQRCodeBase64(String text, int width, int height) throws WriterException, IOException { |
| | | QRCodeWriter qrCodeWriter = new QRCodeWriter(); |
| | | BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height); |
| | | |
| | | ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream(); |
| | | MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream); |
| | | byte[] pngData = pngOutputStream.toByteArray(); |
| | | |
| | | return Base64.getEncoder().encodeToString(pngData); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | try { |
| | | String text = "Hello, World!"; |
| | | String base64QRCode = generateQRCodeBase64(text, 200, 200); |
| | | System.out.println("Base64 QR Code: " + base64QRCode); |
| | | } catch (WriterException | IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | |
| | | AppUserShop appUserShop = new AppUserShop(); |
| | | appUserShop.setAppUserId(appUser.getId()); |
| | | appUserShop.setShopId(sysUser1.getObjectId()); |
| | | appUserShop.setRoleType(2); |
| | | appUserShopClient.saveAppUserShop(appUserShop); |
| | | appUser.setUserType(2); |
| | | appUserClient.editAppUserById(appUser); |
| | |
| | | <if test="roleType != null and roleType != ''">role_type,</if> |
| | | <if test="remark != null and remark != ''">remark,</if> |
| | | <if test="objectId != null and objectId != ''">objectId,</if> |
| | | <if test="appUserId != null and appUserId != ''">app_user_id,</if> |
| | | create_time |
| | | )values( |
| | | <if test="userId != null and userId != ''">#{userId},</if> |
| | |
| | | <if test="roleType != null and roleType != ''">#{roleType},</if> |
| | | <if test="remark != null and remark != ''">#{remark},</if> |
| | | <if test="objectId != null and objectId != ''">#{objectId},</if> |
| | | <if test="appUserId != null and appUserId != ''">#{appUserId},</if> |
| | | sysdate() |
| | | ) |
| | | </insert> |
| | |
| | | @PostMapping("/editAppUserById") |
| | | public R<Void> editAppUserById(@RequestBody AppUser appUser) { |
| | | appUserService.updateById(appUser); |
| | | appUserService.update(new LambdaUpdateWrapper<AppUser>().eq(AppUser::getId, appUser.getId()) |
| | | .set(AppUser::getLastShopTime, appUser.getLastShopTime())); |
| | | return R.ok(); |
| | | |
| | | } |
| | |
| | | .limit(daysBetween + 1) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 上传图片 |
| | |
| | | if(null != appUserShop.getShopId()){ |
| | | wrapper.eq(AppUserShop::getShopId, appUserShop.getShopId()); |
| | | } |
| | | if(null != appUserShop.getRoleType()){ |
| | | wrapper.eq(AppUserShop::getRoleType, appUserShop.getRoleType()); |
| | | } |
| | | appUserShopService.remove(wrapper); |
| | | return R.ok(); |
| | | } |
| | |
| | | private String userName; |
| | | |
| | | @ApiModelProperty("电话") |
| | | private String phone; |
| | | private String userPhone; |
| | | private Integer pageNum; |
| | | private Integer pageSize; |
| | | |
| | |
| | | longitude, |
| | | latitude, |
| | | phone |
| | | from t_app_user where city_code = #{cityCode} and del_flag = 0 and status = 1 and vip_id >= 4 |
| | | from t_app_user where ((city_code = #{cityCode} and vip_id >= 4) or id = 1) and del_flag = 0 and status = 1 |
| | | <if test="null != nearbyReferrer.name and '' != nearbyReferrer.name"> |
| | | and `name` like CONCAT('%', #{nearbyReferrer.name}, '%') |
| | | </if> |
| | |
| | | SELECT ta.id, ta.phone, ta.`name`, ta.vip_id, ta.shop_id, ta.status |
| | | FROM t_app_user ta |
| | | <where> |
| | | ta.del_flag = 0 |
| | | ta.del_flag = 0 and ta.status != 3 |
| | | <if test="null != appUser.name and '' != appUser.name"> |
| | | and ta.`name` like CONCAT('%',#{appUser.name},'%') |
| | | </if> |
| | |
| | | tbcr.after_amount |
| | | FROM |
| | | t_balance_change_record tbcr |
| | | LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id |
| | | LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id |
| | | <where> |
| | | and tbcr.change_type = 4 |
| | | <if test="changeRecord.userName != null and changeRecord.userName != ''"> |
| | | and tau.name like concat('%',#{changeRecord.userName},'%') |
| | | </if> |
| | |
| | | select t1.*,t2.name as userName,t2.phone as userPhone |
| | | from t_withdrawal_requests t1 |
| | | left join t_app_user t2 on t1.app_user_id = t2.id |
| | | <if test="withQuery.phone != null and withQuery.phone != ''"> |
| | | AND t2.phone LIKE concat('%',#{withQuery.phone},'%') |
| | | where 1 = 1 |
| | | <if test="withQuery.userPhone != null and withQuery.userPhone != ''"> |
| | | AND t2.phone LIKE concat('%',#{withQuery.userPhone},'%') |
| | | </if> |
| | | <if test="withQuery.userName != null and withQuery.userName != ''"> |
| | | AND t2.name LIKE concat('%',#{withQuery.userName},'%') |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.uuid.QRCodeGenerator; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.order.enums.OrderStatus; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDateTime; |
| | |
| | | Long id = data.get(0).getId(); |
| | | orderDetailVO.setTechnicianSubscribeId(id.toString()); |
| | | } |
| | | } |
| | | // 生成核销码BASE64 |
| | | try { |
| | | String base64 = QRCodeGenerator.generateQRCodeBase64(order.getOrderNumber(), 124, 124); |
| | | orderDetailVO.setWriteOffCode(base64); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new ServiceException("生成核销码失败"); |
| | | } |
| | | return orderDetailVO; |
| | | } |
| | |
| | | appUser.setBalance(balance.add(paymentAmount).setScale(2, RoundingMode.HALF_EVEN)); |
| | | appUser.setShopAmount(appUser.getShopAmount().subtract(paymentAmount).setScale(2, RoundingMode.HALF_EVEN)); |
| | | //查询最后一次的消费订单 |
| | | Order order1 = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, order.getAppUserId()).eq(Order::getPayStatus, 2).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(2, 3, 4, 8)).ne(Order::getId, order.getId()).last(" order by create_time desc limit 0, 1")); |
| | | Order order1 = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, order.getAppUserId()).eq(Order::getPayStatus, 2) |
| | | .eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(1, 2, 3, 4, 8)).ne(Order::getId, order.getId()).last(" order by create_time desc limit 0, 1")); |
| | | if(null != order1){ |
| | | appUser.setLastShopTime(order1.getCreateTime()); |
| | | }else{ |
| | | appUser.setLastShopTime(LocalDateTime.MIN); |
| | | appUser.setLastShopTime(null); |
| | | } |
| | | |
| | | //构建账户余额流水明细 |
| | |
| | | } |
| | | }else{ |
| | | //部分商品适用 |
| | | BigDecimal goodsMoney = BigDecimal.ZERO; |
| | | BigDecimal goodsMoney = BigDecimal.ZERO; |
| | | for (MyShoppingCartVo myShoppingCartVo : goodsList) { |
| | | Integer goodsId = myShoppingCartVo.getGoodsId(); |
| | | BigDecimal cash = myShoppingCartVo.getCash(); |
| | | if(forGoodIds.contains(goodsId)){ |
| | | if(forGoodIds.contains(String.valueOf(goodsId))){ |
| | | goodsMoney = goodsMoney.add(cash); |
| | | } |
| | | } |
| | |
| | | private String afterSaleTime; |
| | | @ApiModelProperty("活动名称") |
| | | private String activityName; |
| | | @ApiModelProperty("核销码BASE64") |
| | | private String writeOffCode; |
| | | |
| | | } |
| | |
| | | SELECT |
| | | count(*) as total, |
| | | SUM( CASE WHEN tor.order_type = 1 THEN 1 ELSE 0 END ) as serviceTotal, |
| | | SUM( CASE WHEN tor.order_type = 2 THEN 1 ELSE 0 END ) as singleTotal, |
| | | SUM( CASE WHEN tor.order_type = 2 and distribution_mode = 1 THEN 1 ELSE 0 END ) as singleTotal, |
| | | SUM( tor.total_amount ) as totalMoney, |
| | | SUM( CASE WHEN tor.order_type = 1 THEN tor.total_amount ELSE 0 END ) as serviceTotalMoney, |
| | | SUM( CASE WHEN tor.order_type = 2 THEN tor.total_amount ELSE 0 END ) as singleTotalMoney |
| | |
| | | private void count(Long userid, List<CouponInfo> list1, List<CouponInfo> returnList) { |
| | | for (CouponInfo couponInfo : list1) { |
| | | Long count = appUserClient.getCouponCount(-1L, couponInfo.getId()).getData(); |
| | | if(couponInfo.getSendNum() <= count){ |
| | | couponInfo.setMaxNum(count.intValue() - couponInfo.getSendNum()); |
| | | for (int i = 0; i < couponInfo.getMaxNum(); i++) { |
| | | returnList.add(couponInfo); |
| | | } |
| | | if(count >= couponInfo.getSendNum()){ |
| | | continue; |
| | | } |
| | | count = appUserClient.getCouponCount(userid, couponInfo.getId()).getData(); |
| | | couponInfo.setMaxNum(couponInfo.getMaxNum() - count.intValue()); |
| | | for (int i = 0; i < couponInfo.getMaxNum(); i++) { |
| | | returnList.add(couponInfo); |
| | | if((couponInfo.getSendNum() - count) >= couponInfo.getMaxNum()){ |
| | | for (int i = 0; i < couponInfo.getMaxNum(); i++) { |
| | | returnList.add(couponInfo); |
| | | } |
| | | }else{ |
| | | for (int i = 0; i < (couponInfo.getSendNum() - count); i++) { |
| | | returnList.add(couponInfo); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | public R<Page<GoodsCategory>> list(@ApiParam("页码") @RequestParam Integer pageNum,@ApiParam("每一页数据大小") Integer pageSize, GoodsCategory goodsCategory){ |
| | | Page<GoodsCategory> page = goodsCategoryService.lambdaQuery() |
| | | .like(StringUtils.isNotEmpty(goodsCategory.getName()),GoodsCategory::getName, goodsCategory.getName()) |
| | | .eq(GoodsCategory::getDelFlag,0) |
| | | .page(Page.of(pageNum, pageSize)); |
| | | return R.ok(page); |
| | | } |
| | |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.order.feignClient.OrderClient; |
| | | import com.ruoyi.order.model.Order; |
| | |
| | | |
| | | @GetMapping("/goodsList") |
| | | @ApiOperation(value = "获取商品评价", tags = {"小程序-获取商品评价"}) |
| | | public R<List<GoodsEvaluate>> goodsList(@ApiParam("商品id") Integer goodsId){ |
| | | List<GoodsEvaluate> list = goodsEvaluateService.lambdaQuery().eq(GoodsEvaluate::getGoodsId, goodsId).eq(GoodsEvaluate::getDelFlag, 0) |
| | | .eq(GoodsEvaluate::getStatus, 2).isNotNull(GoodsEvaluate::getComment).ne(GoodsEvaluate::getComment, "").orderByDesc(GoodsEvaluate::getCreateTime).list(); |
| | | for (GoodsEvaluate goodsEvaluate : list) { |
| | | public R<PageInfo<GoodsEvaluate>> goodsList(@ApiParam("商品id") Integer goodsId, Integer pageNum, Integer pageSize){ |
| | | PageInfo<GoodsEvaluate> pageInfo = new PageInfo<>(pageNum, pageSize); |
| | | PageInfo<GoodsEvaluate> page = goodsEvaluateService.lambdaQuery().eq(GoodsEvaluate::getGoodsId, goodsId).eq(GoodsEvaluate::getDelFlag, 0) |
| | | .eq(GoodsEvaluate::getStatus, 2).isNotNull(GoodsEvaluate::getComment).ne(GoodsEvaluate::getComment, "") |
| | | .orderByDesc(GoodsEvaluate::getCreateTime).page(pageInfo); |
| | | for (GoodsEvaluate goodsEvaluate : page.getRecords()) { |
| | | AppUser appUserById = appUserClient.getAppUserById(goodsEvaluate.getAppUserId()); |
| | | if(null != appUserById){ |
| | | goodsEvaluate.setUserName(appUserById.getName()); |
| | |
| | | goodsEvaluate.setIdStr(String.valueOf(goodsEvaluate.getId())); |
| | | } |
| | | } |
| | | return R.ok(list); |
| | | return R.ok(page); |
| | | } |
| | | |
| | | /** |
| | |
| | | AppUserShop appUserShop = new AppUserShop(); |
| | | appUserShop.setAppUserId(appUser.getId()); |
| | | appUserShop.setShopId(shopId); |
| | | appUserShop.setRoleType(1); |
| | | R<Void> r = appUserClient.addAppUserShop(appUserShop); |
| | | if (R.isError(r)){ |
| | | throw new RuntimeException("添加失败"); |
| | |
| | | userShop.setShopId(shopId); |
| | | userShop.setRoleType(1); |
| | | userShop.setRoleId(2L); |
| | | userShop.setNickName(sysUser.getNickName()); |
| | | userShop.setNickName(user.getNickName()); |
| | | userShop.setCreateTime(LocalDateTime.now()); |
| | | userShopClient.saveUserShop(userShop); |
| | | } |
| | |
| | | AppUserShop appUserShop = new AppUserShop(); |
| | | appUserShop.setAppUserId(appUser.getId()); |
| | | appUserShop.setShopId(shop.getId()); |
| | | appUserShop.setRoleType(1); |
| | | appUserShopClient.delAppUserShop(appUserShop); |
| | | |
| | | //添加新管理员 |
| | |
| | | appUserShop = new AppUserShop(); |
| | | appUserShop.setAppUserId(appUser.getId()); |
| | | appUserShop.setShopId(shop.getId()); |
| | | appUserShop.setRoleType(1); |
| | | appUserClient.addAppUserShop(appUserShop); |
| | | appUser.setUserType(2); |
| | | appUserClient.editAppUserById(appUser); |
| | | |
| | | |
| | | //修改管理员 |
| | | shop.setAppUserId(appUser.getId()); |
| | |
| | | private SysUserClient sysUserClient; |
| | | @Resource |
| | | private AppUserShopClient appUserShopClient; |
| | | |
| | | @Resource |
| | | private AppUserClient appUserClient; |
| | | |
| | | |
| | | |
| | |
| | | return R.ok(page); |
| | | } |
| | | |
| | | @Resource |
| | | private AppUserClient appUserClient; |
| | | |
| | | @PostMapping("/manage/addorupdate") |
| | | @ApiOperation(value = "添加编辑", tags = {"门店-技师列表"}) |
| | | public R<Page<Technician>> add(@RequestBody Technician technician) { |
| | |
| | | AppUserShop appUserShop = new AppUserShop(); |
| | | appUserShop.setShopId(sysUser.getObjectId()); |
| | | appUserShop.setAppUserId(appUser.getId()); |
| | | appUserShop.setRoleType(3); |
| | | appUserShopClient.saveAppUserShop(appUserShop); |
| | | |
| | | }else { |
| | |
| | | technicianService.saveOrUpdate(technician); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @GetMapping("/manage/delete") |
| | | @ApiOperation(value = "删除", tags = {"门店-技师列表"}) |
| | | public R<Page<Technician>> delete(@RequestParam Integer id) { |
| | | technicianService.removeById(id); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @GetMapping("/manage/changeStatus") |
| | | @ApiOperation(value = "上下架", tags = {"门店-技师列表"}) |
| | | public R<Page<Technician>> changeStatus(@RequestParam Integer id,@RequestParam@ApiParam("状态(1=下架,2=上架)") Integer status) { |
| | |
| | | technicianService.updateById(byId); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @GetMapping("/manage/changesubscri") |
| | | @ApiOperation(value = "修改预约状态", tags = {"门店-技师列表"}) |
| | | public R<Page<Technician>> changesubscri(@RequestParam Integer id,@RequestParam@ApiParam("预约状态(1=可预约,2=不可预约)") Integer subscribeStatus) { |
| | |
| | | */ |
| | | List<TechnicianSubscribeVO> getTechnicianSubscribeByUserAndShop(PageInfo<TechnicianSubscribeVO> pageInfo, |
| | | @Param("shopId") Long shopId, |
| | | @Param("status") Integer status); |
| | | @Param("status") Integer status, |
| | | @Param("technicianId") Integer technicianId); |
| | | List<TechnicianSubscribeVO> getTechnicianSubscribeByUserAndShop1(PageInfo<TechnicianSubscribeVO> pageInfo, |
| | | @Param("shopId") Long shopId, |
| | | @Param("status") Integer status, @Param("phone")String phone, |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.account.api.feignClient.AppUserClient; |
| | | import com.ruoyi.account.api.feignClient.AppUserShopClient; |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.account.api.model.AppUserShop; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.order.feignClient.RemoteOrderGoodsClient; |
| | | import com.ruoyi.other.api.domain.Technician; |
| | | import com.ruoyi.other.api.domain.TechnicianSubscribe; |
| | | import com.ruoyi.other.enums.TechnicianStatus; |
| | | import com.ruoyi.other.mapper.TechnicianSubscribeMapper; |
| | | import com.ruoyi.other.service.TechnicianService; |
| | | import com.ruoyi.other.service.TechnicianSubscribeService; |
| | | import com.ruoyi.other.vo.TechnicianSubscribeVO; |
| | | import org.springframework.data.redis.connection.RedisZSetCommands; |
| | |
| | | import java.time.ZoneId; |
| | | import java.time.ZoneOffset; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | |
| | | @Resource |
| | | private AppUserClient appUserClient; |
| | | |
| | | @Resource |
| | | private TokenService tokenService; |
| | | @Resource |
| | | private AppUserShopClient appUserShopClient; |
| | | @Resource |
| | | private TechnicianService technicianService; |
| | | |
| | | |
| | | |
| | | |
| | |
| | | @Override |
| | | public PageInfo<TechnicianSubscribeVO> getTechnicianSubscribeByUserAndShop(Long shopId, Integer status, Integer pageCurr, Integer pageSize) { |
| | | PageInfo<TechnicianSubscribeVO> pageInfo = new PageInfo(pageCurr, pageSize); |
| | | List<TechnicianSubscribeVO> list = technicianSubscribeMapper.getTechnicianSubscribeByUserAndShop(pageInfo, shopId, status); |
| | | Long userid = tokenService.getLoginUserApplet().getUserid(); |
| | | List<AppUserShop> data = appUserShopClient.getAppUserShop(userid).getData(); |
| | | Optional<AppUserShop> first = data.stream().filter(s -> s.getShopId() == shopId.intValue() && s.getRoleType() == 3).findFirst(); |
| | | Integer technicianId = null; |
| | | if(first.isPresent()){ |
| | | AppUserShop appUserShop = first.get(); |
| | | Technician technician = technicianService.getOne(new LambdaQueryWrapper<Technician>().eq(Technician::getAppUserId, appUserShop.getAppUserId()) |
| | | .eq(Technician::getShopId, appUserShop.getShopId()).eq(Technician::getDelFlag, 0).eq(Technician::getStatus, 1)); |
| | | technicianId = technician.getId(); |
| | | } |
| | | List<TechnicianSubscribeVO> list = technicianSubscribeMapper.getTechnicianSubscribeByUserAndShop(pageInfo, shopId, status, technicianId); |
| | | for (TechnicianSubscribeVO technicianSubscribeVO : list) { |
| | | String id = technicianSubscribeVO.getId(); |
| | | TechnicianSubscribe technicianSubscribe = this.getById(id); |
| | |
| | | <if test="status != null"> |
| | | AND tts.status = #{status} |
| | | </if> |
| | | <if test="technicianId != null"> |
| | | AND tts.technician_id = #{technicianId} |
| | | </if> |
| | | ORDER BY tts.create_time DESC |
| | | </select> |
| | | <select id="getTechnicianSubscribeByUserAndShop1" resultType="com.ruoyi.other.vo.TechnicianSubscribeVO"> |