| | |
| | | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; |
| | | import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi; |
| | | import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderRespVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpCustomerDO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO; |
| | | import cn.iocoder.yudao.module.erp.service.product.ErpProductService; |
| | | import cn.iocoder.yudao.module.erp.service.sale.ErpCustomerService; |
| | | import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOrderService; |
| | | import cn.iocoder.yudao.module.erp.service.stock.ErpStockService; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import cn.iocoder.yudao.module.mes.api.salesnotice.MesWmSalesNoticeApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | |
| | | @Resource |
| | | private ErpSaleOrderService saleOrderService; |
| | | @Resource |
| | | private ErpStockService stockService; |
| | | @Resource |
| | | private ErpProductService productService; |
| | | @Resource |
| | | private ErpCustomerService customerService; |
| | | private CrmCustomerApi customerApi; |
| | | |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private MesWmSalesNoticeApi salesNoticeApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "创建销售订单") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-out:create')") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:create')") |
| | | public CommonResult<Long> createSaleOrder(@Valid @RequestBody ErpSaleOrderSaveReqVO createReqVO) { |
| | | return success(saleOrderService.createSaleOrder(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "更新销售订单") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-out:update')") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:update')") |
| | | public CommonResult<Boolean> updateSaleOrder(@Valid @RequestBody ErpSaleOrderSaveReqVO updateReqVO) { |
| | | saleOrderService.updateSaleOrder(updateReqVO); |
| | | return success(true); |
| | |
| | | |
| | | @PutMapping("/update-status") |
| | | @Operation(summary = "更新销售订单的状态") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-out:update-status')") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:update-status')") |
| | | public CommonResult<Boolean> updateSaleOrderStatus(@RequestParam("id") Long id, |
| | | @RequestParam("status") Integer status) { |
| | | saleOrderService.updateSaleOrderStatus(id, status); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/cancel") |
| | | @Operation(summary = "作废销售订单") |
| | | @Parameter(name = "id", description = "编号", required = true) |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:cancel')") |
| | | public CommonResult<Boolean> cancelSaleOrder(@RequestParam("id") Long id) { |
| | | saleOrderService.cancelSaleOrder(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/enable") |
| | | @Operation(summary = "重新启用销售订单") |
| | | @Parameter(name = "id", description = "编号", required = true) |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:enable')") |
| | | public CommonResult<Boolean> enableSaleOrder(@RequestParam("id") Long id) { |
| | | saleOrderService.enableSaleOrder(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "删除销售订单") |
| | | @Parameter(name = "ids", description = "编号数组", required = true) |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-out:delete')") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:delete')") |
| | | public CommonResult<Boolean> deleteSaleOrder(@RequestParam("ids") List<Long> ids) { |
| | | saleOrderService.deleteSaleOrder(ids); |
| | | return success(true); |
| | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "获得销售订单") |
| | | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-out:query')") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:query')") |
| | | public CommonResult<ErpSaleOrderRespVO> getSaleOrder(@RequestParam("id") Long id) { |
| | | ErpSaleOrderDO saleOrder = saleOrderService.getSaleOrder(id); |
| | | if (saleOrder == null) { |
| | | return success(null); |
| | | } |
| | | List<ErpSaleOrderItemDO> saleOrderItemList = saleOrderService.getSaleOrderItemListByOrderId(id); |
| | | Map<Long, ErpProductRespVO> productMap = productService.getProductVOMap( |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductId)); |
| | | return success(BeanUtils.toBean(saleOrder, ErpSaleOrderRespVO.class, saleOrderVO -> |
| | | saleOrderVO.setItems(BeanUtils.toBean(saleOrderItemList, ErpSaleOrderRespVO.Item.class, item -> { |
| | | BigDecimal stockCount = stockService.getStockCount(item.getProductId()); |
| | | item.setStockCount(stockCount != null ? stockCount : BigDecimal.ZERO); |
| | | MapUtils.findAndThen(productMap, item.getProductId(), product -> item.setProductName(product.getName()) |
| | | .setProductBarCode(product.getBarCode()).setProductUnitName(product.getUnitName())); |
| | | // 库存信息暂不查询(仓储物流模块) |
| | | item.setStockCount(BigDecimal.ZERO); |
| | | MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName()) |
| | | .setProductBarCode(mdmItem.getBarCode())); |
| | | })))); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "获得销售订单分页") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-out:query')") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:query')") |
| | | public CommonResult<PageResult<ErpSaleOrderRespVO>> getSaleOrderPage(@Valid ErpSaleOrderPageReqVO pageReqVO) { |
| | | PageResult<ErpSaleOrderDO> pageResult = saleOrderService.getSaleOrderPage(pageReqVO); |
| | | return success(buildSaleOrderVOPageResult(pageResult)); |
| | |
| | | |
| | | @GetMapping("/export-excel") |
| | | @Operation(summary = "导出销售订单 Excel") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-out:export')") |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:export')") |
| | | @ApiAccessLog(operateType = EXPORT) |
| | | public void exportSaleOrderExcel(@Valid ErpSaleOrderPageReqVO pageReqVO, |
| | | HttpServletResponse response) throws IOException { |
| | |
| | | List<ErpSaleOrderItemDO> saleOrderItemList = saleOrderService.getSaleOrderItemListByOrderIds( |
| | | convertSet(pageResult.getList(), ErpSaleOrderDO::getId)); |
| | | Map<Long, List<ErpSaleOrderItemDO>> saleOrderItemMap = convertMultiMap(saleOrderItemList, ErpSaleOrderItemDO::getOrderId); |
| | | // 1.2 产品信息 |
| | | Map<Long, ErpProductRespVO> productMap = productService.getProductVOMap( |
| | | // 1.2 物料信息 |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductId)); |
| | | // 1.3 客户信息 |
| | | Map<Long, ErpCustomerDO> customerMap = customerService.getCustomerMap( |
| | | // 1.3 客户信息(使用 CRM 客户 API) |
| | | Map<Long, CrmCustomerRespDTO> customerMap = customerApi.getCustomerMap( |
| | | convertSet(pageResult.getList(), ErpSaleOrderDO::getCustomerId)); |
| | | // 1.4 管理员信息 |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| | | convertSet(pageResult.getList(), saleOrder -> Long.parseLong(saleOrder.getCreator()))); |
| | | // 1.5 发货通知单信息 |
| | | Map<Long, Boolean> salesNoticeMap = salesNoticeApi.checkSalesNoticeBySaleOrderIds( |
| | | convertSet(pageResult.getList(), ErpSaleOrderDO::getId)); |
| | | // 2. 开始拼接 |
| | | return BeanUtils.toBean(pageResult, ErpSaleOrderRespVO.class, saleOrder -> { |
| | | saleOrder.setItems(BeanUtils.toBean(saleOrderItemMap.get(saleOrder.getId()), ErpSaleOrderRespVO.Item.class, |
| | | item -> MapUtils.findAndThen(productMap, item.getProductId(), product -> item.setProductName(product.getName()) |
| | | .setProductBarCode(product.getBarCode()).setProductUnitName(product.getUnitName())))); |
| | | item -> MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName()) |
| | | .setProductBarCode(mdmItem.getBarCode())))); |
| | | saleOrder.setProductNames(CollUtil.join(saleOrder.getItems(), ",", ErpSaleOrderRespVO.Item::getProductName)); |
| | | MapUtils.findAndThen(customerMap, saleOrder.getCustomerId(), supplier -> saleOrder.setCustomerName(supplier.getName())); |
| | | MapUtils.findAndThen(userMap, Long.parseLong(saleOrder.getCreator()), user -> saleOrder.setCreatorName(user.getNickname())); |
| | | // 设置是否已生成发货通知单 |
| | | saleOrder.setHasSalesNotice(salesNoticeMap.getOrDefault(saleOrder.getId(), false)); |
| | | }); |
| | | } |
| | | |
| | | } |
| | | } |