From 9de08eb20729c889dc6ae3951f2198b3fbdd2d9a Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Fri, 3 Jan 2025 15:03:50 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E5=8A=9E?= =?UTF-8?q?=E7=90=86=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bussalesorder/BusSalesOrderService.java | 322 +++++++++++++++++- 1 file changed, 317 insertions(+), 5 deletions(-) diff --git a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java index 805ba6d57d..3493bf2437 100644 --- a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java +++ b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java @@ -5484,7 +5484,7 @@ public class BusSalesOrderService extends MybatisBaseService variables = getOrderMap(busSalesOrder); @@ -5898,6 +5899,9 @@ public class BusSalesOrderService extends MybatisBaseService variables = getOrderMap(busSalesOrder); + bv.setFormVariables(variables); + bv.setOrgSidPath(busSalesOrder.getOrgSidPath()); + //流程定义id + bv.setModelId(busSalesOrder.getProcDefId()); + if (bv.getTaskId().equals(busSalesOrder.getTaskId())) { + ResultBean resultBean = flowFeign.handleProsess(bv); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = resultBean.getData(); + updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); + busSalesOrder = fetchBySid(bv.getBusinessSid()); + //极光推送 + if (!"Event_end".equals(resultBean.getData().getTaskDefKey())) { + if (!isTrue) { // 重新提交 + handleSalesOrderType(busSalesOrder); + } + // 异步推送消息 + asyncPushMessage(busSalesOrder, variables, ufVo); + } else { + try { + //查询销售订单详情 + ResultBean details = getSaleOrderDetails(bv.getBusinessSid()); + AppOrderDetailsVo vo = details.getData(); + + // 锁定车辆的状态 + if (BusSalesOrderConstantUtils.TypeEnum.EXISTING_CAR.getRemarks().equals(vo.getOrderType())) { + handleVehicleLock(bv, busSalesOrder); + } + + // 合同处理 + handleContract(bv, busSalesOrder); + busSalesOrder = fetchBySid(bv.getBusinessSid()); + // 处理车辆的状态更新 + updateVehicleState(bv, busSalesOrder); + + // 贷款相关操作 + handleLoan(bv, busSalesOrder, vo); + + // 采购渠道推送 + handlePurchaseChannelPush(busSalesOrder); + + // 更新办结日期 + updateClosingDate(bv, busSalesOrder); + + // 异步消息推送 + asyncPushMessage(busSalesOrder); + } catch (Exception e) { + log.error("销售订单处理失败,错误信息:", e); + } + + } + long endTime = System.currentTimeMillis(); // 记录结束时间 + long duration = endTime - startTime; // 计算耗时 + log.info("销售订单办理接口耗时 {} ms", duration); // 输出日志 + return rb.success().setData(resultBean.getData()); + } else { + return rb.setMsg("操作失败!提交的数据不一致"); + } + + } + + private void handleSalesOrderType(BusSalesOrder busSalesOrder) { + if (BusSalesOrderConstantUtils.TypeEnum.EXISTING_CAR.getCode().equals(busSalesOrder.getType())) { + // 更新已选择的车架号的状态为审批中 + updateVehicleStatusToUnderApproval(busSalesOrder); + } + + if (BusSalesOrderConstantUtils.TypeEnum.PURCHASE_ORDER.getCode().equals(busSalesOrder.getType())) { + // 更新采购订单的锁定台数 + updatePurchaseOrderLockCount(busSalesOrder); + } + } + + private void updateVehicleStatusToUnderApproval(BusSalesOrder busSalesOrder) { + List vehicleSids = busSalesOrderVehicleService.selectVehicleSid(busSalesOrder.getSid()); + + if (vehicleSids != null && !vehicleSids.isEmpty()) { + BusMainDepositUpdateQuery updateQuery = new BusMainDepositUpdateQuery(); + updateQuery.setVinSidList(vehicleSids); + updateQuery.setLockedState(VehicleState.LockEnum.CONDUCT_LOCK.getCode()); + updateQuery.setLockedStateValue(VehicleState.LockEnum.CONDUCT_LOCK.getRemarks()); + // 执行批量更新车辆状态 + baseVehicleFeign.updateMainDepositByVinNo(updateQuery); + } + } + + private void updatePurchaseOrderLockCount(BusSalesOrder busSalesOrder) { + List orderDetails = busSalesVehicleOrderService.detailsList(busSalesOrder.getSid()); + + if (orderDetails != null && !orderDetails.isEmpty()) { + Map linkSidToCountMap = new HashMap<>(); + + for (BusSalesVehicleOrderDetailsVo details : orderDetails) { + String linkSid = details.getLinkSid(); + if (!linkSidToCountMap.containsKey(linkSid)) { + // 查询该采购订单的已使用台数 + int count = busSalesVehicleOrderService.selectByLinkSid1(linkSid); + linkSidToCountMap.put(linkSid, count); + } + int count = linkSidToCountMap.get(linkSid); + // 更新该采购订单的锁定台数 + busVehicleOrderFeign.updateLockNum(linkSid, String.valueOf(count)); + } + } + } + + private void asyncPushMessage(BusSalesOrder busSalesOrder, Map variables, UpdateFlowFieldVo ufVo) { + try { + // 异步执行消息推送 + CompletableFuture.runAsync(() -> { + // 创建消息推送对象 + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + ufVo.setProcInsId(busSalesOrder.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap((Map) variables.get("app")); + messageFlowableQuery.setBusinessSid(busSalesOrder.getSid()); + messageFlowableQuery.setModuleName("销售订单申请"); + messageFlowableQuery.setMsgContent(busSalesOrder.getStaffName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("销售订单"); + + // 推送消息 + ResultBean pushResult = messageFeign.pushMessage(messageFlowableQuery); + if (pushResult == null || !pushResult.getSuccess()) { + log.error("消息推送失败,订单sid: {}", busSalesOrder.getSid()); + } + }); + } catch (Exception e) { + log.error("异步推送消息时发生异常", e); + } + } + + private void handleVehicleLock(BusinessVariables bv, BusSalesOrder busSalesOrder) { + if (StringUtils.isBlank(busSalesOrder.getNowCarUnknownVinNum()) || "0".equals(busSalesOrder.getNowCarUnknownVinNum())) { + //更新已选择的车架号的状态为销售订单锁定 + List list = busSalesOrderVehicleService.selectVehicleSid(bv.getBusinessSid()); + list = list.stream().filter(Objects::nonNull).collect(Collectors.toList()); + if (!list.isEmpty()) { + BusMainDepositUpdateQuery query = new BusMainDepositUpdateQuery(); + query.setVinSidList(list); + query.setLockedState(VehicleState.LockEnum.ORDER_LOCK.getCode()); + query.setLockedStateValue(VehicleState.LockEnum.ORDER_LOCK.getRemarks()); + baseVehicleFeign.updateMainDepositByVinNo(query); + } + } + } + + private void handleContract(BusinessVariables bv, BusSalesOrder busSalesOrder) { + if (StringUtils.isBlank(busSalesOrder.getContractNo())) { + OrderContractQuery orderContractQuery = new OrderContractQuery(); + orderContractQuery.setSid(bv.getBusinessSid()); + orderContractQuery.setUserSid(busSalesOrder.getCreateBySid()); + saveContract(orderContractQuery); + } else { + updateNo(bv.getBusinessSid(), busSalesOrder.getContractNo()); + } + } + + private void updateVehicleState(BusinessVariables bv, BusSalesOrder busSalesOrder) { + List vehicleList = busSalesOrderVehicleService.selectListByOrderSid(bv.getBusinessSid()); + vehicleList = vehicleList.stream().filter(Objects::nonNull).collect(Collectors.toList()); + + if (!vehicleList.isEmpty()) { + // 使用批量更新 + List dtoList = vehicleList.stream() + .map(vehicle -> createVehicleStateDto(vehicle, busSalesOrder)) + .collect(Collectors.toList()); + + // 批量更新车辆状态 + baseVehicleStateFeign.saveOrUpdate(dtoList); + } + } + + private BaseVehicleStateDto createVehicleStateDto(BusSalesOrderVehicle v, BusSalesOrder busSalesOrder) { + BaseVehicleStateDto dto = new BaseVehicleStateDto(); + dto.setOperateType(BaseVehicleStateEnum.OperateTypeEnum.DDBA_PASS.getTypeKey()); + if (StringUtils.isNotBlank(v.getLinkSid())) { + dto.setVinSid(v.getLinkSid()); + dto.setVinNo(v.getLinkNo()); + } + dto.setSaleOrderSid(v.getSalesOrderSid()); + dto.setBusSid(v.getSid()); + dto.setSaleTypeKey(busSalesOrder.getPayTypeKey()); + + if ("2".equals(busSalesOrder.getPayTypeKey())) {//贷款 + SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(busSalesOrder.getSid()).getData(); + if (loanSolutions != null) { + //4担保、3自营非担保 + dto.setFinSourceKey(StringUtils.isBlank(loanSolutions.getTypeKey()) ? "4" : "3"); + } + } else { + if ("2".equals(busSalesOrder.getFinancePlan())) { + dto.setFinSourceKey(busSalesOrder.getFinancePlan()); + SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(busSalesOrder.getSid()).getData(); + if (loanSolutions != null) { + //2三方金融、3自营非担保 + dto.setFinSourceKey(StringUtils.isNotBlank(loanSolutions.getTypeKey()) ? "3" : "2"); + } + } else { + dto.setFinSourceKey(busSalesOrder.getFinancePlan()); + } + } + + return dto; + } + + private void handleLoan(BusinessVariables bv, BusSalesOrder busSalesOrder, AppOrderDetailsVo vo) { + if ("2".equals(busSalesOrder.getPayTypeKey())) {//贷款 + ResultBean solutionsDetailsVoResultBean = loanSolutionsFeign.selectDetailsss(bv.getBusinessSid()); + SolutionsDetailsVo solutionsDetailsVo = solutionsDetailsVoResultBean.getData(); + if (solutionsDetailsVo != null) { + createFinTwo(vo, busSalesOrder, solutionsDetailsVo); + } + } else {//全款 + handleNonLoanPayment(busSalesOrder, vo); + } + } + + private void handleNonLoanPayment(BusSalesOrder busSalesOrder, AppOrderDetailsVo vo) { + if ("2".equals(busSalesOrder.getFinancePlan())) { + ResultBean solutionsDetailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid()); + SolutionsDetailsVo solutionsDetailsVo = solutionsDetailsVoResultBean.getData(); + if (StringUtils.isNotBlank(solutionsDetailsVo.getTypeKey())) { + //推送车款 + if ("02".equals(solutionsDetailsVo.getTypeKey())) { + //外部金融 + createFin(vo, busSalesOrder, solutionsDetailsVo); + } else { + //自营非担保 + createFinTwo(vo, busSalesOrder, solutionsDetailsVo); + } + } else { + //外部金融 + createFin(vo, busSalesOrder, solutionsDetailsVo); + } + } else { + createCarFin(vo, busSalesOrder); // 推送车款 + } + } + + private void handlePurchaseChannelPush(BusSalesOrder busSalesOrder) { + if ("3".equals(busSalesOrder.getType())) { + ScmPurchaseChannelPush scmPurchaseChannelPush = createPurchaseChannelPush(busSalesOrder); + scmPurchaseChannelFeign.push(scmPurchaseChannelPush); + } + } + + private ScmPurchaseChannelPush createPurchaseChannelPush(BusSalesOrder busSalesOrder) { + ScmPurchaseChannelPush scmPurchaseChannelPush = new ScmPurchaseChannelPush(); + scmPurchaseChannelPush.setSaleOrderSid(busSalesOrder.getSid()); + scmPurchaseChannelPush.setSaleOrderNo(busSalesOrder.getBillNo()); + scmPurchaseChannelPush.setApplyPeoSid(busSalesOrder.getCreateBySid()); + scmPurchaseChannelPush.setApplyPeoName(busSalesOrder.getStaffName()); + scmPurchaseChannelPush.setApplyDeptSid(busSalesOrder.getOrgSid()); + scmPurchaseChannelPush.setApplyDeptName(busSalesOrder.getOrgName()); + BusSalesOrderModel busSalesOrderModel = busSalesOrderModelService.selectByOrderSid(busSalesOrder.getSid()); + scmPurchaseChannelPush.setModelSid(busSalesOrderModel.getModelSid()); + scmPurchaseChannelPush.setModelName(busSalesOrderModel.getModelName()); + scmPurchaseChannelPush.setConfigSid(busSalesOrderModel.getModelConfigSid()); + scmPurchaseChannelPush.setConfigName(busSalesOrderModel.getModelConfig()); + scmPurchaseChannelPush.setUseOrgSid(busSalesOrder.getUseOrgSid()); + scmPurchaseChannelPush.setUseOrgName(busSalesOrder.getUseOrgName()); + scmPurchaseChannelPush.setSaleOrderApproDate(DateUtil.format(new Date(), "yyyy-MM-dd")); + BusSalesOrderPrice busSalesOrderPrice = busSalesOrderPriceService.selectBySalesOrderSid(busSalesOrder.getSid()); + scmPurchaseChannelPush.setNum(busSalesOrderPrice.getQuantity().toString()); + scmPurchaseChannelPush.setBusinessType(busSalesOrder.getPayType()); + scmPurchaseChannelPush.setBusinessTypeKey(busSalesOrder.getPayTypeKey()); + scmPurchaseChannelPush.setPurchaseSystemSid(busSalesOrder.getPurchaseSystemSid()); + scmPurchaseChannelPush.setPurchaseSystemName(busSalesOrder.getPurchaseSystemName()); + return scmPurchaseChannelPush; + } + + private void updateClosingDate(BusinessVariables bv, BusSalesOrder busSalesOrder) { + BusSalesOrder entityForCloseDate = fetchBySid(bv.getBusinessSid()); + entityForCloseDate.setClosingDate(new Date()); + baseMapper.updateById(entityForCloseDate); + } + + private void asyncPushMessage(BusSalesOrder busSalesOrder) { + if ("2".equals(busSalesOrder.getPayTypeKey())) { + CompletableFuture.runAsync(() -> { + List recipientSidList = Collections.singletonList(busSalesOrder.getCreateBySid()); + PushMessageQuery pushMessageQuery = new PushMessageQuery(); + pushMessageQuery.setReceivedSids(recipientSidList); + pushMessageQuery.setModuleName("业务"); + pushMessageQuery.setMsgContent("订单已完成,请尽快对客户和贷款人进行贷前信用审核和确定贷款人。"); + pushMessageQuery.setApp_type("2"); + pushMessageQuery.setModuleSid("e25e13b5-f2ed-421f-bdbd-38ed9d1297e2"); + messageFeign.pushNoUriMessage(pushMessageQuery); + }, cachedThreadPool); + } + } + public void updateNo(String sid, String contractNo) { BusSalesOrder busSalesOrder = fetchBySid(sid); ResultBean resultBean = getSaleOrderDetails(sid); @@ -6050,7 +6359,8 @@ public class BusSalesOrderService extends MybatisBaseService getApprovalContractList(PagerQuery pagerQuery) { + public IPage getApprovalContractList + (PagerQuery pagerQuery) { AppRovalContractPageQuery params = pagerQuery.getParams(); SysUserVo sysUserVo = sysUserFeign.fetchBySid(params.getUserSid()).getData(); String orgPath = params.getOrgPath(); @@ -7556,7 +7867,8 @@ public class BusSalesOrderService extends MybatisBaseService