diff --git a/src/main/java/org/springblade/common/constant/CommonConstant.java b/src/main/java/org/springblade/common/constant/CommonConstant.java index 23fd438..7d46a4d 100644 --- a/src/main/java/org/springblade/common/constant/CommonConstant.java +++ b/src/main/java/org/springblade/common/constant/CommonConstant.java @@ -87,4 +87,16 @@ public interface CommonConstant { Integer TRUE_INT = 1; Integer FALSE_INT = 0; + /** + * 实验室:2附件、3图纸 + */ + Integer LIMS_ATTACHES = 2; + Integer LIMS_DRAWS = 3; + + /** + * 巡检周期 1:月, 2:季, 3:半年 + */ + Integer ERIOD_MONTH = 1; + Integer ERIOD_QUARTER = 2; + Integer ERIOD_HALF_YEAR = 3; } diff --git a/src/main/java/org/springblade/modules/business/contraller/DeviceController.java b/src/main/java/org/springblade/modules/business/contraller/DeviceController.java index 33602f3..0c8388d 100644 --- a/src/main/java/org/springblade/modules/business/contraller/DeviceController.java +++ b/src/main/java/org/springblade/modules/business/contraller/DeviceController.java @@ -1,20 +1,28 @@ package org.springblade.modules.business.contraller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.modules.business.excel.DeviceExcel; +import org.springblade.modules.business.excel.DeviceImporter; import org.springblade.modules.business.pojo.dto.DeviceDTO; import org.springblade.modules.business.pojo.entity.Device; import org.springblade.modules.business.pojo.entity.DeviceAttach; @@ -24,9 +32,9 @@ import org.springblade.modules.business.service.IDeviceAttachService; import org.springblade.modules.business.service.IDeviceMaintenanceService; import org.springblade.modules.business.service.IDeviceService; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * 设备表 控制器 @@ -151,4 +159,48 @@ public class DeviceController extends BladeController { return R.status(deviceService.deleteLogic(Func.toLongList(ids))); } + /** + * 导入设备数据 + */ + @PostMapping("/import-device") + @Operation(summary = "导入设备", description = "传入excel") + public R importGood(MultipartFile file, Integer isCovered) { + DeviceImporter deviceImporter = new DeviceImporter(deviceService, isCovered == 1); + ExcelUtil.save(file, deviceImporter, DeviceExcel.class); + return R.success("操作成功"); + } + + /** + * 导出设备数据 + */ + @GetMapping("/export-device") + @Operation(summary = "导出设备", description = "传入") + public void exportGood(@Parameter(hidden = true) @RequestParam Map device, HttpServletResponse response) { + QueryWrapper queryWrapper = Condition.getQueryWrapper(device, Device.class); + List list = deviceService.exportDevice(queryWrapper); + ExcelUtil.export(response, "设备数据" + DateUtil.time(), "设备数据表", list, DeviceExcel.class); + } + + /** + * 导出模板 + */ + @GetMapping("/export-template") + @Operation(summary = "导出模板") + public void exportUser(HttpServletResponse response) { + List list = new ArrayList<>(); + DeviceExcel deviceExcel = new DeviceExcel(); + deviceExcel.setCode("WX-20241017-01"); + deviceExcel.setName("测试设备"); + deviceExcel.setModel("MDP-456"); + deviceExcel.setType("设备类型1"); + deviceExcel.setPosition("种子常规检测室1"); + deviceExcel.setSupplier("山东烁今"); + deviceExcel.setProduceTime(new Date()); + deviceExcel.setLimsName("测试实验室"); + deviceExcel.setFloorName("三层"); + deviceExcel.setRoomName("301"); + list.add(deviceExcel); + ExcelUtil.export(response, "设备模板", "设备表", list, DeviceExcel.class); + } + } diff --git a/src/main/java/org/springblade/modules/business/contraller/supplies/GoodsController.java b/src/main/java/org/springblade/modules/business/contraller/supplies/GoodsController.java index 1632bc9..2abaf08 100644 --- a/src/main/java/org/springblade/modules/business/contraller/supplies/GoodsController.java +++ b/src/main/java/org/springblade/modules/business/contraller/supplies/GoodsController.java @@ -1,20 +1,30 @@ package org.springblade.modules.business.contraller.supplies; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import org.springblade.common.cache.DictBizCache; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.modules.business.excel.supplies.GoodsExcel; +import org.springblade.modules.business.excel.supplies.GoodsImporter; import org.springblade.modules.business.pojo.entity.supplies.Goods; import org.springblade.modules.business.pojo.vo.supplies.GoodsVO; import org.springblade.modules.business.service.supplies.IGoodsService; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -134,4 +144,53 @@ public class GoodsController extends BladeController { return R.status(goodsService.updateBatchById(goods)); } + /** + * 导入物资 + */ + @PostMapping("import-good") + @Operation(summary = "导入物资", description = "传入excel") + public R importGood(MultipartFile file, Integer isCovered) { + GoodsImporter goodsImporter = new GoodsImporter(goodsService, isCovered == 1); + ExcelUtil.save(file, goodsImporter, GoodsExcel.class); + return R.success("操作成功"); + } + + /** + * 导出物资数据 + */ + @GetMapping("export-good") + @Operation(summary = "导出物资", description = "传入user") + public void exportGood(@Parameter(hidden = true) @RequestParam Map goods, HttpServletResponse response) { + QueryWrapper queryWrapper = Condition.getQueryWrapper(goods, Goods.class); + List list = goodsService.exportGoods(queryWrapper); + ExcelUtil.export(response, "物资数据" + DateUtil.time(), "物资数据表", list, GoodsExcel.class); + } + + /** + * 导出模板 + */ + @GetMapping("export-template") + @Operation(summary = "导出模板") + public void exportUser(HttpServletResponse response) { + List list = new ArrayList<>(); + GoodsExcel goodsExcel = new GoodsExcel(); + goodsExcel.setInventoryId("IN0001"); + goodsExcel.setWarehouseName("仓库1"); + goodsExcel.setLocation("5-1-1"); + goodsExcel.setName("测试物资名称"); + goodsExcel.setDescribes("AC220V,开关阀,150s,5NM"); + goodsExcel.setXh("6SL3220-1YD22-OUBO"); + goodsExcel.setBrand("西门子"); + goodsExcel.setPurchasePrice(51.00); + goodsExcel.setNum(25); + goodsExcel.setUnifiedQuotation(1275.00); + goodsExcel.setWarnNum(85); + goodsExcel.setRenewNum(13); + goodsExcel.setAllEnterNum(50); + goodsExcel.setDeactivate("是"); + goodsExcel.setRemark("备注"); + list.add(goodsExcel); + ExcelUtil.export(response, "物资模板", "物资表", list, GoodsExcel.class); + } + } diff --git a/src/main/java/org/springblade/modules/business/excel/DeviceExcel.java b/src/main/java/org/springblade/modules/business/excel/DeviceExcel.java index 13eac27..fc058a9 100644 --- a/src/main/java/org/springblade/modules/business/excel/DeviceExcel.java +++ b/src/main/java/org/springblade/modules/business/excel/DeviceExcel.java @@ -1,15 +1,17 @@ package org.springblade.modules.business.excel; +import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; import lombok.Data; +import java.io.Serial; import java.io.Serializable; +import java.util.Date; /** * 设备表 Excel实体类 - * * @author BladeX * @since 2024-10-14 */ @@ -18,8 +20,38 @@ import java.io.Serializable; @HeadRowHeight(20) @ContentRowHeight(18) public class DeviceExcel implements Serializable { - + @Serial private static final long serialVersionUID = 1L; + @ExcelProperty("设备编号") + private String code; + + @ExcelProperty("设备名称") + private String name; + + @ExcelProperty("设备型号") + private String model; + + @ExcelProperty("设备类型") + private String type; + + @ExcelProperty("设备位置") + private String position; + + @ExcelProperty("供应商") + private String supplier; + + @ColumnWidth(20) + @ExcelProperty("生产时间") + private Date produceTime; + + @ExcelProperty("实验室名称") + private String limsName; + + @ExcelProperty("楼层名称") + private String floorName; + + @ExcelProperty("房间名称") + private String roomName; } diff --git a/src/main/java/org/springblade/modules/business/excel/DeviceImporter.java b/src/main/java/org/springblade/modules/business/excel/DeviceImporter.java new file mode 100644 index 0000000..37dc12b --- /dev/null +++ b/src/main/java/org/springblade/modules/business/excel/DeviceImporter.java @@ -0,0 +1,49 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.modules.business.excel; + +import lombok.RequiredArgsConstructor; +import org.springblade.core.excel.support.ExcelImporter; +import org.springblade.modules.business.service.IDeviceService; + +import java.util.List; + +/** + * 设备数据导入类 + * + * @author Chill + */ +@RequiredArgsConstructor +public class DeviceImporter implements ExcelImporter { + + private final IDeviceService service; + private final Boolean isCovered; + + @Override + public void save(List data) { + service.importGoods(data, isCovered); + } +} diff --git a/src/main/java/org/springblade/modules/business/excel/supplies/GoodsExcel.java b/src/main/java/org/springblade/modules/business/excel/supplies/GoodsExcel.java index 449027d..5dd624b 100644 --- a/src/main/java/org/springblade/modules/business/excel/supplies/GoodsExcel.java +++ b/src/main/java/org/springblade/modules/business/excel/supplies/GoodsExcel.java @@ -6,12 +6,12 @@ import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; import lombok.Data; +import java.io.Serial; import java.io.Serializable; import java.util.Date; /** * 物品表 Excel实体类 - * * @author BladeX * @since 2024-10-17 */ @@ -20,140 +20,55 @@ import java.util.Date; @HeadRowHeight(20) @ContentRowHeight(18) public class GoodsExcel implements Serializable { - + @Serial private static final long serialVersionUID = 1L; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Long bigClassId; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String bigClass; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") + @ExcelProperty("库存ID") + private String inventoryId; + + @ExcelProperty("仓库名称") + private String warehouseName; + + @ExcelProperty("存放位置") + private String location; + + @ExcelProperty("名称") private String name; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Integer num; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String unit; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String code; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") + + @ExcelProperty("描述") + private String describes; + + @ExcelProperty("产品型号") private String xh; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String rule; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String manufacturer; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Long companyId; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String company; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") + + @ExcelProperty("品牌") private String brand; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String type; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") + + @ExcelProperty("采购价格") + private Double purchasePrice; + + @ExcelProperty("在库数量") + private Integer num; + +// @ExcelProperty("库存价值") +// private String inventoryPrice; + + @ExcelProperty("统一报价") + private Double unifiedQuotation; + + @ExcelProperty("安全库存") private Integer warnNum; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Date warnTime; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Date beyondTime; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String location; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String ccfs; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private String yt; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Integer danger; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Integer deactivate; - /** - * - */ - @ColumnWidth(20) - @ExcelProperty("") - private Integer isDeleted; + + @ExcelProperty("续订时间") + private Integer renewNum; + + @ExcelProperty("实际入库数量") + private Integer allEnterNum; + + @ExcelProperty("是否已停产?") + private String deactivate; + + @ExcelProperty("备注") + private String remark; } diff --git a/src/main/java/org/springblade/modules/business/excel/supplies/GoodsImporter.java b/src/main/java/org/springblade/modules/business/excel/supplies/GoodsImporter.java new file mode 100644 index 0000000..7c46afb --- /dev/null +++ b/src/main/java/org/springblade/modules/business/excel/supplies/GoodsImporter.java @@ -0,0 +1,49 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.modules.business.excel.supplies; + +import lombok.RequiredArgsConstructor; +import org.springblade.core.excel.support.ExcelImporter; +import org.springblade.modules.business.service.supplies.IGoodsService; + +import java.util.List; + +/** + * 行政区划数据导入类 + * + * @author Chill + */ +@RequiredArgsConstructor +public class GoodsImporter implements ExcelImporter { + + private final IGoodsService service; + private final Boolean isCovered; + + @Override + public void save(List data) { + service.importGoods(data, isCovered); + } +} diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/Device.java b/src/main/java/org/springblade/modules/business/pojo/entity/Device.java index a2565f6..f2b9d3a 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/Device.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/Device.java @@ -71,4 +71,34 @@ public class Device extends BaseEntity { * 二维码(base64) */ private String qrcode; + + /** + * 实验室id + */ + private Long limsId; + + /** + * 实验室名称 + */ + private String limsName; + + /** + * 楼层id + */ + private Long floorId; + + /** + * 楼层名称 + */ + private String floorName; + + /** + * 房间id + */ + private Long roomId; + + /** + * 房间名称 + */ + private String roomName; } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java index 7e24ef2..fc90c47 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java @@ -87,6 +87,12 @@ public class MaintenancePlan extends BaseEntity { */ private Integer isOpen; + /** + * 实验室图纸 + */ + @TableField(exist = false) + private List draws; + /** * 附件详情 */ diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/supplies/Goods.java b/src/main/java/org/springblade/modules/business/pojo/entity/supplies/Goods.java index da1383d..fc43bdd 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/supplies/Goods.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/supplies/Goods.java @@ -146,6 +146,16 @@ public class Goods extends BaseEntity { */ private String describes; + /** + * 仓库id + */ + private Long warehouseId; + + /** + * 仓库名称 + */ + private String warehouseName; + /** * 库存价值 */ diff --git a/src/main/java/org/springblade/modules/business/service/IDeviceService.java b/src/main/java/org/springblade/modules/business/service/IDeviceService.java index a4fe23c..49abef4 100644 --- a/src/main/java/org/springblade/modules/business/service/IDeviceService.java +++ b/src/main/java/org/springblade/modules/business/service/IDeviceService.java @@ -45,4 +45,7 @@ public interface IDeviceService extends BaseService { List selectTypeCount(String startTime, String endTime); List selectStatusCount(String startTime, String endTime); + + void importGoods(List data, Boolean isCovered); + } diff --git a/src/main/java/org/springblade/modules/business/service/impl/DeviceServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/DeviceServiceImpl.java index 6cda873..2479e59 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/DeviceServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/DeviceServiceImpl.java @@ -1,15 +1,21 @@ package org.springblade.modules.business.service.impl; +import com.aliyun.oss.ServiceException; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.zxing.WriterException; import lombok.AllArgsConstructor; import org.apache.commons.collections.CollectionUtils; +import org.springblade.common.cache.SysCache; import org.springblade.common.utils.CommonUtil; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.pojo.vo.PieStatVO; import org.springblade.modules.business.service.IDeviceAttachService; import org.springblade.modules.business.service.IDeviceMaintenanceService; @@ -21,11 +27,14 @@ import org.springblade.modules.business.mapper.DeviceMapper; import org.springblade.modules.business.pojo.entity.DeviceAttach; import org.springblade.modules.business.pojo.entity.DeviceMaintenance; import org.springblade.modules.business.pojo.vo.DeviceVO; +import org.springblade.modules.system.pojo.entity.Dept; +import org.springblade.modules.system.pojo.vo.DeptVO; +import org.springblade.modules.system.service.IDeptService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -40,6 +49,7 @@ public class DeviceServiceImpl extends BaseServiceImpl imp private final IDeviceAttachService deviceAttachService; private final IDeviceMaintenanceService maintenanceService; + private final IDeptService deptService; @Override public IPage selectDevicePage(IPage page, DeviceVO device) { @@ -135,4 +145,80 @@ public class DeviceServiceImpl extends BaseServiceImpl imp public List selectStatusCount(String startTime, String endTime) { return baseMapper.selectStatusCount(startTime, endTime); } + + @Override + public void importGoods(List data, Boolean isCovered) { + List list = new ArrayList<>(); + // 获取负责的实验室数据 + List deptvos = deptService.assLimsTree(AuthUtil.getTenantId()); + List ids = deptvos.stream().map(DeptVO::getId).toList(); + data.forEach(deviceExcel -> { + Device device = BeanUtil.copyProperties(deviceExcel, Device.class); + if (device != null) { + // 按照实验室名称查询实验室id + String deptIds = SysCache.getDeptIds(AuthUtil.getTenantId(), device.getLimsName()); + // 如果没有查询到结果,抛业务异常 + if (StringUtils.isBlank(deptIds)) { + throw new ServiceException("实验室【" + device.getLimsName() + "】不存在,请修改后再上传!"); + } + List longList = Func.toLongList(deptIds); + + // 符合条件的实验室id + List commonIds = findCommonElements(ids, longList); + // 没有符合条件的,抛业务异常 + if (CollectionUtil.isEmpty(commonIds)) { + throw new ServiceException("实验室【" + device.getLimsName() + "】不存在,请修改后再上传!"); + } + Long limsId = commonIds.get(0); + device.setLimsId(limsId); + + // 获取该实验室下所有子项目,包括:楼层,房间 + List deptChild = SysCache.getDeptChild(limsId); + + // 获取符合条件的楼层 + List floors = deptChild.stream().filter(dept -> device.getFloorName().equals(dept.getDeptName())).toList(); + if (CollectionUtil.isEmpty(floors)) { + throw new ServiceException("实验室【" + device.getLimsName() + "】的楼层【" + device.getFloorName() + "】不存在,请修改后再上传!"); + } + device.setFloorId(floors.get(0).getId()); + + // 获取符合条件的房间 + List rooms = deptChild.stream().filter(dept -> device.getRoomName().equals(dept.getDeptName())).toList(); + if (CollectionUtil.isEmpty(rooms)) { + throw new ServiceException("实验室【" + device.getLimsName() + "】的房间【" + device.getRoomName() + "】不存在,请修改后再上传!"); + } + device.setRoomId(rooms.get(0).getId()); + list.add(device); + } + }); + if (isCovered) { + this.saveOrUpdateBatch(list); + } else { + this.saveBatch(list); + } + } + + /** + * 获取两个list相同数据 + * @param list1 + * @param list2 + * @return + */ + public static List findCommonElements(List list1, List list2) { + // 创建一个list1的副本以避免修改原始列表 + List resultList = new ArrayList<>(list1); + // 将副本转换为set以去除重复项并提高查找效率 + Set set1 = new HashSet<>(resultList); + // 保留同时存在于set1和list2中的元素 + set1.retainAll(list2); + // 如果需要保持list1中元素的顺序,可以再遍历一次list1 + // 只添加那些在set1中存在的元素到结果列表中 + resultList.clear(); + for (Long element : list1) { + if (set1.contains(element)) { + resultList.add(element); + } + } + return resultList; + } } diff --git a/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java index 2d728a1..003ee9c 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static org.springblade.common.constant.CommonConstant.*; + /** * 巡检计划 服务实现类 * @@ -66,10 +68,20 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl { attach.setDeviceId(plan.getId()); - attach.setStatus(2);// 实验室附件 + attach.setStatus(LIMS_ATTACHES);// 实验室附件 }); save = deviceAttachService.saveBatch(attaches); } + + // 保存图纸 + List draws = plan.getDraws(); + if (CollectionUtil.isNotEmpty(draws)) { + draws.forEach(attach -> { + attach.setDeviceId(plan.getId()); + attach.setStatus(LIMS_DRAWS);// 实验室图纸 + }); + save = deviceAttachService.saveBatch(draws); + } return save; } @@ -105,26 +117,51 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl attaches = plan.getAttaches(); if (CollectionUtil.isNotEmpty(attaches)) { - // 需要新增的巡检 + // 需要新增的附件 List newSave = attaches.stream().filter(attach -> attach.getId() == null).collect(Collectors.toList()); - // 不删除的巡检ids + // 不删除的附件ids List ids = attaches.stream().filter(attach -> attach.getId() != null).map(DeviceAttach::getId).collect(Collectors.toList()); deviceAttachService.remove(Wrappers.lambdaQuery(DeviceAttach.class) .eq(DeviceAttach::getDeviceId, plan.getId()) - .eq(DeviceAttach::getStatus, 2) + .eq(DeviceAttach::getStatus, LIMS_ATTACHES) .notIn(CollectionUtils.isNotEmpty(ids), DeviceAttach::getId, ids)); if (CollectionUtil.isNotEmpty(newSave)) { newSave.forEach(maintenance -> { maintenance.setDeviceId(plan.getId()); - maintenance.setStatus(2); + maintenance.setStatus(LIMS_ATTACHES); }); deviceAttachService.saveBatch(newSave); } } else { deviceAttachService.remove(Wrappers.lambdaQuery(DeviceAttach.class) .eq(DeviceAttach::getDeviceId, plan.getId()) - .eq(DeviceAttach::getStatus, 2)); + .eq(DeviceAttach::getStatus, LIMS_ATTACHES)); + } + + // 保存图纸 + List draws = plan.getDraws(); + if (CollectionUtil.isNotEmpty(draws)) { + // 需要新增的图纸 + List newSave = draws.stream().filter(attach -> attach.getId() == null).collect(Collectors.toList()); + // 不删除的图纸ids + List ids = draws.stream().filter(attach -> attach.getId() != null).map(DeviceAttach::getId).collect(Collectors.toList()); + deviceAttachService.remove(Wrappers.lambdaQuery(DeviceAttach.class) + .eq(DeviceAttach::getDeviceId, plan.getId()) + .eq(DeviceAttach::getStatus, LIMS_DRAWS) + .notIn(CollectionUtils.isNotEmpty(ids), DeviceAttach::getId, ids)); + + if (CollectionUtil.isNotEmpty(newSave)) { + newSave.forEach(maintenance -> { + maintenance.setDeviceId(plan.getId()); + maintenance.setStatus(LIMS_DRAWS); + }); + deviceAttachService.saveBatch(newSave); + } + } else { + deviceAttachService.remove(Wrappers.lambdaQuery(DeviceAttach.class) + .eq(DeviceAttach::getDeviceId, plan.getId()) + .eq(DeviceAttach::getStatus, LIMS_DRAWS)); } return this.updateById(plan); } @@ -160,8 +197,12 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl list = deviceAttachService.list(Wrappers.lambdaQuery(DeviceAttach.class).eq(DeviceAttach::getDeviceId, planDetail.getId()).eq(DeviceAttach::getStatus, 2)); + List list = deviceAttachService.list(Wrappers.lambdaQuery(DeviceAttach.class).eq(DeviceAttach::getDeviceId, planDetail.getId()).eq(DeviceAttach::getStatus, LIMS_ATTACHES)); planDetail.setAttaches(list); + + // 图纸 + List draws = deviceAttachService.list(Wrappers.lambdaQuery(DeviceAttach.class).eq(DeviceAttach::getDeviceId, planDetail.getId()).eq(DeviceAttach::getStatus, LIMS_DRAWS)); + planDetail.setDraws(draws); return planDetail; } @@ -197,11 +238,11 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl implem return goodsList; } + @Override + public void importGoods(List data, Boolean isCovered) { + List list = new ArrayList<>(); + // 获取仓库数据 +// List deptvos = deptService.assLimsTree(AuthUtil.getTenantId()); +// List ids = deptvos.stream().map(DeptVO::getId).toList(); + data.forEach(goodsExcel -> { + Goods goods = BeanUtil.copyProperties(goodsExcel, Goods.class); + if (goods != null) { + // 是否已停产 + goods.setDeactivate("是".equals(goodsExcel.getDeactivate()) ? 1 : 0); + list.add(goods); + } + }); + if (isCovered) { + this.saveOrUpdateBatch(list); + } else { + this.saveBatch(list); + } + } + } diff --git a/src/main/java/org/springblade/modules/business/service/supplies/IGoodsService.java b/src/main/java/org/springblade/modules/business/service/supplies/IGoodsService.java index 6fbdd15..88dca15 100644 --- a/src/main/java/org/springblade/modules/business/service/supplies/IGoodsService.java +++ b/src/main/java/org/springblade/modules/business/service/supplies/IGoodsService.java @@ -34,4 +34,10 @@ public interface IGoodsService extends BaseService { */ List exportGoods(Wrapper queryWrapper); + /** + * 导入 + * @param data + * @param isCovered + */ + void importGoods(List data, Boolean isCovered); } diff --git a/src/main/java/org/springblade/modules/system/controller/DeptController.java b/src/main/java/org/springblade/modules/system/controller/DeptController.java index fd1776f..f0c10c1 100644 --- a/src/main/java/org/springblade/modules/system/controller/DeptController.java +++ b/src/main/java/org/springblade/modules/system/controller/DeptController.java @@ -189,7 +189,7 @@ public class DeptController extends BladeController { } /** - * 实验室下拉 + * 获取未绑定实验室下拉 */ @GetMapping("/limsTree") public R> limsTree(String tenantId) { @@ -197,4 +197,13 @@ public class DeptController extends BladeController { return R.data(tree); } + /** + * 获取已绑定实验室下拉 + */ + @GetMapping("/assLimsTree") + public R> assLimsTree(String tenantId) { + List tree = deptService.assLimsTree(Func.toStrWithEmpty(tenantId, "000000")); + return R.data(tree); + } + } diff --git a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java index d440ae2..1f3939e 100644 --- a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java +++ b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java @@ -26,6 +26,7 @@ package org.springblade.modules.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.lettuce.core.dynamic.annotation.Param; import org.springblade.modules.system.pojo.entity.Dept; import org.springblade.modules.system.pojo.vo.DeptVO; @@ -56,7 +57,21 @@ public interface DeptMapper extends BaseMapper { * @return */ List tree(String tenantId); - List limsTree(String tenantId); + + /** + * 获取未绑定绑定实验室列表 + * @param tenantId + * @return + */ + List noAssLimsTree(String tenantId); + + /** + * 获取已绑定绑定实验室列表 + * + * @param tenantId + * @return + */ + List assLimsTree(@Param("tenantId")String tenantId, @Param("createUser") Long createUser); /** * 懒加载获取树形节点 diff --git a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml index 5424206..e9582f7 100644 --- a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml +++ b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml @@ -74,8 +74,8 @@ ORDER BY sort - + select id, parent_id, dept_name as title, id as "value", id as "key" from blade_dept where is_deleted = 0 and dept_category = 5 and id not in (SELECT dept_id FROM lab_maintenance_plan WHERE is_deleted = 0) and tenant_id = #{_parameter} @@ -120,5 +120,26 @@ and is_deleted = 0 + diff --git a/src/main/java/org/springblade/modules/system/service/IDeptService.java b/src/main/java/org/springblade/modules/system/service/IDeptService.java index 70d88ba..f031378 100644 --- a/src/main/java/org/springblade/modules/system/service/IDeptService.java +++ b/src/main/java/org/springblade/modules/system/service/IDeptService.java @@ -133,5 +133,17 @@ public interface IDeptService extends IService { */ List search(String deptName, Long parentId); + /** + * 获取未绑定实验室 + * @param tenantId + * @return + */ List limsTree(String tenantId); + + /** + * 获取已绑定实验室 + * @param tenantId + * @return + */ + List assLimsTree(String tenantId); } diff --git a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java index 357d59e..5657c6b 100644 --- a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java +++ b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java @@ -185,7 +185,12 @@ public class DeptServiceImpl extends ServiceImpl implements ID @Override public List limsTree(String tenantId) { - return baseMapper.limsTree(tenantId); + return baseMapper.noAssLimsTree(tenantId); + } + + @Override + public List assLimsTree(String tenantId) { + return baseMapper.assLimsTree(tenantId, AuthUtil.getUserId()); } }