From 2cea57646dbc3a7d10d259cc21e3f1b3139f3a28 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Sat, 6 Sep 2025 12:52:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E7=AE=A1=E7=90=86=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=87=BA=E5=9B=BE=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusPurchaseDocController.java | 10 + .../domain/bo/BusTotalsupplyplanBo.java | 5 + .../impl/BusTotalsupplyplanServiceImpl.java | 1 + .../DesVolumeCatalogController.java | 37 ++- .../design/domain/DesVolumeCatalog.java | 5 + .../dromara/design/domain/dto/ExcelData.java | 79 ++--- .../vo/volumecatalog/DesVolumeCatalogVo.java | 5 + .../design/service/IDesUserService.java | 14 +- .../service/IDesVolumeCatalogService.java | 2 + .../service/impl/DesUserServiceImpl.java | 46 ++- .../impl/DesVolumeCatalogServiceImpl.java | 276 ++++++++++++++---- .../controller/GpsEquipmentController.java | 15 + .../controller/GpsEquipmentSonController.java | 9 + .../dromara/gps/domain/bo/GpsEquipmentBo.java | 1 + .../gps/domain/vo/GpsEquipmentSonVo.java | 2 + .../dromara/gps/domain/vo/GpsEquipmentVo.java | 7 + .../dromara/gps/domain/vo/GpsProjectVo.java | 30 ++ .../gps/service/IGpsEquipmentService.java | 4 +- .../service/impl/GpsEquipmentServiceImpl.java | 140 +++++++-- .../impl/GpsEquipmentSonServiceImpl.java | 17 +- .../org/dromara/land/domain/bo/UnitBo.java | 10 + .../domain/vo/materials/MatMaterialsVo.java | 4 +- .../service/impl/MatMaterialsServiceImpl.java | 7 +- .../out/controller/OutTableController.java | 1 + .../project/service/IBusProjectService.java | 4 + .../service/impl/BusProjectServiceImpl.java | 10 + .../system/service/ISysDictDataService.java | 1 + .../system/service/ISysUserService.java | 2 + .../service/impl/SysDictDataServiceImpl.java | 5 + .../service/impl/SysUserServiceImpl.java | 6 + .../domain/BusBillofquantitiesLimitList.java | 2 +- .../bo/BusBillofquantitiesLimitListBo.java | 2 +- .../vo/BusBillofquantitiesLimitListVo.java | 4 +- ...sBillofquantitiesLimitListServiceImpl.java | 1 + 34 files changed, 604 insertions(+), 160 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsProjectVo.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusPurchaseDocController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusPurchaseDocController.java index a14447e9..63b27b19 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusPurchaseDocController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusPurchaseDocController.java @@ -67,6 +67,16 @@ public class BusPurchaseDocController extends BaseController { return busPurchaseDocService.queryPageList(bo, pageQuery); } + + /** + * 查询物资-采购联系单列表 + */ + @SaCheckPermission("cailiaoshebei:purchaseDoc:list") + @GetMapping("/getList") + public R> getList(BusPurchaseDocBo bo) { + return R.ok(busPurchaseDocService.queryList(bo)); + } + /** * 导出物资-采购联系单列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusTotalsupplyplanBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusTotalsupplyplanBo.java index 65437ec1..45eed979 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusTotalsupplyplanBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusTotalsupplyplanBo.java @@ -28,6 +28,11 @@ public class BusTotalsupplyplanBo extends BaseEntity { @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) private Long id; + /** + * 项目Id + */ + private Long projectId; + /** * 批次号 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java index 7308cc50..1b2c659f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java @@ -104,6 +104,7 @@ public class BusTotalsupplyplanServiceImpl extends ServiceImpl buildQueryWrapper(BusTotalsupplyplanBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getProjectId() != null ,BusTotalsupplyplan::getProjectId,bo.getProjectId()); lqw.eq(StringUtils.isNotBlank(bo.getTexture()), BusTotalsupplyplan::getTexture, bo.getTexture()); lqw.eq(StringUtils.isNotBlank(bo.getBrand()), BusTotalsupplyplan::getBrand, bo.getBrand()); lqw.eq(StringUtils.isNotBlank(bo.getQualityStandard()), BusTotalsupplyplan::getQualityStandard, bo.getQualityStandard()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java index ecc45bd1..b77efa67 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java @@ -159,7 +159,7 @@ public class DesVolumeCatalogController extends BaseController { /** * 收资清单模板导出 */ - @SaCheckPermission("design:collect:exportExcel") + @SaCheckPermission("design:volumeCatalog:exportExcel") @Log(title = "收资清单", businessType = BusinessType.EXPORT) @PostMapping("/exportExcel") public void exportExcelByProjectId(@RequestParam("projectId") Long projectId, HttpServletResponse response){ @@ -181,11 +181,14 @@ public class DesVolumeCatalogController extends BaseController { List dataList = readExcel(file); List desVolumeCatalogCreateReqs = BeanUtil.copyToList(dataList, DesVolumeCatalogCreateReq.class); Collections.reverse(desVolumeCatalogCreateReqs); + List list = new ArrayList<>(); for (DesVolumeCatalogCreateReq desVolumeCatalogCreateReq : desVolumeCatalogCreateReqs) { desVolumeCatalogCreateReq.setProjectId(projectId); desVolumeCatalogCreateReq.setDesignState("2"); - desVolumeCatalogService.insertByBo(desVolumeCatalogCreateReq); + list.add(desVolumeCatalogCreateReq); +// desVolumeCatalogService.insertByBo(desVolumeCatalogCreateReq); } + desVolumeCatalogService.insertBatchByBo(list); return toAjax(true); } @@ -235,17 +238,18 @@ public class DesVolumeCatalogController extends BaseController { // 从第二行(index=1)开始读取数据,跳过表头 for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) { Row row = sheet.getRow(rowIndex); - if (row != null) { + if (hasValidData(row)) { String designSubitem = getCellValue(row.getCell(0)); -// String designState = getCellValue(row.getCell(1)); -// String specialty = getCellValue(row.getCell(2)); -// String principal = getCellValue(row.getCell(3)); - String volumeNumber = getCellValue(row.getCell(1)); - String documentName = getCellValue(row.getCell(2)); - LocalDate plannedCompletion = getLocalDateValue(row.getCell(3)); + String specialty = getCellValue(row.getCell(1)); + String specialtyId = getCellValue(row.getCell(2)); + String principal = getCellValue(row.getCell(3)); + String principalId = getCellValue(row.getCell(4)); + String volumeNumber = getCellValue(row.getCell(5)); + String documentName = getCellValue(row.getCell(6)); + LocalDate plannedCompletion = getLocalDateValue(row.getCell(7)); ExcelData excelData = new ExcelData( - designSubitem, volumeNumber, documentName, + designSubitem,specialtyId,principalId, volumeNumber, documentName, plannedCompletion ); dataList.add(excelData); @@ -255,6 +259,19 @@ public class DesVolumeCatalogController extends BaseController { return dataList; } + private static boolean hasValidData(Row row) { + // 遍历行中的所有单元格 + for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) { + Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); + String cellValue = getCellValue(cell).trim(); + + // 只要有一个单元格有非空值,就认为是有效行 + if (!cellValue.isEmpty()) { + return true; + } + } + return false; + } private static String getCellValue(Cell cell) { if (cell == null) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java index be7ecf24..5cbd5ac0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java @@ -29,6 +29,11 @@ public class DesVolumeCatalog extends BaseEntity { @TableId(value = "design") private Long design; + /** + * 序号 + */ + private Long serialNumber; + /** * 项目ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java index 19a88582..1deaf425 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java @@ -1,5 +1,7 @@ package org.dromara.design.domain.dto; +import lombok.Data; + import java.time.LocalDate; /** @@ -7,34 +9,37 @@ import java.time.LocalDate; * @Date 2025/8/12 22:53 * @Version 1.0 */ +@Data public class ExcelData { private String designSubitem; -// private String designState; -// private String specialty; -// private String principal; + private String specialty; +// private String specialtyId; + private String principal; +// private Long principalId; private String volumeNumber; private String documentName; private LocalDate plannedCompletion; // 构造函数 - public ExcelData(String designSubitem, String volumeNumber, String documentName, LocalDate plannedCompletion) { + public ExcelData(String designSubitem, String specialty, String principal, String volumeNumber, String documentName, LocalDate plannedCompletion) { this.designSubitem = designSubitem; -// this.designState = designState; -// this.specialty = specialty; -// this.principal = principal; + this.specialty = specialty; +// this.specialtyId = specialtyId; + this.principal = principal; +// this.principalId = principalId; this.volumeNumber = volumeNumber; this.documentName = documentName; this.plannedCompletion = plannedCompletion; } // Getter和Setter方法 - public String getDesignSubitem() { - return designSubitem; - } - - public void setDesignSubitem(String designSubitem) { - this.designSubitem = designSubitem; - } +// public String getDesignSubitem() { +// return designSubitem; +// } +// +// public void setDesignSubitem(String designSubitem) { +// this.designSubitem = designSubitem; +// } // public String getDesignState() { // return designState; @@ -60,27 +65,27 @@ public class ExcelData { // this.principal = principal; // } - public String getVolumeNumber() { - return volumeNumber; - } - - public void setVolumeNumber(String volumeNumber) { - this.volumeNumber = volumeNumber; - } - - public String getDocumentName() { - return documentName; - } - - public void setDocumentName(String documentName) { - this.documentName = documentName; - } - - public LocalDate getPlannedCompletion() { - return plannedCompletion; - } - - public void setPlannedCompletion(LocalDate plannedCompletion) { - this.plannedCompletion = plannedCompletion; - } +// public String getVolumeNumber() { +// return volumeNumber; +// } +// +// public void setVolumeNumber(String volumeNumber) { +// this.volumeNumber = volumeNumber; +// } +// +// public String getDocumentName() { +// return documentName; +// } +// +// public void setDocumentName(String documentName) { +// this.documentName = documentName; +// } +// +// public LocalDate getPlannedCompletion() { +// return plannedCompletion; +// } +// +// public void setPlannedCompletion(LocalDate plannedCompletion) { +// this.plannedCompletion = plannedCompletion; +// } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java index 4c33ed0e..62e8ff3f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java @@ -34,6 +34,11 @@ public class DesVolumeCatalogVo implements Serializable { */ private Long design; + /** + * 序号 + */ + private Long serialNumber; + /** * 项目ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java index f478c32a..80969f1c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java @@ -1,5 +1,6 @@ package org.dromara.design.service; +import jakarta.validation.constraints.NotNull; import org.dromara.design.domain.dto.desUser.DesUserBatchDto; import org.dromara.design.domain.vo.DesUserVo; import org.dromara.design.domain.bo.DesUserBo; @@ -8,10 +9,10 @@ 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.springframework.web.bind.annotation.RequestBody; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 设计人员Service接口 @@ -84,4 +85,15 @@ public interface IDesUserService extends IService{ * 查询用户对应专业 */ List selectUserMajors(Long userId); + + /** + * 查询专业和专业名 + * @param desUserBo + * @return + */ + Map getUserMajor(DesUserBo desUserBo); + + Map getUserList(DesUserBo desUserBo); + + Long getCount(String principal, String specialty, Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java index 889333ff..3cbfef6d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java @@ -122,4 +122,6 @@ public interface IDesVolumeCatalogService extends IService { List catalogList(Long projectId); void exportExcelByProjectId(Long projectId, HttpServletResponse response); + + void insertBatchByBo(List list); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java index 2d5d1b23..a6348dd7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java @@ -10,6 +10,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.design.domain.dto.desUser.DesUserBatchDto; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDictDataService; import org.springframework.stereotype.Service; import org.dromara.design.domain.bo.DesUserBo; import org.dromara.design.domain.vo.DesUserVo; @@ -17,9 +19,8 @@ import org.dromara.design.domain.DesUser; import org.dromara.design.mapper.DesUserMapper; import org.dromara.design.service.IDesUserService; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; /** * 设计人员Service业务层处理 @@ -33,6 +34,8 @@ public class DesUserServiceImpl extends ServiceImpl impl private final DesUserMapper baseMapper; + private final ISysDictDataService sysDictDataService; + /** * 查询设计人员 * @@ -146,4 +149,41 @@ public class DesUserServiceImpl extends ServiceImpl impl public List selectUserMajors(Long userId){ return baseMapper.selectUserMajors(userId); } + + @Override + public Map getUserMajor(DesUserBo desUserBo) { + List desUserVos = baseMapper.selectVoList(new LambdaQueryWrapper() + .eq(DesUser::getProjectId, desUserBo.getProjectId()) + .groupBy(DesUser::getUserMajor)); + List list = sysDictDataService.selectByDictType("des_user_major"); + Map dictMap = list.stream().filter(Objects::nonNull).collect(Collectors + .toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel, (existing, existing1) -> existing)); + Map map = new HashMap<>(); + for (DesUserVo desUserVo : desUserVos) { + if (desUserVo !=null){ + map.put(desUserVo.getUserMajor(), dictMap.get(desUserVo.getUserMajor())); + } + } + return map; + } + + @Override + public Map getUserList(DesUserBo desUserBo) { + List desUserVos = baseMapper.selectVoList(new LambdaQueryWrapper() + .eq(DesUser::getProjectId, desUserBo.getProjectId()) + .groupBy(DesUser::getUserId)); + Map map = new HashMap<>(); + for (DesUserVo desUserVo : desUserVos) { + map.put(desUserVo.getUserId().toString(), desUserVo.getUserName()); + } + return map; + } + + @Override + public Long getCount(String principal, String specialty, Long projectId) { + return baseMapper.selectCount(new LambdaQueryWrapper() + .eq(DesUser::getProjectId, projectId) + .eq(DesUser::getUserId, Long.valueOf(principal)) + .eq(DesUser::getUserMajor, specialty)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java index db8fc35d..26f9e25b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java @@ -10,10 +10,9 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.dromara.cailiaoshebei.domain.BusCailiaoshebeiPici; import org.dromara.common.core.constant.HttpStatus; -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; @@ -23,21 +22,21 @@ import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.design.domain.*; import org.dromara.design.domain.bo.DesUserBo; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; -import org.dromara.design.domain.vo.DesUserVo; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; import org.dromara.design.mapper.DesVolumeCatalogMapper; import org.dromara.design.service.*; import org.dromara.project.service.IBusProjectService; -import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysUserService; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; @@ -148,6 +147,11 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl 0) { throw new ServiceException("卷册目录已存在", HttpStatus.BAD_REQUEST); } + long count1 = desUserService.count(new LambdaQueryWrapper() + .eq(DesUser::getUserMajor, req.getSpecialty()) + .eq(DesUser::getUserId, req.getPrincipal())); + if (count1 == 0) { + throw new ServiceException("所选专业不包含该人员"); + } DesVolumeCatalog volumeCatalog = new DesVolumeCatalog(); BeanUtils.copyProperties(req, volumeCatalog); + volumeCatalog.setSerialNumber(serialNumber); boolean save = this.save(volumeCatalog); if (!save) { + RedisUtils.setCacheObject("DesVolumeCatalog:serialNumber",serialNumber); throw new ServiceException("卷册目录新增失败", HttpStatus.ERROR); } return true; } + @Override + @Transactional(rollbackFor = Exception.class) + public void insertBatchByBo(List list) { + Object object = RedisUtils.getCacheObject("DesVolumeCatalog:serialNumber"); + long serialNumber = 0L; + if (ObjectUtils.isNotEmpty(object)) { + serialNumber = ((Integer) object).longValue(); + } + List desVolumeCatalogs = new ArrayList<>(); + for (DesVolumeCatalogCreateReq req : list) { + Long projectId = req.getProjectId(); + if (projectService.getById(projectId) == null) { + throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND); + } + // 判断是否重名 + Long count = this.lambdaQuery() + .eq(DesVolumeCatalog::getProjectId, projectId) + .and(lqw -> lqw + .eq(DesVolumeCatalog::getVolumeNumber, req.getVolumeNumber()) + .or() + .eq(DesVolumeCatalog::getDocumentName, req.getDocumentName())) + .count(); + if (count > 0) { + throw new ServiceException("卷册目录已存在", HttpStatus.BAD_REQUEST); + } + Long count1 = desUserService.getCount(req.getPrincipal(),req.getSpecialty(),req.getProjectId()); + if (count1 == 0) { + throw new ServiceException("所选专业不包含该人员"); + } + DesVolumeCatalog volumeCatalog = new DesVolumeCatalog(); + BeanUtils.copyProperties(req, volumeCatalog); + volumeCatalog.setSerialNumber(serialNumber++); + desVolumeCatalogs.add(volumeCatalog); + } + baseMapper.insertBatch(desVolumeCatalogs); + RedisUtils.setCacheObject("DesVolumeCatalog:serialNumber",serialNumber); + } + /** * 修改卷册目录 * @@ -286,8 +336,8 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl> majorToNames = new HashMap<>(); - List desUserVos = desUserService.queryList(desUserBo); - List uniqueMajors = new ArrayList<>(desUserVos.stream() - .collect(Collectors.toMap( - DesUserVo::getUserMajor, - user -> user, - (existing, replacement) -> existing - )) - .values()); - uniqueMajors.forEach(desUserVo -> { - desUserBo.setUserMajor(desUserVo.getUserMajor()); - List desUserVos1 = desUserService.queryList(desUserBo); - List names = desUserVos1.stream() - .map(DesUserVo::getUserName) - .collect(Collectors.toList()); - majorToNames.put(desUserVo.getUserMajorName(), names); - }); + Map uniqueMajors = desUserService.getUserMajor(desUserBo); + Map userList = desUserService.getUserList(desUserBo); + + + //TODO 数据绑定下拉 // String[] namesArray = names.toArray(String[]::new); @@ -398,48 +436,117 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl entry : userIdToNameMapByDept.entrySet()) { -// Row row = dropdownSheet.createRow(rowIdx++); -// row.createCell(0).setCellValue(entry.getKey().toString()); -// row.createCell(1).setCellValue(entry.getValue()); -// } + CellStyle editableStyle = createEditableCellStyle(workbook); // 可编辑单元格样式 + CellStyle protectedStyle = createProtectedCellStyle(workbook); // 受保护单元格样式(ID列用 + + //填充隐藏数据Sheet + int rowIndex = 0; + + // 填充专业和专业ID(A列和B列) + for (Map.Entry entry : uniqueMajors.entrySet()) { + Row row = dataSheet.createRow(rowIndex++); + row.createCell(0).setCellValue(entry.getValue()); // A列:专业ID + row.createCell(1).setCellValue(entry.getKey()); // B列:专业名称 + } + + // 重置行索引,填充人员和人员ID(C列和D列) + rowIndex = 0; + for (Map.Entry entry : userList.entrySet()) { + Row row = dataSheet.getRow(rowIndex); + if (row == null) { + row = dataSheet.createRow(rowIndex); + } + row.createCell(2).setCellValue(entry.getValue()); // C列:人员ID + row.createCell(3).setCellValue(entry.getKey()); // D列:人员名称 + rowIndex++; + } // 主 Sheet 设置表头 Row sheetRow = mainSheet.createRow(0); - sheetRow.createCell(0).setCellValue("子项名称"); - sheetRow.createCell(1).setCellValue("卷册号"); - sheetRow.createCell(2).setCellValue("资料名称"); - sheetRow.createCell(3).setCellValue("计划出图时间"); - sheetRow.createCell(4).setCellValue("专业"); - sheetRow.createCell(5).setCellValue("人员"); + String[] headers = {"子项名称", "专业", "专业编码", + "人员", "人员编码", "卷册号","资料名称","计划出图时间"}; + for (int i = 0; i < headers.length; i++) { + Cell cell = sheetRow.createCell(i); + cell.setCellValue(headers[i]); + } + + // 6. 设置专业下拉列表(第二列) + setMajorDropdown(mainSheet,uniqueMajors.size()); + + + + // 8. 设置人员下拉列表(第四列) + setPersonDropdown(mainSheet, userList.size()); + + String formulaTemplate = "IFERROR(INDEX(DropdownData!$B$1:$B$" + uniqueMajors.size() + ", MATCH(B{rowNum}, DropdownData!$A$1:$A$" + uniqueMajors.size()+ ", 0)),\"\")"; + + String formulaTemplate1 = "IFERROR(INDEX(DropdownData!$D$1:$D$" + userList.size() + ", MATCH(D{rowNum}, DropdownData!$C$1:$C$" + userList.size()+ ", 0)),\"\")"; + + + for (int i = 1; i <= 100; i++) { // 从第2行到101行 + Row row = mainSheet.createRow(i); + int currentRowNum = i + 1; // Excel行号从1开始 + String formula = formulaTemplate.replace("{rowNum}", String.valueOf(currentRowNum)); + + Cell cell = row.createCell(1); + cell.setCellStyle(editableStyle); //专业不锁定 + + Cell idCell = row.createCell(2); + idCell.setCellFormula(formula); + idCell.setCellStyle(protectedStyle); // 应用隐藏公式样式 + + String formula1 = formulaTemplate1.replace("{rowNum}", String.valueOf(currentRowNum)); + + Cell cell2 = row.createCell(3); + cell2.setCellStyle(editableStyle); + + Cell idCell2 = row.createCell(4); + idCell2.setCellFormula(formula1); + idCell2.setCellStyle(protectedStyle); + } + + + for (int i = 1; i <= 100; i++) { + Row row = mainSheet.getRow(i); + if (row == null) { + row = mainSheet.createRow(i); + } + Cell cell = row.createCell(0); + cell.setCellStyle(editableStyle); + + Cell cell1 = row.createCell(5); + cell1.setCellStyle(editableStyle); + + Cell cell2 = row.createCell(6); + cell2.setCellStyle(editableStyle); + + Cell cell3 = row.createCell(7); + cell3.setCellStyle(editableStyle); + } + + + + // 保护工作表,仅允许编辑未锁定的单元格 + mainSheet.protectSheet("123456"); // 空密码 // 核心:锁定表头(第1行)和前1列(包含ID列) - mainSheet.createFreezePane(0, 1, 0, 0); + mainSheet.createFreezePane(0, 1, 0, 1); - // 绑定下拉列表(关联隐藏 Sheet) - DataValidationHelper helper = mainSheet.getDataValidationHelper(); //为主Sheet第二列设置下拉列表(关联隐藏Sheet的B列) -// String range = "DropdownData!$B$1:$B$" + namesArray.length; //引用隐藏Sheet的B列数据范围:DropdownData!$B$1:$B$ -// DataValidationConstraint constraint = helper.createFormulaListConstraint(range); //创建下拉约束 - CellRangeAddressList addressList = new CellRangeAddressList(1, 300, 1, 1); // 支持100行数据 - //添加验证规则 -// DataValidation validation = helper.createValidation(constraint, addressList); -// validation.setShowErrorBox(true); -// mainSheet.addValidationData(validation); // 调整列宽 mainSheet.setColumnWidth(0, 20 * 256); - mainSheet.setColumnWidth(1, 20 * 100); + mainSheet.setColumnWidth(1, 20 * 200); mainSheet.setColumnWidth(2, 20 * 200); mainSheet.setColumnWidth(3, 20 * 200); + mainSheet.setColumnWidth(4, 20 * 200); + mainSheet.setColumnWidth(5, 20 * 200); + mainSheet.setColumnWidth(6, 20 * 200); + mainSheet.setColumnWidth(7, 20 * 200); // 直接写入响应输出流 try { @@ -451,6 +558,71 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl> getProjectList() { + return R.ok(gpsEquipmentService.getProjectList()); + } @@ -145,6 +154,9 @@ public class GpsEquipmentController extends BaseController { @RepeatSubmit() @PostMapping("/bindManmachine") public R bindManmachine(@RequestBody GpsEquipmentBo bo) { + if (bo.getClientId() == null) { + throw new ServiceException("设备id不能为空!!!"); + } return toAjax(gpsEquipmentService.bindManmachine(bo)); } @@ -170,6 +182,9 @@ public class GpsEquipmentController extends BaseController { @RepeatSubmit() @PostMapping("/unbindManmachine") public R unbindManmachine(@RequestBody GpsEquipmentBo bo) { + if (bo.getClientId() == null) { + throw new ServiceException("设备id不能为空!!!"); + } return toAjax(gpsEquipmentService.unbindManmachine(bo)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentSonController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentSonController.java index a0783547..166549f3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentSonController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentSonController.java @@ -45,6 +45,15 @@ public class GpsEquipmentSonController extends BaseController { return gpsEquipmentSonService.queryPageList(bo, pageQuery); } + /** + * 查询GPS设备定位信息列表 + */ + @SaCheckPermission("gps:equipmentSon:list") + @GetMapping("/getList") + public R> getList(GpsEquipmentSonBo bo) { + return R.ok(gpsEquipmentSonService.queryList(bo)); + } + /** * 导出GPS设备定位信息列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentBo.java index 76885b66..2b79f0b9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentBo.java @@ -76,5 +76,6 @@ public class GpsEquipmentBo extends BaseEntity { */ private String remark; + private Integer type; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentSonVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentSonVo.java index 04e8b226..9b7401bf 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentSonVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentSonVo.java @@ -47,6 +47,8 @@ public class GpsEquipmentSonVo implements Serializable { @ExcelProperty(value = "设备标识") private String clientId; + private Long projectId; + /** * 设备名称 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentVo.java index c83cb504..816a30d5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsEquipmentVo.java @@ -40,12 +40,16 @@ public class GpsEquipmentVo implements Serializable { @ExcelProperty(value = "项目ID") private Long projectId; + private String projectName; + /** * 用户id */ @ExcelProperty(value = "用户id") private Long userId; + private String userName; + /** * 设备标识 */ @@ -96,4 +100,7 @@ public class GpsEquipmentVo implements Serializable { private String remark; + private Integer type; + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsProjectVo.java new file mode 100644 index 00000000..65519d45 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/GpsProjectVo.java @@ -0,0 +1,30 @@ +package org.dromara.gps.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * GPS人机关联视图对象 gps_manmachine + * + * @author Lion Li + * @date 2025-08-28 + */ +@Data +public class GpsProjectVo implements Serializable { + + + /** + * + */ +// @ExcelProperty(value = "") + private Long projectId; + /** + * 用户名 + */ + private String projectName; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java index 76cfbb7f..2ae03828 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java @@ -1,6 +1,5 @@ package org.dromara.gps.service; -import org.dromara.common.core.domain.R; import org.dromara.gps.domain.vo.GpsEquipmentVo; import org.dromara.gps.domain.bo.GpsEquipmentBo; import org.dromara.gps.domain.GpsEquipment; @@ -8,6 +7,7 @@ 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.gps.domain.vo.GpsProjectVo; import org.dromara.gps.domain.vo.GpsUserVo; import java.util.Collection; @@ -92,4 +92,6 @@ public interface IGpsEquipmentService extends IService{ Boolean unbindManmachine(GpsEquipmentBo bo); List getUserList(GpsEquipmentBo bo); + + List getProjectList(); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java index 8fa82fb3..9b6012f9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java @@ -6,7 +6,6 @@ import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.R; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -17,15 +16,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.redis.utils.RedisUtils; -import org.dromara.gps.domain.GpsEquipmentSon; import org.dromara.gps.domain.GpsManmachine; import org.dromara.gps.domain.bo.GpsEquipmentSonBo; +import org.dromara.gps.domain.vo.GpsProjectVo; import org.dromara.gps.domain.vo.GpsUserVo; import org.dromara.gps.mapper.GpsManmachineMapper; import org.dromara.gps.service.IGpsEquipmentSonService; -import org.dromara.gps.service.IGpsManmachineService; -import org.plutext.jaxb.svg11.G; -import org.redisson.api.ObjectListener; +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.redisson.api.DeletedObjectListener; +import org.redisson.api.ExpiredObjectListener; +import org.redisson.api.listener.SetObjectListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.gps.domain.bo.GpsEquipmentBo; @@ -33,10 +36,12 @@ import org.dromara.gps.domain.vo.GpsEquipmentVo; import org.dromara.gps.domain.GpsEquipment; import org.dromara.gps.mapper.GpsEquipmentMapper; import org.dromara.gps.service.IGpsEquipmentService; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.Duration; import java.util.*; +import java.util.stream.Collectors; /** * GPS设备详细Service业务层处理 @@ -55,6 +60,10 @@ public class GpsEquipmentServiceImpl extends ServiceImpl queryPageList(GpsEquipmentBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (bo.getType() == 1){ + List list = result.getRecords().stream() + .filter(gpsEquipment -> gpsEquipment.getProjectId() != null) + .toList(); + list.forEach(item -> { + if (item.getUserId() != null){ + item.setType(1); + }else{ + item.setType(2); + } + SysUserVo sysUserVo = userService.queryById(item.getUserId()); + if (sysUserVo != null) { + item.setUserName(sysUserVo.getUserName()); + } + BusProjectVo busProjectVo = projectService.selectById(item.getProjectId()); + if (busProjectVo != null) { + item.setProjectName(busProjectVo.getProjectName()); + } + }); + result.setRecords(list); + }else if (bo.getType() == 2){ + List list = result.getRecords().stream() + .filter(gpsEquipment -> gpsEquipment.getProjectId() == null).toList(); + list.forEach(item ->{ + if (item.getProjectId() != null) { + BusProjectVo busProjectVo = projectService.selectById(item.getProjectId()); + if (busProjectVo != null) { + item.setProjectName(busProjectVo.getProjectName()); + } + } + item.setType(2); + }); + result.setRecords(list); + } return TableDataInfo.build(result); } @@ -197,37 +240,47 @@ public class GpsEquipmentServiceImpl extends ServiceImpl() .set(GpsEquipment::getUserId,bo.getUserId()) + .set(GpsEquipment::getProjectId,bo.getProjectId()) .eq(GpsEquipment::getId,bo.getId())); //只能绑定一个设备 List gpsManmachines = gpsManmachineMapper.selectList(Wrappers.lambdaQuery() @@ -271,16 +332,15 @@ public class GpsEquipmentServiceImpl extends ServiceImpl() .set(GpsEquipment::getUserId,null) .eq(GpsEquipment::getId,bo.getId())); GpsManmachine gpsManmachine = new GpsManmachine(); gpsManmachine.setClientId(bo.getClientId()); - gpsManmachine.setUserId(bo.getUserId()); return gpsManmachineMapper.delete(new LambdaQueryWrapper() - .eq(GpsManmachine::getClientId, gpsManmachine.getClientId()) - .eq(GpsManmachine::getUserId,gpsManmachine.getUserId()))> 0; + .eq(GpsManmachine::getClientId, gpsManmachine.getClientId()))> 0; } /** @@ -306,4 +366,20 @@ public class GpsEquipmentServiceImpl extends ServiceImpl getProjectList() { + List projectVos = projectService.selectProjectVoList(); + if (projectVos == null || projectVos.isEmpty()) { + return null; + } + List list = new ArrayList<>(); + projectVos.forEach(item -> { + GpsProjectVo vo = new GpsProjectVo(); + vo.setProjectId(item.getId()); + vo.setProjectName(item.getProjectName()); + list.add(vo); + }); + return list; + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java index 658bf03f..f997abff 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java @@ -72,23 +72,10 @@ public class GpsEquipmentSonServiceImpl extends ServiceImpl buildQueryWrapper(GpsEquipmentSonBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByDesc(GpsEquipmentSon::getId); + lqw.orderByDesc(GpsEquipmentSon::getCreateTime); + lqw.eq(bo.getProjectId() != null, GpsEquipmentSon::getProjectId, bo.getProjectId()); lqw.eq(bo.getUserId() != null, GpsEquipmentSon::getUserId, bo.getUserId()); lqw.eq(StringUtils.isNotBlank(bo.getClientId()), GpsEquipmentSon::getClientId, bo.getClientId()); - lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), GpsEquipmentSon::getDeviceName, bo.getDeviceName()); - lqw.eq(StringUtils.isNotBlank(bo.getDeviceId()), GpsEquipmentSon::getDeviceId, bo.getDeviceId()); - lqw.eq(StringUtils.isNotBlank(bo.getMobileNo()), GpsEquipmentSon::getMobileNo, bo.getMobileNo()); - lqw.eq(StringUtils.isNotBlank(bo.getPlateNo()), GpsEquipmentSon::getPlateNo, bo.getPlateNo()); - lqw.eq(bo.getProtocolVersion() != null, GpsEquipmentSon::getProtocolVersion, bo.getProtocolVersion()); - lqw.eq(bo.getLocWarnBit() != null, GpsEquipmentSon::getLocWarnBit, bo.getLocWarnBit()); - lqw.eq(bo.getLocStatusBit() != null, GpsEquipmentSon::getLocStatusBit, bo.getLocStatusBit()); - lqw.eq(bo.getLocLatitude() != null, GpsEquipmentSon::getLocLatitude, bo.getLocLatitude()); - lqw.eq(bo.getLocLongitude() != null, GpsEquipmentSon::getLocLongitude, bo.getLocLongitude()); - lqw.eq(bo.getLocAltitude() != null, GpsEquipmentSon::getLocAltitude, bo.getLocAltitude()); - lqw.eq(bo.getLocSpeed() != null, GpsEquipmentSon::getLocSpeed, bo.getLocSpeed()); - lqw.eq(bo.getLocSpeedKph() != null, GpsEquipmentSon::getLocSpeedKph, bo.getLocSpeedKph()); - lqw.eq(bo.getLocDirection() != null, GpsEquipmentSon::getLocDirection, bo.getLocDirection()); - lqw.eq(bo.getLocDeviceTime() != null, GpsEquipmentSon::getLocDeviceTime, bo.getLocDeviceTime()); return lqw; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/domain/bo/UnitBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/domain/bo/UnitBo.java index eb0ac794..97cd077a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/domain/bo/UnitBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/domain/bo/UnitBo.java @@ -20,4 +20,14 @@ public class UnitBo { */ private String unitProjectName; + /** + * 单位工程工区 + */ + private String unitProjectArea; + + /** + * 单位工程状态 + */ + private String unitProjectStatus; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java index 0cecda3e..99e8b35f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java @@ -7,7 +7,7 @@ import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.materials.domain.MatMaterials; -import org.dromara.materials.domain.vo.company.MatCompanyVo; +import org.dromara.tender.domain.vo.TenderSupplierInputVo; import java.io.Serial; import java.io.Serializable; @@ -51,7 +51,7 @@ public class MatMaterialsVo implements Serializable { * 公司信息 */ @ExcelProperty(value = "公司信息") - private MatCompanyVo companyVo; + private TenderSupplierInputVo companyVo; /** * 项目id diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialsServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialsServiceImpl.java index fe54ec9c..14892863 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialsServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialsServiceImpl.java @@ -39,6 +39,7 @@ import org.dromara.materials.service.IMatMaterialsInventoryService; import org.dromara.materials.service.IMatMaterialsService; import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusProjectService; +import org.dromara.tender.service.ITenderSupplierInputService; import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; @@ -60,7 +61,7 @@ public class MatMaterialsServiceImpl extends ServiceImpl matchedPlans = list.stream() // .filter(plan -> plan.getPlanMonth() != null diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java index 4a295f37..9e166fee 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java @@ -204,4 +204,8 @@ public interface IBusProjectService extends IService { * @return 是否成功 */ Boolean changeUserProject(Long id); + + BusProjectVo selectById(Long projectId); + + List selectProjectVoList(); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java index 7ab0f2d6..94fb0c11 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java @@ -1082,6 +1082,16 @@ public class BusProjectServiceImpl extends ServiceImpl selectProjectVoList() { + return baseMapper.selectVoList(); + } + /** * 构造分项工程树 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java index 0e697db6..abec6a6b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java @@ -73,4 +73,5 @@ public interface ISysDictDataService { */ boolean checkDictDataUnique(SysDictDataBo dict); + List selectByDictType(String desUserMajor); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index 176a9a97..29d5e2d7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -258,4 +258,6 @@ public interface ISysUserService { * 获取指定部门的用户名称列表(用于 Excel 下拉框) */ List getUserNamesByDept(Long deptId); + + SysUserVo queryById(Long userId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java index e44fdbc2..e3d3db78 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java @@ -154,4 +154,9 @@ public class SysDictDataServiceImpl implements ISysDictDataService { return true; } + @Override + public List selectByDictType(String desUserMajor) { + return baseMapper.selectVoList(new LambdaQueryWrapper().eq(SysDictData::getDictType, desUserMajor)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 003d9be0..b11274e5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -773,6 +773,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService { .collect(Collectors.toList()); } + @Override + public SysUserVo queryById(Long userId) { + + return baseMapper.selectVoById(userId); + } + /** * 通过用户ID查询用户账户 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java index ecae45db..29a54e97 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java @@ -93,7 +93,7 @@ public class BusBillofquantitiesLimitList extends BaseEntity { /** * 税率 */ - private int taxRate; + private BigDecimal taxRate; /** * 总价 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java index 7dd6a238..5c22d147 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java @@ -93,7 +93,7 @@ public class BusBillofquantitiesLimitListBo extends BaseEntity { /** * 税率 */ - private int taxRate; + private BigDecimal taxRate; /** * 总价 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java index 52d3088f..96d577a5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java @@ -118,8 +118,8 @@ public class BusBillofquantitiesLimitListVo implements Serializable { /** * 税率 */ - @ExcelProperty(value = "税率") - private int taxRate; + @ExcelProperty(value = "税率(%)") + private BigDecimal taxRate; /** * 总价 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java index a5e594c2..88a60ed9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java @@ -259,6 +259,7 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl