| | |
| | | import cn.iocoder.yudao.module.crm.controller.admin.quotation.vo.CrmSaleQuotationSaveReqVO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.quotation.CrmSaleQuotationDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.quotation.CrmSaleQuotationProductDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| | | import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; |
| | | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| | | import cn.iocoder.yudao.module.crm.service.quotation.CrmSaleQuotationService; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | |
| | | import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | 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; |
| | |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | @Resource |
| | | private CrmCustomerService customerService; |
| | | @Resource |
| | | private CrmBusinessService businessService; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "创建销售报价单") |
| | |
| | | ExcelUtils.write(response, "销售报价单.xls", "数据", CrmSaleQuotationRespVO.class, list); |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "提交销售报价审批") |
| | | @PreAuthorize("@ss.hasPermission('crm:sale-quotation:submit')") |
| | | public CommonResult<Boolean> submitSaleQuotation(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | saleQuotationService.submitSaleQuotation(id, processDefinitionKey, getLoginUserId()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "获取销售报价审批流程列表") |
| | | @PreAuthorize("@ss.hasPermission('crm:sale-quotation:query')") |
| | | public CommonResult<List<Map<String, Object>>> getSaleQuotationApproveProcessList() { |
| | | return success(saleQuotationService.getSaleQuotationApproveProcessDefinitionList()); |
| | | } |
| | | |
| | | @PostMapping("/convert-contract") |
| | | @Operation(summary = "转为合同") |
| | | @Parameter(name = "id", description = "报价单编号", required = true) |
| | |
| | | // 1. 构建物料明细 |
| | | if (CollUtil.isNotEmpty(productList)) { |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(convertSet(productList, CrmSaleQuotationProductDO::getItemId)); |
| | | java.util.Set<Long> unitIds = new java.util.HashSet<>(convertSet(productList, CrmSaleQuotationProductDO::getItemUnitId)); |
| | | itemMap.values().forEach(item -> { |
| | | if (item.getUnitMeasureId2() != null) { |
| | | unitIds.add(item.getUnitMeasureId2()); |
| | | } |
| | | }); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMap = convertMap( |
| | | mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(productList, CrmSaleQuotationProductDO::getItemUnitId)).getCheckedData(), |
| | | mdmUnitMeasureApi.getUnitMeasureList(unitIds).getCheckedData(), |
| | | MdmUnitMeasureRespDTO::getId); |
| | | respVO.setItems(BeanUtils.toBean(productList, CrmSaleQuotationRespVO.Item.class, item -> { |
| | | MdmItemRespDTO mdmItem = itemMap.get(item.getItemId()); |
| | |
| | | item.setItemCode(mdmItem.getCode()); |
| | | item.setItemName(mdmItem.getName()); |
| | | item.setItemBarCode(mdmItem.getBarCode()); |
| | | item.setItemSpecification(mdmItem.getSpecification()); |
| | | item.setItemUnitId2(mdmItem.getUnitMeasureId2()); |
| | | item.setItemUnitId3(mdmItem.getUnitMeasureId3()); |
| | | } |
| | | MapUtils.findAndThen(unitMap, item.getItemUnitId(), unit -> item.setItemUnitName(unit.getName())); |
| | | MapUtils.findAndThen(unitMap, item.getItemUnitId2(), unit -> item.setItemUnitName2(unit.getName())); |
| | | MapUtils.findAndThen(unitMap, item.getItemUnitId3(), unit -> item.setItemUnitName3(unit.getName())); |
| | | })); |
| | | } |
| | | // 2. 填充关联信息 |
| | | // 2. 填充客户名称 |
| | | if (saleQuotation.getCustomerId() != null) { |
| | | CrmCustomerDO customer = customerService.getCustomer(saleQuotation.getCustomerId()); |
| | | if (customer != null) { |
| | | respVO.setCustomerName(customer.getName()); |
| | | } |
| | | } |
| | | // 2.1 填充商机名称 |
| | | if (saleQuotation.getBusinessId() != null) { |
| | | CrmBusinessDO business = businessService.getBusiness(saleQuotation.getBusinessId()); |
| | | if (business != null) { |
| | | respVO.setBusinessName(business.getName()); |
| | | } |
| | | } |
| | | // 3. 填充关联信息 |
| | | fillSaleQuotationRelatedFields(respVO); |
| | | // 4. 填充附件列表 |
| | | respVO.setAttachmentList(storageAttachmentApi.listAttachments("crm_sale_quotation", saleQuotation.getId())); |
| | | return respVO; |
| | | } |
| | | |
| | |
| | | Map<Long, List<CrmSaleQuotationProductDO>> productMap = convertMultiMap(productList, CrmSaleQuotationProductDO::getQuotationId); |
| | | // 1.2 物料信息 |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(convertSet(productList, CrmSaleQuotationProductDO::getItemId)); |
| | | // 1.3 用户信息 |
| | | java.util.Set<Long> unitIds = new java.util.HashSet<>(convertSet(productList, CrmSaleQuotationProductDO::getItemUnitId)); |
| | | itemMap.values().forEach(item -> { |
| | | if (item.getUnitMeasureId2() != null) { |
| | | unitIds.add(item.getUnitMeasureId2()); |
| | | } |
| | | }); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMap = convertMap( |
| | | mdmUnitMeasureApi.getUnitMeasureList(unitIds).getCheckedData(), |
| | | MdmUnitMeasureRespDTO::getId); |
| | | // 1.3 客户信息 |
| | | Map<Long, CrmCustomerDO> customerMap = customerService.getCustomerMap( |
| | | convertSet(pageResult.getList(), CrmSaleQuotationDO::getCustomerId)); |
| | | // 1.4 用户信息 |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| | | convertSet(pageResult.getList(), CrmSaleQuotationDO::getOwnerUserId)); |
| | | // 1.4 部门信息 |
| | | // 1.5 部门信息 |
| | | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap( |
| | | convertSet(pageResult.getList(), CrmSaleQuotationDO::getOwnerUserId)); |
| | | // 1.6 商机信息(过滤 null,businessId 为可选字段) |
| | | Map<Long, CrmBusinessDO> businessMap = businessService.getBusinessMap( |
| | | convertSet(pageResult.getList(), CrmSaleQuotationDO::getBusinessId, vo -> vo.getBusinessId() != null)); |
| | | |
| | | // 2. 开始拼接 |
| | | return BeanUtils.toBean(pageResult, CrmSaleQuotationRespVO.class, vo -> { |
| | | vo.setItems(BeanUtils.toBean(productMap.get(vo.getId()), CrmSaleQuotationRespVO.Item.class, |
| | | item -> MapUtils.findAndThen(itemMap, item.getItemId(), mdmItem -> item.setItemCode(mdmItem.getCode()) |
| | | .setItemName(mdmItem.getName()).setItemBarCode(mdmItem.getBarCode())))); |
| | | item -> { |
| | | MapUtils.findAndThen(itemMap, item.getItemId(), mdmItem -> item |
| | | .setItemCode(mdmItem.getCode()) |
| | | .setItemName(mdmItem.getName()) |
| | | .setItemBarCode(mdmItem.getBarCode()) |
| | | .setItemSpecification(mdmItem.getSpecification()) |
| | | .setItemUnitId2(mdmItem.getUnitMeasureId2()) |
| | | .setItemUnitId3(mdmItem.getUnitMeasureId3())); |
| | | MapUtils.findAndThen(unitMap, item.getItemUnitId(), unit -> item.setItemUnitName(unit.getName())); |
| | | MapUtils.findAndThen(unitMap, item.getItemUnitId2(), unit -> item.setItemUnitName2(unit.getName())); |
| | | MapUtils.findAndThen(unitMap, item.getItemUnitId3(), unit -> item.setItemUnitName3(unit.getName())); |
| | | })); |
| | | MapUtils.findAndThen(customerMap, vo.getCustomerId(), customer -> vo.setCustomerName(customer.getName())); |
| | | MapUtils.findAndThen(userMap, vo.getOwnerUserId(), user -> vo.setOwnerUserName(user.getNickname())); |
| | | MapUtils.findAndThen(deptMap, vo.getOwnerUserId(), dept -> vo.setOwnerUserDeptName(dept.getName())); |
| | | MapUtils.findAndThen(businessMap, vo.getBusinessId(), business -> vo.setBusinessName(business.getName())); |
| | | }); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |