diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/appsubsetversion/AppSubsetVersionRest.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/appsubsetversion/AppSubsetVersionRest.java index 77b432e40a..15328401a3 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/appsubsetversion/AppSubsetVersionRest.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/appsubsetversion/AppSubsetVersionRest.java @@ -8,8 +8,11 @@ import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.result.ResultBean; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -255,7 +258,7 @@ public class AppSubsetVersionRest implements AppSubsetVersionFeign { } @Override - public ResultBean getLastRiskByAppSid(String appSid,String moduleAction) { + public ResultBean getLastRiskByAppSid(String appSid, String moduleAction) { ResultBean rb = ResultBean.fireFail(); AppSubVersionVo vo = new AppSubVersionVo(); ResultBean resultBean = getLastByAppSid(appSid); @@ -266,4 +269,12 @@ public class AppSubsetVersionRest implements AppSubsetVersionFeign { vo.setModuleAction(moduleAction); return rb.success().setData(vo); } + + @ApiOperation("查询插件最新模块信息") + @GetMapping("/getLastModule") + public ResultBean getLastModule(@RequestParam("appSid") String appSid) { + ResultBean rb = ResultBean.fireFail(); + AppSubsetVersionVo appSubsetVersionVo = appSubsetVersionService.selectByAppSidOne(appSid); + return rb.success().setData(appSubsetVersionVo); + } } diff --git a/doc/databases/oa/oa.sql b/doc/databases/oa/oa.sql index 79d761e073..eb44379094 100644 --- a/doc/databases/oa/oa.sql +++ b/doc/databases/oa/oa.sql @@ -12,6 +12,9 @@ CREATE TABLE `oa_form` `remarks` varchar(255) DEFAULT NULL COMMENT '备注', `createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid', `createByName` varchar(64) DEFAULT NULL COMMENT '创建人', + `formType` varchar(64) DEFAULT NULL COMMENT '表单类别-流程名称', + `title` varchar(64) DEFAULT NULL COMMENT '标题', + `billNo` varchar(64) DEFAULT NULL COMMENT '申请单号', `useOrgSid` varchar(64) DEFAULT NULL COMMENT '公司sid', `useOrgName` varchar(64) DEFAULT NULL COMMENT '公司名称', `deptSid` varchar(255) DEFAULT NULL COMMENT '部门sid', @@ -27,4 +30,87 @@ CREATE TABLE `oa_form` PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE = INNODB - DEFAULT CHARSET = utf8 COMMENT ='表单公共表'; \ No newline at end of file + DEFAULT CHARSET = utf8 COMMENT ='表单公共表'; + + +DROP TABLE IF EXISTS `hr_hire_apply`; +CREATE TABLE `hr_hire_apply` +( + `id` int(32) NOT NULL AUTO_INCREMENT COMMENT 'id', + `sid` varchar(64) NOT NULL COMMENT 'sid', + `lockVersion` int(32) DEFAULT '0' COMMENT '版本锁', + `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `modifyTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `isEnable` int(32) DEFAULT '1' COMMENT '是否可用:1可用,0不可用', + `state` int(32) DEFAULT '1' COMMENT '状态', + `isDelete` int(32) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `remarks` varchar(255) DEFAULT NULL COMMENT '备注', + `createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid', + `updateBySid` varchar(64) DEFAULT NULL COMMENT '修改人sid', + `isFinanceKey` varchar(64) DEFAULT NULL COMMENT '招聘岗位是否为财务岗key:0否1是', + `isFinanceValue` varchar(64) DEFAULT NULL COMMENT '招聘岗位是否为财务岗Value:0否1是', + `formSid` varchar(64) DEFAULT NULL COMMENT '公共表单sid', + PRIMARY KEY (`id`), + KEY `id` (`id`) +) ENGINE = INNODB + DEFAULT CHARSET = utf8 COMMENT ='招聘需求申请'; + +DROP TABLE IF EXISTS `hr_hire_details`; +CREATE TABLE `hr_hire_details` +( + `id` int(32) NOT NULL AUTO_INCREMENT COMMENT 'id', + `sid` varchar(64) NOT NULL COMMENT 'sid', + `lockVersion` int(32) DEFAULT '0' COMMENT '版本锁', + `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `modifyTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `isEnable` int(32) DEFAULT '1' COMMENT '是否可用:1可用,0不可用', + `state` int(32) DEFAULT '1' COMMENT '状态', + `isDelete` int(32) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `remarks` varchar(255) DEFAULT NULL COMMENT '备注', + `createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid', + `updateBySid` varchar(64) DEFAULT NULL COMMENT '修改人sid', + `mainSid` varchar(64) DEFAULT NULL COMMENT '招聘表sid', + `deptSid` varchar(64) DEFAULT NULL COMMENT '招聘部门sid', + `deptName` varchar(64) DEFAULT NULL COMMENT '招聘部门名称', + `postSid` varchar(64) DEFAULT NULL COMMENT '招聘岗位sid', + `postName` varchar(64) DEFAULT NULL COMMENT '招聘岗位名称', + `memberCount` int(32) DEFAULT NULL COMMENT '招聘人数', + `educationKey` varchar(64) DEFAULT NULL COMMENT '学历要求key', + `educationValue` varchar(64) DEFAULT NULL COMMENT '学历要求value', + `formalWages` varchar(64) DEFAULT NULL COMMENT '薪资待遇', + `benefits` text DEFAULT NULL COMMENT '职位福利', + `describes` text DEFAULT NULL COMMENT '职位描述', + `demand` text DEFAULT NULL COMMENT '任职要求', + `address` text DEFAULT NULL COMMENT '工作地址', + PRIMARY KEY (`id`), + KEY `id` (`id`) +) ENGINE = INNODB + DEFAULT CHARSET = utf8 COMMENT ='招聘需求明细'; + + +DROP TABLE IF EXISTS `oa_linkform`; +CREATE TABLE `oa_linkform` +( + `id` int(32) NOT NULL AUTO_INCREMENT COMMENT 'id', + `sid` varchar(64) NOT NULL COMMENT 'sid', + `lockVersion` int(32) DEFAULT '0' COMMENT '版本锁', + `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `modifyTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `isEnable` int(32) DEFAULT '1' COMMENT '是否可用:1可用,0不可用', + `state` int(32) DEFAULT '1' COMMENT '状态', + `isDelete` int(32) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `remarks` varchar(255) DEFAULT NULL COMMENT '备注', + `createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid', + `updateBySid` varchar(64) DEFAULT NULL COMMENT '修改人sid', + `formSid` varchar(64) DEFAULT NULL COMMENT '表单sid', + `linkFormSid` varchar(64) DEFAULT NULL COMMENT '关联审批单sid', + `linkFormTitle` varchar(64) DEFAULT NULL COMMENT '关联表单标题', + `sortNo` int(32) DEFAULT NULL COMMENT '排序', + PRIMARY KEY (`id`), + KEY `id` (`id`) +) ENGINE = INNODB + DEFAULT CHARSET = utf8 COMMENT ='关联审批表'; + + + + diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/HrHireApplyRest.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/HrHireApplyRest.java index 72b8a695d1..9f0ee4f0be 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/HrHireApplyRest.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/HrHireApplyRest.java @@ -68,8 +68,9 @@ public class HrHireApplyRest { @ApiOperation("详情") @GetMapping("/details/{sid}") - ResultBean details(@PathVariable("sid") String sid) { - return hrHireApplyService.details(sid); + ResultBean details(@PathVariable("sid") String sid + , @RequestParam(value = "application", required = false) String application) { + return hrHireApplyService.details(sid,application); } @ApiOperation("提交审批流程") diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java index 0044f471c7..4f12c0406f 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java @@ -106,4 +106,11 @@ public class OaFormRest { return oaFormService.assignTask(dto); } + /*@ApiOperation(value = "查询审批单") + @GetMapping(value = "/getDict") + @ResponseBody + ResultBean> getDict(@RequestParam(value = "orgPath", required = false) String orgPath) { + return oaFormService.getDict(orgPath); + }*/ + } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApply.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApply.java index 9d66455a05..ac0d9001cf 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApply.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApply.java @@ -17,4 +17,6 @@ public class HrHireApply extends BaseEntity { private String isFinanceValue; private String formSid; + +// private String testPage; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDetailVo.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDetailVo.java index 1c190190e5..72cb42221d 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDetailVo.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDetailVo.java @@ -18,4 +18,6 @@ public class HrHireApplyDetailVo extends OaFormCommonVo { private String isFinanceValue; private List list = new ArrayList<>(); + +// private String testPage; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDto.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDto.java index ebec3cb4bd..58bde50e7b 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDto.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyDto.java @@ -21,4 +21,6 @@ public class HrHireApplyDto extends OaFormDto { private String isFinanceKey; private String isFinanceValue; private List list = new ArrayList<>(); + +// private String testPage; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyService.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyService.java index 830acb2ab7..5769583cb8 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyService.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyService.java @@ -1,6 +1,8 @@ package com.yxt.anrui.oa.biz.hrhireapply; import cn.hutool.core.bean.BeanUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.yxt.anrui.oa.biz.hrhiredetails.HrHireDetailsDto; import com.yxt.anrui.oa.biz.hrhiredetails.HrHireDetailsService; import com.yxt.anrui.oa.biz.hrhiredetails.HrHireDetailsVo; @@ -54,6 +56,7 @@ public class HrHireApplyService extends MybatisBaseService resultBean = oaFormService.saveOaForm(dto); if (!resultBean.getSuccess()) { return rb; @@ -169,7 +173,7 @@ public class HrHireApplyService extends MybatisBaseService getFlowOperateTitle(NodeQuery query) { + /* public ResultBean getFlowOperateTitle(NodeQuery query) { ResultBean rb = ResultBean.fireFail(); //0 上一环节 1下一环节 int next = query.getNext(); @@ -197,6 +201,62 @@ public class HrHireApplyService extends MybatisBaseService getFlowOperateTitle(NodeQuery query) { + // 默认失败返回 + ResultBean rb = ResultBean.fireFail(); + + // 获取next值和formVariables + int next = query.getNext(); + + // 获取并更新formVariables + Map formVariables = getMap(query.getFormVariables(), query.getBusinessSid()); + query.setFormVariables(formVariables); + + // 校验next参数是否有效(只允许0或1) + if (next != 0 && next != 1) { + return rb.setMsg("参数错误:next"); // 如果next不是0或1,返回错误信息 + } + + // 获取节点名称 + String data = getNodeName(query, next); + + // 如果data为null,表示未获取到有效的节点信息 + if (data == null) { + return rb.setMsg("没有获取到节点信息"); // 返回错误消息 + } + + // 返回成功的结果和获取到的节点名称 + return rb.success().setData(data); + } + + /** + * 根据next的值获取前一个节点或下一个节点的名称。 + * + * @param query 包含查询所需参数的NodeQuery对象 + * @param next 参数,0表示上一环节,1表示下一环节 + * @return 节点名称,如果失败则返回null + */ + private String getNodeName(NodeQuery query, int next) { + // 根据next值选择相应的服务方法获取节点信息 + ResultBean> resultBean = (next == 0) + ? oaFormService.getPreviousNodesForReject(query) // 获取上一环节的节点 + : oaFormService.getNextNodesForSubmit(query); // 获取下一环节的节点 + // 如果服务调用成功 + if (resultBean.getSuccess()) { + // 清除结果列表中的null值,避免空节点 + resultBean.getData().removeAll(Collections.singleton(null)); + // 如果结果列表非空,返回第一个节点的名称 + if (!resultBean.getData().isEmpty()) { + return resultBean.getData().get(0).getName(); + } + } else { + // 如果服务调用失败,返回null + return null; + } + // 如果结果为空,返回null + return null; } @@ -212,8 +272,8 @@ public class HrHireApplyService extends MybatisBaseService paramsMap = objectMapper.readValue(paramsJson, Map.class); + stringToMap.put("params", paramsMap); // 将解析后的 Map 放回 "params" 字段 + } + map.put("testPage", stringToMap); + System.out.println(map); + + } catch (Exception e) { + e.printStackTrace(); + } + Map pageMap = oaFormService.getPage(application, map); + Map mapPage = (Map) pageMap.get("testPage"); + ObjectMapper objectMapper = new ObjectMapper(); + try { + String jsonString = objectMapper.writeValueAsString(mapPage); + hrHireApplyDetailVo.setTestPage(jsonString); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + + } +*/ return rb.success().setData(hrHireApplyDetailVo); } } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyVo.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyVo.java index 544455d385..0cebccda43 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyVo.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/hrhireapply/HrHireApplyVo.java @@ -17,8 +17,8 @@ import java.util.List; public class HrHireApplyVo { private String sid; - /* private String userSid; - private String orgPath;*/ + /* private String userSid; + private String orgPath;*/ private String orgSidPath; private String createBySid; @ApiModelProperty("是否是财务") @@ -31,4 +31,6 @@ public class HrHireApplyVo { private String taskId; @ApiModelProperty("流程实例id") private String procInsId; + +// private String testPage; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/Extra.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/Extra.java deleted file mode 100644 index 68301f2537..0000000000 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/Extra.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.yxt.anrui.oa.biz.oaform; - -import lombok.Data; - -/** - * @description: - * @author: dimengzhe - * @date: 2025/1/16 - **/ -@Data -public class Extra { -} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/FormCommon.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/FormCommon.java index f36a13ea8e..3776c4a926 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/FormCommon.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/FormCommon.java @@ -2,6 +2,8 @@ package com.yxt.anrui.oa.biz.oaform; import lombok.Data; +import java.util.Map; + /** * @description: * @author: dimengzhe @@ -13,7 +15,7 @@ public class FormCommon { private String id; private String dictValue; - private Extra extra; + private Map extra; // 静态方法,直接通过方法创建对象并赋值 public static FormCommon of(String id, String dictValue) { diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/ModuleVo.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/ModuleVo.java new file mode 100644 index 0000000000..43a2957cc6 --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/ModuleVo.java @@ -0,0 +1,75 @@ +package com.yxt.anrui.oa.biz.oaform; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Data; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/1/22 + **/ +@Data +public class ModuleVo { + + private String type; + + private String applicationId; + + private String moduleAction; + + private String modulePluginName; + + private String params; + + private int moduleVersion; + private String applicationSid; + private String path; + + // 静态方法,直接通过方法创建对象并赋值 + public static ModuleVo of(String type, String applicationId, String moduleAction, String modulePluginName, String applicationSid, Map map) { + ModuleVo moduleVo = new ModuleVo(); + moduleVo.setType(type); + moduleVo.setApplicationId(applicationId); + moduleVo.setModuleAction(moduleAction); + moduleVo.setModulePluginName(modulePluginName); + moduleVo.setModuleVersion(-1); + moduleVo.setApplicationSid(applicationSid); + moduleVo.setPath(""); + String params = moduleVo.mapToJson(map); + moduleVo.setParams(params); + return moduleVo; + } + + // 将 Map 转换为 JSON 字符串 + public String mapToJson(Map map) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + // 使用 ObjectMapper 将 Map 转换为 JSON 字符串 + return objectMapper.writeValueAsString(map); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + public static Map entityToMap(Object entity) { + Map map = new HashMap<>(); + Field[] fields = entity.getClass().getDeclaredFields(); + + for (Field field : fields) { + field.setAccessible(true); // 使私有字段可访问 + try { + map.put(field.getName(), field.get(entity)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + return map; + } + +} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java index 80ca397570..93d08d0e3b 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java @@ -50,4 +50,6 @@ public class OaForm extends BaseEntity { @ApiModelProperty("创建组织") private String createOrgName; +// private Integer type; + } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormDto.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormDto.java index 304e7ef56a..a283c7e08d 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormDto.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormDto.java @@ -30,4 +30,6 @@ public class OaFormDto implements Dto { //流程提交时赋值 @ApiModelProperty("任务id") private String taskId; + +// private Integer type; } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java index 9cfcbed3ef..68ce53509d 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java @@ -1,5 +1,6 @@ package com.yxt.anrui.oa.biz.oaform; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; /** @@ -23,4 +25,6 @@ public interface OaFormMapper extends BaseMapper { int updateFlowFiled(Map map); int selectNum(String bill); + + List getDict(@Param(Constants.WRAPPER) Wrapper qw); } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml index fd53248d2c..b2616e0d4e 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml @@ -37,4 +37,12 @@ from oa_form where billNo LIKE concat(#{bill}, '%') + + \ No newline at end of file diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java index 69023e3070..f190d9b7dc 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.yxt.anrui.oa.biz.oaform.flowable.*; import com.yxt.anrui.oa.feign.base.BillNo; @@ -19,6 +20,8 @@ import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo; import com.yxt.anrui.oa.feign.message.MessageFeign; import com.yxt.anrui.oa.feign.message.MessageFlowVo; import com.yxt.anrui.oa.feign.message.MessageFlowableQuery; +import com.yxt.anrui.oa.feign.portal.appsubsetversion.AppSubsetVersionFeign; +import com.yxt.anrui.oa.feign.portal.appsubsetversion.AppSubsetVersionVo; import com.yxt.anrui.oa.feign.portal.sysorganization.OrgVo; import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo; @@ -27,12 +30,14 @@ import com.yxt.anrui.oa.feign.sysuser.SysUserFeign; import com.yxt.anrui.oa.feign.sysuser.SysUserVo; import com.yxt.anrui.oa.feign.sysuser.UserQuery; import com.yxt.anrui.oa.feign.sysuser.UserRoleQuery; +import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; +import org.apache.commons.beanutils.BeanUtils; import org.apache.tomcat.util.threads.ThreadPoolExecutor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -63,6 +68,10 @@ public class OaFormService extends MybatisBaseService { private SysStaffOrgFeign sysStaffOrgFeign; @Autowired private SysUserFeign sysUserFeign; + @Autowired + private AppSubsetVersionFeign appSubsetVersionFeign; + @Autowired + private FileUploadComponent fileUploadComponent; /** * 保存oaform表单 @@ -76,7 +85,7 @@ public class OaFormService extends MybatisBaseService { // 创建OA表单对象 OaForm oaForm = new OaForm(); // 将DTO中部分属性复制到oaForm中,忽略不需要的字段(如billNo, orgSidPath) - BeanUtil.copyProperties(dto, oaForm, "billNo", "orgPath"); + BeanUtil.copyProperties(dto, oaForm, "billNo", "orgSidPath"); try { String orgSidPath = dto.getOrgSidPath(); // 获取组织信息,根据orgSidPath字段调用外部服务 @@ -664,10 +673,121 @@ public class OaFormService extends MybatisBaseService { return rb.success().setData(bv); } - + /** + * 获取申请单详情的基础字段 + * + * @param sid + * @return + */ public OaFormCommonVo getDetails(String sid) { OaForm oaForm = fetchBySid(sid); OaFormCommonVo vo = OaFormCommonVo.of(oaForm.getBillNo(), new SimpleDateFormat("yyyy-MM-dd").format(oaForm.getCreateTime()), oaForm.getCreateByName(), oaForm.getUseOrgName(), oaForm.getDeptName()); return vo; } + + /*public ResultBean> getDict(String orgPath) { + ResultBean> rb = ResultBean.fireFail(); + List list = new ArrayList<>(); + QueryWrapper qw = new QueryWrapper<>(); + String useOrgSid = ""; + if (StringUtils.isNotBlank(orgPath)) { + // 获取组织信息,根据orgSidPath字段调用外部服务 + OrgVo orgVo = sysOrganizationFeign.getOrgByPath(orgPath).getData(); + // 如果组织信息为空,返回失败信息 + if (orgVo == null) { + return rb.setMsg("未找到对应的组织信息"); + } + useOrgSid = orgVo.getUseOrgSid(); + qw.eq("useOrgSid", useOrgSid); + } + + List oaFormList = baseMapper.getDict(qw); + oaFormList.removeAll(Collections.singleton(null)); + if (!oaFormList.isEmpty()) { + oaFormList.stream().forEach(v -> { + FormCommon formCommon = FormCommon.of(v.getSid(), v.getTitle() + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(v.getCreateTime())); + Map map = new HashMap<>(); + // 动态获取对应的枚举常量 + OaFormTypeEnum formType = OaFormTypeEnum.fromType(v.getType()); + switch (formType.getType()) { + //招聘需求 + case 1: + map.put("sid", v.getSid()); + map.put(OaFormUrlEnum.HRHIREAPPLY_DETAIL.getType(), OaFormUrlEnum.HRHIREAPPLY_DETAIL.getUrl()); + ModuleVo moduleVo = ModuleVo.of("2", + "com.anrui.android.plugin.oa", + "com.anrui.android.plugin.oa.common.BaseOADetailActivity", + "oa", + "58301351-e4d9-11ee-b0bf-0242ac120004", + map); + Map moduleMap = ModuleVo.entityToMap(moduleVo); + formCommon.setExtra(moduleMap); + break; + case 2: + break; + default: + break; + + } + list.add(formCommon); + }); + } + + return rb.success().setData(list); + }*/ + + /** + * 根据插件sid和page的Map对pageMap中的path和moduleVersion进行替换。 + * + * @param appSid + * @param map + * @return + */ + public Map getPage(String appSid, Map map) { + Set applicationSidSet = new HashSet<>(); // 用于存储 applicationSid + // 遍历 Map 中的每个键(testPage 和 bPage) + for (String key : map.keySet()) { + // 获取对应的 Map 对象(testPage 或 bPage) + Map innerMap = (Map) map.get(key); + // 获取 applicationSid + String applicationSid = (String) innerMap.get("applicationSid"); + String type = (String) innerMap.get("type"); + if (applicationSid != null && !applicationSid.equals(appSid) && "2".equals(type)) { + // 将 applicationSid 添加到 HashSet + applicationSidSet.add(applicationSid); + } + } + Map> map2 = new HashMap<>(); + // 循环遍历 Set 中的每个 applicationSid + for (String applicationSid : applicationSidSet) { + Map stringMap = new HashMap<>(); + //根据appSid查询最新的版本号和地址 + ResultBean getLastModule = appSubsetVersionFeign.getLastModule(applicationSid); + stringMap.put("path", getLastModule.getData().getUpdateUrl()); + stringMap.put("moduleVersion", getLastModule.getData().getVersionCode().toString()); + map2.put(applicationSid, stringMap); + System.out.println("Application SID: " + applicationSid); + } + + //遍历map + for (String key : map.keySet()) { + // 获取对应的 Map 对象(testPage 或 bPage) + Map innerMap = (Map) map.get(key); + String type = (String) innerMap.get("type"); + String applicationSid = (String) innerMap.get("applicationSid"); + if ("2".equals(type)) { + Map stringMap = map2.get(applicationSid); + if (stringMap != null) { + String path = stringMap.get("path"); + String moduleVersion = stringMap.get("moduleVersion"); + // 将 path 和 moduleVersion 设置到 innerMap 中 + String pathPrefix = fileUploadComponent.getUrlPrefix(); + innerMap.put("path", pathPrefix + path); + innerMap.put("moduleVersion", moduleVersion); + } + } + } + return map; + + } } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormTypeEnum.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormTypeEnum.java new file mode 100644 index 0000000000..b03cf7f2cb --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormTypeEnum.java @@ -0,0 +1,42 @@ +package com.yxt.anrui.oa.biz.oaform; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/1/22 + **/ +public enum OaFormTypeEnum { + /** + * 招聘需求 + */ + HRHIREAPPLY(1, "招聘需求"), + ; + + //类型 + private final int type; + //申请名称 + private final String name; + + public int getType() { + return type; + } + + public String getName() { + return name; + } + + OaFormTypeEnum(int type, String name) { + this.type = type; + this.name = name; + } + + // 根据 type 获取对应的枚举常量 + public static OaFormTypeEnum fromType(int type) { + for (OaFormTypeEnum formType : values()) { + if (formType.getType() == type) { + return formType; + } + } + throw new IllegalArgumentException("No matching enum for type " + type); + } +} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormUrlEnum.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormUrlEnum.java index 2f3045b03c..6ba909aff4 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormUrlEnum.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormUrlEnum.java @@ -11,11 +11,11 @@ public enum OaFormUrlEnum { /** * 编辑页面地址 */ - HRHIREAPPLY_EDIT(InnerEnum.editUrl.printValue(), "approval/#/pages/EditOnboradingApplyActivity?sid="), + HRHIREAPPLY_EDIT(InnerEnum.editUrl.printValue(), "approval/#/pages/EditOnboradingApplyActivity"), /** * 详情页面地址 */ - HRHIREAPPLY_DETAIL(InnerEnum.detailUrl.printValue(), "approval/#/pages/DetailOnboradingApplyActivity?sid="), + HRHIREAPPLY_DETAIL(InnerEnum.detailUrl.printValue(), "approval/#/pages/DetailOnboradingApplyActivity"), /** * 获取操作标题接口地址 */ diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkform.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkform.java new file mode 100644 index 0000000000..67a37a912b --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkform.java @@ -0,0 +1,21 @@ +package com.yxt.anrui.oa.biz.oalinkform; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/1/23 + **/ +@Data +public class OaLinkform { + @ApiModelProperty("表单sid") + private String formSid; + @ApiModelProperty("关联审批单sid") + private String linkFormSid; + @ApiModelProperty("关联审批单标题") + private String linkFormTitle; + @ApiModelProperty("排序") + private Integer sortNo; +} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformMapper.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformMapper.java new file mode 100644 index 0000000000..433c4dc169 --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformMapper.java @@ -0,0 +1,14 @@ +package com.yxt.anrui.oa.biz.oalinkform; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.anrui.oa.biz.oamendapply.OaMendApply; +import org.apache.ibatis.annotations.Mapper; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/1/23 + **/ +@Mapper +public interface OaLinkformMapper extends BaseMapper { +} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformMapper.xml b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformMapper.xml new file mode 100644 index 0000000000..781472d5b2 --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformService.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformService.java new file mode 100644 index 0000000000..5bf67888b5 --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oalinkform/OaLinkformService.java @@ -0,0 +1,13 @@ +package com.yxt.anrui.oa.biz.oalinkform; + +import com.yxt.common.base.service.MybatisBaseService; +import org.springframework.stereotype.Service; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/1/23 + **/ +@Service +public class OaLinkformService extends MybatisBaseService { +} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/portal/appsubsetversion/AppSubsetVersionFeign.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/portal/appsubsetversion/AppSubsetVersionFeign.java new file mode 100644 index 0000000000..a0ecc89f1c --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/portal/appsubsetversion/AppSubsetVersionFeign.java @@ -0,0 +1,23 @@ +package com.yxt.anrui.oa.feign.portal.appsubsetversion; + +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/1/22 + **/ +@FeignClient( + contextId = "anrui-portal-AppSubsetVersion", + name = "anrui-portal", + path = "v1/appsubsetversion") +public interface AppSubsetVersionFeign { + + @ApiOperation("查询插件最新模块信息") + @GetMapping("/getLastModule") + public ResultBean getLastModule(@RequestParam("appSid") String appSid); +} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/portal/appsubsetversion/AppSubsetVersionVo.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/portal/appsubsetversion/AppSubsetVersionVo.java new file mode 100644 index 0000000000..7835481403 --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/feign/portal/appsubsetversion/AppSubsetVersionVo.java @@ -0,0 +1,74 @@ +package com.yxt.anrui.oa.feign.portal.appsubsetversion; + + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Project: anrui-portal(门户建设)
+ * File: AppSubsetVersionVo.java
+ * Class: com.yxt.anrui.portal.api.appsubsetversion.AppSubsetVersionVo
+ * Description: 一级应用 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-09-13 14:16:33
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@ApiModel(value = "一级应用 视图数据对象", description = "一级应用 视图数据对象") +@Data +public class AppSubsetVersionVo implements Vo { + + + @ApiModelProperty("appSid") + private String appSid; + + @ApiModelProperty("关联sid") + private String linkSid; + + @ApiModelProperty("应用名称") + private String appName; + + @ApiModelProperty("应用名称") + private String cornerNum; + + @ApiModelProperty("版本编码") + private Integer versionCode; + + @ApiModelProperty("版本号") + private String versionName; + + @ApiModelProperty("apk下载地址") + private String updateUrl; + + @ApiModelProperty("版本的更新描述") + private String upgradeInfo; + + @ApiModelProperty("图标地址") + private String iconUrl; + + @ApiModelProperty("资源sid") + private String sourceSid; + + @ApiModelProperty("0.内置Activity 1.内置WebView 2.RePlugin插件") + private String type; + + @ApiModelProperty("插件名称") + private String modulePluginName; + + @ApiModelProperty("包名") + private String sourcePackage; + + @ApiModelProperty("启动模块的动作(0.启动Activity的包名+类名 1.html地址 2.启动Activity的包名+类名)") + private String sourceAction; + + @ApiModelProperty("排序") + private Integer sortNo; + + @ApiModelProperty("地址") + private String moduleAction; +}