吴远 1 month ago
parent
commit
fcdbbd0683
  1. 8
      dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubscribeService.java
  2. 49
      dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSubscribeApiVo.java
  3. 5
      dk-auth/pom.xml
  4. 76
      dk-auth/src/main/java/org/dromara/auth/controller/TokenController.java
  5. 22
      dk-auth/src/main/java/org/dromara/auth/form/CasLoginBody.java
  6. 56
      dk-auth/src/main/java/org/dromara/auth/service/impl/CasAuthStrategy.java
  7. 108
      dk-auth/src/main/java/org/dromara/auth/util/HttpClientUtil.java
  8. 34
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  9. 6
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  10. 5
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java
  11. 5
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  12. 3
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  13. 2
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  14. 60
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  15. 7
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  16. 21
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  17. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  18. 52
      dk-modules/system/src/main/java/org/dromara/system/config/OssTianyiConfig.java
  19. 64
      dk-modules/system/src/main/java/org/dromara/system/controller/system/SubscribeApiController.java
  20. 59
      dk-modules/system/src/main/java/org/dromara/system/domain/SubscribeApi.java
  21. 55
      dk-modules/system/src/main/java/org/dromara/system/domain/bo/SubscribeApiBo.java
  22. 27
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubscribeServiceImpl.java
  23. 51
      dk-modules/system/src/main/java/org/dromara/system/handle/ListTypeHandler.java
  24. 7
      dk-modules/system/src/main/java/org/dromara/system/mapper/SubscribeApiMapper.java
  25. 14
      dk-modules/system/src/main/java/org/dromara/system/service/ISubscribeApiService.java
  26. 51
      dk-modules/system/src/main/java/org/dromara/system/service/impl/ISubscribeApiServiceImpl.java
  27. 126
      dk-modules/system/src/main/java/org/dromara/system/utils/JsonUtil.java
  28. 7
      dk-modules/system/src/main/resources/mapper/system/SubscribeApiMapper.xml
  29. 5
      dk-modules/workflow/src/main/java/org/dromara/workflow/common/enums/ButtonPermissionEnum.java
  30. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java
  31. 23
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

8
dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubscribeService.java

@ -0,0 +1,8 @@
package org.dromara.system.api;
import org.dromara.system.api.domain.vo.RemoteSubscribeApiVo;
public interface RemoteSubscribeService {
RemoteSubscribeApiVo getPrivateKey(String subscribeApiCode);
}

49
dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSubscribeApiVo.java

@ -0,0 +1,49 @@
package org.dromara.system.api.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
@Data
public class RemoteSubscribeApiVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long id;
/**
* 订阅名称
*/
private String subscribeName;
/**
* 订阅编码
*/
private String subscribeCode;
/**
* 订阅人
*/
private List<String> subscribeUser;
/**
* 公钥
*/
private String publicKey;
/**
*私钥
*/
private String privateKey;
/**
*是否开启
*/
private Boolean isEnable;
}

5
dk-auth/pom.xml

@ -86,6 +86,11 @@
<artifactId>api-resource</artifactId> <artifactId>api-resource</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-system</artifactId>
</dependency>
<!-- 自定义负载均衡(多团队开发使用) --> <!-- 自定义负载均衡(多团队开发使用) -->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>--> <!-- <groupId>org.dromara</groupId>-->

76
dk-auth/src/main/java/org/dromara/auth/controller/TokenController.java

@ -4,6 +4,8 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -21,11 +23,13 @@ import org.dromara.auth.form.RegisterBody;
import org.dromara.auth.form.SocialLoginBody; import org.dromara.auth.form.SocialLoginBody;
import org.dromara.auth.service.IAuthStrategy; import org.dromara.auth.service.IAuthStrategy;
import org.dromara.auth.service.SysLoginService; import org.dromara.auth.service.SysLoginService;
import org.dromara.auth.util.HttpClientUtil;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.utils.*; import org.dromara.common.core.utils.*;
import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.encrypt.annotation.ApiEncrypt;
import org.dromara.common.encrypt.utils.EncryptUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.social.config.properties.SocialLoginConfigProperties; import org.dromara.common.social.config.properties.SocialLoginConfigProperties;
@ -33,14 +37,13 @@ import org.dromara.common.social.config.properties.SocialProperties;
import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.social.utils.SocialUtils;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.resource.api.RemoteMessageService; import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.RemoteClientService; import org.dromara.system.api.*;
import org.dromara.system.api.RemoteConfigService;
import org.dromara.system.api.RemoteSocialService;
import org.dromara.system.api.RemoteTenantService;
import org.dromara.system.api.domain.vo.RemoteClientVo; import org.dromara.system.api.domain.vo.RemoteClientVo;
import org.dromara.system.api.domain.vo.RemoteSubscribeApiVo;
import org.dromara.system.api.domain.vo.RemoteTenantVo; import org.dromara.system.api.domain.vo.RemoteTenantVo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
@ -74,6 +77,8 @@ public class TokenController {
private final RemoteSocialService remoteSocialService; private final RemoteSocialService remoteSocialService;
@DubboReference(stub = "true") @DubboReference(stub = "true")
private final RemoteMessageService remoteMessageService; private final RemoteMessageService remoteMessageService;
@DubboReference
private final RemoteSubscribeService remoteSubscribeService;
/** /**
* 登录方法 * 登录方法
@ -238,4 +243,67 @@ public class TokenController {
return R.ok(result); return R.ok(result);
} }
/**
* 负责根据调用方传入的url和参数还有用户名进行免登录执行redirect_url
*/
@PostMapping("/thirdParty/{subscribeApiCode}")
public R<String> getAuthThirdParty(@RequestBody String param, @PathVariable("subscribeApiCode") String subscribeApiCode) {
//根据订阅组和用户获取私钥
RemoteSubscribeApiVo remoteSubscribeApiVo = remoteSubscribeService.getPrivateKey(subscribeApiCode);
//解密
String decrypt = null;
try {
decrypt = EncryptUtils.decryptByRsa(param, remoteSubscribeApiVo.getPrivateKey());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (ObjectUtil.isEmpty(decrypt)){
throw new RuntimeException("解析内容失败,请检查公钥是否正确!");
}
//解析传过来的参数
JSONObject body = JSON.parseObject(decrypt);
if (!remoteSubscribeApiVo.getSubscribeUser().contains(body.getString("username"))){
throw new RuntimeException("当前用户没有权限!");
}
//获取接口请求方式
String method = body.getString("method");
//获取客户端id
String clientId = body.getString("clientId");
// 授权类型和客户端id
RemoteClientVo clientVo = remoteClientService.queryByClientId(clientId);
//获取token
JSONObject result = new JSONObject();
result.put("username", body.getString("username"));
LoginVo loginVo = IAuthStrategy.login(result.toJSONString(), clientVo, "cas");
//构建请求header添加token、header
Map<String,String> header = new HashMap<>();
header.put("Authorization", "Bearer " + loginVo.getAccessToken());
header.put("clientId", clientId);
//发送
try {
switch (method.toLowerCase()){
case "post":
HttpClientUtil.sendPost(body.getString("redirectUrl"),body.toJSONString(),header);
break;
case "get":
HttpClientUtil.sendGet(body.getString("redirectUrl"),header);
break;
}
} catch (IOException e) {
log.error(e.getMessage(),e);
}
return R.ok();
}
} }

22
dk-auth/src/main/java/org/dromara/auth/form/CasLoginBody.java

@ -0,0 +1,22 @@
package org.dromara.auth.form;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.LoginBody;
/**
* 免密登录对象
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CasLoginBody extends LoginBody {
/**
* 用户名
*/
private String username;
}

56
dk-auth/src/main/java/org/dromara/auth/service/impl/CasAuthStrategy.java

@ -0,0 +1,56 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.auth.domain.vo.LoginVo;
import org.dromara.auth.form.CasLoginBody;
import org.dromara.auth.service.IAuthStrategy;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteClientVo;
import org.dromara.system.api.model.LoginUser;
import org.springframework.stereotype.Service;
@Slf4j
@Service("cas" + IAuthStrategy.BASE_NAME)
@RequiredArgsConstructor
public class CasAuthStrategy implements IAuthStrategy{
@DubboReference
private RemoteUserService remoteUserService;
@Override
public LoginVo login(String body, RemoteClientVo client) {
CasLoginBody loginBody = JsonUtils.parseObject(body, CasLoginBody.class);
String tenantId = loginBody.getTenantId();
String username = loginBody.getUsername();
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
return remoteUserService.getUserInfo(username, tenantId);
});
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());
model.setActiveTimeout(client.getActiveTimeout());
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
// 生成token
LoginHelper.login(loginUser, model);
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
loginVo.setClientId(client.getClientId());
return loginVo;
}
}

108
dk-auth/src/main/java/org/dromara/auth/util/HttpClientUtil.java

@ -0,0 +1,108 @@
package org.dromara.auth.util;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.*;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.Map;
public class HttpClientUtil {
// 默认超时时间
private static final int TIMEOUT = 5000;
// 创建默认的 HttpClient
private static CloseableHttpClient createHttpClient() {
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.setSocketTimeout(TIMEOUT)
.build();
return HttpClients.custom()
.setDefaultRequestConfig(config)
.build();
}
// 发送 GET 请求
public static String sendGet(String url, Map<String, String> headers) throws IOException {
HttpGet httpGet = new HttpGet(url);
if (headers != null) {
headers.forEach(httpGet::addHeader);
}
try (CloseableHttpClient httpClient = createHttpClient();
CloseableHttpResponse response = httpClient.execute(httpGet)) {
return handleResponse(response);
}
}
// 发送 POST 请求
public static String sendPost(String url, String body, Map<String, String> headers) throws IOException {
HttpPost httpPost = new HttpPost(url);
if (headers != null) {
headers.forEach(httpPost::addHeader);
}
if (body != null) {
HttpEntity entity = new StringEntity(body, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
}
try (CloseableHttpClient httpClient = createHttpClient();
CloseableHttpResponse response = httpClient.execute(httpPost)) {
return handleResponse(response);
}
}
// 发送 PUT 请求
public static String sendPut(String url, String body, Map<String, String> headers) throws IOException {
HttpPut httpPut = new HttpPut(url);
if (headers != null) {
headers.forEach(httpPut::addHeader);
}
if (body != null) {
HttpEntity entity = new StringEntity(body, ContentType.APPLICATION_JSON);
httpPut.setEntity(entity);
}
try (CloseableHttpClient httpClient = createHttpClient();
CloseableHttpResponse response = httpClient.execute(httpPut)) {
return handleResponse(response);
}
}
// 发送 DELETE 请求
public static String sendDelete(String url, Map<String, String> headers) throws IOException {
HttpDelete httpDelete = new HttpDelete(url);
if (headers != null) {
headers.forEach(httpDelete::addHeader);
}
try (CloseableHttpClient httpClient = createHttpClient();
CloseableHttpResponse response = httpClient.execute(httpDelete)) {
return handleResponse(response);
}
}
// 处理响应
private static String handleResponse(HttpResponse response) throws IOException {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode >= 200 && statusCode < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + statusCode);
}
}
}

34
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java

@ -1,6 +1,7 @@
package org.dromara.business.controller; package org.dromara.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.client.utils.TenantUtil; import com.alibaba.nacos.client.utils.TenantUtil;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -108,27 +109,37 @@ public class BusinessAlertController extends BaseController {
public R saveAlert(@RequestBody BusinessAlertVo vo) { public R saveAlert(@RequestBody BusinessAlertVo vo) {
vo.setBusinessType(2); vo.setBusinessType(2);
BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo); BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo);
return R.ok();
}
/**
* ai实时流预警保存
*/
@Operation(summary ="预警推送-实时预警模块专用",description = "预警推送-实时预警模块专用")
@GetMapping("/pushAlert")
public R pushAlert(Long alertId) {
BusinessAlert businessAlert= businessAlertService.getBusinessAlert(alertId);
RemoteStartProcess startProcess = new RemoteStartProcess(); RemoteStartProcess startProcess = new RemoteStartProcess();
startProcess.setBusinessId(String.valueOf(businessAlert.getId())); startProcess.setBusinessId(String.valueOf(businessAlert.getId()));
startProcess.setFlowCode("alertChz"); startProcess.setFlowCode("alertChz");
remoteWorkflowService.startWorkFlowBatch(List.of(startProcess)); remoteWorkflowService.startWorkFlowBatch(List.of(startProcess));
RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo(); RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo();
remoteNoticeBo.setNoticeTitle(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); remoteNoticeBo.setNoticeTitle(businessAlert.getDeptName()+"产生预警,预警类型["+businessAlert.getLabelCn()+"],请立即查看");
remoteNoticeBo.setNoticeType("3"); remoteNoticeBo.setNoticeType("3");
remoteNoticeBo.setNoticeContent(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); remoteNoticeBo.setNoticeContent(businessAlert.getDeptName()+"产生预警,预警类型["+businessAlert.getLabelCn()+"],请立即查看");
remoteNoticeBo.setStatus("0"); remoteNoticeBo.setStatus("0");
remoteNoticeBo.setIsRead(0); remoteNoticeBo.setIsRead(0);
remoteNoticeBo.setCreateBy(1L); remoteNoticeBo.setCreateBy(1L);
remoteNoticeBo.setCreateDept(1L); remoteNoticeBo.setCreateDept(1L);
remoteNoticeBo.setCreateTime(businessAlert.getCreateTime()); remoteNoticeBo.setCreateTime(businessAlert.getCreateTime());
if (businessAlert.getBusinessType() == 2){ if (businessAlert.getBusinessType() == 2){
businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlert.getImages(), 3600).toString());
} }
remoteNoticeBo.setDeviceSn(vo.getDeviceSn()); remoteNoticeBo.setDeviceSn(businessAlert.getDeviceSn());
businessAlert.setDeviceSn(vo.getDeviceSn()); businessAlert.setDeviceSn(businessAlert.getDeviceSn());
remoteNoticeBo.setParam(JSON.toJSONString(businessAlert)); remoteNoticeBo.setParam(JSON.toJSONString(businessAlert));
remoteNoticeService.saveNotice(remoteNoticeBo); remoteNoticeService.saveNotice(remoteNoticeBo);
remoteSubmailConfigService.remoteCmdSend("smsMultixsend", JSON.toJSONString(vo)); remoteSubmailConfigService.remoteCmdSend("smsMultixsend", JSON.toJSONString(businessAlert));
return R.ok(); return R.ok();
} }
@ -143,4 +154,15 @@ public class BusinessAlertController extends BaseController {
businessAlertService.addBusinessAlertList(alertVoList); businessAlertService.addBusinessAlertList(alertVoList);
return R.ok(); return R.ok();
} }
/**
* 移交预警
*/
@Operation(summary ="移交预警",description = "移交预警")
@PostMapping("/alert/transfer")
public R<Boolean> transferAlert(BusinessAlertVo vo) {
return R.ok(businessAlertService.transferAlert(vo));
}
} }

6
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java

@ -193,6 +193,12 @@ public class BusinessAlert {
*/ */
private Integer handleSource; private Integer handleSource;
/**
* 案件号
*/
private String caseNumber;
/** /**
* 指派人员名称 * 指派人员名称
*/ */

5
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java

@ -242,4 +242,9 @@ public class BusinessAlertBo {
private String aiName; private String aiName;
private Integer businessType; private Integer businessType;
/**
* 案件号
*/
private String caseNumber;
} }

5
dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java

@ -206,4 +206,9 @@ public class BusinessAlertVo implements Serializable {
//1:图片比对预警 2:AI实时预警 //1:图片比对预警 2:AI实时预警
private Integer businessType; private Integer businessType;
private String deviceSn; private String deviceSn;
/**
* 案件号
*/
private String caseNumber;
} }

3
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java

@ -116,4 +116,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
List<Map<String, Object>> listOneDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> listOneDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo);
Integer selectCurrentAlertCount(@Param("currentDate") String currentDate);
void batchUpdateCaseNumber(@Param("list") List<BusinessAlertVo> alertVoList);
} }

2
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java

@ -93,4 +93,6 @@ public interface IBusinessAlertService {
List<BusinessAlert> listHandleHistory(String lng, String lat, String createTime); List<BusinessAlert> listHandleHistory(String lng, String lat, String createTime);
Boolean transferAlert(BusinessAlertVo vo);
BusinessAlert getBusinessAlert(Long alertId);
} }

60
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java

@ -46,6 +46,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -78,6 +79,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public BusinessAlert addBusinessAlert(BusinessAlertVo param) { public BusinessAlert addBusinessAlert(BusinessAlertVo param) {
BusinessAlert alert = MapstructUtils.convert(param, BusinessAlert.class); BusinessAlert alert = MapstructUtils.convert(param, BusinessAlert.class);
alert.setCreateTime(new Date()); alert.setCreateTime(new Date());
alert.setCaseNumber(param.getCaseNumber());
alert.setJobName(alert.getDeptName()+alert.getLabelCn()+ DateUtils.getTime()); alert.setJobName(alert.getDeptName()+alert.getLabelCn()+ DateUtils.getTime());
this.baseMapper.insert(alert); this.baseMapper.insert(alert);
return alert; return alert;
@ -86,6 +88,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
@Override @Override
public void addBusinessAlertList(List<BusinessAlertVo> alertVoList) { public void addBusinessAlertList(List<BusinessAlertVo> alertVoList) {
if(!alertVoList.isEmpty()) { if(!alertVoList.isEmpty()) {
incrementalCount(alertVoList);
List<RemoteStartProcess> remoteStartProcessList = new ArrayList<>(); List<RemoteStartProcess> remoteStartProcessList = new ArrayList<>();
for (BusinessAlertVo alertVo : alertVoList) { for (BusinessAlertVo alertVo : alertVoList) {
alertVo.setBusinessType(2); alertVo.setBusinessType(2);
@ -679,7 +683,39 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
@Override @Override
public void batchUpdateDept(List<BusinessAlertVo> alertVoList) { public void batchUpdateDept(List<BusinessAlertVo> alertVoList) {
//更新部门
this.baseMapper.batchUpdateDept(alertVoList); this.baseMapper.batchUpdateDept(alertVoList);
try {
incrementalCount(alertVoList);
//更新number
this.baseMapper.batchUpdateCaseNumber(alertVoList);
} catch (Exception e) {
log.error(e.getMessage(),e);
}
}
/**
* 创建递归caseNumber
* @param alertVoList
*/
public void incrementalCount(List<BusinessAlertVo> alertVoList){
//查询当天时间有多少条预警
Integer currentCount = this.baseMapper.selectCurrentAlertCount(DateUtils.getDate());
//获取当天的时间戳
String currentDate = DateUtils.getDate().replace("-","");
//然后0 + 个数 + 1 当前年月日 例如 202505150 total + 1
AtomicInteger number = new AtomicInteger(1);
alertVoList.forEach(alertVo -> {
int incremental = currentCount + number.get();
alertVo.setCaseNumber(currentDate + "0" + incremental);
number.getAndIncrement();
});
} }
@ -779,6 +815,30 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return businessAlerts; return businessAlerts;
} }
@Override
public Boolean transferAlert(BusinessAlertVo vo) {
if (ObjectUtil.hasEmpty(vo.getId(),vo.getDeptId(),vo.getDeptName())){
throw new RuntimeException("参数为空!");
}
BusinessAlert businessAlert = this.baseMapper.selectById(vo.getId());
LambdaUpdateWrapper<BusinessAlert> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(BusinessAlert::getId, businessAlert.getId());
wrapper.set(BusinessAlert::getDeptId,vo.getDeptId());
wrapper.set(BusinessAlert::getDeptName,vo.getDeptName());
wrapper.set(BusinessAlert::getJobName,vo.getDeptName() + businessAlert.getLabelCn() + businessAlert.getCreateTime());
return this.baseMapper.update(wrapper) > 0;
}
@Override
public BusinessAlert getBusinessAlert(Long alertId) {
return baseMapper.selectById(alertId);
}
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(getLastSixDays()); System.out.println(getLastSixDays());

7
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java

@ -282,7 +282,12 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
// } // }
//----------------------------------------------获取飞行总架次、总时长---------------------------------------------- //----------------------------------------------获取飞行总架次、总时长----------------------------------------------
Map<String, Integer> devices = feignDeviceGroup.getDevices(); Map<String, Integer> devices = new HashMap<>();
try {
devices = feignDeviceGroup.getDevices();
} catch (Exception e) {
log.error(e.getMessage(),e);
}
Map<String, Object> panel = baseMapper.countPanelAlert(businessAlertBo); Map<String, Object> panel = baseMapper.countPanelAlert(businessAlertBo);

21
dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml

@ -915,5 +915,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<![CDATA[ ST_Distance_Sphere(POINT(lng, lat), POINT(ba.lng, ba.lat)) <= 30 ]]> <![CDATA[ ST_Distance_Sphere(POINT(lng, lat), POINT(ba.lng, ba.lat)) <= 30 ]]>
</select> </select>
<select id="selectCurrentAlertCount" resultType="java.lang.Integer">
SELECT
IFNULL( count( 1 ), 0 )
FROM
business_alert ba
WHERE
DATE_FORMAT( ba.create_time, '%Y-%m-%d' ) = #{currentDate} and ba.del_flag = '0'
</select>
<update id="batchUpdateCaseNumber">
UPDATE business_alert
SET
case_number =
<foreach collection="list" item="item" separator=" " open="CASE id" close="END">
WHEN #{item.id} THEN #{item.caseNumber}
</foreach>
WHERE id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
</mapper> </mapper>

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java

@ -292,7 +292,7 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
DateTimeFormatter formatterS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatterS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化当前日期 // 格式化当前日期
String formattedDate = currentDate.format(formatter); String formattedDate = currentDate.format(formatter);
List<DeviceQrtzFileEntity> qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>().eq("device_sn", device.getDeviceSn()).eq("exec_date", formattedDate).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort")); List<DeviceQrtzFileEntity> qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>().eq("device_sn", qrtzEntityList.get(0).getDeviceSn()).eq("exec_date", formattedDate).eq("qrtz_id",qrtzEntityList.get(0).getId()).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort"));
if (!qrtzFileEntityList.isEmpty()) { if (!qrtzFileEntityList.isEmpty()) {
DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0); DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0);
List<DeviceQrtzDateEntity> qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzFileEntity.getQrtzId()); List<DeviceQrtzDateEntity> qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzFileEntity.getQrtzId());

52
dk-modules/system/src/main/java/org/dromara/system/config/OssTianyiConfig.java

@ -1,6 +1,9 @@
package org.dromara.system.config; package org.dromara.system.config;
import io.minio.MinioClient; import io.minio.MinioClient;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -12,51 +15,23 @@ import org.springframework.context.annotation.Configuration;
*/ */
@Configuration @Configuration
@ConfigurationProperties(prefix = "osstianyi") @ConfigurationProperties(prefix = "osstianyi")
@Getter
@Setter
public class OssTianyiConfig public class OssTianyiConfig
{ {
@Value("${osstianyi.endPoint:https://jiangsu-10.zos.ctyun.cn}")
private String endPoint; private String endPoint;
private String accessKey;
private String secretKey;
private String bucketName;
public String getEndPoint() {
return endPoint;
}
public void setEndPoint(String endPoint) {
this.endPoint = endPoint;
}
public String getAccessKey()
{
return accessKey;
}
public void setAccessKey(String accessKey)
{
this.accessKey = accessKey;
}
public String getSecretKey() @Value("${osstianyi.accessKey:22e3f37368a242b38f4f25d98c9baf1f}")
{ private String accessKey;
return secretKey;
}
public void setSecretKey(String secretKey) @Value("${osstianyi.secretKey:0d858850666248e59830d9a596847062}")
{ private String secretKey;
this.secretKey = secretKey;
}
public String getBucketName() @Value("${osstianyi.bucketName:dkossbucket}")
{ private String bucketName;
return bucketName;
}
public void setBucketName(String bucketName)
{
this.bucketName = bucketName;
}
@Override @Override
public String toString() { public String toString() {
@ -71,9 +46,6 @@ public class OssTianyiConfig
@Bean @Bean
public MinioClient getMinioClient() public MinioClient getMinioClient()
{ {
// System.out.println("OssTianyiConfig");
// System.out.println("OssTianyiConfig" + endPoint);
System.out.println(toString());
return MinioClient.builder().endpoint(endPoint).credentials(accessKey, secretKey).build(); return MinioClient.builder().endpoint(endPoint).credentials(accessKey, secretKey).build();
} }
} }

64
dk-modules/system/src/main/java/org/dromara/system/controller/system/SubscribeApiController.java

@ -0,0 +1,64 @@
package org.dromara.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.validation.constraints.NotEmpty;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.encrypt.utils.EncryptUtils;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.SubscribeApi;
import org.dromara.system.domain.bo.SubscribeApiBo;
import org.dromara.system.service.ISubscribeApiService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/subscribe")
public class SubscribeApiController extends BaseController {
private final ISubscribeApiService iSubscribeApiService;
@Log(title = "订阅添加", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<SubscribeApi> add(@Validated(AddGroup.class) @RequestBody SubscribeApiBo bo) {
return R.ok(iSubscribeApiService.addSubscribeApi(bo));
}
@Log(title = "订阅编辑", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<SubscribeApi> edit(@Validated(EditGroup.class) @RequestBody SubscribeApiBo bo) {
return R.ok(iSubscribeApiService.editSubscribeApi(bo));
}
@Log(title = "订阅删除", businessType = BusinessType.DELETE)
@DeleteMapping("/delete/{id}")
public R<Boolean> remove(@PathVariable Long id) {
return R.ok(iSubscribeApiService.deleteSubscribeApi(id));
}
/**
* 生成秘钥(公钥和私钥)
*/
@GetMapping("/generate")
public R<Map<String,String>> generateRsaKey() {
return R.ok(EncryptUtils.generateRsaKey());
}
}

59
dk-modules/system/src/main/java/org/dromara/system/domain/SubscribeApi.java

@ -0,0 +1,59 @@
package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.dromara.system.handle.ListTypeHandler;
import java.util.List;
/**
* 第三方接口订阅类
*/
@Data
@TableName(value = "subscribe_api",autoResultMap = true)
public class SubscribeApi {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 订阅名称
*/
@TableField(value = "subscribe_name")
private String subscribeName;
/**
* 订阅编码
*/
@TableField(value = "subscribe_code")
private String subscribeCode;
/**
* 订阅人
*/
@TableField(value = "subscribe_user",typeHandler = ListTypeHandler.class)
private List<String> subscribeUser;
/**
* 公钥
*/
@TableField(value = "public_key")
private String publicKey;
/**
*私钥
*/
@TableField(value = "private_key")
private String privateKey;
/**
*是否开启
*/
@TableField(value = "is_enable")
private Boolean isEnable;
}

55
dk-modules/system/src/main/java/org/dromara/system/domain/bo/SubscribeApiBo.java

@ -0,0 +1,55 @@
package org.dromara.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.system.domain.SubscribeApi;
import java.util.List;
@Data
@AutoMapper(target = SubscribeApi.class, reverseConvertGenerate = false)
public class SubscribeApiBo {
private Long id;
/**
* 订阅名称
*/
@NotNull(message = "订阅名称不能为空", groups = { EditGroup.class, AddGroup.class })
private String subscribeName;
/**
* 订阅编码
*/
@NotNull(message = "订阅编码不能为空", groups = { EditGroup.class, AddGroup.class })
private String subscribeCode;
/**
* 订阅人
*/
private List<String> subscribeUser;
/**
* 公钥
*/
@NotNull(message = "公钥不能为空", groups = { EditGroup.class, AddGroup.class })
private String publicKey;
/**
*私钥
*/
@NotNull(message = "私钥不能为空", groups = { EditGroup.class, AddGroup.class })
private String privateKey;
/**
*是否开启
*/
private Boolean isEnable;
}

27
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubscribeServiceImpl.java

@ -0,0 +1,27 @@
package org.dromara.system.dubbo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.system.api.RemoteSubscribeService;
import org.dromara.system.api.domain.vo.RemoteSubscribeApiVo;
import org.dromara.system.domain.SubscribeApi;
import org.dromara.system.service.ISubscribeApiService;
import org.springframework.stereotype.Service;
@RequiredArgsConstructor
@Service
@DubboService
public class RemoteSubscribeServiceImpl implements RemoteSubscribeService {
private final ISubscribeApiService subscribeApiService;
@Override
public RemoteSubscribeApiVo getPrivateKey(String subscribeApiCode) {
SubscribeApi subscribeApi = subscribeApiService.getPrivateKey(subscribeApiCode);
return MapstructUtils.convert(subscribeApi, RemoteSubscribeApiVo.class);
}
}

51
dk-modules/system/src/main/java/org/dromara/system/handle/ListTypeHandler.java

@ -0,0 +1,51 @@
package org.dromara.system.handle;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
import org.dromara.system.utils.JsonUtil;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@MappedJdbcTypes(JdbcType.VARCHAR) // 数据库类型
@MappedTypes({List.class}) // java数据类型
public class ListTypeHandler implements TypeHandler<List<String>> {
@Override
public void setParameter(PreparedStatement preparedStatement, int i, List<String> alertTypeList, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, JsonUtil.toJson(alertTypeList));
}
@Override
public List<String> getResult(ResultSet resultSet, String s) throws SQLException {
if (StringUtils.isBlank(resultSet.getString(s))) {
return new ArrayList<>();
}
return JsonUtil.jsonToList(resultSet.getString(s), String.class);
}
@Override
public List<String> getResult(ResultSet resultSet, int i) throws SQLException {
if (StringUtils.isBlank(resultSet.getString(i))) {
return new ArrayList<>();
}
return JsonUtil.jsonToList(resultSet.getString(i), String.class);
}
@Override
public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException {
String value = callableStatement.getString(i);
if (StringUtils.isBlank(value)) {
return new ArrayList<>();
}
return JsonUtil.jsonToList(value, String.class);
}
}

7
dk-modules/system/src/main/java/org/dromara/system/mapper/SubscribeApiMapper.java

@ -0,0 +1,7 @@
package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.system.domain.SubscribeApi;
public interface SubscribeApiMapper extends BaseMapper<SubscribeApi> {
}

14
dk-modules/system/src/main/java/org/dromara/system/service/ISubscribeApiService.java

@ -0,0 +1,14 @@
package org.dromara.system.service;
import org.dromara.system.domain.SubscribeApi;
import org.dromara.system.domain.bo.SubscribeApiBo;
public interface ISubscribeApiService {
SubscribeApi addSubscribeApi(SubscribeApiBo bo);
SubscribeApi editSubscribeApi(SubscribeApiBo bo);
Boolean deleteSubscribeApi(Long id);
SubscribeApi getPrivateKey(String subscribeApiCode);
}

51
dk-modules/system/src/main/java/org/dromara/system/service/impl/ISubscribeApiServiceImpl.java

@ -0,0 +1,51 @@
package org.dromara.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.system.domain.SubscribeApi;
import org.dromara.system.domain.bo.SubscribeApiBo;
import org.dromara.system.mapper.SubscribeApiMapper;
import org.dromara.system.service.ISubscribeApiService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ISubscribeApiServiceImpl extends ServiceImpl<SubscribeApiMapper,SubscribeApi> implements ISubscribeApiService {
@Override
public SubscribeApi addSubscribeApi(SubscribeApiBo bo) {
SubscribeApi convert = MapstructUtils.convert(bo, SubscribeApi.class);
this.baseMapper.insert(convert);
return convert;
}
@Override
public SubscribeApi editSubscribeApi(SubscribeApiBo bo) {
SubscribeApi subscribeApi = this.baseMapper.selectById(bo.getId());
BeanUtils.copyProperties(bo, subscribeApi);
this.baseMapper.updateById(subscribeApi);
return subscribeApi;
}
@Override
public Boolean deleteSubscribeApi(Long id) {
return this.baseMapper.deleteById(id) > 0;
}
@Override
public SubscribeApi getPrivateKey(String subscribeApiCode) {
LambdaQueryWrapper<SubscribeApi> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SubscribeApi::getSubscribeCode, subscribeApiCode);
return this.baseMapper.selectOne(wrapper);
}
}

126
dk-modules/system/src/main/java/org/dromara/system/utils/JsonUtil.java

@ -0,0 +1,126 @@
package org.dromara.system.utils;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 定义响应结构
*/
public class JsonUtil {
private static ObjectMapper MAPPER;
static{
MAPPER=new ObjectMapper();
}
/**
* 将对象转换成json字符串
* @param data
* @return
*/
public static String toJson(Object data){
String string = null;
try {
string = MAPPER.writeValueAsString(data);
if(StringUtils.isEmpty(string)){
return null;
}
return string;
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
/**
* 将json结果集转化为对象
*
* @param jsonData json数据
* @return
*/
public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
try {
T t = MAPPER.readValue(jsonData, beanType);
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json数据转换成pojo对象list
* <p>Title: jsonToList</p>
* <p>Description: </p>
* @param jsonData
* @param beanType
* @return
*/
public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将Object对象里面的属性和值转化成Map对象
*
* @param obj
* @return
* @throws IllegalAccessException
*/
public static Map<String, Object> objectToMap(Object obj){
try {
Map<String, Object> map = new HashMap<String,Object>();
Class<?> clazz = obj.getClass();
for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
String fieldName = field.getName();
if(ObjectUtil.isNotEmpty(field.get(obj))){
Object value = field.get(obj);
map.put(fieldName, value);
}else{
map.put(fieldName, "");
}
}
return map;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static Map<String, Object> jsonToMap(String json){
try {
return MAPPER.readValue(json, new TypeReference<Map<String, Object>>(){});
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
public static LinkedHashMap<String, String> jsonToStrMap(String json){
try {
return MAPPER.readValue(json, new TypeReference<LinkedHashMap<String, String>>(){});
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
}

7
dk-modules/system/src/main/resources/mapper/system/SubscribeApiMapper.xml

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SubscribeApiMapper">
</mapper>

5
dk-modules/workflow/src/main/java/org/dromara/workflow/common/enums/ButtonPermissionEnum.java

@ -53,6 +53,11 @@ public enum ButtonPermissionEnum implements NodeExtEnum {
*/ */
TASK_DISPOSE("任务处置","taskDispose",false), TASK_DISPOSE("任务处置","taskDispose",false),
/**
* 是否能移交
*/
TRANSFER("是否能移交", "transfer", false),
/** /**
* 忽略 * 忽略
*/ */

2
dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java

@ -43,7 +43,7 @@ public class BackProcessBo implements Serializable {
/** /**
* 驳回的节点id(目前未使用直接驳回到申请人) * 驳回的节点id(目前未使用直接驳回到申请人)
*/ */
@NotBlank(message = "驳回的节点不能为空", groups = AddGroup.class) // @NotBlank(message = "驳回的节点不能为空", groups = AddGroup.class)
private String nodeCode; private String nodeCode;
/** /**

23
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@ -497,9 +497,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
public boolean backProcess(BackProcessBo bo) { public boolean backProcess(BackProcessBo bo) {
try { try {
Long taskId = bo.getTaskId(); Long taskId = bo.getTaskId();
String notice = bo.getNotice(); // String notice = bo.getNotice();
List<String> messageType = bo.getMessageType(); String notice = "您有一条流程被退回!";
// List<String> messageType = bo.getMessageType();
List<String> messageType = List.of("1");
String message = bo.getMessage(); String message = bo.getMessage();
if (ObjectUtil.isEmpty(message)){
message = "退回";
}
FlowTask task = flowTaskMapper.selectById(taskId); FlowTask task = flowTaskMapper.selectById(taskId);
if (ObjectUtil.isNull(task)) { if (ObjectUtil.isNull(task)) {
throw new ServiceException("任务不存在!"); throw new ServiceException("任务不存在!");
@ -508,13 +513,19 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
BusinessStatusEnum.checkBackStatus(inst.getFlowStatus()); BusinessStatusEnum.checkBackStatus(inst.getFlowStatus());
Long definitionId = task.getDefinitionId(); Long definitionId = task.getDefinitionId();
Definition definition = defService.getById(definitionId); Definition definition = defService.getById(definitionId);
String applyNodeCode = flwCommonService.applyNodeCode(definitionId); //获取当前节点
String currentNodeCode = inst.getNodeCode();
//获取返回节点
Node skipNode = getBackTaskNode(definitionId, currentNodeCode).getFirst();
FlowParams flowParams = FlowParams.build(); FlowParams flowParams = FlowParams.build();
flowParams.nodeCode(bo.getNodeCode()); flowParams.nodeCode(skipNode.getNodeCode());
flowParams.message(message); flowParams.message(message);
flowParams.skipType(SkipType.REJECT.getKey()); flowParams.skipType(SkipType.REJECT.getKey());
flowParams.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus()) flowParams.flowStatus(TaskStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.BACK.getStatus());
.hisStatus(TaskStatusEnum.BACK.getStatus());
// flowParams.flowStatus(skipNode.getNodeCode().equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus())
// .hisStatus(TaskStatusEnum.BACK.getStatus());
flowParams.hisTaskExt(bo.getFileId()); flowParams.hisTaskExt(bo.getFileId());
taskService.skip(task.getId(), flowParams); taskService.skip(task.getId(), flowParams);

Loading…
Cancel
Save