fix:日期工具类修复;

feat:新增更新user token工具
This commit is contained in:
Zhujx
2025-08-06 11:32:21 +08:00
parent 84adaeca72
commit 3903a38ead
9 changed files with 130 additions and 95 deletions

12
pom.xml
View File

@@ -7,7 +7,7 @@
<parent>
<groupId>com.xiang</groupId>
<artifactId>xservice-basic</artifactId>
<version>1.0</version>
<version>1.1</version>
</parent>
<groupId>com.xiang</groupId>
@@ -30,27 +30,27 @@
<dependency>
<groupId>com.xiang</groupId>
<artifactId>xservice-common</artifactId>
<version>1.0</version>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.xiang</groupId>
<artifactId>xservice-message-starter</artifactId>
<version>1.0</version>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.xiang</groupId>
<artifactId>xservice-schedule-starter</artifactId>
<version>1.0</version>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.xiang</groupId>
<artifactId>xservice-cache-starter</artifactId>
<version>1.0</version>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.xiang</groupId>
<artifactId>xservice-http-starter</artifactId>
<version>1.0</version>
<version>1.1</version>
</dependency>
</dependencies>

View File

@@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.mapper;
import com.xiang.xservice.fwd.entity.pojo.FUserConfig;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -15,4 +16,26 @@ public interface FwdUserConfigMapper {
* @return
*/
List<FUserConfig> getAvailableUser();
/**
* 根据用户名查询用户
* @param name
* @return
*/
FUserConfig getUserByName(String name);
/**
* 更新用户token
* @param name
* @param token
* @return
*/
int updateTokenByName(@Param("name") String name, @Param("token") String token);
/**
* 新增用户token
* @param userConfig
* @return
*/
int insert(FUserConfig userConfig);
}

View File

@@ -115,7 +115,7 @@ public class FwdImportantMsgJob {
StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n");
for (FPerformProjectInfo data : saleTodayData) {
msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n");
msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeFromDateTime(data.getPreSaleTime())).append("\n");
long taskId = PrimaryKeyUtils.snowflakeId();
Map<String, Object> params = Maps.newHashMap();
params.put("projectId", data.getProjectId());
@@ -163,7 +163,7 @@ public class FwdImportantMsgJob {
if (Objects.nonNull(performsByProjectIdFromHttp)) {
for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) {
for (PerformDetail performDetail : performInfo.getPerformInfo()) {
LocalDateTime saleTime = DateUtils.getTimeFromStr(performDetail.getSaleTime());
LocalDateTime saleTime = DateUtils.getDateTimeFromStr(performDetail.getSaleTime());
if (saleTime.isAfter(todayStartTime) && saleTime.isBefore(todayEndTime)) {
List<SeatPlan> seatPlans = performDetail.getSeatPlans();
Map<Long, SeatPlan> seatPlanMap = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a));

View File

@@ -4,10 +4,24 @@ import com.google.common.collect.Lists;
import com.xiang.xservice.basic.common.req.BaseRequest;
import com.xiang.xservice.basic.config.MyThreadFactory;
import com.xiang.xservice.basic.utils.DateUtils;
import com.xiang.xservice.fwd.entity.pojo.*;
import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig;
import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo;
import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo;
import com.xiang.xservice.fwd.entity.pojo.FUserConfig;
import com.xiang.xservice.fwd.entity.resp.http.audience.AudienceMemberInfo;
import com.xiang.xservice.fwd.entity.resp.http.perform.*;
import com.xiang.xservice.fwd.mapper.*;
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.entity.resp.http.perform.SeatPlanStatus;
import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper;
import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper;
import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper;
import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper;
import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper;
import com.xiang.xservice.fwd.service.IPerformServiceHttp;
import com.xiang.xservice.http.helper.HttpRequestHelper;
import lombok.RequiredArgsConstructor;
@@ -19,7 +33,6 @@ import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -69,10 +82,10 @@ public class PullDataFromFWDJob {
fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat());
fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice());
if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) {
fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate()));
fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate(), "yyyy/MM/dd"));
}
if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) {
fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate()));
fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate(), "yyyy/MM/dd"));
}
fPerformProjectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName());
@@ -86,86 +99,11 @@ public class PullDataFromFWDJob {
fPerformProjectInfo.setVenueName(project.getVenueName());
fPerformProjectInfo.setLowestPrice(project.getLowestPrice());
if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) {
fPerformProjectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime()));
fPerformProjectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime(), "yyyy/MM/dd HH:mm:ss"));
}
performProjectInfoMapper.insert(fPerformProjectInfo);
}
// @Scheduled(cron = "0 10 8 1/1 * ?")
@PostMapping("/pullSeatDataJob")
public void pullSeatDataJob() {
List<FPerformConfig> availablePerform = performConfigMapper.getAvailablePerform();
if (CollectionUtils.isEmpty(availablePerform)) {
return;
}
for (FPerformConfig performConfig : availablePerform) {
Perform performs = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getPerformsByProjectIdFromHttp(performConfig.getProjectId()), "seat-perform-info");
if (Objects.isNull(performs)) {
continue;
}
if (CollectionUtils.isEmpty(performs.getPerformInfos())) {
continue;
}
for (PerformInfo performInfo : performs.getPerformInfos()) {
List<PerformDetail> info = performInfo.getPerformInfo();
if (CollectionUtils.isEmpty(info)) {
continue;
}
for (PerformDetail performDetail : info) {
List<SeatPlan> seatPlans = performDetail.getSeatPlans();
if (CollectionUtils.isEmpty(seatPlans)) {
continue;
}
Map<Long, SeatPlan> map = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a));
List<SeatPlanStatus> planStatusFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getSeatPlanStatusFromHttp(new ArrayList<>(map.keySet())), "seat-seat-status");
List<FPerformSeatInfo> seatInfoAddList = Lists.newArrayList();
for (SeatPlanStatus seatPlanStatus : planStatusFromHttp) {
if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus() == 10) {
FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(seatPlanStatus.getSeatPlanId(), seatPlanStatus.getPerformId(), performs.getProjectId());
SeatPlan seatPlan = map.get(seatPlanStatus.getSeatPlanId());
if (Objects.isNull(seatInfo)) {
if (Objects.nonNull(seatPlan)) {
seatInfo = new FPerformSeatInfo();
seatInfo.setSeatPlanId(seatPlanStatus.getSeatPlanId());
seatInfo.setSeatPlanName(seatPlan.getSeatPlanName());
seatInfo.setPerformId(seatPlanStatus.getPerformId());
seatInfo.setPerformName(seatPlan.getPerformName());
seatInfo.setStopSale(seatPlan.getStopSale());
seatInfo.setShelfStatus(seatPlan.getShelfStatus());
seatInfo.setPrice(seatPlan.getPrice());
seatInfo.setDiscountPrice(seatPlan.getDiscountPrice());
seatInfo.setSubStatus(seatPlan.getSubStatus());
seatInfo.setQuantity(seatPlan.getQuantity());
seatInfo.setStatus(seatPlan.getStatus());
seatInfo.setMaxSellStock(seatPlan.getMaxSellStock());
seatInfo.setSoldStock(seatPlan.getSoldStock());
seatInfo.setLeftStock(seatPlan.getLeftStock());
seatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity());
seatInfo.setAshShow(seatPlan.getAshShow());
seatInfo.setAshShowDesc(seatPlan.getAshShowDesc());
seatInfo.setSelectable(seatPlan.getSelectable());
seatInfo.setDisplay(seatPlan.getDisplay());
seatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity());
seatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity());
seatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime()));
seatInfo.setProjectId(performs.getProjectId());
seatInfo.setSoldOut(0);
seatInfoAddList.add(seatInfo);
}
} else {
seatInfo.setSoldOut(0);
performSeatInfoMapper.update(seatInfo);
}
}
}
if (CollectionUtils.isNotEmpty(seatInfoAddList)) {
performSeatInfoMapper.batchSave(seatInfoAddList);
}
}
}
}
}
/**
* 每月拉取观影人数据更新
*/
@@ -314,7 +252,7 @@ public class PullDataFromFWDJob {
fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity());
fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity());
if (StringUtils.isNotBlank(seatPlan.getSaleTime())) {
fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime()));
fPerformSeatInfo.setSaleTime(DateUtils.getDateTimeFromStr(seatPlan.getSaleTime()));
}
fPerformSeatInfo.setProjectId(projectList.getProjectId());
if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus().equals(10)) {
@@ -333,10 +271,10 @@ public class PullDataFromFWDJob {
projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat());
projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice());
if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) {
projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate()));
projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate(), "yyyy/MM/dd"));
}
if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) {
projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate()));
projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate(), "yyyy/MM/dd"));
}
projectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName());
projectInfo.setProjectName(projectList.getName());
@@ -348,7 +286,7 @@ public class PullDataFromFWDJob {
projectInfo.setVenueName(projectList.getVenueName());
projectInfo.setLowestPrice(projectList.getLowestPrice());
if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) {
projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime()));
projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime(), "yyyy/MM/dd HH:mm:ss"));
}
}
}

View File

@@ -83,7 +83,7 @@ public class FwdDataController {
fPerformSeatInfo.setDisplay(seatPlan.getDisplay());
fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity());
fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity());
fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime()));
fPerformSeatInfo.setSaleTime(DateUtils.getDateTimeFromStr(seatPlan.getSaleTime(), "yyyy/MM/dd HH:mm:ss"));
fPerformSeatInfo.setProjectId(availablePerform.getProjectId());
fPerformSeatInfo.setSoldOut(seatPlan.getSoldStock());
performService.addSeatInfo(fPerformSeatInfo);

View File

@@ -0,0 +1,46 @@
package com.xiang.xservice.fwd.server;
import com.alibaba.fastjson.JSON;
import com.xiang.xservice.basic.common.resp.Result;
import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService;
import com.xiang.xservice.fwd.service.IPerformService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* @Author: xiang
* @Date: 2025-08-06 10:41
*/
@Slf4j
@RestController
@RequestMapping("/open/fwd/user")
@RequiredArgsConstructor
public class FwdUserController {
private final IPerformService performService;
private final DingTalkService dingTalkService;
@GetMapping("/token")
public Result<Void> updateUserTokenFromHttpProxy(@RequestParam Map<String, String> params) {
String name = params.get("name");
String token = params.get("token");
log.info("接收到的参数有===>{}, name:{}, token:{}", JSON.toJSONString(params), name, token);
Boolean b = performService.updateTokenByName(name, token);
if (b) {
String msg = "用户:" + name + "的token更新成功";
try {
dingTalkService.sendRobotMessage(msg);
} catch (Exception e) {
log.error("消息发送失败", e);
return Result.error("消息发送失败");
}
}
return Result.success();
}
}

View File

@@ -27,4 +27,6 @@ public interface IPerformService {
Boolean updateSeatInfo(FPerformSeatInfo seatInfoBySeatId);
Boolean addSeatInfo(FPerformSeatInfo fPerformSeatInfo);
Boolean updateTokenByName(String name, String token);
}

View File

@@ -142,4 +142,18 @@ public class PerformServiceImpl implements IPerformService {
public Boolean addSeatInfo(FPerformSeatInfo fPerformSeatInfo) {
return fwdPerformSeatInfoMapper.batchSave(Collections.singletonList(fPerformSeatInfo)) > 0;
}
@Override
public Boolean updateTokenByName(String name, String token) {
FUserConfig userByName = fwdUserConfigMapper.getUserByName(name);
if (Objects.isNull(userByName)) {
FUserConfig fUserConfig = new FUserConfig();
fUserConfig.setName(name);
fUserConfig.setToken(token);
fUserConfig.setStatus(1);
return fwdUserConfigMapper.insert(fUserConfig) > 0;
} else {
return fwdUserConfigMapper.updateTokenByName(name, token) > 0;
}
}
}

View File

@@ -13,10 +13,22 @@
<sql id="Base_Column_List">
id, name, token, status
</sql>
<insert id="insert" keyProperty="id" useGeneratedKeys="true" parameterType="com.xiang.xservice.fwd.entity.pojo.FUserConfig" keyColumn="id">
insert into fwd_user_config (name, token, status) values (#{name}, #{token}, #{status});
</insert>
<update id="updateTokenByName">
update fwd_user_config set token = #{token} where name = #{name}
</update>
<select id="getAvailableUser" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from fwd_user_config where status = 1
</select>
<select id="getUserByName" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from fwd_user_config where status = 1 and name = #{name}
</select>
</mapper>