添加抓拍,修改项目大屏

This commit is contained in:
lcj
2025-10-10 21:57:57 +08:00
parent 11b5908d8c
commit bb38b6a6e1
12 changed files with 433 additions and 36 deletions

View File

@ -297,7 +297,7 @@ dxf2GeoJson:
file-name: main.exe
ys7:
app-key: 3acf9f1a43dc4209841e0893003db0a2
app-secret: 4bbf3e9394f55d3af6e3af27b2d3db36
app-secret: 09e29c70ae1161fbc3ce2030fc09ba2e
#ys7:
# app-key: 081b0d6d5f7f4de8bc5c7fa350fb26ec
# app-secret: caa37b9f60ef02deb57e563bc190e6db

View File

@ -167,7 +167,7 @@ public class ProjectBigScreenController extends BaseController {
// vo.setContent(event.getContent());
// return vo;
// }).toList());
return R.ok(projectNewsService.getLimtVoByProjectId(projectId));
return R.ok(projectBigScreenService.getProjectNews(projectId));
}
/**

View File

@ -221,7 +221,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
return vo;
}
// 子项目id列表
List<Long> subProjectIds = subProjectList.stream().map(BusProject::getId).toList();
List<Long> projectIds = new ArrayList<>(subProjectList.stream().map(BusProject::getId).toList());
// 计算集电线路
vo.setCollectorLinePercentage(BigDecimal.valueOf(0.00));
// 计算送出线路
@ -235,8 +235,9 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
// 计算箱变
vo.setBoxTransformerPercentage(BigDecimal.ZERO);
// 获取集电线路、送出线路、升压站数据
projectIds.add(projectId);
List<PgsProgressCategory> progressCategoryList = progressCategoryService.lambdaQuery()
.in(PgsProgressCategory::getProjectId, subProjectIds)
.in(PgsProgressCategory::getProjectId, projectIds)
.in(PgsProgressCategory::getName, "集电线路", "送出线路", "升压站", "光伏场区")
.eq(PgsProgressCategory::getParentId, 0L)
.list();
@ -304,7 +305,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
}
// 计算道路
List<PgsProgressCategory> roadCategoryList = progressCategoryService.lambdaQuery()
.in(PgsProgressCategory::getProjectId, subProjectIds)
.in(PgsProgressCategory::getProjectId, projectIds)
.like(PgsProgressCategory::getName, "道路")
.ne(PgsProgressCategory::getUnitType, PgsProgressUnitTypeEnum.NULL.getValue())
.list();
@ -316,7 +317,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
}
// 计算箱变
List<PgsProgressCategory> boxTransformerCategoryList = progressCategoryService.lambdaQuery()
.in(PgsProgressCategory::getProjectId, subProjectIds)
.in(PgsProgressCategory::getProjectId, projectIds)
.like(PgsProgressCategory::getName, "箱变")
.ne(PgsProgressCategory::getUnitType, PgsProgressUnitTypeEnum.NULL.getValue())
.list();

View File

@ -26,7 +26,7 @@ import java.util.stream.Collectors;
* @date 2025/6/18 15:59
*/
@Slf4j
//@Component
@Component
public class IncSyncYs7DeviceCapturePicData {
@Resource
@ -43,8 +43,8 @@ public class IncSyncYs7DeviceCapturePicData {
private final ExecutorService executorService = Executors.newFixedThreadPool(5);
// 每 30 分钟执行一次
@Scheduled(cron = "0 */30 7-19 * * ?")
// 每 15 分钟执行一次
@Scheduled(cron = "0 */15 7-19 * * ?")
public void run() {
// 查询所有在线的摄像头设备,仅获取必要字段
List<OthYs7Device> deviceList = ys7DeviceService.lambdaQuery()

View File

@ -102,7 +102,7 @@ public class OthYs7DeviceController extends BaseController {
/**
* 修改萤石摄像头所属项目
*/
@SaCheckPermission("other:ys7Device:withProject")
@SaCheckPermission("other:ys7Device:edit")
@Log(title = "萤石摄像头", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/with/project")
@ -113,7 +113,7 @@ public class OthYs7DeviceController extends BaseController {
/**
* 修改萤石摄像头视频加密
*/
@SaCheckPermission("other:ys7Device:videoEncrypted")
@SaCheckPermission("other:ys7Device:edit")
@Log(title = "萤石摄像头", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/video/encrypted")

View File

@ -12,6 +12,7 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq;
import org.dromara.other.domain.vo.ys7deviceimg.OthYs7DeviceImgVo;
import org.dromara.other.service.IOthYs7DeviceImgService;
@ -66,6 +67,16 @@ public class OthYs7DeviceImgController extends BaseController {
return R.ok(othYs7DeviceImgService.queryById(id));
}
/**
* 萤石摄像头图片抓图
*/
@SaCheckPermission("other:ys7DeviceImg:capture")
@Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT)
@PostMapping("/capture")
public R<Void> capture(@RequestBody OthYs7DeviceImgCaptureReq req) {
return toAjax(othYs7DeviceImgService.capturePic(req));
}
/**
* 删除萤石摄像头图片
*

View File

@ -0,0 +1,24 @@
package org.dromara.other.domain.dto.ys7deviceimg;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lilemy
* @date 2025-10-10 19:14
*/
@Data
public class OthYs7DeviceImgCaptureReq implements Serializable {
@Serial
private static final long serialVersionUID = 678123111752523000L;
/**
* 设备序列号
*/
@NotBlank(message = "设备序列号不能为空")
private String deviceSerial;
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.other.domain.OthYs7DeviceImg;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCreateByCapture;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq;
import org.dromara.other.domain.vo.ys7deviceimg.OthYs7DeviceImgVo;
@ -93,4 +94,12 @@ public interface IOthYs7DeviceImgService extends IService<OthYs7DeviceImg> {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids);
/**
* 抓拍图片
*
* @param req 抓拍图片参数
* @return 是否抓拍成功
*/
Boolean capturePic(OthYs7DeviceImgCaptureReq req);
}

View File

@ -20,13 +20,17 @@ import org.dromara.manager.recognizermanager.enums.RecognizerTypeEnum;
import org.dromara.manager.recognizermanager.vo.RecognizeImageStreamResult;
import org.dromara.manager.recognizermanager.vo.RecognizeTargetVo;
import org.dromara.manager.recognizermanager.vo.RecognizeVo;
import org.dromara.manager.ys7manager.Ys7Manager;
import org.dromara.other.constant.Ys7DeviceImgConstant;
import org.dromara.other.domain.OthYs7Device;
import org.dromara.other.domain.OthYs7DeviceImg;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCreateByCapture;
import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq;
import org.dromara.other.domain.vo.ys7deviceimg.OthYs7DeviceImgVo;
import org.dromara.other.mapper.OthYs7DeviceImgMapper;
import org.dromara.other.service.IOthYs7DeviceImgService;
import org.dromara.other.service.IOthYs7DeviceService;
import org.dromara.safety.domain.dto.recognizerecord.HseRecognizeRecordCreateDto;
import org.dromara.safety.domain.enums.HseRecordCategoryEnum;
import org.dromara.safety.service.IHseRecognizeRecordService;
@ -62,6 +66,12 @@ public class OthYs7DeviceImgServiceImpl extends ServiceImpl<OthYs7DeviceImgMappe
@Resource
private IHseRecognizeRecordService recognizeRecordService;
@Resource
private IOthYs7DeviceService ys7DeviceService;
@Resource
private Ys7Manager ys7Manager;
/**
* 查询萤石摄像头图片
*
@ -317,6 +327,40 @@ public class OthYs7DeviceImgServiceImpl extends ServiceImpl<OthYs7DeviceImgMappe
return this.removeBatchByIds(ids);
}
/**
* 抓拍图片
*
* @param req 抓拍图片参数
* @return 是否抓拍成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean capturePic(OthYs7DeviceImgCaptureReq req) {
OthYs7Device ys7Device = ys7DeviceService.lambdaQuery()
.eq(OthYs7Device::getDeviceSerial, req.getDeviceSerial())
.last("limit 1")
.one();
if (ys7Device == null) {
throw new ServiceException("设备不存在", HttpStatus.ERROR);
}
String deviceSerial = ys7Device.getDeviceSerial();
// 如果没有预置位,则直接对默认通道抓图
OthYs7DeviceImgCreateByCapture img = new OthYs7DeviceImgCreateByCapture();
img.setProjectId(ys7Device.getProjectId());
img.setDeviceSerial(deviceSerial);
img.setDeviceName(ys7Device.getDeviceName());
try {
String url = ys7Manager.getCaptureDevicePic(deviceSerial, 1, 2);
img.setCreateTime(new Date());
img.setUrl(url);
} catch (Exception e) {
log.error("摄像头 {} 抓图失败:{}", deviceSerial, e.getMessage());
throw new ServiceException("摄像头 " + deviceSerial + " 抓图失败:" + e.getMessage(), HttpStatus.ERROR);
}
this.saveCapturePic(List.of(img));
return true;
}
/**
* 提取文件名
*

View File

@ -189,30 +189,34 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect
List<HseTeamMeeting> teamMeetings = teamMeetingService.lambdaQuery()
.eq(HseTeamMeeting::getProjectId, projectId)
.list();
if (CollUtil.isEmpty(teamMeetings)) {
return gisVo;
if (CollUtil.isNotEmpty(teamMeetings)) {
// 获取最新的班组列表
List<HseTeamMeeting> topList = teamMeetings.stream()
.sorted(Comparator.comparing(HseTeamMeeting::getCreateTime).reversed())
.limit(Optional.ofNullable(req.getPageSize()).orElse(20))
.toList();
List<Long> teamIds = topList.stream().map(HseTeamMeeting::getTeamId).toList();
Map<Long, List<BusProjectTeam>> teamMap = projectTeamService.lambdaQuery()
.in(BusProjectTeam::getId, teamIds)
.list().stream().collect(Collectors.groupingBy(BusProjectTeam::getId));
List<HseTeamMeetingGis> gisList = topList.stream().map(teamMeeting -> {
HseTeamMeetingGis gis = new HseTeamMeetingGis();
BeanUtils.copyProperties(teamMeeting, gis);
gis.setName("站班会");
if (teamMap.containsKey(teamMeeting.getTeamId())) {
gis.setTeamName(teamMap.get(teamMeeting.getTeamId()).getFirst().getTeamName());
}
return gis;
}).toList();
gisVo.setTeamMeetingList(gisList);
} else {
gisVo.setTeamMeetingList(new ArrayList<>());
}
// 获取最新的班组列表
List<HseTeamMeeting> topList = teamMeetings.stream()
.sorted(Comparator.comparing(HseTeamMeeting::getCreateTime).reversed())
.limit(Optional.ofNullable(req.getPageSize()).orElse(20))
.toList();
List<Long> teamIds = topList.stream().map(HseTeamMeeting::getTeamId).toList();
Map<Long, List<BusProjectTeam>> teamMap = projectTeamService.lambdaQuery()
.in(BusProjectTeam::getId, teamIds)
.list().stream().collect(Collectors.groupingBy(BusProjectTeam::getId));
List<HseTeamMeetingGis> gisList = topList.stream().map(teamMeeting -> {
HseTeamMeetingGis gis = new HseTeamMeetingGis();
BeanUtils.copyProperties(teamMeeting, gis);
gis.setName("站班会");
if (teamMap.containsKey(teamMeeting.getTeamId())) {
gis.setTeamName(teamMap.get(teamMeeting.getTeamId()).getFirst().getTeamName());
}
return gis;
}).toList();
// 获取整改情况
List<HseSafetyInspection> safetyInspectionList = this.lambdaQuery()
.eq(HseSafetyInspection::getProjectId, projectId).list();
.select(HseSafetyInspection::getId, HseSafetyInspection::getStatus, HseSafetyInspection::getIsReply)
.eq(HseSafetyInspection::getProjectId, projectId)
.list();
long passCount = 0L;
for (HseSafetyInspection safetyInspection : safetyInspectionList) {
if (HseSafetyInspectionStatusEnum.REVIEW.getValue().equals(safetyInspection.getStatus())
@ -220,11 +224,18 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect
passCount++;
}
}
gisVo.setTeamMeetingList(gisList);
int safetyInspectionCount = safetyInspectionList.stream()
.filter(inspection -> inspection.getIsReply().equals("2"))
.toList()
.size();
int correctSituationCount = safetyInspectionList.stream()
.filter(inspection -> inspection.getIsReply().equals("1") && !inspection.getStatus().equals("1"))
.toList()
.size();
gisVo.setTeamMeetingCount((long) teamMeetings.size());
gisVo.setSafetyInspectionCount((long) safetyInspectionList.size());
gisVo.setCorrectSituationCount(passCount);
gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / safetyInspectionList.size()));
gisVo.setSafetyInspectionCount((long) safetyInspectionCount);
gisVo.setCorrectSituationCount((long) correctSituationCount);
gisVo.setCorrectSituation(String.format("%.2f", correctSituationCount * 100.0 / safetyInspectionCount));
return gisVo;
}

View File

View File

@ -0,0 +1,297 @@
use xinnengyuandev;
CREATE TABLE `xzd_project_manager_approval`
(
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
`document_number` VARCHAR(50) NOT NULL COMMENT '单据编号',
`title` VARCHAR(255) NULL COMMENT '标题',
`record_date` DATE NULL COMMENT '日期',
`project_name` VARCHAR(255) NOT NULL COMMENT '项目名称',
`customer_name` VARCHAR(255) NULL COMMENT '客户名称',
`project_scale` VARCHAR(255) NULL COMMENT '项目规模',
`contract_amount` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '合同金额',
`prospective_manager_name` VARCHAR(100) NULL COMMENT '拟任项目经理',
`id_card_number` VARCHAR(30) NULL COMMENT '身份证号',
`education_level` VARCHAR(50) NULL COMMENT '教育程度',
`work_experience_years` DECIMAL(5, 1) NULL COMMENT '工作年限',
`professional_experience_years` DECIMAL(5, 1) NULL COMMENT '专业年限',
`contract_employment_type` VARCHAR(100) NULL COMMENT '合同用工形式',
`qualification_certificates` TEXT NULL COMMENT '资格证书',
`is_historical_data` varchar(16) NULL COMMENT '是否属于历史数据补录',
`file_id` varchar(1024) NULL COMMENT '文件ID',
`remark` TEXT NULL COMMENT '备注',
`audit_status` VARCHAR(32) default 'draft' NULL COMMENT '审核状态',
`create_by` bigint NULL COMMENT '创建者',
`update_by` bigint NULL COMMENT '更新者',
`create_dept` bigint NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间'
) COMMENT ='项目经理推荐及审批';
CREATE TABLE `xzd_project`
(
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
`project_number` VARCHAR(100) NOT NULL COMMENT '项目编号',
`project_name` VARCHAR(512) NOT NULL COMMENT '项目名称',
`project_abbreviation` VARCHAR(255) NULL COMMENT '项目简称',
`project_type` BIGINT NULL COMMENT '项目类型',
`project_status` VARCHAR(50) NULL COMMENT '项目状态',
`planned_start_date` DATE NULL COMMENT '计划开工日期',
`planned_completion_date` DATE NULL COMMENT '计划竣工日期',
`actual_start_date` DATE NULL COMMENT '实际开工日期',
`actual_completion_date` DATE NULL COMMENT '实际竣工日期',
`management_organization` VARCHAR(255) NULL COMMENT '管理组织',
`project_amount` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '项目金额',
`filing_manager` BIGINT NULL COMMENT '项目备案经理',
`manager_execution` BIGINT NULL COMMENT '项目执行经理',
`manager_responsible` BIGINT NULL COMMENT '项目责任人',
`winning_bid_amount` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '项目中标金额',
`planned_duration` INT NULL COMMENT '计划工期',
`actual_duration` INT NULL COMMENT '实际工期',
`default_financial_organization` VARCHAR(255) NULL COMMENT '默认财务组织',
`contracting_method` VARCHAR(100) NULL COMMENT '承包方式',
`involved_financial_organization` VARCHAR(255) NULL COMMENT '涉及财务组织',
`business_model` VARCHAR(64) NULL COMMENT '经营模式',
`construction_unit` VARCHAR(255) NULL COMMENT '建设单位',
`project_attribute` VARCHAR(64) NULL COMMENT '项目属性',
`group_project` VARCHAR(64) NULL COMMENT '集团项目',
`description` TEXT NULL COMMENT '说明',
`project_establishment_date` DATE NULL COMMENT '立项日期',
`planned_total_investment` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '计划总投资',
`gov_filing_project_name` VARCHAR(255) NULL COMMENT '政府备案项目名称',
`manager_execution_phone` VARCHAR(50) NULL COMMENT '项目执行经理电话',
`sharing_organization` VARCHAR(255) NULL COMMENT '共享组织',
`target_winning_bid_amount` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '目标中标金额',
`target_contract_amount` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '目标合同金额',
`target_output_value_amount` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '目标产值金额',
`target_collection_amount` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '目标收款金额',
`file_id` VARCHAR(1024) NULL COMMENT '文件ID',
`remark` TEXT NULL COMMENT '备注',
`audit_status` VARCHAR(32) default 'draft' NULL COMMENT '审核状态',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间'
) COMMENT ='项目信息';
CREATE TABLE `xzd_project_profile`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`country` VARCHAR(128) NULL COMMENT '国家',
`province` VARCHAR(128) NULL COMMENT '',
`city` VARCHAR(128) NULL COMMENT '城市',
`district` VARCHAR(128) NULL COMMENT '区县',
`project_address` VARCHAR(255) NOT NULL COMMENT '项目地址',
`building_area` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '建筑面积',
`building_area_unit` VARCHAR(64) NULL COMMENT '建筑面积单位',
`floor_count` DECIMAL(16, 2) DEFAULT 0.00 NULL COMMENT '层数',
`height` DECIMAL(20, 2) DEFAULT 0.0000 NULL COMMENT '高度(米)',
`parent_project_id` BIGINT NULL COMMENT '所属父级项目',
`contract_amount` DECIMAL(20, 2) DEFAULT 0.0000 NULL COMMENT '合同金额',
`quality_evaluation_grade` VARCHAR(128) NULL COMMENT '质量评价等级',
`safety_production_grade` VARCHAR(128) NULL COMMENT '安全生产等级',
`project_contract_record_number` VARCHAR(128) NULL COMMENT '工程合同备案号',
`project_profile` TEXT NULL COMMENT '项目概括',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_project_id` (`xzd_project_id`)
) COMMENT ='项目信息-项目概况';
CREATE TABLE `xzd_project_personnel`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`employee_id` VARCHAR(128) NULL COMMENT '员工号',
`employee_name` VARCHAR(128) NULL COMMENT '人员姓名',
`gender` VARCHAR(10) NULL COMMENT '性别',
`project_role` VARCHAR(128) NULL COMMENT '项目角色',
`project_post` VARCHAR(128) NULL COMMENT '项目岗位',
`archival_post` VARCHAR(128) NULL COMMENT '备案岗位',
`dept` VARCHAR(128) NULL COMMENT '部门',
`mobile_phone` VARCHAR(30) NULL COMMENT '手机',
`id_card_number` VARCHAR(64) NULL COMMENT '身份证',
`certificate_number` VARCHAR(128) NULL COMMENT '员工证书编号',
`certificate_name` VARCHAR(128) NULL COMMENT '员工证书名称',
`issuing_authority` VARCHAR(128) NULL COMMENT '发证机关',
`is_summary_flag` VARCHAR(16) NULL COMMENT '摘要标志',
`is_salary_paid` VARCHAR(16) NULL COMMENT '是否到薪',
`organization` VARCHAR(128) NULL COMMENT '组织',
`file_id` VARCHAR(1024) NULL COMMENT '文件ID',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_project_id` (`xzd_project_id`)
) COMMENT ='项目信息-项目人员';
CREATE TABLE `xzd_project_tax_info`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`tax_levy_method` VARCHAR(128) NULL COMMENT '计征方式',
`tax_levy_area` VARCHAR(128) NULL COMMENT '计征区域',
`advance_levy_rate` DECIMAL(5, 2) DEFAULT 0.00 NULL COMMENT '预征率',
`prepay_tax_organization` VARCHAR(255) NULL COMMENT '预缴税务机构',
`tax_organization` VARCHAR(255) NULL COMMENT '税务机构',
`invoice_type_issued` VARCHAR(128) NULL COMMENT '开具发票类型',
`receiving_email_account` VARCHAR(100) NULL COMMENT '收票邮箱账号',
`receiving_email_password` VARCHAR(255) NULL COMMENT '收票邮箱密码',
`is_realty_project` VARCHAR(16) NULL COMMENT '房地产项目',
`cumulative_invoicing` DECIMAL(20, 2) DEFAULT 0.00 NULL COMMENT '累计开票',
`cumulative_output_tax_amount` DECIMAL(5, 2) DEFAULT 0.00 NULL COMMENT '累计销项税额',
`already_deducted` DECIMAL(20, 2) DEFAULT 0.00 NULL COMMENT '已抵扣进项',
`value_add_tax` DECIMAL(5, 2) DEFAULT 0.00 NULL COMMENT '应缴纳增值税',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_project_id` (`xzd_project_id`)
) COMMENT ='项目信息-税务信息';
CREATE TABLE `xzd_project_accounting_info`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`fill_mode` VARCHAR(255) NULL COMMENT '填报模式',
`boq_mode` VARCHAR(16) NULL COMMENT '承包合同启用工程量清单模式控制',
`boq_control_subitem` VARCHAR(16) NULL COMMENT '工程量清单管控到定额子目',
`cost_calculation` VARCHAR(16) NULL COMMENT '是否启用成本测算',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_project_id` (`xzd_project_id`)
) COMMENT ='项目信息-核算信息';
CREATE TABLE `xzd_project_warehouses`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`warehouse_code` VARCHAR(100) NULL COMMENT '编号',
`warehouse_name` VARCHAR(255) NULL COMMENT '仓库名称',
`is_default` VARCHAR(16) NULL COMMENT '是否默认',
`remark` TEXT NULL COMMENT '备注',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_project_id` (`xzd_project_id`)
) COMMENT ='项目信息-项目仓库';
CREATE TABLE `xzd_project_internal_accounts`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`account_code` VARCHAR(100) NULL COMMENT '内部资金账户编码',
`account_name` VARCHAR(255) NULL COMMENT '内部资金账户名称',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_project_id` (`xzd_project_id`)
) COMMENT ='项目信息-内部资金账户';
CREATE TABLE `xzd_project_participating_units`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`unit_type` VARCHAR(128) NULL COMMENT '单位性质',
`unit_name` VARCHAR(255) NULL COMMENT '单位名称',
`total_investment` DECIMAL(20, 4) NULL COMMENT '投资总额',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_project_id` (`xzd_project_id`)
) COMMENT ='项目信息-参建单位';
CREATE TABLE `xzd_project_cbs`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`cbs_code` VARCHAR(128) NOT NULL COMMENT 'CBS编码',
`cbs_name` VARCHAR(255) NULL COMMENT 'CBS名称',
`subject_description` TEXT NULL COMMENT '科目说明',
`subject_short_code` VARCHAR(50) NULL COMMENT '科目简码',
`subject_attribute` VARCHAR(128) NULL COMMENT '科目属性',
`financial_subject_code` VARCHAR(128) NULL COMMENT '对应财务科目编码',
`financial_subject` VARCHAR(255) NULL COMMENT '对应财务科目',
`parent_cbs_id` BIGINT DEFAULT 0 NOT NULL COMMENT '父项目CBS编码',
`is_non_leaf` VARCHAR(16) NULL COMMENT '非末级编制标志',
`is_frozen` VARCHAR(16) NULL COMMENT '科目冻结标志',
`measurement_unit` VARCHAR(50) NULL COMMENT '计量单位',
`remark` TEXT NULL COMMENT '备注',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_project_cbs_code` (`xzd_project_id`, `cbs_code`)
) COMMENT ='项目CBS (成本分解结构)';
CREATE TABLE `xzd_project_wbs`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一ID',
`xzd_project_id` BIGINT NOT NULL COMMENT '关联的项目表ID',
`wbs_code` VARCHAR(128) NOT NULL COMMENT 'WBS编码',
`wbs_name` VARCHAR(255) NOT NULL COMMENT 'WBS名称',
`total_quantity` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '工程总量',
`measurement_unit` VARCHAR(64) NULL COMMENT '单位',
`unit_price` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '单价',
`total_price` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '工程总价',
`planned_start_time` DATE NULL COMMENT '计划开始时间',
`planned_end_time` DATE NULL COMMENT '计划结束时间',
`actual_start_time` DATE NULL COMMENT '实际开始时间',
`actual_end_time` DATE NULL COMMENT '实际结束时间',
`status` VARCHAR(64) NULL COMMENT '状态',
`progress` DECIMAL(5, 2) DEFAULT 0.00 NOT NULL COMMENT '进度',
`parent_wbs_id` BIGINT DEFAULT 0 NOT NULL COMMENT '父级WBS',
`enterprise_wbs_code` VARCHAR(128) NULL COMMENT '企业级WBS编码',
`enterprise_wbs_name` VARCHAR(255) NULL COMMENT '企业级WBS名称',
`accounting_type` VARCHAR(100) NULL COMMENT '核算类型',
`financial_account` VARCHAR(100) NULL COMMENT '对应财务科目',
`attribute` VARCHAR(100) NULL COMMENT '属性',
`income` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '收入',
`cost` DECIMAL(20, 4) DEFAULT 0.0000 NULL COMMENT '成本',
`national_standard_code` VARCHAR(100) NULL COMMENT '国标码',
`remark` TEXT NULL COMMENT '备注',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_project_wbs_code` (`xzd_project_id`, `wbs_code`)
) COMMENT ='项目WBS (工作分解结构)';