Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2025-11-17 19:18:07 +08:00
41 changed files with 3123 additions and 24 deletions

View File

@ -137,6 +137,7 @@ security:
- /facility/matrix/**
- /hat/device/data
- /websocket/ue
- /websocket/vehicle
# 多租户配置
tenant:

View File

@ -92,6 +92,11 @@ public class GpsEquipmentController extends BaseController {
return gpsEquipmentService.queryPageList(bo, pageQuery);
}
/**
* 查询GPS设备详细列表给车辆
* @param bo
* @return
*/
@GetMapping("/getListToVehicle")
public R<List<GpsEquipmentVo>> getListToVehicle(GpsEquipmentBo bo) {
return R.ok(gpsEquipmentService.getListToVehicle(bo));

View File

@ -87,4 +87,5 @@ public interface IGpsEquipmentSonService extends IService<GpsEquipmentSon>{
List<GpsEquipmentSonVo> getUeUserListByProjectId(LocalDateTime startOfDay, LocalDateTime now);
List<GpsEquipmentSonVo> getVehicleList(GpsEquipmentSonBo bo);
List<GpsEquipmentSonVo> getNewVehicleList(GpsEquipmentSonBo bo);
}

View File

@ -35,6 +35,7 @@ import org.dromara.project.domain.vo.project.BusProjectVo;
import org.dromara.project.service.IBusProjectService;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysUserService;
import org.dromara.websocket.websocket.service.VehicleWebSocketServer;
import org.redisson.api.DeletedObjectListener;
import org.redisson.api.ExpiredObjectListener;
import org.redisson.api.listener.SetObjectListener;
@ -263,7 +264,6 @@ public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, Gps
gpsEquipmentSonService.insertByBo(gpsEquipmentSon);
//TODO 后续创建websocket长连接发送信息
//保存到redis如果存在则更新存活时间
@ -272,14 +272,26 @@ public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, Gps
// --------------------------
// 1. 构造需要推送的消息内容String类型
//判断是否有连接
if (equipment != null && StringUtils.isNotEmpty(equipment.getModelId())) {
int onlineCount = InitOnStartWebSocketServer.getOnlineCount();
if (onlineCount > 0){
if (equipment != null && StringUtils.isNotEmpty(equipment.getModelId())) {
String ued = ueStructureJsonMessage(gpsEquipmentSon, equipment.getModelId());
InitOnStartWebSocketServer.sendToAll(ued);
}
}
//判断车辆轨迹是否有连接
if (equipment != null && equipment.getClientType() == 1 && equipment.getUserId() != null) {
int onlineCount1 = VehicleWebSocketServer.getOnlineCount();
if (onlineCount1 > 0) {
String vehicled = vehicleStructureJsonMessage(gpsEquipmentSon);
VehicleWebSocketServer.sendToSubscription(gpsEquipmentSon.getUserId()+"-"+gpsEquipmentSon.getTripId(), vehicled);
}
}
Set<Long> sessionsAll = WebSocketSessionHolder.getSessionsAll();
if (!sessionsAll.isEmpty()) {
String pushContent = buildPushMessage(gpsEquipmentSon);
@ -348,6 +360,19 @@ public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, Gps
}
/**
* 构建推送消息内容String类型
*/
private String vehicleStructureJsonMessage(GpsEquipmentSonBo sonBo) {
// 构造消息对象(包含关键信息)
JSONObject messageObj = new JSONObject();
messageObj.put("locLatitude", sonBo.getLocLatitude().toString()); // 消息类型
messageObj.put("locLongitude", sonBo.getLocLongitude().toString()); // 消息类型
// 转换为String类型返回
return messageObj.toString();
}
private static final int DEVICE_ALIVE_TIMEOUT = 120; // 5分钟
/**
* 更新设备存活状态到Redis并添加过期监听

View File

@ -239,4 +239,12 @@ public class GpsEquipmentSonServiceImpl extends ServiceImpl<GpsEquipmentSonMappe
.eq(bo.getTripId() != null,GpsEquipmentSon::getTripId,bo.getTripId())
.between(GpsEquipmentSon::getCreateTime,bo.getStartTime(),bo.getEndTime()));
}
@Override
public List<GpsEquipmentSonVo> getNewVehicleList(GpsEquipmentSonBo bo) {
return baseMapper.selectVoList(new LambdaQueryWrapper<GpsEquipmentSon>()
.eq(GpsEquipmentSon::getUserId,bo.getUserId())
.eq(GpsEquipmentSon::getTripId,bo.getTripId())
.orderByDesc(GpsEquipmentSon::getCreateTime));
}
}

View File

@ -0,0 +1,16 @@
package org.dromara.progress.domain.dto.export;
import lombok.Data;
@Data
public class ReportExportDto {
private Long projectId;
/**
* 日期 yyyy-mm-dd
*/
private String date;
private String person;
}

View File

@ -0,0 +1,32 @@
package org.dromara.progress.domain.vo.export;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EquipmentEntryData {
private String no; // 序号
private String project; // 项目
private String num; // 数量
private String production; // 生产情况
private String entry; // 今日进场情况
private String totalEntry; // 累计进场情况
private String remark; // 备注
// 生成模拟数据
public static List<EquipmentEntryData> generateMockData() {
List<EquipmentEntryData> dataList = new ArrayList<>();
dataList.add(new EquipmentEntryData("1", "光伏支架", "3200组", "正常生产", "50组", "1200组", "符合质量标准"));
dataList.add(new EquipmentEntryData("2", "光伏组件", "56000块", "正常生产", "750块", "22000块", "符合质量标准"));
dataList.add(new EquipmentEntryData("3", "逆变器", "30台", "生产中", "0台", "10台", "预计下周进场"));
return dataList;
}
}

View File

@ -0,0 +1,31 @@
package org.dromara.progress.domain.vo.export;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaterialEntryData {
private String no; // 序号
private String materialName;// 材料名称
private String designValue; // 设计值
private String entryStatus; // 进场情况
private String inspection; // 送检记录
// 生成模拟数据
public static List<MaterialEntryData> generateMockData() {
List<MaterialEntryData> dataList = new ArrayList<>();
dataList.add(new MaterialEntryData("1", "光伏电缆", "5000米", "今日进场1000米累计3000米", "已送检,合格"));
dataList.add(new MaterialEntryData("2", "水泥", "200吨", "今日进场50吨累计150吨", "已送检,合格"));
dataList.add(new MaterialEntryData("3", "钢筋", "100吨", "未进场,预计明日到货", "待送检"));
dataList.add(new MaterialEntryData("4", "预埋件", "2000个", "今日进场500个累计1500个", "已送检,合格"));
return dataList;
}
}

View File

@ -0,0 +1,32 @@
package org.dromara.progress.domain.vo.export;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaterialInspectionData {
private String no; // 序号
private String materialName;// 材料名称
private String usePart; // 用材部位
private String inspectionOrg; // 送检机构
private String inspectionRecord; // 送检记录
// 生成模拟数据
public static List<MaterialInspectionData> generateMockData() {
List<MaterialInspectionData> dataList = new ArrayList<>();
dataList.add(new MaterialInspectionData("1", "光伏电缆", "方阵连接", "广西质检中心", "2025-11-05送检2025-11-06合格"));
dataList.add(new MaterialInspectionData("2", "水泥", "基础浇筑", "百色市质检所", "2025-11-04送检2025-11-05合格"));
dataList.add(new MaterialInspectionData("3", "钢筋", "支架固定", "广西质检中心", "待送检预计2025-11-08送检"));
dataList.add(new MaterialInspectionData("4", "预埋件", "基础连接", "百色市质检所", "2025-11-03送检2025-11-04合格"));
return dataList;
}
}

View File

@ -0,0 +1,58 @@
package org.dromara.progress.domain.vo.export;
import lombok.Data;
import java.util.List;
@Data
public class ParamData {
/**
* 项目简介
*/
private String projectIntro;
/**
* 记录人
*/
private String date;
/**
* 记录人
*/
private String recorder;
/**
* 气温
*/
private String temp;
/**
* 白天天气
*/
private String dayWeather;
/**
* 夜晚天气
*/
private String nightWeather;
/**
* 现场质量
*/
private String quality = "质量正常.可控。";
/**
* 现场安全
*/
private String safety = "安全正常.可控。";
/**
* 图片地址
*/
private List<String> imgUrls1;
/**
* 图片地址
*/
private List<String> imgUrls2;
}

View File

@ -0,0 +1,30 @@
package org.dromara.progress.domain.vo.export;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ParticipantData {
private String unit; // 参建单位
private String leader; // 经理班子人员
private String manager; // 主要管理技术人员
private String other; // 其他人员
private String remark; // 备注
// 生成模拟数据
public static List<ParticipantData> generateMockData() {
List<ParticipantData> dataList = new ArrayList<>();
dataList.add(new ParticipantData("田东公司项目建设管理部", "3人", "8人", "12人", "正常"));
dataList.add(new ParticipantData("XX施工单位", "2人", "5人", "30人", "部分人员轮休"));
dataList.add(new ParticipantData("XX监理单位", "1人", "2人", "0人", "正常"));
return dataList;
}
}

View File

@ -0,0 +1,34 @@
package org.dromara.progress.domain.vo.export;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProgressData {
private int num; // 序号
private String project; // 项目
private String design; // 设计值
private String plan; // 今日施工计划
private String complete; // 今日施工完成情况
private String total; // 累计完成工程量
private String process; // 施工形象及进度
public static List<ProgressData> generateMockData() {
List<ProgressData> dataList = new ArrayList<>();
dataList.add(new ProgressData(1, "土地流转(亩)", "217.36", "50", "45", "180", "已完成82.8%"));
dataList.add(new ProgressData(2, "清表(亩)", "217.36", "40", "38", "150", "已完成69%"));
dataList.add(new ProgressData(3, "支架安装(组)", "3200", "50", "45", "1200", "已完成37.5%"));
dataList.add(new ProgressData(4, "组件安装(块)", "56000", "800", "750", "22000", "已完成39.3%"));
return dataList;
}
}

View File

@ -0,0 +1,23 @@
// ProjectData.java
package org.dromara.progress.domain.vo.export;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProjectData {
private List<ProgressData> progressList;
private List<ParticipantData> participantList;
private List<EquipmentEntryData> equipmentEntryList;
private List<MaterialEntryData> materialList;
private List<MaterialInspectionData> inspectionList;
private String projectName; // 项目名称
private String projectDate; // 项目日期
}

View File

@ -125,4 +125,25 @@ public class HseViolationRecord extends BaseEntity {
*/
private String remark;
/**
* 任务批号
*/
private String jobKey;
/**
* 任务批号
*/
private Integer version;
/**
* 验证人id
*/
private Long validatorId;
/**
* 验证人名字
*/
private String validatorName;
}

View File

@ -537,10 +537,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
@Override
public List<SysDeptVo> querListDept() {
List<SysDeptVo> sysDeptVos = baseMapper.selectDeptList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getParentId, "100").eq(SysDept::getStatus, "0").eq(SysDept::getDelFlag, "0"));
return sysDeptVos;
}

View File

@ -17,6 +17,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.vehicle.domain.bo.VehVehicleInfoBo;
import org.dromara.vehicle.domain.vo.VehVehicleInfoVo;
import org.dromara.vehicle.domain.vo.VehVehicleTripVo;
import org.dromara.vehicle.service.IVehVehicleInfoService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -45,6 +46,17 @@ public class VehVehicleInfoController extends BaseController {
public TableDataInfo<VehVehicleInfoVo> list(VehVehicleInfoBo bo, PageQuery pageQuery) {
return vehVehicleInfoService.queryPageList(bo, pageQuery);
}
/**
* 获取车辆行程信息
*
* @param id 主键
*/
// @SaCheckPermission("vehicle:vehicleInfo:query")
@GetMapping("/getTrip/{id}")
public R<VehVehicleTripVo> getTripInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(vehVehicleInfoService.getTripInfo(id));
}
/**
* 查询车辆信息列表

View File

@ -1,5 +1,6 @@
package org.dromara.vehicle.service;
import jakarta.validation.constraints.NotNull;
import org.dromara.vehicle.domain.vo.VehVehicleInfoVo;
import org.dromara.vehicle.domain.bo.VehVehicleInfoBo;
import org.dromara.vehicle.domain.VehVehicleInfo;
@ -7,6 +8,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.vehicle.domain.vo.VehVehicleTripVo;
import java.util.Collection;
import java.util.List;
@ -81,4 +84,6 @@ public interface IVehVehicleInfoService extends IService<VehVehicleInfo>{
* @return
*/
int unBindClient(VehVehicleInfoBo bo);
VehVehicleTripVo getTripInfo(Long id);
}

View File

@ -107,4 +107,11 @@ public interface IVehVehicleTripService extends IService<VehVehicleTrip> {
* @return
*/
Long getTripId(Long id);
/**
* 根据车辆id获取最新行程信息
* @param id
* @return
*/
VehVehicleTripVo getTripInfoByVehicleId(Long id);
}

View File

@ -18,9 +18,12 @@ import org.dromara.gps.service.IGpsEquipmentService;
import org.dromara.gps.service.IGpsManmachineService;
import org.dromara.vehicle.domain.VehVehicleInfo;
import org.dromara.vehicle.domain.bo.VehVehicleInfoBo;
import org.dromara.vehicle.domain.enums.VehVehicleInfoStatusEnum;
import org.dromara.vehicle.domain.vo.VehVehicleInfoVo;
import org.dromara.vehicle.domain.vo.VehVehicleTripVo;
import org.dromara.vehicle.mapper.VehVehicleInfoMapper;
import org.dromara.vehicle.service.IVehVehicleInfoService;
import org.dromara.vehicle.service.IVehVehicleTripService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@ -50,6 +53,10 @@ public class VehVehicleInfoServiceImpl extends ServiceImpl<VehVehicleInfoMapper,
@Lazy
private IGpsManmachineService gpsManmachineService;
@Autowired
@Lazy
private IVehVehicleTripService vehVehicleTripService;
/**
* 查询车辆信息
*
@ -209,4 +216,22 @@ public class VehVehicleInfoServiceImpl extends ServiceImpl<VehVehicleInfoMapper,
.eq(GpsManmachine::getUserId, bo.getId()));
return baseMapper.update(new LambdaUpdateWrapper<VehVehicleInfo>().set(VehVehicleInfo::getClientId,null).eq(VehVehicleInfo::getId,bo.getId()));
}
/**
* 通过车辆id获取车辆的当前行程信息
* @param id
* @return
*/
@Override
public VehVehicleTripVo getTripInfo(Long id) {
VehVehicleInfoVo vehVehicleInfoVo = baseMapper.selectVoById(id);
if (vehVehicleInfoVo == null) {
throw new ServiceException("车辆信息为空");
}
if (!VehVehicleInfoStatusEnum.IN_USE.getValue().equals(vehVehicleInfoVo.getVehicleStatus())){
return null;
}
return vehVehicleTripService.getTripInfoByVehicleId(id);
}
}

View File

@ -476,6 +476,14 @@ public class VehVehicleTripServiceImpl extends ServiceImpl<VehVehicleTripMapper,
return baseMapper.getTripId(id);
}
@Override
public VehVehicleTripVo getTripInfoByVehicleId(Long id) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<VehVehicleTrip>()
.eq(VehVehicleTrip::getVehicleId, id)
.orderByDesc(VehVehicleTrip::getCreateTime)
.last("limit 1"));
}
/**
* 构建用户行程及其对应申请的展示列表
*

View File

@ -0,0 +1,27 @@
package org.dromara.websocket.websocket.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import java.math.BigDecimal;
@Data
public class VehicleVo {
/**
* 纬度精确到6位小数
*/
@ExcelProperty(value = "纬度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "精=确到6位小数")
private BigDecimal locLatitude;
/**
* 经度精确到6位小数
*/
@ExcelProperty(value = "经度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "精=确到6位小数")
private BigDecimal locLongitude;
}

View File

@ -0,0 +1,227 @@
package org.dromara.websocket.websocket.service;
import cn.hutool.json.JSONUtil;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.dromara.bigscreen.service.ProjectBigScreenService;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.gps.domain.bo.GpsEquipmentSonBo;
import org.dromara.gps.domain.vo.GpsEquipmentSonVo;
import org.dromara.gps.service.IGpsEquipmentSonService;
import org.dromara.websocket.websocket.domain.vo.VehicleVo;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
/**
* 车辆轨迹 WebSocket 服务端(支持订阅消息)
* 端点路径:/websocket/vehicle
*/
@Slf4j
@ServerEndpoint("/websocket/vehicle") // 客户端连接时需携带订阅ID参数ws://xxx/websocket/vehicle?subscriptionId=xxx
@Component
public class VehicleWebSocketServer {
// 1. 存储所有在线会话sessionId -> Session
private static final Map<String, Session> ONLINE_SESSIONS = new ConcurrentHashMap<>();
// 2. 核心订阅ID与会话的映射subscriptionId -> Session
private static final Map<String, Session> SUBSCRIPTION_SESSIONS = new ConcurrentHashMap<>();
// 3. 反向映射会话ID与订阅ID的映射用于断开连接时清理订阅关系
private static final Map<String, String> SESSION_TO_SUBSCRIPTION = new ConcurrentHashMap<>();
// 当前会话对应的订阅ID每个连接实例的专属变量
private String currentSubscriptionId;
static {
log.info("✅ 车辆轨迹 WebSocket 服务端已随项目启动初始化!端点路径:/websocket/vehicle");
}
/**
* 客户端连接时触发解析订阅ID并建立映射关系
*/
@OnOpen
public void onOpen(Session session) {
// 从连接URL的查询参数中获取订阅ID客户端连接格式ws://xxx/websocket/vehicle?subscriptionId=123
Map<String, List<String>> params = session.getRequestParameterMap();
List<String> subscriptionIds = params.get("subscriptionId");
if (subscriptionIds != null && !subscriptionIds.isEmpty()) {
this.currentSubscriptionId = subscriptionIds.get(0); // 取第一个订阅ID
// 建立映射关系
SUBSCRIPTION_SESSIONS.put(currentSubscriptionId, session);
SESSION_TO_SUBSCRIPTION.put(session.getId(), currentSubscriptionId);
log.info("📌 客户端订阅成功订阅ID{}会话ID{},当前订阅数:{}",
currentSubscriptionId, session.getId(), SUBSCRIPTION_SESSIONS.size());
} else {
log.warn("📌 客户端连接未携带订阅ID会话ID{}", session.getId());
}
// 存储会话到在线列表
ONLINE_SESSIONS.put(session.getId(), session);
log.info("📌 客户端连接成功会话ID{},当前在线数:{}", session.getId(), ONLINE_SESSIONS.size());
// 异步推送初始化数据(原有逻辑保留)
CompletableFuture.runAsync(() -> {
try {
String[] split = currentSubscriptionId.split("-");
IGpsEquipmentSonService service = SpringUtils.getBean(IGpsEquipmentSonService.class);
GpsEquipmentSonBo bo = new GpsEquipmentSonBo();
bo.setUserId(Long.parseLong(split[0]));
bo.setTripId(Long.parseLong(split[1]));
List<GpsEquipmentSonVo> list = service.getNewVehicleList(bo);
if (list == null || list.isEmpty()) {
session.getBasicRemote().sendText("初始化数据为空");
log.warn("会话[{}]未获取到初始化数据", session.getId());
return;
}
List<VehicleVo> vehicleVos = new ArrayList<>();
for (GpsEquipmentSonVo ueClient : list) {
VehicleVo vo = new VehicleVo();
vo.setLocLatitude(ueClient.getLocLatitude());
vo.setLocLongitude(ueClient.getLocLongitude());
vehicleVos.add(vo);
}
session.getBasicRemote().sendText(JSONUtil.toJsonStr(vehicleVos));
log.info("📤 已向会话[{}]推送初始化数据,长度:{}字节", session.getId(), vehicleVos.size());
} catch (Exception e) {
log.error("会话[{}]初始化数据处理失败", session.getId(), e);
try {
if (session.isOpen()) {
session.getBasicRemote().sendText("初始化失败:" + e.getMessage());
}
} catch (IOException ex) {
log.error("会话[{}]推送错误信息失败", session.getId(), ex);
}
}
});
}
/**
* 接收客户端消息
*/
@OnMessage
public void onMessage(String message, Session session) {
log.info("📥 收到会话[{}]订阅ID{})消息:{}", session.getId(), currentSubscriptionId, message);
// 可选:回复客户端
try {
session.getBasicRemote().sendText("服务端已收到消息:" + message);
} catch (IOException e) {
log.error("📤 回复会话[{}]失败:{}", session.getId(), e.getMessage());
}
}
/**
* 客户端断开连接(清理订阅关系)
*/
@OnClose
public void onClose(Session session, CloseReason reason) {
// 1. 移除在线会话
ONLINE_SESSIONS.remove(session.getId());
// 2. 清理订阅关系
String subscriptionId = SESSION_TO_SUBSCRIPTION.get(session.getId());
if (subscriptionId != null) {
SUBSCRIPTION_SESSIONS.remove(subscriptionId);
SESSION_TO_SUBSCRIPTION.remove(session.getId());
log.info("🔌 客户端订阅关系已清除订阅ID{}会话ID{}", subscriptionId, session.getId());
}
log.info("🔌 客户端断开连接会话ID{},原因:{},当前在线数:{},当前订阅数:{}",
session.getId(), reason.getReasonPhrase(),
ONLINE_SESSIONS.size(), SUBSCRIPTION_SESSIONS.size());
}
/**
* 连接异常
*/
@OnError
public void onError(Session session, Throwable error) {
log.error("⚠️ 会话[{}]订阅ID{})异常:{}", session.getId(), currentSubscriptionId, error.getMessage(), error);
}
// ------------------------------ 订阅消息发送工具方法(供外部调用) ------------------------------
/**
* 向指定订阅ID的客户端发送消息
* @param subscriptionId 订阅ID
* @param message 消息内容
* @return 是否发送成功
*/
public static boolean sendToSubscription(String subscriptionId, String message) {
if (subscriptionId == null || message == null) {
log.warn("⚠️ 订阅ID或消息为空发送失败");
return false;
}
// 从订阅映射中获取目标会话
Session session = SUBSCRIPTION_SESSIONS.get(subscriptionId);
if (session == null || !session.isOpen()) {
log.warn("⚠️ 订阅ID[{}]对应的客户端未连接或已断开", subscriptionId);
return false;
}
// 发送消息
try {
session.getBasicRemote().sendText(message);
log.info("📤 已向订阅ID[{}]发送消息:{}", subscriptionId, message);
return true;
} catch (IOException e) {
log.error("📤 向订阅ID[{}]发送消息失败", subscriptionId, e);
return false;
}
}
/**
* 向所有订阅客户端广播消息
* @param message 消息内容
*/
public static void broadcastToAllSubscriptions(String message) {
if (SUBSCRIPTION_SESSIONS.isEmpty()) {
log.warn("⚠️ 无订阅客户端,无需广播消息");
return;
}
SUBSCRIPTION_SESSIONS.forEach((subscriptionId, session) -> {
if (session.isOpen()) {
try {
session.getBasicRemote().sendText(message);
log.info("📤 已向订阅ID[{}]广播消息", subscriptionId);
} catch (IOException e) {
log.error("📤 向订阅ID[{}]广播消息失败", subscriptionId, e);
}
}
});
}
/**
* 获取当前订阅数
*/
public static int getSubscriptionCount() {
return SUBSCRIPTION_SESSIONS.size();
}
// 原有工具方法保留
public static void sendToAll(String message) {
if (ONLINE_SESSIONS.isEmpty()) {
log.warn("⚠️ 无在线客户端,无需发送消息");
return;
}
ONLINE_SESSIONS.values().forEach(session -> {
if (session.isOpen()) {
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
log.error("📤 向会话[{}]发送消息失败:{}", session.getId(), e.getMessage());
}
}
});
}
public static int getOnlineCount() {
return ONLINE_SESSIONS.size();
}
}

View File

@ -10,6 +10,10 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.dto.QuerBiddingManagementDto;
import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.QueryListXzdVo;
import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBidPreProjectService;
import org.dromara.xzd.biddingManagement.earnestMoney.domain.bo.XzdBidDepositPaymentBo;
import org.dromara.xzd.biddingManagement.earnestMoney.domain.vo.XzdBidDepositPaymentByBqlx;
import org.dromara.xzd.biddingManagement.earnestMoney.domain.vo.XzdBidDepositPaymentVo;
import org.dromara.xzd.biddingManagement.earnestMoney.service.IXzdBidDepositPaymentService;
import org.dromara.xzd.biddingManagement.earnestMoneyWithdraw.domain.bo.XzdBidDepositRecoveryBo;
import org.dromara.xzd.biddingManagement.earnestMoneyWithdraw.domain.vo.XzdBidDepositRecoveryVo;
import org.dromara.xzd.biddingManagement.earnestMoneyWithdraw.domain.vo.XzdBidDepositRecoveryXqVo;
@ -43,6 +47,8 @@ public class XzdBidDepositRecoveryController extends BaseController {
private final IXzdBidDepositRecoveryService xzdBidDepositRecoveryService;
private final IXzdBidPreProjectService xzdBidPreProjectService;
private final IXzdBidDepositPaymentService xzdBidDepositPaymentService;
/**
* 查询投标保证金收回列表
@ -119,4 +125,26 @@ public class XzdBidDepositRecoveryController extends BaseController {
public QueryListXzdVo list(QuerBiddingManagementDto bo, PageQuery pageQuery) {
return xzdBidPreProjectService.queryPageList(bo, pageQuery);
}
/**
* 查询投标保证金缴纳列表
*/
@SaCheckPermission(value = {"biddingManagement:bidDepositRecovery:list","biddingManagement:bidDepositRecovery:add","biddingManagement:bidDepositRecovery:edit"},mode = SaMode.OR)
@GetMapping("/getxzdBidDepositPayment")
public TableDataInfo<XzdBidDepositPaymentVo> list(XzdBidDepositPaymentBo bo, PageQuery pageQuery) {
return xzdBidDepositPaymentService.queryPageList(bo, pageQuery);
}
/**
* 获取投标保证金缴纳详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"biddingManagement:bidDepositRecovery:list","biddingManagement:bidDepositRecovery:add","biddingManagement:bidDepositRecovery:edit"},mode = SaMode.OR)
@GetMapping("/get/{id}")
public R<XzdBidDepositPaymentByBqlx> getInfoxzdBidDeposit(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdBidDepositPaymentService.queryById(id));
}
}

View File

@ -15,7 +15,9 @@ import org.dromara.xzd.comprehensive.service.IXzdCsContractChangeService;
import org.dromara.xzd.comprehensive.service.IXzdCsContractSuspendService;
import org.dromara.xzd.domain.bo.XzdBusinessSealBo;
import org.dromara.xzd.domain.vo.XzdBusinessSealVo;
import org.dromara.xzd.domain.vo.XzdProjectVo;
import org.dromara.xzd.service.IXzdBusinessSealService;
import org.dromara.xzd.service.IXzdProjectService;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
@ -55,6 +57,23 @@ public class XzdCsContractInformationController extends BaseController {
@Lazy
private final IXzdCsContractChangeService xzdCsContractChangeService;
@Lazy
private final IXzdProjectService xzdProjectService;
/**
* 获取项目信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"comprehensive:csContractInformation:add","comprehensive:csContractInformation:edit","comprehensive:csContractInformation:list"},mode = SaMode.OR)
@GetMapping("/getProject/{id}")
public R<XzdProjectVo> getProjectInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdProjectService.queryById(id));
}
/**
* 查询综合服务合同变更列表

View File

@ -138,6 +138,19 @@ public class XzdSubcontractChangeController extends BaseController {
}
/**
* 获取分包合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value={"fenbaohetongbiangg:subcontractChange:list","fenbaohetongbiangg:subcontractChange:add","fenbaohetongbiangg:subcontractChange:edit"}, mode = SaMode.OR)
@GetMapping("/xx/{id}")
public R<XzdSubcontractVo> getInfoxx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractService.queryById(id));
}
}

View File

@ -7,10 +7,17 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.bo.XzdSubcontractChangeBo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo.XzdSubcontractChangeVo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.service.IXzdSubcontractChangeService;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdJdztVo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.bo.XzdSubcontractTerminationBo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.vo.XzdSubcontractTerminationVo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.service.IXzdSubcontractTerminationService;
import org.dromara.xzd.domain.bo.XzdBusinessSealBo;
import org.dromara.xzd.domain.vo.XzdBusinessSealVo;
import org.dromara.xzd.service.IXzdBusinessSealService;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -43,6 +50,56 @@ public class XzdSubcontractController extends BaseController {
private final IXzdBusinessSealService xzdBusinessSealService;
@Lazy
private final IXzdSubcontractChangeService xzdSubcontractChangeService;
@Lazy
private final IXzdSubcontractTerminationService xzdSubcontractTerminationService;
/**
* 查询分包合同终止列表
*/
@SaCheckPermission(value={"fenbaohetongxinxi:subcontract:list","fenbaohetongxinxi:subcontract:add","fenbaohetongxinxi:subcontract:edit"}, mode = SaMode.OR)
@GetMapping("/listzz")
public TableDataInfo<XzdSubcontractTerminationVo> list(XzdSubcontractTerminationBo bo, PageQuery pageQuery) {
return xzdSubcontractTerminationService.queryPageList(bo, pageQuery);
}
/**
* 查询分包合同变更列表
*/
@SaCheckPermission(value={"fenbaohetongxinxi:subcontract:list","fenbaohetongxinxi:subcontract:add","fenbaohetongxinxi:subcontract:edit"}, mode = SaMode.OR)
@GetMapping("/listbg")
public TableDataInfo<XzdSubcontractChangeVo> list(XzdSubcontractChangeBo bo, PageQuery pageQuery) {
return xzdSubcontractChangeService.queryPageList(bo, pageQuery);
}
/**
* 获取分包合同变更详细信息
*
* @param id 主键
*/
@SaCheckPermission(value={"fenbaohetongxinxi:subcontract:list","fenbaohetongxinxi:subcontract:add","fenbaohetongxinxi:subcontract:edit"}, mode = SaMode.OR)
@GetMapping("/bg/{id}")
public R<XzdSubcontractChangeVo> getInfobg(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractChangeService.queryById(id));
}
/**
* 获取分包合同终止详细信息
*
* @param id 主键
*/
@SaCheckPermission(value={"fenbaohetongxinxi:subcontract:list","fenbaohetongxinxi:subcontract:add","fenbaohetongxinxi:subcontract:edit"}, mode = SaMode.OR)
@GetMapping("/zz/{id}")
public R<XzdSubcontractTerminationVo> getInfozz(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractTerminationService.queryById(id));
}
/**
* 查询印章帮助列表
*/

View File

@ -134,4 +134,19 @@ public class XzdSubcontractTerminationController extends BaseController {
public TableDataInfo<XzdSubcontractVo> list(XzdSubcontractBo bo, PageQuery pageQuery) {
return xzdSubcontractService.queryPageList(bo, pageQuery);
}
/**
* 获取分包合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value={"fenbaohetongzhongzhi:subcontractTermination:list","fenbaohetongzhongzhi:subcontractTermination:add","fenbaohetongzhongzhi:subcontractTermination:edit"}, mode = SaMode.OR)
@GetMapping("/xx/{id}")
public R<XzdSubcontractVo> getInfoxx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractService.queryById(id));
}
}

View File

@ -7,6 +7,12 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.bo.XzdPurchaseContractSuspendBo;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.vo.XzdPurchaseContractSuspendVo;
import org.dromara.xzd.contractManagement.caigoucontractTermination.service.IXzdPurchaseContractSuspendService;
import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.bo.XzdPurchaseContractAlterationBo;
import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.vo.XzdPurchaseContractAlterationVo;
import org.dromara.xzd.contractManagement.caigouhetongbiangeng.service.IXzdPurchaseContractAlterationService;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdJdztVo;
import org.dromara.xzd.contractManagement.purchaseManagement.domain.bo.XzdPurchaseContractInformationBo;
import org.dromara.xzd.contractManagement.purchaseManagement.domain.vo.XzdJdztCghtVo;
@ -15,6 +21,7 @@ import org.dromara.xzd.contractManagement.purchaseManagement.service.IXzdPurchas
import org.dromara.xzd.domain.bo.XzdBusinessSealBo;
import org.dromara.xzd.domain.vo.XzdBusinessSealVo;
import org.dromara.xzd.service.IXzdBusinessSealService;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -45,6 +52,55 @@ public class XzdPurchaseContractInformationController extends BaseController {
private final IXzdBusinessSealService xzdBusinessSealService;
@Lazy
private final IXzdPurchaseContractAlterationService xzdPurchaseContractAlterationService;
@Lazy
private final IXzdPurchaseContractSuspendService xzdPurchaseContractSuspendService;
/**
* 获取采购合同终止详细信息
*
* @param id 主键
*/
@SaCheckPermission(value={"contractManagement:purchaseContractInformation:list","contractManagement:purchaseContractInformation:add","contractManagement:purchaseContractInformation:edit"}, mode = SaMode.OR)
@GetMapping("/zz/{id}")
public R<XzdPurchaseContractSuspendVo> getInfozz(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdPurchaseContractSuspendService.queryById(id));
}
/**
* 查询采购合同终止列表
*/
@SaCheckPermission(value={"contractManagement:purchaseContractInformation:list","contractManagement:purchaseContractInformation:add","contractManagement:purchaseContractInformation:edit"}, mode = SaMode.OR)
@GetMapping("/listzz")
public TableDataInfo<XzdPurchaseContractSuspendVo> list(XzdPurchaseContractSuspendBo bo, PageQuery pageQuery) {
return xzdPurchaseContractSuspendService.queryPageList(bo, pageQuery);
}
/**
* 查询采购合同变更列表
*/
@SaCheckPermission(value={"contractManagement:purchaseContractInformation:list","contractManagement:purchaseContractInformation:add","contractManagement:purchaseContractInformation:edit"}, mode = SaMode.OR)
@GetMapping("/listbg")
public TableDataInfo<XzdPurchaseContractAlterationVo> list(XzdPurchaseContractAlterationBo bo, PageQuery pageQuery) {
return xzdPurchaseContractAlterationService.queryPageList(bo, pageQuery);
}
/**
* 获取采购合同变更详细信息
*
* @param id 主键
*/
@SaCheckPermission(value={"contractManagement:purchaseContractInformation:list","contractManagement:purchaseContractInformation:add","contractManagement:purchaseContractInformation:edit"}, mode = SaMode.OR)
@GetMapping("/xx/{id}")
public R<XzdPurchaseContractAlterationVo> getInfoxx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdPurchaseContractAlterationService.queryById(id));
}
/**
* 查询印章帮助列表
*/

View File

@ -43,6 +43,10 @@ public class XzdContractDetailsController extends BaseController {
private final IXzdContractChangeService xzdContractChangeService;
private final IXzdContractTerminationService xzdContractTerminationService;
/**
* 查询承包合同信息列表
*/

View File

@ -11,8 +11,11 @@ import org.dromara.xzd.domain.dto.XzdClienteleListDto;
import org.dromara.xzd.domain.vo.XzdClienteleListSumVo;
import org.dromara.xzd.domain.vo.XzdCustomertypeVo;
import org.dromara.xzd.domain.vo.XzdPoiAreaVo;
import org.dromara.xzd.domain.vo.XzdProjectVo;
import org.dromara.xzd.service.IXzdCorrespondentList;
import org.dromara.xzd.service.IXzdCustomertypeService;
import org.dromara.xzd.service.IXzdProjectService;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -32,6 +35,9 @@ public class XzdCorrespondentList {
private final IXzdCustomertypeService iXzdCustomertypeService;
/**
* 查询区域列表
*/
@ -51,6 +57,9 @@ public class XzdCorrespondentList {
}
/**
* 客户信息修改
*/

View File

@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.annotation.TranslationType;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.domain.XzdProject;
@ -125,6 +126,7 @@ public class XzdProjectVo implements Serializable {
/**
* 管理组织名
*/
@Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "managementOrganization")
private String managementOrganizationName;
/**
@ -158,6 +160,8 @@ public class XzdProjectVo implements Serializable {
@ExcelProperty(value = "项目责任人")
private Long managerResponsible;
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "managerResponsible")
private String managerResponsibleName;
/**

View File

@ -2,10 +2,14 @@ package org.dromara.xzd.publicUrl;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.lang.tree.Tree;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.domain.vo.SysUserVo;
@ -14,20 +18,17 @@ import org.dromara.system.service.ISysUserService;
import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.dto.QuerBiddingManagementDto;
import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.QueryListXzdVo;
import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBidPreProjectService;
import org.dromara.xzd.domain.bo.XzdBusinessSealBo;
import org.dromara.xzd.domain.bo.XzdProjectBo;
import org.dromara.xzd.domain.bo.XzdSupplierInfoBo;
import org.dromara.xzd.domain.bo.XzdSupplierOpenBankBo;
import org.dromara.xzd.domain.dto.XzdClienteleListDto;
import org.dromara.xzd.domain.vo.XzdClienteleListSumVo;
import org.dromara.xzd.domain.vo.XzdProjectVo;
import org.dromara.xzd.domain.vo.XzdSupplierInfoVo;
import org.dromara.xzd.domain.vo.XzdSupplierOpenBankVo;
import org.dromara.xzd.service.IXzdCorrespondentList;
import org.dromara.xzd.service.IXzdProjectService;
import org.dromara.xzd.service.IXzdSupplierInfoService;
import org.dromara.xzd.service.IXzdSupplierOpenBankService;
import org.dromara.xzd.domain.vo.*;
import org.dromara.xzd.service.*;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -60,6 +61,14 @@ public class XzdPublicUrlConreoller {
private final ISysDeptService iSysDeptService;
private final IXzdBusinessSealService xzdBusinessSealService;
private final ISysDeptService deptService;
/**
* 查询项目信息列表
@ -107,22 +116,72 @@ public class XzdPublicUrlConreoller {
}
// /**
// * 获取用户列表
// */
/**
* 获取用户列表
*/
@GetMapping("/userList")
public TableDataInfo<SysUserVo> list(SysUserBo user, PageQuery pageQuery) {
return userService.selectPageUserList(user, pageQuery);
}
// /**
// * 查询部门
// */
/**
* 获取部门树列表
*/
@GetMapping("/deptTree")
public R<List<Tree<Long>>> deptTree(SysDeptBo dept) {
return R.ok(deptService.selectDeptTreeList(dept));
}
/**
* 查询部门
*/
// @GetMapping("/listDept")
// public R<List<SysDeptVo>> list() {
// List<SysDeptVo> list = iSysDeptService.querListDept();
// return R.ok(list);
// }
@GetMapping("/listDept")
public R<List<SysDeptVo>> list() {
List<SysDeptVo> list = iSysDeptService.querListDept();
return R.ok(list);
public R<List<SysDeptVo>> list(SysDeptBo dept) {
List<SysDeptVo> depts = deptService.selectDeptList(dept);
return R.ok(depts);
}
/**
* 获取供应商信息详细信息
*
* @param id 主键
*/
@GetMapping("/xzdSupplier/{id}")
public R<XzdSupplierInfoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSupplierInfoService.queryById(id));
}
/**
* 查询印章帮助列表
*/
@GetMapping("/listBusinss")
public TableDataInfo<XzdBusinessSealVo> list(XzdBusinessSealBo bo, PageQuery pageQuery) {
return xzdBusinessSealService.queryPageList(bo, pageQuery);
}
/**
* 项目信息查询
*/
@GetMapping("/xmxx/{id}")
public R<List<XzdProjectVo>> getXmxx( @PathVariable Long id) {
return R.ok(xzdProjectService.getXmxx(id));
}
}

View File

@ -1,5 +1,6 @@
package org.dromara.xzd.service;
import org.dromara.common.core.domain.R;
import org.dromara.xzd.domain.vo.XzdProjectVo;
import org.dromara.xzd.domain.bo.XzdProjectBo;
import org.dromara.xzd.domain.XzdProject;
@ -69,4 +70,12 @@ public interface IXzdProjectService extends IService<XzdProject>{
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
String queryNameById(Long projectId);
/**
* 查询项目信息
*
* @param id 主键
* @return 项目信息
*/
List<XzdProjectVo> getXmxx(Long id);
}

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.domain.event.ProcessTaskEvent;
@ -513,6 +514,13 @@ public class XzdProjectServiceImpl extends ServiceImpl<XzdProjectMapper, XzdProj
return xzdProject != null ? xzdProject.getProjectName() : "";
}
@Override
public List<XzdProjectVo> getXmxx(Long id) {
List<XzdProjectVo> xzdProjectVos = this.getBaseMapper().selectVoList(new LambdaQueryWrapper<>(new XzdProject()).eq(XzdProject::getConstructionUnit, id));
return xzdProjectVos;
}
public void setValue(XzdProjectVo entity){
if (entity != null) {
//项目概况

View File

@ -65,6 +65,19 @@ public class SettlementOfSubcontractingContractController extends BaseController
return xzdSubcontractService.queryPageList(bo, pageQuery);
}
/**
* 获取分包合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"fenbaohetongjingdu:ofSubcontractingContract:list","fenbaohetongjingdu:ofSubcontractingContract:add","fenbaohetongjingdu:ofSubcontractingContract:edit"},mode = SaMode.OR)
@GetMapping("/xx/{id}")
public R<XzdSubcontractVo> getInfoxx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractService.queryById(id));
}
/**
* 查询分包合同进度结算列表
*/

View File

@ -65,6 +65,19 @@ public class SettlementOfSubcontractingCompletionController extends BaseControll
return settlementOfSubcontractingCompletionService.queryPageList(bo, pageQuery);
}
/**
* 获取分包合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"fenbaohetongjungong:ofSubcontractingCompletion:list","fenbaohetongjungong:ofSubcontractingCompletion:add","fenbaohetongjungong:ofSubcontractingCompletion:edit"},mode = SaMode.OR)
@GetMapping("/xx/{id}")
public R<XzdSubcontractVo> getInfoxx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractService.queryById(id));
}
/**
* 导出分包合同竣工结算列表
*/

View File

@ -57,6 +57,18 @@ public class SettlementOfSubcontractingAdjustmentController extends BaseControll
// return xzdSubcontractService.queryPageList(bo, pageQuery);
// }
/**
* 获取分包合同竣工结算详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"fenbaohetongtiaozheng:ofSubcontractingAdjustment:list","fenbaohetongtiaozheng:ofSubcontractingAdjustment:add","fenbaohetongtiaozheng:ofSubcontractingAdjustment:edit"},mode = SaMode.OR)
@GetMapping("/jg/{id}")
public R<SettlementOfSubcontractingCompletionVo> getInfojg(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(settlementOfSubcontractingCompletionService.queryById(id));
}
/**
* 查询分包合同竣工结算列表

View File

@ -3,10 +3,20 @@ package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import org.dromara.xzd.domain.bo.XzdContractDetailsBo;
import org.dromara.xzd.domain.vo.XzdContractDetailsVo;
import org.dromara.xzd.domain.vo.XzdProjectVo;
import org.dromara.xzd.service.IXzdContractDetailsService;
import org.dromara.xzd.service.IXzdProjectService;
import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.FinancialRevenueExpenditurePlanBo;
import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.FinancialRevenueExpenditurePlanVo;
import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IFinancialRevenueExpenditurePlanService;
import org.hibernate.validator.internal.util.stereotypes.Lazy;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -37,6 +47,66 @@ public class FinancialRevenuePlanAlterationController extends BaseController {
private final IFinancialRevenuePlanAlterationService financialRevenuePlanAlterationService;
private final IFinancialRevenueExpenditurePlanService financialRevenueExpenditurePlanService;
private final IXzdContractDetailsService xzdContractDetailsService;
@Lazy
private final IXzdProjectService xzdProjectService;
/**
* 获取项目信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"yueduzijinbiangeng:revenuePlanAlteration:list","yueduzijinbiangeng:revenuePlanAlteration:add","yueduzijinbiangeng:revenuePlanAlteration:edit"}, mode = SaMode.OR)
@GetMapping("/getProject/{id}")
public R<XzdProjectVo> getProjectInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdProjectService.queryById(id));
}
/**
* 查询月度资金计划列表
*/
@SaCheckPermission(value = {"yueduzijinbiangeng:revenuePlanAlteration:list","yueduzijinbiangeng:revenuePlanAlteration:add","yueduzijinbiangeng:revenuePlanAlteration:edit"}, mode = SaMode.OR)
@GetMapping("/getlist")
public TableDataInfo<FinancialRevenueExpenditurePlanVo> list(FinancialRevenueExpenditurePlanBo bo, PageQuery pageQuery) {
return financialRevenueExpenditurePlanService.queryPageList(bo, pageQuery);
}
/**
* 获取承包合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"yueduzijinbiangeng:revenuePlanAlteration:list","yueduzijinbiangeng:revenuePlanAlteration:add","yueduzijinbiangeng:revenuePlanAlteration:edit"}, mode = SaMode.OR)
@GetMapping("/cb/{id}")
public R<XzdContractDetailsVo> getInfocb(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdContractDetailsService.queryById(id));
}
/**
* 查询承包合同信息列表
*/
@SaCheckPermission(value = {"yueduzijinbiangeng:revenuePlanAlteration:list","yueduzijinbiangeng:revenuePlanAlteration:add","yueduzijinbiangeng:revenuePlanAlteration:edit"}, mode = SaMode.OR)
@GetMapping("/listcb")
public TableDataInfo<XzdContractDetailsVo> list(XzdContractDetailsBo bo, PageQuery pageQuery) {
return xzdContractDetailsService.queryPageList(bo, pageQuery);
}
/**
* 查询月度资金计划变更列表
*/

View File

@ -2,12 +2,19 @@ package org.dromara.xzd.zijinjihua.yueduzijinjihua.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.domain.bo.XzdContractDetailsBo;
import org.dromara.xzd.domain.vo.XzdContractDetailsVo;
import org.dromara.xzd.domain.vo.XzdProjectVo;
import org.dromara.xzd.service.IXzdContractDetailsService;
import org.dromara.xzd.service.IXzdProjectService;
import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IDetailOfEarningsService;
import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IStatementOfExpendituresService;
import org.hibernate.validator.internal.util.stereotypes.Lazy;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -39,6 +46,55 @@ public class FinancialRevenueExpenditurePlanController extends BaseController {
private final IFinancialRevenueExpenditurePlanService financialRevenueExpenditurePlanService;
private final IXzdContractDetailsService xzdContractDetailsService;
@Lazy
private final IXzdProjectService xzdProjectService;
/**
* 获取项目信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"yueduzijinjihua:revenueExpenditurePlan:list","yueduzijinjihua:revenueExpenditurePlan:add","yueduzijinjihua:revenueExpenditurePlan:edit"}, mode = SaMode.OR)
@GetMapping("/getProject/{id}")
public R<XzdProjectVo> getProjectInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdProjectService.queryById(id));
}
/**
* 获取承包合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"yueduzijinjihua:revenueExpenditurePlan:list","yueduzijinjihua:revenueExpenditurePlan:add","yueduzijinjihua:revenueExpenditurePlan:edit"}, mode = SaMode.OR)
@GetMapping("/cb/{id}")
public R<XzdContractDetailsVo> getInfocb(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdContractDetailsService.queryById(id));
}
/**
* 查询承包合同信息列表
*/
@SaCheckPermission(value = {"yueduzijinjihua:revenueExpenditurePlan:list","yueduzijinjihua:revenueExpenditurePlan:add","yueduzijinjihua:revenueExpenditurePlan:edit"}, mode = SaMode.OR)
@GetMapping("/listcb")
public TableDataInfo<XzdContractDetailsVo> list(XzdContractDetailsBo bo, PageQuery pageQuery) {
return xzdContractDetailsService.queryPageList(bo, pageQuery);
}
/**
* 查询月度资金计划列表
*/

View File

@ -57,6 +57,9 @@
<if test="dto.unifiedSocialCreditCode != null and dto.unifiedSocialCreditCode != ''">
AND a1.unified_social_credit_code = #{dto.unifiedSocialCreditCode}
</if>
<if test="dto.auditStatus != null and dto.auditStatus != ''">
AND a1.audit_status = #{dto.auditStatus}
</if>
<if test="dto.poiAreaId != null and dto.poiAreaId != ''">
AND a1.poi_area_id = #{dto.poiAreaId}
</if>