Browse Source

销售订单办理接口优化

master
dimengzhe 4 months ago
parent
commit
9de08eb207
  1. 322
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java

322
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<BusSalesOrderMapper
//车辆交付地点
//根据存放地点查询
String finalAddress = "";
if (StringUtils.isNotBlank(priceInfo.getPlannedPickUpLocationKey())){
if (StringUtils.isNotBlank(priceInfo.getPlannedPickUpLocationKey())) {
ScmWarehouseVo scmWarehouseVo = scmWarehouseFeign.fetchBySid(priceInfo.getPlannedPickUpLocationKey()).getData();
if (scmWarehouseVo != null) {
finalAddress = scmWarehouseVo.getWarehouseAttribute();
@ -5661,7 +5661,8 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
* @param bv
* @return
*/
public ResultBean complete(BusinessVariables bv, boolean isTrue) {
public ResultBean complete111111(BusinessVariables bv, boolean isTrue) {
long startTime = System.currentTimeMillis(); // 记录开始时间
ResultBean rb = ResultBean.fireFail();
BusSalesOrder busSalesOrder = fetchBySid(bv.getBusinessSid());
Map<String, Object> variables = getOrderMap(busSalesOrder);
@ -5898,6 +5899,9 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
}
}
long endTime = System.currentTimeMillis(); // 记录结束时间
long duration = endTime - startTime; // 计算耗时
log.info("销售订单办理接口耗时 {} ms", duration); // 输出日志
return rb.success().setData(resultBean.getData());
} else {
return rb.setMsg("操作失败!提交的数据不一致");
@ -5905,6 +5909,311 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
}
// 线程池优化:使用固定线程池和缓存线程池进行并发任务处理
private static final ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);
private static final ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
public ResultBean complete(BusinessVariables bv, boolean isTrue) {
long startTime = System.currentTimeMillis(); // 记录开始时间
ResultBean rb = ResultBean.fireFail();
BusSalesOrder busSalesOrder = fetchBySid(bv.getBusinessSid());
Map<String, Object> variables = getOrderMap(busSalesOrder);
bv.setFormVariables(variables);
bv.setOrgSidPath(busSalesOrder.getOrgSidPath());
//流程定义id
bv.setModelId(busSalesOrder.getProcDefId());
if (bv.getTaskId().equals(busSalesOrder.getTaskId())) {
ResultBean<UpdateFlowFieldVo> 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<AppOrderDetailsVo> 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<String> 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<BusSalesVehicleOrderDetailsVo> orderDetails = busSalesVehicleOrderService.detailsList(busSalesOrder.getSid());
if (orderDetails != null && !orderDetails.isEmpty()) {
Map<String, Integer> 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<String, Object> 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<String, Object>) variables.get("app"));
messageFlowableQuery.setBusinessSid(busSalesOrder.getSid());
messageFlowableQuery.setModuleName("销售订单申请");
messageFlowableQuery.setMsgContent(busSalesOrder.getStaffName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("销售订单");
// 推送消息
ResultBean<String> 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<String> 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<BusSalesOrderVehicle> vehicleList = busSalesOrderVehicleService.selectListByOrderSid(bv.getBusinessSid());
vehicleList = vehicleList.stream().filter(Objects::nonNull).collect(Collectors.toList());
if (!vehicleList.isEmpty()) {
// 使用批量更新
List<BaseVehicleStateDto> 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<SolutionsDetailsVo> 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<SolutionsDetailsVo> 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<String> 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<AppOrderDetailsVo> resultBean = getSaleOrderDetails(sid);
@ -6050,7 +6359,8 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
}
}
public void createFinTwo(AppOrderDetailsVo vo, BusSalesOrder busSalesOrder, SolutionsDetailsVo solutionsDetailsVo) {
public void createFinTwo(AppOrderDetailsVo vo, BusSalesOrder busSalesOrder, SolutionsDetailsVo
solutionsDetailsVo) {
//推送款项车款=====================================
AppOrderModelInfoVo appOrderModelInfoVo = vo.getModelInfo();
AppOrderPriceInfoVo priceInfo = vo.getPriceInfo();
@ -6543,7 +6853,8 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
}
public IPage<AppRovalContractPageVo> getApprovalContractList(PagerQuery<AppRovalContractPageQuery> pagerQuery) {
public IPage<AppRovalContractPageVo> getApprovalContractList
(PagerQuery<AppRovalContractPageQuery> 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<BusSalesOrderMapper
}
public ResultBean rePublishSaleOrder(String saleOrderSid, String customerSid, String customerName, String customerMobile) throws InvocationTargetException, IllegalAccessException {
public ResultBean rePublishSaleOrder(String saleOrderSid, String customerSid, String customerName, String
customerMobile) throws InvocationTargetException, IllegalAccessException {
ResultBean rb = ResultBean.fireFail();
String newSalesOrderSid = "";
boolean saleOrderSave = false;

Loading…
Cancel
Save