feat:查询座位信息
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
<artifactId>script</artifactId>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<java.version>17</java.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
|
||||
@@ -27,4 +27,9 @@ public class UrlConstants {
|
||||
* 创建订单URL
|
||||
*/
|
||||
public final static String PROJECT_ORDER_CREATE_URL = BASE_URL + "/order/app/center/v3/create";
|
||||
|
||||
/**
|
||||
* 获取演出座位信息
|
||||
*/
|
||||
public final static String PROJECT_SEAT_STATUS_URL = BASE_URL + "/performance/app/project/seatPlanStatus";
|
||||
}
|
||||
|
||||
@@ -134,4 +134,10 @@ public class FPerformSeatInfo implements Serializable {
|
||||
* 演出id(总)
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 是否售罄
|
||||
* 0:否 1:是
|
||||
*/
|
||||
private Integer soldOut;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public class ProjectOrderCreateReq {
|
||||
private Integer deliveryType;
|
||||
private String contactName;
|
||||
private String contactPhone;
|
||||
private Integer payment;
|
||||
private BigDecimal payment;
|
||||
private BigDecimal totalPrice;
|
||||
private Long performId;
|
||||
private String projectId;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.xiang.xservice.fwd.entity.resp.http.perform;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author: xiang
|
||||
* @Date: 2025-07-25 16:10
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class SeatPlanStatus {
|
||||
private Integer seatPlanId;
|
||||
private Integer performId;
|
||||
private Boolean soldOutFlag;
|
||||
private Integer enableNoTicketLabel;
|
||||
private Integer standbyStatus;
|
||||
}
|
||||
@@ -22,4 +22,6 @@ public interface FwdPerformSeatInfoMapper {
|
||||
|
||||
FPerformSeatInfo getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(
|
||||
@Param("seatId") Long seatId, @Param("performId") Long performId, @Param("projectId") Long projectId);
|
||||
|
||||
List<FPerformSeatInfo> getPerformSeatByProjectId(Long projectId);
|
||||
}
|
||||
|
||||
@@ -106,6 +106,8 @@ public class PullDataFromFWDJob {
|
||||
if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) {
|
||||
for (PerformDetail performDetail : performInfo.getPerformInfo()) {
|
||||
if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) {
|
||||
List<Long> seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList();
|
||||
|
||||
for (SeatPlan seatPlan : performDetail.getSeatPlans()) {
|
||||
FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo();
|
||||
fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId());
|
||||
|
||||
@@ -1,21 +1,20 @@
|
||||
package com.xiang.xservice.fwd.server;
|
||||
|
||||
import com.xiang.xservice.basic.common.resp.Result;
|
||||
import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.Perform;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlanStatus;
|
||||
import com.xiang.xservice.fwd.service.IPerformService;
|
||||
import com.xiang.xservice.fwd.service.IPerformServiceHttp;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Objects;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: xiang
|
||||
@@ -27,6 +26,7 @@ import java.util.Objects;
|
||||
public class FwdOuterController {
|
||||
|
||||
private final IPerformServiceHttp performServiceHttp;
|
||||
private final IPerformService performService;
|
||||
|
||||
@GetMapping("/getShowProjects")
|
||||
public Result<ProjectsResp> getShowProjects() {
|
||||
@@ -47,16 +47,17 @@ public class FwdOuterController {
|
||||
}
|
||||
|
||||
@PostMapping("/createOrder")
|
||||
public Result<ProjectOrderCreateResp> createOrder(@RequestBody @Valid ProjectOrderCreateReq req) {
|
||||
req.setDeliveryType(1);
|
||||
req.setBlackBox("0");
|
||||
req.setContactName("朱吉祥");
|
||||
req.setContactPhone("15858717571");
|
||||
ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(req);
|
||||
if (Objects.nonNull(projectOrder)) {
|
||||
return Result.success("下单成功!", projectOrder);
|
||||
public Result<Void> createOrder(Long projectId) throws Exception {
|
||||
if (performService.createProjectOrder(projectId)) {
|
||||
return Result.success("下单成功!");
|
||||
}
|
||||
return Result.success("下单失败!", null);
|
||||
return Result.error("下单失败!");
|
||||
}
|
||||
|
||||
@GetMapping("/getSeatPlanStatus")
|
||||
public Result<SeatPlanStatus> getSeatPlanStatu (@RequestParam List<Long> ids) {
|
||||
List<SeatPlanStatus> seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(ids);
|
||||
return Result.success("查询成功!", seatPlanStatusFromHttp);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.xiang.xservice.fwd.service;
|
||||
|
||||
import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo;
|
||||
import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: xiang
|
||||
* @Date: 2025-07-25 15:15
|
||||
*/
|
||||
public interface IPerformService {
|
||||
|
||||
FPerformProjectInfo getPerformByProjectId(Long projectId);
|
||||
|
||||
List<FPerformSeatInfo> getPerformSeatInfoByProjectId(Long projectId);
|
||||
|
||||
Boolean createProjectOrder(Long projectId) throws Exception;
|
||||
}
|
||||
@@ -5,6 +5,9 @@ import com.xiang.xservice.fwd.entity.resp.http.perform.Perform;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlanStatus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IPerformServiceHttp {
|
||||
|
||||
@@ -34,4 +37,13 @@ public interface IPerformServiceHttp {
|
||||
* @return
|
||||
*/
|
||||
Perform getPerformsByProjectIdFromHttp(Long projectId);
|
||||
|
||||
/**
|
||||
* http请求获取座位状态信息
|
||||
* @param seatPlanIds
|
||||
* @return
|
||||
*/
|
||||
List<SeatPlanStatus> getSeatPlanStatusFromHttp(List<Long> seatPlanIds);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -2,8 +2,10 @@ package com.xiang.xservice.fwd.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.xiang.xservice.basic.utils.HttpUtils;
|
||||
import com.xiang.xservice.basic.utils.JsonUtils;
|
||||
import com.xiang.xservice.fwd.constants.CodeConstants;
|
||||
import com.xiang.xservice.fwd.constants.UrlConstants;
|
||||
import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq;
|
||||
@@ -11,12 +13,15 @@ import com.xiang.xservice.fwd.entity.resp.http.perform.Perform;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlanStatus;
|
||||
import com.xiang.xservice.fwd.service.IPerformServiceHttp;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -73,7 +78,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
||||
|
||||
@Override
|
||||
public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req) {
|
||||
String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(UrlConstants.token), JSON.toJSONString(req));
|
||||
String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(UrlConstants.token), JsonUtils.toJsonString(req));
|
||||
if (StringUtils.isBlank(respStr)) {
|
||||
return null;
|
||||
}
|
||||
@@ -111,6 +116,31 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
||||
return new Perform();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SeatPlanStatus> getSeatPlanStatusFromHttp(List<Long> seatPlanIds) {
|
||||
StringBuilder seatIds = new StringBuilder();
|
||||
for (Long seatPlanId : seatPlanIds) {
|
||||
seatIds.append(seatPlanId).append(",");
|
||||
}
|
||||
Map<String, String> params = Maps.newHashMap();
|
||||
params.put("seatPlanIds", seatIds.substring(0, seatIds.length() - 2));
|
||||
params.put("type", "3");
|
||||
String respStr = HttpUtils.doGet(UrlConstants.PROJECT_SEAT_STATUS_URL, buildFWDHeaders(UrlConstants.token), params);
|
||||
if (StringUtils.isBlank(respStr)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
log.info("【Http请求】 根据seatPlanIds:{}http请求查询演出座位信息结果:{}", seatPlanIds, respStr);
|
||||
JSONObject resp = JSON.parseObject(respStr);
|
||||
Integer code = (Integer) resp.get("code");
|
||||
if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) {
|
||||
List<SeatPlanStatus> data = JSON.parseArray(resp.get("data").toString(), SeatPlanStatus.class);
|
||||
if (CollectionUtils.isEmpty(data)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
|
||||
private Map<String, String> buildFWDHeaders(String token) {
|
||||
Map<String, String> headers = Maps.newHashMap();
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.xiang.xservice.fwd.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService;
|
||||
import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo;
|
||||
import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo;
|
||||
import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq;
|
||||
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp;
|
||||
import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper;
|
||||
import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper;
|
||||
import com.xiang.xservice.fwd.service.IPerformService;
|
||||
import com.xiang.xservice.fwd.service.IPerformServiceHttp;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Author: xiang
|
||||
* @Date: 2025-07-25 15:16
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PerformServiceImpl implements IPerformService {
|
||||
|
||||
private final FwdPerformSeatInfoMapper fwdPerformSeatInfoMapper;
|
||||
private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper;
|
||||
private final IPerformServiceHttp performServiceHttp;
|
||||
private final DingTalkService dingTalkService;
|
||||
@Value("${DingTalk.chatId}")
|
||||
private String chatId;
|
||||
// private static final List<Long> FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L);
|
||||
private static final List<Long> FREQUENT_IDS = List.of(50438548L, 35320661L);
|
||||
@Override
|
||||
public FPerformProjectInfo getPerformByProjectId(Long projectId) {
|
||||
return fwdPerformProjectInfoMapper.getProjectByProjectId(projectId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FPerformSeatInfo> getPerformSeatInfoByProjectId(Long projectId) {
|
||||
return fwdPerformSeatInfoMapper.getPerformSeatByProjectId(projectId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean createProjectOrder(Long projectId) throws Exception {
|
||||
FPerformProjectInfo performByProjectId = getPerformByProjectId(projectId);
|
||||
if (Objects.isNull(performByProjectId)) {
|
||||
log.info("该projectId:{}暂无演出信息", projectId);
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
List<FPerformSeatInfo> seatInfoByProjectId = getPerformSeatInfoByProjectId(projectId);
|
||||
if (CollectionUtils.isEmpty(seatInfoByProjectId)) {
|
||||
log.info("该projectId:{}暂无座位信息", projectId);
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) {
|
||||
ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq();
|
||||
projectOrderCreateReq.setDeliveryType(1);
|
||||
projectOrderCreateReq.setContactName("朱吉祥");
|
||||
projectOrderCreateReq.setContactPhone("15858717571");
|
||||
projectOrderCreateReq.setPayment(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(FREQUENT_IDS.size())).setScale(2));
|
||||
projectOrderCreateReq.setTotalPrice(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(FREQUENT_IDS.size())).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
projectOrderCreateReq.setPerformId(fPerformSeatInfo.getPerformId());
|
||||
projectOrderCreateReq.setProjectId(projectId.toString());
|
||||
projectOrderCreateReq.setPrivilegeCodeList(new ArrayList<>());
|
||||
projectOrderCreateReq.setAudienceCount(FREQUENT_IDS.size());
|
||||
projectOrderCreateReq.setFrequentIds(FREQUENT_IDS);
|
||||
projectOrderCreateReq.setSeatPlanIds(Collections.singletonList(fPerformSeatInfo.getSeatPlanId()));
|
||||
projectOrderCreateReq.setBlackBox("0");
|
||||
projectOrderCreateReq.setCombineTicketVos(null);
|
||||
projectOrderCreateReq.setOrdinaryTicketVos(null);
|
||||
ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq);
|
||||
if (Objects.nonNull(projectOrder)) {
|
||||
log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder));
|
||||
dingTalkService.sendChatMessage(chatId, "订单编号:" + projectOrder.getOrderNo() + "下单成功!!!,请在两分钟之内付款");
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@
|
||||
<result column="available_all_ticket_quantity" property="availableAllTicketQuantity" />
|
||||
<result column="sale_time" property="saleTime" />
|
||||
<result column="project_id" property="projectId" />
|
||||
<result column="sold_out" property="soldOut"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
@@ -53,7 +54,8 @@
|
||||
available_ticket_quantity,
|
||||
available_all_ticket_quantity,
|
||||
sale_time,
|
||||
project_id
|
||||
project_id,
|
||||
sold_out
|
||||
</sql>
|
||||
|
||||
<insert id="insert" useGeneratedKeys="true" keyColumn="id" keyProperty="id" parameterType="com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo">
|
||||
@@ -126,7 +128,10 @@
|
||||
sale_time,
|
||||
</if>
|
||||
<if test="null != projectId ">
|
||||
project_id
|
||||
project_id,
|
||||
</if>
|
||||
<if test="null != soldOut ">
|
||||
sold_out
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
@@ -197,7 +202,10 @@
|
||||
#{saleTime},
|
||||
</if>
|
||||
<if test="null != projectId ">
|
||||
#{projectId}
|
||||
#{projectId},
|
||||
</if>
|
||||
<if test="null != soldOut ">
|
||||
#{soldOut},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
@@ -209,7 +217,7 @@
|
||||
status, max_sell_stock, sold_stock, left_stock, able_sale_quantity,
|
||||
ash_show, ash_show_desc, selectable, display,
|
||||
available_ticket_quantity, available_all_ticket_quantity,
|
||||
sale_time, project_id
|
||||
sale_time, project_id, sold_out
|
||||
)
|
||||
VALUES
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
@@ -219,7 +227,7 @@
|
||||
#{item.status}, #{item.maxSellStock}, #{item.soldStock}, #{item.leftStock}, #{item.ableSaleQuantity},
|
||||
#{item.ashShow}, #{item.ashShowDesc}, #{item.selectable}, #{item.display},
|
||||
#{item.availableTicketQuantity}, #{item.availableAllTicketQuantity},
|
||||
#{item.saleTime}, #{item.projectId}
|
||||
#{item.saleTime}, #{item.projectId}, #{item.soldOut}
|
||||
)
|
||||
</foreach>
|
||||
|
||||
@@ -251,7 +259,8 @@
|
||||
<if test="null != availableTicketQuantity ">available_ticket_quantity = #{availableTicketQuantity},</if>
|
||||
<if test="null != availableAllTicketQuantity ">available_all_ticket_quantity = #{availableAllTicketQuantity},</if>
|
||||
<if test="null != saleTime ">sale_time = #{saleTime},</if>
|
||||
<if test="null != projectId ">project_id = #{projectId}</if>
|
||||
<if test="null != projectId ">project_id = #{projectId},</if>
|
||||
<if test="null != soldOut">sold_out = #{soldOut}</if>
|
||||
</set>
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
@@ -269,5 +278,10 @@
|
||||
from fwd_perform_seat_info
|
||||
where seat_plan_id = #{seatId} and perform_id = #{performId} and project_id = #{projectId}
|
||||
</select>
|
||||
<select id="getPerformSeatByProjectId" resultType="com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo">
|
||||
select <include refid="Base_Column_List"/>
|
||||
from fwd_perform_seat_info
|
||||
where project_id = #{projectId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user