From 8f95164c289d712bee9eb0bdf266f489ecc0c7c0 Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Sun, 3 Nov 2024 13:40:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BF=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD+=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysOaWarehouseController.java | 29 ++ .../ruoyi/oa/domain/SysOaOutWarehouse.java | 2 +- .../com/ruoyi/oa/domain/SysOaWarehouse.java | 2 +- .../oa/domain/bo/SysOaOutWarehouseBo.java | 3 + .../ruoyi/oa/domain/bo/SysOaWarehouseBo.java | 3 + .../ruoyi/oa/domain/vo/SysOaWarehouseVo.java | 35 +- .../oa/listener/SysOaWarehouseListener.java | 108 +++++ .../impl/SysOaOutWarehouseServiceImpl.java | 1 + ruoyi-ui/src/api/oa/oaWarehouse.js | 44 ++ ruoyi-ui/src/views/oa/oaWarehouse/index.vue | 404 ++++++++++++++++++ 10 files changed, 617 insertions(+), 14 deletions(-) create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/listener/SysOaWarehouseListener.java create mode 100644 ruoyi-ui/src/api/oa/oaWarehouse.js create mode 100644 ruoyi-ui/src/views/oa/oaWarehouse/index.vue diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java index 2f4ed34..e9b5e25 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java @@ -1,13 +1,17 @@ package com.ruoyi.oa.controller; +import java.util.ArrayList; import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.ruoyi.common.excel.ExcelResult; +import com.ruoyi.oa.listener.SysOaWarehouseListener; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.ruoyi.common.annotation.RepeatSubmit; @@ -24,6 +28,7 @@ import com.ruoyi.oa.domain.vo.SysOaWarehouseVo; import com.ruoyi.oa.domain.bo.SysOaWarehouseBo; import com.ruoyi.oa.service.ISysOaWarehouseService; import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 仓库管理 @@ -106,4 +111,28 @@ public class SysOaWarehouseController extends BaseController { @PathVariable Long[] ids) { return toAjax(iSysOaWarehouseService.deleteWithValidByIds(Arrays.asList(ids), true)); } + + + /** + * 导入数据 + * + * @param file 导入文件 + * @param updateSupport 是否更新已存在数据 + */ + @Log(title = "投诉工单导入", businessType = BusinessType.IMPORT) + @SaCheckPermission("complaint:complaint:import") + @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception { + ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), SysOaWarehouseVo.class, + new SysOaWarehouseListener(true)); + return R.ok(result.getAnalysis()); + } + + /** + * 获取导入模板 + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { + ExcelUtil.exportExcel(new ArrayList<>(), "投诉工单", SysOaWarehouseVo.class, response); + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaOutWarehouse.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaOutWarehouse.java index 061156e..0e800c7 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaOutWarehouse.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaOutWarehouse.java @@ -25,7 +25,7 @@ public class SysOaOutWarehouse extends BaseEntity { /** * 主键id */ - @TableId(value = "id") + @TableId(value = "id",type = IdType.AUTO) private Long id; /** * 出库后对应的项目id diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java index 2ee9563..a08567f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java @@ -25,7 +25,7 @@ public class SysOaWarehouse extends BaseEntity { /** * 主键id */ - @TableId(value = "id") + @TableId(value = "id",type = IdType.AUTO) private Long id; /** * 库存数量 diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBo.java index c561e55..8bda81f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBo.java @@ -1,5 +1,7 @@ package com.ruoyi.oa.domain.bo; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import lombok.Data; @@ -24,6 +26,7 @@ public class SysOaOutWarehouseBo extends BaseEntity { /** * 主键id */ + @TableId(value = "id",type = IdType.AUTO) @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) private Long id; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseBo.java index 125f36c..b484584 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseBo.java @@ -1,5 +1,7 @@ package com.ruoyi.oa.domain.bo; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import lombok.Data; @@ -24,6 +26,7 @@ public class SysOaWarehouseBo extends BaseEntity { /** * 主键id */ + @TableId(value = "id",type = IdType.AUTO) private Long id; /** diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseVo.java index 6bcab95..c7d5284 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseVo.java @@ -24,32 +24,41 @@ public class SysOaWarehouseVo { /** * 主键id */ - @ExcelProperty(value = "主键id") private Long id; + + /** + * 序号 + */ + @ExcelProperty(value = "序号") + private Long temp; + + + /** + * 物料名称 + */ + @ExcelProperty(value = "物料名称") + private String name; + + /** + * 型号 + */ + @ExcelProperty(value = "型号") + private String model; + + /** * 库存数量 */ @ExcelProperty(value = "库存数量") private Long inventory; - /** - * 型号 - */ - @ExcelProperty(value = "型号") - private String model; - /** * 单位 */ @ExcelProperty(value = "单位") private String unit; - /** - * 物料名称 - */ - @ExcelProperty(value = "物料名称") - private String name; /** * 品牌 @@ -70,4 +79,6 @@ public class SysOaWarehouseVo { private String remark; + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/listener/SysOaWarehouseListener.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/listener/SysOaWarehouseListener.java new file mode 100644 index 0000000..f746a00 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/listener/SysOaWarehouseListener.java @@ -0,0 +1,108 @@ +package com.ruoyi.oa.listener; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.ruoyi.common.excel.ExcelListener; +import com.ruoyi.common.excel.ExcelResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.ValidatorUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.oa.domain.bo.SysOaWarehouseBo; +import com.ruoyi.oa.domain.vo.SysOaWarehouseVo; +import com.ruoyi.oa.service.ISysOaArticleService; +import com.ruoyi.oa.service.ISysOaWarehouseService; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Objects; + +@Slf4j +public class SysOaWarehouseListener extends AnalysisEventListener implements ExcelListener { + + private final ISysOaWarehouseService sysOaWarehouseService; + + private final Boolean isUpdateSupport; + + + private int successNum = 0; + private int failureNum = 0; + private final StringBuilder successMsg = new StringBuilder(); + private final StringBuilder failureMsg = new StringBuilder(); + + public SysOaWarehouseListener(Boolean isUpdateSupport) { +// String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword"); + this.sysOaWarehouseService = SpringUtils.getBean(ISysOaWarehouseService.class); + this.isUpdateSupport = isUpdateSupport; + + } + + @Override + public void invoke(SysOaWarehouseVo sysOaWarehouseVo, AnalysisContext context) { + SysOaWarehouseBo bo = new SysOaWarehouseBo(); + bo.setName(sysOaWarehouseVo.getName()); + if (Objects.nonNull(sysOaWarehouseVo.getModel())){ + bo.setModel(sysOaWarehouseVo.getModel()); + } + List complaintVo = this.sysOaWarehouseService.queryList(bo); + try { + // 验证是否存在这个用户 + if (complaintVo.size()<=0) { + SysOaWarehouseBo add = BeanUtil.toBean(sysOaWarehouseVo, SysOaWarehouseBo.class); + ValidatorUtils.validate(complaintVo); + sysOaWarehouseService.insertByBo(add); + successNum++; + successMsg.append("
").append(successNum).append("、物料名称: ").append(add.getName()).append(" 导入成功"); + } else if (isUpdateSupport) { + // 这里是将现有的进行更新 + SysOaWarehouseVo warehouseVo = complaintVo.get(0); + + SysOaWarehouseBo update = BeanUtil.toBean(sysOaWarehouseVo, SysOaWarehouseBo.class); + update.setId(warehouseVo.getId()); + update.setInventory(warehouseVo.getInventory()+sysOaWarehouseVo.getInventory()); + ValidatorUtils.validate(complaintVo); + sysOaWarehouseService.updateByBo(update); + successNum++; + successMsg.append("
").append(successNum).append("、物料名称: ").append(update.getName()).append(" 更新成功"); + } + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、物料名称: " + sysOaWarehouseVo.getName() + " 导入失败:"; + failureMsg.append(msg).append(e.getMessage()); + log.error(msg, e); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + + @Override + public ExcelResult getExcelResult() { + return new ExcelResult() { + + @Override + public String getAnalysis() { + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } else { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + @Override + public List getList() { + return null; + } + + @Override + public List getErrorList() { + return null; + } + }; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaOutWarehouseServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaOutWarehouseServiceImpl.java index 1033066..9be8f34 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaOutWarehouseServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaOutWarehouseServiceImpl.java @@ -32,6 +32,7 @@ import java.util.Collection; public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService { private final SysOaOutWarehouseMapper baseMapper; + private final SysOaWarehouseMapper baseMapper2; /** diff --git a/ruoyi-ui/src/api/oa/oaWarehouse.js b/ruoyi-ui/src/api/oa/oaWarehouse.js new file mode 100644 index 0000000..045b60e --- /dev/null +++ b/ruoyi-ui/src/api/oa/oaWarehouse.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询库存管理列表 +export function listOaWarehouse(query) { + return request({ + url: '/oa/oaWarehouse/list', + method: 'get', + params: query + }) +} + +// 查询库存管理详细 +export function getOaWarehouse(id) { + return request({ + url: '/oa/oaWarehouse/' + id, + method: 'get' + }) +} + +// 新增库存管理 +export function addOaWarehouse(data) { + return request({ + url: '/oa/oaWarehouse', + method: 'post', + data: data + }) +} + +// 修改库存管理 +export function updateOaWarehouse(data) { + return request({ + url: '/oa/oaWarehouse', + method: 'put', + data: data + }) +} + +// 删除库存管理 +export function delOaWarehouse(id) { + return request({ + url: '/oa/oaWarehouse/' + id, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/views/oa/oaWarehouse/index.vue b/ruoyi-ui/src/views/oa/oaWarehouse/index.vue new file mode 100644 index 0000000..706f8b3 --- /dev/null +++ b/ruoyi-ui/src/views/oa/oaWarehouse/index.vue @@ -0,0 +1,404 @@ + + +