diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaOutWarehouseController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaOutWarehouseController.java index a6a80ee..e0ac804 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaOutWarehouseController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaOutWarehouseController.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBoList; +import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -46,7 +48,7 @@ public class SysOaOutWarehouseController extends BaseController { */ @SaCheckPermission("oa:oaOutWarehouse:list") @GetMapping("/list") - public TableDataInfo list(SysOaOutWarehouseBo bo, PageQuery pageQuery) { + public TableDataInfo list(SysOaOutWarehouseBo bo, PageQuery pageQuery) { return iSysOaOutWarehouseService.queryPageList(bo, pageQuery); } @@ -98,6 +100,18 @@ public class SysOaOutWarehouseController extends BaseController { return toAjax(iSysOaOutWarehouseService.insertByBo(bo)); } + /** + * 批量新增仓库出库 + */ + @SaCheckPermission("oa:oaOutWarehouse:add") + @Log(title = "仓库批量出库",businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/insertOutBatch") + public R addAll(@Validated(AddGroup.class) @RequestBody SysOaOutWarehouseBoList boList) { + return toAjax(iSysOaOutWarehouseService.insertByBoList(boList)); + } + + /** * 修改仓库出库 */ 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 8bda81f..1c6559f 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 @@ -26,8 +26,8 @@ public class SysOaOutWarehouseBo extends BaseEntity { /** * 主键id */ + @NotNull(message = "出库数量不能为空", groups = { EditGroup.class }) @TableId(value = "id",type = IdType.AUTO) - @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) private Long id; /** @@ -52,5 +52,13 @@ public class SysOaOutWarehouseBo extends BaseEntity { @NotNull(message = "出库对象id不能为空", groups = { AddGroup.class, EditGroup.class }) private Long warehouseId; + /** + * 项目名 + */ + private String projectName; + /** + * 物料名 + */ + private String warehouseName; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBo2.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBo2.java new file mode 100644 index 0000000..6e67add --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBo2.java @@ -0,0 +1,47 @@ +package com.ruoyi.oa.domain.bo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +/** + * 仓库出库业务对象 sys_oa_out_warehouse + * + * @author liuzongkun999 + * @date 2024-11-02 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class SysOaOutWarehouseBo2 extends BaseEntity { + + /** + * 物料id + */ + @NotNull(message = "出库对象id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long warehouseId; + + /** + * 出库数量 + */ + @NotNull(message = "出库数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long amount; + + /** + * 出库备注 + */ + private String remark; + + /** + * 对应项目id + */ + private Long projectId; + + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBoList.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBoList.java new file mode 100644 index 0000000..62c781a --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaOutWarehouseBoList.java @@ -0,0 +1,30 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; +import java.util.List; +/** + * 仓库批量出库业务对象 sys_oa_out_warehouse + * + * @author liuzongkun999 + * @date 2024-11-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class SysOaOutWarehouseBoList extends BaseEntity { + /** + * 该项目对应的出库数据 + */ + private List outWareHouseList; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = AddGroup.class) + private Long projectId; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaOutWarehouseListVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaOutWarehouseListVo.java new file mode 100644 index 0000000..ca644f3 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaOutWarehouseListVo.java @@ -0,0 +1,56 @@ +package com.ruoyi.oa.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + + + +/** + * 仓库出库查询对象 sys_oa_out_warehouse + * + * @author liuzongkun999 + * @date 2024-11-02 + */ +@Data +@ExcelIgnoreUnannotated +public class SysOaOutWarehouseListVo { + + + /** + * 主键id + */ + private Long id; + + /** + * 出库后对应的项目id + */ + private Long projectId; + + /** + * 出库数量 + */ + private Long amount; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 出库备注 + */ + private String remark; + + /** + * 出库对象id + */ + private Long warehouseId; + + /** + * 出库物料名称 + */ + private String warehouseName; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaOutWarehouseVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaOutWarehouseVo.java index 606390d..60809e5 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaOutWarehouseVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaOutWarehouseVo.java @@ -2,10 +2,7 @@ package com.ruoyi.oa.domain.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.ruoyi.common.annotation.ExcelDictFormat; -import com.ruoyi.common.convert.ExcelDictConvert; import lombok.Data; -import java.util.Date; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaOutWarehouseMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaOutWarehouseMapper.java index a8842ed..523db1a 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaOutWarehouseMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaOutWarehouseMapper.java @@ -1,8 +1,16 @@ package com.ruoyi.oa.mapper; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.oa.domain.SysOaOutWarehouse; +import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBo; +import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBo2; +import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * 仓库出库Mapper接口 @@ -12,4 +20,10 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus; */ public interface SysOaOutWarehouseMapper extends BaseMapperPlus { + /** + * 仓库出库筛选(联查) + */ + List defineselectList(@Param(value = "bo") SysOaOutWarehouseBo bo, @Param(value = "page") PageQuery pageQuery); + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java index 5df8523..2aa949c 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java @@ -1,5 +1,6 @@ package com.ruoyi.oa.mapper; +import com.ruoyi.oa.domain.SysOaOutWarehouse; import com.ruoyi.oa.domain.SysOaProject; import com.ruoyi.oa.domain.vo.SysOaProjectVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaOutWarehouseService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaOutWarehouseService.java index 1baf494..23c36d0 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaOutWarehouseService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaOutWarehouseService.java @@ -1,6 +1,8 @@ package com.ruoyi.oa.service; import com.ruoyi.oa.domain.SysOaOutWarehouse; +import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBoList; +import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseVo; import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBo; import com.ruoyi.common.core.page.TableDataInfo; @@ -32,7 +34,7 @@ public interface ISysOaOutWarehouseService { /** * 查询仓库出库列表 */ - TableDataInfo queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery); + TableDataInfo queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery); /** * 查询仓库出库列表 @@ -44,6 +46,11 @@ public interface ISysOaOutWarehouseService { */ Boolean insertByBo(SysOaOutWarehouseBo bo); + /** + * 仓库批量出库 + */ + Boolean insertByBoList(SysOaOutWarehouseBoList boList); + /** * 修改仓库出库 */ @@ -55,5 +62,4 @@ public interface ISysOaOutWarehouseService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - } 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 1773622..fe7d4b6 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 @@ -1,13 +1,20 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.oa.domain.SysOaProject; import com.ruoyi.oa.domain.SysOaWarehouse; +import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBo2; +import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBoList; +import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; +import com.ruoyi.oa.mapper.SysOaProjectMapper; import com.ruoyi.oa.mapper.SysOaWarehouseMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -17,10 +24,13 @@ import com.ruoyi.oa.domain.SysOaOutWarehouse; import com.ruoyi.oa.mapper.SysOaOutWarehouseMapper; import com.ruoyi.oa.service.ISysOaOutWarehouseService; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import static cn.hutool.core.bean.BeanUtil.*; + /** * 仓库出库Service业务层处理 * @@ -61,9 +71,19 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService { * 查询仓库出库列表 */ @Override - public TableDataInfo queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + public TableDataInfo queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery) { +// LambdaQueryWrapper lqw = buildQueryWrapper(bo); +// Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + pageQuery.setPageNum(ObjectUtil.defaultIfNull(pageQuery.getPageNum(), 1)); + pageQuery.setPageSize(ObjectUtil.defaultIfNull(pageQuery.getPageSize(), Integer.MAX_VALUE)); + if (pageQuery.getPageNum() <= 0) { + pageQuery.setPageNum(1); + } + if (pageQuery.getPageSize() <= 0) { + pageQuery.setPageSize(Integer.MAX_VALUE); + } + pageQuery.setPageNum((pageQuery.getPageNum() - 1)*pageQuery.getPageSize()); + List result = baseMapper.defineselectList(bo, pageQuery); return TableDataInfo.build(result); } @@ -79,9 +99,11 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService { private LambdaQueryWrapper buildQueryWrapper(SysOaOutWarehouseBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getProjectId() != null, SysOaOutWarehouse::getProjectId, bo.getProjectId()); lqw.eq(bo.getAmount() != null, SysOaOutWarehouse::getAmount, bo.getAmount()); lqw.eq(bo.getWarehouseId() != null, SysOaOutWarehouse::getWarehouseId, bo.getWarehouseId()); + return lqw; } @@ -90,10 +112,13 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService { */ @Override public Boolean insertByBo(SysOaOutWarehouseBo bo) { - SysOaOutWarehouse decrease = BeanUtil.toBean(bo, SysOaOutWarehouse.class); + SysOaOutWarehouse decrease = toBean(bo, SysOaOutWarehouse.class); validEntityBeforeSave(decrease); SysOaWarehouse warehouse = baseMapper2.selectById(decrease.getWarehouseId()); // 1 如果对应仓库表项目数量-将要出库数量<0,出库失败, 繁殖 , 增加该条 + if(warehouse == null) { + throw new Error("已不存在该物料"+decrease.getWarehouseId()); + } if(warehouse.getInventory() - decrease.getAmount() < 0) { throw new Error("剩余数量不足,出库失败"); } @@ -106,14 +131,74 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService { return baseMapper.insert(decrease) > 0; } + /** + * 仓库批量出库 + */ + @Override + public Boolean insertByBoList(SysOaOutWarehouseBoList boList) { + + // 只进行了插入出库表 + // 还缺少 检验数量是否足够,以及删除对应库存数量的业务逻辑 + Long projectId = boList.getProjectId(); + List list = boList.getOutWareHouseList(); + + list.forEach((sysOaOutWarehouseBo2 -> { + + sysOaOutWarehouseBo2.setProjectId(projectId); + SysOaOutWarehouseBo sysOaOutWarehouse = toBean(sysOaOutWarehouseBo2, SysOaOutWarehouseBo.class); + insertByBo(sysOaOutWarehouse); + })); + + return true; + } + /** * 修改仓库出库 */ @Override public Boolean updateByBo(SysOaOutWarehouseBo bo) { - SysOaOutWarehouse update = BeanUtil.toBean(bo, SysOaOutWarehouse.class); + SysOaOutWarehouse update = toBean(bo, SysOaOutWarehouse.class); validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + + // 修改后的数量 + Long amount1 = update.getAmount(); + + //获得 修改前的数量 + SysOaOutWarehouse sysOaOutWarehouse = baseMapper.selectById(update.getId()); + Long amount = sysOaOutWarehouse.getAmount(); + + //找出库存表对应的那条数据 的库存数量 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SysOaWarehouse::getId, update.getWarehouseId()); + SysOaWarehouse warehouse = baseMapper2.selectOne(lqw); + Long inventory = warehouse.getInventory(); + + //出库多了 + if(amount1 > amount) { + //确保出库不超余量 + if(amount1-amount<=inventory) { + //可以减少差值 + baseMapper.updateById(update); + warehouse.setInventory(inventory -( amount1 - amount)); + baseMapper2.updateById(warehouse); + } + else { + throw new Error("库存数量不足,无法增加出库数量"); + } + } + else { + //确保出库不能为负 + if (amount1 > 0) { + //此时增加差值 + baseMapper.updateById(update); + warehouse.setInventory(warehouse.getInventory() + amount - amount1); + baseMapper2.updateById(warehouse); + } + else { + throw new Error("出库数量不能为负"); + } + } + return true; } /** @@ -131,7 +216,28 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } - return baseMapper.deleteBatchIds(ids) > 0; + + + //需要增加的对应物料数量 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SysOaOutWarehouse::getId, ids.toArray()); + + List sysOaOutWarehouses = baseMapper.selectList(lqw); //出库表中的所有删除的数据 + + sysOaOutWarehouses.forEach(sysOaOutWarehouse -> { //其中一条 + + + //选出相对应的 库存表中那一条的数据 + LambdaQueryWrapper lqw2 = Wrappers.lambdaQuery(); + lqw2.eq(SysOaWarehouse::getId, sysOaOutWarehouse.getWarehouseId()); + SysOaWarehouse warehouse = baseMapper2.selectOne(lqw2); + + // 恢复原本出库的数量 + warehouse.setInventory(warehouse.getInventory() + sysOaOutWarehouse.getAmount()); + baseMapper2.updateById(warehouse); + }); + boolean flag = baseMapper.deleteBatchIds(ids) > 0; + return flag; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java index 352f122..3003554 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java @@ -7,6 +7,8 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.oa.domain.SysOaOutWarehouse; +import com.ruoyi.oa.mapper.SysOaOutWarehouseMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.SysOaWarehouseBo; @@ -15,6 +17,7 @@ import com.ruoyi.oa.domain.SysOaWarehouse; import com.ruoyi.oa.mapper.SysOaWarehouseMapper; import com.ruoyi.oa.service.ISysOaWarehouseService; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; @@ -31,6 +34,8 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { private final SysOaWarehouseMapper baseMapper; + private final SysOaOutWarehouseMapper outWareMapper; + /** * 查询仓库管理 */ @@ -122,6 +127,13 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } - return baseMapper.deleteBatchIds(ids) > 0; + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SysOaWarehouse::getId, ids); + List sysOaWarehouses = baseMapper.selectList(lqw); + sysOaWarehouses.forEach(sysOaWarehouse -> { + sysOaWarehouse.setDelFlag(1L); + }); + + return baseMapper.updateBatchById(sysOaWarehouses); } } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaOutWarehouseMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaOutWarehouseMapper.xml index e0c83a6..5219ff3 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaOutWarehouseMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaOutWarehouseMapper.xml @@ -18,4 +18,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml index 73a18c2..a3658a0 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml @@ -34,5 +34,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -