1.设备导入、导出、模版下载

2.物资导入、导出、模版下载
3.设备绑定实验室、楼层、房间
master
litao 1 year ago
parent 0da2670aeb
commit 0d34d6e0d7
  1. 56
      src/main/java/org/springblade/modules/business/contraller/DeviceController.java
  2. 59
      src/main/java/org/springblade/modules/business/contraller/supplies/GoodsController.java
  3. 36
      src/main/java/org/springblade/modules/business/excel/DeviceExcel.java
  4. 49
      src/main/java/org/springblade/modules/business/excel/DeviceImporter.java
  5. 175
      src/main/java/org/springblade/modules/business/excel/supplies/GoodsExcel.java
  6. 49
      src/main/java/org/springblade/modules/business/excel/supplies/GoodsImporter.java
  7. 30
      src/main/java/org/springblade/modules/business/pojo/entity/Device.java
  8. 6
      src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java
  9. 10
      src/main/java/org/springblade/modules/business/pojo/entity/supplies/Goods.java
  10. 3
      src/main/java/org/springblade/modules/business/service/IDeviceService.java
  11. 88
      src/main/java/org/springblade/modules/business/service/impl/DeviceServiceImpl.java
  12. 61
      src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java
  13. 23
      src/main/java/org/springblade/modules/business/service/impl/supplies/GoodsServiceImpl.java
  14. 6
      src/main/java/org/springblade/modules/business/service/supplies/IGoodsService.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<String, Object> device, HttpServletResponse response) {
QueryWrapper<Device> queryWrapper = Condition.getQueryWrapper(device, Device.class);
List<DeviceExcel> list = deviceService.exportDevice(queryWrapper);
ExcelUtil.export(response, "设备数据" + DateUtil.time(), "设备数据表", list, DeviceExcel.class);
}
/**
* 导出模板
*/
@GetMapping("/export-template")
@Operation(summary = "导出模板")
public void exportUser(HttpServletResponse response) {
List<DeviceExcel> 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);
}
}

@ -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<String, Object> goods, HttpServletResponse response) {
QueryWrapper<Goods> queryWrapper = Condition.getQueryWrapper(goods, Goods.class);
List<GoodsExcel> list = goodsService.exportGoods(queryWrapper);
ExcelUtil.export(response, "物资数据" + DateUtil.time(), "物资数据表", list, GoodsExcel.class);
}
/**
* 导出模板
*/
@GetMapping("export-template")
@Operation(summary = "导出模板")
public void exportUser(HttpServletResponse response) {
List<GoodsExcel> 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);
}
}

@ -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;
}

@ -0,0 +1,49 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* 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<DeviceExcel> {
private final IDeviceService service;
private final Boolean isCovered;
@Override
public void save(List<DeviceExcel> data) {
service.importGoods(data, isCovered);
}
}

@ -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;
}

@ -0,0 +1,49 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* 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<GoodsExcel> {
private final IGoodsService service;
private final Boolean isCovered;
@Override
public void save(List<GoodsExcel> data) {
service.importGoods(data, isCovered);
}
}

@ -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;
}

@ -87,6 +87,12 @@ public class MaintenancePlan extends BaseEntity {
*/
private Integer isOpen;
/**
* 实验室图纸
*/
@TableField(exist = false)
private List<DeviceAttach> draws;
/**
* 附件详情
*/

@ -146,6 +146,16 @@ public class Goods extends BaseEntity {
*/
private String describes;
/**
* 仓库id
*/
private Long warehouseId;
/**
* 仓库名称
*/
private String warehouseName;
/**
* 库存价值
*/

@ -45,4 +45,7 @@ public interface IDeviceService extends BaseService<Device> {
List<PieStatVO> selectTypeCount(String startTime, String endTime);
List<PieStatVO> selectStatusCount(String startTime, String endTime);
void importGoods(List<DeviceExcel> data, Boolean isCovered);
}

@ -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<DeviceMapper, Device> imp
private final IDeviceAttachService deviceAttachService;
private final IDeviceMaintenanceService maintenanceService;
private final IDeptService deptService;
@Override
public IPage<DeviceVO> selectDevicePage(IPage<DeviceVO> page, DeviceVO device) {
@ -135,4 +145,80 @@ public class DeviceServiceImpl extends BaseServiceImpl<DeviceMapper, Device> imp
public List<PieStatVO> selectStatusCount(String startTime, String endTime) {
return baseMapper.selectStatusCount(startTime, endTime);
}
@Override
public void importGoods(List<DeviceExcel> data, Boolean isCovered) {
List<Device> list = new ArrayList<>();
// 获取负责的实验室数据
List<DeptVO> deptvos = deptService.assLimsTree(AuthUtil.getTenantId());
List<Long> 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<Long> longList = Func.toLongList(deptIds);
// 符合条件的实验室id
List<Long> commonIds = findCommonElements(ids, longList);
// 没有符合条件的,抛业务异常
if (CollectionUtil.isEmpty(commonIds)) {
throw new ServiceException("实验室【" + device.getLimsName() + "】不存在,请修改后再上传!");
}
Long limsId = commonIds.get(0);
device.setLimsId(limsId);
// 获取该实验室下所有子项目,包括:楼层,房间
List<Dept> deptChild = SysCache.getDeptChild(limsId);
// 获取符合条件的楼层
List<Dept> 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<Dept> 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<Long> findCommonElements(List<Long> list1, List<Long> list2) {
// 创建一个list1的副本以避免修改原始列表
List<Long> resultList = new ArrayList<>(list1);
// 将副本转换为set以去除重复项并提高查找效率
Set<Long> 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;
}
}

@ -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<MaintenancePlanM
if (CollectionUtil.isNotEmpty(attaches)) {
attaches.forEach(attach -> {
attach.setDeviceId(plan.getId());
attach.setStatus(2);// 实验室附件
attach.setStatus(LIMS_ATTACHES);// 实验室附件
});
save = deviceAttachService.saveBatch(attaches);
}
// 保存图纸
List<DeviceAttach> 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<MaintenancePlanM
// 保存附件
List<DeviceAttach> attaches = plan.getAttaches();
if (CollectionUtil.isNotEmpty(attaches)) {
// 需要新增的巡检
// 需要新增的附件
List<DeviceAttach> newSave = attaches.stream().filter(attach -> attach.getId() == null).collect(Collectors.toList());
// 不删除的巡检ids
// 不删除的附件ids
List<Long> 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<DeviceAttach> draws = plan.getDraws();
if (CollectionUtil.isNotEmpty(draws)) {
// 需要新增的图纸
List<DeviceAttach> newSave = draws.stream().filter(attach -> attach.getId() == null).collect(Collectors.toList());
// 不删除的图纸ids
List<Long> 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<MaintenancePlanM
planDetail.setDetails(floorList);
// 附件
List<DeviceAttach> list = deviceAttachService.list(Wrappers.lambdaQuery(DeviceAttach.class).eq(DeviceAttach::getDeviceId, planDetail.getId()).eq(DeviceAttach::getStatus, 2));
List<DeviceAttach> list = deviceAttachService.list(Wrappers.lambdaQuery(DeviceAttach.class).eq(DeviceAttach::getDeviceId, planDetail.getId()).eq(DeviceAttach::getStatus, LIMS_ATTACHES));
planDetail.setAttaches(list);
// 图纸
List<DeviceAttach> 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<MaintenancePlanM
// 周期:1月 2季度 3半年
Integer period = detail.getPeriod();
// 计算下次开始时间
if (period == 1) {
if (period.equals(ERIOD_MONTH)) {
localDate = localDate.minusMonths(-1);
} else if (period == 2) {
} else if (period.equals(ERIOD_QUARTER)) {
localDate = localDate.minusMonths(-3);
} else if (period == 3) {
} else if (period.equals(ERIOD_HALF_YEAR)) {
localDate = localDate.minusMonths(-6);
}
Date nextDate = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());

@ -3,6 +3,7 @@ package org.springblade.modules.business.service.impl.supplies;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.modules.business.pojo.entity.supplies.Goods;
import org.springblade.modules.business.excel.supplies.GoodsExcel;
import org.springblade.modules.business.mapper.GoodsMapper;
@ -10,6 +11,7 @@ import org.springblade.modules.business.service.supplies.IGoodsService;
import org.springblade.modules.business.pojo.vo.supplies.GoodsVO;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
@ -36,4 +38,25 @@ public class GoodsServiceImpl extends BaseServiceImpl<GoodsMapper, Goods> implem
return goodsList;
}
@Override
public void importGoods(List<GoodsExcel> data, Boolean isCovered) {
List<Goods> list = new ArrayList<>();
// 获取仓库数据
// List<DeptVO> deptvos = deptService.assLimsTree(AuthUtil.getTenantId());
// List<Long> 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);
}
}
}

@ -34,4 +34,10 @@ public interface IGoodsService extends BaseService<Goods> {
*/
List<GoodsExcel> exportGoods(Wrapper<Goods> queryWrapper);
/**
* 导入
* @param data
* @param isCovered
*/
void importGoods(List<GoodsExcel> data, Boolean isCovered);
}

Loading…
Cancel
Save