Commit 23d827ff by wangchunyang

退库、统计相关功能,仓库、库位选择组件

parent 722a2e78
package com.ruoyi.inventory.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.inventory.domain.ReturnOrderItems;
import com.ruoyi.inventory.service.IReturnOrderItemsService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 退库单明细Controller
*
* @author ruoyi
* @date 2025-12-03
*/
@RestController
@RequestMapping("/inventory/return_order_items")
public class ReturnOrderItemsController extends BaseController
{
@Autowired
private IReturnOrderItemsService returnOrderItemsService;
/**
* 查询退库单明细列表
*/
@PreAuthorize("@ss.hasPermi('inventory:return_order_items:list')")
@GetMapping("/list")
public TableDataInfo list(ReturnOrderItems returnOrderItems)
{
startPage();
List<ReturnOrderItems> list = returnOrderItemsService.selectReturnOrderItemsList(returnOrderItems);
return getDataTable(list);
}
/**
* 导出退库单明细列表
*/
@PreAuthorize("@ss.hasPermi('inventory:return_order_items:export')")
@Log(title = "退库单明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ReturnOrderItems returnOrderItems)
{
List<ReturnOrderItems> list = returnOrderItemsService.selectReturnOrderItemsList(returnOrderItems);
ExcelUtil<ReturnOrderItems> util = new ExcelUtil<ReturnOrderItems>(ReturnOrderItems.class);
util.exportExcel(response, list, "退库单明细数据");
}
/**
* 获取退库单明细详细信息
*/
@PreAuthorize("@ss.hasPermi('inventory:return_order_items:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
return success(returnOrderItemsService.selectReturnOrderItemsById(id));
}
/**
* 新增退库单明细
*/
@PreAuthorize("@ss.hasPermi('inventory:return_order_items:add')")
@Log(title = "退库单明细", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ReturnOrderItems returnOrderItems)
{
return toAjax(returnOrderItemsService.insertReturnOrderItems(returnOrderItems));
}
/**
* 修改退库单明细
*/
@PreAuthorize("@ss.hasPermi('inventory:return_order_items:edit')")
@Log(title = "退库单明细", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ReturnOrderItems returnOrderItems)
{
return toAjax(returnOrderItemsService.updateReturnOrderItems(returnOrderItems));
}
/**
* 删除退库单明细
*/
@PreAuthorize("@ss.hasPermi('inventory:return_order_items:remove')")
@Log(title = "退库单明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(returnOrderItemsService.deleteReturnOrderItemsByIds(ids));
}
}
package com.ruoyi.inventory.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.inventory.domain.ReturnOrderItems;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.inventory.domain.ReturnOrders;
import com.ruoyi.inventory.service.IReturnOrdersService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 退库单主Controller
*
* @author ruoyi
* @date 2025-12-03
*/
@RestController
@RequestMapping("/inventory/return_orders")
public class ReturnOrdersController extends BaseController
{
@Autowired
private IReturnOrdersService returnOrdersService;
/**
* 查询退库单主列表
*/
@PreAuthorize("@ss.hasPermi('inventory:return_orders:list')")
@GetMapping("/list")
public TableDataInfo list(ReturnOrders returnOrders)
{
startPage();
List<ReturnOrders> list = returnOrdersService.selectReturnOrdersList(returnOrders);
return getDataTable(list);
}
/**
* 导出退库单主列表
*/
@PreAuthorize("@ss.hasPermi('inventory:return_orders:export')")
@Log(title = "退库单主", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ReturnOrders returnOrders)
{
// returnOrders.setOrderStatus(2);//导出退库完成的数据
List<ReturnOrders> list = returnOrdersService.selectReturnOrdersList(returnOrders);
ExcelUtil<ReturnOrders> util = new ExcelUtil<ReturnOrders>(ReturnOrders.class);
util.exportExcel(response, list, "退库单主数据");
}
/**
* 获取退库单主详细信息
*/
@PreAuthorize("@ss.hasPermi('inventory:return_orders:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
return success(returnOrdersService.selectReturnOrdersById(id));
}
/**
* 新增退库单主
*/
@PreAuthorize("@ss.hasPermi('inventory:return_orders:add')")
@Log(title = "退库单主", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ReturnOrders returnOrders)
{
return toAjax(returnOrdersService.insertReturnOrders(returnOrders));
}
/**
* 修改退库单主
*/
@PreAuthorize("@ss.hasPermi('inventory:return_orders:edit')")
@Log(title = "退库单主", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ReturnOrders returnOrders)
{
return toAjax(returnOrdersService.updateReturnOrders(returnOrders));
}
/**
* 删除退库单主
*/
@PreAuthorize("@ss.hasPermi('inventory:return_orders:remove')")
@Log(title = "退库单主", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(returnOrdersService.deleteReturnOrdersByIds(ids));
}
/**
* 删除退库单主
*/
@PreAuthorize("@ss.hasPermi('inventory:return_orders:confirm')")
@Log(title = "退库确认", businessType = BusinessType.UPDATE)
@PostMapping("/confirm/{ids}")
public AjaxResult confirm(@PathVariable String[] ids)
{
return toAjax(returnOrdersService.confirmReturnOrdersByIds(ids));
}
}
......@@ -113,4 +113,15 @@ public class StorageLocationsController extends BaseController
return Collections.emptyList(); // 替代new ArrayList<>(),更高效
}
}
/**
* 查询库位列表(无权限限制,用于选择器)
*/
@GetMapping("/listForSelector")
public TableDataInfo listForSelector(StorageLocations storageLocations)
{
startPage();
List<StorageLocations> list = storageLocationsService.getStorageLocationsList(storageLocations);
return getDataTable(list);
}
}
......@@ -113,4 +113,15 @@ public class WarehousesController extends BaseController
return Collections.emptyList(); // 替代new ArrayList<>(),更高效
}
}
/**
* 查询仓库列表(无权限限制,用于选择器)
*/
@GetMapping("/listForSelector")
public TableDataInfo listForSelector(Warehouses warehouses)
{
startPage();
List<Warehouses> list = warehousesService.selectWarehousesList(warehouses);
return getDataTable(list);
}
}
package com.ruoyi.inventory.domain;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 退库单明细对象 return_order_items
*
* @author cy
* @date 2025-12-03
*/
@Data
public class ReturnOrderItems extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 编号 */
private String id;
/** 退库单号 检索条件 */
@Excel(name = "退库单号")
private String orderId;
/** 货物ID 字典,检索条件 */
@Excel(name = "货物编码")
private String materialCode;
/** 物料名称(关联查询) */
@Excel(name = "货物名称")
private String materialName;
/** 批次ID 检索条件 */
@Excel(name = "批次")
private String batchCode;
/** 仓库ID 检索条件 */
@Excel(name = "仓库ID")
private String warehouseId;
/** 库位ID 检索条件 */
@Excel(name = "库位ID")
private String locationId;
/** 计划数量 */
@Excel(name = "计划数量")
private Integer plannedQuantity;
/** 实际数量 */
@Excel(name = "实际数量")
private Integer actualQuantity;
/** 计划件数 暂无用 */
@Excel(name = "计划件数")
private Integer plannedPackages;
/** 实际件数 暂无用 */
@Excel(name = "实际件数")
private Integer actualPackages;
/** 约数 暂无用 */
@Excel(name = "约数")
private Double divisor;
/** 标签颜色 暂无用 */
@Excel(name = "标签颜色")
private Integer labelColor;
/** 凭证号 暂无用 */
@Excel(name = "凭证号")
private String voucherNumber;
/** 单价 */
@Excel(name = "单价")
private Double unitPrice;
/** 金额,实数乘单价 统计用 */
@Excel(name = "金额")
private Double totalAmount;
/** 应用数据1使用0删除 删除用 */
@Excel(name = "应用数据")
private Integer isUsed;
/** 排序 */
@Excel(name = "排序")
private Integer sortNo;
/** 创建人代码 */
@Excel(name = "创建人代码")
private String createUserCode;
/** 更新人代码 */
@Excel(name = "更新人代码")
private String updateUserCode;
/** 退库日期(关联查询) */
private java.util.Date returnDate;
/** 货主名称(关联查询) */
private String ownerName;
/** 货物ID 字典,检索条件 */
private String materialId;
/** 仓库名称(关联查询) */
private String warehouseName;
/** 库位名称(关联查询) */
private String locationName;
/** 开始日期(查询条件) */
private String startDate;
/** 结束日期(查询条件) */
private String endDate;
/** 货主ID(查询条件) */
private String ownerId;
/** 退库单ID */
private String returnOrderId;
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
public void setOrderId(String orderId)
{
this.orderId = orderId;
}
public String getOrderId()
{
return orderId;
}
public void setMaterialId(String materialId)
{
this.materialId = materialId;
}
public String getMaterialId()
{
return materialId;
}
public void setBatchCode(String batchCode)
{
this.batchCode = batchCode;
}
public String getBatchCode()
{
return batchCode;
}
public void setWarehouseId(String warehouseId)
{
this.warehouseId = warehouseId;
}
public String getWarehouseId()
{
return warehouseId;
}
public void setLocationId(String locationId)
{
this.locationId = locationId;
}
public String getLocationId()
{
return locationId;
}
public void setPlannedQuantity(Integer plannedQuantity)
{
this.plannedQuantity = plannedQuantity;
}
public Integer getPlannedQuantity()
{
return plannedQuantity;
}
public void setActualQuantity(Integer actualQuantity)
{
this.actualQuantity = actualQuantity;
}
public Integer getActualQuantity()
{
return actualQuantity;
}
public void setPlannedPackages(Integer plannedPackages)
{
this.plannedPackages = plannedPackages;
}
public Integer getPlannedPackages()
{
return plannedPackages;
}
public void setActualPackages(Integer actualPackages)
{
this.actualPackages = actualPackages;
}
public Integer getActualPackages()
{
return actualPackages;
}
public void setDivisor(Double divisor)
{
this.divisor = divisor;
}
public Double getDivisor()
{
return divisor;
}
public void setLabelColor(Integer labelColor)
{
this.labelColor = labelColor;
}
public Integer getLabelColor()
{
return labelColor;
}
public void setVoucherNumber(String voucherNumber)
{
this.voucherNumber = voucherNumber;
}
public String getVoucherNumber()
{
return voucherNumber;
}
public void setUnitPrice(Double unitPrice)
{
this.unitPrice = unitPrice;
}
public Double getUnitPrice()
{
return unitPrice;
}
public void setTotalAmount(Double totalAmount)
{
this.totalAmount = totalAmount;
}
public Double getTotalAmount()
{
return totalAmount;
}
public void setIsUsed(Integer isUsed)
{
this.isUsed = isUsed;
}
public Integer getIsUsed()
{
return isUsed;
}
public void setSortNo(Integer sortNo)
{
this.sortNo = sortNo;
}
public Integer getSortNo()
{
return sortNo;
}
public void setCreateUserCode(String createUserCode)
{
this.createUserCode = createUserCode;
}
public String getCreateUserCode()
{
return createUserCode;
}
public void setUpdateUserCode(String updateUserCode)
{
this.updateUserCode = updateUserCode;
}
public String getUpdateUserCode()
{
return updateUserCode;
}
public void setReturnDate(java.util.Date returnDate)
{
this.returnDate = returnDate;
}
public java.util.Date getReturnDate()
{
return returnDate;
}
public void setOwnerName(String ownerName)
{
this.ownerName = ownerName;
}
public String getOwnerName()
{
return ownerName;
}
public void setMaterialName(String materialName)
{
this.materialName = materialName;
}
public String getMaterialName()
{
return materialName;
}
public void setWarehouseName(String warehouseName)
{
this.warehouseName = warehouseName;
}
public String getWarehouseName()
{
return warehouseName;
}
public void setLocationName(String locationName)
{
this.locationName = locationName;
}
public String getLocationName()
{
return locationName;
}
public void setStartDate(String startDate)
{
this.startDate = startDate;
}
public String getStartDate()
{
return startDate;
}
public void setEndDate(String endDate)
{
this.endDate = endDate;
}
public String getEndDate()
{
return endDate;
}
public void setOwnerId(String ownerId)
{
this.ownerId = ownerId;
}
public String getOwnerId()
{
return ownerId;
}
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("orderId", getOrderId())
.append("materialId", getMaterialId())
.append("batchCode", getBatchCode())
.append("warehouseId", getWarehouseId())
.append("locationId", getLocationId())
.append("plannedQuantity", getPlannedQuantity())
.append("actualQuantity", getActualQuantity())
.append("plannedPackages", getPlannedPackages())
.append("actualPackages", getActualPackages())
.append("divisor", getDivisor())
.append("labelColor", getLabelColor())
.append("voucherNumber", getVoucherNumber())
.append("unitPrice", getUnitPrice())
.append("totalAmount", getTotalAmount())
.append("remark", getRemark())
.append("isUsed", getIsUsed())
.append("sortNo", getSortNo())
.append("createTime", getCreateTime())
.append("createUserCode", getCreateUserCode())
.append("updateTime", getUpdateTime())
.append("updateUserCode", getUpdateUserCode())
.toString();
}
}
package com.ruoyi.inventory.domain;
import java.util.List;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 退库单主对象 return_orders
*
* @author cy
* @date 2025-12-03
*/
@Data
public class ReturnOrders extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 编号 */
private String id;
/** 退库单号 */
@Excel(name = "退库单号")
private String orderId;
/** 退库日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "退库日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date returnDate;
/** 退库类型1-TRDC退料 2-质量退料 3-多出退料 4-其他 不显示,默认1字典 */
@Excel(name = "退库类型")
private String returnType;
/** 货主 */
@Excel(name = "货主")
private String ownerId;
private String ownerName;
/** 原出库单号 暂无用 */
@Excel(name = "原出库单号")
private String originalOrderId;
/** 退库原因 */
@Excel(name = "退库原因")
private String returnReason;
/** 1-草稿 2-已完成 字典,检索条件 */
@Excel(name = "订单状态")
private Integer orderStatus;
/** 计划量 暂时无用 */
@Excel(name = "计划量")
private Integer totalPlannedQuantity;
/** 实际量 暂时无用 */
@Excel(name = "实际量")
private Integer totalActualQuantity;
/** 应用数据1使用0删除 删除用 */
@Excel(name = "应用数据")
private Integer isUsed;
/** 排序 */
@Excel(name = "排序")
private Integer sortNo;
/** 创建人代码 */
@Excel(name = "创建人代码")
private String createUserCode;
/** 更新人代码 */
@Excel(name = "更新人代码")
private String updateUserCode;
/** 退库单明细信息 */
private List<ReturnOrderItems> returnOrderItemsList;
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
public void setOrderId(String orderId)
{
this.orderId = orderId;
}
public String getOrderId()
{
return orderId;
}
public void setReturnDate(Date returnDate)
{
this.returnDate = returnDate;
}
public Date getReturnDate()
{
return returnDate;
}
public void setReturnType(String returnType)
{
this.returnType = returnType;
}
public String getReturnType()
{
return returnType;
}
public void setOwnerId(String ownerId)
{
this.ownerId = ownerId;
}
public String getOwnerId()
{
return ownerId;
}
public void setOriginalOrderId(String originalOrderId)
{
this.originalOrderId = originalOrderId;
}
public String getOriginalOrderId()
{
return originalOrderId;
}
public void setReturnReason(String returnReason)
{
this.returnReason = returnReason;
}
public String getReturnReason()
{
return returnReason;
}
public void setOrderStatus(Integer orderStatus)
{
this.orderStatus = orderStatus;
}
public Integer getOrderStatus()
{
return orderStatus;
}
public void setTotalPlannedQuantity(Integer totalPlannedQuantity)
{
this.totalPlannedQuantity = totalPlannedQuantity;
}
public Integer getTotalPlannedQuantity()
{
return totalPlannedQuantity;
}
public void setTotalActualQuantity(Integer totalActualQuantity)
{
this.totalActualQuantity = totalActualQuantity;
}
public Integer getTotalActualQuantity()
{
return totalActualQuantity;
}
public void setIsUsed(Integer isUsed)
{
this.isUsed = isUsed;
}
public Integer getIsUsed()
{
return isUsed;
}
public void setSortNo(Integer sortNo)
{
this.sortNo = sortNo;
}
public Integer getSortNo()
{
return sortNo;
}
public void setCreateUserCode(String createUserCode)
{
this.createUserCode = createUserCode;
}
public String getCreateUserCode()
{
return createUserCode;
}
public void setUpdateUserCode(String updateUserCode)
{
this.updateUserCode = updateUserCode;
}
public String getUpdateUserCode()
{
return updateUserCode;
}
public List<ReturnOrderItems> getReturnOrderItemsList()
{
return returnOrderItemsList;
}
public void setReturnOrderItemsList(List<ReturnOrderItems> returnOrderItemsList)
{
this.returnOrderItemsList = returnOrderItemsList;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("orderId", getOrderId())
.append("returnDate", getReturnDate())
.append("returnType", getReturnType())
.append("ownerId", getOwnerId())
.append("originalOrderId", getOriginalOrderId())
.append("returnReason", getReturnReason())
.append("orderStatus", getOrderStatus())
.append("totalPlannedQuantity", getTotalPlannedQuantity())
.append("totalActualQuantity", getTotalActualQuantity())
.append("remark", getRemark())
.append("isUsed", getIsUsed())
.append("sortNo", getSortNo())
.append("createTime", getCreateTime())
.append("createUserCode", getCreateUserCode())
.append("updateTime", getUpdateTime())
.append("updateUserCode", getUpdateUserCode())
.append("returnOrderItemsList", getReturnOrderItemsList())
.toString();
}
}
package com.ruoyi.inventory.domain;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
......@@ -11,6 +14,8 @@ import com.ruoyi.common.core.domain.BaseEntity;
* @author ruoyi
* @date 2025-12-01
*/
@Getter
@Setter
public class StorageLocations extends BaseEntity
{
private static final long serialVersionUID = 1L;
......@@ -97,6 +102,9 @@ public class StorageLocations extends BaseEntity
/** 排序号 */
private String updateUserCode;
/** 仓库id */
private String warehousesId;
public void setId(String id)
{
this.id = id;
......
package com.ruoyi.inventory.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
//import org.apache.poi.ss.usermodel.FillPatternType;
import java.io.Serializable;
/**
* 库存汇总统计VO
*
* @author ruoyi
* @date 2025-12-03
*/
@HeadStyle(fillPatternType = FillPatternTypeEnum.NO_FILL, fillForegroundColor = 10)
@HeadFontStyle(fontHeightInPoints = 12)
@ColumnWidth(15)
public class InventorySummaryVO implements Serializable
{
private static final long serialVersionUID = 1L;
/** 物料ID */
@ExcelProperty(value = "物料ID", index = 0)
private String materialId;
/** 物料名称 */
@ExcelProperty(value = "物料名称", index = 1)
private String materialName;
/** 库存类别 */
@ExcelProperty(value = "库存类别", index = 2)
private String inventoryTypeName;
/** 仓库编码 */
@ExcelProperty(value = "仓库编码", index = 3)
private String warehousesCode;
/** 仓库名称 */
@ExcelProperty(value = "仓库名称", index = 4)
private String warehouseName;
/** 库位ID */
@ExcelProperty(value = "库位ID", index = 5)
private String locationId;
/** 库位名称 */
@ExcelProperty(value = "库位名称", index = 6)
private String locationName;
/** 货主ID */
@ExcelProperty(value = "货主ID", index = 7)
private String ownerId;
/** 货主名称 */
@ExcelProperty(value = "货主名称", index = 8)
private String ownerName;
/** 总库存数量 */
@ExcelProperty(value = "总库存数量", index = 9)
private Long totalQuantity;
/** 总锁定数量 */
@ExcelProperty(value = "总锁定数量", index = 10)
private Long totalLockedQuantity;
/** 总可用数量 */
@ExcelProperty(value = "总可用数量", index = 11)
private Long totalAvailableQuantity;
/** 总重量 */
@ExcelProperty(value = "总重量", index = 12)
private Double totalWeight;
/** 总体积 */
@ExcelProperty(value = "总体积", index = 13)
private Double totalVolume;
/** 库存状态 */
@ExcelProperty(value = "库存状态", index = 14)
private String inventoryStatusName;
public String getMaterialId() {
return materialId;
}
public void setMaterialId(String materialId) {
this.materialId = materialId;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public String getInventoryTypeName() {
return inventoryTypeName;
}
public void setInventoryTypeName(String inventoryTypeName) {
this.inventoryTypeName = inventoryTypeName;
}
public String getWarehousesCode() {
return warehousesCode;
}
public void setWarehousesCode(String warehousesCode) {
this.warehousesCode = warehousesCode;
}
public String getWarehouseName() {
return warehouseName;
}
public void setWarehouseName(String warehouseName) {
this.warehouseName = warehouseName;
}
public String getLocationId() {
return locationId;
}
public void setLocationId(String locationId) {
this.locationId = locationId;
}
public String getLocationName() {
return locationName;
}
public void setLocationName(String locationName) {
this.locationName = locationName;
}
public String getOwnerId() {
return ownerId;
}
public void setOwnerId(String ownerId) {
this.ownerId = ownerId;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
public Long getTotalQuantity() {
return totalQuantity;
}
public void setTotalQuantity(Long totalQuantity) {
this.totalQuantity = totalQuantity;
}
public Long getTotalLockedQuantity() {
return totalLockedQuantity;
}
public void setTotalLockedQuantity(Long totalLockedQuantity) {
this.totalLockedQuantity = totalLockedQuantity;
}
public Long getTotalAvailableQuantity() {
return totalAvailableQuantity;
}
public void setTotalAvailableQuantity(Long totalAvailableQuantity) {
this.totalAvailableQuantity = totalAvailableQuantity;
}
public Double getTotalWeight() {
return totalWeight;
}
public void setTotalWeight(Double totalWeight) {
this.totalWeight = totalWeight;
}
public Double getTotalVolume() {
return totalVolume;
}
public void setTotalVolume(Double totalVolume) {
this.totalVolume = totalVolume;
}
public String getInventoryStatusName() {
return inventoryStatusName;
}
public void setInventoryStatusName(String inventoryStatusName) {
this.inventoryStatusName = inventoryStatusName;
}
}
package com.ruoyi.inventory.mapper;
import java.util.List;
import com.ruoyi.inventory.domain.ReturnOrderItems;
/**
* 退库单明细Mapper接口
*
* @author ruoyi
* @date 2025-12-03
*/
public interface ReturnOrderItemsMapper
{
/**
* 查询退库单明细
*
* @param id 退库单明细主键
* @return 退库单明细
*/
public ReturnOrderItems selectReturnOrderItemsById(String id);
/**
* 查询退库单明细列表
*
* @param returnOrderItems 退库单明细
* @return 退库单明细集合
*/
public List<ReturnOrderItems> selectReturnOrderItemsList(ReturnOrderItems returnOrderItems);
/**
* 新增退库单明细
*
* @param returnOrderItems 退库单明细
* @return 结果
*/
public int insertReturnOrderItems(ReturnOrderItems returnOrderItems);
/**
* 修改退库单明细
*
* @param returnOrderItems 退库单明细
* @return 结果
*/
public int updateReturnOrderItems(ReturnOrderItems returnOrderItems);
/**
* 删除退库单明细
*
* @param id 退库单明细主键
* @return 结果
*/
public int deleteReturnOrderItemsById(String id);
/**
* 批量删除退库单明细
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteReturnOrderItemsByIds(String[] ids);
/**
* 通过退库单号删除退库单明细
*
* @param orderId 退库单号
* @return 结果
*/
public int deleteReturnOrderItemsByOrderId(String orderId);
}
package com.ruoyi.inventory.mapper;
import java.util.List;
import com.ruoyi.inventory.domain.ReturnOrders;
import com.ruoyi.inventory.domain.ReturnOrderItems;
/**
* 退库单主Mapper接口
*
* @author ruoyi
* @date 2025-12-03
*/
public interface ReturnOrdersMapper
{
/**
* 查询退库单主
*
* @param id 退库单主主键
* @return 退库单主
*/
public ReturnOrders selectReturnOrdersById(String id);
/**
* 查询退库单主列表
*
* @param returnOrders 退库单主
* @return 退库单主集合
*/
public List<ReturnOrders> selectReturnOrdersList(ReturnOrders returnOrders);
/**
* 新增退库单主
*
* @param returnOrders 退库单主
* @return 结果
*/
public int insertReturnOrders(ReturnOrders returnOrders);
/**
* 修改退库单主
*
* @param returnOrders 退库单主
* @return 结果
*/
public int updateReturnOrders(ReturnOrders returnOrders);
/**
* 删除退库单主
*
* @param id 退库单主主键
* @return 结果
*/
public int deleteReturnOrdersById(String id);
/**
* 批量删除退库单主
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteReturnOrdersByIds(String[] ids);
/**
* 批量删除退库单明细
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteReturnOrderItemsByOrderIds(String[] ids);
/**
* 批量新增退库单明细
*
* @param returnOrderItemsList 退库单明细列表
* @return 结果
*/
public int batchReturnOrderItems(List<ReturnOrderItems> returnOrderItemsList);
/**
* 通过退库单主主键删除退库单明细信息
*
* @param orderId 退库单号
* @return 结果
*/
public int deleteReturnOrderItemsByOrderId(String orderId);
/**
* 批量确认退库单
* @param ids
* @return
*/
public int confirmReturnOrdersByIds(String[] ids);
}
......@@ -89,4 +89,11 @@ public interface StorageLocationsMapper
*/
public List<Map<String, Object>> getMapList(StorageLocations storageLocations);
/**
* 查询库位列表
*
* @param storageLocations 库位
* @return 库位集合
*/
List<StorageLocations> getStorageLocationsList(StorageLocations storageLocations);
}
package com.ruoyi.inventory.service;
import java.util.List;
import com.ruoyi.inventory.domain.ReturnOrderItems;
/**
* 退库单明细Service接口
*
* @author ruoyi
* @date 2025-12-03
*/
public interface IReturnOrderItemsService
{
/**
* 查询退库单明细
*
* @param id 退库单明细主键
* @return 退库单明细
*/
public ReturnOrderItems selectReturnOrderItemsById(String id);
/**
* 查询退库单明细列表
*
* @param returnOrderItems 退库单明细
* @return 退库单明细集合
*/
public List<ReturnOrderItems> selectReturnOrderItemsList(ReturnOrderItems returnOrderItems);
/**
* 新增退库单明细
*
* @param returnOrderItems 退库单明细
* @return 结果
*/
public int insertReturnOrderItems(ReturnOrderItems returnOrderItems);
/**
* 修改退库单明细
*
* @param returnOrderItems 退库单明细
* @return 结果
*/
public int updateReturnOrderItems(ReturnOrderItems returnOrderItems);
/**
* 批量删除退库单明细
*
* @param ids 需要删除的退库单明细主键集合
* @return 结果
*/
public int deleteReturnOrderItemsByIds(String[] ids);
/**
* 删除退库单明细信息
*
* @param id 退库单明细主键
* @return 结果
*/
public int deleteReturnOrderItemsById(String id);
}
package com.ruoyi.inventory.service;
import java.util.List;
import com.ruoyi.inventory.domain.ReturnOrderItems;
import com.ruoyi.inventory.domain.ReturnOrders;
/**
* 退库单主Service接口
*
* @author ruoyi
* @date 2025-12-03
*/
public interface IReturnOrdersService
{
/**
* 查询退库单主
*
* @param id 退库单主主键
* @return 退库单主
*/
public ReturnOrders selectReturnOrdersById(String id);
/**
* 查询退库单主列表
*
* @param returnOrders 退库单主
* @return 退库单主集合
*/
public List<ReturnOrders> selectReturnOrdersList(ReturnOrders returnOrders);
/**
* 新增退库单主
*
* @param returnOrders 退库单主
* @return 结果
*/
public int insertReturnOrders(ReturnOrders returnOrders);
/**
* 修改退库单主
*
* @param returnOrders 退库单主
* @return 结果
*/
public int updateReturnOrders(ReturnOrders returnOrders);
/**
* 批量删除退库单主
*
* @param ids 需要删除的退库单主主键集合
* @return 结果
*/
public int deleteReturnOrdersByIds(String[] ids);
/**
* 删除退库单主信息
*
* @param id 退库单主主键
* @return 结果
*/
public int deleteReturnOrdersById(String id);
/**
* 查询退库单明细列表
*
* @param returnOrders 退库单明细
* @return 退库单明细集合
*/
public List<ReturnOrderItems> selectExportList(ReturnOrders returnOrders);
/**
* @退库确认
* @param ids 需要确认的退库单主主键集合
* @return
*/
public int confirmReturnOrdersByIds(String[] ids);
}
......@@ -89,4 +89,12 @@ public interface IStorageLocationsService
* @version 1.0
*/
public List<Map<String, Object>> getMapList(StorageLocations storageLocations);
/**
* 查询库位列表
*
* @param storageLocations 库位
* @return 库位集合
*/
public List<StorageLocations> getStorageLocationsList(StorageLocations storageLocations);
}
package com.ruoyi.inventory.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.inventory.mapper.ReturnOrderItemsMapper;
import com.ruoyi.inventory.domain.ReturnOrderItems;
import com.ruoyi.inventory.service.IReturnOrderItemsService;
/**
* 退库单明细Service业务层处理
*
* @author ruoyi
* @date 2025-12-03
*/
@Service
public class ReturnOrderItemsServiceImpl implements IReturnOrderItemsService
{
@Autowired
private ReturnOrderItemsMapper returnOrderItemsMapper;
/**
* 查询退库单明细
*
* @param id 退库单明细主键
* @return 退库单明细
*/
@Override
public ReturnOrderItems selectReturnOrderItemsById(String id)
{
return returnOrderItemsMapper.selectReturnOrderItemsById(id);
}
/**
* 查询退库单明细列表
*
* @param returnOrderItems 退库单明细
* @return 退库单明细
*/
@Override
public List<ReturnOrderItems> selectReturnOrderItemsList(ReturnOrderItems returnOrderItems)
{
return returnOrderItemsMapper.selectReturnOrderItemsList(returnOrderItems);
}
/**
* 新增退库单明细
*
* @param returnOrderItems 退库单明细
* @return 结果
*/
@Override
public int insertReturnOrderItems(ReturnOrderItems returnOrderItems)
{
if (StringUtils.isEmpty(returnOrderItems.getId())) {
returnOrderItems.setId(UUID.randomUUID().toString());
}
returnOrderItems.setCreateTime(DateUtils.getNowDate());
if (returnOrderItems.getIsUsed() == null) {
returnOrderItems.setIsUsed(1);
}
// 自动计算金额
if (returnOrderItems.getActualQuantity() != null && returnOrderItems.getUnitPrice() != null) {
returnOrderItems.setTotalAmount(returnOrderItems.getActualQuantity() * returnOrderItems.getUnitPrice());
}
return returnOrderItemsMapper.insertReturnOrderItems(returnOrderItems);
}
/**
* 修改退库单明细
*
* @param returnOrderItems 退库单明细
* @return 结果
*/
@Override
public int updateReturnOrderItems(ReturnOrderItems returnOrderItems)
{
returnOrderItems.setUpdateTime(DateUtils.getNowDate());
// 自动计算金额
if (returnOrderItems.getActualQuantity() != null && returnOrderItems.getUnitPrice() != null) {
returnOrderItems.setTotalAmount(returnOrderItems.getActualQuantity() * returnOrderItems.getUnitPrice());
}
return returnOrderItemsMapper.updateReturnOrderItems(returnOrderItems);
}
/**
* 批量删除退库单明细
*
* @param ids 需要删除的退库单明细主键
* @return 结果
*/
@Override
public int deleteReturnOrderItemsByIds(String[] ids)
{
return returnOrderItemsMapper.deleteReturnOrderItemsByIds(ids);
}
/**
* 删除退库单明细信息
*
* @param id 退库单明细主键
* @return 结果
*/
@Override
public int deleteReturnOrderItemsById(String id)
{
return returnOrderItemsMapper.deleteReturnOrderItemsById(id);
}
}
package com.ruoyi.inventory.service.impl;
import java.util.Collections;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.UUID;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.inventory.domain.ReturnOrderItems;
import com.ruoyi.inventory.mapper.ReturnOrdersMapper;
import com.ruoyi.inventory.domain.ReturnOrders;
import com.ruoyi.inventory.service.IReturnOrdersService;
/**
* 退库单主Service业务层处理
*
* @author ruoyi
* @date 2025-12-03
*/
@Service
public class ReturnOrdersServiceImpl implements IReturnOrdersService
{
@Autowired
private ReturnOrdersMapper returnOrdersMapper;
/**
* 查询退库单主
*
* @param id 退库单主主键
* @return 退库单主
*/
@Override
public ReturnOrders selectReturnOrdersById(String id)
{
return returnOrdersMapper.selectReturnOrdersById(id);
}
/**
* 查询退库单主列表
*
* @param returnOrders 退库单主
* @return 退库单主
*/
@Override
public List<ReturnOrders> selectReturnOrdersList(ReturnOrders returnOrders)
{
return returnOrdersMapper.selectReturnOrdersList(returnOrders);
}
/**
* 新增退库单主
*
* @param returnOrders 退库单主
* @return 结果
*/
@Transactional
@Override
public int insertReturnOrders(ReturnOrders returnOrders)
{
if (StringUtils.isEmpty(returnOrders.getId())) {
returnOrders.setId(UUID.randomUUID().toString());
}
returnOrders.setCreateTime(DateUtils.getNowDate());
if (returnOrders.getIsUsed() == null) {
returnOrders.setIsUsed(1);
}
int rows = returnOrdersMapper.insertReturnOrders(returnOrders);
insertReturnOrderItems(returnOrders);
return rows;
}
/**
* 修改退库单主
*
* @param returnOrders 退库单主
* @return 结果
*/
@Transactional
@Override
public int updateReturnOrders(ReturnOrders returnOrders)
{
returnOrders.setUpdateTime(DateUtils.getNowDate());
returnOrdersMapper.deleteReturnOrderItemsByOrderId(returnOrders.getId());
insertReturnOrderItems(returnOrders);
return returnOrdersMapper.updateReturnOrders(returnOrders);
}
/**
* 批量删除退库单主
*
* @param ids 需要删除的退库单主主键
* @return 结果
*/
@Transactional
@Override
public int deleteReturnOrdersByIds(String[] ids)
{
returnOrdersMapper.deleteReturnOrderItemsByOrderIds(ids);
return returnOrdersMapper.deleteReturnOrdersByIds(ids);
}
/**
* 删除退库单主信息
*
* @param id 退库单主主键
* @return 结果
*/
@Transactional
@Override
public int deleteReturnOrdersById(String id)
{
ReturnOrders returnOrders = returnOrdersMapper.selectReturnOrdersById(id);
if (returnOrders != null && returnOrders.getOrderId() != null) {
returnOrdersMapper.deleteReturnOrderItemsByOrderId(returnOrders.getOrderId());
}
return returnOrdersMapper.deleteReturnOrdersById(id);
}
@Override
public List<ReturnOrderItems> selectExportList(ReturnOrders returnOrders) {
return Collections.emptyList();
}
@Override
public int confirmReturnOrdersByIds(String[] ids) {
// todo 调用库存插入方法
return returnOrdersMapper.confirmReturnOrdersByIds(ids);
}
/**
* 新增退库单明细信息
*
* @param returnOrders 退库单主对象
*/
public void insertReturnOrderItems(ReturnOrders returnOrders)
{
List<ReturnOrderItems> returnOrderItemsList = returnOrders.getReturnOrderItemsList();
String returnOrderId = returnOrders.getId();
String orderId = returnOrders.getOrderId();
if (StringUtils.isNotNull(returnOrderItemsList))
{
List<ReturnOrderItems> list = new ArrayList<ReturnOrderItems>();
for (ReturnOrderItems returnOrderItems : returnOrderItemsList)
{
if (StringUtils.isEmpty(returnOrderItems.getId())) {
returnOrderItems.setId(UUID.randomUUID().toString());
}
returnOrderItems.setReturnOrderId(returnOrderId);
returnOrderItems.setOrderId(orderId);
returnOrderItems.setCreateTime(DateUtils.getNowDate());
if (returnOrderItems.getIsUsed() == null) {
returnOrderItems.setIsUsed(1);
}
// 自动计算金额
if (returnOrderItems.getActualQuantity() != null && returnOrderItems.getUnitPrice() != null) {
returnOrderItems.setTotalAmount(returnOrderItems.getActualQuantity() * returnOrderItems.getUnitPrice());
}
list.add(returnOrderItems);
}
if (list.size() > 0)
{
returnOrdersMapper.batchReturnOrderItems(list);
}
}
}
}
......@@ -205,4 +205,15 @@ public class StorageLocationsServiceImpl implements IStorageLocationsService
{
return storageLocationsMapper.getMapList(storageLocations);
}
/**
* 查询库位列表
*
* @param storageLocations 库位
* @return 库位集合
*/
@Override
public List<StorageLocations> getStorageLocationsList(StorageLocations storageLocations) {
return storageLocationsMapper.getStorageLocationsList(storageLocations);
}
}
......@@ -26,10 +26,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createUserCode" column="create_user_code" />
<result property="updateTime" column="update_time" />
<result property="updateUserCode" column="update_user_code" />
<result property="warehousesId" column="warehouses_id" />
</resultMap>
<sql id="selectStorageLocationsVo">
select id, location_code, location_name, warehouses_code, location_type, zone_code, row_code, column_code, layer_code, capacity, volume_capacity, allowed_hazard_levels, allowed_category_ids, temperature_zone, is_enabled, is_used, sort_no, create_time, create_user_code, update_time, update_user_code from storage_locations
select id, location_code, location_name, warehouses_code, location_type, zone_code, row_code, column_code, layer_code, capacity, volume_capacity, allowed_hazard_levels, allowed_category_ids, temperature_zone, is_enabled, is_used, sort_no, create_time, create_user_code, update_time, update_user_code, warehouses_id from storage_locations
</sql>
<select id="selectStorageLocationsList" parameterType="StorageLocations" resultMap="StorageLocationsResult">
......@@ -163,4 +164,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="getStorageLocationsList" parameterType="StorageLocations" resultMap="StorageLocationsResult">
<include refid="selectStorageLocationsVo"/>
where is_used=1
<if test="warehousesId != null and warehousesId != ''"> and warehouses_id = #{warehousesId}</if>
<if test="locationCode != null and locationCode != ''"> and location_code = #{locationCode}</if>
<if test="locationName != null and locationName != ''"> and location_name like concat('%', #{locationName}, '%')</if>
<if test="warehousesCode != null and warehousesCode != ''"> and warehouses_code = #{warehousesCode}</if>
<if test="locationType != null "> and location_type = #{locationType}</if>
<if test="zoneCode != null and zoneCode != ''"> and zone_code = #{zoneCode}</if>
<if test="rowCode != null and rowCode != ''"> and row_code = #{rowCode}</if>
<if test="columnCode != null and columnCode != ''"> and column_code = #{columnCode}</if>
<if test="layerCode != null and layerCode != ''"> and layer_code = #{layerCode}</if>
<if test="capacity != null "> and capacity = #{capacity}</if>
<if test="volumeCapacity != null "> and volume_capacity = #{volumeCapacity}</if>
<if test="allowedHazardLevels != null and allowedHazardLevels != ''"> and allowed_hazard_levels = #{allowedHazardLevels}</if>
<if test="allowedCategoryIds != null and allowedCategoryIds != ''"> and allowed_category_ids = #{allowedCategoryIds}</if>
<if test="temperatureZone != null and temperatureZone != ''"> and temperature_zone = #{temperatureZone}</if>
<if test="isEnabled != null "> and is_enabled = #{isEnabled}</if>
<if test="sortNo != null "> and sort_no = #{sortNo}</if>
<if test="createUserCode != null and createUserCode != ''"> and create_user_code = #{createUserCode}</if>
<if test="updateUserCode != null and updateUserCode != ''"> and update_user_code = #{updateUserCode}</if>
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论