库存盘点 日志同步 出入库数据同步

库存盘点 日志同步 出入库数据同步
pull/3/head
siontion 9 months ago
parent 156b28e50c
commit d789e0a980

@ -80,7 +80,7 @@ public class StorageCheckController {
// 已删除时间更新
updateReqVO.setOutboundTime(currTime);
} else if(updateReqVO.getStatus().equals(2)) {
// 已删除时间更新
// 已提交时间更新
updateReqVO.setKeeperTime(currTime);
}
storageCheckService.updateStorageCheck(updateReqVO);
@ -90,23 +90,8 @@ public class StorageCheckController {
@PutMapping("/update-status")
@Operation(summary = "更新盘点状态")
@PreAuthorize("@ss.hasPermission('heli:storage:update')")
public CommonResult<Boolean> updateStorageCheckStatus(@Valid @RequestBody StorageCheckSaveReqVO updateReqVO) {
// 提交按钮时记录相关操作人
LocalDateTime currTime = LocalDateTime.now();
// 已提交时间更新
updateReqVO.setKeeperTime(currTime);
// 盘点信息保存
storageCheckService.updateStorageCheck(updateReqVO);
// 获取当前盘点下所有物料信息
List<StorageCheckMatDO> matList = storageCheckMatService.getStorageMatListByCheckId(updateReqVO.getId());
// TODO保存物料列表信息
// TODO生成入库/出库单据
return success(true);
public CommonResult<Boolean> updateStorageCheckStatus(@RequestParam("checkId") Long checkId) {
return success(storageCheckService.createStorageByCheckInfo(checkId));
}
@DeleteMapping("/delete")

@ -53,5 +53,6 @@ public interface StorageCheckService {
*/
PageResult<StorageCheckDO> getStorageCheckPage(StorageCheckPageReqVO pageReqVO);
Boolean createStorageByCheckInfo(Long checkId);
}

@ -1,23 +1,33 @@
package com.chanko.yunxi.mes.module.heli.service.storagecheck;
import cn.hutool.core.lang.UUID;
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.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagecheckmat.StorageCheckMatMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.print.DocFlavor;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.*;
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.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagecheck.StorageCheckMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_CHECK;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.*;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
@ -29,9 +39,25 @@ import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
@Validated
public class StorageCheckServiceImpl implements StorageCheckService {
@Resource
private StorageLogMapper storageLogMapper;
@Resource
private StorageMapper storageMapper;
@Resource
private StorageMatMapper storageMatMapper;
@Resource
private StorageCheckMatMapper storageCheckMatMapper;
@Resource
private StorageCheckMapper storageCheckMapper;
@Resource
private StorageCheckMatService storageCheckMatService;
@Override
public Long createStorageCheck(StorageCheckSaveReqVO createReqVO) {
// 插入
@ -78,4 +104,89 @@ public class StorageCheckServiceImpl implements StorageCheckService {
return storageCheckMapper.selectPage(pageReqVO);
}
@Override
public Boolean createStorageByCheckInfo(Long checkId){
// 获取盘点单据信息
StorageCheckDO storageCheckDO = this.getStorageCheck(checkId);
// 获取盘点单据物料信息
List<StorageCheckMatDO> storageCheckMats = storageCheckMatService.getStorageMatListByCheckId(checkId);
long hasStockIn = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()>0).count();
long hasStockOut = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()<0).count();
if(hasStockIn>0){
// 库存类型为入库
saveStorage(storageCheckDO,1);
}
if(hasStockOut>0){
// 库存类型为出库
saveStorage(storageCheckDO,2);
}
return true;
}
private void saveStorage(StorageCheckDO storageCheckDO,Integer stockType){
LocalDateTime current = LocalDateTime.now();
// 库存类型为stockType
StorageDO storageDO = new StorageDO();
storageDO.setStockType(stockType);
storageDO.setStockInType(1);
storageDO.setStockNo(UUID.fastUUID().toString(true));
storageDO.setHeaderNo(storageCheckDO.getStockNo());
storageDO.setStatus(2);
storageDO.setDescription(storageCheckDO.getDescription());
storageDO.setWhId(storageCheckDO.getWhId());
storageDO.setKeeper(storageCheckDO.getKeeper());
storageDO.setKeeperTime(current);
storageDO.setOutbound(storageCheckDO.getKeeper());
storageDO.setOutboundTime(current);
storageMapper.insert(storageDO);
storageDO.setStockNo(STOCK_IN.getCode(storageDO.getId().toString()));
storageMapper.updateById(storageDO);
saveStorageMat(storageCheckDO,storageDO.getId(),stockType);
}
private void saveStorageMat(StorageCheckDO storageCheckDO, Long stockId, Integer stockType){
List<StorageCheckMatDO> storageCheckMats = storageCheckMatMapper.selectListByCheckID(storageCheckDO.getId());
for(StorageCheckMatDO item : storageCheckMats){
StorageMatDO storageMatDO = new StorageMatDO();
storageMatDO.setStockId(stockId);
storageMatDO.setMatId(item.getMatId());
storageMatDO.setWhId(item.getWhId());
storageMatDO.setRgId(item.getRgId());
storageMatDO.setPnId(item.getPnId());
storageMatDO.setStorageOkQty(item.getStorageOkQty());
storageMatDO.setLotNo(item.getLotNo());
// 插入出入库物料表
if(stockType == 1 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()>0){
storageMatMapper.insert(storageMatDO);
saveStorageLog(storageMatDO);
}
if(stockType == 2 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()<0){
storageMatMapper.insert(storageMatDO);
saveStorageLog(storageMatDO);
}
}
}
private void saveStorageLog(StorageMatDO storageMatDO){
// 插入库存日志表
StorageLogDO storageLogDO = new StorageLogDO();
storageLogDO.setStockId(storageMatDO.getStockId());
storageLogDO.setMatId(storageMatDO.getMatId());
storageLogDO.setWhId(storageMatDO.getWhId());
storageLogDO.setRgId(storageMatDO.getRgId());
storageLogDO.setPnId(storageMatDO.getPnId());
storageLogDO.setStorageOkQty(storageMatDO.getStorageOkQty());
storageLogDO.setLotNo(storageMatDO.getLotNo());
storageLogDO.setStatus(2);
storageLogMapper.insert(storageLogDO);
}
}

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

@ -136,13 +136,13 @@
<el-table-column label="提交人" align="center" prop="keeper" min-width="120">
<template #default="scope">
{{ userList.find((user) => user.id == scope.row.keeper)?.nickname }}
{{ userList.find((user) => user.id == scope.row.outbound)?.nickname }}
</template>
</el-table-column>
<el-table-column
label="提交时间"
align="center"
prop="keeperTime"
prop="outboundTime"
:formatter="dateFormatter"
min-width="240"
/>

@ -365,6 +365,7 @@ const handleStatus = async (num) => {
}
//
await saveFormData()
await CheckApi.updateStorageCheckStatus(formData.value.id)
}else{
formData.value.cancel = useUserStore().getUser.id
const data = formData.value as unknown as CheckApi.StorageCheckVO
@ -378,7 +379,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){
if(formData.value.matItemDOList.filter(item =>item.matId == row.id && item.whId==row.whId && item.rgId == row.rgId && item.pnId== row.pnId).length==0){
row.matId = row.id
row.pnlist = ref([])
row.pnlist = pnList.value.filter(pn => pn.rg_id == row.rgId)
@ -391,7 +392,7 @@ const getList = async (arrMat) => {
matCount = matCount +1
}
});
formData.value.matItemDOList = arrMat
//formData.value.matItemDOList = arrMat
}
//
const handleCopy = (index, item) => {
@ -488,6 +489,7 @@ const saveFormData = async () => {
matUploadData.value.businessId = formData.value.id
matUploadRef.value!.submit()
}
message.success(t('common.updateSuccess'))
} finally {
formLoading.value = false
@ -561,6 +563,7 @@ const handlePn = async (pnid,scope) => {
}
var currentMatRest = await CheckApi.getStorageNowMatRest(scope.row.id,scope.row.pnId)
scope.row.matRest = currentMatRest
if(scope.row.storageOkQty == undefined || scope.row.storageOkQty == '') {scope.row.matSub =0}else{ scope.row.matSub = scope.row.storageOkQty-scope.row.matRest}
//-------------------
}
const handleSub = async (pNum,scope) => {
@ -609,7 +612,7 @@ const initStatus = async (status) =>{
ctrCancel.value = false
ctrDelete.value = true
btnSave.value= false
btnCancel.value = true
btnCancel.value = false
break
case 3:
ctrView.value = true

Loading…
Cancel
Save