diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/dto/CreateStockOutDTO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/dto/CreateStockOutDTO.java index 44c1985a..62788456 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/dto/CreateStockOutDTO.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/dto/CreateStockOutDTO.java @@ -33,4 +33,8 @@ public class CreateStockOutDTO { private List RDRecordDetails; private String Memo; + + private DepartmentDTO Department; + + } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/dto/DepartmentDTO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/dto/DepartmentDTO.java new file mode 100644 index 00000000..c3de9660 --- /dev/null +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/dto/DepartmentDTO.java @@ -0,0 +1,13 @@ +package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto; + + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class DepartmentDTO { + + private String code; + private String name; +} diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java index 94518c04..b56b3d1c 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java @@ -26,6 +26,7 @@ import com.chanko.yunxi.mes.module.biz.dal.dataobject.storage.StorageDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.storagemat.StorageMatDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.supplier.SupplierDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.systemparameters.SystemParametersDO; +import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.warehouse.WarehouseDO; @@ -38,6 +39,7 @@ import com.chanko.yunxi.mes.module.biz.dal.mysql.storage.StorageMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.supplier.SupplierMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.systemparameters.SystemParametersMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.taskdispatch.TaskDispatchDetailMapper; +import com.chanko.yunxi.mes.module.biz.dal.mysql.taskdispatch.TaskDispatchMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.taskreport.TaskReportMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.warehouse.WarehouseMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.workshop.WorkshopMapper; @@ -129,6 +131,9 @@ public class ChanjetManager { @Resource private HttpServletRequest request; + @Resource + private TaskDispatchMapper taskDispatchMapper; + private Boolean getSystemParameters(){ Boolean chanjet_switch = true; @@ -826,7 +831,7 @@ public class ChanjetManager { ProjectOrderSubDO subDO = new ProjectOrderSubDO(); BeanUtil.copyProperties(mList.get(0), subDO); -// subDO.setAmount(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum()); + subDO.setAmount(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum()); subDO.setOrderAmount(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum()); subDOList.add(subDO); }); @@ -837,28 +842,66 @@ public class ChanjetManager { // 根据销售订单的每个产品的BOM,找到物料编码为6开头的物料,原先的生成生产订单的逻辑不变,再另外生成一张生产订单 // voList 是订单中的产品列表 + List subJSDOList = new ArrayList<>(100); voList.stream().collect(Collectors.groupingBy(QuerySaleOrderListResDTO::getMaterialId)).forEach((mid, mList) -> { MaterialDO materialDO = materialMapper.selectById(mid); - saveSemiFinishedOrder(materialDO,saveReqVO,mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum()); + saveSemiFinishedOrder(materialDO,saveReqVO,mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum(),subJSDOList); }); + + // 保存订单产品信息 + if(!CollUtil.isEmpty(subJSDOList)) { + ProjectOrderDO newProjectOrderDO =BeanUtil.toBean(projectOrderMapper.selectById(saveReqVO.getId()),ProjectOrderDO.class); + String code = newProjectOrderDO.getCode()+"-挤塑"; + newProjectOrderDO.setId(null) + .setCode(code) + .setExternalCode(code) + .setStatus(ValidStatusEnum.VALID.getCode()) + .setOrderSource(ProjectOrderSourceEnum.INTERFACE.getCode()) + .setOrderStatus(ProjectOrderStatusEnum.SAVE.getCode()) + .setIsUrgency(YesOrNoEnum.N.getCode()); + + + + // 保存订单信息 + projectOrderMapper.insert(newProjectOrderDO); + + // 相同物料累计数量 + List subNewDOList = new ArrayList<>(100); + subJSDOList.stream().collect(Collectors.groupingBy(ProjectOrderSubDO::getMaterialId)).forEach((mid, mList) -> { + ProjectOrderSubDO subDO = new ProjectOrderSubDO(); + BeanUtil.copyProperties(mList.get(0), subDO); + + subDO.setProjectOrderId(newProjectOrderDO.getId()); + subDO.setAmount(mList.stream().mapToInt(ProjectOrderSubDO::getAmount).sum()); + subDO.setOrderAmount(mList.stream().mapToInt(ProjectOrderSubDO::getOrderAmount).sum()); + subNewDOList.add(subDO); + }); + projectOrderSubMapper.insertBatch(subNewDOList); + + // 手动记录日志 + operateLogFrameworkService.createOperateLog(request, + LocalDateTime.now(), + BusinessTypeEnum.PROJECT_ORDER.name(), + newProjectOrderDO.getId(), + OperateTypeEnum.valueOf(OperateTypeEnum.SAVE.name()).getType(), + ""); + } + + } }); } } @SneakyThrows - private void saveSemiFinishedOrder(MaterialDO materialDO,ProjectOrderSaveReqVO saveReqVO,Integer orderAmount){ + private void saveSemiFinishedOrder(MaterialDO materialDO,ProjectOrderSaveReqVO saveReqVO,Integer orderAmount,List subJSDOList){ + if(saveReqVO.getWarehouseId()==null) return; // 查询当前物料子件物料信息 List bomDataList = queryProcessBom(materialDO.getCode(),saveReqVO.getWarehouseId()); if(CollUtil.isNotEmpty(bomDataList) && bomDataList.stream().filter(mo->mo.getProjectSubCode()!=null && mo.getProjectSubCode().toString().startsWith("6")).count()>0){ List mat6 = bomDataList.stream().filter(mo->mo.getProjectSubCode()!=null && mo.getProjectSubCode().toString().startsWith("6")).collect(Collectors.toList()); - ProjectOrderDO newProjectOrderDO =BeanUtil.toBean(projectOrderMapper.selectById(saveReqVO.getId()),ProjectOrderDO.class); - - - List subDOList = new ArrayList<>(16); - mat6.forEach(mo->{ MaterialDO item = materialMapper.selectOne("code",mo.getProjectSubCode()); BigDecimal matAmount = new BigDecimal("0"); @@ -868,142 +911,20 @@ public class ChanjetManager { matAmount = mo.getRequiredQuantity().divide(mo.getProduceQuantity()).multiply(new BigDecimal(orderAmount)).subtract(mo.getStockQuantity()).add(item.getInvSafe()==null?new BigDecimal(0):item.getInvSafe()); } if(matAmount.intValue()>0){ - matAmount = mo.getRequiredQuantity().divide(mo.getProduceQuantity()).multiply(new BigDecimal(orderAmount)).add(mo.getStockQuantity()).subtract(item.getInvSafe()==null?new BigDecimal(0):item.getInvSafe()); ProjectOrderSubDO subDO = new ProjectOrderSubDO(); + subDO.setAmount(matAmount.intValue()); + matAmount = mo.getRequiredQuantity().divide(mo.getProduceQuantity()).multiply(new BigDecimal(orderAmount)); + subDO.setMaterialId(item.getId()) -// .setAmount(matAmount.intValue()) .setOrderAmount(matAmount.intValue()) .setWarehouseId(saveReqVO.getWarehouseId()); - subDOList.add(subDO); + subJSDOList.add(subDO); } - }); - // 保存订单产品信息 - if(!CollUtil.isEmpty(subDOList)) { - - String code = newProjectOrderDO.getCode()+"-挤塑"; - newProjectOrderDO.setId(null) - .setCode(code) - .setExternalCode(code) - .setStatus(ValidStatusEnum.VALID.getCode()) - .setOrderSource(ProjectOrderSourceEnum.INTERFACE.getCode()) - .setOrderStatus(ProjectOrderStatusEnum.SAVE.getCode()) - .setIsUrgency(YesOrNoEnum.N.getCode()); - - // 保存订单信息 - projectOrderMapper.insert(newProjectOrderDO); - subDOList.stream().forEach(vo->vo.setProjectOrderId(newProjectOrderDO.getId())); - projectOrderSubMapper.insertBatch(subDOList); - } - - // 手动记录日志 - operateLogFrameworkService.createOperateLog(request, - LocalDateTime.now(), - BusinessTypeEnum.PROJECT_ORDER.name(), - newProjectOrderDO.getId(), - OperateTypeEnum.valueOf(OperateTypeEnum.SAVE.name()).getType(), - ""); } } - @SneakyThrows - private void saveSemiFinishedProjectOrder(Long orderId, List subDOList){ - ProjectOrderDO newProjectOrderDO =BeanUtil.toBean(projectOrderMapper.selectById(orderId),ProjectOrderDO.class); - newProjectOrderDO.setId(null) - .setCode(newProjectOrderDO.getCode()+"-1") - .setStatus(ValidStatusEnum.VALID.getCode()) - .setOrderSource(ProjectOrderSourceEnum.INTERFACE.getCode()) - .setOrderStatus(ProjectOrderStatusEnum.SAVE.getCode()) - .setIsUrgency(YesOrNoEnum.N.getCode()); - - // 保存订单信息 - projectOrderMapper.insert(newProjectOrderDO); - - List queryMatList =subDOList.stream().filter(sub ->{ return sub.getMaterialId().toString().startsWith("6");}).collect(Collectors.toList()); - List matCodes = new ArrayList<>(); - queryMatList.forEach(mat->{ - MaterialDO materialDO = materialMapper.selectById(mat.getMaterialId()); - if(materialDO !=null){ - mat.setMaterialCode(materialDO.getCode()); - mat.setInvSafe(materialDO.getInvSafe()); - if(!matCodes.contains(mat.getMaterialCode())){ - matCodes.add(mat.getMaterialCode()); - } - } - }); - - // 查询当前物料的实时库存 - List stockCurrentDatas = queryStock(matCodes,newProjectOrderDO.getWarehouseId()); - List insertList = new ArrayList<>(16); - - for (QuerySaleOrderListResDTO o : queryMatList) { - Double matAmount = (double) 0; - if(insertList.stream().filter(uo -> uo.getMaterialCode().equals(o.getMaterialCode())).count()==0 - && materialMapper.selectById(o.getMaterialId())!=null){ - - ProjectOrderSubDO projectOrderSubDO = new ProjectOrderSubDO(); - projectOrderSubDO.setProjectOrderId(newProjectOrderDO.getId()).setMaterialId(o.getMaterialId()); - - if (!StringUtils.isEmpty(o.getMaterialCode())) { - // 查询当前物料子件物料信息 - CommonResult> bomDataList = - chanjetSpi.invokeRetList(QUERY_BOM, new QueryBomReqVO(new QueryBomReqVO.QueryBomDTO(o.getMaterialCode())), QueryBomResVO.class); - - // 子件生产数量 - AtomicReference produceQuantity = new AtomicReference<>(0d); - // 子件需求数量 - AtomicReference requiredQuantity = new AtomicReference<>(0d); - bomDataList.getData().get(0).getBOMChildDTOs().forEach(ch->{ - produceQuantity.updateAndGet(v -> v + ch.getProduceQuantity()); - requiredQuantity.updateAndGet(v -> v + ch.getRequiredQuantity()); - }); - - // 查询当前物料父件物料信息 - QueryBomReqVO queryBomReqVOAsChild = new QueryBomReqVO(new QueryBomReqVO.QueryBomDTO(null,o.getMaterialCode())); - CommonResult> result = - chanjetSpi.invokeRetList(QUERY_BOM, queryBomReqVOAsChild,QueryBomResVO.class); - - AtomicReference parantAmount = new AtomicReference<>(0); - - if(result!= null && result.getData()!=null) { - subDOList.stream().collect(Collectors.groupingBy(QuerySaleOrderListResDTO::getMaterialId)).forEach((mid, mList) -> { - if (mid.equals(result.getData().get(0).getID())){ - parantAmount.set(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum()); - } - }); - } - - QueryCurrentStockResVO currentStock = - stockCurrentDatas.stream().filter(stock->{ - return stock.getInventoryCode().equals(o.getMaterialCode()); - }).collect(Collectors.toList()).get(0); - - // 该物料的实时库存 - Integer availableQuantity = currentStock==null?0:new Integer(currentStock.getAvailableQuantity()); - - matAmount = (requiredQuantity.get()==0 ?0:produceQuantity.get()/requiredQuantity.get())*parantAmount.get()-availableQuantity+o.getInvSafe().doubleValue(); - - } - projectOrderSubDO.setAmount(matAmount.intValue()); - - insertList.add(projectOrderSubDO); - } - } - // 保存订单产品信息 - if(!CollUtil.isEmpty(insertList)) { - projectOrderSubMapper.insertBatch(insertList); - } - - // 手动记录日志 - operateLogFrameworkService.createOperateLog(request, - LocalDateTime.now(), - BusinessTypeEnum.PROJECT_ORDER.name(), - newProjectOrderDO.getId(), - OperateTypeEnum.valueOf(OperateTypeEnum.SAVE.name()).getType(), - ""); - } - /** * 查询bom * @@ -1312,12 +1233,17 @@ public class ChanjetManager { WarehouseDO aDo = warehouseMapper.selectById(storage.getWhId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne("code",storage.getHeaderNo()); + + WorkshopDO workshopDO =workshopMapper.selectById(taskDispatchDO.getWorkshopId()); + CreateStockOutDTO dto = new CreateStockOutDTO(); ArrayList detailList = new ArrayList<>(); dto.setExternalCode(storage.getStockNo()) .setVoucherDate(sdf.format(new Date())) .setRDRecordDetails(detailList) .setWarehouse(new Warehouse(aDo.getWhNo())) + .setDepartment(new DepartmentDTO().setCode(workshopDO.getCode()).setName(workshopDO.getName())) ; matList.forEach(mat -> {