From cecdc7b308de4d4c27b18598a61d090b7684f045 Mon Sep 17 00:00:00 2001 From: efren <79289982@qq.com> Date: Thu, 7 Aug 2025 16:22:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E9=85=8D=E7=BD=AE=E7=9B=B8?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CoscoProcessEnvController.java | 29 +++++++ .../process/dao/CoscoProcessEnvMapper.java | 7 ++ .../process/entity/CoscoProcessEnv.java | 32 +++++++ .../service/CoscoProcessEnvService.java | 11 +++ .../impl/CoscoProcessEnvServiceImpl.java | 83 +++++++++++++++++++ 5 files changed, 162 insertions(+) create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/controller/CoscoProcessEnvController.java create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/dao/CoscoProcessEnvMapper.java create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/entity/CoscoProcessEnv.java create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/CoscoProcessEnvService.java create mode 100644 src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/impl/CoscoProcessEnvServiceImpl.java diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/controller/CoscoProcessEnvController.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/controller/CoscoProcessEnvController.java new file mode 100644 index 0000000..633c464 --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/controller/CoscoProcessEnvController.java @@ -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); + } +} diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/dao/CoscoProcessEnvMapper.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/dao/CoscoProcessEnvMapper.java new file mode 100644 index 0000000..81a86fb --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/dao/CoscoProcessEnvMapper.java @@ -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 { +} diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/entity/CoscoProcessEnv.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/entity/CoscoProcessEnv.java new file mode 100644 index 0000000..448b0ed --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/entity/CoscoProcessEnv.java @@ -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; // 最后更新时间 +} diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/CoscoProcessEnvService.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/CoscoProcessEnvService.java new file mode 100644 index 0000000..404b4fd --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/CoscoProcessEnvService.java @@ -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 selectByBusinessType(String businessType); + + String buildBusinessUrl(String businessType, Object obj); +} diff --git a/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/impl/CoscoProcessEnvServiceImpl.java b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/impl/CoscoProcessEnvServiceImpl.java new file mode 100644 index 0000000..3624304 --- /dev/null +++ b/src/main/java/com/chinaunicom/zyhy/ebtp/supplier/process/service/impl/CoscoProcessEnvServiceImpl.java @@ -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 implements CoscoProcessEnvService { + + @Resource + private CoscoProcessEnvMapper coscoProcessEnvMapper; + + /** + * 根据业务类型查询一条流程环境记录 + * + * @param businessType 业务类型 + * @return CoscoProcessEnv + */ + @Override + public CoscoProcessEnv selectByBusinessType(String businessType) { + LambdaQueryWrapper 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(); + } +}