Browse Source

[feat] 仓库管理

按照万材要求,仓库管理库存盘点新增导出功能,支持部分行和全部行导出,导出更多数据
新增导出所有和选择导出后端接口
新增 导出仓库管理库存盘点明细方法
新增根据库存盘点查询库存盘点单集合方法
新增 导出仓库库存盘点明细实体类
dev
liuxiaoxu 2 days ago
parent
commit
8ec5dbb0e7
  1. 19
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseInventoryCheckController.java
  2. 80
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/domain/VO/ExportWarehouseInventoryCheckVo.java
  3. 6
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/mapper/WarehouseInventoryCheckDetailMapper.java
  4. 6
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/mapper/WarehouseInventoryCheckMapper.java
  5. 21
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseInventoryCheckService.java
  6. 94
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseInventoryCheckServiceImpl.java
  7. 8
      ruoyi-admin/src/main/resources/mapper/warehouse/WarehouseInventoryCheckDetailMapper.xml
  8. 16
      ruoyi-admin/src/main/resources/mapper/warehouse/WarehouseInventoryCheckMapper.xml

19
ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseInventoryCheckController.java

@ -9,6 +9,7 @@ import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.system.domain.BaseEvectionForm;
import com.ruoyi.system.domain.SysSalesOrderChild;
import com.ruoyi.system.domain.Vo.OutsourceQuoteVO;
import com.ruoyi.warehouse.domain.VO.ExportWarehouseInventoryCheckVo;
import com.ruoyi.warehouse.domain.VO.WarehouseInventoryCheckVO;
import com.ruoyi.warehouse.domain.VO.WarehouseMaterialVO;
import com.ruoyi.warehouse.domain.WarehouseInventoryCheckDetail;
@ -95,18 +96,20 @@ public class WarehouseInventoryCheckController extends BaseController
@Log(title = "仓库库存盘点", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
public AjaxResult export(WarehouseInventoryCheck warehouseInventoryCheck,String ids)
public AjaxResult export(WarehouseInventoryCheckVO warehouseInventoryCheck,String ids)
{
if (StringUtils.isEmpty(ids)){
WarehouseInventoryCheckDetail checkDetail = new WarehouseInventoryCheckDetail();
List<WarehouseInventoryCheckDetail> list = checkDetailService.selectWarehouseInventoryCheckDetailList(checkDetail);
ExcelUtil<WarehouseInventoryCheckDetail> util = new ExcelUtil<WarehouseInventoryCheckDetail>(WarehouseInventoryCheckDetail.class);
return util.exportExcel(list, "仓库库存盘点数据");
List<WarehouseInventoryCheckVO> list = warehouseInventoryCheckService.selectWarehouseInventoryCheckListByObject(warehouseInventoryCheck);
List<ExportWarehouseInventoryCheckVo> exportWarehouseInventoryCheckVos = warehouseInventoryCheckService.exportWarehouseInventoryCheckList(list);
ExcelUtil<ExportWarehouseInventoryCheckVo> util = new ExcelUtil<ExportWarehouseInventoryCheckVo>(ExportWarehouseInventoryCheckVo.class);
return util.exportExcel(exportWarehouseInventoryCheckVos, "仓库库存盘点数据");
}else {
String[] checkCodes = ids.split(",");
List<WarehouseInventoryCheckDetail> list = checkDetailMapper.selectWarehouseInventoryCheckDetailByCodes(checkCodes);
ExcelUtil<WarehouseInventoryCheckDetail> util = new ExcelUtil<WarehouseInventoryCheckDetail>(WarehouseInventoryCheckDetail.class);
return util.exportExcel(list, ids);
List<WarehouseInventoryCheckVO> list = warehouseInventoryCheckService.selectInventoryCheckListByCodes(checkCodes);
List<ExportWarehouseInventoryCheckVo> exportWarehouseInventoryCheckVos = warehouseInventoryCheckService.exportWarehouseInventoryCheckList(list);
ExcelUtil<ExportWarehouseInventoryCheckVo> util = new ExcelUtil<ExportWarehouseInventoryCheckVo>(ExportWarehouseInventoryCheckVo.class);
return util.exportExcel(exportWarehouseInventoryCheckVos, "仓库库存盘点数据");
}
}

80
ruoyi-admin/src/main/java/com/ruoyi/warehouse/domain/VO/ExportWarehouseInventoryCheckVo.java

@ -0,0 +1,80 @@
package com.ruoyi.warehouse.domain.VO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.util.Date;
/**
* 导出库存盘点明细
* */
@Data
public class ExportWarehouseInventoryCheckVo {
/** 库存盘点单号 */
@Excel(name = "库存盘点单号")
private String inventoryCheckCode;
/** 库存盘点人名 */
@Excel(name = "库存盘点人名")
private String inventoryCheckName;
/** 仓库号 */
@Excel(name = "仓库号")
private String warehouseCode;
/** 仓库名称 */
@Excel(name = "仓库名称")
private String warehouseName;
/** 库存盘点日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "库存盘点日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date inventoryCheckDate;
/** 物料数合计 */
@Excel(name = "物料数合计")
private Integer materialTotal;
/** 数量合计 */
@Excel(name = "数量合计")
private Integer numTotal;
/** 料号 */
@Excel(name = "料号")
private String materialNo;
/** 物料名称 */
@Excel(name = "物料名称")
private String materialName;
/** 物料单位 */
@Excel(name = "单位")
private String materialUnit;
/** 物料描述 */
@Excel(name = "物料描述")
private String materialDescribe;
/** 库存盘点数量 */
@Excel(name = "盘点数量")
private Integer inventoryCheckNum;
/** 当时库存账上数量 */
@Excel(name = "当时库存账上数量")
private Integer inventoryAccountNum;
/** 批号 */
@Excel(name = "批号")
private Integer batchNumber;
/** 仓库存放地址 */
@Excel(name = "仓库存放地址")
private String warehouseStoreAddress;
}

6
ruoyi-admin/src/main/java/com/ruoyi/warehouse/mapper/WarehouseInventoryCheckDetailMapper.java

@ -92,4 +92,10 @@ public interface WarehouseInventoryCheckDetailMapper
* 根据盘点单号批量查找盘点详情信息
* */
List<WarehouseInventoryCheckDetail> selectWarehouseInventoryCheckDetailByCodes(String[] inventoryCheckCodes);
/**
* 根据盘点单号批量查找盘点详情信息
* */
List<WarehouseInventoryCheckDetail> selectWarehouseInventoryCheckDetailByCodeList(List<String> collectInventoryCheckCodes);
}

6
ruoyi-admin/src/main/java/com/ruoyi/warehouse/mapper/WarehouseInventoryCheckMapper.java

@ -30,6 +30,7 @@ public interface WarehouseInventoryCheckMapper
*/
public List<WarehouseInventoryCheckVO> selectWarehouseInventoryCheckList(WarehouseInventoryCheck warehouseInventoryCheck);
/**
* 新增仓库库存盘点
*
@ -79,4 +80,9 @@ public interface WarehouseInventoryCheckMapper
public int restoreWarehouseInventoryCheckById(Long inventoryCheckId);
public String findMaxRoundCode(@Param("prefix") String prefix);
/**
* 根据盘点单号批量查找库存盘点
* */
List<WarehouseInventoryCheckVO> selectInventoryCheckListByCodes(String[] checkCodes);
}

21
ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseInventoryCheckService.java

@ -2,6 +2,7 @@ package com.ruoyi.warehouse.service;
import java.util.List;
import com.ruoyi.warehouse.domain.VO.ExportWarehouseInventoryCheckVo;
import com.ruoyi.warehouse.domain.VO.WarehouseInventoryCheckVO;
import com.ruoyi.warehouse.domain.WarehouseInventoryCheck;
import com.ruoyi.warehouse.domain.VO.WarehouseMaterialVO;
@ -33,6 +34,16 @@ public interface IWarehouseInventoryCheckService
*/
public List<WarehouseInventoryCheckVO> selectWarehouseInventoryCheckList(WarehouseInventoryCheck warehouseInventoryCheck);
/**
* 查询仓库库存盘点列表
*
* @param warehouseInventoryCheck 仓库库存盘点
* @return 仓库库存盘点集合
*/
public List<WarehouseInventoryCheckVO> selectWarehouseInventoryCheckListByObject(WarehouseInventoryCheck warehouseInventoryCheck);
/**
* 新增仓库库存盘点
*
@ -76,4 +87,14 @@ public interface IWarehouseInventoryCheckService
* 库存盘点详情
* */
int detailWarehouseInventoryCheck(WarehouseInventoryCheck warehouseInventoryCheck);
/**
* 导出库存盘点列表明细
* */
List<ExportWarehouseInventoryCheckVo> exportWarehouseInventoryCheckList(List<WarehouseInventoryCheckVO> list);
/**
* 根据盘点单号批量查找库存盘点
* */
List<WarehouseInventoryCheckVO> selectInventoryCheckListByCodes(String[] checkCodes);
}

94
ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseInventoryCheckServiceImpl.java

@ -3,11 +3,14 @@ package com.ruoyi.warehouse.service.impl;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
@ -18,6 +21,7 @@ import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.impl.SysRoleServiceImpl;
import com.ruoyi.warehouse.domain.VO.ExportWarehouseInventoryCheckVo;
import com.ruoyi.warehouse.domain.VO.WarehouseInventoryCheckVO;
import com.ruoyi.warehouse.domain.VO.WarehouseMaterialVO;
import com.ruoyi.warehouse.domain.WarehouseInventoryCheckDetail;
@ -57,6 +61,9 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh
@Autowired
private SysRoleServiceImpl roleService;
@Autowired
private RedisCache redisCache;
@Autowired
private TaskService taskService;
@ -159,24 +166,27 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh
return returnList;
}
@Override
public List<WarehouseInventoryCheckVO> selectWarehouseInventoryCheckListByObject(WarehouseInventoryCheck warehouseInventoryCheck) {
return warehouseInventoryCheckMapper.selectWarehouseInventoryCheckList(warehouseInventoryCheck);
}
/**
* 新增仓库库存盘点
*
* @param warehouseInventoryCheck 仓库库存盘点
* @return 结果
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
@Override
public int insertWarehouseInventoryCheck(WarehouseInventoryCheck warehouseInventoryCheck)
{
String loginName = ShiroUtils.getLoginName();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String prefix = "KCPD" + simpleDateFormat.format(new Date()).replace("-", "");
String maxCode = warehouseInventoryCheckMapper.findMaxRoundCode(prefix);
String inventoryCheckCode = redisCache.generateBillNo("KCPD");
String newCode = generateCode(prefix,maxCode);
warehouseInventoryCheck.setInventoryCheckCode(newCode);
warehouseInventoryCheck.setInventoryCheckCode(inventoryCheckCode);
warehouseInventoryCheck.setCreateTime(DateUtils.getNowDate());
warehouseInventoryCheck.setCreateBy(loginName);
@ -188,7 +198,7 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh
warehouseInventoryCheck.setMaterialTotal(inventoryCheckDetails.size());
for (WarehouseInventoryCheckDetail tempInventoryCheckDetail : inventoryCheckDetails) {
WarehouseInventoryCheckDetail inventoryCheckDetail = new WarehouseInventoryCheckDetail();
inventoryCheckDetail.setInventoryCheckCode(newCode);
inventoryCheckDetail.setInventoryCheckCode(inventoryCheckCode);
inventoryCheckDetail.setInventoryCheckName(warehouseInventoryCheck.getInventoryCheckName());
inventoryCheckDetail.setMaterialNo(tempInventoryCheckDetail.getMaterialNo());
inventoryCheckDetail.setMaterialName(tempInventoryCheckDetail.getMaterialName());
@ -445,26 +455,62 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh
/**
*库存盘点单号生成规则
*系统自动生成按照特定编码编码暂用KCPD+年月日+001
*自增长:KCPD20231111001KCPD20231111002
*
*/
public static String generateCode(String prefix, String maxCode){
if (StringUtils.isEmpty(maxCode)){
return prefix + "001";
}
* 根据盘点单号批量查找库存盘点
* */
@Override
public List<WarehouseInventoryCheckVO> selectInventoryCheckListByCodes(String[] checkCodes) {
return warehouseInventoryCheckMapper.selectInventoryCheckListByCodes(checkCodes);
}
//解析并递增编号
int sequence = Integer.parseInt(maxCode.substring(4)) + 1;
/**
* 导出库存盘点列表明细
* */
@Override
public List<ExportWarehouseInventoryCheckVo> exportWarehouseInventoryCheckList(List<WarehouseInventoryCheckVO> list) {
// 获取所有的库存盘点单号
List<String> collectInventoryCheckCodes = list.stream()
.map(WarehouseInventoryCheckVO::getInventoryCheckCode)
.collect(Collectors.toList());
// 根据库存盘点单号查询对应的物料详情列表
List<WarehouseInventoryCheckDetail> warehouseInventoryCheckDetails = inventoryCheckDetailMapper.selectWarehouseInventoryCheckDetailByCodeList(collectInventoryCheckCodes);
// 创建一个 WarehouseInventoryCheckVO 的 Map,键为库存盘点单号
Map<String, WarehouseInventoryCheckVO> warehouseInventoryCheckVOMap = list.stream()
.collect(Collectors.toMap(WarehouseInventoryCheckVO::getInventoryCheckCode, Function.identity()));
// 初始化导出列表
List<ExportWarehouseInventoryCheckVo> exportWarehouseInventoryCheckVos = new ArrayList<>();
for (WarehouseInventoryCheckDetail detail : warehouseInventoryCheckDetails) {
ExportWarehouseInventoryCheckVo exportVo = new ExportWarehouseInventoryCheckVo();
// 从 WarehouseInventoryCheckDetail 填充数据
exportVo.setMaterialNo(detail.getMaterialNo());
exportVo.setMaterialName(detail.getMaterialName());
exportVo.setMaterialUnit(detail.getMaterialUnit());
exportVo.setMaterialDescribe(detail.getMaterialDescribe());
exportVo.setInventoryCheckNum(detail.getInventoryCheckNum());
exportVo.setInventoryAccountNum(detail.getInventoryAccountNum());
exportVo.setBatchNumber(detail.getBatchNumber());
exportVo.setWarehouseStoreAddress(detail.getWarehouseStoreAddress());
// 从 WarehouseInventoryCheckVO 填充数据,通过库存盘点单号进行关联
WarehouseInventoryCheckVO checkVO = warehouseInventoryCheckVOMap.get(detail.getInventoryCheckCode());
if (checkVO != null) {
exportVo.setInventoryCheckCode(checkVO.getInventoryCheckCode());
exportVo.setInventoryCheckName(checkVO.getInventoryCheckName());
exportVo.setWarehouseCode(checkVO.getWarehouseCode());
exportVo.setWarehouseName(checkVO.getWarehouseName());
exportVo.setInventoryCheckDate(checkVO.getInventoryCheckDate());
exportVo.setMaterialTotal(checkVO.getMaterialTotal());
exportVo.setNumTotal(checkVO.getNumTotal());
}
//检查序列号是否溢出
if (sequence > 999){
throw new BusinessException("当前编号已达到最大值999,请检查或调整策略");
// 添加到结果列表
exportWarehouseInventoryCheckVos.add(exportVo);
}
//格式化序列号,自动补零至三位
DecimalFormat df = new DecimalFormat("000");
return prefix + df.format(sequence);
return exportWarehouseInventoryCheckVos;
}
}

8
ruoyi-admin/src/main/resources/mapper/warehouse/WarehouseInventoryCheckDetailMapper.xml

@ -155,4 +155,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</select>
<select id="selectWarehouseInventoryCheckDetailByCodeList" parameterType="String" resultMap="WarehouseInventoryCheckDetailResult">
<include refid="selectWarehouseInventoryCheckDetailVo"/>
where inventory_check_code in
<foreach item="inventoryCheckCode" index="index" collection="list" open="(" separator="," close=")">
#{inventoryCheckCode}
</foreach>
</select>
</mapper>

16
ruoyi-admin/src/main/resources/mapper/warehouse/WarehouseInventoryCheckMapper.xml

@ -46,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectWarehouseInventoryCheckList" parameterType="WarehouseInventoryCheck" resultMap="WarehouseInventoryCheckResult">
<include refid="selectWarehouseInventoryCheckVo"/>
<where>
<if test="inventoryCheckCode != null and inventoryCheckCode != ''"> and inventory_check_code = #{inventoryCheckCode}</if>
<if test="inventoryCheckCode != null and inventoryCheckCode != ''"> and inventory_check_code like concat('%', #{inventoryCheckCode}, '%')</if>
<!-- <if test="materialNo != null and materialNo != ''"> and material_no = #{materialNo}</if>-->
<!-- <if test="materialName != null and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>-->
<if test="materialNo != null and materialNo != ''">
@ -66,7 +66,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectWarehouseInventoryCheckVo"/>
where inventory_check_id = #{inventoryCheckId}
</select>
<select id="selectInventoryCheckListByCodes" parameterType="String" resultMap="WarehouseInventoryCheckResult">
<include refid="selectWarehouseInventoryCheckVo"/>
where inventory_check_code in
<foreach collection="array" item="inventoryCheckCode" open="(" separator="," close=")">
#{inventoryCheckCode}
</foreach>
</select>
<insert id="insertWarehouseInventoryCheck" parameterType="WarehouseInventoryCheck" useGeneratedKeys="true" keyProperty="inventoryCheckId">
insert into warehouse_inventory_check
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -181,4 +192,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
</mapper>
Loading…
Cancel
Save