From daa7151a83c06431f43e93151675a833e77e8118 Mon Sep 17 00:00:00 2001 From: zhangzq Date: Tue, 14 Jul 2026 20:42:54 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=B7=BB=E5=8A=A0=E8=B0=83=E6=8B=A8?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=87=BA=E5=BA=93=E4=B8=8B=E6=8E=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20fix:=E4=BF=AE=E5=A4=8Dsys=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=90=8D=E7=A7=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/GlobalExceptionHandler.java | 2 + .../controller/PurchaseController.java | 6 + .../purchase/service/PurchaseService.java | 1 + .../purchase/service/dto/PurchaseDto.java | 8 +- .../service/impl/PurchaseServiceImpl.java | 91 +++++++++- .../service/menu/dao/mapper/SysMenuMapper.xml | 3 +- .../service/menu/impl/SysMenuServiceImpl.java | 117 +++++++----- nladmin-ui/src/store/modules/permission.js | 7 +- nladmin-ui/src/views/system/menu/dd/index.vue | 6 +- nladmin-ui/src/views/system/menu/index.vue | 170 ++++++++++++++---- .../wms/pm_manage/allocationOut/index.vue | 38 +++- .../wms/pm_manage/allocationOut/purchase.js | 9 +- .../src/views/wms/pm_manage/demand/index.vue | 7 +- .../views/wms/pm_manage/otherOut/index.vue | 31 ++++ 14 files changed, 394 insertions(+), 102 deletions(-) diff --git a/nladmin-system/wms-server/src/main/java/org/nl/common/exception/handler/GlobalExceptionHandler.java b/nladmin-system/wms-server/src/main/java/org/nl/common/exception/handler/GlobalExceptionHandler.java index cfe99bb..d133d97 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/common/exception/handler/GlobalExceptionHandler.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/common/exception/handler/GlobalExceptionHandler.java @@ -38,6 +38,7 @@ public class GlobalExceptionHandler { */ @ExceptionHandler(Throwable.class) public ResponseEntity handleException(Throwable e) { + e.printStackTrace(); return ResponseData.error(e.getMessage()); } @@ -57,6 +58,7 @@ public class GlobalExceptionHandler { */ @ExceptionHandler(value = BadRequestException.class) public ResponseEntity badRequestException(BadRequestException e) { + e.printStackTrace(); return ResponseData.error(e.getMessage()); } } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/controller/PurchaseController.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/controller/PurchaseController.java index 1a78986..1fb3505 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/controller/PurchaseController.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/controller/PurchaseController.java @@ -81,4 +81,10 @@ public class PurchaseController { public ResponseEntity pushZD(@RequestBody BillChangeDto billChangeDto){ return wmsToZDWmdService.syncPurchaseReceiving(billChangeDto); } + @PostMapping("/outPush") + @Log("下推出库单") + public ResponseEntity outPush(@RequestBody PurchaseDto purchaseDto){ + purchaseService.pushPurchase(purchaseDto); + return ResponseData.build(); + } } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/PurchaseService.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/PurchaseService.java index 9ae7402..eeec1c7 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/PurchaseService.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/PurchaseService.java @@ -35,4 +35,5 @@ public interface PurchaseService extends IService { void print(Set ids); List selectPdaInMat(HashMap of); + void pushPurchase(PurchaseDto purchaseDto); } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/dto/PurchaseDto.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/dto/PurchaseDto.java index d4c5544..91cf6ef 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/dto/PurchaseDto.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/dto/PurchaseDto.java @@ -1,5 +1,7 @@ package org.nl.wms.pm_manage.purchase.service.dto; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; @@ -24,9 +26,11 @@ public class PurchaseDto implements Serializable { private String supplier_name; private String creator; - + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date create_time; - + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date modify_date; private Integer status; diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/impl/PurchaseServiceImpl.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/impl/PurchaseServiceImpl.java index cecf584..e86b8fb 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/impl/PurchaseServiceImpl.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/purchase/service/impl/PurchaseServiceImpl.java @@ -1,11 +1,13 @@ package org.nl.wms.pm_manage.purchase.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,9 +15,13 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; +import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; +import org.nl.wms.ext_manage.enums.EXTConstant; import org.nl.wms.ext_manage.purchase.service.dto.EasAuditRequestDto; import org.nl.wms.ext_manage.service.WmsToErpService; import org.nl.wms.pda_manage.ios_manage.purchase.service.vo.PurchaseMatInfoVo; +import org.nl.wms.pm_manage.SourceBillTypeEnum; import org.nl.wms.pm_manage.purchase.service.PurchaseService; import org.nl.wms.pm_manage.purchase.service.dao.Purchasedtl; import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst; @@ -25,15 +31,20 @@ import org.nl.wms.pm_manage.purchase.service.dto.PurchaseDto; import org.nl.wms.pm_manage.purchase.service.vo.PurchasemstListVo; import org.nl.common.utils.ZplUtil; import org.nl.wms.system_manage.service.param.ISysParamService; +import org.nl.wms.system_manage.service.param.dao.Param; import org.nl.wms.warehouse_manage.enums.IOSEnum; +import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService; import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService; import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn; import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; @Slf4j @Service @@ -52,7 +63,10 @@ public class PurchaseServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) { @@ -227,4 +241,79 @@ public class PurchaseServiceImpl extends ServiceImpl selectPdaInMat(HashMap of) { return purchasemstMapper.selectPdaInMat(of); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void pushPurchase(PurchaseDto purchaseDto) { + if (purchaseDto == null) { + throw new BadRequestException("下推失败,下推出库单不能为空"); + } + if (IOSEnum.BILL_STATUS.code("完成").equals(purchaseDto.getBill_status())) { + throw new BadRequestException("下推失败,单据状态已经完成"); + } + final List purchasedtls = this.selectListByBillId(purchaseDto.getBill_id()); + if (CollectionUtils.isEmpty(purchasedtls)){ + throw new BadRequestException("下推失败,单据明细数据不存在"); + } + Map> detailsByHouse = purchasedtls.stream() + .peek(detail -> { + if (ObjectUtil.isEmpty(detail.getHouse_code())) { + throw new BadRequestException("下推失败,物料" + detail.getSku_code() + "的仓库编码不能为空"); + } + }) + .collect(Collectors.groupingBy(Purchasedtl::getHouse_code)); + + for (Map.Entry> entry : detailsByHouse.entrySet()) { + iOutBillService.saveBill(convertPurchaseToOutBillParam(purchaseDto, entry.getKey(), entry.getValue())); + } + this.update(new LambdaUpdateWrapper() + .set(Purchasemst::getBill_status,IOSEnum.BILL_STATUS.code("分配完")) + .eq(Purchasemst::getId,purchaseDto.getId())); + } + + private JSONObject convertPurchaseToOutBillParam(PurchaseDto purchase, String houseCode, + List details) { + List materialCodes = details.stream() + .map(Purchasedtl::getSku_code) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + List materials = iMdMeMaterialbaseService.list( + new LambdaQueryWrapper() + .in(MdMeMaterialbase::getMaterial_code, materialCodes) + .select(MdMeMaterialbase::getMaterial_id, MdMeMaterialbase::getMaterial_code, + MdMeMaterialbase::getQty_unit_id)); + Map materialsByCode = materials.stream() + .collect(Collectors.toMap(MdMeMaterialbase::getMaterial_code, Function.identity())); + + List tableData = new ArrayList<>(); + for (Purchasedtl detail : details) { + MdMeMaterialbase material = materialsByCode.get(detail.getSku_code()); + if (material == null) { + throw new BadRequestException("下推失败,物料" + detail.getSku_code() + "在WMS中不存在"); + } + + JSONObject row = new JSONObject(); + row.put("material_id", material.getMaterial_id()); + row.put("material_code", detail.getSku_code()); + row.put("qty_unit_id", material.getQty_unit_id()); + row.put("qty_unit_name", detail.getUnit()); + row.put("qty", detail.getQty()); + row.put("pcsn", detail.getBatch_no()); + row.put("source_bill_code", purchase.getBill_id()); + row.put("source_bill_type", SourceBillTypeEnum.PM_PURCHASE.getBillType()); + row.put("source_billdtl_id", detail.getItem_no()); + row.put("callback_strategy", "DealPurchaseRecBillCallback"); + row.put("remark", "关联采购单:" + purchase.getOrder_no()); + tableData.add(row); + } + + JSONObject billParam = new JSONObject(); + billParam.put("stor_code", houseCode); + billParam.put("biz_date", DateUtil.today()); + billParam.put("bill_type", IOSEnum.BILL_TYPE.code("生产出库")); + billParam.put("remark", "采购单下推生成,采购单号:" + purchase.getOrder_no()); + billParam.put("tableData", tableData); + return billParam; + } } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/dao/mapper/SysMenuMapper.xml b/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/dao/mapper/SysMenuMapper.xml index 6184a9d..0ba7efe 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/dao/mapper/SysMenuMapper.xml +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/dao/mapper/SysMenuMapper.xml @@ -57,8 +57,7 @@ FROM sys_menu WHERE - type != '2' - and system_type = #{systemType} + system_type = #{systemType} and menu_id IN ( SELECT diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java index a151b3b..47e342f 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,11 @@ import java.util.stream.Collectors; @Slf4j public class SysMenuServiceImpl extends ServiceImpl implements ISysMenuService { + private static final String MENU_TYPE_SYSTEM = "1"; + private static final String MENU_TYPE_DIRECTORY = "2"; + private static final String MENU_TYPE_MENU = "3"; + private static final String MENU_TYPE_BUTTON = "4"; + @Autowired private SysMenuMapper baseMapper; @@ -129,7 +135,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl resources.setPid(null); addSystemTypeDict(resources); } - + if (MENU_TYPE_DIRECTORY.equals(resources.getType())){ + resources.setComponent("ParentView"); + } baseMapper.insert(resources); // 计算子节点数目 resources.setSub_count(0); @@ -240,8 +248,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl updateSubCnt(oldPid); updateSubCnt(newPid); //更新SystemType - if (!resources.getSystem_type().equals(menu.getSystem_type())){ - this.update(new UpdateWrapper().set(DictConstantPool.DICT_SYS_CODE,resources.getSystem_type()).in("menu_id",allChildIds)); + if (!resources.getSystem_type().equals(menu.getSystem_type()) && !CollectionUtils.isEmpty(allChildIds)){ + this.update(new LambdaUpdateWrapper() + .set(SysMenu::getSystem_type,resources.getSystem_type()) + .in(SysMenu::getMenu_id,allChildIds)); } } @@ -394,6 +404,27 @@ public class SysMenuServiceImpl extends ServiceImpl impl return menuDto; } + private boolean isDirectoryType(MenuDto menuDTO) { + return MENU_TYPE_DIRECTORY.equals(menuDTO.getType()); + } + + private boolean isRootMenu(MenuDto menuDTO, String rootPid) { + return rootPid.equals(menuDTO.getPid()); + } + + private String resolveRouteComponent(MenuDto menuDTO, String rootPid) { + if (menuDTO.getIframe()) { + return null; + } + if (isRootMenu(menuDTO, rootPid)) { + return StrUtil.isEmpty(menuDTO.getComponent()) ? "Layout" : menuDTO.getComponent(); + } + if (isDirectoryType(menuDTO)) { + return StrUtil.isEmpty(menuDTO.getComponent()) ? "ParentView" : menuDTO.getComponent(); + } + return StrUtil.isEmpty(menuDTO.getComponent()) ? null : menuDTO.getComponent(); + } + @Override public List buildMenus(String systemType) { Dict dict = sysDictMapper.selectOne(new QueryWrapper().eq("code", DictConstantPool.DICT_SYS_CODE).eq("value", systemType)); @@ -412,54 +443,44 @@ public class SysMenuServiceImpl extends ServiceImpl impl public List buildMenus(List menuDtos, String pid) { List list = new LinkedList<>(); String lang = LocaleContextHolder.getLocale().getLanguage(); - //剔除系统级菜单 menuDtos.forEach(menuDTO -> { - if (menuDTO != null) { - List menuDtoList = menuDTO.getChildren(); - MenuVo menuVo = new MenuVo(); - menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponent_name()) ? menuDTO.getComponent_name() : menuDTO.getLocalTitle(lang)); - // 一级目录需要加斜杠,不然会报警告 - menuVo.setPath(pid.equals(menuDTO.getPid())? "/" + menuDTO.getPath() : menuDTO.getPath()); - menuVo.setHidden(menuDTO.getHidden()); - // 如果不是外链 - if (!menuDTO.getIframe()) { - if (pid.equals(menuDTO.getPid())) { - menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "Layout" : menuDTO.getComponent()); - } else if (!pid.equals(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { - menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "ParentView" : menuDTO.getComponent()); + if (menuDTO != null) { + List menuDtoList = menuDTO.getChildren(); + MenuVo menuVo = new MenuVo(); + menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponent_name()) ? menuDTO.getComponent_name() : menuDTO.getLocalTitle(lang)); + menuVo.setPath(isRootMenu(menuDTO, pid) ? "/" + menuDTO.getPath() : menuDTO.getPath()); + menuVo.setHidden(menuDTO.getHidden()); - } else if (!StrUtil.isEmpty(menuDTO.getComponent())) { - menuVo.setComponent(menuDTO.getComponent()); - } - } - menuVo.setMeta(new MenuMetaVo(menuDTO.getLocalTitle(lang), menuDTO.getIcon(), !menuDTO.getCache())); - if (menuDtoList != null && menuDtoList.size() != 0) { - menuVo.setAlwaysShow(true); - menuVo.setRedirect("noredirect"); - menuVo.setChildren(buildMenus(menuDtoList,pid)); - // 处理是一级菜单并且没有子菜单的情况 - } else if (StrUtil.isEmpty(menuDTO.getPid())) { - MenuVo menuVo1 = new MenuVo(); - menuVo1.setMeta(menuVo.getMeta()); - // 非外链 - if (!menuDTO.getIframe()) { - menuVo1.setPath("index"); - menuVo1.setName(menuVo.getName()); - menuVo1.setComponent(menuVo.getComponent()); - } else { - menuVo1.setPath(menuDTO.getPath()); - } - menuVo.setName(null); - menuVo.setMeta(null); - menuVo.setComponent("Layout"); - List list1 = new ArrayList<>(); - list1.add(menuVo1); - menuVo.setChildren(list1); - } - list.add(menuVo); - } + String routeComponent = resolveRouteComponent(menuDTO, pid); + if (StrUtil.isNotEmpty(routeComponent)) { + menuVo.setComponent(routeComponent); } - ); + + menuVo.setMeta(new MenuMetaVo(menuDTO.getLocalTitle(lang), menuDTO.getIcon(), !menuDTO.getCache())); + if (menuDtoList != null && menuDtoList.size() != 0) { + menuVo.setAlwaysShow(true); + menuVo.setRedirect("noredirect"); + menuVo.setChildren(buildMenus(menuDtoList, pid)); + } else if (StrUtil.isEmpty(menuDTO.getPid())) { + MenuVo menuVo1 = new MenuVo(); + menuVo1.setMeta(menuVo.getMeta()); + if (!menuDTO.getIframe()) { + menuVo1.setPath("index"); + menuVo1.setName(menuVo.getName()); + menuVo1.setComponent(menuVo.getComponent()); + } else { + menuVo1.setPath(menuDTO.getPath()); + } + menuVo.setName(null); + menuVo.setMeta(null); + menuVo.setComponent("Layout"); + List list1 = new ArrayList<>(); + list1.add(menuVo1); + menuVo.setChildren(list1); + } + list.add(menuVo); + } + }); return list; } diff --git a/nladmin-ui/src/store/modules/permission.js b/nladmin-ui/src/store/modules/permission.js index 94efb99..8b54bb5 100644 --- a/nladmin-ui/src/store/modules/permission.js +++ b/nladmin-ui/src/store/modules/permission.js @@ -2,6 +2,8 @@ import { constantRouterMap } from '@/router/routers' import Layout from '@/layout/index' import ParentView from '@/components/ParentView' +const MENU_TYPE_DIRECTORY = '2' + const permission = { state: { routers: constantRouterMap, @@ -42,6 +44,7 @@ export const filterAsyncRouter = (routers, lastRouter = false, type = false) => if (type && router.children) { router.children = filterChildren(router.children) } + const hasChildren = router.children != null && router.children && router.children.length if (router.component) { if (router.component === 'Layout') { // Layout组件特殊处理 router.component = Layout @@ -51,8 +54,10 @@ export const filterAsyncRouter = (routers, lastRouter = false, type = false) => const component = router.component router.component = loadView(component) } + } else if (hasChildren && router.type === MENU_TYPE_DIRECTORY) { + router.component = ParentView } - if (router.children != null && router.children && router.children.length) { + if (hasChildren) { router.children = filterAsyncRouter(router.children, router, type) } else { delete router['children'] diff --git a/nladmin-ui/src/views/system/menu/dd/index.vue b/nladmin-ui/src/views/system/menu/dd/index.vue index 9243d26..4f94817 100644 --- a/nladmin-ui/src/views/system/menu/dd/index.vue +++ b/nladmin-ui/src/views/system/menu/dd/index.vue @@ -80,13 +80,13 @@ placeholder="菜单标题" /> - + - + @@ -101,7 +101,7 @@ - + diff --git a/nladmin-ui/src/views/system/menu/index.vue b/nladmin-ui/src/views/system/menu/index.vue index e0eb2b6..e10f4e8 100644 --- a/nladmin-ui/src/views/system/menu/index.vue +++ b/nladmin-ui/src/views/system/menu/index.vue @@ -38,16 +38,16 @@ :title="crud.status.title" :width="computedLabelWidth" > - + {{ $t('menu.dialog.system') }} {{ $t('menu.dialog.catalogue') }} {{ $t('menu.dialog.menu') }} - {{ $t('menu.dialog.button') }} + - + - + {{ $t('common.Yes') }} {{ $t('common.No') }} - + {{ $t('common.Yes') }} {{ $t('common.No') }} - + {{ $t('common.Yes') }} {{ $t('common.No') }} - + - + - + - + - + - + - + @@ -131,10 +131,10 @@ style="width: 190px;" /> - + - + @@ -170,7 +170,7 @@ @selection-change="crud.selectionChangeHandler" > - +