diff --git a/script/pom.xml b/script/pom.xml
index 9d1de9c..a67ab6b 100644
--- a/script/pom.xml
+++ b/script/pom.xml
@@ -16,7 +16,7 @@
script
- 1.8
+ 17
UTF-8
diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java
index 66fbf29..8a91e17 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java
@@ -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";
}
diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java
index 6c72f2b..5a9a0f2 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java
@@ -134,4 +134,10 @@ public class FPerformSeatInfo implements Serializable {
* 演出id(总)
*/
private Long projectId;
+
+ /**
+ * 是否售罄
+ * 0:否 1:是
+ */
+ private Integer soldOut;
}
diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java
index 05b95c2..22fd97e 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java
@@ -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;
diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java
new file mode 100644
index 0000000..8a84210
--- /dev/null
+++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java
@@ -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;
+}
diff --git a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java
index 6013485..d784cd0 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java
@@ -22,4 +22,6 @@ public interface FwdPerformSeatInfoMapper {
FPerformSeatInfo getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(
@Param("seatId") Long seatId, @Param("performId") Long performId, @Param("projectId") Long projectId);
+
+ List getPerformSeatByProjectId(Long projectId);
}
diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java
index 31c2b82..272807a 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java
@@ -106,6 +106,8 @@ public class PullDataFromFWDJob {
if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) {
for (PerformDetail performDetail : performInfo.getPerformInfo()) {
if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) {
+ List seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList();
+
for (SeatPlan seatPlan : performDetail.getSeatPlans()) {
FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo();
fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId());
diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java
index 3dbe3ac..828e3c0 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java
@@ -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 getShowProjects() {
@@ -47,16 +47,17 @@ public class FwdOuterController {
}
@PostMapping("/createOrder")
- public Result 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 createOrder(Long projectId) throws Exception {
+ if (performService.createProjectOrder(projectId)) {
+ return Result.success("下单成功!");
}
- return Result.success("下单失败!", null);
+ return Result.error("下单失败!");
+ }
+
+ @GetMapping("/getSeatPlanStatus")
+ public Result getSeatPlanStatu (@RequestParam List ids) {
+ List seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(ids);
+ return Result.success("查询成功!", seatPlanStatusFromHttp);
}
}
diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java
new file mode 100644
index 0000000..0453b7c
--- /dev/null
+++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java
@@ -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 getPerformSeatInfoByProjectId(Long projectId);
+
+ Boolean createProjectOrder(Long projectId) throws Exception;
+}
diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java
index a70ad2e..f292f92 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java
@@ -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 getSeatPlanStatusFromHttp(List seatPlanIds);
+
+
}
diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java
index 68fe3ac..0f3d895 100644
--- a/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java
+++ b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java
@@ -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 getSeatPlanStatusFromHttp(List seatPlanIds) {
+ StringBuilder seatIds = new StringBuilder();
+ for (Long seatPlanId : seatPlanIds) {
+ seatIds.append(seatPlanId).append(",");
+ }
+ Map 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 data = JSON.parseArray(resp.get("data").toString(), SeatPlanStatus.class);
+ if (CollectionUtils.isEmpty(data)) {
+ return Lists.newArrayList();
+ }
+ return data;
+ }
+ return Lists.newArrayList();
+ }
private Map buildFWDHeaders(String token) {
Map headers = Maps.newHashMap();
diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java
new file mode 100644
index 0000000..0df6fc7
--- /dev/null
+++ b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java
@@ -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 FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L);
+ private static final List FREQUENT_IDS = List.of(50438548L, 35320661L);
+ @Override
+ public FPerformProjectInfo getPerformByProjectId(Long projectId) {
+ return fwdPerformProjectInfoMapper.getProjectByProjectId(projectId);
+ }
+
+ @Override
+ public List 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 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;
+ }
+}
diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml
index 4c55f39..3015f1d 100644
--- a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml
+++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml
@@ -28,6 +28,7 @@
+
@@ -53,7 +54,8 @@
available_ticket_quantity,
available_all_ticket_quantity,
sale_time,
- project_id
+ project_id,
+ sold_out
@@ -126,7 +128,10 @@
sale_time,
- project_id
+ project_id,
+
+
+ sold_out
@@ -197,7 +202,10 @@
#{saleTime},
- #{projectId}
+ #{projectId},
+
+
+ #{soldOut},
@@ -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
@@ -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}
)
@@ -251,7 +259,8 @@
available_ticket_quantity = #{availableTicketQuantity},
available_all_ticket_quantity = #{availableAllTicketQuantity},
sale_time = #{saleTime},
- project_id = #{projectId}
+ project_id = #{projectId},
+ sold_out = #{soldOut}
WHERE id = #{id}
@@ -269,5 +278,10 @@
from fwd_perform_seat_info
where seat_plan_id = #{seatId} and perform_id = #{performId} and project_id = #{projectId}
+
\ No newline at end of file