diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java index bb4c42cf..de5ae322 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java @@ -66,21 +66,25 @@ public class XzdProjectBo extends BaseEntity { /** * 计划开工日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date plannedStartDate; /** * 计划竣工日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date plannedCompletionDate; /** * 实际开工日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date actualStartDate; /** * 实际竣工日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date actualCompletionDate; /** @@ -263,4 +267,41 @@ public class XzdProjectBo extends BaseEntity { */ List cjdw; + /** + * 国家 + */ + private String gj; + + /** + * 省份 + */ + private String sheng; + + /** + * 区县 + */ + private String qx; + + /** + * 项目备案经理 + */ + private String xmbajl; + + /** + * 分页大小 + */ + private Integer pageSize; + + /** + * 当前页数 + */ + private Integer pageNum; + + /** + * 排序列 + */ + private String orderByColumn; + + private Integer offset; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java index 3ca81328..46663515 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java @@ -1,5 +1,6 @@ package org.dromara.xzd.domain.vo; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.xzd.domain.XzdProject; @@ -61,6 +62,8 @@ public class XzdProjectVo implements Serializable { @ExcelProperty(value = "项目类型") private Long projectType; + private String projectTypeName; + /** * 项目状态 */ @@ -109,12 +112,19 @@ public class XzdProjectVo implements Serializable { @ExcelProperty(value = "项目备案经理") private Long filingManager; + private String filingManagerName; + /** * 项目执行经理 */ @ExcelProperty(value = "项目执行经理") private Long managerExecution; + /** + * 项目执行经理名称 + */ + private String managerExecutionName; + /** * 项目责任人 */ @@ -221,25 +231,25 @@ public class XzdProjectVo implements Serializable { * 目标中标金额 */ @ExcelProperty(value = "目标中标金额") - private Long targetWinningBidAmount; + private BigDecimal targetWinningBidAmount; /** * 目标合同金额 */ @ExcelProperty(value = "目标合同金额") - private Long targetContractAmount; + private BigDecimal targetContractAmount; /** * 目标产值金额 */ @ExcelProperty(value = "目标产值金额") - private Long targetOutputValueAmount; + private BigDecimal targetOutputValueAmount; /** * 目标收款金额 */ @ExcelProperty(value = "目标收款金额") - private Long targetCollectionAmount; + private BigDecimal targetCollectionAmount; /** * 文件ID @@ -294,4 +304,39 @@ public class XzdProjectVo implements Serializable { */ List cjdw; + /** + * 项目地址 + */ + private String xmdz; + + /** + * 国家 + */ + private String gj; + + /** + * 省 + */ + private String sheng; + + /** + * 市 + */ + private String cs; + + /** + * 录入人 + */ + private String lrr; + + /** + * 录入时间 + */ + private Date createTime; + + /** + * 高度 + */ + private String gd; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/mapper/XzdProjectMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/mapper/XzdProjectMapper.java index 2f032906..0716f6d1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/mapper/XzdProjectMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/mapper/XzdProjectMapper.java @@ -1,8 +1,12 @@ package org.dromara.xzd.mapper; import org.dromara.xzd.domain.XzdProject; +import org.dromara.xzd.domain.bo.XzdProjectBo; import org.dromara.xzd.domain.vo.XzdProjectVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.springframework.data.repository.query.Param; + +import java.util.List; /** * 项目信息Mapper接口 @@ -12,4 +16,6 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface XzdProjectMapper extends BaseMapperPlus { + List search(@Param("bo") XzdProjectBo bo); + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java index 5430990f..ac90cc97 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java @@ -9,20 +9,20 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.xzd.domain.*; import org.dromara.xzd.domain.bo.*; -import org.dromara.xzd.domain.vo.XzdProjectAccountingInfoVo; +import org.dromara.xzd.domain.vo.*; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.dromara.xzd.domain.vo.XzdProjectVo; import org.dromara.xzd.mapper.XzdProjectMapper; import org.dromara.xzd.service.IXzdProjectService; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; /** * 项目信息Service业务层处理 @@ -53,6 +53,8 @@ public class XzdProjectServiceImpl extends ServiceImpl queryPageList(XzdProjectBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); +// LambdaQueryWrapper lqw = buildQueryWrapper(bo); +// Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if(pageQuery.getPageNum() != null && pageQuery.getPageSize() != null) { + bo.setPageNum(pageQuery.getPageNum()); + bo.setPageSize(pageQuery.getPageSize()); + }else { + bo.setPageNum(1); + bo.setPageSize(10); + } + + int i = (bo.getPageNum() - 1) * bo.getPageSize(); + bo.setOffset(i); + + List search = baseMapper.search(bo); + + return TableDataInfo.build(search); } /** @@ -212,11 +227,168 @@ public class XzdProjectServiceImpl extends ServiceImpl 0; + boolean b = baseMapper.updateById(update) > 0; + if (!b){ + return false; + } + + //项目概况处理 + if (bo.getXmgk() != null){ + xzdProjectProfileService.updateByBo(bo.getXmgk()); + } + + //项目人员处理 + //项目人员处理 - 更精确的更新方式 + if (bo.getXmry() != null && !bo.getXmry().isEmpty()){ + // 获取原有记录 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(XzdProjectPersonnel::getXzdProjectId, bo.getId()); + List existingPersonnel = xzdProjectPersonnelService.list(queryWrapper); + + // 提取现有ID集合 + Set existingIds = existingPersonnel.stream() + .map(XzdProjectPersonnel::getId) + .collect(Collectors.toSet()); + + // 处理新的或更新的记录 + Set processedIds = new HashSet<>(); + for (XzdProjectPersonnelBo personnelBo : bo.getXmry()) { + personnelBo.setXzdProjectId(update.getId()); + if (personnelBo.getId() != null && existingIds.contains(personnelBo.getId())) { + // 更新已有记录 + xzdProjectPersonnelService.updateByBo(personnelBo); + processedIds.add(personnelBo.getId()); + } else { + // 新增记录 + personnelBo.setId(null); // 确保是新增而不是更新 + xzdProjectPersonnelService.insertByBo(personnelBo); + } + } + + // 删除未被处理的旧记录 + existingIds.removeAll(processedIds); + if (!existingIds.isEmpty()) { + xzdProjectPersonnelService.removeBatchByIds(existingIds); + } + } +// if (bo.getXmry() != null && !bo.getXmry().isEmpty()){ +// //删除后再新增 +// xzdProjectPersonnelService.removeBatchByIds(oldValue.getXmry()); +// for (XzdProjectPersonnelBo personnelBo : bo.getXmry()) { +// personnelBo.setXzdProjectId(update.getId()); +// xzdProjectPersonnelService.insertByBo(personnelBo); +// } +// } + + //税务信息处理 + if (bo.getSwxx() != null){ + xzdProjectTaxInfoService.updateByBo(bo.getSwxx()); + } + + //核算信息 + if (bo.getHsxx() != null){ + xzdProjectAccountingInfoService.updateByBo(bo.getHsxx()); + } + +// //仓库信息 +// if (bo.getXmck() != null && !bo.getXmck().isEmpty()){ +// xzdProjectWarehousesService.removeBatchByIds(oldValue.getXmck()); +// for (XzdProjectWarehousesBo warehousesBo : bo.getXmck()) { +// warehousesBo.setXzdProjectId(update.getId()); +// xzdProjectWarehousesService.insertByBo(warehousesBo); +// } +// } +// +// //内部账户信息 +// if (bo.getNbzj() != null && !bo.getNbzj().isEmpty()){ +// xzdProjectInternalAccountsService.removeBatchByIds(oldValue.getNbzj()); +// for (XzdProjectInternalAccountsBo internalAccountsBo : bo.getNbzj()) { +// internalAccountsBo.setXzdProjectId(update.getId()); +// xzdProjectInternalAccountsService.insertByBo(internalAccountsBo); +// } +// } +// +// //参与单位信息 +// if (bo.getCjdw() != null && !bo.getCjdw().isEmpty()){ +// xzdProjectParticipatingUnitsService.removeBatchByIds(oldValue.getCjdw()); +// for (XzdProjectParticipatingUnitsBo participatingUnitsBo : bo.getCjdw()) { +// participatingUnitsBo.setXzdProjectId(update.getId()); +// xzdProjectParticipatingUnitsService.insertByBo(participatingUnitsBo); +// } +// } + + //仓库信息 + if (bo.getXmck() != null && !bo.getXmck().isEmpty()){ + // 获取原有记录的ID列表 + List oldWarehouseIds = oldValue.getXmck().stream() + .map(XzdProjectWarehousesVo::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 删除原有记录 + if (!oldWarehouseIds.isEmpty()) { + xzdProjectWarehousesService.removeBatchByIds(oldWarehouseIds); + } + + // 插入新记录 + for (XzdProjectWarehousesBo warehousesBo : bo.getXmck()) { + warehousesBo.setId(null); // 清除ID避免主键冲突 + warehousesBo.setXzdProjectId(update.getId()); + xzdProjectWarehousesService.insertByBo(warehousesBo); + } + } + + //内部账户信息 + if (bo.getNbzj() != null && !bo.getNbzj().isEmpty()){ + // 获取原有记录的ID列表 + List oldAccountIds = oldValue.getNbzj().stream() + .map(XzdProjectInternalAccountsVo::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 删除原有记录 + if (!oldAccountIds.isEmpty()) { + xzdProjectInternalAccountsService.removeBatchByIds(oldAccountIds); + } + + // 插入新记录 + for (XzdProjectInternalAccountsBo internalAccountsBo : bo.getNbzj()) { + internalAccountsBo.setId(null); // 清除ID避免主键冲突 + internalAccountsBo.setXzdProjectId(update.getId()); + xzdProjectInternalAccountsService.insertByBo(internalAccountsBo); + } + } + + //参与单位信息 + if (bo.getCjdw() != null && !bo.getCjdw().isEmpty()){ + // 获取原有记录的ID列表 + List oldUnitIds = oldValue.getCjdw().stream() + .map(XzdProjectParticipatingUnitsVo::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 删除原有记录 + if (!oldUnitIds.isEmpty()) { + xzdProjectParticipatingUnitsService.removeBatchByIds(oldUnitIds); + } + + // 插入新记录 + for (XzdProjectParticipatingUnitsBo participatingUnitsBo : bo.getCjdw()) { + participatingUnitsBo.setId(null); // 清除ID避免主键冲突 + participatingUnitsBo.setXzdProjectId(update.getId()); + xzdProjectParticipatingUnitsService.insertByBo(participatingUnitsBo); + } + } + + return true; } /** @@ -238,6 +410,51 @@ public class XzdProjectServiceImpl extends ServiceImpl profileLambdaQueryWrapper = new LambdaQueryWrapper<>(); + profileLambdaQueryWrapper.eq(XzdProjectProfile::getXzdProjectId, id); + xzdProjectProfileService.remove(profileLambdaQueryWrapper); + + //项目人员 + LambdaQueryWrapper personnelLambdaQueryWrapper = new LambdaQueryWrapper<>(); + personnelLambdaQueryWrapper.eq(XzdProjectPersonnel::getXzdProjectId, id); + List list = xzdProjectPersonnelService.list(personnelLambdaQueryWrapper); + for (XzdProjectPersonnel xzdProjectPersonnel : list) { + if (xzdProjectPersonnel.getFileId() != null){ + sysOssService.deleteWithValidByIds(List.of(Long.valueOf(xzdProjectPersonnel.getFileId())), false); + } + } + xzdProjectPersonnelService.remove(personnelLambdaQueryWrapper); + + //税务信息 + LambdaQueryWrapper taxInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + taxInfoLambdaQueryWrapper.eq(XzdProjectTaxInfo::getXzdProjectId, id); + xzdProjectTaxInfoService.remove(taxInfoLambdaQueryWrapper); + + //核算信息 + LambdaQueryWrapper accountingInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + accountingInfoLambdaQueryWrapper.eq(XzdProjectAccountingInfo::getXzdProjectId, id); + xzdProjectAccountingInfoService.remove(accountingInfoLambdaQueryWrapper); + + //仓库信息 + LambdaQueryWrapper warehousesLambdaQueryWrapper = new LambdaQueryWrapper<>(); + warehousesLambdaQueryWrapper.eq(XzdProjectWarehouses::getXzdProjectId, id); + xzdProjectWarehousesService.remove(warehousesLambdaQueryWrapper); + + //内部账户信息 + LambdaQueryWrapper internalAccountsLambdaQueryWrapper = new LambdaQueryWrapper<>(); + internalAccountsLambdaQueryWrapper.eq(XzdProjectInternalAccounts::getXzdProjectId, id); + xzdProjectInternalAccountsService.remove(internalAccountsLambdaQueryWrapper); + + //参与单位信息 + LambdaQueryWrapper participatingUnitsLambdaQueryWrapper = new LambdaQueryWrapper<>(); + participatingUnitsLambdaQueryWrapper.eq(XzdProjectParticipatingUnits::getXzdProjectId, id); + xzdProjectParticipatingUnitsService.remove(participatingUnitsLambdaQueryWrapper); + + } + return baseMapper.deleteByIds(ids) > 0; } @@ -278,6 +495,13 @@ public class XzdProjectServiceImpl extends ServiceImpl - SELECT - project.project_number as xmbh, - project.project_name as xmmc, - project.file_id as fj, - project.audit_status as shbz, - project.project_abbreviation as xmjc, - project.project_status as xmzt, - project.project_type as xmlx, - profile.contract_amount as htje, - project.planned_start_date as jhkgrq, - project.planned_completion_date as jhjgrq, - project.actual_start_date as sjkgrq, - project.actual_completion_date as sjjgrq, - user.nick_name as xmzxjl, - user2.nick_name as xmbajl, + project.id, + project.project_attribute as projectAttribute, + project.project_number as projectNumber, + project.project_name as projectName, + project.file_id as fileId, + project.audit_status as auditStatus, + project.project_abbreviation as projectAbbreviation, + project.project_status as projectStatus, + type.type_name as projectTypeName, + profile.contract_amount as targetContractAmount, + project.planned_start_date as plannedStartDate, + project.planned_completion_date as plannedCompletionDate, + project.actual_start_date as actualStartDate, + project.actual_completion_date as actualCompletionDate, + user.nick_name as managerExecutionName, + user2.nick_name as filingManagerName, profile.project_address as xmdz, - project.management_organization as glzz, - project.construction_unit as jsdw, + project.management_organization as managementOrganization, + project.construction_unit as constructionUnit, profile.country as gj, profile.province as sheng, profile.city as cs, - project + user3.nick_name as lrr, + project.create_time as createTime, + profile.height as gd, + project.contracting_method as contractingMethod, + project.manager_execution_phone as managerExecutionPhone, + project.gov_filing_project_name as govFilingProjectName, + project.business_model as businessModel FROM xzd_project as project LEFT JOIN xzd_project_profile as profile ON project.id = profile.xzd_project_id LEFT JOIN sys_user as user ON project.manager_execution = user.user_id LEFT JOIN sys_user as user2 ON project.filing_manager = user2.user_id -# LEFT JOIN sys_user as user3 ON project.project_manager = user3.user_id + LEFT JOIN sys_user as user3 ON project.create_by = user3.user_id + LEFT JOIN xzd_project_type as type ON project.project_type = type.id + + + + + AND project.project_number LIKE CONCAT('%',#{projectNumber},'%') + + + + AND project.project_name LIKE CONCAT('%',#{projectName},'%') + + + + AND project.management_organization = #{managementOrganization} + + + + AND project.construction_unit = #{constructionUnit} + + + + AND profile.country = #{gj} + + + + AND profile.province = #{sheng} + + + + AND profile.district = #{qx} + + + + AND user2.nick_name = #{xmbajl} + + + + + + LIMIT #{pageSize} OFFSET #{offset} + +