Compare commits

...

43 Commits

Author SHA1 Message Date
ef429d3194 心跳数据推送 2024-09-30 15:06:59 +08:00
0425a150d5 Merge pull request '代码生成器异常解决' (#79) from xinwei into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #79
2024-09-30 11:01:35 +08:00
71b00ea5c1 解决代码生成器table_id找不到异常报错 2024-09-29 21:27:00 +08:00
f14168e872 Merge branch 'master' of http://101.43.112.107:3000/root/ludu-cloud into xinwei 2024-09-29 21:26:17 +08:00
d42e981c2f 构建修改
Some checks failed
continuous-integration/drone Build is failing
2024-09-20 10:58:43 +08:00
a93317d558 Merge pull request 'xinwei' (#78) from xinwei into master
All checks were successful
continuous-integration/drone Build is passing
Reviewed-on: #78
2024-09-20 10:20:35 +08:00
4b0995a009 Merge branch 'master' of http://101.43.112.107:3000/root/ludu-cloud into xinwei 2024-09-20 10:19:03 +08:00
2e99b505c6 构建修改 2024-09-20 10:18:35 +08:00
c6f2684150 pom镜像修改 2024-09-20 09:03:12 +08:00
f95361ad23 测试打包
Some checks failed
continuous-integration/drone Build is failing
2024-09-18 14:42:02 +08:00
2e3ebd0383 测试打包
Some checks failed
continuous-integration/drone Build is failing
2024-09-18 11:51:55 +08:00
d1876c76a5 测试打包
Some checks failed
continuous-integration/drone Build is failing
2024-09-18 11:42:11 +08:00
32329dff77 测试打包注释其它
Some checks failed
continuous-integration/drone Build is failing
2024-09-18 11:09:44 +08:00
34f7df819d 镜像源修改
Some checks failed
continuous-integration/drone Build is failing
2024-09-13 14:23:22 +08:00
e58be046fc 镜像源修改
Some checks failed
continuous-integration/drone Build is failing
2024-09-13 14:13:33 +08:00
6dcfba3b74 镜像源修改
Some checks reported errors
continuous-integration/drone Build was killed
2024-09-13 14:02:23 +08:00
5292f7c3f4 镜像源修改
Some checks failed
continuous-integration/drone Build is failing
2024-09-13 13:53:08 +08:00
da85b4b461 镜像源修改
Some checks reported errors
continuous-integration/drone Build encountered an error
2024-09-13 13:50:47 +08:00
b76b8f110b 镜像源修改
Some checks failed
continuous-integration/drone Build is failing
2024-09-13 13:30:28 +08:00
08bf2d1433 镜像源修改 2024-09-13 13:29:32 +08:00
b4b37221cd 镜像源修改
Some checks reported errors
continuous-integration/drone Build was killed
2024-09-13 11:55:20 +08:00
dda07281f0 镜像源修改
Some checks reported errors
continuous-integration/drone Build was killed
2024-09-13 11:39:48 +08:00
497c101b5b 镜像源修改 2024-09-13 11:39:16 +08:00
02740c701e 镜像源修改
Some checks reported errors
continuous-integration/drone Build was killed
2024-09-13 11:25:52 +08:00
8a57ad232c 镜像源修改
Some checks reported errors
continuous-integration/drone Build was killed
2024-09-13 11:20:15 +08:00
194a7bb227 Merge pull request '镜像源修改' (#77) from xinwei into master
Some checks failed
continuous-integration/drone Build is failing
Reviewed-on: #77
2024-09-13 11:08:58 +08:00
f552e8afd3 镜像源修改 2024-09-13 11:08:28 +08:00
c09078506a Merge pull request '构建新增镜像方式' (#76) from xinwei into master
Some checks reported errors
continuous-integration/drone Build was killed
Reviewed-on: #76
2024-09-13 10:55:33 +08:00
3ec2186b03 构建新增镜像方式 2024-09-13 10:54:53 +08:00
84a34052b3 Merge pull request 'xinwei' (#75) from xinwei into master
Reviewed-on: #75
2024-09-13 10:46:57 +08:00
894f8bf8c3 构建新增镜像方式 2024-09-13 10:44:33 +08:00
4c3d9c7878 mysql票务抽数新增校验、修改插入方式为批量插入、mongo票务抽数代码优化 2024-09-09 11:08:09 +08:00
f9982b7ec0 Merge pull request '测试gitea更新' (#73) from xinwei into master
All checks were successful
continuous-integration/drone Build is passing
Reviewed-on: #73
2024-09-06 14:12:31 +08:00
0dde9222f4 测试gitea更新 2024-09-06 14:10:21 +08:00
5f93aab040 Merge pull request 'xinwei' (#72) from xinwei into master
All checks were successful
continuous-integration/drone Build is passing
Reviewed-on: #72
2024-09-05 17:15:15 +08:00
40ba1cb503 定时任务服务不做容器内存限制 2024-09-05 17:14:29 +08:00
e2ccdbd4c4 Merge branch 'master' of http://101.43.112.107:3000/root/ludu-cloud into xinwei 2024-09-05 10:57:15 +08:00
8187ed3143 Merge pull request '添加航班管理' (#70) from sjy into master
All checks were successful
continuous-integration/drone Build is passing
Reviewed-on: #70
2024-09-05 10:26:47 +08:00
605d2787a8 Merge pull request '构建限制内存修改' (#71) from xinwei into master
All checks were successful
continuous-integration/drone Build is passing
Reviewed-on: #71
2024-09-05 09:47:52 +08:00
a6a4d1e382 Merge remote-tracking branch 'origin/master' into xinwei 2024-09-05 09:45:09 +08:00
1e26d750ff 构建限制内存修改 2024-09-05 09:41:10 +08:00
9c0636ee45 添加航班管理 2024-09-03 15:06:24 +08:00
a4685cbf50 Merge pull request '心跳数据推送' (#69) from zzw-one into master
All checks were successful
continuous-integration/drone Build is passing
Reviewed-on: #69
2024-09-03 10:03:28 +08:00
66 changed files with 2622 additions and 533 deletions

155
.drone-images.yml Normal file
View File

@ -0,0 +1,155 @@
kind: pipeline # 定义对象类型还有secret和signature两种类型
type: docker # 定义流水线类型还有kubernetes、exec、ssh等类型
name: ludu-drone-images # 定义流水线名称
steps: # 定义流水线执行步骤,这些步骤将顺序执行
- name: package # 流水线名称
image: maven:3-jdk-8 # 定义创建容器的Docker镜像
volumes: # 将容器内目录挂载到宿主机仓库需要开启Trusted设置
- name: maven-cache
path: /root/.m2 # 将maven下载依赖的目录挂载出来防止重复下载
- name: maven-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
commands: # 定义在Docker容器中执行的shell命令
- mvn package -Dmaven.test.skip=true # 应用打包命令
- |
if [ "${service}" = "gateway" ] || [ "${service}" = "all" ]; then
mkdir -p /app/build/yudao-gateway/target
cp ./yudao-gateway/target/yudao-gateway.jar /app/build/yudao-gateway/target/
cp ./yudao-gateway/Dockerfile /app/build/yudao-gateway/
cp ./yudao-gateway/run.sh /app/build/yudao-gateway/
fi
if [ "${service}" = "system" ] || [ "${service}" = "all" ]; then
mkdir -p /app/build/yudao-module-system/target
cp ./yudao-module-system/yudao-module-system-biz/target/yudao-module-system-biz.jar /app/build/yudao-module-system/target/
cp ./yudao-module-system/yudao-module-system-biz/Dockerfile /app/build/yudao-module-system/
cp ./yudao-module-system/yudao-module-system-biz/run.sh /app/build/yudao-module-system/
fi
if [ "${service}" = "infra" ] || [ "${service}" = "all" ]; then
mkdir -p /app/build/yudao-module-infra/target
cp ./yudao-module-infra/yudao-module-infra-biz/target/yudao-module-infra-biz.jar /app/build/yudao-module-infra/target/
cp ./yudao-module-infra/yudao-module-infra-biz/Dockerfile /app/build/yudao-module-infra/
cp ./yudao-module-infra/yudao-module-infra-biz/run.sh /app/build/yudao-module-infra/
fi
if [ "${service}" = "job" ] || [ "${service}" = "all" ]; then
mkdir -p /app/build/ludu-job-admin/target
cp ./ludu-job-admin/ludu-job-admin-biz/target/ludu-job-admin-biz.jar /app/build/ludu-job-admin/target/
cp ./ludu-job-admin/ludu-job-admin-biz/Dockerfile /app/build/ludu-job-admin/
cp ./ludu-job-admin/ludu-job-admin-biz/run.sh /app/build/ludu-job-admin/
fi
if [ "${service}" = "ticketing" ] || [ "${service}" = "all" ]; then
mkdir -p /app/build/ludu-module-ticketing/target
cp ./ludu-module-ticketing/ludu-module-ticketing-biz/target/ludu-module-ticketing-biz.jar /app/build/ludu-module-ticketing/target/
cp ./ludu-module-ticketing/ludu-module-ticketing-biz/Dockerfile /app/build/ludu-module-ticketing/
cp ./ludu-module-ticketing/ludu-module-ticketing-biz/run.sh /app/build/ludu-module-ticketing/
fi
if [ "${service}" = "parking" ] || [ "${service}" = "all" ]; then
mkdir -p /app/build/ludu-module-parking/target
cp ./ludu-module-parking/ludu-module-parking-biz/target/ludu-module-parking-biz.jar /app/build/ludu-module-parking/target/
cp ./ludu-module-parking/ludu-module-parking-biz/Dockerfile /app/build/ludu-module-parking/
cp ./ludu-module-parking/ludu-module-parking-biz/run.sh /app/build/ludu-module-parking/
fi
if [ "${service}" = "datacenter" ] || [ "${service}" = "all" ]; then
mkdir -p /app/build/ludu-module-datacenter/target
cp ./ludu-module-datacenter/ludu-module-datacenter-biz/target/ludu-module-datacenter-biz.jar /app/build/ludu-module-datacenter/target
cp ./ludu-module-datacenter/ludu-module-datacenter-biz/Dockerfile /app/build/ludu-module-datacenter/
cp ./ludu-module-datacenter/ludu-module-datacenter-biz/run.sh /app/build/ludu-module-datacenter/
fi
- name: push-images
image: appleboy/drone-ssh # SSH工具镜像
settings:
host: 101.43.112.107 # 远程连接地址
username: root # 远程连接账号
password:
from_secret: ssh_password # 从Secret中读取SSH密码
port: 22 # 远程连接端口
command_timeout: 30m # 远程执行命令超时时间
script:
- |
deploy_service() {
local image_name=$1
local container_name=$2
if [[ -z "${image_name}" || -z "${container_name}" ]]; then
echo "Error: image_name or container_name is empty."
exit 1
fi
cd /ludu/build/${image_name}
docker stop ${container_name}
docker rm ${container_name}
docker rmi -f ${image_name}:1.0.0
docker buildx build -f Dockerfile -t ${image_name}:1.0.0 .
docker tag ${image_name}:1.0.0 120.46.37.243:8080/lundu/${image_name}:1.0.0
docker push 120.46.37.243:8080/lundu/${image_name}:1.0.0
}
if [ "${service}" = "gateway" ] || [ "${service}" = "all" ]; then
deploy_service "yudao-gateway" "yudao-gateway"
fi
if [ "${service}" = "system" ] || [ "${service}" = "all" ]; then
deploy_service "yudao-module-system" "yudao-system"
fi
if [ "${service}" = "infra" ] || [ "${service}" = "all" ]; then
deploy_service "yudao-module-infra" "yudao-infra"
fi
if [ "${service}" = "job" ] || [ "${service}" = "all" ]; then
deploy_service "ludu-job-admin" "ludu-job-admin"
fi
if [ "${service}" = "ticketing" ] || [ "${service}" = "all" ]; then
deploy_service "ludu-module-ticketing" "ludu-ticketing"
fi
if [ "${service}" = "parking" ] || [ "${service}" = "all" ]; then
deploy_service "ludu-module-parking" "ludu-parking"
fi
if [ "${service}" = "datacenter" ] || [ "${service}" = "all" ]; then
deploy_service "ludu-module-datacenter" "ludu-datacenter"
fi
- name: pull-image-and-run
image: appleboy/drone-ssh # SSH工具镜像
settings:
host: 121.36.203.133 # 远程连接地址
username: root # 远程连接账号
password:
from_secret: ssh_password3 # 从Secret中读取SSH密码
port: 22 # 远程连接端口
command_timeout: 20m # 远程执行命令超时时间
script:
- cd /ludu
- ./start_service.sh ${service}
volumes: # 定义流水线挂载目录,用于共享数据
- name: maven-build
host:
path: /ludu/maven/build # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /ludu/maven/cache # 从宿主机中挂载的目录

View File

@ -50,7 +50,7 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
- chmod +x run.sh
- ./run.sh || echo "job build failed"
- cd ludu-module-datacenter/ludu-module-datacenter-biz/
- cd /root/ludu-cloud/ludu-module-datacenter/ludu-module-datacenter-biz/
- chmod +x run.sh
- ./run.sh || echo "datacenter build failed"

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.datacenter.controller.app.flight;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.datacenter.dal.dataobject.flight.TodayFlightDO;
import cn.iocoder.yudao.module.datacenter.service.flight.TodayFlightService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/flight")
public class TodayFlightController {
@Resource
private TodayFlightService todayFlightService;
@GetMapping("/getFlightData")
public CommonResult<List<Object>> getFlightData(){
List<Object> listCommonResult = todayFlightService.todayFlightData();
return CommonResult.success(listCommonResult);
}
}

View File

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.datacenter.controller.app.flight.vo;
import lombok.Data;
@Data
public class Datas {
private String classes;
private String timeOne;
private String timeTwo;
}

View File

@ -0,0 +1,12 @@
package cn.iocoder.yudao.module.datacenter.controller.app.flight.vo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class FlightDataDO {
private String name;
private List<Datas> datas = new ArrayList<>();
}

View File

@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.datacenter.controller.app.flight.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 今日航班分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TodayFlightPageReqVO extends PageParam {
@Schema(description = "航线", example = "19067")
private Long shipRouteId;
@Schema(description = "班次")
private String classes;
@Schema(description = "开始时间")
private String startTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,39 @@
package cn.iocoder.yudao.module.datacenter.controller.app.flight.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 今日航班 Response VO")
@Data
@ExcelIgnoreUnannotated
public class TodayFlightRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12418")
@ExcelProperty("id")
private Long id;
@Schema(description = "航线", example = "19067")
@ExcelProperty("航线")
private Long shipRouteId;
@Schema(description = "班次")
@ExcelProperty("班次")
private String classes;
@Schema(description = "开始时间")
@ExcelProperty("开始时间")
private String startTime;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "航线")
@ExcelProperty("航线")
private String shipRouteName;
}

View File

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.datacenter.controller.app.flight.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 今日航班新增/修改 Request VO")
@Data
public class TodayFlightSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12418")
private Long id;
@Schema(description = "航线", example = "19067")
private Long shipRouteId;
@Schema(description = "班次")
private String classes;
@Schema(description = "开始时间")
private String startTime;
}

View File

@ -53,27 +53,33 @@ public class VehicleAccessApi {
LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX);
Revenue revenue = new Revenue();
revenue.setAreaName("中关村软件园一号院");
revenue.setCreateTime(LocalDateTime.now());
revenue.setGetTime("2024.05.14 12:15:36");
revenue.setMemo("");
revenue.setPayCharge("30");
revenue.setPayKind("微信");
revenue.setPlate("京A 88888");
revenueRepository.insert(revenue);
Optional<BlueCardHeartbeat> topByCreateTimeBetween = blueCardHeartbeatRepository.findFirstByCreateTimeBetweenOrderByCreateTimeDesc(startOfDay, endOfDay);
return ResponseVO.success(200, "添加成功", null, 0);
// Revenue revenue = new Revenue();
// revenue.setAreaName("中关村软件园一号院");
// revenue.setCreateTime(LocalDateTime.now());
// revenue.setGetTime("2024.05.14 12:15:36");
// revenue.setMemo("");
// revenue.setPayCharge("30");
// revenue.setPayKind("微信");
// revenue.setPlate("京A 88888");
// revenueRepository.insert(revenue);
return ResponseVO.success(200, "添加成功", topByCreateTimeBetween, 0);
}
//获取实时车辆进出数据和今日车位统计
@GetMapping("/parkingLotData")
public ResponseVO parkAndVacancy() {
// 获取今天的日期
LocalDate today = LocalDate.now();
// 计算今天的起始时间和结束时间
LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX);
//时间最新的一条数据
Optional<BlueCardHeartbeat> latestHeartbeat = blueCardHeartbeatRepository.findTopByOrderByCreateTimeDesc();
Optional<BlueCardHeartbeat> latestHeartbeat = blueCardHeartbeatRepository.findFirstByCreateTimeBetweenOrderByCreateTimeDesc(startOfDay,endOfDay);
if (latestHeartbeat.isPresent()) {
BlueCardHeartbeat heartbeat = latestHeartbeat.get();
@ -87,11 +93,6 @@ public class VehicleAccessApi {
parkingLotDataVO.setParkingNum(parkingNum);//实时停车数
parkingLotDataVO.setResidualStopNum(residualStopNum);//剩余车位数
// 获取今天的日期
LocalDate today = LocalDate.now();
// 计算今天的起始时间和结束时间
LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX);
List<EntryRecord> entryRecords = entryRecordRepository.findByCreateTimeBetween(startOfDay, endOfDay);
parkingLotDataVO.setIntoNum(entryRecords.size());//车辆进入数
//固定车临时车

View File

@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @Description 大屏服务-天气接口
*/

View File

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.datacenter.dal.dataobject.flight;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 今日航班 DO
*
* @author 管理员
*/
@TableName("today_flight")
@KeySequence("today_flight_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TodayFlightDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 航线
*/
private Long shipRouteId;
/**
* 班次
*/
private String classes;
/**
* 开始时间
*/
private String startTime;
@TableField(exist = false)
private String shipRouteName;
@TableField(exist = false)
private String routeName;
@TableField(exist = false)
private String flightName;
@TableField(exist = false)
private String flightId;
}

View File

@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.datacenter.dal.mongodb.vehicleaccess;
import cn.iocoder.yudao.module.datacenter.dal.dataobject.vehicleaccess.BlueCardHeartbeat;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.time.LocalDateTime;
import java.util.Optional;
public interface BlueCardHeartbeatRepository extends MongoRepository<BlueCardHeartbeat,String> {
@ -10,5 +12,7 @@ public interface BlueCardHeartbeatRepository extends MongoRepository<BlueCardHea
Optional<BlueCardHeartbeat> findTopByOrderByCreateTimeDesc();
Optional<BlueCardHeartbeat> findFirstByCreateTimeBetweenOrderByCreateTimeDesc(LocalDateTime startOfDay, LocalDateTime endOfDay);
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.datacenter.dal.mysql.flight;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.datacenter.dal.dataobject.flight.TodayFlightDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 今日航班 Mapper
*
* @author 管理员
*/
@Mapper
public interface TodayFlightMapper extends BaseMapperX<TodayFlightDO> {
@Select(" select count(c.id),c.id as flight_id from today_flight a " +
" inner join ship_route b on a.ship_route_id = b.id " +
" inner join flight c on b.flight_id = c.id GROUP BY c.id ")
List<TodayFlightDO> todayFlightData();
@Select("select ship_route_id,classes,start_time from today_flight where ship_route_id = #{id} ORDER BY start_time ASC")
List<TodayFlightDO> byRouteId(String id);
}

View File

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.datacenter.service.flight;
import cn.iocoder.yudao.module.datacenter.dal.dataobject.flight.TodayFlightDO;
import java.util.List;
/**
* 今日航班 Service 接口
*
* @author 管理员
*/
public interface TodayFlightService {
List<Object> todayFlightData();
}

View File

@ -0,0 +1,144 @@
package cn.iocoder.yudao.module.datacenter.service.flight;
import cn.iocoder.yudao.module.datacenter.controller.app.flight.vo.Datas;
import cn.iocoder.yudao.module.datacenter.controller.app.flight.vo.FlightDataDO;
import cn.iocoder.yudao.module.datacenter.dal.dataobject.flight.TodayFlightDO;
import cn.iocoder.yudao.module.datacenter.dal.mysql.flight.TodayFlightMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* 今日航班 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class TodayFlightServiceImpl implements TodayFlightService {
@Resource
private TodayFlightMapper todayFlightMapper;
@Override
public List<Object> todayFlightData() {
List<Object> flightVO = new ArrayList<>();//所有航班集合
List<TodayFlightDO> todayFlightDOS = todayFlightMapper.todayFlightData();
for (int i = 0; i < todayFlightDOS.size(); i++) {
TodayFlightDO todayFlightDO = todayFlightDOS.get(i);
if (todayFlightDO.getFlightId().equals("1")){ //石南航班信息
FlightDataDO flightDataDO = new FlightDataDO();
flightDataDO.setName("石南航班信息");
List<TodayFlightDO> todayFlightDOS1 = todayFlightMapper.byRouteId("2"); //石城至南日
List<TodayFlightDO> todayFlightDOS2 = todayFlightMapper.byRouteId("1");//南日至石城
for (int j = 0; j < todayFlightDOS1.size(); j++) {
Datas datas = new Datas();
datas.setClasses(todayFlightDOS1.get(j).getClasses());
datas.setTimeOne(todayFlightDOS1.get(j).getStartTime());
if (j <= todayFlightDOS2.size() - 1){
datas.setTimeTwo(todayFlightDOS2.get(j).getStartTime());
}
flightDataDO.getDatas().add(datas);
}
flightVO.add(flightDataDO);
}
if (todayFlightDO.getFlightId().equals("2")){ //筶杯航班信息
FlightDataDO flightDataDO = new FlightDataDO();
flightDataDO.setName("筶杯航班信息");
List<TodayFlightDO> todayFlightDOS1 = todayFlightMapper.byRouteId("3"); //筶杯出岛
List<TodayFlightDO> todayFlightDOS2 = todayFlightMapper.byRouteId("4");//鹅头进岛
for (int j = 0; j < todayFlightDOS1.size(); j++) {
Datas datas = new Datas();
datas.setClasses(todayFlightDOS1.get(j).getClasses());
datas.setTimeOne(todayFlightDOS1.get(j).getStartTime());
if (j <= todayFlightDOS2.size() - 1){
datas.setTimeTwo(todayFlightDOS2.get(j).getStartTime());
}
flightDataDO.getDatas().add(datas);
}
flightVO.add(flightDataDO);
}
if (todayFlightDO.getFlightId().equals("3")){ //黄瓜航班信息
FlightDataDO flightDataDO = new FlightDataDO();
flightDataDO.setName("黄瓜航班信息");
List<TodayFlightDO> todayFlightDOS1 = todayFlightMapper.byRouteId("5"); //黄瓜出岛
List<TodayFlightDO> todayFlightDOS2 = todayFlightMapper.byRouteId("6");//淇泸进岛
for (int j = 0; j < todayFlightDOS1.size(); j++) {
Datas datas = new Datas();
datas.setClasses(todayFlightDOS1.get(j).getClasses());
datas.setTimeOne(todayFlightDOS1.get(j).getStartTime());
if (j <= todayFlightDOS2.size() - 1){
datas.setTimeTwo(todayFlightDOS2.get(j).getStartTime());
}
flightDataDO.getDatas().add(datas);
}
flightVO.add(flightDataDO);
}
if (todayFlightDO.getFlightId().equals("4")){ //小日
FlightDataDO flightDataDO = new FlightDataDO();
flightDataDO.setName("小日航班信息");
List<TodayFlightDO> todayFlightDOS1 = todayFlightMapper.byRouteId("7"); // 小日出岛
List<TodayFlightDO> todayFlightDOS2 = todayFlightMapper.byRouteId("8");//坑口进岛
for (int j = 0; j < todayFlightDOS1.size(); j++) {
Datas datas = new Datas();
datas.setClasses(todayFlightDOS1.get(j).getClasses());
datas.setTimeOne(todayFlightDOS1.get(j).getStartTime());
if (j <= todayFlightDOS2.size() - 1){
datas.setTimeTwo(todayFlightDOS2.get(j).getStartTime());
}
flightDataDO.getDatas().add(datas);
}
flightVO.add(flightDataDO);
}
if (todayFlightDO.getFlightId().equals("5")){ //罗盘航班信息
FlightDataDO flightDataDO = new FlightDataDO();
flightDataDO.setName("罗盘航班信息");
List<TodayFlightDO> todayFlightDOS1 = todayFlightMapper.byRouteId("11"); //罗盘出岛
List<TodayFlightDO> todayFlightDOS2 = todayFlightMapper.byRouteId("12");//东岱进岛
for (int j = 0; j < todayFlightDOS1.size(); j++) {
Datas datas = new Datas();
datas.setClasses(todayFlightDOS1.get(j).getClasses());
datas.setTimeOne(todayFlightDOS1.get(j).getStartTime());
if (j <= todayFlightDOS2.size() - 1){
datas.setTimeTwo(todayFlightDOS2.get(j).getStartTime());
}
flightDataDO.getDatas().add(datas);
}
flightVO.add(flightDataDO);
}
if (todayFlightDO.getFlightId().equals("6")){ //鳌屿航班信息
FlightDataDO flightDataDO = new FlightDataDO();
flightDataDO.setName("鳌屿航班信息");
List<TodayFlightDO> todayFlightDOS1 = todayFlightMapper.byRouteId("9"); //鳌屿出岛
List<TodayFlightDO> todayFlightDOS2 = todayFlightMapper.byRouteId("10");//东岱进岛
for (int j = 0; j < todayFlightDOS1.size(); j++) {
Datas datas = new Datas();
datas.setClasses(todayFlightDOS1.get(j).getClasses());
datas.setTimeOne(todayFlightDOS1.get(j).getStartTime());
if (j <= todayFlightDOS2.size() - 1){
datas.setTimeTwo(todayFlightDOS2.get(j).getStartTime());
}
flightDataDO.getDatas().add(datas);
}
flightVO.add(flightDataDO);
}
}
return flightVO;
}
}

View File

@ -13,4 +13,4 @@ docker rmi ${app_name}:${app_version}
echo '----build image----'
docker buildx build -f Dockerfile -t ${app_name}:${app_version} .
echo '----start container----'
docker run -d -p 48090:48090 --name ${app_name} --memory 600m ${app_name}:${app_version}
docker run -d -p 48090:48090 --name ${app_name} --memory 800m ${app_name}:${app_version}

View File

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.parking.controller.admin.black;
import cn.iocoder.yudao.module.parking.util.BlueCarRequestUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -42,6 +44,9 @@ public class BlackController {
@Resource
private BlackService blackService;
@Resource
private BlueCarRequestUtil blueCarRequestUtil;
/**
* 删除黑名单
@ -61,26 +66,7 @@ public class BlackController {
datasList.add(datas);
blackVO.setDatas(datasList);
//调用蓝卡接口
try {
String url = "http://蓝卡云 ip:端口/bcopenapi/out/delBlack";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// 请求方式
con.setRequestMethod("GET");
// 获取响应
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
CommonResult<String> stringCommonResult = blueCarRequestUtil.doBlueCarPost(blackVO, "bcopenapi/out/delBlack");
return success(true);
}
@ -101,26 +87,7 @@ public class BlackController {
datasList.add(datas);
blackVO.setDatas(datasList);
//调用蓝卡接口
try {
String url = " http://蓝卡云 ip:端口/bcopenapi/out/queryBlack";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// 请求方式
con.setRequestMethod("GET");
// 获取响应
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
blueCarRequestUtil.doBlueCarPost(blackVO,"bcopenapi/out/queryBlack");
return success(true);
}
@ -130,39 +97,19 @@ public class BlackController {
* @param
* @return
*/
@PostMapping("/synBlack")
public CommonResult<Boolean> synBlack(BlackDO blackDO) {
public CommonResult<Boolean> synBlack(BlackSaveReqVO blackSaveReqVO) {
//设置请求参数
BlackVO blackVO = new BlackVO();
blackVO.setParkNumber(blackDO.getParkNumber());
blackVO.setSource(blackDO.getSource());
blackVO.setParkNumber(blackSaveReqVO.getParkNumber());
blackVO.setSource(blackSaveReqVO.getSource());
List<Datas> datasList = new ArrayList<>();
Datas datas = new Datas();
datas.setPlate(blackDO.getPlate());
datas.setMemo(blackDO.getMemo());
datas.setPlate(blackSaveReqVO.getPlate());
datas.setMemo(blackSaveReqVO.getMemo());
datasList.add(datas);
blackVO.setDatas(datasList);
//调用蓝卡接口
try {
String url = "http://蓝卡云 ip:端口/bcopenapi/out/synBlack";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// 请求方式
con.setRequestMethod("GET");
// 获取响应
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
blueCarRequestUtil.doBlueCarPost(blackVO,"bcopenapi/out/synBlack");
return success(true);
}
@ -172,6 +119,7 @@ public class BlackController {
@Operation(summary = "创建黑名单")
@PreAuthorize("@ss.hasPermission('parking:black:create')")
public CommonResult<Long> createBlack(@Valid @RequestBody BlackSaveReqVO createReqVO) {
CommonResult<Boolean> booleanCommonResult = synBlack(createReqVO);
return success(blackService.createBlack(createReqVO));
}

View File

@ -52,11 +52,16 @@ public class WhiteController {
}
/**
* 新增白名单
* @param createReqVO
* @return
*/
@PostMapping("/create")
@Operation(summary = "创建白名单管理")
@PreAuthorize("@ss.hasPermission('parking:white:create')")
public CommonResult<Integer> createWhite(@Valid @RequestBody WhiteSaveReqVO createReqVO) {
return success(whiteService.createWhite(createReqVO));
public CommonResult<Integer> createWhite(@Valid @RequestBody WhiteAddVO whiteAddVO) {
return success(whiteService.createWhite(whiteAddVO));
}
@PutMapping("/update")

View File

@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.parking.controller.admin.white.vo;
import lombok.Data;
@Data
public class WhiteAddVO {
private Integer fixedId;
private String parkNumber;
private Integer size;
private String plate;
private String chargeType;
private String name;
private String certificate;
private String address;
private String phone;
private String plateColor;
private String start;
private String end;
private String dept;
private String carType;
private String memo;
private Integer areaId;
private String areaStart;
private String areaEnd;
private String source;
}

View File

@ -22,7 +22,7 @@ public interface WhiteService {
* @param createReqVO 创建信息
* @return 编号
*/
Integer createWhite(@Valid WhiteSaveReqVO createReqVO);
Integer createWhite(@Valid WhiteAddVO whiteAddVO);
/**
* 更新白名单管理

View File

@ -6,9 +6,12 @@ import cn.iocoder.yudao.module.parking.dal.dataobject.userinfo.UserInfoDO;
import cn.iocoder.yudao.module.parking.dal.mysql.areasandvalidity.AreasAndValidityMapper;
import cn.iocoder.yudao.module.parking.dal.mysql.carinfo.CarInfoMapper;
import cn.iocoder.yudao.module.parking.dal.mysql.userinfo.UserInfoMapper;
import cn.iocoder.yudao.module.parking.util.BlueCarRequestUtil;
import cn.iocoder.yudao.module.parking.util.BlueCardResult;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
@ -49,15 +52,74 @@ public class WhiteServiceImpl implements WhiteService {
@Resource
private AreasAndValidityMapper areasAndValidityMapper;
@Resource
private BlueCarRequestUtil blueCarRequestUtil;
@Override
public Integer createWhite(WhiteSaveReqVO createReqVO) {
public Integer createWhite(WhiteAddVO whiteAddVO) {
// 插入
WhiteDO white = BeanUtils.toBean(createReqVO, WhiteDO.class);
WhiteDO white = BeanUtils.toBean(whiteAddVO, WhiteDO.class);
whiteMapper.insert(white);
WhiteDO whiteDO = new WhiteDO();
whiteDO.setFixedId(whiteAddVO.getFixedId());
whiteDO.setParkNumber(whiteAddVO.getParkNumber());
whiteDO.setPlate(whiteAddVO.getPlate());
whiteDO.setChargeType(whiteAddVO.getChargeType());
whiteDO.setCertificate(whiteAddVO.getCertificate());
whiteDO.setStart(whiteAddVO.getStart());
whiteDO.setEnd(whiteAddVO.getEnd());
whiteDO.setDept(whiteAddVO.getDept());
whiteDO.setMemo(whiteAddVO.getMemo());
whiteDO.setSource(whiteAddVO.getSource());
WhiteDO whiteDO1 = whiteMapper.selectOne("fixed_id", whiteAddVO.getFixedId());
if (whiteDO1 != null){
whiteMapper.updateById(whiteDO);
}else {
whiteMapper.insert(whiteDO);
}
UserInfoDO userInfoDO = new UserInfoDO();
userInfoDO.setIdCard(whiteAddVO.getCertificate());
userInfoDO.setUserName(whiteAddVO.getName());
userInfoDO.setPhone(whiteAddVO.getPhone());
userInfoDO.setAddress(whiteAddVO.getAddress());
UserInfoDO userInfoDOOne = userInfoMapper.selectOne("id_card", whiteAddVO.getCertificate());
if (userInfoDOOne == null){
userInfoMapper.insert(userInfoDO);
}else {
userInfoMapper.updateById(userInfoDO);
}
CarInfoDO carInfoDO = new CarInfoDO();
carInfoDO.setPlate(whiteAddVO.getPlate());
carInfoDO.setPlateColor(whiteAddVO.getPlateColor());
// carInfoDO.setTicketCode(whiteDatasDO.get)
carInfoDO.setCarType(whiteAddVO.getCarType());
// carInfoDO.setConfidence(whiteDatasDO.ge)
CarInfoDO carInfoDO1 = carInfoMapper.selectOne("plate", whiteAddVO.getPlate());
if (carInfoDO1 == null){
carInfoMapper.insert(carInfoDO);
}else {
carInfoDO.setId(carInfoDO1.getId());
carInfoMapper.updateById(carInfoDO);
}
AreasAndValidityDO areasAndValidityDOs = new AreasAndValidityDO();
areasAndValidityDOs.setAreaId(whiteAddVO.getAreaId());
areasAndValidityDOs.setStart(whiteAddVO.getStart());
areasAndValidityDOs.setEnd(whiteAddVO.getEnd());
areasAndValidityDOs.setFixedId(whiteAddVO.getFixedId());
areasAndValidityMapper.insert(areasAndValidityDOs);
// 返回
blueCarRequestUtil.doBlueCarPost(whiteAddVO,"/bcopenapi/out/synWhite");
return white.getFixedId();
}
@Override
public void updateWhite(WhiteSaveReqVO updateReqVO) {
// 校验存在
@ -86,27 +148,7 @@ public class WhiteServiceImpl implements WhiteService {
areasAndValidityDOS.add(areasAndValidityDO);
whiteDeleteDO.setAreasAndValidity(areasAndValidityDOS);
//调用蓝卡接口白名单删除
try {
String url = "http://蓝卡云 ip:端口/bcopenapi/out/delWhite";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// 请求方式
con.setRequestMethod("GET");
// 获取响应
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
blueCarRequestUtil.doBlueCarPost(whiteDeleteDO,"bcopenapi/out/delWhite");
}
private void validateWhiteExists(Integer id) {

View File

@ -12,5 +12,8 @@ public interface ErrorCodeConstants {
ErrorCode INFORMATION_NOT_EXISTS = new ErrorCode(1_005_002_001, "旅客信息不存在");
ErrorCode ALL_NOT_EXISTS = new ErrorCode(1_005_003_001, "设备登录日志不存在");
ErrorCode UM_NOT_EXISTS = new ErrorCode(1_005_004_001, "上行报文不存在");
ErrorCode FLIGHT_NOT_EXISTS = new ErrorCode(1_005_005_001, "航班不存在");
ErrorCode SHIP_ROUTE_NOT_EXISTS = new ErrorCode(1_005_006_001, "航线不存在");
ErrorCode TODAY_FLIGHT_NOT_EXISTS = new ErrorCode(1_005_007_001, "今日航班不存在");
}

View File

@ -13,4 +13,4 @@ docker rmi ${app_name}:${app_version}
echo '----build image----'
docker buildx build -f Dockerfile -t ${app_name}:${app_version} .
echo '----start container----'
docker run -d -p 48088:48088 --name ${app_name} --memory 600m ${app_name}:${app_version}
docker run -d -p 48088:48088 --name ${app_name} --memory 800m ${app_name}:${app_version}

View File

@ -0,0 +1,109 @@
package cn.iocoder.yudao.module.ticket.controller.admin.flight;
import cn.iocoder.yudao.module.ticket.dal.dataobject.todayflight.TodayFlightDO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.ticket.controller.admin.flight.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.flight.FlightDO;
import cn.iocoder.yudao.module.ticket.service.flight.FlightService;
@Tag(name = "管理后台 - 航班")
@RestController
@RequestMapping("/ticket/flight")
@Validated
public class FlightController {
@Resource
private FlightService flightService;
/**
* 下拉框数据
* @return
*/
@GetMapping("/flightNameOption")
public CommonResult<List<FlightDO>> flightNameOption(){
return success(flightService.flightNameOption());
}
@PostMapping("/create")
@Operation(summary = "创建航班")
@PreAuthorize("@ss.hasPermission('ticket:flight:create')")
public CommonResult<Long> createFlight(@Valid @RequestBody FlightSaveReqVO createReqVO) {
return success(flightService.createFlight(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新航班")
@PreAuthorize("@ss.hasPermission('ticket:flight:update')")
public CommonResult<Boolean> updateFlight(@Valid @RequestBody FlightSaveReqVO updateReqVO) {
flightService.updateFlight(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除航班")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('ticket:flight:delete')")
public CommonResult<Boolean> deleteFlight(@RequestParam("id") Long id) {
flightService.deleteFlight(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得航班")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('ticket:flight:query')")
public CommonResult<FlightRespVO> getFlight(@RequestParam("id") Long id) {
FlightDO flight = flightService.getFlight(id);
return success(BeanUtils.toBean(flight, FlightRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得航班分页")
@PreAuthorize("@ss.hasPermission('ticket:flight:query')")
public CommonResult<PageResult<FlightRespVO>> getFlightPage(@Valid FlightPageReqVO pageReqVO) {
PageResult<FlightDO> pageResult = flightService.getFlightPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, FlightRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出航班 Excel")
@PreAuthorize("@ss.hasPermission('ticket:flight:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportFlightExcel(@Valid FlightPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<FlightDO> list = flightService.getFlightPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "航班.xls", "数据", FlightRespVO.class,
BeanUtils.toBean(list, FlightRespVO.class));
}
}

View File

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.ticket.controller.admin.flight.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 航班分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class FlightPageReqVO extends PageParam {
@Schema(description = "航班名称", example = "芋艿")
private String flightName;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.ticket.controller.admin.flight.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 航班 Response VO")
@Data
@ExcelIgnoreUnannotated
public class FlightRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26858")
@ExcelProperty("id")
private Long id;
@Schema(description = "航班名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("航班名称")
private String flightName;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.ticket.controller.admin.flight.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 航班新增/修改 Request VO")
@Data
public class FlightSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26858")
private Long id;
@Schema(description = "航班名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@NotEmpty(message = "航班名称不能为空")
private String flightName;
}

View File

@ -0,0 +1,114 @@
package cn.iocoder.yudao.module.ticket.controller.admin.shiproute;
import cn.iocoder.yudao.module.ticket.dal.dataobject.flight.FlightDO;
import cn.iocoder.yudao.module.ticket.dal.mysql.flight.FlightMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.ticket.controller.admin.shiproute.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.shiproute.ShipRouteDO;
import cn.iocoder.yudao.module.ticket.service.shiproute.ShipRouteService;
@Tag(name = "管理后台 - 航线")
@RestController
@RequestMapping("/ticket/ship-route")
@Validated
public class ShipRouteController {
@Resource
private ShipRouteService shipRouteService;
@Resource
private FlightMapper flightMapper;
/**
* 下拉框数据
* @return
*/
@GetMapping("/routeNameOption")
public CommonResult<List<ShipRouteDO>> routeNameOption(){
return success(shipRouteService.routeNameOption());
}
@PostMapping("/create")
@Operation(summary = "创建航线")
@PreAuthorize("@ss.hasPermission('ticket:ship-route:create')")
public CommonResult<Long> createShipRoute(@Valid @RequestBody ShipRouteSaveReqVO createReqVO) {
return success(shipRouteService.createShipRoute(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新航线")
@PreAuthorize("@ss.hasPermission('ticket:ship-route:update')")
public CommonResult<Boolean> updateShipRoute(@Valid @RequestBody ShipRouteSaveReqVO updateReqVO) {
shipRouteService.updateShipRoute(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除航线")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('ticket:ship-route:delete')")
public CommonResult<Boolean> deleteShipRoute(@RequestParam("id") Long id) {
shipRouteService.deleteShipRoute(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得航线")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('ticket:ship-route:query')")
public CommonResult<ShipRouteRespVO> getShipRoute(@RequestParam("id") Long id) {
ShipRouteDO shipRoute = shipRouteService.getShipRoute(id);
return success(BeanUtils.toBean(shipRoute, ShipRouteRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得航线分页")
@PreAuthorize("@ss.hasPermission('ticket:ship-route:query')")
public CommonResult<PageResult<ShipRouteRespVO>> getShipRoutePage(@Valid ShipRoutePageReqVO pageReqVO) {
PageResult<ShipRouteDO> pageResult = shipRouteService.getShipRoutePage(pageReqVO);
for (int i = 0; i < pageResult.getList().size(); i++) {
ShipRouteDO shipRouteDO = pageResult.getList().get(i);
FlightDO flightDO = flightMapper.selectOne("id", shipRouteDO.getFlightId());
shipRouteDO.setFlightName(flightDO.getFlightName());
}
return success(BeanUtils.toBean(pageResult, ShipRouteRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出航线 Excel")
@PreAuthorize("@ss.hasPermission('ticket:ship-route:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportShipRouteExcel(@Valid ShipRoutePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ShipRouteDO> list = shipRouteService.getShipRoutePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "航线.xls", "数据", ShipRouteRespVO.class,
BeanUtils.toBean(list, ShipRouteRespVO.class));
}
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.ticket.controller.admin.shiproute.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 航线分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ShipRoutePageReqVO extends PageParam {
@Schema(description = "航班", example = "4836")
private Long flightId;
@Schema(description = "航线名称", example = "王五")
private String routeName;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.ticket.controller.admin.shiproute.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 航线 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ShipRouteRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19757")
@ExcelProperty("id")
private Long id;
@Schema(description = "航班", example = "4836")
@ExcelProperty("航班")
private Long flightId;
@Schema(description = "航线名称", example = "王五")
@ExcelProperty("航线名称")
private String routeName;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@ExcelProperty("航班")
private String flightName;
}

View File

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.ticket.controller.admin.shiproute.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 航线新增/修改 Request VO")
@Data
public class ShipRouteSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19757")
private Long id;
@Schema(description = "航班", example = "4836")
private Long flightId;
@Schema(description = "航线名称", example = "王五")
private String routeName;
}

View File

@ -0,0 +1,107 @@
package cn.iocoder.yudao.module.ticket.controller.admin.todayflight;
import cn.iocoder.yudao.module.ticket.dal.dataobject.shiproute.ShipRouteDO;
import cn.iocoder.yudao.module.ticket.dal.mysql.shiproute.ShipRouteMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.ticket.controller.admin.todayflight.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.todayflight.TodayFlightDO;
import cn.iocoder.yudao.module.ticket.service.todayflight.TodayFlightService;
@Tag(name = "管理后台 - 今日航班")
@RestController
@RequestMapping("/ticket/today-flight")
@Validated
public class TodayFlightController {
@Resource
private TodayFlightService todayFlightService;
@Resource
private ShipRouteMapper shipRouteMapper;
@PostMapping("/create")
@Operation(summary = "创建今日航班")
@PreAuthorize("@ss.hasPermission('ticket:today-flight:create')")
public CommonResult<Long> createTodayFlight(@Valid @RequestBody TodayFlightSaveReqVO createReqVO) {
return success(todayFlightService.createTodayFlight(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新今日航班")
@PreAuthorize("@ss.hasPermission('ticket:today-flight:update')")
public CommonResult<Boolean> updateTodayFlight(@Valid @RequestBody TodayFlightSaveReqVO updateReqVO) {
todayFlightService.updateTodayFlight(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除今日航班")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('ticket:today-flight:delete')")
public CommonResult<Boolean> deleteTodayFlight(@RequestParam("id") Long id) {
todayFlightService.deleteTodayFlight(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得今日航班")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('ticket:today-flight:query')")
public CommonResult<TodayFlightRespVO> getTodayFlight(@RequestParam("id") Long id) {
TodayFlightDO todayFlight = todayFlightService.getTodayFlight(id);
return success(BeanUtils.toBean(todayFlight, TodayFlightRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得今日航班分页")
@PreAuthorize("@ss.hasPermission('ticket:today-flight:query')")
public CommonResult<PageResult<TodayFlightRespVO>> getTodayFlightPage(@Valid TodayFlightPageReqVO pageReqVO) {
PageResult<TodayFlightDO> pageResult = todayFlightService.getTodayFlightPage(pageReqVO);
for (int i = 0; i < pageResult.getList().size(); i++) {
TodayFlightDO todayFlightDO = pageResult.getList().get(i);
ShipRouteDO shipRouteDO = shipRouteMapper.selectOne("id", todayFlightDO.getShipRouteId());
todayFlightDO.setShipRouteName(shipRouteDO.getRouteName());
}
return success(BeanUtils.toBean(pageResult, TodayFlightRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出今日航班 Excel")
@PreAuthorize("@ss.hasPermission('ticket:today-flight:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportTodayFlightExcel(@Valid TodayFlightPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<TodayFlightDO> list = todayFlightService.getTodayFlightPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "今日航班.xls", "数据", TodayFlightRespVO.class,
BeanUtils.toBean(list, TodayFlightRespVO.class));
}
}

View File

@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.ticket.controller.admin.todayflight.vo;
import lombok.*;
import java.time.LocalTime;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 今日航班分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TodayFlightPageReqVO extends PageParam {
@Schema(description = "航线", example = "19067")
private Long shipRouteId;
@Schema(description = "班次")
private String classes;
@Schema(description = "开始时间")
private String startTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,42 @@
package cn.iocoder.yudao.module.ticket.controller.admin.todayflight.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalTime;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 今日航班 Response VO")
@Data
@ExcelIgnoreUnannotated
public class TodayFlightRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12418")
@ExcelProperty("id")
private Long id;
@Schema(description = "航线", example = "19067")
@ExcelProperty("航线")
private Long shipRouteId;
@Schema(description = "班次")
@ExcelProperty("班次")
private String classes;
@Schema(description = "开始时间")
@ExcelProperty("开始时间")
private String startTime;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "航线")
@ExcelProperty("航线")
private String shipRouteName;
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.ticket.controller.admin.todayflight.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalTime;
import java.util.*;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 今日航班新增/修改 Request VO")
@Data
public class TodayFlightSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12418")
private Long id;
@Schema(description = "航线", example = "19067")
private Long shipRouteId;
@Schema(description = "班次")
private String classes;
@Schema(description = "开始时间")
private String startTime;
}

View File

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.ticket.dal.dataobject.flight;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 航班 DO
*
* @author 管理员
*/
@TableName("flight")
@KeySequence("flight_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FlightDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 航班名称
*/
private String flightName;
}

View File

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.ticket.dal.dataobject.shiproute;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 航线 DO
*
* @author 管理员
*/
@TableName("ship_route")
@KeySequence("ship_route_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ShipRouteDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 航班
*/
private Long flightId;
/**
* 航线名称
*/
private String routeName;
@TableField(exist = false)
private String flightName;
}

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.ticket.dal.dataobject.todayflight;
import lombok.*;
import java.sql.Time;
import java.time.LocalTime;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 今日航班 DO
*
* @author 管理员
*/
@TableName("today_flight")
@KeySequence("today_flight_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TodayFlightDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 航线
*/
private Long shipRouteId;
/**
* 班次
*/
private String classes;
/**
* 开始时间
*/
private String startTime;
@TableField(exist = false)
private String shipRouteName;
@TableField(exist = false)
private String routeName;
@TableField(exist = false)
private String flightName;
@TableField
private String flightId;
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.ticket.dal.mysql.flight;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.ticket.dal.dataobject.flight.FlightDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.ticket.controller.admin.flight.vo.*;
/**
* 航班 Mapper
*
* @author 管理员
*/
@Mapper
public interface FlightMapper extends BaseMapperX<FlightDO> {
default PageResult<FlightDO> selectPage(FlightPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<FlightDO>()
.likeIfPresent(FlightDO::getFlightName, reqVO.getFlightName())
.betweenIfPresent(FlightDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(FlightDO::getId));
}
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.ticket.dal.mysql.shiproute;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.ticket.dal.dataobject.shiproute.ShipRouteDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.ticket.controller.admin.shiproute.vo.*;
/**
* 航线 Mapper
*
* @author 管理员
*/
@Mapper
public interface ShipRouteMapper extends BaseMapperX<ShipRouteDO> {
default PageResult<ShipRouteDO> selectPage(ShipRoutePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ShipRouteDO>()
.eqIfPresent(ShipRouteDO::getFlightId, reqVO.getFlightId())
.likeIfPresent(ShipRouteDO::getRouteName, reqVO.getRouteName())
.betweenIfPresent(ShipRouteDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ShipRouteDO::getId));
}
}

View File

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.ticket.dal.mysql.todayflight;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.ticket.dal.dataobject.todayflight.TodayFlightDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.ticket.controller.admin.todayflight.vo.*;
import org.apache.ibatis.annotations.Select;
/**
* 今日航班 Mapper
*
* @author 管理员
*/
@Mapper
public interface TodayFlightMapper extends BaseMapperX<TodayFlightDO> {
default PageResult<TodayFlightDO> selectPage(TodayFlightPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<TodayFlightDO>()
.eqIfPresent(TodayFlightDO::getShipRouteId, reqVO.getShipRouteId())
.eqIfPresent(TodayFlightDO::getClasses, reqVO.getClasses())
// .betweenIfPresent(TodayFlightDO::getFlightDate, reqVO.getFlightDate())
// .betweenIfPresent(TodayFlightDO::getStartTime, reqVO.getStartTime())
.betweenIfPresent(TodayFlightDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(TodayFlightDO::getId));
}
}

View File

@ -0,0 +1,57 @@
package cn.iocoder.yudao.module.ticket.service.flight;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.ticket.controller.admin.flight.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.flight.FlightDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 航班 Service 接口
*
* @author 管理员
*/
public interface FlightService {
/**
* 创建航班
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createFlight(@Valid FlightSaveReqVO createReqVO);
/**
* 更新航班
*
* @param updateReqVO 更新信息
*/
void updateFlight(@Valid FlightSaveReqVO updateReqVO);
/**
* 删除航班
*
* @param id 编号
*/
void deleteFlight(Long id);
/**
* 获得航班
*
* @param id 编号
* @return 航班
*/
FlightDO getFlight(Long id);
/**
* 获得航班分页
*
* @param pageReqVO 分页查询
* @return 航班分页
*/
PageResult<FlightDO> getFlightPage(FlightPageReqVO pageReqVO);
List<FlightDO> flightNameOption();
}

View File

@ -0,0 +1,79 @@
package cn.iocoder.yudao.module.ticket.service.flight;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.ticket.controller.admin.flight.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.flight.FlightDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.ticket.dal.mysql.flight.FlightMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.ticket.enums.ErrorCodeConstants.*;
/**
* 航班 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class FlightServiceImpl implements FlightService {
@Resource
private FlightMapper flightMapper;
@Override
public Long createFlight(FlightSaveReqVO createReqVO) {
// 插入
FlightDO flight = BeanUtils.toBean(createReqVO, FlightDO.class);
flightMapper.insert(flight);
// 返回
return flight.getId();
}
@Override
public void updateFlight(FlightSaveReqVO updateReqVO) {
// 校验存在
validateFlightExists(updateReqVO.getId());
// 更新
FlightDO updateObj = BeanUtils.toBean(updateReqVO, FlightDO.class);
flightMapper.updateById(updateObj);
}
@Override
public void deleteFlight(Long id) {
// 校验存在
validateFlightExists(id);
// 删除
flightMapper.deleteById(id);
}
private void validateFlightExists(Long id) {
if (flightMapper.selectById(id) == null) {
throw exception(FLIGHT_NOT_EXISTS);
}
}
@Override
public FlightDO getFlight(Long id) {
return flightMapper.selectById(id);
}
@Override
public PageResult<FlightDO> getFlightPage(FlightPageReqVO pageReqVO) {
return flightMapper.selectPage(pageReqVO);
}
@Override
public List<FlightDO> flightNameOption() {
return flightMapper.selectList();
}
}

View File

@ -0,0 +1,60 @@
package cn.iocoder.yudao.module.ticket.service.shiproute;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.ticket.controller.admin.shiproute.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.shiproute.ShipRouteDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 航线 Service 接口
*
* @author 管理员
*/
public interface ShipRouteService {
/**
* 创建航线
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createShipRoute(@Valid ShipRouteSaveReqVO createReqVO);
/**
* 更新航线
*
* @param updateReqVO 更新信息
*/
void updateShipRoute(@Valid ShipRouteSaveReqVO updateReqVO);
/**
* 删除航线
*
* @param id 编号
*/
void deleteShipRoute(Long id);
/**
* 获得航线
*
* @param id 编号
* @return 航线
*/
ShipRouteDO getShipRoute(Long id);
/**
* 获得航线分页
*
* @param pageReqVO 分页查询
* @return 航线分页
*/
PageResult<ShipRouteDO> getShipRoutePage(ShipRoutePageReqVO pageReqVO);
/**
* 下拉框数据
*/
List<ShipRouteDO> routeNameOption();
}

View File

@ -0,0 +1,79 @@
package cn.iocoder.yudao.module.ticket.service.shiproute;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.ticket.controller.admin.shiproute.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.shiproute.ShipRouteDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.ticket.dal.mysql.shiproute.ShipRouteMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.ticket.enums.ErrorCodeConstants.*;
/**
* 航线 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class ShipRouteServiceImpl implements ShipRouteService {
@Resource
private ShipRouteMapper shipRouteMapper;
@Override
public Long createShipRoute(ShipRouteSaveReqVO createReqVO) {
// 插入
ShipRouteDO shipRoute = BeanUtils.toBean(createReqVO, ShipRouteDO.class);
shipRouteMapper.insert(shipRoute);
// 返回
return shipRoute.getId();
}
@Override
public void updateShipRoute(ShipRouteSaveReqVO updateReqVO) {
// 校验存在
validateShipRouteExists(updateReqVO.getId());
// 更新
ShipRouteDO updateObj = BeanUtils.toBean(updateReqVO, ShipRouteDO.class);
shipRouteMapper.updateById(updateObj);
}
@Override
public void deleteShipRoute(Long id) {
// 校验存在
validateShipRouteExists(id);
// 删除
shipRouteMapper.deleteById(id);
}
private void validateShipRouteExists(Long id) {
if (shipRouteMapper.selectById(id) == null) {
throw exception(SHIP_ROUTE_NOT_EXISTS);
}
}
@Override
public ShipRouteDO getShipRoute(Long id) {
return shipRouteMapper.selectById(id);
}
@Override
public PageResult<ShipRouteDO> getShipRoutePage(ShipRoutePageReqVO pageReqVO) {
return shipRouteMapper.selectPage(pageReqVO);
}
@Override
public List<ShipRouteDO> routeNameOption() {
return shipRouteMapper.selectList();
}
}

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.ticket.service.todayflight;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.ticket.controller.admin.todayflight.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.todayflight.TodayFlightDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 今日航班 Service 接口
*
* @author 管理员
*/
public interface TodayFlightService {
/**
* 创建今日航班
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createTodayFlight(@Valid TodayFlightSaveReqVO createReqVO);
/**
* 更新今日航班
*
* @param updateReqVO 更新信息
*/
void updateTodayFlight(@Valid TodayFlightSaveReqVO updateReqVO);
/**
* 删除今日航班
*
* @param id 编号
*/
void deleteTodayFlight(Long id);
/**
* 获得今日航班
*
* @param id 编号
* @return 今日航班
*/
TodayFlightDO getTodayFlight(Long id);
/**
* 获得今日航班分页
*
* @param pageReqVO 分页查询
* @return 今日航班分页
*/
PageResult<TodayFlightDO> getTodayFlightPage(TodayFlightPageReqVO pageReqVO);
}

View File

@ -0,0 +1,77 @@
package cn.iocoder.yudao.module.ticket.service.todayflight;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.ticket.controller.admin.todayflight.vo.*;
import cn.iocoder.yudao.module.ticket.dal.dataobject.todayflight.TodayFlightDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.ticket.dal.mysql.todayflight.TodayFlightMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.ticket.enums.ErrorCodeConstants.*;
/**
* 今日航班 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class TodayFlightServiceImpl implements TodayFlightService {
@Resource
private TodayFlightMapper todayFlightMapper;
@Override
public Long createTodayFlight(TodayFlightSaveReqVO createReqVO) {
// 插入
TodayFlightDO todayFlight = BeanUtils.toBean(createReqVO, TodayFlightDO.class);
todayFlightMapper.insert(todayFlight);
// 返回
return todayFlight.getId();
}
@Override
public void updateTodayFlight(TodayFlightSaveReqVO updateReqVO) {
// 校验存在
validateTodayFlightExists(updateReqVO.getId());
// 更新
TodayFlightDO updateObj = BeanUtils.toBean(updateReqVO, TodayFlightDO.class);
todayFlightMapper.updateById(updateObj);
}
@Override
public void deleteTodayFlight(Long id) {
// 校验存在
validateTodayFlightExists(id);
// 删除
todayFlightMapper.deleteById(id);
}
private void validateTodayFlightExists(Long id) {
if (todayFlightMapper.selectById(id) == null) {
throw exception(TODAY_FLIGHT_NOT_EXISTS);
}
}
@Override
public TodayFlightDO getTodayFlight(Long id) {
return todayFlightMapper.selectById(id);
}
@Override
public PageResult<TodayFlightDO> getTodayFlightPage(TodayFlightPageReqVO pageReqVO) {
return todayFlightMapper.selectPage(pageReqVO);
}
}

27
pom.xml
View File

@ -128,18 +128,29 @@
</plugins>
</build>
<!-- 使用 huawei / aliyun 的 Maven 源,提升下载速度 -->
<repositories>
<repository>
<id>huaweicloud</id>
<name>huawei</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>
<repository>
<id>aliyunmaven</id>
<name>aliyun</name>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>

View File

@ -1,68 +1,82 @@
version: '3'
version: '3.8'
services:
yudao-gateway:
image: yudao-gateway
image: 120.46.37.243:8080/lundu/yudao-gateway:1.0.0
container_name: yudao-gateway
networks:
- ludu_network
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host # 以主机网络环境运行
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48080" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
ports:
- "48083:48080"
yudao-system:
image: yudao-module-system-biz
image: 120.46.37.243:8080/lundu/yudao-module-system:1.0.0
container_name: yudao-system
networks:
- ludu_network
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48081" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
start_period: 120s
restart: always
network_mode: host
yudao-infra:
image: yudao-module-infra-biz
container_name: yudao-infra
depends_on:
yudao-gateway:
condition: service_healthy
ludu-job-admin:
image: 120.46.37.243:8080/lundu/ludu-job-admin:1.0.0
container_name: ludu-job-admin
networks:
- ludu_network
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
volumes:
- /docker/yudao-cloud/logs:/root/logs/
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:9090 || exit 0"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
restart: always
ports:
- "48084:9090"
depends_on:
yudao-gateway:
condition: service_healthy
yudao-infra:
image: 120.46.37.243:8080/lundu/yudao-module-infra:1.0.0
container_name: yudao-infra
networks:
- ludu_network
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48082" ]
interval: 30s
@ -72,91 +86,75 @@ services:
depends_on:
yudao-system:
condition: service_healthy
yudao-report:
image: yudao-module-report-biz
container_name: yudao-report
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
depends_on:
yudao-infra:
yudao-gateway:
condition: service_healthy
yudao-bpm:
image: yudao-module-bpm-biz
container_name: yudao-bpm
ludu-datacenter:
image: 120.46.37.243:8080/lundu/ludu-module-datacenter:1.0.0
container_name: ludu-datacenter
networks:
- ludu_network
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:48092 || exit 0"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
depends_on:
yudao-infra:
yudao-gateway:
condition: service_healthy
yudao-pay:
image: yudao-module-pay-biz
container_name: yudao-pay
ludu-parking:
image: 120.46.37.243:8080/lundu/ludu-module-parking:1.0.0
container_name: ludu-parking
networks:
- ludu_network
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48090" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
depends_on:
yudao-infra:
yudao-system:
condition: service_healthy
yudao-mp:
image: yudao-module-mp-biz
container_name: yudao-mp
yudao-gateway:
condition: service_healthy
ludu-ticketing:
image: 120.46.37.243:8080/lundu/ludu-module-ticketing:1.0.0
container_name: ludu-ticketing
networks:
- ludu_network
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48088" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
depends_on:
yudao-infra:
condition: service_healthy
yudao-system:
condition: service_healthy
yudao-gateway:
condition: service_healthy
networks:
ludu_network:
driver: bridge

View File

@ -0,0 +1,93 @@
#!/bin/bash
cd /ludu
# 定义要检查的服务和 URL
declare -A services=(
["mysql"]="http://101.43.112.107:3306"
["mongo"]="http://101.43.112.107:27017"
#["redis"]="http://101.43.112.107:6379"
["nacos"]="http://101.43.112.107/nacos/#"
)
# 检查服务是否可达
check_services() {
for service in "${!services[@]}"; do
url="${services[$service]}"
if ! curl --silent --fail "$url"; then
echo "Error: $service is not available at $url."
return 1
fi
done
return 0
}
# 从命令行参数获取服务类型
SERVICE_TYPE=$1
# 检查服务类型是否提供
if [ -z "$SERVICE_TYPE" ]; then
echo "Usage: $0 <service_type>"
exit 1
fi
# 检查端口是否全部可达
if check_services; then
# 根据服务类型启动不同的服务
case $SERVICE_TYPE in
"gateway")
docker-compose stop yudao-gateway
docker-compose rm yudao-gateway
docker-compose pull yudao-gateway
docker-compose up -d yudao-gateway
;;
"system")
docker-compose stop yudao-system
docker-compose rm yudao-system
docker-compose pull yudao-system
docker-compose up -d yudao-system
;;
"job")
docker-compose stop ludu-job-admin
docker-compose rm ludu-job-admin
docker-compose pull ludu-job-admin
docker-compose up -d ludu-job-admin
;;
"infra")
docker-compose stop yudao-infra
docker-compose rm yudao-infra
docker-compose pull yudao-infra
docker-compose up -d yudao-infra
;;
"datacenter")
docker-compose stop ludu-datacenter
docker-compose rm ludu-datacenter
docker-compose pull ludu-datacenter
docker-compose up -d ludu-datacenter
;;
"parking")
docker-compose stop ludu-parking
docker-compose rm ludu-parking
docker-compose pull ludu-parking
docker-compose up -d ludu-parking
;;
"ticketing")
docker-compose stop ludu-ticketing
docker-compose rm ludu-ticketing
docker-compose pull ludu-ticketing
docker-compose up -d ludu-ticketing
;;
"all")
docker-compose down
docker-compose pull
docker-compose up -d
;;
*)
echo "Invalid service type."
exit 1
;;
esac
echo "Started service: $SERVICE_TYPE"
else
echo "One or more required services are not available. Please check the dependencies."
fi

302
settings.xml Normal file
View File

@ -0,0 +1,302 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!--
| This is the configuration file for Maven. It can be specified at two levels:
|
| 1. User Level. This settings.xml file provides configuration for a single user,
| and is normally provided in ${user.home}/.m2/settings.xml.
|
| NOTE: This location can be overridden with the CLI option:
|
| -s /path/to/user/settings.xml
|
| 2. Global Level. This settings.xml file provides configuration for all Maven
| users on a machine (assuming they're all using the same Maven
| installation). It's normally provided in
| ${maven.conf}/settings.xml.
|
| NOTE: This location can be overridden with the CLI option:
|
| -gs /path/to/global/settings.xml
|
| The sections in this sample file are intended to give you a running start at
| getting the most out of your Maven installation. Where appropriate, the default
| values (values used when the setting is not specified) are provided.
|
|-->
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\Maven\apache-maven-3.5.2\repository</localRepository>
<!-- interactiveMode
| This will determine whether maven prompts you when it needs input. If set to false,
| maven will use a sensible default value, perhaps based on some other setting, for
| the parameter in question.
|
| Default: true
<interactiveMode>true</interactiveMode>
-->
<!-- offline
| Determines whether maven should attempt to connect to the network when executing a build.
| This will have an effect on artifact downloads, artifact deployment, and others.
|
| Default: false
<offline>false</offline>
-->
<!-- pluginGroups
| This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
| when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
| "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
|-->
<pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
-->
</pluginGroups>
<!-- proxies
| This is a list of proxies which can be used on this machine to connect to the network.
| Unless otherwise specified (by system property or command-line switch), the first proxy
| specification in this list marked as active will be used.
|-->
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
</proxies>
<!-- servers
| This is a list of authentication profiles, keyed by the server-id used within the system.
| Authentication profiles can be used whenever maven must make a connection to a remote server.
|-->
<servers>
<!-- server
| Specifies the authentication information to use when connecting to a particular server, identified by
| a unique name within the system (referred to by the 'id' attribute below).
|
| NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
| used together.
|
<server>
<id>deploymentRepo</id>
<username>repouser</username>
<password>repopwd</password>
</server>
-->
<!-- Another sample, using keys to authenticate.
<server>
<id>siteServer</id>
<privateKey>/path/to/private/key</privateKey>
<passphrase>optional; leave empty if not used.</passphrase>
</server>
-->
</servers>
<!-- mirrors
| This is a list of mirrors to be used in downloading artifacts from remote repositories.
|
| It works like this: a POM may declare a repository to use in resolving certain artifacts.
| However, this repository may have problems with heavy traffic at times, so people have mirrored
| it to several places.
|
| That repository definition will have a unique id, so we can create a mirror reference for that
| repository, to be used as an alternate download site. The mirror site will be the preferred
| server for that repository.
|-->
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<!-- <mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror> -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<!-- <blocked>true</blocked> -->
</mirror>
</mirrors>
<!-- profiles
| This is a list of profiles which can be activated in a variety of ways, and which can modify
| the build process. Profiles provided in the settings.xml are intended to provide local machine-
| specific paths and repository locations which allow the build to work in the local environment.
|
| For example, if you have an integration testing plugin - like cactus - that needs to know where
| your Tomcat instance is installed, you can provide a variable here such that the variable is
| dereferenced during the build process to configure the cactus plugin.
|
| As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
| section of this document (settings.xml) - will be discussed later. Another way essentially
| relies on the detection of a system property, either matching a particular value for the property,
| or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
| value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
| Finally, the list of active profiles can be specified directly from the command line.
|
| NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
| repositories, plugin repositories, and free-form properties to be used as configuration
| variables for plugins in the POM.
|
|-->
<profiles>
<!-- 设置默认JDK版本 -->
<!--<profile>
<id>jdk1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<encoding>UTF-8</encoding>
</properties>
</profile> -->
<!-- profile
| Specifies a set of introductions to the build process, to be activated using one or more of the
| mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
| or the command line, profiles have to have an ID that is unique.
|
| An encouraged best practice for profile identification is to use a consistent naming convention
| for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
| This will make it more intuitive to understand what the set of introduced profiles is attempting
| to accomplish, particularly when you only have a list of profile id's for debug.
|
| This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
<profile>
<id>jdk-1.4</id>
<activation>
<jdk>1.4</jdk>
</activation>
<repositories>
<repository>
<id>jdk14</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://www.myhost.com/maven/jdk14</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
</profile>
-->
<!--
| Here is another profile, activated by the system property 'target-env' with a value of 'dev',
| which provides a specific path to the Tomcat instance. To use this, your plugin configuration
| might hypothetically look like:
|
| ...
| <plugin>
| <groupId>org.myco.myplugins</groupId>
| <artifactId>myplugin</artifactId>
|
| <configuration>
| <tomcatLocation>${tomcatPath}</tomcatLocation>
| </configuration>
| </plugin>
| ...
|
| NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
| anything, you could just leave off the <value/> inside the activation-property.
|
<profile>
<id>env-dev</id>
<activation>
<property>
<name>target-env</name>
<value>dev</value>
</property>
</activation>
<properties>
<tomcatPath>/path/to/tomcat/instance</tomcatPath>
</properties>
</profile>
-->
</profiles>
<!-- activeProfiles
| List of profiles that are active for all builds.
|
<activeProfiles>
<activeProfile>alwaysActiveProfile</activeProfile>
<activeProfile>anotherAlwaysActiveProfile</activeProfile>
</activeProfiles>
-->
</settings>

View File

@ -13,4 +13,4 @@ docker rmi ${app_name}:${app_version}
echo '----build image----'
docker buildx build -f Dockerfile -t ${app_name}:${app_version} .
echo '----start container----'
docker run -d -p 48082:48082 --name ${app_name} --memory 700m ${app_name}:${app_version}
docker run -d -p 48082:48082 --name ${app_name} ${app_name}:${app_version}

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.infra.clients;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@ -17,4 +18,49 @@ public interface LargeScreenClient {
@GetMapping("/api/checkticket")
Object checkTicketTotal(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/checkticket/qushi")
Object findByTimeTemp(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/thisyear")
Object thisYearNum(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/lastyear")
Object lastYearNum(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/gender")
Object findByGender(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/age")
Object findByage(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/lastyear/region")
Object lastYearFindByRegion(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/thisyear/region")
Object thisYearFindByRegion(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/salemethod")
Object findBySaleMethod(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
@GetMapping("/api/saledata/itemType")
Object findByItemType(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
// @GetMapping("/api/saledata/gender")
// Object findByWuYi(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
//
// @GetMapping("/api/saledata/gender")
// Object findByGuoQing(@RequestParam("starTime") String starTime, @RequestParam("endTime") String endTime);
//
// @GetMapping("/api/saledata/rijunthisyear/{startTime}")
// Object findThisYearRiJun(@PathVariable("startTime") String startTime);
//
// @GetMapping("/api/saledata/rijunlastyear/{startTime}")
// Object findLastYearRiJun(@PathVariable("startTime") String startTime);
@GetMapping("/api/saledata/thisyear/nianjun")
Object findMoneyThisYear();
@GetMapping("/api/saledata/lastyear/nianjun")
Object findMoneyLastYear();
}

View File

@ -12,7 +12,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -41,42 +40,50 @@ public class TicketingController {
private LargeScreenClient largeScreenClient;
@GetMapping
public CommonResult<String> testTicketing(@RequestParam("startDate") String startDate, @RequestParam("endDate")String endDate, @RequestParam("method") String method) throws Exception {
public CommonResult<String> testTicketing(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("method") String method) throws Exception {
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
startCalendar.setTime(TickingDateUtils.parse(startDate));
endCalendar.setTime(TickingDateUtils.parse(endDate));
return CommonResult.success(ticketDataMigration.getTicketDataByTimeZonesToMongo(startCalendar, endCalendar, method));
}
@GetMapping("/test1")
public CommonResult<List<String>> testAll(){
return CommonResult.success(checkTicketService.deleteTwoYearLastMonthAgo());
@GetMapping("/2")
public CommonResult<String> testTicketing2(@RequestParam("method") String method) throws Exception {
Calendar startCalendar = Calendar.getInstance();
startCalendar.add(Calendar.DAY_OF_MONTH, 1);
startCalendar.add(Calendar.YEAR, -1);
return CommonResult.success(ticketDataMigration.getTicketDataByTimeZonesToMongo(startCalendar, startCalendar, method));
}
private void methodUtils(Map<String, Object> map, String name, Object list){
map.put(name,list);
@GetMapping("/intoMysql")
public CommonResult<String> testTicketingMysql(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("method") String method) throws Exception {
return CommonResult.success("");
}
private String methodDataUtils(){
private void methodUtils(Map<String, Object> map, String name, Object list) {
map.put(name, list);
}
private String methodDataUtils() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime now = LocalDateTime.now();
return now.format(formatter);
}
@GetMapping("/test")
public void test(){
public void test() {
Map<String, Object> map = new HashMap<>();
String dataUtils = this.methodDataUtils();
this.methodUtils(map, "assetCount", largeScreenClient.assetMethod1());
this.methodUtils(map,"saleDataTotal",largeScreenClient.saleDataTotal(dataUtils,dataUtils));
this.methodUtils(map,"checkTicketTotal",largeScreenClient.checkTicketTotal(dataUtils,dataUtils));
webSocketSenderApi.sendObject(2,1L,"1",map);
this.methodUtils(map, "saleDataTotal", largeScreenClient.saleDataTotal(dataUtils, dataUtils));
this.methodUtils(map, "checkTicketTotal", largeScreenClient.checkTicketTotal(dataUtils, dataUtils));
webSocketSenderApi.sendObject(2, 1L, "1", map);
}
@GetMapping("/testa")
public CommonResult<List<String>> testAlla(){
public CommonResult<List<String>> testAlla() {
return CommonResult.success(saleDataService.deleteTwoYearLastMonthAgo());
}
@GetMapping("/testSample")
public void testSample(){
ticketDataMigration.deleteTwoYearOneMonthAgoAndUpdateLastYearTomorrow();
}
}

View File

@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -28,7 +29,7 @@ public class CodegenTableDO extends BaseDO {
/**
* ID 编号
*/
@TableId
@TableId(type = IdType.AUTO)
private Long id;
/**

View File

@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.infra.controller.checkticket.vo.CheckTicketPageRe
import cn.iocoder.yudao.module.infra.dal.dataobject.checkticket.CheckTicketDO;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 检票 Mapper
@ -32,4 +33,10 @@ public interface CheckTicketMapper extends BaseMapperX<CheckTicketDO> {
.orderByDesc(CheckTicketDO::getId));
}
/**
* 根据检票日期物理删除数据
* @param checkticketdate
* @return java.lang.Integer
*/
Integer physicalDeleteByCheckticketdate(@Param("checkticketdate") String checkticketdate);
}

View File

@ -6,10 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.infra.controller.saledata.vo.SaleDataPageReqVO;
import cn.iocoder.yudao.module.infra.dal.dataobject.saledata.SaleDataDO;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;
@ -43,4 +40,11 @@ public interface SaleDataMapper extends BaseMapperX<SaleDataDO> {
.likeIfPresent(SaleDataDO::getSalepropetyvaluename, reqVO.getSalepropetyvaluename())
.orderByDesc(SaleDataDO::getId));
}
/**
* 根据销售日期物理删除
* @param sddate
* @return java.lang.Integer
*/
Integer physicalDeleteBySddate(@Param("sddate") String sddate);
}

View File

@ -40,6 +40,17 @@ public class LargeScreenHeartbeat {
this.methodUtils(map, "assetCount", largeScreenClient.assetMethod1());
this.methodUtils(map,"saleDataTotal",largeScreenClient.saleDataTotal(dataUtils,dataUtils));
this.methodUtils(map,"checkTicketTotal",largeScreenClient.checkTicketTotal(dataUtils,dataUtils));
this.methodUtils(map,"findByTimeTemp",largeScreenClient.findByTimeTemp(dataUtils,dataUtils));
this.methodUtils(map,"thisYearNum",largeScreenClient.thisYearNum(dataUtils,dataUtils));
this.methodUtils(map,"lastYearNum",largeScreenClient.lastYearNum(dataUtils,dataUtils));
this.methodUtils(map,"findByGender",largeScreenClient.findByGender(dataUtils,dataUtils));
this.methodUtils(map,"findByage",largeScreenClient.findByage(dataUtils,dataUtils));
this.methodUtils(map,"lastYearFindByRegion",largeScreenClient.lastYearFindByRegion(dataUtils,dataUtils));
this.methodUtils(map,"thisYearFindByRegion",largeScreenClient.thisYearFindByRegion(dataUtils,dataUtils));
this.methodUtils(map,"findBySaleMethod",largeScreenClient.findBySaleMethod(dataUtils,dataUtils));
this.methodUtils(map,"findByItemType",largeScreenClient.findByItemType(dataUtils,dataUtils));
this.methodUtils(map,"findMoneyThisYear",largeScreenClient.findMoneyThisYear());
this.methodUtils(map,"findMoneyLastYear",largeScreenClient.findMoneyLastYear());
webSocketSenderApi.sendObject(2,1L,"1",map);
}

View File

@ -59,274 +59,119 @@ public class TicketDataMigration {
* 存入售票数据的定时任务mysql
*/
@XxlJob("getSaleData")
public void getSaleDataHandler() throws Exception {
public String getSaleDataHandler() throws Exception {
int failedCount = 0;
int pageNumber = 1;
XxlJobHelper.log("抽数服务mysql销售数据开始抽数...");
StringJoiner result = new StringJoiner("\n");
XxlJobHelper.log("抽数服务mysql售票数据开始抽数...");
result.add("抽数服务mysql售票数据开始抽数...");
TicketingSamplingRespVO ticketingSamplingRespVO = this.getUrlResponseData(SALE_DATA_SERVICE, SALE_DATA_METHOD, TickingDateUtils.getPreviousDayFormat(), pageNumber);
if (ticketingSamplingRespVO == null) {
XxlJobHelper.log("暂无数据!");
return;
XxlJobHelper.log("日期:{}暂无数据!", TickingDateUtils.getPreviousDayFormat());
result.add("日期:" + TickingDateUtils.getPreviousDayFormat() + "暂无数据!");
return result.toString();
}
int totalRows = ticketingSamplingRespVO.getTotalRows();
List<Map<String, Object>> mapList = ticketingSamplingRespVO.getDataMapList();
// 总条数小于等于每页条数 则直接按照总条数进行插入即可
if (totalRows <= PAGE_SIZE) {
failedCount += insertSaleData(mapList, totalRows, pageNumber);
} else {
// 总条数大于每页条数 执行完第一次插入后根据返回的页数继续进行请求和插入
// 插入第一页的数据
failedCount += insertSaleData(mapList, PAGE_SIZE, pageNumber);
pageNumber++;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(SALE_DATA_SERVICE, SALE_DATA_METHOD, TickingDateUtils.getPreviousDayFormat(), pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
// 对最后一页进行处理得到最后一页的实际条数
if (pageNumber != totalPages) {
failedCount += insertSaleData(mapList, PAGE_SIZE, pageNumber);
} else {
failedCount += insertSaleData(mapList, totalRows % PAGE_SIZE, pageNumber);
}
List<Map<String, Object>> mapList;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(SALE_DATA_SERVICE, SALE_DATA_METHOD, TickingDateUtils.getPreviousDayFormat(), pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
// 对最后一页进行处理得到最后一页的实际条数
if (!saleDataService.createSaleData(BeanUtils.toBean(mapList, SaleDataDO.class))) {
failedCount += ticketingSamplingRespVO.getPageSize();
}
}
if (failedCount != 0) {
XxlJobHelper.handleFail("总共:" + totalRows + "条数据," + failedCount + "条数据插入失败!即将重试......");
result.add("总共:" + totalRows + "条数据," + failedCount + "条数据插入失败!即将重试......");
return result.toString();
}
if (!saleDataService.dataValidation(TickingDateUtils.getPreviousDayFormat())) {
XxlJobHelper.log("mysql和mongo数据验证不一致");
XxlJobHelper.log("重新抽取({})mongo数据", TickingDateUtils.getPreviousDayFormat());
getSaleDataByMongoDBHandler();
XxlJobHelper.log("抽数完,比对结果:{}", saleDataService.dataValidation(TickingDateUtils.getPreviousDayFormat()) ? "相等" : "不想等");
XxlJobHelper.log("mysql和mongo数据验证不一致重新进行mongo抽数中......");
result.add("mysql和mongo数据验证不一致重新进行mongo抽数中......");
Calendar yesterday = Calendar.getInstance();
yesterday.add(Calendar.DAY_OF_MONTH, -1);
getTicketDataByTimeZonesToMongo(yesterday, yesterday, "saleData");
if (!saleDataService.dataValidation(TickingDateUtils.getPreviousDayFormat())) {
XxlJobHelper.handleFail("日期:" + TickingDateUtils.getPreviousDayFormat() + "中mongo和mysql售票数据不一致");
result.add("日期:" + TickingDateUtils.getPreviousDayFormat() + "中mongo和mysql售票数据不一致");
}
}
XxlJobHelper.log("抽数服务:销售数据抽数正常结束!总共:{}条数据,{}条数据插入失败!", totalRows, failedCount);
XxlJobHelper.log("抽数服务:售票数据抽数正常结束!总共:{}条数据,{}条数据插入失败!", totalRows, failedCount);
result.add("抽数服务:售票数据抽数正常结束!总共:" + totalRows + "条数据," + failedCount + "条数据插入失败!");
return result.toString();
}
/**
* 存入检票数据的定时任务mysql
*/
@XxlJob("getCheckTicket")
public void getCheckTicketHandler() throws Exception {
public String getCheckTicketHandler() throws Exception {
int failedCount = 0;
int pageNumber = 1;
StringJoiner result = new StringJoiner("\n");
result.add("抽数服务mysql检票数据开始抽数...");
XxlJobHelper.log("抽数服务mysql检票数据开始抽数...");
TicketingSamplingRespVO ticketingSamplingRespVO = this.getUrlResponseData(CHECK_TICKET_SERVICE, CHECK_TICKET_METHOD, TickingDateUtils.getPreviousDayFormat(), pageNumber);
if (ticketingSamplingRespVO == null) {
XxlJobHelper.log("暂无数据!");
return;
XxlJobHelper.log("日期:{}暂无数据!", TickingDateUtils.getPreviousDayFormat());
result.add("日期:" + TickingDateUtils.getPreviousDayFormat() + "暂无数据!");
return result.toString();
}
int totalRows = ticketingSamplingRespVO.getTotalRows();
List<Map<String, Object>> mapList = ticketingSamplingRespVO.getDataMapList();
// 总条数小于等于每页条数 则直接按照总条数进行插入即可
if (totalRows <= PAGE_SIZE) {
failedCount += insertCheckTicket(mapList, totalRows, pageNumber);
} else {
// 总条数大于每页条数 执行完第一次插入后根据返回的页数继续进行请求和插入
// 插入第一页的数据
failedCount += insertCheckTicket(mapList, PAGE_SIZE, pageNumber);
pageNumber++;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(CHECK_TICKET_SERVICE, CHECK_TICKET_METHOD, TickingDateUtils.getPreviousDayFormat(), pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
// 对最后一页进行处理得到最后一页的实际条数
if (pageNumber != totalPages) {
failedCount += insertCheckTicket(mapList, PAGE_SIZE, pageNumber);
} else {
failedCount += insertCheckTicket(mapList, totalRows % PAGE_SIZE, pageNumber);
}
List<Map<String, Object>> mapList;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(CHECK_TICKET_SERVICE, CHECK_TICKET_METHOD, TickingDateUtils.getPreviousDayFormat(), pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
if (!checkTicketService.createCheckTicket(BeanUtils.toBean(mapList, CheckTicketDO.class))) {
failedCount += ticketingSamplingRespVO.getPageSize();
}
}
if (failedCount != 0) {
XxlJobHelper.handleFail("总共:" + totalRows + "条数据," + failedCount + "条数据插入失败!即将重试......");
result.add("总共:" + totalRows + "条数据," + failedCount + "条数据插入失败!即将重试......");
return result.toString();
}
if (!checkTicketService.dataValidation(TickingDateUtils.getPreviousDayFormat())) {
XxlJobHelper.log("mysql和mongo数据验证不一致");
XxlJobHelper.log("重新抽取({})mongo数据", TickingDateUtils.getPreviousDayFormat());
getCheckTicketByMongoDBHandler();
XxlJobHelper.log("抽数完,比对结果:{}", checkTicketService.dataValidation(TickingDateUtils.getPreviousDayFormat()) ? "相等" : "不想等");
XxlJobHelper.log("mysql和mongo数据验证不一致重新进行mongo抽数中......");
result.add("mysql和mongo数据验证不一致重新进行mongo抽数中......");
Calendar yesterday = Calendar.getInstance();
yesterday.add(Calendar.DAY_OF_MONTH, -1);
getTicketDataByTimeZonesToMongo(yesterday, yesterday, "checkTicket");
if (!checkTicketService.dataValidation(TickingDateUtils.getPreviousDayFormat())) {
XxlJobHelper.handleFail("日期:" + TickingDateUtils.getPreviousDayFormat() + "中mongo和mysql检票数据不一致");
result.add("日期:" + TickingDateUtils.getPreviousDayFormat() + "中mongo和mysql检票数据不一致");
}
}
XxlJobHelper.log("抽数服务:检票数据抽数正常结束!总共:{}条数据,{}条数据插入失败!", totalRows, failedCount);
result.add("抽数服务:检票数据抽数正常结束!总共:" + totalRows + "条数据," + failedCount + "条数据插入失败!");
return result.toString();
}
/**
* 存入销售数据的定时任务mongodb
*/
@XxlJob("getSaleDataByMongoDB")
public void getSaleDataByMongoDBHandler() throws Exception {
int successCount = 0;
int duplicatesCount = 0;
int pageNumber = 1;
XxlJobHelper.log("抽数服务mongodb销售数据开始抽数...");
TicketingSamplingRespVO ticketingSamplingRespVO = this.getUrlResponseData(SALE_DATA_SERVICE, SALE_DATA_METHOD, TickingDateUtils.getNowDayFormat(), pageNumber);
if (ticketingSamplingRespVO == null) {
XxlJobHelper.log("暂无数据!");
return;
}
int totalRows = ticketingSamplingRespVO.getTotalRows();
List<Map<String, Object>> mapList;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(SALE_DATA_SERVICE, SALE_DATA_METHOD, TickingDateUtils.getNowDayFormat(), pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
List<Integer> resultNum = saleDataService.insertTodayByMongoDB(BeanUtils.toBean(mapList, SaleDataToday.class));
if (resultNum == null) {
XxlJobHelper.log("数据批量插入异常!", pageNumber);
} else {
successCount += resultNum.get(0);
duplicatesCount += resultNum.get(1);
}
}
XxlJobHelper.log("抽数服务:检票数据抽数正常结束!总共:{}条数据,{}条数据重复,{}条数据插入成功!", totalRows, duplicatesCount, successCount);
public String getSaleDataByMongoDBHandler() throws Exception {
Calendar now = Calendar.getInstance();
return getTicketDataByTimeZonesToMongo(now, now, "saleData");
}
/**
* 存入检票数据的定时任务mongodb
*/
@XxlJob("getCheckTicketByMongoDB")
public void getCheckTicketByMongoDBHandler() throws Exception {
XxlJobHelper.log("抽数服务mongodb检票数据开始抽数...");
int successCount = 0;
int duplicatesCount = 0;
int pageNumber = 1;
String date = TickingDateUtils.getNowDayFormat();
TicketingSamplingRespVO ticketingSamplingRespVO = this.getUrlResponseData(CHECK_TICKET_SERVICE, CHECK_TICKET_METHOD, date, pageNumber);
if (ticketingSamplingRespVO == null) {
XxlJobHelper.log("暂无数据!");
return;
}
int totalRows = ticketingSamplingRespVO.getTotalRows();
List<Map<String, Object>> mapList;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(CHECK_TICKET_SERVICE, CHECK_TICKET_METHOD, date, pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
List<Integer> resultNum = checkTicketService.insertTodayByMongoDB(BeanUtils.toBean(mapList, CheckTicketToday.class));
if (resultNum == null) {
XxlJobHelper.log("数据批量插入异常!", pageNumber);
} else {
successCount += resultNum.get(0);
duplicatesCount += resultNum.get(1);
}
}
XxlJobHelper.log("抽数服务:检票数据抽数正常结束!总共:{}条数据,{}条数据重复,{}条数据插入成功!", totalRows, duplicatesCount, successCount);
public String getCheckTicketByMongoDBHandler() throws Exception {
Calendar now = Calendar.getInstance();
return getTicketDataByTimeZonesToMongo(now, now, "checkTicket");
}
@XxlJob("getCheckTicketByMongoDBLastMonthToNow")
public void getCheckTicketByMongoDBLastMonthToNow() throws Exception {
XxlJobHelper.log("抽数服务mongodb检票数据开始抽数...");
int successCount;
int duplicatesCount;
int pageNumber;
// 获取当前日期
Calendar startDate = Calendar.getInstance();
// 设置开始日期为上一个月的第一天
startDate.set(Calendar.DAY_OF_MONTH, 1); // 先将日期设置为当前月的第一天
startDate.add(Calendar.MONTH, -1); // 然后减去一个月
// 设置结束日期为今天
Calendar endDate = Calendar.getInstance();
// 循环从开始日期到结束日期
while (!startDate.after(endDate)) {
successCount = 0;
duplicatesCount = 0;
String dateString = TickingDateUtils.format(startDate.getTime());
pageNumber = 1;
TicketingSamplingRespVO ticketingSamplingRespVO = this.getUrlResponseData(CHECK_TICKET_SERVICE, CHECK_TICKET_METHOD, dateString, pageNumber);
if (ticketingSamplingRespVO == null) {
startDate.add(Calendar.DAY_OF_MONTH, 1);
continue;
}
int totalRows = ticketingSamplingRespVO.getTotalRows();
List<Map<String, Object>> mapList;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(CHECK_TICKET_SERVICE, CHECK_TICKET_METHOD, dateString, pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
List<Integer> resultNum = checkTicketService.insertByMongoDB(BeanUtils.toBean(mapList, CheckTicket.class));
if (resultNum == null) {
XxlJobHelper.log("数据批量插入异常!", pageNumber);
} else {
successCount += resultNum.get(0);
duplicatesCount += resultNum.get(1);
}
}
int currentMonth = startDate.get(Calendar.MONTH) + 1; // 加1以得到1-12的月份
int currentDay = startDate.get(Calendar.DAY_OF_MONTH);
XxlJobHelper.log("抽数服务:{}月{}日:检票数据抽数正常结束!总共:{}条数据,{}条数据重复,{}条数据插入成功!", currentMonth, currentDay, totalRows, duplicatesCount, successCount);
// 日期递增一天
startDate.add(Calendar.DAY_OF_MONTH, 1);
}
XxlJobHelper.log("抽数结束!!!");
}
@XxlJob("getSaleDataByMongoDBLastMonthToNow")
public void getSaleDataByMongoDBLastMonthToNow() throws Exception {
XxlJobHelper.log("抽数服务mongodb售票数据开始抽数...");
int successCount;
int duplicatesCount;
int pageNumber;
// 获取当前日期
Calendar startDate = Calendar.getInstance();
// 设置开始日期为上一个月的第一天
startDate.set(Calendar.DAY_OF_MONTH, 1); // 先将日期设置为当前月的第一天
startDate.add(Calendar.MONTH, -1); // 然后减去一个月
// 设置结束日期为今天
Calendar endDate = Calendar.getInstance();
// 循环从开始日期到结束日期
while (!startDate.after(endDate)) {
successCount = 0;
duplicatesCount = 0;
String dateString = TickingDateUtils.format(startDate.getTime());
pageNumber = 1;
TicketingSamplingRespVO ticketingSamplingRespVO = this.getUrlResponseData(SALE_DATA_SERVICE, SALE_DATA_METHOD, dateString, pageNumber);
if (ticketingSamplingRespVO == null) {
startDate.add(Calendar.DAY_OF_MONTH, 1);
continue;
}
int totalRows = ticketingSamplingRespVO.getTotalRows();
List<Map<String, Object>> mapList;
// 获得总页数
int totalPages = ticketingSamplingRespVO.getTotalPages();
// 处理剩余页的数据
for (; pageNumber <= totalPages; pageNumber++) {
ticketingSamplingRespVO = this.getUrlResponseData(SALE_DATA_SERVICE, SALE_DATA_METHOD, dateString, pageNumber);
mapList = ticketingSamplingRespVO.getDataMapList();
List<Integer> resultNum = saleDataService.insertByMongoDB(BeanUtils.toBean(mapList, SaleData.class));
if (resultNum == null) {
XxlJobHelper.log("数据批量插入异常!", pageNumber);
} else {
successCount += resultNum.get(0);
duplicatesCount += resultNum.get(1);
}
}
int currentMonth = startDate.get(Calendar.MONTH) + 1; // 加1以得到1-12的月份
int currentDay = startDate.get(Calendar.DAY_OF_MONTH);
XxlJobHelper.log("抽数服务:{}月{}日:售票数据抽数正常结束!总共:{}条数据,{}条数据重复,{}条数据插入成功!", currentMonth, currentDay, totalRows, duplicatesCount, successCount);
// 日期递增一天
startDate.add(Calendar.DAY_OF_MONTH, 1);
}
XxlJobHelper.log("抽数结束!!!");
}
/**
* 删除今年和去年往前推31天外的数据和抽取去年明天的数据
@ -396,6 +241,10 @@ public class TicketDataMigration {
TicketingSamplingRespVO ticketingSamplingRespVO = this.getUrlResponseData(respService, respMethod, dateString, pageNumber);
if (ticketingSamplingRespVO == null) {
startDate.add(Calendar.DAY_OF_MONTH, 1);
result.add("日期:" + TickingDateUtils.format(startDate.getTime()) + "返回无值");
if (startDate.equals(endDate)) { // 如果日期相等退出循环
break;
}
continue;
}
int totalRows = ticketingSamplingRespVO.getTotalRows();
@ -437,48 +286,6 @@ public class TicketDataMigration {
return result.toString();
}
/**
* 插入销售数据的方法mysql
*
* @param mapList 数据集合数组
* @param listSize 实际个数
* @param pageNumber 每页显示条数
* @return int 失败条数
*/
private int insertSaleData(List<Map<String, Object>> mapList, int listSize, int pageNumber) {
int failedCount = 0;
for (int i = 0; i < listSize; i++) {
Map<String, Object> currentMap = mapList.get(i);
SaleDataDO saleDataDO = BeanUtils.toBean(currentMap, SaleDataDO.class);
if (saleDataService.createSaleData(saleDataDO) == 0) {
failedCount++;
XxlJobHelper.log("第{}条数据插入失败,数据值为:{}", ((pageNumber - 1) * PAGE_SIZE + i + 1), currentMap);
}
}
return failedCount;
}
/**
* 插入检票数据的方法mysql
*
* @param mapList 数据集合数组
* @param listSize 实际个数
* @param pageNumber 每页显示条数
* @return int 失败条数
*/
private int insertCheckTicket(List<Map<String, Object>> mapList, int listSize, int pageNumber) {
int failedCount = 0;
for (int i = 0; i < listSize; i++) {
Map<String, Object> currentMap = mapList.get(i);
CheckTicketDO checkTicketDO = BeanUtils.toBean(currentMap, CheckTicketDO.class);
if (checkTicketService.createCheckTicket(checkTicketDO) == 0) {
failedCount++;
XxlJobHelper.log("第{}条数据插入失败,数据值为:{}", ((pageNumber - 1) * PAGE_SIZE + i + 1), currentMap);
}
}
return failedCount;
}
/**
* 请求目标url的响应数据
*
@ -519,14 +326,4 @@ public class TicketDataMigration {
return ticketingSamplingRespVO;
}
/**
* 校验数据
*
* @param date
* @return java.lang.Boolean
*/
public Boolean dataValidation(String date) {
return checkTicketService.dataValidation(date) && saleDataService.dataValidation(date);
}
}

View File

@ -19,12 +19,10 @@ import java.util.Map;
public interface CheckTicketService {
/**
* 创建检票
*
* @param createReqVO 创建信息
* 批量插入检票数据(mysql)
* @return 编号
*/
Long createCheckTicket(@Valid CheckTicketDO createReqVO);
Boolean createCheckTicket(List<CheckTicketDO> checkTicketDOList);
/**
* 查询重复的dataId(mongodb)

View File

@ -48,11 +48,10 @@ public class CheckTicketServiceImpl implements CheckTicketService {
private MongoTemplate mongoTemplate;
@Override
public Long createCheckTicket(CheckTicketDO checkTicketDO) {
// 插入
checkTicketMapper.insert(checkTicketDO);
public Boolean createCheckTicket(List<CheckTicketDO> checkTicketDOList) {
checkTicketMapper.physicalDeleteByCheckticketdate(checkTicketDOList.get(0).getCheckticketdate());
// 返回
return checkTicketDO.getId();
return checkTicketMapper.insertBatch(checkTicketDOList);
}
@Override

View File

@ -21,12 +21,12 @@ import java.util.Map;
public interface SaleDataService {
/**
* 创建售票
* 批量插入售票数据(mysql)
*
* @param saleDataDO 创建信息
* @param saleDataDOList
* @return 编号
*/
Long createSaleData(@Valid SaleDataDO saleDataDO);
Boolean createSaleData(List<SaleDataDO> saleDataDOList);
/**
* 查询重复的dataId(mongodb)

View File

@ -42,11 +42,9 @@ public class SaleDataServiceImpl implements SaleDataService {
private MongoTemplate mongoTemplate;
@Override
public Long createSaleData(SaleDataDO saleDataDO) {
// 插入
saleDataMapper.insert(saleDataDO);
// 返回
return saleDataDO.getId();
public Boolean createSaleData(List<SaleDataDO> saleDataDOList) {
saleDataMapper.physicalDeleteBySddate(saleDataDOList.get(0).getSddate());
return saleDataMapper.insertBatch(saleDataDOList);
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.infra.dal.mysql.checkticket.CheckTicketMapper">
<delete id="physicalDeleteByCheckticketdate">
DELETE
FROM checkticket
WHERE checkticketdate = #{checkticketdate}
</delete>
</mapper>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.infra.dal.mysql.saledata.SaleDataMapper">
<delete id="physicalDeleteBySddate">
DELETE
FROM saledata
WHERE sddate = #{sddate}
</delete>
</mapper>

View File

@ -13,4 +13,4 @@ docker rmi ${app_name}:${app_version}
echo '----build image----'
docker buildx build -f Dockerfile -t ${app_name}:${app_version} .
echo '----start container----'
docker run -d -p 48081:48081 --name ${app_name} --memory 700m ${app_name}:${app_version}
docker run -d -p 48081:48081 --name ${app_name} --memory 750m ${app_name}:${app_version}