diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml index b8c2c198..ee05c0f2 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml @@ -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 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java index 222812cd..96462796 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java @@ -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)); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java index 6cbb98a2..0126b143 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java @@ -221,7 +221,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { return vo; } // 子项目id列表 - List subProjectIds = subProjectList.stream().map(BusProject::getId).toList(); + List 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 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 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 boxTransformerCategoryList = progressCategoryService.lambdaQuery() - .in(PgsProgressCategory::getProjectId, subProjectIds) + .in(PgsProgressCategory::getProjectId, projectIds) .like(PgsProgressCategory::getName, "箱变") .ne(PgsProgressCategory::getUnitType, PgsProgressUnitTypeEnum.NULL.getValue()) .list(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java index 46d54ef9..1ceca99e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java @@ -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 deviceList = ys7DeviceService.lambdaQuery() diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java index 42d93145..cf6d66c7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java @@ -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") diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceImgController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceImgController.java index 7b1a1358..4b8f29f5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceImgController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceImgController.java @@ -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 capture(@RequestBody OthYs7DeviceImgCaptureReq req) { + return toAjax(othYs7DeviceImgService.capturePic(req)); + } + /** * 删除萤石摄像头图片 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java new file mode 100644 index 00000000..69bdb7e9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java @@ -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; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java index 2b0e401d..70ffcc30 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java @@ -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 { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids); + + /** + * 抓拍图片 + * + * @param req 抓拍图片参数 + * @return 是否抓拍成功 + */ + Boolean capturePic(OthYs7DeviceImgCaptureReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java index a353401c..cf9465cc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java @@ -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 teamMeetings = teamMeetingService.lambdaQuery() .eq(HseTeamMeeting::getProjectId, projectId) .list(); - if (CollUtil.isEmpty(teamMeetings)) { - return gisVo; + if (CollUtil.isNotEmpty(teamMeetings)) { + // 获取最新的班组列表 + List topList = teamMeetings.stream() + .sorted(Comparator.comparing(HseTeamMeeting::getCreateTime).reversed()) + .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) + .toList(); + List teamIds = topList.stream().map(HseTeamMeeting::getTeamId).toList(); + Map> teamMap = projectTeamService.lambdaQuery() + .in(BusProjectTeam::getId, teamIds) + .list().stream().collect(Collectors.groupingBy(BusProjectTeam::getId)); + List 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 topList = teamMeetings.stream() - .sorted(Comparator.comparing(HseTeamMeeting::getCreateTime).reversed()) - .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) - .toList(); - List teamIds = topList.stream().map(HseTeamMeeting::getTeamId).toList(); - Map> teamMap = projectTeamService.lambdaQuery() - .in(BusProjectTeam::getId, teamIds) - .list().stream().collect(Collectors.groupingBy(BusProjectTeam::getId)); - List 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 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 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; } diff --git a/xinnengyuan/script/sql/bhbzj.sql b/xinnengyuan/script/sql/bhbzj.sql new file mode 100644 index 00000000..e69de29b diff --git a/xinnengyuan/script/sql/lxjcb.sql b/xinnengyuan/script/sql/lxjcb.sql new file mode 100644 index 00000000..6c8f1039 --- /dev/null +++ b/xinnengyuan/script/sql/lxjcb.sql @@ -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 (工作分解结构)';