根据物料ID,库位ID获取最新库存数量

根据物料ID,库位ID获取最新库存数量
pull/3/head
siontion 9 months ago
parent 686c07b29e
commit 9e5e584822

@ -1,7 +1,10 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck;
import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.StorageSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheckmat.vo.StorageCheckMatSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
@ -54,10 +57,29 @@ public class StorageCheckController {
return success(storageCheckService.createStorageCheck(createReqVO));
}
@PostMapping("/create-batch")
@Operation(summary = "批量创建盘点物料")
@PreAuthorize("@ss.hasPermission('heli:storage-mat:create')")
public CommonResult<Long> createStorageCheckMat(@Valid @RequestBody List<StorageCheckMatSaveReqVO> createReqVO, @RequestParam("checkId") Long checkId) {
storageCheckMatService.deleteCheckMatList(checkId);
for (StorageCheckMatSaveReqVO item : createReqVO) {
item.setId(null);
storageCheckMatService.createStorageCheckMat(item);
}
return success(1L);
}
@PutMapping("/update")
@Operation(summary = "更新入/出库盘点")
@PreAuthorize("@ss.hasPermission('heli:storage-check:update')")
public CommonResult<Boolean> updateStorageCheck(@Valid @RequestBody StorageCheckSaveReqVO updateReqVO) {
// 保存/删除按钮操作
if(updateReqVO.getStatus().equals(3)){
LocalDateTime currTime = LocalDateTime.now();
// 已删除时间更新
updateReqVO.setOutboundTime(currTime);
}
storageCheckService.updateStorageCheck(updateReqVO);
return success(true);
}
@ -67,18 +89,16 @@ public class StorageCheckController {
@PreAuthorize("@ss.hasPermission('heli:storage:update')")
public CommonResult<Boolean> updateStorageCheckStatus(@Valid @RequestBody StorageCheckSaveReqVO updateReqVO) {
// 提交或者删除时记录相关操作人
// 提交按钮时记录相关操作人
LocalDateTime currTime = LocalDateTime.now();
if(updateReqVO.getStatus().equals(2)){
// 已提交时间更新
updateReqVO.setKeeperTime(currTime);
} else if(updateReqVO.getStatus().equals(3)){
// 已删除时间更新
updateReqVO.setCancelTime(currTime);
}
// 已提交时间更新
updateReqVO.setKeeperTime(currTime);
// 盘点信息保存
storageCheckService.updateStorageCheck(updateReqVO);
// 获取当前盘点下所有物料信息
List<StorageCheckMatDO> matList = storageCheckMatService.getStorageMatListByCheckId(updateReqVO.getId());
// TODO保存物料列表信息
// TODO生成入库/出库单据

@ -78,6 +78,13 @@ public class StorageCheckMatController {
PageResult<StorageCheckMatDO> pageResult = storageCheckMatService.getStorageCheckMatPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StorageCheckMatRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得盘点物料分页")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:query')")
public CommonResult<List<StorageCheckMatRespVO>> getStorageCheckMatListByCheckID(@RequestParam("checkId") Long checkId) {
List<StorageCheckMatDO> pageResult = storageCheckMatService.getStorageMatListByCheckId(checkId);
return success(BeanUtils.toBean(pageResult, StorageCheckMatRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出盘点物料 Excel")

@ -13,6 +13,7 @@ import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.math.BigDecimal;
import java.util.*;
import java.io.IOException;
@ -89,6 +90,18 @@ public class StorageLogController {
return success(pageResult);
}
@GetMapping("/matRest")
@Operation(summary = "获得最新库存数量")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
public CommonResult<BigDecimal> getStorageNowPage(@RequestParam("matId") Long matId, @RequestParam("pnId") Long pnId) {
List<StorageLogNowDO> pageResult = storageLogService.selectNowByMatPnId(matId,pnId);
BigDecimal matRest = BigDecimal.valueOf(0);
for(StorageLogNowDO item : pageResult){
matRest = item.getStorageOkQty();
}
return success(matRest);
}
@GetMapping("/all")
@Operation(summary = "获得全部库存数据")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")

@ -40,7 +40,7 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<MaterialDO>().select("id", "name","code","material_type","spec","unit").lambda());
return selectMaps(new QueryWrapper<MaterialDO>().select("id", "name","short_name","code","material_type","spec","unit","brand").lambda());
}
}

@ -35,4 +35,10 @@ public interface StorageCheckMatMapper extends BaseMapperX<StorageCheckMatDO> {
.orderByDesc(StorageCheckMatDO::getId));
}
default List<StorageCheckMatDO> selectListByCheckID(Long checkId) {
return selectList(new LambdaQueryWrapperX<StorageCheckMatDO>()
.eqIfPresent(StorageCheckMatDO::getCheckId, checkId)
.orderByDesc(StorageCheckMatDO::getId));
}
}

@ -8,7 +8,10 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNo
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.hpsf.Decimal;
import java.math.BigDecimal;
import java.util.List;
/**
@ -35,9 +38,13 @@ public interface StorageLogNowMapper extends BaseMapperX<StorageLogNowDO> {
return selectPage(reqVO,query);
}
PageResult<StorageLogNowDO> selectAllPage(StorageLogPageReqVO reqVO);
List<StorageLogNowDO> selectNoZero(StorageNowAllReqVO reqVO);
List<StorageLogNowDO> selectNowList(StorageNowAllReqVO reqVO);
List<StorageLogNowDO> selectNowByMatPnId(@Param("matId")Long matId,@Param("pnId")Long pnId);
}

@ -6,6 +6,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheck.StorageCheckDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
/**
* / Service
@ -52,4 +53,5 @@ public interface StorageCheckService {
*/
PageResult<StorageCheckDO> getStorageCheckPage(StorageCheckPageReqVO pageReqVO);
}

@ -52,4 +52,8 @@ public interface StorageCheckMatService {
*/
PageResult<StorageCheckMatDO> getStorageCheckMatPage(StorageCheckMatPageReqVO pageReqVO);
List<StorageCheckMatDO> getStorageMatListByCheckId(Long id);
Integer deleteCheckMatList(Long checkId);
}

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.service.storagecheckmat;
import com.google.common.collect.Maps;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -71,4 +72,17 @@ public class StorageCheckMatServiceImpl implements StorageCheckMatService {
return storageCheckMatMapper.selectPage(pageReqVO);
}
@Override
public List<StorageCheckMatDO> getStorageMatListByCheckId(Long id){
return storageCheckMatMapper.selectListByCheckID(id);
}
@Override
public Integer deleteCheckMatList(Long checkId) {
//删除条件
Map<String, Object> columnMap = Maps.newHashMap();
columnMap.put("check_id", checkId);
return storageCheckMatMapper.deleteByMap(columnMap);
}
}

@ -57,6 +57,8 @@ public interface StorageLogService {
PageResult<StorageLogNowDO> getStorageNowPage(StorageLogPageReqVO pageReqVO);
List<StorageLogNowDO> selectNowByMatPnId(Long matId,Long pnId);
List<StorageLogNowDO> getStorageNowList(StorageNowAllReqVO queryReqVO);
void createStorageLogBatch(List<StorageLogDO> storageLogDOs);

@ -98,6 +98,11 @@ public class StorageLogServiceImpl implements StorageLogService {
//
}
@Override
public List<StorageLogNowDO> selectNowByMatPnId(Long matId,Long pnId) {
return storageLogNowMapper.selectNowByMatPnId(matId,pnId);
}
@Override
public void createStorageLogBatch(List<StorageLogDO> storageLogDOs) {
for (StorageLogDO storageLogDo : storageLogDOs){

@ -59,7 +59,7 @@ public interface StorageMatService {
*/
List<StorageMatValidRespVO> getStorageMatList(Long whId);
int deleteStorageMatList(Long stockId);
Integer deleteStorageMatList(Long stockId);
List<StorageMatDO> getStorageMatListByStockId(Long stockId);

@ -83,7 +83,7 @@ public class StorageMatServiceImpl implements StorageMatService {
}
@Override
public int deleteStorageMatList(Long stockId) {
public Integer deleteStorageMatList(Long stockId) {
//删除条件
Map<String, Object> columnMap = Maps.newHashMap();
columnMap.put("stock_id", stockId);

@ -67,4 +67,8 @@
</if>
</where>
</select>
<select id="selectNowByMatPnId" resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
select * from v_storage_material_now where id=#{matId} and pn_id=#{pnId}
</select>
</mapper>

@ -17,6 +17,11 @@ export interface StorageCheckVO {
cancelTime: Date
}
// 查询入/出库实时分页
export const getStorageNowMatRest = async (matid:number,pnid:number) => {
return await request.get({ url: `/heli/storage-log/matRest?matId=`+matid+'&pnId='+pnid })
}
// 查询入/出库盘点分页
export const getStorageCheckPage = async (params) => {
return await request.get({ url: `/heli/storage-check/page`, params })

@ -12,6 +12,15 @@ export interface StorageCheckMatVO {
lotNo: string
}
// 根据盘点ID查询物料列表
export const getStorageCheckListByCheckID = async (id:number) => {
return await request.get({ url: `/heli/storage-check-mat/list?checkId=`+id })
}
// 批量新增盘点物料
export const createCheckMatBatch = async (data: StorageCheckMatVO[],id:number) => {
return await request.post({ url: `/heli/storage-check/create-batch?checkId=`+id, data })
}
// 查询盘点物料分页
export const getStorageCheckMatPage = async (params) => {
return await request.get({ url: `/heli/storage-check-mat/page`, params })

@ -15,6 +15,11 @@ export interface StorageLogVO {
matType:string
}
// 查询入/出库实时分页
export const getStorageNowMatRest = async (matid:number,pnid:number) => {
return await request.get({ url: `/heli/storage-log/matRest?matId=`+matid+'&pnId='+pnid })
}
// 查询入/出库实时分页
export const getStorageNowList = async (params) => {
return await request.get({ url: `/heli/storage-log/all`, params })

@ -259,7 +259,7 @@
</div>
</el-card>
<!-- 表单弹窗无聊列表 -->
<!-- 表单弹窗物料列表 -->
<materials ref="matOpenFormRef" @success="getList" />
</template>
<script setup lang="ts">
@ -267,12 +267,13 @@ import { ref } from 'vue'
import { useRoute } from 'vue-router'
import { dateFormatter, formatDate } from '@/utils/formatTime'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { getIntDictOptions,getDictLabel, DICT_TYPE } from '@/utils/dict'
import { getAccessToken, getTenantId } from '@/utils/auth'
import { useUserStore } from '@/store/modules/user'
import * as CheckApi from '@/api/heli/storagecheck'
import * as CheckMatApi from '@/api/heli/storagecheckmat'
import * as MatApi from '@/api/heli/material'
import * as UserApi from '@/api/system/user'
import * as WhApi from '@/api/heli/warehouse'
@ -282,6 +283,7 @@ import * as PnApi from '@/api/heli/pn'
import type { UploadUserFile } from 'element-plus'
import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file'
import download from '@/utils/download'
import materials from './materials.vue'
const reload = inject('reload')
@ -356,6 +358,7 @@ const getList = async (arrMat) => {
arrMat.forEach(row => {
row.cid = matCount
if(formData.value.matItemDOList.filter(item =>{item.matId == row.matId && item.whId==row.whId && item.rgId == row.rgId && item.pnId== row.pnId})==0){
row.matId = row.id
row.pnlist = ref([])
row.pnlist = pnList.value.filter(pn => pn.rg_id == row.rgId)
if(row.pnlist.length==0){
@ -454,12 +457,12 @@ const saveFormData = async () => {
//
if( formData.value.matItemDOList){
formData.value.matItemDOList.forEach((item) => {
item.stockId = formData.value.id
item.checkId = formData.value.id
item.whId = formData.value.whId
})
}
const dataMats = formData.value.matItemDOList as unknown as CheckMatApi.StorageCheckMatVO[]
//await CheckMatApi.createStorageMatBatch(dataMats, formData.value.id)
await CheckMatApi.createCheckMatBatch(dataMats, formData.value.id)
if (formData.value.matItemDOList !=undefined &&formData.value.matItemDOList.length > 0) {
//
@ -480,12 +483,23 @@ const saveFormData = async () => {
const submitForm = async () => {
//
await formRef.value.validate()
// if (formData.value.matItemDOList ==undefined || formData.value.matItemDOList.length === 0) {
// message.alertWarning('!')
// return
// }
if (formData.value.matItemDOList ==undefined || formData.value.matItemDOList.length === 0) {
message.alertWarning('请添加物料信息!')
return
}
//
try {
var isRepeat = false
formData.value.matItemDOList.forEach(item=>{
if(formData.value.matItemDOList.filter(mat =>mat.matId == item.matId && mat.pnId == item.pnId).length>1){
isRepeat = true
}
})
if(isRepeat){
message.alertWarning('存在相同库位的物料信息,请修改,避免重复盘点!')
return
}
await matSubFormRef.value.validate()
} catch (e) {
return
@ -524,8 +538,13 @@ const handleRg = async (rgid,scope) => {
const handlePn = async (pnid,scope) => {
//-------------------
if(formData.value.matItemDOList.filter(item =>item.id == scope.row.id && item.whId==scope.row.whId && item.rgId == scope.row.rgId && item.pnId== pnid).length>1){
scope.row.matRest = 0
message.alertWarning('物料编码'+scope.row.matCode+',当前库位已存在,请修改,避免重复盘点')
return
}
var currentMatRest = await CheckApi.getStorageNowMatRest(scope.row.id,scope.row.pnId)
scope.row.matRest = currentMatRest
//-------------------
}
const handleSub = async (pNum,scope) => {
@ -556,12 +575,36 @@ onMounted(async () => {
formData.value = await CheckApi.getStorageCheck(query.id)
if(formData.value.matItemDOList==undefined){formData.value.matItemDOList=[]}
await init_page_wh()
await init_page_rg()
await init_page_pn()
const dataCheckMats = await CheckMatApi.getStorageCheckListByCheckID(query.id)
formData.value.matItemDOList = dataCheckMats
if(formData.value.matItemDOList==undefined){formData.value.matItemDOList=[]}
const dataMatSimples = await MatApi.getSimpList()
formData.value.matItemDOList.forEach(item =>{
var matFind = dataMatSimples.find( simp=> simp.id == item.matId)
item.cid = matCount
item.isCopy = 0
item.matName = matFind?.name
item.matCode = matFind?.code
item.matSpec = matFind?.spec
item.matUnit =getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, matFind?.unit)
item.matType =getDictLabel(DICT_TYPE.HELI_MATERIAL_TYPE, matFind?.unit)
item.matBrand = matFind?.brand
item.shortName = matFind?.short_name
item.matSub = item.storageOkQty-item.matRest
item.pnlist = pnList.value.filter( pn=> pn.rg_id == item.rgId)
matCount = matCount +1
})
//
let attParams = {
pageNo: 1,

Loading…
Cancel
Save