流程配置相关

This commit is contained in:
efren
2025-08-07 16:22:00 +08:00
parent c543e14e83
commit cecdc7b308
5 changed files with 162 additions and 0 deletions

View File

@ -0,0 +1,29 @@
package com.chinaunicom.zyhy.ebtp.supplier.process.controller;
import com.chinaunicom.mall.ebtp.common.workflow.constant.BusinessTypeEnum;
import com.chinaunicom.zyhy.ebtp.supplier.coscosupplier.entity.CoscoAccessSupplier;
import com.chinaunicom.zyhy.ebtp.supplier.process.service.CoscoProcessEnvService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/process/env")
@Slf4j
public class CoscoProcessEnvController {
@Resource
private CoscoProcessEnvService coscoProcessEnvService;
@RequestMapping("/test")
public void test(){
CoscoAccessSupplier accessSupplier = new CoscoAccessSupplier();
accessSupplier.setId("1");
accessSupplier.setSupplierName("测试供应商");
String url = coscoProcessEnvService.buildBusinessUrl(BusinessTypeEnum.ACCESS_APPROVAL.getKey(), accessSupplier);
log.info("生成的URL: {}", url);
}
}

View File

@ -0,0 +1,7 @@
package com.chinaunicom.zyhy.ebtp.supplier.process.dao;
import com.chinaunicom.mall.ebtp.common.base.dao.IBaseMapper;
import com.chinaunicom.zyhy.ebtp.supplier.process.entity.CoscoProcessEnv;
public interface CoscoProcessEnvMapper extends IBaseMapper<CoscoProcessEnv> {
}

View File

@ -0,0 +1,32 @@
package com.chinaunicom.zyhy.ebtp.supplier.process.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
@TableName(value = "cosco_process_env", autoResultMap = true)
public class CoscoProcessEnv {
@TableId(value = "id", type = IdType.INPUT)
private String id; // 主键ID
private String businessType; // 业务类型(枚举)
private String modelId; // 流程模型ID
private String businessKey; // 流程节点标识
private String businessUrl; // 页面地址
private String delFlag; // 删除标识(normal.正常、deleted.已删除)
private String createBy; // 创建人
private String createTime; // 创建时间
private String updateBy; // 修改人
private String updateTime; // 修改时间
private String lastUpdateTime; // 最后更新时间
}

View File

@ -0,0 +1,11 @@
package com.chinaunicom.zyhy.ebtp.supplier.process.service;
import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
import com.chinaunicom.zyhy.ebtp.supplier.process.entity.CoscoProcessEnv;
public interface CoscoProcessEnvService extends IBaseService<CoscoProcessEnv> {
CoscoProcessEnv selectByBusinessType(String businessType);
String buildBusinessUrl(String businessType, Object obj);
}

View File

@ -0,0 +1,83 @@
package com.chinaunicom.zyhy.ebtp.supplier.process.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
import com.chinaunicom.zyhy.ebtp.supplier.process.dao.CoscoProcessEnvMapper;
import com.chinaunicom.zyhy.ebtp.supplier.process.entity.CoscoProcessEnv;
import com.chinaunicom.zyhy.ebtp.supplier.process.service.CoscoProcessEnvService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.Base64;
@Service
@Slf4j
public class CoscoProcessEnvServiceImpl extends BaseServiceImpl<CoscoProcessEnvMapper, CoscoProcessEnv> implements CoscoProcessEnvService {
@Resource
private CoscoProcessEnvMapper coscoProcessEnvMapper;
/**
* 根据业务类型查询一条流程环境记录
*
* @param businessType 业务类型
* @return CoscoProcessEnv
*/
@Override
public CoscoProcessEnv selectByBusinessType(String businessType) {
LambdaQueryWrapper<CoscoProcessEnv> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CoscoProcessEnv::getBusinessType, businessType)
.orderByDesc(CoscoProcessEnv::getCreateTime)
.last("limit 1");// limit 1 确保只返回一条记录 (有唯一索引,只是以防万一)
return coscoProcessEnvMapper.selectOne(queryWrapper);
}
/**
* 根据业务类型和参数对象生成完整的URL字符串。
* 1. 用businessType查找CoscoProcessEnv获取businessUrl。
* 2. 用toKeyValueString转换obj为key=value&key2=value2。
* 3. 拼接为 businessUrl?key=value&key2=value2
* @param businessType 业务类型
* @param obj 参数对象
* @return 完整URL字符串
*/
@Override
public String buildBusinessUrl(String businessType, Object obj) {
CoscoProcessEnv env = selectByBusinessType(businessType);
if (env == null || env.getBusinessUrl() == null) return null;
String baseUrl = env.getBusinessUrl();
String paramStr = toKeyValueString(obj);
log.info("paramStr: {}", paramStr);
if (paramStr.isEmpty()) {
return baseUrl;
} else {
String encoded = Base64.getEncoder().encodeToString(paramStr.getBytes());
return baseUrl + "?code=" + encoded;
}
}
/**
* 参数为Object ,每个属性都转换为"名称=值"的形式拼接为key1=value1&key2=value2
* @param obj 对象
* @return 拼接后的字符串
*/
private String toKeyValueString(Object obj) {
if (obj == null) return "";
StringBuilder sb = new StringBuilder();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
try {
Object value = field.get(obj);
if (value != null) {
if (sb.length() > 0) sb.append("&");
sb.append(field.getName()).append("=").append(value);
}
} catch (IllegalAccessException ignored) {}
}
return sb.toString();
}
}