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 new file mode 100644 index 0000000..6c72f2b --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java @@ -0,0 +1,137 @@ +package com.xiang.xservice.fwd.entity.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author: xiang + * @Date: 2025-07-25 10:36 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FPerformSeatInfo implements Serializable { + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 座位计划id + */ + private Long seatPlanId; + + /** + * 座位计划名称 + */ + private String seatPlanName; + + /** + * 演出id + */ + private Long performId; + + /** + * 演出名称 + */ + private String performName; + + /** + * 停止销售 + */ + private Integer stopSale; + + /** + * shelf_status + */ + private Integer shelfStatus; + + /** + * 价格 + */ + private BigDecimal price; + + /** + * 折扣价 + */ + private BigDecimal discountPrice; + + /** + * sub_status + */ + private Integer subStatus; + + /** + * quantity + */ + private Integer quantity; + + /** + * status + */ + private Integer status; + + /** + * max_sell_stock + */ + private Integer maxSellStock; + + /** + * sold_stock + */ + private Integer soldStock; + + /** + * left_stock + */ + private Integer leftStock; + + /** + * able_sale_quantity + */ + private Integer ableSaleQuantity; + + /** + * ash_show + */ + private Integer ashShow; + + /** + * ash_show_desc + */ + private Integer ashShowDesc; + + /** + * selectable + */ + private Integer selectable; + + /** + * display + */ + private Integer display; + + /** + * available_ticket_quantity + */ + private Integer availableTicketQuantity; + + /** + * available_all_ticket_quantity + */ + private Integer availableAllTicketQuantity; + + /** + * sale_time + */ + private LocalDateTime saleTime; + + /** + * 演出id(总) + */ + private Long projectId; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java index 8295810..b6197e7 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java @@ -1,7 +1,14 @@ package com.xiang.xservice.fwd.entity.resp.http.perform; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + import java.util.List; +@Data +@AllArgsConstructor +@NoArgsConstructor public class PerformDetail { private Long id; private String name; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Tags.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Tags.java new file mode 100644 index 0000000..e2155c8 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Tags.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp.http.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: xiang + * @Date: 2025-07-25 10:13 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Tags { + private int type; + + private String tag; +} 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 new file mode 100644 index 0000000..6013485 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java @@ -0,0 +1,25 @@ +package com.xiang.xservice.fwd.mapper; + +import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-07-25 10:53 + */ +@Repository +@Mapper +public interface FwdPerformSeatInfoMapper { + int batchSave(List fPerformSeatInfos); + + int update(FPerformSeatInfo fPerformSeatInfo); + + List getPerformSeatInfoBySeatIds(@Param("list") List seatIds); + + FPerformSeatInfo getPerformSeatInfoBySeatIdAndPerformIdAndProjectId( + @Param("seatId") Long seatId, @Param("performId") Long performId, @Param("projectId") 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 15506d3..cc73f5e 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 @@ -1,14 +1,24 @@ package com.xiang.xservice.fwd.schedule; +import com.google.common.collect.Lists; +import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; +import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformDetail; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformInfo; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectList; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlan; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; +import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; 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.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; @@ -16,6 +26,11 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** * 芬玩岛拉取数据定时任务 @@ -31,6 +46,17 @@ public class PullDataFromFWDJob { private final IPerformServiceHttp performServiceHttp; private final FwdPerformProjectInfoMapper performProjectInfoMapper; + private final FwdPerformSeatInfoMapper performSeatInfoMapper; + + private final ExecutorService es = + new ThreadPoolExecutor( + 5, + 10, + 1000, + TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>(), + new MyThreadFactory("fwd-pull-data-http", Boolean.TRUE), + new ThreadPoolExecutor.AbortPolicy()); /** * 定时任务 每日2点爬取芬玩岛数据演出列表数据 @@ -43,57 +69,152 @@ public class PullDataFromFWDJob { return; } List projectList = showProjectsFromHttp.getList(); - for (ProjectList project : projectList) { - ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); - if (Objects.nonNull(projectInfoFromHttp)) { - FPerformProjectInfo projectInfo = performProjectInfoMapper.getProjectByProjectId(project.getProjectId()); - if (Objects.nonNull(projectInfo)) { - // 更新projectInfo的信息 - projectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); - projectInfo.setStatus(projectInfoFromHttp.getStatus()); - projectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); - projectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); - projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); - projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); - projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); - projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); - projectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); - projectInfo.setProjectName(project.getName()); - projectInfo.setBizId(project.getBizId()); - projectInfo.setTagName(project.getTagName()); - projectInfo.setTagRemark(project.getTagRemark()); - projectInfo.setProjectCity(project.getCity()); - projectInfo.setShortCity(project.getShortCity()); - projectInfo.setVenueName(project.getVenueName()); - projectInfo.setLowestPrice(project.getLowestPrice()); -// projectInfo.setProjectPrice(StringUtils.isBlank(projectInfoFromHttp.getProjectPrice()) ? BigDecimal.ZERO : new BigDecimal(projectInfoFromHttp.getProjectPrice())); - performProjectInfoMapper.update(projectInfo); - } else { - // 新增projectInfo的信息 - FPerformProjectInfo fPerformProjectInfo = new FPerformProjectInfo(); - fPerformProjectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); - fPerformProjectInfo.setStatus(projectInfoFromHttp.getStatus()); - fPerformProjectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); - fPerformProjectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); - fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); - fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); - fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); - fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); - fPerformProjectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); - fPerformProjectInfo.setProjectName(project.getName()); - fPerformProjectInfo.setBizId(project.getBizId()); - fPerformProjectInfo.setProjectId(project.getProjectId()); - fPerformProjectInfo.setTagName(project.getTagName()); - fPerformProjectInfo.setTagRemark(project.getTagRemark()); - fPerformProjectInfo.setProjectCity(project.getCity()); - fPerformProjectInfo.setShortCity(project.getShortCity()); - fPerformProjectInfo.setVenueName(project.getVenueName()); - fPerformProjectInfo.setLowestPrice(project.getLowestPrice()); -// fPerformProjectInfo.setProjectPrice(StringUtils.isBlank(projectInfoFromHttp.getProjectPrice()) ? BigDecimal.ZERO : new BigDecimal(projectInfoFromHttp.getProjectPrice())); - performProjectInfoMapper.insert(fPerformProjectInfo); + List futureList = Lists.newArrayList(); + for (ProjectList project : projectList) { + CompletableFuture future = CompletableFuture.runAsync(() -> { + ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()); + if (Objects.nonNull(projectInfoFromHttp) && Objects.nonNull(performsByProjectIdFromHttp)) { + FPerformProjectInfo projectInfo = performProjectInfoMapper.getProjectByProjectId(project.getProjectId()); + if (Objects.nonNull(projectInfo)) { + // 更新projectInfo的信息 + projectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); + projectInfo.setStatus(projectInfoFromHttp.getStatus()); + projectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); + projectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); + projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); + projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); + projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + projectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); + projectInfo.setProjectName(project.getName()); + projectInfo.setBizId(project.getBizId()); + projectInfo.setTagName(project.getTagName()); + projectInfo.setTagRemark(project.getTagRemark()); + projectInfo.setProjectCity(project.getCity()); + projectInfo.setShortCity(project.getShortCity()); + projectInfo.setVenueName(project.getVenueName()); + projectInfo.setLowestPrice(project.getLowestPrice()); + performProjectInfoMapper.update(projectInfo); + List fPerformSeatInfoInsertList = Lists.newArrayList(); + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { + for (PerformDetail performDetail : performInfo.getPerformInfo()) { + if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); + fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); + fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); + fPerformSeatInfo.setPerformId(seatPlan.getPerformId()); + fPerformSeatInfo.setPerformName(seatPlan.getPerformName()); + fPerformSeatInfo.setStopSale(seatPlan.getStopSale()); + fPerformSeatInfo.setShelfStatus(seatPlan.getShelfStatus()); + fPerformSeatInfo.setPrice(seatPlan.getPrice()); + fPerformSeatInfo.setDiscountPrice(seatPlan.getDiscountPrice()); + fPerformSeatInfo.setSubStatus(seatPlan.getSubStatus()); + fPerformSeatInfo.setQuantity(seatPlan.getQuantity()); + fPerformSeatInfo.setStatus(seatPlan.getStatus()); + fPerformSeatInfo.setMaxSellStock(seatPlan.getMaxSellStock()); + fPerformSeatInfo.setSoldStock(seatPlan.getSoldStock()); + fPerformSeatInfo.setLeftStock(seatPlan.getLeftStock()); + fPerformSeatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); + fPerformSeatInfo.setAshShow(seatPlan.getAshShow()); + fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); + if (Objects.nonNull(seatInfo)) { + fPerformSeatInfo.setId(seatInfo.getId()); + performSeatInfoMapper.update(fPerformSeatInfo); + } else { + fPerformSeatInfoInsertList.add(fPerformSeatInfo); + } + } + } + + } + } + } + if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { + performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); + } + } else { + // 新增projectInfo的信息 + FPerformProjectInfo fPerformProjectInfo = new FPerformProjectInfo(); + fPerformProjectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); + fPerformProjectInfo.setStatus(projectInfoFromHttp.getStatus()); + fPerformProjectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); + fPerformProjectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); + fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); + fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); + fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + fPerformProjectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); + + fPerformProjectInfo.setProjectName(project.getName()); + fPerformProjectInfo.setBizId(project.getBizId()); + fPerformProjectInfo.setProjectId(project.getProjectId()); + fPerformProjectInfo.setTagName(project.getTagName()); + fPerformProjectInfo.setTagRemark(project.getTagRemark()); + fPerformProjectInfo.setProjectCity(project.getCity()); + fPerformProjectInfo.setShortCity(project.getShortCity()); + fPerformProjectInfo.setVenueName(project.getVenueName()); + fPerformProjectInfo.setLowestPrice(project.getLowestPrice()); + performProjectInfoMapper.insert(fPerformProjectInfo); + + List fPerformSeatInfos = Lists.newArrayList(); + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { + for (PerformDetail performDetail : performInfo.getPerformInfo()) { + if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); + fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); + fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); + fPerformSeatInfo.setPerformId(seatPlan.getPerformId()); + fPerformSeatInfo.setPerformName(seatPlan.getPerformName()); + fPerformSeatInfo.setStopSale(seatPlan.getStopSale()); + fPerformSeatInfo.setShelfStatus(seatPlan.getShelfStatus()); + fPerformSeatInfo.setPrice(seatPlan.getPrice()); + fPerformSeatInfo.setDiscountPrice(seatPlan.getDiscountPrice()); + fPerformSeatInfo.setSubStatus(seatPlan.getSubStatus()); + fPerformSeatInfo.setQuantity(seatPlan.getQuantity()); + fPerformSeatInfo.setStatus(seatPlan.getStatus()); + fPerformSeatInfo.setMaxSellStock(seatPlan.getMaxSellStock()); + fPerformSeatInfo.setSoldStock(seatPlan.getSoldStock()); + fPerformSeatInfo.setLeftStock(seatPlan.getLeftStock()); + fPerformSeatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); + fPerformSeatInfo.setAshShow(seatPlan.getAshShow()); + fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + } + } + } + } + } + if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { + performSeatInfoMapper.batchSave(fPerformSeatInfos); + } + } } - } + }, es); + futureList.add(future); } + CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); + CompletableFuture.allOf(futureArr).join(); } } 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 fe6d582..a70ad2e 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 @@ -34,5 +34,4 @@ public interface IPerformServiceHttp { * @return */ Perform getPerformsByProjectIdFromHttp(Long projectId); - } diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index f3b6d22..f679f23 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql:///xservice-script?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://120.27.153.87:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root - password: 12345678 + password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml new file mode 100644 index 0000000..4c55f39 --- /dev/null +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, seat_plan_id, + seat_plan_name, + perform_id, + perform_name, + stop_sale, + shelf_status, + price, + discount_price, + sub_status, + quantity, + 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 + + + + INSERT INTO fwd_perform_seat_info + + + seat_plan_id, + + + seat_plan_name, + + + perform_id, + + + perform_name, + + + stop_sale, + + + shelf_status, + + + price, + + + discount_price, + + + sub_status, + + + quantity, + + + 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 + + + + + #{seatPlanId}, + + + #{seatPlanName}, + + + #{performId}, + + + #{performName}, + + + #{stopSale}, + + + #{shelfStatus}, + + + #{price}, + + + #{discountPrice}, + + + #{subStatus}, + + + #{quantity}, + + + #{status}, + + + #{maxSellStock}, + + + #{soldStock}, + + + #{leftStock}, + + + #{ableSaleQuantity}, + + + #{ashShow}, + + + #{ashShowDesc}, + + + #{selectable}, + + + #{display}, + + + #{availableTicketQuantity}, + + + #{availableAllTicketQuantity}, + + + #{saleTime}, + + + #{projectId} + + + + + INSERT INTO fwd_perform_seat_info + ( + seat_plan_id, seat_plan_name, perform_id, perform_name, stop_sale, + shelf_status, price, discount_price, sub_status, quantity, + 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 + ) + VALUES + + ( + #{item.seatPlanId}, #{item.seatPlanName}, #{item.performId}, #{item.performName}, #{item.stopSale}, + #{item.shelfStatus}, #{item.price}, #{item.discountPrice}, #{item.subStatus}, #{item.quantity}, + #{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} + ) + + + + + + + UPDATE fwd_perform_seat_info + + seat_plan_id = #{seatPlanId}, + seat_plan_name = #{seatPlanName}, + perform_id = #{performId}, + perform_name = #{performName}, + stop_sale = #{stopSale}, + shelf_status = #{shelfStatus}, + price = #{price}, + discount_price = #{discountPrice}, + sub_status = #{subStatus}, + quantity = #{quantity}, + status = #{status}, + max_sell_stock = #{maxSellStock}, + sold_stock = #{soldStock}, + left_stock = #{leftStock}, + able_sale_quantity = #{ableSaleQuantity}, + ash_show = #{ashShow}, + ash_show_desc = #{ashShowDesc}, + selectable = #{selectable}, + display = #{display}, + available_ticket_quantity = #{availableTicketQuantity}, + available_all_ticket_quantity = #{availableAllTicketQuantity}, + sale_time = #{saleTime}, + project_id = #{projectId} + + WHERE id = #{id} + + + + + \ No newline at end of file