包头bug修改

This commit is contained in:
guoshengxiong 2025-03-24 10:31:01 +08:00
parent 4e372d7841
commit e790288bfc
4 changed files with 149 additions and 35 deletions

View File

@ -0,0 +1,146 @@
package com.wflow.controller;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wflow.bean.entity.WflowModelHistorys;
import com.wflow.bean.entity.WflowModels;
import com.wflow.mapper.WflowModelHistorysMapper;
import com.wflow.mapper.WflowModelsMapper;
import com.wflow.service.CustomListenService;
import com.wflow.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 自定义接口
*/
@RestController
@RequestMapping("wflow/custom")
@Slf4j
public class CustomController {
//捕获node分组
Pattern nodePattern = Pattern.compile("(node_\\d{12})");
//捕获field分组
Pattern fieldPattern = Pattern.compile("(field\\d{13})");
@Autowired
private CustomListenService customListenService;
@Lazy
@Autowired
private WflowModelsMapper wflowModelsMapper;
@Lazy
@Autowired
private WflowModelHistorysMapper wflowModelHistorysMapper;
/**
* 随机生成数字
*
* @param num 位数
* @return
*/
private static String getRandomNum(int num) {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num; i++) {
int digit = random.nextInt(10);
sb.append(digit);
}
return sb.toString();
}
/**
* 保存抄送人单位和时间在抄送流程后面配置触发器使用这是工程质量控制点检查检测通知单
*
* @param instanceId
* @return
*/
@GetMapping("saveCcmeAndDate")
public Object saveCcmeAndDate(@RequestParam String instanceId, @RequestParam String ccMeField, @RequestParam String dateField) {
customListenService.saveCcmeAndDate(instanceId, ccMeField, dateField);
return R.ok("修改成功");
}
/**
* 复制一个流程
*/
@PostMapping("copyProcess")
public Object copyProcess(@RequestBody HashMap<String, Object> param) {
String fromCode = MapUtil.getStr(param, "fromCode");
String toCode = MapUtil.getStr(param, "toCode");
WflowModels fromMode = wflowModelsMapper.selectOne(new LambdaQueryWrapper<WflowModels>()
.eq(WflowModels::getFormId, fromCode));
log.info("fromMode{}", JSON.toJSONString(fromMode));
List<WflowModelHistorys> historys = wflowModelHistorysMapper.selectList(new LambdaQueryWrapper<WflowModelHistorys>()
.eq(WflowModelHistorys::getFormId, toCode));
Optional<WflowModelHistorys> first = historys.stream().sorted((o1, o2) -> o2.getVersion().compareTo(o1.getVersion())).findFirst();
String formItems = fromMode.getFormItems();
String formConfig = fromMode.getFormConfig();
String process = fromMode.getProcess();
String processConfig = fromMode.getProcessConfig();
WflowModelHistorys toModel = first.get();
log.info("oldToModel{}", JSON.toJSONString(toModel));
Set<String> fields = getMatcherSet(formItems, fieldPattern);
fields.addAll(getMatcherSet(formConfig, fieldPattern));
fields.addAll(getMatcherSet(process, fieldPattern));
fields.addAll(getMatcherSet(processConfig, fieldPattern));
Set<String> nodes = getMatcherSet(formItems, nodePattern);
nodes.addAll(getMatcherSet(formConfig, nodePattern));
nodes.addAll(getMatcherSet(process, nodePattern));
nodes.addAll(getMatcherSet(processConfig, nodePattern));
StringBuilder fieldSb = new StringBuilder();
StringBuilder nodeSb = new StringBuilder();
for (String field : fields) {
String randomNum = getRandomNum(13);
String replacement = "field" + randomNum;
formItems = formItems.replace(field, replacement);
formConfig = formConfig.replace(field, replacement);
process = process.replace(field, replacement);
processConfig = processConfig.replace(field, replacement);
fieldSb.append(field).append("=>").append(replacement).append("#");
}
for (String node : nodes) {
String randomNum = getRandomNum(12);
String replacement = "node" + "_" + randomNum;
formItems = formItems.replace(node, replacement);
formConfig = formConfig.replace(node, replacement);
process = process.replace(node, replacement);
processConfig = processConfig.replace(node, replacement);
nodeSb.append(node).append("=>").append(replacement).append("#");
}
toModel.setFormItems(formItems);
toModel.setFormConfig(formConfig);
toModel.setProcess(process);
toModel.setProcessConfig(processConfig);
log.info("newToModel{}", JSON.toJSONString(toModel));
log.info("变化FIELD{}", fieldSb.toString());
log.info("变化NODE{}", nodeSb.toString());
wflowModelHistorysMapper.updateById(toModel);
return R.ok("成功");
}
/**
* 获取匹配的字符串列表
*
* @param str
* @param pattern
* @return
*/
private Set<String> getMatcherSet(String str, Pattern pattern) {
Set<String> fields = new HashSet<>();
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
String idValue = matcher.group(1);
fields.add(idValue);
}
return fields;
}
}

View File

@ -1,33 +0,0 @@
package com.wflow.controller;
import com.wflow.service.CustomListenService;
import com.wflow.utils.R;
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;
/**
* @author : willian fu
* @date : 2023/11/26
*/
@RestController
@RequestMapping("wflow/custom")
public class CustomListenController {
@Autowired
private CustomListenService customListenService;
/**
* 保存抄送人单位和时间在抄送流程后面配置触发器使用这是工程质量控制点检查检测通知单
*
* @param instanceId
* @return
*/
@GetMapping("saveCcmeAndDate")
public Object saveCcmeAndDate(@RequestParam String instanceId, @RequestParam String ccMeField, @RequestParam String dateField) {
customListenService.saveCcmeAndDate(instanceId, ccMeField, dateField);
return R.ok("修改成功");
}
}

View File

@ -64,7 +64,7 @@ public class ProcessInstanceController {
* @param pageNo 页码
* @param code 表单流程ID流程定义KEY
* @param finished 流程是否已经结束
* @param customStatus 1待催办2已办结3审批进行中4审批被撤销5审批被驳回
* @param customStatus 1待催办2已办结3审批进行中4审批被撤销5审批被驳回6审批通过
* @return 列表数据
*/
@OperLog(operModul = "审批管理",operType = "获取系统待我处理的流程",operDesc = "获取系统待我处理的流程")

View File

@ -437,10 +437,11 @@ public class ProcessInstanceServiceImpl implements ProcessInstanceService {
instanceQuery.or().processInstanceBusinessStatusLike("PRE%").endOr();
}
Executor.builder()
//customStatus 1待催办2已办结3审批进行中4审批被撤销5审批被驳回
//customStatus 1待催办2已办结3审批进行中4审批被撤销5审批被驳回6审批通过
.ifTrueNext(Objects.equals(customStatus, 1), instanceQuery::unfinished)
.ifTrueNext(Objects.equals(customStatus, 3), instanceQuery::unfinished)
.ifNotBlankNext(Objects.equals(customStatus, 5) ? ProcessStatus.REFUSE.toString() : null, instanceQuery::processInstanceBusinessStatus)
.ifNotBlankNext(Objects.equals(customStatus, 6) ? ProcessStatus.PRE_PASS.toString() : null, instanceQuery::processInstanceBusinessStatus)
.ifNotBlankNext(startUser, instanceQuery::startedBy)
.ifNotBlankNext(code, instanceQuery::processDefinitionKey)
.ifTrueNext(null != startTimes && startTimes.length > 1, () -> {