Ver código fonte

盲票转让

cup 3 anos atrás
pai
commit
a2508c9a9b

+ 70 - 6
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelMyTicketController.java

@@ -1,26 +1,29 @@
 package com.qs.mp.web.controller.api.channel;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qs.mp.admin.domain.TicketPackage;
+import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.domain.ChannelOrderDetail;
 import com.qs.mp.channel.domain.ChannelTicketTransfer;
 import com.qs.mp.channel.domain.param.ChannelMyTicketQueryParam;
 import com.qs.mp.channel.domain.param.ChannelTicketTransferParam;
 import com.qs.mp.channel.domain.vo.ChannelMyTicketVO;
 import com.qs.mp.channel.service.IChannelOrderDetailService;
 import com.qs.mp.channel.service.IChannelService;
+import com.qs.mp.channel.service.IChannelTicketTransferService;
 import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.enums.ChannelCertifyStatusEnum;
 import com.qs.mp.common.enums.TicketPkgSaleStatusEnum;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.utils.SecurityUtils;
 import com.qs.mp.web.controller.common.BaseApiController;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 我的盲票相关接口
@@ -38,6 +41,12 @@ public class ChannelMyTicketController extends BaseApiController {
     @Autowired
     private IChannelService channelService;
 
+    @Autowired
+    private IChannelTicketTransferService channelTicketTransferService;
+
+    @Autowired
+    private ITicketPackageService ticketPackageService;
+
     @PostMapping("list")
     @ApiOperation("我的盲票列表")
     @ApiResponses(
@@ -58,10 +67,13 @@ public class ChannelMyTicketController extends BaseApiController {
 
     @PostMapping("/channel/mobile")
     @ApiOperation("根据手机号获取经销商信息")
+    @ApiImplicitParams(
+            @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String", paramType = "query")
+    )
     @ApiResponses(
             @ApiResponse(code = 200, message = "成功", response = Channel.class)
     )
-    public AjaxResult channelInfoByMobile(@RequestBody String mobile) {
+    public AjaxResult channelInfoByMobile(@RequestParam String mobile) {
         Long channelId = SecurityUtils.getLoginUser().getChannelId();
         if (channelId == null) {
             return AjaxResult.error("非法调用");
@@ -69,7 +81,9 @@ public class ChannelMyTicketController extends BaseApiController {
         if (StringUtils.isBlank(mobile)) {
             return AjaxResult.success();
         }
-        Channel channel = channelService.getOne(new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, mobile));
+        Channel channel = channelService.getOne(new LambdaQueryWrapper<Channel>()
+                .eq(Channel::getMobile, mobile)
+                .eq(Channel::getLevel, 0));
 
         return AjaxResult.success(channel);
     }
@@ -77,5 +91,55 @@ public class ChannelMyTicketController extends BaseApiController {
 
 
 
+    @PostMapping("/transfer/save")
+    @ApiOperation("盲票转让")
+    public AjaxResult transfer(@RequestBody ChannelTicketTransferParam channelTicketTransferParam) {
+        // 自己为转让人
+        Long transferChannelId = SecurityUtils.getLoginUser().getChannelId();
+        if (transferChannelId == null) {
+            return AjaxResult.error("非法调用");
+        }
+        if (StringUtils.isBlank(channelTicketTransferParam.getBoxId()) ||
+                StringUtils.isBlank(channelTicketTransferParam.getPkgId()) ||
+                Objects.isNull(channelTicketTransferParam.getChannelId()) ||
+                StringUtils.isBlank(channelTicketTransferParam.getMobile())) {
+            return AjaxResult.error("转让参数不能为空");
+        }
+
+        // 校验受让人信息
+        Channel channel = channelService.getOne(new LambdaQueryWrapper<Channel>()
+                .eq(Channel::getChannelId, channelTicketTransferParam.getChannelId())
+                .eq(Channel::getLevel, 0));
+        if (Objects.isNull(channel)) {
+            return AjaxResult.error("受让人信息不存在");
+        }
+        if (ChannelCertifyStatusEnum.NOT_CERTIFIED.equals(channel.getCertifyStatus())) {
+            return AjaxResult.error("受让人未认证");
+        }
+
+        // 校验当前操作的盲票是否为自己的盲票
+        int count = channelOrderDetailService.count(new LambdaQueryWrapper<ChannelOrderDetail>()
+                .eq(ChannelOrderDetail::getChannelId, transferChannelId)
+                .eq(ChannelOrderDetail::getPkgId, channelTicketTransferParam.getPkgId()));
+        if (count == 0) {
+            return AjaxResult.error("非法操作他人盲票");
+        }
+        // 校验票包是否为待售状态
+        count = ticketPackageService.count(new LambdaQueryWrapper<TicketPackage>().eq(TicketPackage::getPkgId, channelTicketTransferParam.getPkgId())
+                .eq(TicketPackage::getSaleStatus, TicketPkgSaleStatusEnum.WAIT_SALE));
+        if (count == 0) {
+            return AjaxResult.error("票包不为待售状态");
+        }
+
+        // 转让盲票
+        boolean flag  = channelTicketTransferService.transferTicket(transferChannelId, channelTicketTransferParam);
+
+        return AjaxResult.success(flag);
+
+    }
+
+
+
+
 
 }

+ 1 - 1
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelTicketTransfer.java

@@ -29,7 +29,7 @@ public class ChannelTicketTransfer implements Serializable {
     /**
      * 主键
      */
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     @ApiModelProperty("主键")
     private Long id;
 

+ 29 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelTicketTransferParam.java

@@ -0,0 +1,29 @@
+package com.qs.mp.channel.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 经销商盲票转让入参类
+ * @author Cup
+ * @date 2022/4/21
+ */
+@ApiModel("经销商盲票转让入参类")
+@Data
+public class ChannelTicketTransferParam {
+
+
+    @ApiModelProperty("盲票组id")
+    private String boxId;
+
+    @ApiModelProperty("盲票包id")
+    private String pkgId;
+
+    @ApiModelProperty("受让人id")
+    private Long channelId;
+
+    @ApiModelProperty("受让人手机号")
+    private String mobile;
+
+}

+ 10 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelTicketTransferService.java

@@ -2,6 +2,7 @@ package com.qs.mp.channel.service;
 
 import com.qs.mp.channel.domain.ChannelTicketTransfer;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.channel.domain.param.ChannelTicketTransferParam;
 
 /**
  * <p>
@@ -13,4 +14,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IChannelTicketTransferService extends IService<ChannelTicketTransfer> {
 
+
+    /**
+     * 转让盲票
+     * @param transferChannelId     转让人id
+     * @param channelTicketTransferParam        转让参数
+     * @return
+     */
+    boolean transferTicket(Long transferChannelId, ChannelTicketTransferParam channelTicketTransferParam);
+
 }

+ 1 - 1
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderDetailServiceImpl.java

@@ -37,7 +37,7 @@ public class ChannelOrderDetailServiceImpl extends ServiceImpl<ChannelOrderDetai
                     .or()
                     .likeRight("t3.title", channelMyTicketQueryParam.getSearchTitle());
         }
-        queryWrapper.orderByDesc("t1.create_time");
+        queryWrapper.orderByDesc("t1.created_time");
         return this.baseMapper.selectListMyTicketByChannelIdAndchannelMyTicketQueryParam(queryWrapper);
     }
 }

+ 39 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelTicketTransferServiceImpl.java

@@ -1,10 +1,17 @@
 package com.qs.mp.channel.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qs.mp.channel.domain.ChannelOrderDetail;
 import com.qs.mp.channel.domain.ChannelTicketTransfer;
+import com.qs.mp.channel.domain.param.ChannelTicketTransferParam;
 import com.qs.mp.channel.mapper.ChannelTicketTransferMapper;
+import com.qs.mp.channel.service.IChannelOrderDetailService;
 import com.qs.mp.channel.service.IChannelTicketTransferService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -17,4 +24,36 @@ import org.springframework.stereotype.Service;
 @Service
 public class ChannelTicketTransferServiceImpl extends ServiceImpl<ChannelTicketTransferMapper, ChannelTicketTransfer> implements IChannelTicketTransferService {
 
+
+    @Autowired
+    private IChannelOrderDetailService channelOrderDetailService;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean transferTicket(Long transferChannelId, ChannelTicketTransferParam channelTicketTransferParam) {
+
+        // 转让盲票
+        ChannelTicketTransfer channelTicketTransfer = new ChannelTicketTransfer();
+        channelTicketTransfer.setTransferChannelId(transferChannelId);
+        channelTicketTransfer.setChannelId(channelTicketTransferParam.getChannelId());
+        channelTicketTransfer.setBoxId(channelTicketTransferParam.getBoxId());
+        channelTicketTransfer.setPkgId(channelTicketTransferParam.getPkgId());
+
+        // 更新盲票拥有人信息
+        ChannelOrderDetail channelOrderDetail = new ChannelOrderDetail();
+        channelOrderDetail.setPkgId(channelTicketTransferParam.getPkgId());
+        channelOrderDetail.setChannelId(channelTicketTransferParam.getChannelId());
+
+        // 记录盲票转让信息
+        this.save(channelTicketTransfer);
+
+        // 更新盲票拥有人
+        channelOrderDetailService.update(new LambdaUpdateWrapper<ChannelOrderDetail>()
+                .set(ChannelOrderDetail::getChannelId, channelTicketTransferParam.getChannelId())
+                .eq(ChannelOrderDetail::getPkgId, channelTicketTransferParam.getPkgId())
+                .eq(ChannelOrderDetail::getChannelId, transferChannelId));
+
+        return true;
+    }
 }