diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/tplusstorageout/TplusStorageOutDO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/tplusstorageout/TplusStorageOutDO.java index 534793c1..2dd5aa4e 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/tplusstorageout/TplusStorageOutDO.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/tplusstorageout/TplusStorageOutDO.java @@ -106,5 +106,9 @@ public class TplusStorageOutDO extends BaseDO { * 仓库id */ private Long WhId; + /** + * 物料id + */ + private Long MatId; } \ No newline at end of file diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/storage/StorageServiceImpl.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/storage/StorageServiceImpl.java index 64cc389c..51872854 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/storage/StorageServiceImpl.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/storage/StorageServiceImpl.java @@ -50,6 +50,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.module.biz.enums.CodeEnum.STOCK_IN; @@ -225,6 +226,7 @@ public class StorageServiceImpl implements StorageService { .setProcedureName(to.getProcedureId()==null?null:procedureMapper.selectById(to.getProcedureId()).getName()) .setFixRatio(to.getRequiredQuantity().divide(to.getProduceQuantity())) .setUnit(materialMapper.selectOne(MaterialDO::getCode,to.getProjectSubCode()).getUnit()) + .setMatId(materialMapper.selectOne(MaterialDO::getCode,to.getProjectSubCode()).getId()) .setIsSend(0); insertList.add(tplusStorageOutDO); }else{ @@ -246,6 +248,7 @@ public class StorageServiceImpl implements StorageService { .setProcedureName(to.getProcedureId()==null?null:procedureMapper.selectById(to.getProcedureId()).getName()) .setFixRatio(to.getRequiredQuantity().divide(to.getProduceQuantity())) .setUnit(materialMapper.selectOne(MaterialDO::getCode,to.getProjectSubCode()).getUnit()) + .setMatId(materialMapper.selectOne(MaterialDO::getCode,to.getProjectSubCode()).getId()) .setIsSend(0); updateList.add(tplusStorageOutDO); } @@ -342,11 +345,60 @@ public class StorageServiceImpl implements StorageService { } private void saveTplusStockInDate(StorageDO storageDO,List storageMatDOS,List tplusStorageOutDOS){ -// if(CollUtil.isNotEmpty(tplusStorageOutDOS)){ -// tplusStorageOutDOS.stream().filter(ot->{ -// storageMatDOS.stream().anyMatch(mo->mo.getWhId().equals(ot.getWhId())) -// }); -// } + if(CollUtil.isNotEmpty(tplusStorageOutDOS)){ + List sameWhAndMats = tplusStorageOutDOS.stream().filter(ot->{ + return storageMatDOS.stream().anyMatch(mo -> mo.getWhId().equals(ot.getWhId()) && mo.getMatId().equals(ot.getMatId())); + }).collect(Collectors.toList()); + + if(CollUtil.isNotEmpty(sameWhAndMats)){ + sameWhAndMats.forEach(ko->{ + ko.setId(null); + ko.setStockId(storageDO.getId()).setStockCreateDate(storageDO.getOutboundTime()); + BigDecimal storageOkQtyIn = storageMatDOS.stream().filter(mo->mo.getMatId().equals(ko.getMatId())).collect(Collectors.toList()).get(0).getStorageOkQty(); + + final BigDecimal[] fixRatioAll = {new BigDecimal(0)}; + sameWhAndMats.stream().filter(so->so.getMatId().equals(ko.getMatId())).forEach(ro->{ + fixRatioAll[0] = fixRatioAll[0].add(ro.getFixRatio()); + }); + ko.setStorageOkQty(storageOkQtyIn.multiply(ko.getFixRatio().divide(fixRatioAll[0])).multiply(BigDecimal.valueOf(-1))); + }); + } + + storageMatDOS.forEach(sm->{ + if(!sameWhAndMats.stream().anyMatch(po->po.getMatId().equals(sm.getMatId()))){ + TplusStorageOutDO tplusStorageOutDO = new TplusStorageOutDO(); + tplusStorageOutDO.setStockId(storageDO.getId()); + tplusStorageOutDO.setStockCreateDate(storageDO.getOutboundTime()); + tplusStorageOutDO.setWhId(storageDO.getWhId()); + tplusStorageOutDO.setWhNo(warehouseMapper.selectById(storageDO.getWhId()).getWhNo()); + tplusStorageOutDO.setProjectSubCode(sm.getProjectSubCode()); + tplusStorageOutDO.setProjectSubName(materialMapper.selectOne(MaterialDO::getCode,sm.getProjectSubCode()).getName()); + tplusStorageOutDO.setMatId(materialMapper.selectOne(MaterialDO::getCode,sm.getProjectSubCode()).getId()); + tplusStorageOutDO.setStorageOkQty(sm.getStorageOkQty().multiply(new BigDecimal(-1))); + sameWhAndMats.add(tplusStorageOutDO); + } + }); + + tplusStorageOutMapper.delete(TplusStorageOutDO::getStockId,storageDO.getId()); + tplusStorageOutMapper.insertBatch(sameWhAndMats); + + }else{ + List insertWhAndMats = new ArrayList<>(); + storageMatDOS.forEach(sm->{ + TplusStorageOutDO tplusStorageOutDO = new TplusStorageOutDO(); + tplusStorageOutDO.setStockId(storageDO.getId()); + tplusStorageOutDO.setStockCreateDate(storageDO.getOutboundTime()); + tplusStorageOutDO.setWhId(storageDO.getWhId()); + tplusStorageOutDO.setWhNo(warehouseMapper.selectById(storageDO.getWhId()).getWhNo()); + tplusStorageOutDO.setProjectSubCode(sm.getProjectSubCode()); + tplusStorageOutDO.setProjectSubName(materialMapper.selectOne(MaterialDO::getCode,sm.getProjectSubCode()).getName()); + tplusStorageOutDO.setMatId(materialMapper.selectOne(MaterialDO::getCode,sm.getProjectSubCode()).getId()); + tplusStorageOutDO.setStorageOkQty(sm.getStorageOkQty().multiply(new BigDecimal(-1))); + insertWhAndMats.add(tplusStorageOutDO); + }); + tplusStorageOutMapper.delete(TplusStorageOutDO::getStockId,storageDO.getId()); + tplusStorageOutMapper.insertBatch(insertWhAndMats); + } } private Date getLastDayOfMonth(Date date) { diff --git a/sql/v1.0.0/2.business/1.structure.sql b/sql/v1.0.0/2.business/1.structure.sql index 085fed3b..bc662921 100644 --- a/sql/v1.0.0/2.business/1.structure.sql +++ b/sql/v1.0.0/2.business/1.structure.sql @@ -505,6 +505,7 @@ CREATE TABLE `tplus_storage_out` ( `fix_ratio` decimal(10,2) DEFAULT NULL COMMENT '定额', `unit` varchar(255) DEFAULT NULL COMMENT '领料单位', `wh_id` bigint(20) DEFAULT NULL COMMENT '仓库id', + `mat_id` bigint(20) DEFAULT NULL COMMENT '物料id', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='用友生产领料表';