From d789e0a9800a7c4adbf10d0011548de50592a30e Mon Sep 17 00:00:00 2001 From: siontion Date: Sat, 3 Feb 2024 22:39:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=93=E5=AD=98=E7=9B=98=E7=82=B9=20?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=90=8C=E6=AD=A5=20=E5=87=BA=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 库存盘点 日志同步 出入库数据同步 --- .../storagecheck/StorageCheckController.java | 21 +--- .../storagecheck/StorageCheckService.java | 1 + .../storagecheck/StorageCheckServiceImpl.java | 119 +++++++++++++++++- .../src/api/heli/storagecheck/index.ts | 5 + .../src/views/heli/storage/outdex.vue | 4 +- .../views/heli/storagecheck/checkdetail.vue | 9 +- 6 files changed, 132 insertions(+), 27 deletions(-) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagecheck/StorageCheckController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagecheck/StorageCheckController.java index cc8e8398..cc4c4be1 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagecheck/StorageCheckController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagecheck/StorageCheckController.java @@ -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 updateStorageCheckStatus(@Valid @RequestBody StorageCheckSaveReqVO updateReqVO) { - - // 提交按钮时记录相关操作人 - LocalDateTime currTime = LocalDateTime.now(); - // 已提交时间更新 - updateReqVO.setKeeperTime(currTime); - // 盘点信息保存 - storageCheckService.updateStorageCheck(updateReqVO); - - // 获取当前盘点下所有物料信息 - List matList = storageCheckMatService.getStorageMatListByCheckId(updateReqVO.getId()); - - // TODO保存物料列表信息 - - // TODO生成入库/出库单据 - - return success(true); + public CommonResult updateStorageCheckStatus(@RequestParam("checkId") Long checkId) { + return success(storageCheckService.createStorageByCheckInfo(checkId)); } @DeleteMapping("/delete") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckService.java index 7d48e76f..d92c3cc6 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckService.java @@ -53,5 +53,6 @@ public interface StorageCheckService { */ PageResult getStorageCheckPage(StorageCheckPageReqVO pageReqVO); + Boolean createStorageByCheckInfo(Long checkId); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckServiceImpl.java index 192e32ce..112a0a5f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagecheck/StorageCheckServiceImpl.java @@ -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 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 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); + } } diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/storagecheck/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/storagecheck/index.ts index 4f8e9c5e..e0b9a570 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/storagecheck/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/storagecheck/index.ts @@ -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 }) diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue index ff5b8b28..15fc7cbb 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue @@ -136,13 +136,13 @@ diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storagecheck/checkdetail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storagecheck/checkdetail.vue index f85b15ed..9c50fc0a 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storagecheck/checkdetail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storagecheck/checkdetail.vue @@ -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