Commit 70157266 by yubin

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	ruoyi-inventory/src/main/java/com/ruoyi/inventory/service/impl/InventoryServiceImpl.java
parents 98bfcd2b e9e044a2
......@@ -8,12 +8,32 @@ export function listStocktakes(query) {
params: query
})
}
// 查询统计
export function listStocktakesCount(query) {
return request({
url: '/inventory/stocktakes/listCount',
method: 'get',
params: query
})
}
// 统计详情
export function getCountInfo(query) {
return request({
url: '/inventory/stocktakes/countInfo',
method: 'get',
params: query
})
}
// 查询盘点单主详细
export function getStocktakes(id) {
export function getStocktakes(id, operationType) {
return request({
url: '/inventory/stocktakes/' + id,
method: 'get'
url: '/inventory/stocktakes/',
method: 'get',
params: {
id: id,
operationType: operationType
}
})
}
......
......@@ -10,22 +10,21 @@
@click="handleAdd"
v-hasPermi="['inventory:stocktakes:add']"
>新增</el-button>
<el-button
type="danger"
plain
icon="el-icon-delete"
size="medium"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['inventory:stocktakes:remove']"
>删除</el-button>
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-delete"-->
<!-- size="medium"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['inventory:stocktakes:remove']"-->
<!-- >删除</el-button>-->
<el-button
type="success"
plain
icon="el-icon-tickets"
size="medium"
:disabled="single"
@click="handleConfirm"
@click="handleCount"
v-hasPermi="['inventory:stocktakes:count']"
>处理结果统计</el-button>
</template>
......@@ -80,24 +79,26 @@
<!-- <el-table-column label="排序号" align="center" prop="updateUserCode" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['inventory:stocktakes:edit']"-->
<!-- >修改</el-button>-->
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleViewInfo(scope.row)"
v-hasPermi="['inventory:stocktakes:query']"
>查看</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleCheck(scope.row)"
v-if="scope.row.stocktakeStatus === '1'"
v-hasPermi="['inventory:stocktakes:check']"
>盘点</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
v-if="scope.row.stocktakeStatus === '1'"
@click="handleDelete(scope.row)"
v-hasPermi="['inventory:stocktakes:remove']"
>删除</el-button>
......@@ -106,6 +107,7 @@
type="text"
icon="el-icon-circle-check"
@click="handleConfirm(scope.row)"
v-if="scope.row.stocktakeStatus === '2'"
v-hasPermi="['inventory:stocktakes:confirm']"
>盘点确认</el-button>
</template>
......@@ -199,7 +201,20 @@
/>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitConfirmForm"> </el-button>
<el-button type="primary"
v-if="this.buttonShow"
@click="submitConfirmForm"> </el-button>
<el-button @click="cancelConfirm"> </el-button>
</div>
</el-dialog>
<!-- 处理统计弹窗-->
<el-dialog :title="confirmTitle" :visible.sync="countOpen" width="1500px" append-to-body>
<el-form ref="confirmFormRef" :model="form" :rules="rules" label-width="80px">
<!-- 引入子表组件(核心:传递数据+监听事件) -->
<stocktake-count-table/>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelConfirm"> </el-button>
</div>
</el-dialog>
......@@ -208,14 +223,15 @@
<script>
import { listStocktakes, getStocktakes, delStocktakes, addStocktakes, updateStocktakes } from "@/api/inventory/stocktakes"
// 引入子表组件
// 引入子表组件--盘点
import stocktakeItemsTable from '@/views/inventory/stocktakes/stocktakeItemsTable.vue';
// 引入子表组件--统计
import stocktakeCountTable from '@/views/inventory/stocktakes/stocktakeCountTable.vue';
export default {
name: "Stocktakes",
dicts: ['stocktake_status'],
// 注册子组件
components: { stocktakeItemsTable },
components: { stocktakeItemsTable,stocktakeCountTable },
data() {
return {
// 遮罩层
......@@ -243,10 +259,12 @@ export default {
// 是否显示弹出层
open: false,
checkOpen: false,
confirmOpen: false,
buttonShow: true,//是否展示确认按钮
checkOpen: false, // 盘点弹窗
confirmOpen: false, // 盘点确认弹窗
checkTitle: "库存盘点",
confirmTitle: "盘点确认",
countOpen: false, // 盘点统计弹窗
// 查询参数
queryParams: {
......@@ -358,24 +376,45 @@ export default {
handleCheck(row) {
this.reset();
const id = row.id || this.ids
getStocktakes(id).then(response => {
getStocktakes(id,'check').then(response => {
this.form = response.data
// 过滤 undefined 行,避免子组件渲染报错
this.stocktakeItemsList = (response.data.stocktakeItemsList || []).filter(item => item);
this.checkOpen = true
})
},
// 盘点确认按钮:打开确认弹窗
// 盘点确认按钮:打开弹窗
handleConfirm(row) {
this.reset();
const id = row.id || this.ids
getStocktakes(id).then(response => {
this.buttonShow = true
this.confirmTitle = '盘点确认'
getStocktakes(id,'confirm').then(response => {
this.form = response.data
// 过滤 undefined 行,避免子组件渲染报错
this.stocktakeItemsList = (response.data.stocktakeItemsList || []).filter(item => item);
this.confirmOpen = true;
})
},
// 详情按钮:打开弹窗
handleViewInfo(row) {
this.reset();
const id = row.id || this.ids
this.buttonShow = false
this.confirmTitle = '盘点查看'
getStocktakes(id,'check').then(response => {
this.form = response.data
// 过滤 undefined 行,避免子组件渲染报错
this.stocktakeItemsList = (response.data.stocktakeItemsList || []).filter(item => item);
this.confirmOpen = true;
})
},
/** 处理结果统计按钮操作 */
handleCount() {
this.reset()
this.countOpen = true
this.confirmTitle = " 处理结果统计"
},
/** 子组件字段编辑事件(确保父组件数据同步) */
handleStocktakeItemChange(updatedRow) {
// 找到更新的行,替换数据(确保引用一致)
......@@ -441,7 +480,7 @@ export default {
// 取消操作
cancelCheck() { this.checkOpen = false; this.reset(); },
cancelConfirm() { this.confirmOpen = false; this.reset(); },
cancelConfirm() { this.confirmOpen = false; this.countOpen = false; this.reset(); },
/** 新增提交按钮 */
submitForm() {
......
......@@ -4,16 +4,10 @@ import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.inventory.domain.TO.StocktakesTO;
import com.ruoyi.inventory.domain.TO.StocktakesVo;
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 org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
......@@ -65,10 +59,11 @@ public class StocktakesController extends BaseController
* 获取库存盘点详细信息
*/
@PreAuthorize("@ss.hasPermi('inventory:stocktakes:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
@GetMapping(value = "/")
public AjaxResult getInfo(@RequestParam("id") String id,
@RequestParam(required = false) String operationType)
{
return success(stocktakesService.selectStocktakesById(id));
return success(stocktakesService.selectStocktakesById(id,operationType));
}
/**
......@@ -103,4 +98,31 @@ public class StocktakesController extends BaseController
{
return toAjax(stocktakesService.deleteStocktakesByIds(ids));
}
/**
* @description: 查询处理统计
* @author cs
* @date 2025/12/8
* @version 1.0
*/
@GetMapping("/listCount")
public TableDataInfo listCount(StocktakesVo stocktakes)
{
startPage();
List<StocktakesVo> list = stocktakesService.selectStocktakesListCount(stocktakes);
return getDataTable(list);
}
/**
* @description: 查询处理统计-详情
* @author cs
* @date 2025/12/9
* @version 1.0
*/
@GetMapping("/countInfo")
public TableDataInfo countInfo(StocktakesVo stocktakes)
{
startPage();
List<StocktakesVo> list = stocktakesService.selectStocktakesCountInfo(stocktakes);
return getDataTable(list);
}
}
......@@ -124,6 +124,18 @@ public class StocktakeItems extends BaseEntity
@Excel(name = "排序号")
private String updateUserCode;
/** 单价 */
@Excel(name = "单价")
private double unitPrice;
public double getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(double unitPrice) {
this.unitPrice = unitPrice;
}
public String getInventoryId() {
return inventoryId;
}
......
......@@ -3,6 +3,7 @@ package com.ruoyi.inventory.domain;
import java.util.List;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.inventory.domain.TO.StocktakeItemsTo;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
......@@ -71,7 +72,7 @@ public class Stocktakes extends BaseEntity
private String updateUserCode;
/** 盘点单明细信息 */
private List<StocktakeItems> stocktakeItemsList;
private List<StocktakeItemsTo> stocktakeItemsList;
public void setId(String id)
{
......@@ -203,12 +204,12 @@ public class Stocktakes extends BaseEntity
return updateUserCode;
}
public List<StocktakeItems> getStocktakeItemsList()
public List<StocktakeItemsTo> getStocktakeItemsList()
{
return stocktakeItemsList;
}
public void setStocktakeItemsList(List<StocktakeItems> stocktakeItemsList)
public void setStocktakeItemsList(List<StocktakeItemsTo> stocktakeItemsList)
{
this.stocktakeItemsList = stocktakeItemsList;
}
......
package com.ruoyi.inventory.domain.TO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.inventory.domain.StocktakeItems;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 盘点单明细对象 stocktake_items
*
* @author ruoyi
* @date 2025-12-02
*/
public class StocktakeItemsTo extends StocktakeItems
{
private String warehouseName;
private String locationName;
public String getWarehouseName() {
return warehouseName;
}
public void setWarehouseName(String warehouseName) {
this.warehouseName = warehouseName;
}
public String getLocationName() {
return locationName;
}
public void setLocationName(String locationName) {
this.locationName = locationName;
}
}
package com.ruoyi.inventory.domain.TO;
import com.ruoyi.inventory.domain.Stocktakes;
import java.util.Date;
/**
* 库存盘点对象 stocktakes
*
* @author ruoyi
* @date 2025-12-02
*/
public class StocktakesVo extends Stocktakes
{
/** 提交按钮类型,check是盘点,confirm 是确认盘点 */
private String sapNo;
private String plannedDates;
private String materialId;
private String warehousesName;
private String locationName;
private String warehousesId;
private String locationId;
private String tsCode;
private String hazardName;
private String varianceQuantity;
private String varianceAmount;
private String countQuantity;
private String countAmount;
// 计划日期数组(接收拆分后的值)
private String[] plannedDateArray;
// 仓库ID数组
private String[] warehouseIdArray;
// 库位ID数组
private String[] locationIdArray;
public String[] getPlannedDateArray() {
return plannedDateArray;
}
public void setPlannedDateArray(String[] plannedDateArray) {
this.plannedDateArray = plannedDateArray;
}
public String[] getWarehouseIdArray() {
return warehouseIdArray;
}
public void setWarehouseIdArray(String[] warehouseIdArray) {
this.warehouseIdArray = warehouseIdArray;
}
public String[] getLocationIdArray() {
return locationIdArray;
}
public void setLocationIdArray(String[] locationIdArray) {
this.locationIdArray = locationIdArray;
}
public String getMaterialId() {
return materialId;
}
public String getPlannedDates() {
return plannedDates;
}
public void setPlannedDates(String plannedDates) {
this.plannedDates = plannedDates;
}
public String getLocationId() {
return locationId;
}
public void setLocationId(String locationId) {
this.locationId = locationId;
}
public void setMaterialId(String materialId) {
this.materialId = materialId;
}
public String getSapNo() {
return sapNo;
}
public void setSapNo(String sapNo) {
this.sapNo = sapNo;
}
public String getWarehousesName() {
return warehousesName;
}
public void setWarehousesName(String warehousesName) {
this.warehousesName = warehousesName;
}
public String getLocationName() {
return locationName;
}
public void setLocationName(String locationName) {
this.locationName = locationName;
}
public String getWarehousesId() {
return warehousesId;
}
public void setWarehousesId(String warehousesId) {
this.warehousesId = warehousesId;
}
public String getTsCode() {
return tsCode;
}
public void setTsCode(String tsCode) {
this.tsCode = tsCode;
}
public String getHazardName() {
return hazardName;
}
public void setHazardName(String hazardName) {
this.hazardName = hazardName;
}
public String getVarianceQuantity() {
return varianceQuantity;
}
public void setVarianceQuantity(String varianceQuantity) {
this.varianceQuantity = varianceQuantity;
}
public String getVarianceAmount() {
return varianceAmount;
}
public void setVarianceAmount(String varianceAmount) {
this.varianceAmount = varianceAmount;
}
public String getCountQuantity() {
return countQuantity;
}
public void setCountQuantity(String countQuantity) {
this.countQuantity = countQuantity;
}
public String getCountAmount() {
return countAmount;
}
public void setCountAmount(String countAmount) {
this.countAmount = countAmount;
}
}
......@@ -5,6 +5,7 @@ import java.util.List;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.inventory.domain.Inventory;
import com.ruoyi.inventory.domain.StocktakeItems;
import com.ruoyi.inventory.domain.TO.StocktakeItemsTo;
/**
* 库存Mapper接口
......@@ -79,7 +80,7 @@ public interface InventoryMapper
* @date 2025/12/3
* @version 1.0
*/
List<StocktakeItems> selectstocktakeItemsList();
List<StocktakeItemsTo> selectstocktakeItemsList();
/**
* 按物料汇总统计库存
......
package com.ruoyi.inventory.mapper;
import java.util.List;
import java.util.Map;
import com.ruoyi.inventory.domain.StocktakeItems;
import com.ruoyi.inventory.domain.TO.StocktakeItemsTo;
import com.ruoyi.inventory.domain.TO.StocktakesVo;
/**
* 盘点单明细Mapper接口
......@@ -58,4 +62,10 @@ public interface StocktakeItemsMapper
* @return 结果
*/
public int deleteStocktakeItemsByIds(String[] ids);
// 主表调用获取子表信息
public List<StocktakeItemsTo> selectStocktakeItemsByMain(Map<String, Object> query);
// 查询处理统计-详情
public List<StocktakesVo> selectStocktakesCountInfo(StocktakesVo stocktakes);
}
package com.ruoyi.inventory.mapper;
import java.util.List;
import java.util.Map;
import com.ruoyi.inventory.domain.Stocktakes;
import com.ruoyi.inventory.domain.StocktakeItems;
import com.ruoyi.inventory.domain.TO.StocktakesVo;
/**
* 盘点单主Mapper接口
......@@ -15,7 +18,6 @@ public interface StocktakesMapper
/**
* 查询盘点单主
*
* @param id 盘点单主主键
* @return 盘点单主
*/
public Stocktakes selectStocktakesById(String id);
......@@ -84,4 +86,12 @@ public interface StocktakesMapper
* @return 结果
*/
public int deleteStocktakeItemsByStocktakeId(String id);
/**
* @description: 查询处理统计
* @author cs
* @date 2025/12/8
* @version 1.0
*/
public List<StocktakesVo> selectStocktakesListCount(StocktakesVo stocktakes);
}
......@@ -7,6 +7,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.inventory.domain.Inventory;
import com.ruoyi.inventory.domain.OutboundOrderItems;
import com.ruoyi.inventory.domain.StocktakeItems;
import com.ruoyi.inventory.domain.TO.StocktakeItemsTo;
/**
* 库存Service接口
......@@ -88,7 +89,7 @@ public interface IInventoryService
* @date 2025/12/3
* @version 1.0
*/
public List<StocktakeItems> selectstocktakeItemsList();
public List<StocktakeItemsTo> selectstocktakeItemsList();
/**
* 按物料汇总统计库存
......
package com.ruoyi.inventory.service;
import java.util.List;
import java.util.Map;
import com.ruoyi.inventory.domain.StocktakeItems;
import com.ruoyi.inventory.domain.TO.StocktakeItemsTo;
import com.ruoyi.inventory.domain.TO.StocktakesVo;
/**
* 盘点单明细Service接口
......@@ -19,6 +23,9 @@ public interface IStocktakeItemsService
*/
public StocktakeItems selectStocktakeItemsById(String id);
// 主表调用
public List<StocktakeItemsTo> selectStocktakeItemsByMain(Map<String,Object> query);
/**
* 查询盘点单明细列表
*
......@@ -58,4 +65,7 @@ public interface IStocktakeItemsService
* @return 结果
*/
public int deleteStocktakeItemsById(String id);
// 查询处理统计-详情
public List<StocktakesVo> selectStocktakesCountInfo(StocktakesVo stocktakes);
}
package com.ruoyi.inventory.service;
import java.util.List;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.inventory.domain.Stocktakes;
import com.ruoyi.inventory.domain.TO.StocktakesTO;
import com.ruoyi.inventory.domain.TO.StocktakesVo;
import org.springframework.web.bind.annotation.GetMapping;
/**
* 库存盘点Service接口
......@@ -15,10 +19,9 @@ public interface IStocktakesService
/**
* 查询库存盘点
*
* @param id 库存盘点主键
* @return 库存盘点
*/
public Stocktakes selectStocktakesById(String id);
public Stocktakes selectStocktakesById(String id,String operationType);
/**
* 查询库存盘点列表
......@@ -59,4 +62,22 @@ public interface IStocktakesService
* @return 结果
*/
public int deleteStocktakesById(String id);
/**
* @description: 查询处理统计
* @author cs
* @date 2025/12/8
* @version 1.0
*/
public List<StocktakesVo> selectStocktakesListCount(StocktakesVo stocktakes);
/**
* @description: 查询处理统计-详情
* @author cs
* @date 2025/12/9
* @version 1.0
*/
public List<StocktakesVo> selectStocktakesCountInfo(StocktakesVo stocktakes);
}
package com.ruoyi.inventory.service.impl;
import java.util.List;
import java.util.Map;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.inventory.domain.TO.StocktakeItemsTo;
import com.ruoyi.inventory.domain.TO.StocktakesVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.inventory.mapper.StocktakeItemsMapper;
......@@ -33,6 +37,15 @@ public class StocktakeItemsServiceImpl implements IStocktakeItemsService
}
/**
* @description: 主表调用获取子表信息
* @author cs
* @date 2025/12/5
* @version 1.0
*/
public List<StocktakeItemsTo> selectStocktakeItemsByMain(Map<String,Object> query){
return stocktakeItemsMapper.selectStocktakeItemsByMain(query);
}
/**
* 查询盘点单明细列表
*
* @param stocktakeItems 盘点单明细
......@@ -93,4 +106,24 @@ public class StocktakeItemsServiceImpl implements IStocktakeItemsService
{
return stocktakeItemsMapper.deleteStocktakeItemsById(id);
}
// 查询处理统计-详情
@Override
public List<StocktakesVo> selectStocktakesCountInfo(StocktakesVo stocktakes){
String plannedDates = stocktakes.getPlannedDates();
String warehousesId = stocktakes.getWarehousesId();
String locationId = stocktakes.getLocationId();
if (plannedDates != null && !plannedDates.isEmpty()) {
stocktakes.setPlannedDateArray(plannedDates.split(","));
}
// 2. 拆分仓库ID
if (warehousesId != null && !warehousesId.isEmpty()) {
stocktakes.setWarehouseIdArray(warehousesId.split(","));
}
// 3. 拆分库位ID
if (locationId != null && !locationId.isEmpty()) {
stocktakes.setLocationIdArray(locationId.split(","));
}
return stocktakeItemsMapper.selectStocktakesCountInfo(stocktakes);
}
}
package com.ruoyi.inventory.service.impl;
import java.util.Date;
import java.util.List;
import java.util.*;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.inventory.domain.Inventory;
import com.ruoyi.inventory.domain.InventoryTransactions;
import com.ruoyi.inventory.domain.TO.StocktakeItemsTo;
import com.ruoyi.inventory.domain.TO.StocktakesTO;
import com.ruoyi.inventory.domain.TO.StocktakesVo;
import com.ruoyi.inventory.mapper.StocktakeItemsMapper;
import com.ruoyi.inventory.service.IInventoryService;
import com.ruoyi.inventory.service.IInventoryTransactionsService;
import com.ruoyi.inventory.service.IStocktakeItemsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.inventory.domain.StocktakeItems;
import com.ruoyi.inventory.mapper.StocktakesMapper;
import com.ruoyi.inventory.domain.Stocktakes;
import com.ruoyi.inventory.service.IStocktakesService;
import org.springframework.web.bind.annotation.GetMapping;
/**
* 盘点单主Service业务层处理
......@@ -51,9 +54,21 @@ public class StocktakesServiceImpl implements IStocktakesService
* @return 盘点单主
*/
@Override
public Stocktakes selectStocktakesById(String id)
public Stocktakes selectStocktakesById(String id,String operationType)
{
return stocktakesMapper.selectStocktakesById(id);
// 获取主表信息
Stocktakes stocktakes = stocktakesMapper.selectStocktakesById(id);
// 获取子表信息
Map<String,Object> query = new HashMap<>();
query.put("stocktake_id",id);
if("confirm".equals(operationType)){
// 盘点确认时只查看 变更的
query.put("adjusted",1);
}
List<StocktakeItemsTo> stocktakeItems = stocktakeItemsService.selectStocktakeItemsByMain(query);
stocktakes.setStocktakeItemsList(stocktakeItems);
return stocktakes;
}
/**
......@@ -93,7 +108,7 @@ public class StocktakesServiceImpl implements IStocktakesService
Inventory inventory = new Inventory();
inventory.setInventoryStatus(1L);
inventory.setIsUsed(1L);
List<StocktakeItems> stocktakeItemsList = inventoryService.selectstocktakeItemsList();
List<StocktakeItemsTo> stocktakeItemsList = inventoryService.selectstocktakeItemsList();
stocktakes.setStocktakeItemsList(stocktakeItemsList);
insertStocktakeItems(stocktakes);
return rows;
......@@ -122,8 +137,8 @@ public class StocktakesServiceImpl implements IStocktakesService
Date nowDate = DateUtils.getNowDate();//统一调整时间
if("check".equals(operationType)){
// 盘点提交
List<StocktakeItems> stocktakeItemsList = stocktakes.getStocktakeItemsList();
for (StocktakeItems stocktakeItems : stocktakeItemsList) {
List<StocktakeItemsTo> stocktakeItemsList = stocktakes.getStocktakeItemsList();
for (StocktakeItemsTo stocktakeItems : stocktakeItemsList) {
stocktakeItems.setAdjustedBy(loginUserId);//调整人
stocktakeItems.setAdjustedAt(nowDate);//调整时间
stocktakeItems.setUpdateUserCode(loginUserId);//更新人
......@@ -150,15 +165,16 @@ public class StocktakesServiceImpl implements IStocktakesService
if("confirm".equals(operationType)){
// 确认盘点 提交
// 库存表根据子表数据更新库存量 --因为盘点确认时查询的就是有调整的子表数据,又因为库存操作表需要的货主id子表中没有,所以需要根据id查询库存表
List<StocktakeItems> stocktakeItemsList = stocktakes.getStocktakeItemsList();
for (StocktakeItems stocktakeItems : stocktakeItemsList) {
List<StocktakeItemsTo> stocktakeItemsList = stocktakes.getStocktakeItemsList();
for (StocktakeItemsTo stocktakeItems : stocktakeItemsList) {
// 获取实际数量
Long actualQuantity = stocktakeItems.getActualQuantity();
// 库存表id
String inventoryId = stocktakeItems.getInventoryId();
// 变更前数量 之所以不用库存表中的数量,是因为变更是从盘点计划时开始算的
Long quantity = stocktakeItems.getSystemQuantity();
// 获取库存信息
Inventory inv = inventoryService.selectInventoryById(inventoryId);
Long quantity = inv.getQuantity(); // 变更前数量
inv.setUpdateTime(nowDate);//更新时间
inv.setUpdateUserCode(loginUserId);//更新人
inv.setQuantity(actualQuantity);// 更新实际数量
......@@ -236,7 +252,7 @@ public class StocktakesServiceImpl implements IStocktakesService
*/
public void insertStocktakeItems(Stocktakes stocktakes)
{
List<StocktakeItems> stocktakeItemsList = stocktakes.getStocktakeItemsList();
List<StocktakeItemsTo> stocktakeItemsList = stocktakes.getStocktakeItemsList();
String stocktakeid = stocktakes.getId(); // 盘点单号
String createUserCode = stocktakes.getCreateUserCode();// 创建人
Date createTime = stocktakes.getCreateTime();// 创建日期
......@@ -253,6 +269,7 @@ public class StocktakesServiceImpl implements IStocktakesService
stocktakeItems.setCreateUserCode(createUserCode);
stocktakeItems.setCreateTime(createTime);
list.add(stocktakeItems);
}
if (list.size() > 0)
{
......@@ -260,4 +277,29 @@ public class StocktakesServiceImpl implements IStocktakesService
}
}
}
/**
* @description: 查询处理统计
* @author cs
* @date 2025/12/8
* @version 1.0
*/
@Override
public List<StocktakesVo> selectStocktakesListCount(StocktakesVo stocktakes)
{
List<StocktakesVo> list = stocktakesMapper.selectStocktakesListCount(stocktakes);
return list;
}
/**
* @description: 查询处理统计-详情
* @author cs
* @date 2025/12/9
* @version 1.0
*/
@Override
public List<StocktakesVo> selectStocktakesCountInfo(StocktakesVo stocktakes)
{
List<StocktakesVo> list = stocktakeItemsService.selectStocktakesCountInfo(stocktakes);
return list;
}
}
......@@ -32,13 +32,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="warehousesId" column="warehouses_id" />
</resultMap>
<resultMap type="StocktakeItems" id="StocktakeItemsResult">
<resultMap type="com.ruoyi.inventory.domain.TO.StocktakeItemsTo" id="StocktakeItemsResult">
<result property="id" column="id" />
<result property="stocktakeId" column="stocktake_id" />
<result property="materialId" column="material_id" />
<result property="batchCode" column="batch_code" />
<result property="warehouseId" column="warehouse_id" />
<result property="locationId" column="location_id" />
<result property="warehouseName" column="warehouse_name" />
<result property="locationName" column="location_name" />
<result property="systemQuantity" column="system_quantity" />
<result property="actualQuantity" column="actual_quantity" />
<result property="varianceQuantity" column="variance_quantity" />
......@@ -52,7 +54,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="adjustedAt" column="adjusted_at" />
<result property="startTime" column="start_time" />
<result property="endTime" column="end_time" />
<result property="materialRange" column="material_range" />
<result property="locationRange" column="location_range" />
<result property="remark" column="remark" />
<result property="isUsed" column="is_used" />
<result property="sortNo" column="sort_no" />
<result property="createTime" column="create_time" />
<result property="createUserCode" column="create_user_code" />
<result property="updateTime" column="update_time" />
<result property="updateUserCode" column="update_user_code" />
<result property="inventoryId" column="inventory_id" />
<result property="unitPrice" column="unit_price" />
</resultMap>
<resultMap type="com.ruoyi.inventory.domain.vo.InventorySummaryVO" id="InventorySummaryResult">
......@@ -189,7 +201,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectstocktakeItemsList" resultMap="StocktakeItemsResult">
select material_id, batch_id, location_id, warehouse_id, quantity as system_quantity
select id as inventory_id,material_id, batch_id, location_id, warehouses_id as warehouse_id, quantity as system_quantity
from inventory
where is_used = 1 and inventory_status = 1
order by warehouse_id,location_id,material_id
......
......@@ -4,13 +4,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inventory.mapper.StocktakeItemsMapper">
<resultMap type="StocktakeItems" id="StocktakeItemsResult">
<resultMap type="com.ruoyi.inventory.domain.TO.StocktakeItemsTo" id="StocktakeItemsResult">
<result property="id" column="id" />
<result property="stocktakeId" column="stocktake_id" />
<result property="materialId" column="material_id" />
<result property="batchCode" column="batch_code" />
<result property="warehouseId" column="warehouse_id" />
<result property="locationId" column="location_id" />
<result property="warehouseName" column="warehouse_name" />
<result property="locationName" column="location_name" />
<result property="systemQuantity" column="system_quantity" />
<result property="actualQuantity" column="actual_quantity" />
<result property="varianceQuantity" column="variance_quantity" />
......@@ -34,10 +36,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateTime" column="update_time" />
<result property="updateUserCode" column="update_user_code" />
<result property="inventoryId" column="inventory_id" />
<result property="unitPrice" column="unit_price" />
</resultMap>
<sql id="selectStocktakeItemsVo">
select id, inventory_id, stocktake_id, material_id, batch_code, warehouse_id, location_id, system_quantity, actual_quantity, variance_quantity, variance_amount, stocktake_status, counted_by, counted_at, adjusted, adjustment_reason, adjusted_by, adjusted_at, start_time, end_time, material_range, location_range, remark, is_used, sort_no, create_time, create_user_code, update_time, update_user_code from stocktake_items
select id, inventory_id,unit_price, stocktake_id, material_id, batch_code, warehouse_id, location_id, system_quantity, actual_quantity, variance_quantity, variance_amount, stocktake_status, counted_by, counted_at, adjusted, adjustment_reason, adjusted_by, adjusted_at, start_time, end_time, material_range, location_range, remark, is_used, sort_no, create_time, create_user_code, update_time, update_user_code from stocktake_items
</sql>
<select id="selectStocktakeItemsList" parameterType="StocktakeItems" resultMap="StocktakeItemsResult">
......@@ -67,6 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<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>
<if test="unitPrice != null and unitPrice != ''"> and unit_price = #{unitPrice}</if>
</where>
</select>
......@@ -75,6 +79,80 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</select>
<select id="selectStocktakeItemsByMain" parameterType="java.util.Map" resultMap="StocktakeItemsResult">
select st_it.id
, st_it.inventory_id
,st_it.unit_price
, st_it.stocktake_id
, st_it.material_id
, st_it.batch_code
, st_it.warehouse_id
, st_it.location_id
, st_it.system_quantity
, st_it.actual_quantity
, st_it.variance_quantity
, st_it.variance_amount
, st_it.stocktake_status
, st_it.counted_by
, st_it.counted_at
, st_it.adjusted
, st_it.adjustment_reason
, st_it.adjusted_by
, st_it.adjusted_at
, st_it.start_time
, st_it.end_time
, st_it.material_range
, st_it.location_range
,(select w.warehouses_name from warehouses w where st_it.warehouse_id = w.warehouses_code and w.is_used = 1) as warehouse_name
,(select sl.location_name from storage_locations sl where st_it.location_id = sl.location_code and sl.is_used = 1) as location_name
from stocktake_items st_it
where stocktake_id = #{stocktake_id} and is_used = 1
<if test="adjusted != null and adjusted != ''"> and adjusted = #{adjusted}</if>
</select>
<!-- 查询处理统计-详情-->
<select id="selectStocktakesCountInfo" resultType="com.ruoyi.inventory.domain.TO.StocktakesVo">
select
st_it.material_id as materialId
,ma.sap_no as sapNo
,date_format(st.planned_date,'%Y%m%d') as plannedDates
,w.warehouses_name as warehousesName
,sl.location_name as locationName
,st_it.warehouse_id as warehousesId
,st_it.location_id as locationID
,ma.ts_code as tsCode
,dict.dict_label as hazardName
,IFNULL(st_it.variance_quantity, '0') as varianceQuantity
,IFNULL(st_it.variance_amount, '0') as varianceAmount
from stocktakes st
left join stocktake_items st_it on st.id = st_it.stocktake_id and st_it.is_used = 1
left join materials ma on st_it.material_id = ma.sap_no and ma.is_used = 1
left join warehouses w on st_it.warehouse_id = w.warehouses_code and w.is_used = 1
left join storage_locations sl on st_it.location_id = sl.location_code and sl.is_used = 1
left join sys_dict_data dict on ma.hazard_id = dict.dict_sort and dict.status =0 and dict.dict_type ='danger_type'
where
st.is_used = 1
<if test="materialId != null "> and st_it.material_id = #{materialId}</if>
<if test="plannedDateArray != null and plannedDateArray.length > 0">
and date_format(st.planned_date,'%Y%m%d') in
<foreach item="date" collection="plannedDateArray" open="(" separator="," close=")">
#{date}
</foreach>
</if>
<if test="warehouseIdArray != null and warehouseIdArray.length > 0">
and st_it.warehouse_id in
<foreach item="warehouse" collection="warehouseIdArray" open="(" separator="," close=")">
#{warehouse}
</foreach>
</if>
<if test="locationIdArray != null and locationIdArray.length > 0">
and st_it.location_id in
<foreach item="location" collection="locationIdArray" open="(" separator="," close=")">
#{location}
</foreach>
</if>
order by st.planned_date
</select>
<insert id="insertStocktakeItems" parameterType="StocktakeItems">
insert into stocktake_items
<trim prefix="(" suffix=")" suffixOverrides=",">
......@@ -107,6 +185,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createUserCode != null">create_user_code,</if>
<if test="updateTime != null">update_time,</if>
<if test="updateUserCode != null">update_user_code,</if>
<if test="unitPrice != null"> unit_price,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
......@@ -138,6 +217,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createUserCode != null">#{createUserCode},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="updateUserCode != null">#{updateUserCode},</if>
<if test="unitPrice != null"> #{unitPrice},</if>
</trim>
</insert>
......@@ -172,18 +252,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createUserCode != null">create_user_code = #{createUserCode},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateUserCode != null">update_user_code = #{updateUserCode},</if>
<if test="unitPrice != null"> unit_price = #{unitPrice},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteStocktakeItemsById" parameterType="String">
delete from stocktake_items where id = #{id}
</delete>
<update id="deleteStocktakeItemsById" parameterType="String">
update stocktake_items
set is_used = 0
where id = #{id}
</update>
<delete id="deleteStocktakeItemsByIds" parameterType="String">
delete from stocktake_items where id in
<update id="deleteStocktakeItemsByIds" parameterType="String">
update from stocktake_items
set is_used = 0
where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</update>
</mapper>
\ No newline at end of file
......@@ -23,41 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateUserCode" column="update_user_code" />
</resultMap>
<resultMap id="StocktakesStocktakeItemsResult" type="Stocktakes" extends="StocktakesResult">
<collection property="stocktakeItemsList" ofType="StocktakeItems" column="id" select="selectStocktakeItemsList" />
</resultMap>
<resultMap type="StocktakeItems" id="StocktakeItemsResult">
<result property="id" column="id" />
<result property="stocktakeId" column="stocktake_id" />
<result property="inventoryId" column="inventory_id" />
<result property="materialId" column="material_id" />
<result property="batchCode" column="batch_code" />
<result property="warehouseId" column="warehouse_id" />
<result property="locationId" column="location_id" />
<result property="systemQuantity" column="system_quantity" />
<result property="actualQuantity" column="actual_quantity" />
<result property="varianceQuantity" column="variance_quantity" />
<result property="varianceAmount" column="variance_amount" />
<result property="stocktakeStatus" column="stocktake_status" />
<result property="countedBy" column="counted_by" />
<result property="countedAt" column="counted_at" />
<result property="adjusted" column="adjusted" />
<result property="adjustmentReason" column="adjustment_reason" />
<result property="adjustedBy" column="adjusted_by" />
<result property="adjustedAt" column="adjusted_at" />
<result property="startTime" column="start_time" />
<result property="endTime" column="end_time" />
<result property="materialRange" column="material_range" />
<result property="locationRange" column="location_range" />
<result property="remark" column="remark" />
<result property="isUsed" column="is_used" />
<result property="sortNo" column="sort_no" />
<result property="createTime" column="create_time" />
<result property="createUserCode" column="create_user_code" />
<result property="updateTime" column="update_time" />
<result property="updateUserCode" column="update_user_code" />
</resultMap>
<sql id="selectStocktakesVo">
select id, stocktake_id, stocktake_type, warehouse_id, stocktake_status, planned_date, material_range, location_range, total_variance_amount, remark, is_used, sort_no, create_time, create_user_code, update_time, update_user_code from stocktakes
......@@ -84,24 +50,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<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>
order by create_time,planned_date,update_time desc
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectStocktakesById" parameterType="String" resultMap="StocktakesStocktakeItemsResult">
<select id="selectStocktakesById" parameterType="String" resultMap="StocktakesResult">
select id, stocktake_id, stocktake_type, warehouse_id, stocktake_status, planned_date, material_range, location_range
, total_variance_amount, remark, is_used, sort_no, create_time, create_user_code, update_time, update_user_code
from stocktakes
where id = #{id}
</select>
<select id="selectStocktakeItemsList" resultMap="StocktakeItemsResult">
select id, inventory_id, stocktake_id, material_id, batch_code, warehouse_id, location_id, system_quantity, actual_quantity, variance_quantity, variance_amount, stocktake_status, counted_by, counted_at, adjusted, adjustment_reason, adjusted_by, adjusted_at, start_time, end_time, material_range, location_range, remark, is_used, sort_no, create_time, create_user_code, update_time, update_user_code
from stocktake_items
where stocktake_id = #{stocktake_id} and is_used = 1
<!-- 查询处理统计-->
<select id="selectStocktakesListCount" resultType="com.ruoyi.inventory.domain.TO.StocktakesVo">
select
st_it.material_id as materialId
,ma.sap_no as sapNo
,GROUP_CONCAT(DISTINCT date_format(st.planned_date,'%Y%m%d') SEPARATOR ',') as plannedDates
,GROUP_CONCAT(DISTINCT w.warehouses_name SEPARATOR ',') as warehousesName
,GROUP_CONCAT(DISTINCT sl.location_name SEPARATOR ',') as locationName
,GROUP_CONCAT(DISTINCT st_it.warehouse_id SEPARATOR ',') as warehousesId
,GROUP_CONCAT(DISTINCT st_it.location_id SEPARATOR ',') as locationId
,ma.ts_code as tsCode
,GROUP_CONCAT(DISTINCT dict.dict_label SEPARATOR ',') as hazardName
,IFNULL(sum(st_it.variance_quantity), '0') as countQuantity
,IFNULL(sum(st_it.variance_amount), '0') as countAmount
from stocktakes st
left join stocktake_items st_it on st.id = st_it.stocktake_id and st_it.is_used = 1
left join materials ma on st_it.material_id = ma.sap_no and ma.is_used = 1
left join warehouses w on st_it.warehouse_id = w.warehouses_code and w.is_used = 1
left join storage_locations sl on st_it.location_id = sl.location_code and sl.is_used = 1
left join sys_dict_data dict on ma.hazard_id = dict.dict_sort and dict.status =0 and dict.dict_type ='danger_type'
where
st.is_used = 1
<if test="materialId != null "> and st_it.material_id = #{materialId}</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(st.planned_date,'%Y%m%d') &gt;= date_format(#{params.beginTime},'%Y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(st.planned_date,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
</if>
<if test="warehouseId != null "> and st_it.warehouse_id = #{warehouseId}</if>
<if test="locationId != null "> and st_it.location_id = #{locationId}</if>
group by st_it.material_id
</select>
<insert id="insertStocktakes" parameterType="Stocktakes">
insert into stocktakes
<trim prefix="(" suffix=")" suffixOverrides=",">
......@@ -193,7 +187,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<insert id="batchStocktakeItems">
insert into stocktake_items( id, stocktake_id, inventory_id, material_id, batch_code, warehouse_id, location_id, system_quantity, actual_quantity, variance_quantity, variance_amount, stocktake_status, counted_by, counted_at, adjusted, adjustment_reason, adjusted_by, adjusted_at, start_time, end_time, material_range, location_range, remark, is_used, sort_no, create_time, create_user_code, update_time, update_user_code) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.id}, #{item.stocktakeId}, #{inventoryId}, #{item.materialId}, #{item.batchCode}, #{item.warehouseId}, #{item.locationId}, #{item.systemQuantity}, #{item.actualQuantity}, #{item.varianceQuantity}, #{item.varianceAmount}, #{item.stocktakeStatus}, #{item.countedBy}, #{item.countedAt}, #{item.adjusted}, #{item.adjustmentReason}, #{item.adjustedBy}, #{item.adjustedAt}, #{item.startTime}, #{item.endTime}, #{item.materialRange}, #{item.locationRange}, #{item.remark}, #{item.isUsed}, #{item.sortNo}, #{item.createTime}, #{item.createUserCode}, #{item.updateTime}, #{item.updateUserCode})
( #{item.id}, #{item.stocktakeId}, #{item.inventoryId}, #{item.materialId}, #{item.batchCode}, #{item.warehouseId}, #{item.locationId}, #{item.systemQuantity}, #{item.actualQuantity}, #{item.varianceQuantity}, #{item.varianceAmount}, #{item.stocktakeStatus}, #{item.countedBy}, #{item.countedAt}, #{item.adjusted}, #{item.adjustmentReason}, #{item.adjustedBy}, #{item.adjustedAt}, #{item.startTime}, #{item.endTime}, #{item.materialRange}, #{item.locationRange}, #{item.remark}, #{item.isUsed}, #{item.sortNo}, #{item.createTime}, #{item.createUserCode}, #{item.updateTime}, #{item.updateUserCode})
</foreach>
</insert>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论