票务核销接口
This commit is contained in:
parent
ec840a0781
commit
f8b4ebe394
@ -21,7 +21,7 @@ public class ZTicketVerificationAuth extends Model<ZTicketVerificationAuth> {
|
||||
|
||||
// 权限ID
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private String authId;
|
||||
private Long authId;
|
||||
// 用户ID
|
||||
private Integer memberId;
|
||||
// 演出ID
|
||||
|
@ -31,7 +31,7 @@ public class ZTicketVerificationRecords extends Model<ZTicketVerificationRecords
|
||||
// 演出ID
|
||||
private Long showId;
|
||||
// 核销人用户ID
|
||||
private Long writeOffUserId;
|
||||
private Integer writeOffUserId;
|
||||
// 创建时间
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
|
@ -28,9 +28,9 @@ public class ZTicketVerificationAuthController {
|
||||
return R.success(zTicketVerificationAuthService.getList());
|
||||
}
|
||||
@GetMapping("page")
|
||||
@ApiOperation(value = "分页查询")
|
||||
public R page(Page page) {
|
||||
return R.success(zTicketVerificationAuthService.getPage(page));
|
||||
@ApiOperation(value = "分页查询该演出的核销人")
|
||||
public R page(Page page,@RequestParam Long showId) {
|
||||
return R.success(zTicketVerificationAuthService.getPage(page,showId));
|
||||
}
|
||||
|
||||
@GetMapping("{Id}")
|
||||
|
@ -15,7 +15,7 @@ import java.util.List;
|
||||
*/
|
||||
public interface ZTicketVerificationAuthService extends IService<ZTicketVerificationAuth> {
|
||||
List<ZTicketVerificationAuth> getList();
|
||||
IPage<ZTicketVerificationAuth> getPage(Page page);
|
||||
IPage<ZTicketVerificationAuth> getPage(Page page,Long showId);
|
||||
ZTicketVerificationAuth getByZTicketVerificationAuthId(Integer id);
|
||||
|
||||
ZTicketVerificationAuth add(ZTicketVerificationAuth zTicketVerificationAuth);
|
||||
|
@ -4,13 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cpop.nftmeta.admin.service.ZMemberService;
|
||||
import com.cpop.nftmeta.admin.vo.TicketVerificationAuthVO;
|
||||
import com.cpop.nftmeta.common.entity.ZMember;
|
||||
import com.cpop.nftmeta.common.entity.ZTicketVerificationAuth;
|
||||
import com.cpop.nftmeta.admin.mapper.ZTicketVerificationAuthMapper;
|
||||
import com.cpop.nftmeta.admin.service.ZTicketVerificationAuthService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 门票核销权限表
|
||||
@ -19,15 +24,31 @@ import java.util.List;
|
||||
*/
|
||||
@Service
|
||||
public class ZTicketVerificationAuthServiceImpl extends ServiceImpl<ZTicketVerificationAuthMapper,ZTicketVerificationAuth> implements ZTicketVerificationAuthService {
|
||||
@Autowired
|
||||
private ZMemberService zMemberService;
|
||||
@Override
|
||||
public List<ZTicketVerificationAuth> getList() {
|
||||
return this.list();
|
||||
}
|
||||
@Override
|
||||
public IPage getPage(Page page) {
|
||||
public IPage getPage(Page page,Long showId) {
|
||||
LambdaQueryWrapper<ZTicketVerificationAuth> lambdaQueryWrapper=new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(ZTicketVerificationAuth::getShowId,showId);
|
||||
Page authPage = this.page(page, lambdaQueryWrapper);
|
||||
List<ZTicketVerificationAuth> records = authPage.getRecords();
|
||||
// 用户名 手机号 id
|
||||
return this.page(page, lambdaQueryWrapper);
|
||||
List<TicketVerificationAuthVO> authVOS = records.stream().map(e -> {
|
||||
TicketVerificationAuthVO vo = new TicketVerificationAuthVO();
|
||||
vo.setAuthId(e.getAuthId());
|
||||
ZMember member = zMemberService.getById(e.getMemberId());
|
||||
if (member != null) {
|
||||
vo.setNickname(member.getNickname());
|
||||
vo.setPhone(member.getUsername());
|
||||
}
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
authPage.setRecords(authVOS);
|
||||
return authPage;
|
||||
}
|
||||
@Override
|
||||
public ZTicketVerificationAuth getByZTicketVerificationAuthId(@NotNull(message = "Id不能为空") Integer id) {
|
||||
|
@ -0,0 +1,17 @@
|
||||
package com.cpop.nftmeta.admin.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Version: 1.0
|
||||
* @since: 2024/12/2
|
||||
* @author: yxz
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(description = "核销权限VO")
|
||||
public class TicketVerificationAuthVO {
|
||||
private Long authId;
|
||||
private String nickname;
|
||||
private String phone;
|
||||
}
|
@ -4,6 +4,8 @@ import cn.hutool.core.img.ImgUtil;
|
||||
import cn.hutool.extra.qrcode.QrCodeUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.cpop.nftmeta.api.dto.RealnameDTO;
|
||||
import com.cpop.nftmeta.api.dto.TicketRealnameDTO;
|
||||
import com.cpop.nftmeta.api.service.ZShowService;
|
||||
import com.cpop.nftmeta.api.service.ZTicketTierService;
|
||||
import com.cpop.nftmeta.api.vo.TicketFolderVO;
|
||||
@ -132,6 +134,20 @@ public class ZTicketFolderController {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 实名认证
|
||||
*
|
||||
* @param ticketRealnameDTO 机票实名制
|
||||
* @return {@link R }
|
||||
* @author yxz
|
||||
* @since 2024/12/02
|
||||
*/
|
||||
@ApiOperation(value = "实名认证")
|
||||
@PostMapping("/real-name")
|
||||
public R realNameTicket(@RequestBody TicketRealnameDTO ticketRealnameDTO) {
|
||||
return zTicketFolderService.realNameTicket(ticketRealnameDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销门票
|
||||
*
|
||||
|
@ -0,0 +1,17 @@
|
||||
package com.cpop.nftmeta.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Version: 1.0
|
||||
* @since: 2024/12/2
|
||||
* @author: yxz
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("门票实名信息DTO")
|
||||
public class TicketRealnameDTO extends RealnameDTO {
|
||||
@ApiModelProperty("门票ID")
|
||||
private Long folderId;
|
||||
}
|
@ -3,6 +3,7 @@ package com.cpop.nftmeta.api.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.cpop.nftmeta.api.dto.ExchangeTicketDTO;
|
||||
import com.cpop.nftmeta.common.entity.ZTicketUniqueCode;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 门票唯一标识表
|
||||
@ -13,10 +14,11 @@ public interface ZTicketUniqueCodeMapper extends BaseMapper<ZTicketUniqueCode> {
|
||||
/**
|
||||
* 检查重复观演人
|
||||
*
|
||||
* @param exchangeTicketDTO 兑换机票
|
||||
* @param showId 显示id
|
||||
* @param idNumber 身份证号码
|
||||
* @return {@link Integer }
|
||||
* @author yxz
|
||||
* @since 2024/11/27
|
||||
*/
|
||||
Integer checkRepeatAudience(ExchangeTicketDTO exchangeTicketDTO);
|
||||
Integer checkRepeatAudience(@Param("showId") Long showId, @Param("idNumber") String idNumber);
|
||||
}
|
||||
|
@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
|
||||
import com.cpop.nftmeta.api.dto.RealnameDTO;
|
||||
import com.cpop.nftmeta.api.dto.TicketRealnameDTO;
|
||||
import com.cpop.nftmeta.common.entity.ZTicketFolder;
|
||||
import com.cpop.nftmeta.common.vo.R;
|
||||
|
||||
@ -32,4 +34,14 @@ public interface ZTicketFolderService extends IService<ZTicketFolder> {
|
||||
* @since 2024/11/29
|
||||
*/
|
||||
R verificationTicket(String ticketData);
|
||||
|
||||
/**
|
||||
* 实名认证
|
||||
*
|
||||
* @param realnameDTO realname dto
|
||||
* @return {@link R }
|
||||
* @author yxz
|
||||
* @since 2024/12/02
|
||||
*/
|
||||
R realNameTicket(TicketRealnameDTO realnameDTO);
|
||||
}
|
||||
|
@ -140,6 +140,21 @@ public class ZTicketBlindCodeServiceImpl extends ServiceImpl<ZTicketBlindCodeMap
|
||||
if (!ResultCode.SUCCESS.getCode().equals(code)){
|
||||
return R.fail("未找到有效编码");
|
||||
}
|
||||
// 票档是否有效
|
||||
LambdaQueryWrapper<ZTicketBlindCode> blindCodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
blindCodeLambdaQueryWrapper.eq(ZTicketBlindCode::getUniqudeCode, exchangeBlindDTO.getUniqueCode());
|
||||
ZTicketBlindCode zTicketBlindCode = this.getOne(blindCodeLambdaQueryWrapper);
|
||||
R result= zTicketTierService.checkTicketTierEnable(exchangeBlindDTO.getTicketTierId(), zTicketBlindCode.getFirstShowId());
|
||||
if (result.getCode().equals(ResultCode.FAIL.getCode())){
|
||||
return result;
|
||||
}
|
||||
// 同一身份证只允许绑定一张票
|
||||
ExchangeTicketDTO exchangeTicketDTO = new ExchangeTicketDTO();
|
||||
BeanUtils.copyProperties(exchangeBlindDTO, exchangeTicketDTO);
|
||||
Integer count = zTicketUniqueCodeMapper.checkRepeatAudience(zTicketBlindCode.getFirstShowId(),exchangeBlindDTO.getIdNumber());
|
||||
if (ObjectUtil.isNotNull(count) && count > 0){
|
||||
return R.fail("同一身份证只能绑定一张门票");
|
||||
}
|
||||
if ("prod".equals(env)){
|
||||
// 检查实名信息
|
||||
RealNameVerifyDTO realNameVerifyDTO = new RealNameVerifyDTO();
|
||||
@ -150,21 +165,6 @@ public class ZTicketBlindCodeServiceImpl extends ServiceImpl<ZTicketBlindCodeMap
|
||||
return R.fail("实名认证失败,请检查身份信息");
|
||||
}
|
||||
}
|
||||
// 同一身份证只允许绑定一张票
|
||||
ExchangeTicketDTO exchangeTicketDTO = new ExchangeTicketDTO();
|
||||
BeanUtils.copyProperties(exchangeBlindDTO, exchangeTicketDTO);
|
||||
Integer count = zTicketUniqueCodeMapper.checkRepeatAudience(exchangeTicketDTO);
|
||||
if (ObjectUtil.isNotNull(count) && count > 0){
|
||||
return R.fail("同一身份证只能绑定一张门票");
|
||||
}
|
||||
// 票档是否有效
|
||||
LambdaQueryWrapper<ZTicketBlindCode> blindCodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
blindCodeLambdaQueryWrapper.eq(ZTicketBlindCode::getUniqudeCode, exchangeBlindDTO.getUniqueCode());
|
||||
ZTicketBlindCode zTicketBlindCode = this.getOne(blindCodeLambdaQueryWrapper);
|
||||
R result= zTicketTierService.checkTicketTierEnable(exchangeBlindDTO.getTicketTierId(), zTicketBlindCode.getFirstShowId());
|
||||
if (result.getCode().equals(ResultCode.FAIL.getCode())){
|
||||
return result;
|
||||
}
|
||||
// 兑换盲盒
|
||||
LambdaQueryWrapper<ZTicketBlindCode> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ZTicketBlindCode::getUniqudeCode, exchangeBlindDTO.getUniqueCode());
|
||||
|
@ -7,16 +7,28 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.cpop.nftmeta.api.dto.ExchangeTicketDTO;
|
||||
import com.cpop.nftmeta.api.dto.RealnameDTO;
|
||||
import com.cpop.nftmeta.api.dto.TicketRealnameDTO;
|
||||
import com.cpop.nftmeta.api.mapper.ZTicketUniqueCodeMapper;
|
||||
import com.cpop.nftmeta.api.service.ZTicketVerificationAuthService;
|
||||
import com.cpop.nftmeta.api.service.ZTicketVerificationRecordsService;
|
||||
import com.cpop.nftmeta.common.context.CUserInfo;
|
||||
import com.cpop.nftmeta.common.context.UserContext;
|
||||
import com.cpop.nftmeta.common.entity.ZTicketFolder;
|
||||
import com.cpop.nftmeta.api.mapper.ZTicketFolderMapper;
|
||||
import com.cpop.nftmeta.api.service.ZTicketFolderService;
|
||||
import com.cpop.nftmeta.common.entity.ZTicketVerificationAuth;
|
||||
import com.cpop.nftmeta.common.entity.ZTicketVerificationRecords;
|
||||
import com.cpop.nftmeta.common.realname.RealNameVerifyDTO;
|
||||
import com.cpop.nftmeta.common.realname.RealNameVerifyService;
|
||||
import com.cpop.nftmeta.common.utils.AESUtils;
|
||||
import com.cpop.nftmeta.common.vo.R;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
@ -31,6 +43,11 @@ import java.util.List;
|
||||
public class ZTicketFolderServiceImpl extends ServiceImpl<ZTicketFolderMapper,ZTicketFolder> implements ZTicketFolderService {
|
||||
private final ZTicketVerificationAuthService zTicketVerificationAuthService;
|
||||
private final AESUtils aesUtils;
|
||||
private final ZTicketVerificationRecordsService zTicketVerificationRecordsService;
|
||||
private final RealNameVerifyService realNameVerifyService;
|
||||
private final ZTicketUniqueCodeMapper zTicketUniqueCodeMapper;
|
||||
@Value("${spring.profiles.active}")
|
||||
private String env;
|
||||
@Override
|
||||
public List<ZTicketFolder> getList() {
|
||||
return this.list();
|
||||
@ -60,6 +77,41 @@ public class ZTicketFolderServiceImpl extends ServiceImpl<ZTicketFolderMapper,ZT
|
||||
return this.removeById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实名认证
|
||||
*
|
||||
* @param realnameDTO realname dto
|
||||
* @return {@link R }
|
||||
* @author yxz
|
||||
* @since 2024/12/02
|
||||
*/
|
||||
@Override
|
||||
public R realNameTicket(TicketRealnameDTO realnameDTO) {
|
||||
ZTicketFolder ticket = this.getById(realnameDTO.getFolderId());
|
||||
if (ticket != null && (ticket.getAudienceName() != null || ticket.getIdNumber() != null)){
|
||||
return R.fail("该门票已实名认证,请勿重复认证");
|
||||
}
|
||||
if ("prod".equals(env)){
|
||||
// 检查实名信息
|
||||
RealNameVerifyDTO realNameVerifyDTO = new RealNameVerifyDTO();
|
||||
realNameVerifyDTO.setRealName(realnameDTO.getAudienceName());
|
||||
realNameVerifyDTO.setIdCard(realnameDTO.getIdNumber());
|
||||
Boolean aBoolean = realNameVerifyService.verify(realNameVerifyDTO);
|
||||
if (!aBoolean){
|
||||
return R.fail("实名认证失败,请检查身份信息");
|
||||
}
|
||||
}
|
||||
// 同一身份证只允许绑定一张票
|
||||
Integer count = zTicketUniqueCodeMapper.checkRepeatAudience(ticket.getShowId(),realnameDTO.getIdNumber());
|
||||
if (ObjectUtil.isNotNull(count) && count > 0){
|
||||
return R.fail("同一身份证只能绑定一张门票");
|
||||
}
|
||||
// 绑定实名信息
|
||||
BeanUtils.copyProperties(realnameDTO, ticket);
|
||||
boolean b = this.updateById(ticket);
|
||||
return b ? R.success("实名认证成功") : R.fail("实名认证失败");
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销门票
|
||||
*
|
||||
@ -69,33 +121,31 @@ public class ZTicketFolderServiceImpl extends ServiceImpl<ZTicketFolderMapper,ZT
|
||||
* @since 2024/11/29
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public R verificationTicket(String ticketData) {
|
||||
// 提取票据数据
|
||||
String decrypt = aesUtils.decrypt(ticketData);
|
||||
String[] parts = decrypt.split(":");
|
||||
Long userId = Long.parseLong(parts[0]);
|
||||
Long memberId = Long.parseLong(parts[0]);
|
||||
Long folderId = Long.parseLong(parts[1]);
|
||||
// 核销
|
||||
ZTicketFolder ticketFolderEntity = this.getBaseMapper().selectOne(new QueryWrapper<ZTicketFolder>().eq("member_id", userId).eq("folder_id", folderId).eq("status",0));
|
||||
/*CUserInfo userInfo = UserContext.getUserInfo();
|
||||
zTicketVerificationAuthService.getOne()
|
||||
// 验证权限
|
||||
if (ObjectUtil.isNull(SecurityUtils.getUser().getAllowWriteOff()) || SecurityUtils.getUser().getAllowWriteOff() != 1) {{
|
||||
return R.failed("无核销权限,核销失败");
|
||||
}}*/
|
||||
|
||||
|
||||
/*if (ObjectUtil.isNull(ticketFolderEntity)) {
|
||||
return R.failed("未找到有效票据,核销失败");
|
||||
ZTicketFolder ticketFolderEntity = this.getBaseMapper().selectOne(new QueryWrapper<ZTicketFolder>().eq("member_id", memberId).eq("folder_id", folderId).eq("status",0));
|
||||
if (ObjectUtil.isNull(ticketFolderEntity)) {
|
||||
return R.fail("未找到有效票据,核销失败");
|
||||
}
|
||||
// 验证权限
|
||||
CUserInfo userInfo = UserContext.getUserInfo();
|
||||
ZTicketVerificationAuth auth = zTicketVerificationAuthService.getOne(new QueryWrapper<ZTicketVerificationAuth>().eq("member_id", userInfo.getUserId()).eq("show_id", ticketFolderEntity.getShowId()));
|
||||
if (auth == null){
|
||||
return R.fail("无核销权限,核销失败");
|
||||
}
|
||||
// 核销
|
||||
ticketFolderEntity.setStatus(1);
|
||||
boolean b = this.updateById(ticketFolderEntity);
|
||||
// 核销记录
|
||||
VerificationRecordsEntity verificationRecords = new VerificationRecordsEntity();
|
||||
ZTicketVerificationRecords verificationRecords = new ZTicketVerificationRecords();
|
||||
BeanUtil.copyProperties(ticketFolderEntity, verificationRecords);
|
||||
verificationRecords.setWriteOffUserId(SecurityUtils.getUser().getId());
|
||||
verificationRecordsService.save(verificationRecords);
|
||||
return b ? R.ok("核销成功") : R.failed("核销失败");*/
|
||||
return null;
|
||||
verificationRecords.setWriteOffUserId(userInfo.getUserId());
|
||||
zTicketVerificationRecordsService.save(verificationRecords);
|
||||
return b ? R.success("核销成功") : R.fail("核销失败");
|
||||
}
|
||||
}
|
||||
|
@ -102,6 +102,14 @@ public class ZTicketUniqueCodeServiceImpl extends ServiceImpl<ZTicketUniqueCodeM
|
||||
if (!ResultCode.SUCCESS.getCode().equals(code)){
|
||||
return R.fail("未找到有效编码");
|
||||
}
|
||||
// 同一身份证只允许绑定一张票
|
||||
LambdaQueryWrapper<ZTicketUniqueCode> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ZTicketUniqueCode::getUniqudeCode, exchangeTicketDTO.getUniqueCode());
|
||||
ZTicketUniqueCode zTicketUniqueCode = this.getOne(queryWrapper);
|
||||
Integer count = zTicketUniqueCodeMapper.checkRepeatAudience(zTicketUniqueCode.getShowId(),exchangeTicketDTO.getIdNumber());
|
||||
if (ObjectUtil.isNotNull(count) && count > 0){
|
||||
return R.fail("同一身份证只能绑定一张门票");
|
||||
}
|
||||
if ("prod".equals(env)){
|
||||
// 检查实名信息
|
||||
RealNameVerifyDTO realNameVerifyDTO = new RealNameVerifyDTO();
|
||||
@ -112,15 +120,7 @@ public class ZTicketUniqueCodeServiceImpl extends ServiceImpl<ZTicketUniqueCodeM
|
||||
return R.fail("实名认证失败,请检查身份信息");
|
||||
}
|
||||
}
|
||||
// 同一身份证只允许绑定一张票
|
||||
Integer count = zTicketUniqueCodeMapper.checkRepeatAudience(exchangeTicketDTO);
|
||||
if (ObjectUtil.isNotNull(count) && count > 0){
|
||||
return R.fail("同一身份证只能绑定一张门票");
|
||||
}
|
||||
// 兑换门票
|
||||
LambdaQueryWrapper<ZTicketUniqueCode> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ZTicketUniqueCode::getUniqudeCode, exchangeTicketDTO.getUniqueCode());
|
||||
ZTicketUniqueCode zTicketUniqueCode = this.getOne(queryWrapper);
|
||||
zTicketUniqueCode.setStatus(1);
|
||||
this.update(zTicketUniqueCode);
|
||||
// 插入票夹
|
||||
|
@ -22,7 +22,7 @@
|
||||
SELECT count(tf.folder_id) FROM `z_ticket_folder` tf
|
||||
INNER JOIN z_ticket_unique_code tuc
|
||||
ON tf.show_id = tuc.show_id
|
||||
WHERE tuc.uniqude_code = #{uniqueCode}
|
||||
WHERE tuc.show_id = #{showId}
|
||||
AND tf.id_number = #{idNumber}
|
||||
</select>
|
||||
</mapper>
|
||||
|
Loading…
x
Reference in New Issue
Block a user