diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java index 4be1ec1..dbf88c8 100644 --- a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java @@ -1,5 +1,7 @@ package org.dromara.system.api; +import java.util.List; + /** * 配置服务 * @@ -21,4 +23,6 @@ public interface RemoteConfigService { */ String selectStreamIp(); + +// List selectStreamType(String deviceSn); } diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java new file mode 100644 index 0000000..af7661f --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java @@ -0,0 +1,10 @@ +package org.dromara.system.api; + +import org.dromara.system.api.domain.bo.RemoteNoticeBo; +import org.dromara.system.api.domain.vo.RemotePostVo; + +import java.util.List; + +public interface RemoteNoticeService { + int saveNotice(RemoteNoticeBo bo); +} diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubmailConfigService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubmailConfigService.java new file mode 100644 index 0000000..4bc2563 --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubmailConfigService.java @@ -0,0 +1,20 @@ +package org.dromara.system.api; + +import org.dromara.common.core.domain.R; +import org.dromara.system.api.domain.vo.RemoteClientVo; + +/** + * 客户端服务 + * + * @author Michelle.Chung + */ +public interface RemoteSubmailConfigService { + + /** + * 根据客户端id获取客户端详情 + * + * @return 客户端对象 + */ + R remoteCmdSend(String code, String multiParam ); + +} diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubscribeService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubscribeService.java new file mode 100644 index 0000000..9a2f9a0 --- /dev/null +++ b/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); + +} diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java new file mode 100644 index 0000000..9ff720f --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java @@ -0,0 +1,74 @@ +package org.dromara.system.api.domain.bo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * 操作日志记录表 oper_log + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class RemoteNoticeBo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long noticeId; + + + /** + * 公告标题 + */ + private String noticeTitle; + + /** + * 公告类型(1通知 2公告) + */ + private String noticeType; + + /** + * 公告内容 + */ + private String noticeContent; + + /** + * 公告状态(0正常 1关闭) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + private Integer isRead; + /** + * 创建部门 + */ + + private Long createDept; + + /** + * 创建者 + */ + + private Long createBy; + private String deviceSn; + + /** + * 创建时间 + */ + private Date createTime; + + private String param; + + +} diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSubscribeApiVo.java b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSubscribeApiVo.java new file mode 100644 index 0000000..8ac4002 --- /dev/null +++ b/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 subscribeUser; + + /** + * 公钥 + */ + private String publicKey; + + /** + *私钥 + */ + private String privateKey; + + /** + *是否开启 + */ + private Boolean isEnable; + + +} diff --git a/dk-auth/pom.xml b/dk-auth/pom.xml index 9a64994..585d0ec 100644 --- a/dk-auth/pom.xml +++ b/dk-auth/pom.xml @@ -86,6 +86,11 @@ api-resource + + org.dromara + api-system + + diff --git a/dk-auth/src/main/java/org/dromara/auth/controller/TokenController.java b/dk-auth/src/main/java/org/dromara/auth/controller/TokenController.java index 0930841..e192e64 100644 --- a/dk-auth/src/main/java/org/dromara/auth/controller/TokenController.java +++ b/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.collection.CollUtil; 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.tags.Tag; 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.service.IAuthStrategy; import org.dromara.auth.service.SysLoginService; +import org.dromara.auth.util.HttpClientUtil; import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.utils.*; 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.satoken.utils.LoginHelper; 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.tenant.helper.TenantHelper; import org.dromara.resource.api.RemoteMessageService; -import org.dromara.system.api.RemoteClientService; -import org.dromara.system.api.RemoteConfigService; -import org.dromara.system.api.RemoteSocialService; -import org.dromara.system.api.RemoteTenantService; +import org.dromara.system.api.*; 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.springframework.web.bind.annotation.*; +import java.io.IOException; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.HashMap; @@ -74,6 +77,8 @@ public class TokenController { private final RemoteSocialService remoteSocialService; @DubboReference(stub = "true") private final RemoteMessageService remoteMessageService; + @DubboReference + private final RemoteSubscribeService remoteSubscribeService; /** * 登录方法 @@ -238,4 +243,67 @@ public class TokenController { return R.ok(result); } + /** + * 负责根据调用方传入的url和参数,还有用户名进行免登录执行redirect_url + */ + @PostMapping("/thirdParty/{subscribeApiCode}") + public R 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 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(); + } + } diff --git a/dk-auth/src/main/java/org/dromara/auth/form/CasLoginBody.java b/dk-auth/src/main/java/org/dromara/auth/form/CasLoginBody.java new file mode 100644 index 0000000..d2924d9 --- /dev/null +++ b/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; + + +} diff --git a/dk-auth/src/main/java/org/dromara/auth/service/impl/CasAuthStrategy.java b/dk-auth/src/main/java/org/dromara/auth/service/impl/CasAuthStrategy.java new file mode 100644 index 0000000..4360b85 --- /dev/null +++ b/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; + } +} diff --git a/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java b/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java index 3b7efe8..e8cb35b 100644 --- a/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java +++ b/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java @@ -83,18 +83,6 @@ public class PasswordAuthStrategy implements IAuthStrategy { model.setActiveTimeout(client.getActiveTimeout()); model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId()); - //获取设备权限 - List deviceList = new ArrayList<>(); - - try { - deviceList = feignDeviceGroup.listDevice(loginUser.getUserId()); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - - - loginUser.setDeviceList(deviceList); - // 生成token LoginHelper.login(loginUser, model); diff --git a/dk-auth/src/main/java/org/dromara/auth/util/HttpClientUtil.java b/dk-auth/src/main/java/org/dromara/auth/util/HttpClientUtil.java new file mode 100644 index 0000000..ddf2249 --- /dev/null +++ b/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 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 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 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 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); + } + } +} diff --git a/dk-common/common-bom/pom.xml b/dk-common/common-bom/pom.xml index 7cbb10a..6324395 100644 --- a/dk-common/common-bom/pom.xml +++ b/dk-common/common-bom/pom.xml @@ -257,6 +257,13 @@ ${revision} + + + org.dromara + common-rocketmq + ${revision} + + diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java index d63bcc3..4c57050 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java @@ -142,4 +142,17 @@ public enum DeviceEnum { return Arrays.stream(values()).filter(device -> device.getDevice().equals(finalKey)) .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey1)); } + + /* @JsonCreator + public static DeviceEnum findKey(String key) { + if(StringUtils.isEmpty(key)){ + key = DeviceEnum.M3TD.getDevice(); + } + String finalKey = key; + String finalKey1 = key; + return Arrays.stream(values()).filter(device -> device.toString().equals(finalKey)) + .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey1)); + }*/ + + } diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeVideoEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeVideoEnum.java new file mode 100644 index 0000000..f3ce4d4 --- /dev/null +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeVideoEnum.java @@ -0,0 +1,39 @@ +package org.dromara.common.sdk.cloudapi.device; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.media.Schema; +import org.dromara.common.sdk.exception.CloudSDKException; + +import java.util.Arrays; + +/** + * @author sean + * @version 1.7 + * @date 2023/5/26 + */ +@Schema(description = "DeviceTypeVideoEnum", enumAsRef = true) +public enum DeviceTypeVideoEnum { + + ZERO(0), + SEVEN(7); + + ; + + private final int videoType; + + DeviceTypeVideoEnum(int videoType) { + this.videoType = videoType; + } + + @JsonValue + public int getVideoType() { + return videoType; + } + + @JsonCreator + public static DeviceTypeVideoEnum find(int videoType) { + return Arrays.stream(values()).filter(typeEnum -> typeEnum.videoType == videoType).findAny() + .orElseThrow(() -> new CloudSDKException(DeviceTypeVideoEnum.class, videoType)); + } +} diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java new file mode 100644 index 0000000..c851c1c --- /dev/null +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java @@ -0,0 +1,80 @@ +package org.dromara.common.sdk.cloudapi.device; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.media.Schema; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.sdk.exception.CloudSDKException; + +import java.util.Arrays; + +/** + * @author sean + * @version 1.7 + * @date 2023/5/19 + */ +@Schema(description = "device model key.", format = "domain-type-subType", enumAsRef = true, example = "0-89-0") +public enum DeviceVideoEnum { + + + DOCK(DeviceTypeEnum.DOCK_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.SEVEN), + + DJIDock2(DeviceTypeEnum.DOCK_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.SEVEN), + + DOCK3(DeviceTypeEnum.DOCK_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.SEVEN), + Matrice30(DeviceTypeEnum.M30_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + Matrice30T(DeviceTypeEnum.M30T_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + M3D(DeviceTypeEnum.M3D_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + M3TD(DeviceTypeEnum.M3TD_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + M4D(DeviceTypeEnum.M4D_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + M4TD(DeviceTypeEnum.M4TD_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + ; + + + @Schema(enumAsRef = true) + private final DeviceTypeEnum type; + + @Schema(enumAsRef = true) + private final DeviceSubTypeEnum subType; + + @Schema(enumAsRef = true) + private final DeviceTypeVideoEnum videoType; + + DeviceVideoEnum(DeviceTypeEnum type, DeviceSubTypeEnum subType, DeviceTypeVideoEnum videoType) { + this.type = type; + this.subType = subType; + this.videoType = videoType; + } + + public DeviceTypeEnum getType() { + return type; + } + + public DeviceSubTypeEnum getSubType() { + return subType; + } + + public DeviceTypeVideoEnum getVideoType() { + return videoType; + } + + @JsonValue + public String getDevice() { + return String.format("%s-%s-%s", type.getType(), subType.getSubType(),videoType.getVideoType()); + } + + + @JsonCreator + public static DeviceVideoEnum find(String key) { + String finalKey = key.replaceAll(" ",""); + return Arrays.stream(values()).filter(device -> device.toString().equals(finalKey)) + .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey)); + } + + +} diff --git a/dk-common/common-core/src/main/java/org/dromara/common/core/service/DictService.java b/dk-common/common-core/src/main/java/org/dromara/common/core/service/DictService.java index 9f2632f..021800e 100644 --- a/dk-common/common-core/src/main/java/org/dromara/common/core/service/DictService.java +++ b/dk-common/common-core/src/main/java/org/dromara/common/core/service/DictService.java @@ -60,4 +60,7 @@ public interface DictService { * @return dictValue为key,dictLabel为值组成的Map */ Map getAllDictByDictType(String dictType); + + //获取字典下所有的字典值与标签 (key: 字典标签, value:字典键值) + Map getAllDictMapByDictType(String dictType); } diff --git a/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java b/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java index dd6ebb1..46bccfd 100644 --- a/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java +++ b/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java @@ -24,6 +24,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { public static final String SLASH = "/"; + public static final String DASH = "-"; + /** * 获取参数不为空值 * diff --git a/dk-common/common-dict/src/main/java/org/dromara/common/dict/service/impl/DictServiceImpl.java b/dk-common/common-dict/src/main/java/org/dromara/common/dict/service/impl/DictServiceImpl.java index 62a5d45..7453946 100644 --- a/dk-common/common-dict/src/main/java/org/dromara/common/dict/service/impl/DictServiceImpl.java +++ b/dk-common/common-dict/src/main/java/org/dromara/common/dict/service/impl/DictServiceImpl.java @@ -86,4 +86,9 @@ public class DictServiceImpl implements DictService { return StreamUtils.toMap(list, RemoteDictDataVo::getDictValue, RemoteDictDataVo::getDictLabel); } + @Override + public Map getAllDictMapByDictType(String dictType) { + List list = remoteDictService.selectDictDataByType(dictType); + return StreamUtils.toMap(list, RemoteDictDataVo::getDictLabel, RemoteDictDataVo::getDictValue); + } } diff --git a/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java b/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java index 8e34843..bc7628e 100644 --- a/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java +++ b/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java @@ -175,6 +175,10 @@ public class EncryptUtils { return keyMap; } + public static void main(String[] args) { + Map map = generateRsaKey(); + System.out.println(map); + } /** * sm2公钥加密 * diff --git a/dk-common/common-excel/pom.xml b/dk-common/common-excel/pom.xml index 23747b2..efebe1d 100644 --- a/dk-common/common-excel/pom.xml +++ b/dk-common/common-excel/pom.xml @@ -25,6 +25,21 @@ com.alibaba easyexcel + + + + + + + + + + + + + + + diff --git a/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java b/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java index 68548ed..7f2713f 100644 --- a/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java +++ b/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java @@ -19,6 +19,8 @@ public final class RedisConst { public static final Integer WEBSOCKET_ALIVE_SECOND = 60 * 60 * 24; + public static final Integer DEVICE_VIDEO_STATUE_SECOND = 60 * 50; + public static final String DEVICE_ONLINE_PREFIX = "online" + DELIMITER; public static final String WEBSOCKET_PREFIX = "webSocket" + DELIMITER; @@ -62,4 +64,7 @@ public final class RedisConst { public static final String FILE_UPLOADING_PREFIX = "file_uploading" + DELIMITER; public static final String DRONE_CONTROL_PREFiX = "control_source" + DELIMITER; + + + public static final String VIDEO_STATUS = "video_status" + DELIMITER; } diff --git a/dk-common/common-rocketmq/pom.xml b/dk-common/common-rocketmq/pom.xml new file mode 100644 index 0000000..412a96a --- /dev/null +++ b/dk-common/common-rocketmq/pom.xml @@ -0,0 +1,45 @@ + + + + org.dromara + dk-common + ${revision} + + 4.0.0 + + common-rocketmq + + + common-rocketmq 配置中心 + + + + + + org.apache.rocketmq + rocketmq-client + 4.9.0 + + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + + + + org.dromara + common-core + + + + org.dromara + common-nacos + + + + + + diff --git a/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/config/ProducerConfig.java b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/config/ProducerConfig.java new file mode 100644 index 0000000..4d82415 --- /dev/null +++ b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/config/ProducerConfig.java @@ -0,0 +1,58 @@ +package org.dromara.common.rocketmq.config; + +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.dromara.common.rocketmq.model.ProducerMode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + + +/** + * mq搭建地址连接 + * 生产者初者连接信息 具体看nacos配置 + */ +@AutoConfiguration +@Slf4j +@EnableConfigurationProperties(ProducerMode.class) +public class ProducerConfig { + + /** + * 远程调用连接信息 + */ + public static DefaultMQProducer producer; + + /** + * 连接客户端信息配置 具体看nacos配置 + */ + @Autowired + private ProducerMode producerMode; + + @Bean + public DefaultMQProducer getRocketMQProducer() { + producer = new DefaultMQProducer(producerMode.getGroupName()); + producer.setNamesrvAddr(producerMode.getNameServer()); + //如果需要同一个jvm中不同的producer往不同的mq集群发送消息,需要设置不同的instanceName + if(producerMode.getMaxMessageSize()!=null){ + producer.setMaxMessageSize(producerMode.getMaxMessageSize()); + } + if(producerMode.getSendMsgTimeout()!=null){ + producer.setSendMsgTimeout(producerMode.getSendMsgTimeout()); + } + //如果发送消息失败,设置重试次数,默认为2次 + if(producerMode.getRetryTimesWhenSendFailed()!=null){ + producer.setRetryTimesWhenSendFailed(producerMode.getRetryTimesWhenSendFailed()); + } + producer.setVipChannelEnabled(false); + try { + producer.start(); + log.info("生产者初始化成功:{}",producer.toString()); + } catch (MQClientException e) { + log.error("生产者初始化失败:{}",e.getMessage()); + } + return producer; + } + +} diff --git a/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/model/ProducerMode.java b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/model/ProducerMode.java new file mode 100644 index 0000000..e255e1e --- /dev/null +++ b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/model/ProducerMode.java @@ -0,0 +1,25 @@ +package org.dromara.common.rocketmq.model; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 生产者初始化 + */ +@Data +@ConfigurationProperties(prefix = "rocketmq.producer") +public class ProducerMode { + + private String groupName; + + private String nameServer; + + private Integer maxMessageSize; + + private Integer sendMsgTimeout; + + private Integer retryTimesWhenSendFailed; +} diff --git a/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/producer/MessageProducerUtil.java b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/producer/MessageProducerUtil.java new file mode 100644 index 0000000..14ec0fc --- /dev/null +++ b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/producer/MessageProducerUtil.java @@ -0,0 +1,189 @@ +package org.dromara.common.rocketmq.producer; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.exception.MQBrokerException; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.client.producer.SendCallback; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.common.message.Message; +import org.apache.rocketmq.remoting.common.RemotingHelper; +import org.apache.rocketmq.remoting.exception.RemotingException; +import org.springframework.stereotype.Component; + +import java.io.UnsupportedEncodingException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import static org.dromara.common.rocketmq.config.ProducerConfig.producer; + + +/** + * 消息发送 + */ +@Slf4j +public class MessageProducerUtil { + + /** + * 同步发送消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 通过调用 send() 方法发送消息,阻塞等待服务器响应。 + */ + public static SendResult sendSynchronizeMessage(String topic, String tag, String key, String value){ + String body = "topic:【"+topic+"】, tag:【"+tag+"】, key:【"+key+"】, value:【"+value+"】"; + try { + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + System.out.println("生产者发送消息:"+ JSON.toJSONString(value)); + SendResult result = producer.send(msg); + return result; + } catch (Exception e) { + e.printStackTrace(); + log.error("消息初始化失败!body:{}",body); + + } + return null; + } + + /** + * 单向发送消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 单向发送:通过调用 sendOneway() 方法发送消息,不关心发送结果,适用于对可靠性要求不高的场景。 + */ + public static void sendOnewayMessage(String topic, String tag, String key, String value){ + String body = "topic:【"+topic+"】, tag:【"+tag+"】, key:【"+key+"】, value:【"+value+"】"; + try { + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + System.out.println("生产者发送消息:"+ JSON.toJSONString(value)); + producer.sendOneway(msg); + } catch (UnsupportedEncodingException e) { + log.error("消息初始化失败!body:{}",body); + + } catch (MQClientException | InterruptedException | RemotingException e) { + log.error("消息发送失败! body:{}",body); + } + } + + + /** + * 批量发送消息 + * @param messages 消息列表 + * 批量发送:通过调用 send() 方法并传入多条消息,实现批量发送消息。 + */ +// public static SendResult sendBatchMessage(List messages){ +// String body = messages.toString(); +// try { +// System.out.println("生产者发送消息:"+ messages); +// // 发送批量消息 +// SendResult sendResult = producer.send(messages); +// return sendResult; +// } catch (MQClientException | InterruptedException | RemotingException e) { +// log.error("消息发送失败! body:{}",body); +// } catch (MQBrokerException e) { +// throw new RuntimeException(e); +// } +// return null; +// } + + + /** + * 发送有序的消息 + * @param messagesList Message集合 + * @param messageQueueNumber 消息队列数量,根据实际情况设定 + * 顺序发送: messageQueueNumber 表示消息的业务标识,可以根据具体需求进行设置来保证消息按顺序发送。 + */ +// public static SendResult sendOrderlyMessage(List messagesList, Integer messageQueueNumber) { +// SendResult result = null; +// for (Message message : messagesList) { +// try { +// result = producer.send(message, (list, msg, arg) -> { +// Integer queueNumber = (Integer) arg; +// //int queueIndex = queueNumber % list.size(); +// return list.get(queueNumber); +// }, messageQueueNumber);//根据编号取模,选择消息队列 +// } catch (MQClientException | RemotingException | MQBrokerException | InterruptedException e) { +// log.error("发送有序消息失败"); +// return result; +// } +// } +// return result; +// } + + /** + * 发送延迟消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 延迟发送:通过设置延迟级别来实现延迟发送消息。 + */ + public static SendResult sendDelayMessage(String topic, String tag, String key, String value) + { + SendResult result = null; + try + { + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + //设置消息延迟级别,我这里设置5,对应就是延时一分钟 + // "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h" + msg.setDelayTimeLevel(4); + // 发送消息到一个Broker + result = producer.send(msg); + // 通过sendResult返回消息是否成功送达 + log.info("发送延迟消息结果:======sendResult:{}", result); + DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("发送时间:{}", format.format(new Date())); + return result; + } + catch (Exception e) + { + e.printStackTrace(); + log.error("延迟消息队列推送消息异常:{},推送内容:{}", e.getMessage(), result); + } + return result; + } + /** + * 发送异步的消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 通过调用 send() 方法,并传入一个 SendCallback 对象,在发送消息的同时可以继续处理其他逻辑,消息发送结果通过回调函数通知。 + */ + public static SendResult sendAsyncProducerMessage(String topic, String tag, String key, String value){ + + try { + //创建一个消息实例,指定主题、标签和消息体。 + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + System.out.println("生产者发送消息:"+ JSON.toJSONString(value)); + producer.send(msg,new SendCallback() { + // 异步回调的处理 + @Override + public void onSuccess(SendResult sendResult) { + System.out.printf("%-10d 异步发送消息成功 %s %n", msg, sendResult.getMsgId()); + } + @Override + public void onException(Throwable e) { + System.out.printf("%-10d 异步发送消息失败 %s %n", msg, e); + e.printStackTrace(); + } + }); + } catch (MQClientException e) { + e.printStackTrace(); + } catch (RemotingException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + return null; + } + +} diff --git a/dk-common/common-rocketmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/dk-common/common-rocketmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..0d19465 --- /dev/null +++ b/dk-common/common-rocketmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.dromara.common.rocketmq.config.ProducerConfig diff --git a/dk-common/pom.xml b/dk-common/pom.xml index a0eb4a7..d1527b3 100644 --- a/dk-common/pom.xml +++ b/dk-common/pom.xml @@ -46,6 +46,7 @@ common-bus common-sse common-cloudsdk + common-rocketmq dk-common diff --git a/dk-modules/business/pom.xml b/dk-modules/business/pom.xml index 78874bb..1b3151d 100644 --- a/dk-modules/business/pom.xml +++ b/dk-modules/business/pom.xml @@ -116,6 +116,10 @@ org.dromara api-workflow + + org.dromara + common-rocketmq + diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index 229dba3..01079b0 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -1,6 +1,8 @@ package org.dromara.business.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.client.utils.TenantUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -9,17 +11,25 @@ import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.vo.BusinessAlertVo; import org.dromara.business.service.IBusinessAlertService; +import org.dromara.business.utils.MinioUntil; +import org.dromara.business.utils.constants.MinIOConstants; import org.dromara.common.core.domain.R; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.core.BaseController; +import org.dromara.system.api.RemoteNoticeService; +import org.dromara.system.api.RemoteSubmailConfigService; +import org.dromara.system.api.domain.bo.RemoteNoticeBo; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Date; import java.util.List; /** @@ -39,7 +49,23 @@ public class BusinessAlertController extends BaseController { private final IBusinessAlertService businessAlertService; @DubboReference(timeout = 30000) private RemoteWorkflowService remoteWorkflowService; + @DubboReference(timeout = 30000) + private RemoteNoticeService remoteNoticeService; + + @DubboReference(timeout = 30000) + private RemoteSubmailConfigService remoteSubmailConfigService; + /** + * 测试发送调用submail短信服务, + * + * @param code 必须传参:smsMultixsend + * @param multiParam 前台传参 JSON.stringfy( {"jobName":"翟山街道华盛","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"}) + * 后台接收json效果 {"jobName":"翟山街道华盛景园违建巡査面状航线(1)2025-05-11 09:32:30","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"} + */ + @GetMapping("/demo") + public void demo(@RequestParam("code") String code, @RequestParam("multiParam") String multiParam) { + remoteSubmailConfigService.remoteCmdSend(code, multiParam); + } /** * 查询全部预警/待办/已完成/忽略 */ @@ -75,17 +101,35 @@ public class BusinessAlertController extends BaseController { } /** - * 查询全部预警/待办/已完成/忽略 + * ai实时流预警保存 */ - @Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存") + @Operation(summary ="ai实时流预警保存-用于演示",description = "ai实时流预警保存-用于演示") @PostMapping("/saveAlert") - public void saveAlert(BusinessAlertVo vo) { + public R saveAlert(@RequestBody BusinessAlertVo vo) { vo.setBusinessType(2); BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo); RemoteStartProcess startProcess = new RemoteStartProcess(); startProcess.setBusinessId(String.valueOf(businessAlert.getId())); startProcess.setFlowCode("alertChz"); remoteWorkflowService.startWorkFlowBatch(List.of(startProcess)); + RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo(); + remoteNoticeBo.setNoticeTitle(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); + remoteNoticeBo.setNoticeType("3"); + remoteNoticeBo.setNoticeContent(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); + remoteNoticeBo.setStatus("0"); + remoteNoticeBo.setIsRead(0); + remoteNoticeBo.setCreateBy(1L); + remoteNoticeBo.setCreateDept(1L); + remoteNoticeBo.setCreateTime(businessAlert.getCreateTime()); + if (businessAlert.getBusinessType() == 2){ + businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); + } + remoteNoticeBo.setDeviceSn(vo.getDeviceSn()); + businessAlert.setDeviceSn(vo.getDeviceSn()); + remoteNoticeBo.setParam(JSON.toJSONString(businessAlert)); + remoteNoticeService.saveNotice(remoteNoticeBo); + remoteSubmailConfigService.remoteCmdSend("smsMultixsend", JSON.toJSONString(vo)); + return R.ok(); } @@ -99,4 +143,15 @@ public class BusinessAlertController extends BaseController { businessAlertService.addBusinessAlertList(alertVoList); return R.ok(); } + + /** + * 移交预警 + */ + @Operation(summary ="移交预警",description = "移交预警") + @PostMapping("/alert/transfer") + public R transferAlert(BusinessAlertVo vo) { + return R.ok(businessAlertService.transferAlert(vo)); + } + + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java index 1bb1ff3..be9c2c6 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java @@ -142,6 +142,27 @@ public class BusinessAlertStatisticsController extends BaseController { return R.ok(businessAlertService.cityListAlert(businessAlertBo)); } + /** + * 预警信息-资规/农水-热力图 + * @param businessAlertBo + * @return + */ + @Operation(summary="预警信息-资规/农水-标签分组", description="预警信息-资规/农水-标签分组") + @GetMapping(value = "/alert/heatList") + public R> heatList(BusinessAlertBo businessAlertBo) { + return R.ok(businessAlertService.heatList(businessAlertBo)); + } + + /** + * 预警信息-城管/环保-热力图 + * @param businessAlertBo + * @return + */ + @Operation(summary="预警信息-城管/环保/住建-标签分组", description="预警信息-城管/环保/住建-标签分组") + @GetMapping(value = "/city/alert/heatList") + public R> cityHeatList(BusinessAlertBo businessAlertBo) { + return R.ok(businessAlertService.cityHeatList(businessAlertBo)); + } //饼图显示每个月根据部门 @Operation(summary="根据月份显示预警个数", description="根据月份显示预警个数") diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java index 946e59a..01871c7 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java @@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.business.domain.bo.BusinessTaskBo; import org.dromara.business.domain.vo.BusinessTaskVo; import org.dromara.business.service.IBusinessTaskService; +import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java index f6a8bb7..84d7ef2 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java @@ -193,6 +193,12 @@ public class BusinessAlert { */ private Integer handleSource; + + /** + * 案件号 + */ + private String caseNumber; + /** * 指派人员名称 */ @@ -243,4 +249,7 @@ public class BusinessAlert { */ @TableField(exist = false) private String buttonPermission; + + @TableField(exist = false) + private String deviceSn; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessTaskLabel.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessTaskLabel.java new file mode 100644 index 0000000..05b5fa6 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessTaskLabel.java @@ -0,0 +1,34 @@ +package org.dromara.business.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * @auther yq + * @data 2025/2/26 + */ +@Data +@TableName("business_task_label") +public class BusinessTaskLabel implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long taskId; + + private String labelCn; + private String labelEn; + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java index 6f34cbf..5db6e46 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java @@ -41,6 +41,9 @@ public class BusinessAlertBo { */ private String images; + private String startTime; + + private String endTime; /** * 预警类型 @@ -235,11 +238,13 @@ public class BusinessAlertBo { */ private Integer dateType; - private String startTime; - - private String endTime; private String aiName; private Integer businessType; + /** + * 案件号 + */ + private String caseNumber; + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java index d0d8695..8f79a7d 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java @@ -1,10 +1,9 @@ package org.dromara.business.domain.bo; -import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; + import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; @@ -13,8 +12,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; -import java.awt.*; + import java.util.Date; +import java.util.List; /** * 工单预约业务对象 business_task @@ -87,4 +87,6 @@ public class BusinessTaskBo extends BaseEntity { private Date flightTime; //飞行说明 private String flightExplain; + + private List taskLabelList; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java index ce203d9..cfc7d8e 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java @@ -190,6 +190,7 @@ public class BusinessAlertVo implements Serializable { * 忽略原因 */ private String ignoringCause; + private Integer value; /** * 来源:0:平台 1:小程序 @@ -204,4 +205,10 @@ public class BusinessAlertVo implements Serializable { private Date createTime; //1:图片比对预警 2:AI实时预警 private Integer businessType; + private String deviceSn; + + /** + * 案件号 + */ + private String caseNumber; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskLabelVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskLabelVo.java new file mode 100644 index 0000000..2d3621d --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskLabelVo.java @@ -0,0 +1,35 @@ +package org.dromara.business.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @auther yq + * @data 2025/2/26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusinessTaskLabel.class) +public class BusinessTaskLabelVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + + private Long id; + + private Long taskId; + + private String labelCn; + private String labelEn; + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java index d74446a..0717344 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java @@ -5,13 +5,14 @@ import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -91,6 +92,6 @@ public class BusinessTaskVo implements Serializable { private String flightExplain; - + private List taskLabelList; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java index 74dbd6d..97c2a2d 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java @@ -96,6 +96,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus listAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); + List heatList(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); List> countStreetRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List deptIdList); Map streetRateTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List deptIdList); @@ -115,4 +116,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus> listOneDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo); + Integer selectCurrentAlertCount(@Param("currentDate") String currentDate); + + void batchUpdateCaseNumber(@Param("list") List alertVoList); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessTaskLabelMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessTaskLabelMapper.java new file mode 100644 index 0000000..ff11436 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessTaskLabelMapper.java @@ -0,0 +1,27 @@ +package org.dromara.business.mapper; + + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; +import org.dromara.business.domain.bo.BusinessTaskBo; +import org.dromara.business.domain.vo.BusinessTaskLabelVo; +import org.dromara.business.domain.vo.BusinessTaskVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +import java.util.List; + + +/** + * 工单预约Mapper接口 + * + * @author LionLi + * @date 2025-02-26 + */ +public interface BusinessTaskLabelMapper extends BaseMapperPlus { + List selectTaskLabelList(@Param("taskId") Long taskId); + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java index becd098..6a1bac8 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java @@ -74,9 +74,11 @@ public interface IBusinessAlertService { TableDataInfo getInfo(BusinessAlertBo bo, PageQuery pageQuery, String alertCode); Map listAlert(BusinessAlertBo businessAlertBo); - + Map heatList(BusinessAlertBo businessAlertBo); Map cityListAlert(BusinessAlertBo businessAlertBo); + Map cityHeatList(BusinessAlertBo businessAlertBo); + List listVerifyAlert(RemoteBusinessAlertBo businessAlertBo); Boolean deleteAlert(List alertIdList); @@ -91,4 +93,5 @@ public interface IBusinessAlertService { List listHandleHistory(String lng, String lat, String createTime); + Boolean transferAlert(BusinessAlertVo vo); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index cf80f93..90408da 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/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.Map; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -78,6 +79,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { public BusinessAlert addBusinessAlert(BusinessAlertVo param) { BusinessAlert alert = MapstructUtils.convert(param, BusinessAlert.class); alert.setCreateTime(new Date()); + alert.setCaseNumber(param.getCaseNumber()); alert.setJobName(alert.getDeptName()+alert.getLabelCn()+ DateUtils.getTime()); this.baseMapper.insert(alert); return alert; @@ -86,6 +88,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @Override public void addBusinessAlertList(List alertVoList) { if(!alertVoList.isEmpty()) { + incrementalCount(alertVoList); + List remoteStartProcessList = new ArrayList<>(); for (BusinessAlertVo alertVo : alertVoList) { alertVo.setBusinessType(2); @@ -432,6 +436,10 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { wrapper.like("t.job_name", bo.getJobName()); } + if (ObjectUtil.isNotEmpty(bo.getLabelEn())){ + wrapper.eq("t.label_en", bo.getLabelEn()); + } + if (ObjectUtil.isNotEmpty(bo.getStartTime()) && ObjectUtil.isNotEmpty(bo.getEndTime())){ wrapper.ge("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getStartTime()); wrapper.le("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getEndTime()); @@ -533,6 +541,38 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { } + @Override + public Map heatList(BusinessAlertBo businessAlertBo) { + Map result = new HashMap<>(); +/* //生成近一周开始时间、结束时间 + List dayList = getLastSixDays(); + String startTime = dayList.get(dayList.size() - 1); + String endTime = dayList.get(0); + + result.put("date", startTime + "~" + endTime);*/ + + //查看的是总览的预警信息 + if (ObjectUtil.isEmpty(businessAlertBo.getPostCode())) { + + List businessAlerts = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); + Map> listMap = businessAlerts.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); + result.putAll(listMap); + return result; + } + //不是空的话查看是对应各局的 + List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), null); + + + if (ObjectUtil.isEmpty(postVoList)){ + return result; + } + businessAlertBo.setAiLabelEnList(postVoList.stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList()); + List alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); + Map> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); + result.putAll(listMap); + return result; + } + @Override public Map cityListAlert(BusinessAlertBo businessAlertBo) { if (ObjectUtil.hasEmpty(businessAlertBo.getPostCode(),businessAlertBo.getAiName())) { @@ -549,7 +589,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { infoMap.put("date", startTime + "~" + endTime); //不是空的话查看是对应各局的 - List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); + List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), null); Map> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName)); @@ -599,6 +639,28 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { return infoMap; } + @Override + public Map cityHeatList(BusinessAlertBo businessAlertBo) { + if (ObjectUtil.hasEmpty(businessAlertBo.getPostCode(),businessAlertBo.getAiName())) { + throw new ServiceException("参数为空!"); + } + Map infoMap = new HashMap<>(); + + //不是空的话查看是对应各局的 + List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), null); + + Map> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName)); + + if (ObjectUtil.isEmpty(postVoList)){ + return infoMap; + } + businessAlertBo.setAiLabelEnList(aiNameMap.get(businessAlertBo.getAiName()).stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList()); + List alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); + Map> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); + infoMap.putAll(listMap); + return infoMap; + } + @Override public List listVerifyAlert(RemoteBusinessAlertBo businessAlertBo) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -622,7 +684,35 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @Override public void batchUpdateDept(List alertVoList) { + //更新部门 this.baseMapper.batchUpdateDept(alertVoList); + + incrementalCount(alertVoList); + + //更新number + this.baseMapper.batchUpdateCaseNumber(alertVoList); + + } + + + /** + * 创建递归caseNumber + * @param alertVoList + */ + public void incrementalCount(List 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(); + }); } @@ -722,6 +812,25 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { 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 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; + } + public static void main(String[] args) { System.out.println(getLastSixDays()); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java index dd924c0..16e7699 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java @@ -1,7 +1,9 @@ package org.dromara.business.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; @@ -280,7 +282,12 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist // } //----------------------------------------------获取飞行总架次、总时长---------------------------------------------- - Map devices = feignDeviceGroup.getDevices(); + Map devices = new HashMap<>(); + try { + devices = feignDeviceGroup.getDevices(); + } catch (Exception e) { + log.error(e.getMessage(),e); + } Map panel = baseMapper.countPanelAlert(businessAlertBo); @@ -416,6 +423,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //查询所有的职能岗位 List postVoList = remotePostService.listPost(); + postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则 if (ObjectUtil.isEmpty(postVoList)) { return ListUtil.empty(); @@ -444,6 +452,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //查询所有的职能岗位 List postVoList = remotePostService.listPost(); + postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则 List result = new ArrayList<>(); @@ -498,6 +507,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //查询所有的职能岗位 List postVoList = remotePostService.listPost(); + postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则 List monthList = getLastSixMonths(); @@ -640,14 +650,15 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist switch (dateType) { case 0: - LocalDate today = LocalDate.now(); - LocalDate startDate = today.minusMonths(6) - .with(TemporalAdjusters.firstDayOfMonth()); + // 获取当前日期 + LocalDate localDate = LocalDate.now(); + + // 计算当前日期的六个月前的日期 + LocalDate sixMonthsAgo = localDate.minusMonths(6); - LocalDate endDate = today.with(TemporalAdjusters.lastDayOfMonth()); + result.put("startTime", sixMonthsAgo.format(formatter)); + result.put("endTime", localDate.format(formatter)); - result.put("startTime",startDate.format(formatter)); - result.put("endTime",endDate.format(formatter)); break; case 1: // 年 LocalDate currentDate = LocalDate.now(); @@ -686,7 +697,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //构建查询数据权限 createPermissions(businessAlertBo); - List postVoList = remoteLabelPostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); + List postVoList = remoteLabelPostService.selectLabelByList(businessAlertBo.getPostCode(), null); Map> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName)); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java index 6123802..3fc4f9f 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java @@ -2,12 +2,15 @@ package org.dromara.business.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; import org.dromara.business.domain.bo.BusinessTaskBo; import org.dromara.business.domain.vo.BusinessTaskVo; +import org.dromara.business.mapper.BusinessTaskLabelMapper; import org.dromara.business.mapper.BusinessTaskMapper; import org.dromara.business.service.IBusinessTaskService; import org.dromara.common.core.constant.BusinessConstants; @@ -35,6 +38,7 @@ import java.util.Map; public class BusinessTaskServiceImpl implements IBusinessTaskService { private final BusinessTaskMapper baseMapper; + private final BusinessTaskLabelMapper taskLabelMapper; /** * 查询工单预约 @@ -92,6 +96,9 @@ public class BusinessTaskServiceImpl implements IBusinessTaskService { */ @Override public Boolean insertByBo(BusinessTaskBo bo) { + if(bo.getTaskLabelList().isEmpty()){ + throw new RuntimeException("未获取到识别类型标签"); + } // 获取当前登录用户信息 LoginUser currentUser = LoginHelper.getLoginUser(); bo.setCreateBy(currentUser.getUserId()); @@ -105,6 +112,10 @@ public class BusinessTaskServiceImpl implements IBusinessTaskService { boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); + bo.getTaskLabelList().forEach(labelVo -> { + labelVo.setTaskId(bo.getId()); + }); + taskLabelMapper.insert(bo.getTaskLabelList()); } return flag; } diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index e28d333..4a938ec 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -16,6 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and DATE_FORMAT(ba.create_time,'%Y-%m-%d') = #{param.createTime} + + and = #{param.startTime} ]]> + + + and + and ba.dept_id in @@ -443,8 +449,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" COUNT(DISTINCT ba.id) AS total from business_alert ba where 1=1 - and = '2024' ]]> - and + and ba.handle_type = 'finish' @@ -526,6 +531,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" warning_summary ws LEFT JOIN business_alert ba ON ws.label_en = ba.label_en and ba.handle_type != 'verify' + and ba.del_flag = '0' and = #{startTime} ]]> and and ws.label_en in @@ -880,7 +886,55 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" GROUP BY dc.dept_id,dc.dept_name + + + + UPDATE business_alert + SET + case_number = + + WHEN #{item.id} THEN #{item.caseNumber} + + WHERE id IN + + #{item.id} + + diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskLabelMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskLabelMapper.xml new file mode 100644 index 0000000..30fd654 --- /dev/null +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskLabelMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml index aa031b0..10f657c 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml @@ -28,6 +28,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/dk-modules/system/pom.xml b/dk-modules/system/pom.xml index 37e2ae9..b0c2d65 100644 --- a/dk-modules/system/pom.xml +++ b/dk-modules/system/pom.xml @@ -93,6 +93,11 @@ common-encrypt + + org.dromara + common-oss + + org.dromara diff --git a/dk-modules/system/src/main/java/org/dromara/system/config/OssTianyiConfig.java b/dk-modules/system/src/main/java/org/dromara/system/config/OssTianyiConfig.java new file mode 100644 index 0000000..3d03a4d --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/config/OssTianyiConfig.java @@ -0,0 +1,51 @@ +package org.dromara.system.config; + +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.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Minio 配置信息 + * + * @author ruoyi + */ +@Configuration +@ConfigurationProperties(prefix = "osstianyi") +@Getter +@Setter +public class OssTianyiConfig +{ + + @Value("${osstianyi.endPoint:https://jiangsu-10.zos.ctyun.cn}") + private String endPoint; + + @Value("${osstianyi.accessKey:22e3f37368a242b38f4f25d98c9baf1f}") + private String accessKey; + + @Value("${osstianyi.secretKey:0d858850666248e59830d9a596847062}") + private String secretKey; + + @Value("${osstianyi.bucketName:dkossbucket}") + private String bucketName; + + + @Override + public String toString() { + return "OssTianyiConfig{" + + "endPoint='" + endPoint + '\'' + + ", accessKey='" + accessKey + '\'' + + ", secretKey='" + secretKey + '\'' + + ", bucketName='" + bucketName + '\'' + + '}'; + } + + @Bean + public MinioClient getMinioClient() + { + return MinioClient.builder().endpoint(endPoint).credentials(accessKey, secretKey).build(); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiController.java new file mode 100644 index 0000000..de246bb --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiController.java @@ -0,0 +1,113 @@ +package org.dromara.system.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.DjiApiVo; +import org.dromara.system.domain.bo.DjiApiBo; +import org.dromara.system.service.IDjiApiService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 大疆开发 + * 前端访问路由地址为:/djidev/djiApi + * + * @author szs + * @date 2025-05-14 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/djiApi") +public class DjiApiController extends BaseController { + + private final IDjiApiService djiApiService; + + /** + * 查询大疆开发列表 + */ + @SaCheckPermission("djidev:djiApi:list") + @GetMapping("/list") + public TableDataInfo list(DjiApiBo bo, PageQuery pageQuery) { + return djiApiService.queryPageList(bo, pageQuery); + } + + /** + * 导出大疆开发列表 + */ + @SaCheckPermission("djidev:djiApi:export") + @Log(title = "大疆开发", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DjiApiBo bo, HttpServletResponse response) { + List list = djiApiService.queryList(bo); + ExcelUtil.exportExcel(list, "大疆开发", DjiApiVo.class, response); + } + + /** + * 获取大疆开发详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("djidev:djiApi:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(djiApiService.queryById(id)); + } + + /** + * 新增大疆开发 + */ + @SaCheckPermission("djidev:djiApi:add") + @Log(title = "大疆开发", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DjiApiBo bo) { + //跟新版本次数 + if(null == bo.getVersionCount()){ + DjiApiBo bo1 = new DjiApiBo(); + bo1.setDjiApiType(bo.getDjiApiType()); + List djiApiVos = djiApiService.queryList(bo1); + bo.setVersionCount(djiApiVos.size() +1); + } + return toAjax(djiApiService.insertByBo(bo)); + } + + /** + * 修改大疆开发 + */ + @SaCheckPermission("djidev:djiApi:edit") + @Log(title = "大疆开发", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DjiApiBo bo) { + return toAjax(djiApiService.updateByBo(bo)); + } + + /** + * 删除大疆开发 + * + * @param ids 主键串 + */ + @SaCheckPermission("djidev:djiApi:remove") + @Log(title = "大疆开发", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(djiApiService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiErrorController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiErrorController.java new file mode 100644 index 0000000..a32885e --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiErrorController.java @@ -0,0 +1,131 @@ +package org.dromara.system.controller; + +import java.util.ArrayList; +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.excel.core.ExcelResult; +import org.dromara.system.domain.vo.SysUserImportVo; +import org.dromara.system.listener.DjiApiErrorImportListener; +import org.dromara.system.listener.SysUserImportListener; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.DjiApiErrorVo; +import org.dromara.system.domain.bo.DjiApiErrorBo; +import org.dromara.system.service.IDjiApiErrorService; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 大疆开发-错误码 + * 前端访问路由地址为:/djidev/djiApiError + * + * @author szs + * @date 2025-05-14 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/djiApiError") +public class DjiApiErrorController extends BaseController { + + private final IDjiApiErrorService djiApiErrorService; + + /** + * 查询大疆开发-错误码列表 + */ + @SaCheckPermission("djidev:djiApiError:list") + @GetMapping("/list") + public TableDataInfo list(DjiApiErrorBo bo, PageQuery pageQuery) { + return djiApiErrorService.queryPageList(bo, pageQuery); + } + + /** + * 导出大疆开发-错误码列表 + */ + @SaCheckPermission("djidev:djiApiError:export") + @Log(title = "大疆开发-错误码", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DjiApiErrorBo bo, HttpServletResponse response) { + List list = djiApiErrorService.queryList(bo); + ExcelUtil.exportExcel(list, "大疆开发-错误码", DjiApiErrorVo.class, response); + } + + + @Log(title = "大疆开发-错误码管理", businessType = BusinessType.IMPORT) + @SaCheckPermission("djidev:djiApiError:import") + @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception { + ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), DjiApiErrorVo.class, new DjiApiErrorImportListener(updateSupport)); + return R.ok(result.getAnalysis()); + } + + /** + * 获取导入模板 + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { + ExcelUtil.exportExcel(new ArrayList<>(), "大疆开发-错误码数据", DjiApiErrorVo.class, response); + } + + + /** + * 获取大疆开发-错误码详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("djidev:djiApiError:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(djiApiErrorService.queryById(id)); + } + + /** + * 新增大疆开发-错误码 + */ + @SaCheckPermission("djidev:djiApiError:add") + @Log(title = "大疆开发-错误码", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DjiApiErrorBo bo) { + return toAjax(djiApiErrorService.insertByBo(bo)); + } + + /** + * 修改大疆开发-错误码 + */ + @SaCheckPermission("djidev:djiApiError:edit") + @Log(title = "大疆开发-错误码", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DjiApiErrorBo bo) { + return toAjax(djiApiErrorService.updateByBo(bo)); + } + + /** + * 删除大疆开发-错误码 + * + * @param ids 主键串 + */ + @SaCheckPermission("djidev:djiApiError:remove") + @Log(title = "大疆开发-错误码", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(djiApiErrorService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/SysSubmailConfigUserController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/SysSubmailConfigUserController.java new file mode 100644 index 0000000..f778af7 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/SysSubmailConfigUserController.java @@ -0,0 +1,106 @@ +package org.dromara.system.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.service.ISysSubmailConfigUserService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 赛邮服务配置用户 + * 前端访问路由地址为:/system/sysSubmailConfigUser + * + * @author szs + * @date 2025-05-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/sysSubmailConfigUser") +public class SysSubmailConfigUserController extends BaseController { + + private final ISysSubmailConfigUserService sysSubmailConfigUserService; + + /** + * 查询赛邮服务配置用户列表 + */ + @SaCheckPermission("system:sysSubmailConfigUser:list") + @GetMapping("/list") + public TableDataInfo list(SysSubmailConfigUserBo bo, PageQuery pageQuery) { + return sysSubmailConfigUserService.queryPageList(bo, pageQuery); + } + + /** + * 导出赛邮服务配置用户列表 + */ + @SaCheckPermission("system:sysSubmailConfigUser:export") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysSubmailConfigUserBo bo, HttpServletResponse response) { + List list = sysSubmailConfigUserService.queryList(bo); + ExcelUtil.exportExcel(list, "赛邮服务配置用户", SysSubmailConfigUserVo.class, response); + } + + /** + * 获取赛邮服务配置用户详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:sysSubmailConfigUser:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(sysSubmailConfigUserService.queryById(id)); + } + + /** + * 新增赛邮服务配置用户 + */ + @SaCheckPermission("system:sysSubmailConfigUser:add") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysSubmailConfigUserBo bo) { + return toAjax(sysSubmailConfigUserService.insertByBo(bo)); + } + + /** + * 修改赛邮服务配置用户 + */ + @SaCheckPermission("system:sysSubmailConfigUser:edit") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysSubmailConfigUserBo bo) { + return toAjax(sysSubmailConfigUserService.updateByBo(bo)); + } + + /** + * 删除赛邮服务配置用户 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:sysSubmailConfigUser:remove") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(sysSubmailConfigUserService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/ossTianyi/OssTianyiController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/ossTianyi/OssTianyiController.java new file mode 100644 index 0000000..6bc7580 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/ossTianyi/OssTianyiController.java @@ -0,0 +1,58 @@ +package org.dromara.system.controller.ossTianyi; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.domain.R; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.system.domain.SysUploadFile; +import org.dromara.system.utils.OssTianyiClientUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.HashMap; + +/** + * 系统上传文件Controller + * + * @author tom + * @date 2024-12-21 + */ +@RestController +@RequestMapping("/ossTianyi") +public class OssTianyiController extends BaseController +{ + + @Autowired + private OssTianyiClientUtils ossTianyiClientUtils; + + /** + * 查询系统上传文件列表 (实际是上传接口) + */ + @SaCheckPermission("file:sysUploadFile:list") + @GetMapping("/list") + public TableDataInfo list(SysUploadFile sysUploadFile) + { + String localFilePath = "D:\\123pan\\page.html"; + try{ + ossTianyiClientUtils.uploadFileTest("page.html","dev/temp",localFilePath); + }catch (Exception e){ + e.printStackTrace(); + } + + return null; + } + + @GetMapping("/upload") + public R> upload(@RequestPart("file") MultipartFile file) { + try { + ossTianyiClientUtils.uploadFile( "dev/temp/"+file.getName(), file); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteController.java new file mode 100644 index 0000000..ac4a828 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteController.java @@ -0,0 +1,125 @@ +package org.dromara.system.controller.site; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.service.DictService; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.resource.api.RemoteMessageService; +import org.dromara.system.domain.bo.SysNoticeBo; +import org.dromara.system.domain.vo.SysNoticeVo; +import org.dromara.system.service.ISysNoticeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 公告 信息操作处理 + * + * @author Lion Li + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/site") +public class SiteController extends BaseController { + + private final ISysNoticeService noticeService; + private final DictService dictService; + + @DubboReference + private final RemoteMessageService remoteMessageService; + + + + //每周提供一次二维场地全貌图及工地视频。 以周为单位处理数据 + //site/img/2005/xxxxxxx.png + //site/video/2025/ + + //todo 二维瓦片上传 + + + //todo 二维瓦片批量上传 (按照周) + + + //todo 二维瓦片批量下载 (按照周) + + //todo 二维瓦片访问 #按照 http://localhost:3308/tile/{z}/{x}/{y}.png 模式访问 + + + //todo 工地视频上传 + + //todo 工地视频下载 + + + + + + + + + + + + /** + * 获取通知公告列表 + */ +// @SaCheckPermission("system:notice:list") + @GetMapping("/list") + public TableDataInfo list(SysNoticeBo notice, PageQuery pageQuery) { + return noticeService.selectPageNoticeList(notice, pageQuery); + } + + /** + * 根据通知公告编号获取详细信息 + * + * @param noticeId 公告ID + */ +// @SaCheckPermission("system:notice:query") + @GetMapping(value = "/{noticeId}") + public R getInfo(@PathVariable Long noticeId) { + return R.ok(noticeService.selectNoticeById(noticeId)); + } + + /** + * 新增通知公告 + */ +// @SaCheckPermission("system:notice:add") + @Log(title = "通知公告", businessType = BusinessType.INSERT) + @PostMapping + public R add(@Validated @RequestBody SysNoticeBo notice) { + int rows = noticeService.insertNotice(notice); + if (rows <= 0) { + return R.fail(); + } + String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType()); + remoteMessageService.publishAll("[" + type + "] " + notice.getNoticeTitle()); + return R.ok(); + } + + /** + * 修改通知公告 + */ +// @SaCheckPermission("system:notice:edit") + @Log(title = "通知公告", businessType = BusinessType.UPDATE) + @PutMapping + public R edit(@Validated @RequestBody SysNoticeBo notice) { + return toAjax(noticeService.updateNotice(notice)); + } + + /** + * 删除通知公告 + * + * @param noticeIds 公告ID串 + */ +// @SaCheckPermission("system:notice:remove") + @Log(title = "通知公告", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + public R remove(@PathVariable Long[] noticeIds) { + return toAjax(noticeService.deleteNoticeByIds(noticeIds)); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteWeekController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteWeekController.java new file mode 100644 index 0000000..3ad738d --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteWeekController.java @@ -0,0 +1,239 @@ +package org.dromara.system.controller.site; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.service.DictService; +import org.dromara.common.dict.utils.DictUtils; +import org.dromara.system.api.RemoteDictService; +import org.dromara.system.api.domain.vo.RemoteDictDataVo; +import org.dromara.system.domain.SiteWeek; +import org.dromara.system.domain.bo.SiteWeekOssBo; +import org.dromara.system.domain.vo.SiteWeekOssVo; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISiteWeekOssService; +import org.dromara.system.service.ISysDictDataService; +import org.dromara.system.utils.OssTianyiClientUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.SiteWeekVo; +import org.dromara.system.domain.bo.SiteWeekBo; +import org.dromara.system.service.ISiteWeekService; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.system.utils.WeekNoUtil; + + +/** + * 工地日期周 + * 前端访问路由地址为:/system/siteWeek + * + * @author szs + * @date 2025-05-10 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/siteWeek") +public class SiteWeekController extends BaseController { + + private final ISiteWeekService siteWeekService; + +// @Autowired +// private ISysDictDataService sysDictDataService; +// RemoteDictService + + private final DictService dictService; + + @Autowired + private ISiteWeekOssService siteWeekOssService; + + @Autowired + private OssTianyiClientUtils ossTianyiClientUtils; + + + /** + * 查询工地日期周列表 + */ + @SaCheckPermission("system:siteWeek:list") + @GetMapping("/list") + public TableDataInfo list(SiteWeekBo bo, PageQuery pageQuery) { + return siteWeekService.queryPageList(bo, pageQuery); + } + + /** + * 导出工地日期周列表 + */ + @SaCheckPermission("system:siteWeek:export") + @Log(title = "工地日期周", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SiteWeekBo bo, HttpServletResponse response) { + List list = siteWeekService.queryList(bo); + ExcelUtil.exportExcel(list, "工地日期周", SiteWeekVo.class, response); + } + + /** + * 获取工地日期周详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:siteWeek:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(siteWeekService.queryById(id)); + } + + /** + * 新增工地日期周 + */ + @SaCheckPermission("system:siteWeek:add") + @Log(title = "工地日期周", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SiteWeekBo bo) { + return toAjax(siteWeekService.insertByBo(bo)); + } + + @SaCheckPermission("system:siteWeek:add") + @Log(title = "工地日期周", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/autoAdd") + public R autoAdd(@Validated(AddGroup.class) @RequestBody SiteWeekBo bo) { + R siteWeekVo = autoAddSiteWeek(); + return siteWeekVo; + } + + private R autoAddSiteWeek() { + //新增时基于最新日期处理weekNo + //先查找当前周是否已存在数据库, 有》返回已有数据, 无》新建数据再返回 + Date currentDate = new Date(); + + int weekNoByDate = WeekNoUtil.getWeekNoByDate(currentDate); + + SiteWeekBo siteWeekBo = new SiteWeekBo(); + siteWeekBo.setWeekNo((long) weekNoByDate); + + + List siteWeekVoList = siteWeekService.queryList(siteWeekBo); + SiteWeekVo siteWeekVo = null; + if (siteWeekVoList.size() > 0) { + return R.fail("当前周已存在,无法新增"); + + }else{ + String dateStr = WeekNoUtil.generateDateStr(currentDate); + String dateFormatStr = DateUtil.format(currentDate, "yyyy-MM-dd"); + siteWeekBo.setName(dateStr); + siteWeekBo.setNameTime(dateFormatStr); + + + //扩展默认字典配置 默认(tile/tileZip/img/video) +// List siteOssDirList = DictUtils.getDictCache("site_oss_dir"); + /** + * 这里用dictService直接查,是因为 RemoteDictDataVo 转 SysDictDataVo 报错,折中做法,(简单说就是 RemoteDictDataVo vo = siteOssDirList.get(0)就报错) + * 报错如下 + * class org.dromara.system.domain.vo.SysDictDataVo cannot be cast to class org.dromara.system.api.domain.vo.RemoteDictDataVo + * (org.dromara.system.domain.vo.SysDictDataVo and org.dromara.system.api.domain.vo.RemoteDictDataVo are in unnamed module of + * loader 'app') + */ + Map siteOssDirMap = dictService.getAllDictMapByDictType("site_oss_dir"); + + siteWeekBo.setDirTile(siteOssDirMap.getOrDefault("二维地图","tile")); + siteWeekBo.setDirTileZip(siteOssDirMap.getOrDefault("二维地图压缩包","tileZip")); + siteWeekBo.setDirImg(siteOssDirMap.getOrDefault("图片","img")); + siteWeekBo.setDirVideo(siteOssDirMap.getOrDefault("视频","video")); + +/* + for (int i = 0; i < siteOssDirList.size(); i++) { + switch (siteOssDirList.get(i).getDictLabel()){ + case "二维地图": + siteWeekBo.setDirTile(siteOssDirList.get(i).getDictValue()); + break; + case "二维地图压缩包": + siteWeekBo.setDirTileZip(siteOssDirList.get(i).getDictValue()); + break; + case "图片": + siteWeekBo.setDirImg(siteOssDirList.get(i).getDictValue()); + break; + case "视频": + siteWeekBo.setDirVideo(siteOssDirList.get(i).getDictValue()); + break; + } + }*/ + + siteWeekService.insertByBo(siteWeekBo); + siteWeekVo = BeanUtil.copyProperties(siteWeekBo, SiteWeekVo.class); + } + return R.ok(siteWeekVo); + } + + + + + /** + * 修改工地日期周 + */ + @SaCheckPermission("system:siteWeek:edit") + @Log(title = "工地日期周", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SiteWeekBo bo) { + return toAjax(siteWeekService.updateByBo(bo)); + } + + @SaCheckPermission("system:siteWeek:edit") + @Log(title = "更新工地日期周", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("changeKeepFlag") + public R changeKeepFlag(@Validated(EditGroup.class) @RequestBody SiteWeekBo bo) { + return toAjax(siteWeekService.updateByBo(bo)); + } + + /** + * 删除工地日期周 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:siteWeek:remove") + @Log(title = "工地日期周", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { +// Boolean result = siteWeekService.deleteWithValidByIds(List.of(ids), true); + + Boolean result = true; + for (Long id : ids) { + SiteWeekOssBo siteWeekOssBo = new SiteWeekOssBo(); + siteWeekOssBo.setSiteWeekId(id); + List siteWeekOssVoList = siteWeekOssService.queryList(siteWeekOssBo); + for (SiteWeekOssVo siteWeekOssVo : siteWeekOssVoList) { + try{ + ossTianyiClientUtils.deleteFile(siteWeekOssVo.getUrl()); //minio删除文件 + siteWeekOssService.deleteWithValidByIds(List.of(siteWeekOssVo.getId()),true); //工地周数据删除 + }catch (Exception e){ + result = false; + System.err.println("天翼oss文件删除失败"+ siteWeekOssVo.getUrl()); + } + } + siteWeekService.deleteWithValidByIds(List.of(id),true); + } + + return toAjax(result); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteWeekOssController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteWeekOssController.java new file mode 100644 index 0000000..e64d65c --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/site/SiteWeekOssController.java @@ -0,0 +1,227 @@ +package org.dromara.system.controller.site; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.List; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.ObjectUtil; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.servlet.ServletOutputStream; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.apache.poi.util.IOUtils; +import org.dromara.system.config.OssTianyiConfig; +import org.dromara.system.domain.bo.SiteWeekBo; +import org.dromara.system.domain.vo.SiteWeekVo; +import org.dromara.system.service.ISiteWeekService; +import org.dromara.system.utils.OssTianyiClientUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.SiteWeekOssVo; +import org.dromara.system.domain.bo.SiteWeekOssBo; +import org.dromara.system.service.ISiteWeekOssService; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 工地周OSS对象存储 + * 前端访问路由地址为:/system/siteWeekOss + * + * @author szs + * @date 2025-05-10 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/siteWeekOss") +public class SiteWeekOssController extends BaseController { + + private final ISiteWeekOssService siteWeekOssService; + + @Autowired + private ISiteWeekService siteWeekService; + + @Autowired + private OssTianyiClientUtils ossTianyiClientUtils; + + /** + * 查询工地周OSS对象存储列表 + */ + @SaCheckPermission("system:siteWeekOss:list") + @GetMapping("/list") + public TableDataInfo list(SiteWeekOssBo bo, PageQuery pageQuery) { + return siteWeekOssService.queryPageList(bo, pageQuery); + } + + /** + * 导出工地周OSS对象存储列表 + */ + @SaCheckPermission("system:siteWeekOss:export") + @Log(title = "工地周OSS对象存储", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SiteWeekOssBo bo, HttpServletResponse response) { + List list = siteWeekOssService.queryList(bo); + ExcelUtil.exportExcel(list, "工地周OSS对象存储", SiteWeekOssVo.class, response); + } + + /** + * 获取工地周OSS对象存储详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:siteWeekOss:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(siteWeekOssService.queryById(id)); + } + + /** + * 新增工地周OSS对象存储 + */ + @SaCheckPermission("system:siteWeekOss:add") + @Log(title = "工地周OSS对象存储", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SiteWeekOssBo bo) { + return toAjax(siteWeekOssService.insertByBo(bo)); + } + + /** + * 修改工地周OSS对象存储 + */ + @SaCheckPermission("system:siteWeekOss:edit") + @Log(title = "工地周OSS对象存储", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SiteWeekOssBo bo) { + return toAjax(siteWeekOssService.updateByBo(bo)); + } + +// @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) + @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "上传OSS对象存储",description = "上传OSS对象存储") + public R upload(@RequestPart("file") MultipartFile file, @RequestParam("siteWeekId") Long siteWeekId) { + if (ObjectUtil.isNull(file)) { + return R.fail("上传文件不能为空"); + } + + SiteWeekVo siteWeekVo = siteWeekService.queryById(siteWeekId); + //工地日期周默认上传路径 + String baseUrl = siteWeekVo.getNameTime() + "/" + siteWeekVo.getDirTile() + "/"; + + //上传到minio + String fileUrl = baseUrl + file.getOriginalFilename(); + ossTianyiClientUtils.uploadFile(fileUrl, file); + + + //记录到本地 + SiteWeekOssBo siteWeekOssBo = new SiteWeekOssBo(); + siteWeekOssBo.setSiteWeekId(siteWeekVo.getId()); + siteWeekOssBo.setWeekNo(siteWeekVo.getWeekNo()); + siteWeekOssBo.setFileName(file.getOriginalFilename()); + siteWeekOssBo.setOriginalName(file.getOriginalFilename()); + siteWeekOssBo.setFileSuffix(FileUtil.extName(file.getOriginalFilename())); + siteWeekOssBo.setUrl(fileUrl); + siteWeekOssBo.setService("tianyiOss"); + + Boolean uploadBo = siteWeekOssService.insertByBo(siteWeekOssBo); + + +// SysOssVo oss = iSysOssService.upload(file); +// SiteWeekOssBo uploadVo = new SiteWeekOssBo(); +// uploadVo.setUrl(oss.getUrl()); +// uploadVo.setFileName(oss.getOriginalName()); +// uploadVo.setOssId(oss.getOssId().toString()); +// return R.ok(uploadVo); + return R.ok(siteWeekOssBo); + } + + /** + * 下载OSS对象存储 + * + * @param id OSS对象ID + */ + @GetMapping("/download/{id}") + @Operation(summary = "下载OSS对象存储",description = "下载OSS对象存储") + public void download(@PathVariable Long id, HttpServletResponse response) throws IOException { + SiteWeekOssVo siteWeekOssVo = siteWeekOssService.queryById(id); +// InputStream inputStream = ossTianyiClientUtils.downloadFile(siteWeekOssVo.getUrl()); + +// String encodedFileName = URLEncoder.encode(siteWeekOssVo.getFileName(), "UTF-8").replaceAll("\\+", "%20"); +// response.setContentType("application/octet-stream"); +// response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); +// response.setHeader("download-filename", encodedFileName); +// // 文件流复制 +// try (ServletOutputStream outputStream = response.getOutputStream()) { +// IOUtils.copy(inputStream, outputStream); +// outputStream.flush(); +// } finally { +// inputStream.close(); // 关闭流 +// } + + try (InputStream inputStream = ossTianyiClientUtils.downloadFile(siteWeekOssVo.getUrl())) { + + // 文件名进行编码 + String encodedFileName = URLEncoder.encode(siteWeekOssVo.getFileName(), "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/octet-stream");// 设置响应内容类型 + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + + // 获取响应输出流 + ServletOutputStream outputStream = response.getOutputStream(); + // 文件内容写入响应输出流 + byte[] buffer = new byte[1024]; + + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.flush(); + } catch (Exception e) { + throw new RuntimeException("下载有误"); + } + } + + + /** + * 删除工地周OSS对象存储 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:siteWeekOss:remove") + @Log(title = "工地周OSS对象存储", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { +// Boolean result = siteWeekOssService.deleteWithValidByIds(List.of(ids), true); + Boolean result = true; + for (Long id : ids) { + SiteWeekOssVo siteWeekOssVo = siteWeekOssService.queryById(id); + try{ + ossTianyiClientUtils.deleteFile(siteWeekOssVo.getUrl()); //minio删除文件 + siteWeekOssService.deleteWithValidByIds(List.of(id),true); //工地周数据删除 + }catch (Exception e){ + result = false; + System.err.println("天翼oss文件删除失败"+ siteWeekOssVo.getUrl()); + } + + } + return toAjax(result); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java index babe5c3..845a44d 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -56,6 +57,24 @@ public class AiLabelController extends BaseController { return aiLabelService.allList(); } + /** + * 下拉框集合-绑定过的标签 + */ + @GetMapping("/bing/list") + public List listPostLabel() { + return aiLabelService.selectLabelList(); + } + + /** + * 下拉框集合 + */ + @GetMapping("/{postCode}/list") + public List listPostCodeLabel(@PathVariable("postCode") String postCode) { + return aiLabelService.selectLabelByList(postCode); + } + + + /** * 导出ai 识别类型列表 diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SubscribeApiController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SubscribeApiController.java new file mode 100644 index 0000000..2dd45a5 --- /dev/null +++ b/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 add(@Validated(AddGroup.class) @RequestBody SubscribeApiBo bo) { + return R.ok(iSubscribeApiService.addSubscribeApi(bo)); + } + + + @Log(title = "订阅编辑", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SubscribeApiBo bo) { + return R.ok(iSubscribeApiService.editSubscribeApi(bo)); + } + + + @Log(title = "订阅删除", businessType = BusinessType.DELETE) + @DeleteMapping("/delete/{id}") + public R remove(@PathVariable Long id) { + return R.ok(iSubscribeApiService.deleteSubscribeApi(id)); + } + + + /** + * 生成秘钥(公钥和私钥) + */ + @GetMapping("/generate") + public R> generateRsaKey() { + + return R.ok(EncryptUtils.generateRsaKey()); + } + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java index 1d7878b..58c66dd 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java @@ -1,6 +1,7 @@ package org.dromara.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.fastjson.JSON; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.web.core.BaseController; @@ -134,4 +135,11 @@ public class SysConfigController extends BaseController { configService.resetConfigCache(); return R.ok(); } + + + @GetMapping("/selectStreamType") + public List selectStreamType(@RequestParam String deviceSn) { + return configService.selectStreamType(deviceSn); + } + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java index bfb4b82..d03d784 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java @@ -9,6 +9,7 @@ import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.web.core.BaseController; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -42,8 +43,9 @@ public class SysMenuController extends BaseController { * * @return 路由信息 */ +// @ApiEncrypt(response=true) @GetMapping("/{platformType}/getRouters") - public R> getRouters(@PathVariable String platformType) { + public R> getRouters(@PathVariable String platformType) { List menus = menuService.selectMenuTreeByUserId(LoginHelper.getUserId(),platformType); return R.ok(menuService.buildMenus(menus)); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailConfigController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailConfigController.java new file mode 100644 index 0000000..294e78c --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailConfigController.java @@ -0,0 +1,240 @@ +package org.dromara.system.controller.system; + +import java.nio.file.CopyOption; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.excel.core.ExcelResult; +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.vo.SysUserImportVo; +import org.dromara.system.listener.SysUserImportListener; +import org.dromara.system.service.ISysConfigService; +import org.dromara.system.service.ISysSubmailConfigUserService; +import org.dromara.system.service.ISysSubmailLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.SysSubmailConfigVo; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.system.service.ISysSubmailConfigService; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 赛邮服务配置 + * 前端访问路由地址为:/system/sysSubmailConfig + * + * @author szs + * @date 2025-05-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/submailConfig") +public class SysSubmailConfigController extends BaseController { + + private final ISysSubmailConfigService sysSubmailConfigService; + + @Autowired + private ISysSubmailConfigUserService sysSubmailConfigUserService; + + /** + * 查询赛邮服务配置列表 + */ + @SaCheckPermission("system:sysSubmailConfig:list") + @GetMapping("/list") + public TableDataInfo list(SysSubmailConfigBo bo, PageQuery pageQuery) { + TableDataInfo sysSubmailConfigVoTableDataInfo = sysSubmailConfigService.queryPageList(bo, pageQuery); + List rows = sysSubmailConfigVoTableDataInfo.getRows(); + List configIds = rows.stream().map(SysSubmailConfigVo::getId).toList(); + + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.selectConfigUserByConfigIds(configIds); + for (SysSubmailConfigVo configVo : rows) { + List collect = sysSubmailConfigUserVoList.stream().filter(item -> item.getSubmailConfigId().equals(configVo.getId())).collect(Collectors.toList()); + configVo.setConfigUserList(collect); + } + return sysSubmailConfigVoTableDataInfo; + } + + @SaCheckPermission("system:sysSubmailConfig:list") + @GetMapping("/listAll") + public List listAll(SysSubmailConfigBo bo) { + return sysSubmailConfigService.queryList(bo); + } + + @SaCheckPermission("system:sysSubmailConfig:export") + @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception { +// ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), SysSubmailConfigVo.class, new SysUserImportListener(updateSupport)); + System.out.println(file.getName()); + return R.ok(null); + } + + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { + ExcelUtil.exportExcel(new ArrayList<>(), "配置数据", SysSubmailConfigVo.class, response); + } + /** + * 导出赛邮服务配置列表 + */ + @SaCheckPermission("system:sysSubmailConfig:export") + @Log(title = "赛邮服务配置", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysSubmailConfigBo bo, HttpServletResponse response) { + List list = sysSubmailConfigService.queryList(bo); +// ExcelUtil.exportExcel(list, "赛邮服务配置", SysSubmailConfigVo.class, response); + + List listVo = MapstructUtils.convert(list, SysSubmailConfigVo.class); + // 导出方法 + ExcelUtil.exportExcel(listVo, "赛邮服务数据", SysSubmailConfigVo.class, response); + } + + /** + * 获取赛邮服务配置详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:sysSubmailConfig:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(sysSubmailConfigService.queryById(id)); + } + + /** + * 新增赛邮服务配置 + */ + @SaCheckPermission("system:sysSubmailConfig:add") + @Log(title = "赛邮服务配置", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysSubmailConfigBo bo) { + return toAjax(sysSubmailConfigService.insertByBo(bo)); + } + + /** + * 修改赛邮服务配置 + */ + @SaCheckPermission("system:sysSubmailConfig:edit") + @Log(title = "赛邮服务配置", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysSubmailConfigBo bo) { + return toAjax(sysSubmailConfigService.updateByBo(bo)); + } + + //配置 + @SaCheckPermission("system:sysSubmailConfig:edit") + @Log(title = "配置赛邮服务配置用户", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/configUser") + public R configUser(@Validated(EditGroup.class) @RequestBody SysSubmailConfigBo bo) { + + //删除旧配置 + SysSubmailConfigUserBo userBo = new SysSubmailConfigUserBo(); + userBo.setSubmailConfigId(bo.getId()); + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.queryList(userBo); + List configUserIds = sysSubmailConfigUserVoList.stream().map(SysSubmailConfigUserVo::getId).toList(); + sysSubmailConfigUserService.deleteWithValidByIds(configUserIds,true); + + //保留新配置 + for (SysUser sysUser : bo.getConfigUserList()) { + SysSubmailConfigUserBo sysSubmailConfigUser = new SysSubmailConfigUserBo(); + sysSubmailConfigUser.setSubmailConfigId(bo.getId()); + sysSubmailConfigUser.setUserId(sysUser.getUserId()); + sysSubmailConfigUser.setName(sysUser.getNickName()); + sysSubmailConfigUser.setPhonenumber(sysUser.getPhonenumber()); + sysSubmailConfigUserService.insertByBo(sysSubmailConfigUser); + } + + return toAjax(1); + } + + /** + * 删除赛邮服务配置 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:sysSubmailConfig:remove") + @Log(title = "赛邮服务配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(sysSubmailConfigService.deleteWithValidByIds(List.of(ids), true)); + } + + //发送测试 + + @Autowired + private ISysSubmailLogService sysSubmailLogService; + + /** + * + * @param code 必须传参:smsMultixsend + * @param multiParam 前台传参 JSON.stringfy( {"jobName":"翟山街道华盛","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"}) + * @return + */ + @RepeatSubmit() + @PostMapping("/cmdSend") + public R cmdSend(@RequestParam("code") String code, @RequestParam("multiParam") String multiParam) { + if(StrUtil.isBlank(code)){ + return R.fail("发送类型为空"); + } + return sysSubmailConfigService.cmdSend(code, multiParam); + } + + //发送测试 + @RepeatSubmit() + @PostMapping("/autoSend") + public R autoSend(@Validated(AddGroup.class) @RequestBody SysSubmailConfigBo bo) { + + //判断是否配置用户 + SysSubmailConfigUserBo mailUserQuery = new SysSubmailConfigUserBo(); + mailUserQuery.setSubmailConfigId(bo.getId()); + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.queryList(mailUserQuery); + List configUserVoList = sysSubmailConfigUserVoList.stream().filter(item -> StrUtil.isNotBlank(item.getPhonenumber())).collect(Collectors.toList()); + if(configUserVoList.size() <= 0) { + return R.fail("暂无配置有效用户"); + } + + String result = sysSubmailConfigService.submailSendUtil(bo, configUserVoList); + + return R.ok(result); + } + + + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailLogController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailLogController.java new file mode 100644 index 0000000..a213544 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailLogController.java @@ -0,0 +1,106 @@ +package org.dromara.system.controller.system; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +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.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.SysSubmailLogVo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.service.ISysSubmailLogService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 赛邮服务发送log + * 前端访问路由地址为:/system/sysSubmailLog + * + * @author szs + * @date 2025-05-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/submailLog") +public class SysSubmailLogController extends BaseController { + + private final ISysSubmailLogService sysSubmailLogService; + + /** + * 查询赛邮服务发送log列表 + */ + @SaCheckPermission("system:sysSubmailLog:list") + @GetMapping("/list") + public TableDataInfo list(SysSubmailLogBo bo, PageQuery pageQuery) { + return sysSubmailLogService.queryPageList(bo, pageQuery); + } + + /** + * 导出赛邮服务发送log列表 + */ + @SaCheckPermission("system:sysSubmailLog:export") + @Log(title = "赛邮服务发送log", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysSubmailLogBo bo, HttpServletResponse response) { + List list = sysSubmailLogService.queryList(bo); + ExcelUtil.exportExcel(list, "赛邮服务发送log", SysSubmailLogVo.class, response); + } + + /** + * 获取赛邮服务发送log详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:sysSubmailLog:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(sysSubmailLogService.queryById(id)); + } + + /** + * 新增赛邮服务发送log + */ + @SaCheckPermission("system:sysSubmailLog:add") + @Log(title = "赛邮服务发送log", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysSubmailLogBo bo) { + return toAjax(sysSubmailLogService.insertByBo(bo)); + } + + /** + * 修改赛邮服务发送log + */ + @SaCheckPermission("system:sysSubmailLog:edit") + @Log(title = "赛邮服务发送log", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysSubmailLogBo bo) { + return toAjax(sysSubmailLogService.updateByBo(bo)); + } + + /** + * 删除赛邮服务发送log + * + * @param ids 主键串 + */ + @SaCheckPermission("system:sysSubmailLog:remove") + @Log(title = "赛邮服务发送log", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(sysSubmailLogService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java index f063cc8..107ee20 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -64,6 +64,22 @@ public class SysUserController extends BaseController { return userService.selectPageUserList(user, pageQuery); } + /** + * 查询全部用户不分页 + * @param user + * @return + */ + @GetMapping("/all/list") + public R> allList(SysUserBo user) { + return R.ok(userService.allList(user)); + } + + @SaCheckPermission("system:user:list") + @GetMapping("/listAll") + public List listAll(SysUserBo user) { + return userService.selectUserwithPhonenumberList(user); + } + /** * 导出用户列表 */ diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApi.java b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApi.java new file mode 100644 index 0000000..5e22b56 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApi.java @@ -0,0 +1,63 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 大疆开发对象 dji_api + * + * @author szs + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("dji_api") +public class DjiApi extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 大疆api类型 + */ + private String djiApiType; + + /** + * 版本名称 + */ + private String name; + + /** + * 版本号 + */ + private String nameVersionNo; + + /** + * 版本次数 + */ + private Integer versionCount; + + /** + * 发步日期 + */ + private Date timeRelease; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApiError.java b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApiError.java new file mode 100644 index 0000000..52e9309 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApiError.java @@ -0,0 +1,76 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 大疆开发-错误码对象 dji_api_error + * + * @author szs + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("dji_api_error") +public class DjiApiError extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 大疆APIId + */ + private Long djiApiId; + + /** + * 大疆API版本 + */ + private String djiApiName; + + /** + * 错误码 + */ + private String name; + + /** + * 中文描述 + */ + private String nameCn; + + /** + * 英文描述 + */ + private String nameEn; + + /** + * 是否变更 + */ + private String isChangeFlag; + + /** + * 历史变更次数 + */ + private Integer changeHistroyCount; + + /** + * 历史变更Ids(,分隔) + */ + private String changeHistoryIds; + + /** + * 大疆开发-错误码 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SiteWeek.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SiteWeek.java new file mode 100644 index 0000000..c1d3797 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SiteWeek.java @@ -0,0 +1,67 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 工地日期周对象 site_week + * + * @author szs + * @date 2025-05-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("site_week") +public class SiteWeek extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 年月日名称 + */ + private String nameTime; + + /** + * 周编号 + */ + private Long weekNo; + + /** + * 周描述 + */ + private String weekNoDescr; + + /** + * 分组编号(备用) + */ + private Long groupNo; + + private String dirTile; + private String dirTileZip; + private String dirImg; + private String dirVideo; + private String isKeepFlag; //是否保存(0正常 1停用) + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SiteWeekOss.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SiteWeekOss.java new file mode 100644 index 0000000..59d258d --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SiteWeekOss.java @@ -0,0 +1,71 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 工地周OSS对象存储对象 site_week_oss + * + * @author szs + * @date 2025-05-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("site_week_oss") +public class SiteWeekOss extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 工地周id + */ + private Long siteWeekId; + + /** + * 周编号 + */ + private Long weekNo; + + /** + * 文件名 + */ + private String fileName; + + /** + * 原名 + */ + private String originalName; + + /** + * 文件后缀名 + */ + private String fileSuffix; + + /** + * URL地址 + */ + private String url; + + /** + * 备注 + */ + private String remark; + + /** + * 服务商 + */ + private String service; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SubscribeApi.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SubscribeApi.java new file mode 100644 index 0000000..2a7694f --- /dev/null +++ b/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 subscribeUser; + + /** + * 公钥 + */ + @TableField(value = "public_key") + private String publicKey; + + /** + *私钥 + */ + @TableField(value = "private_key") + private String privateKey; + + /** + *是否开启 + */ + @TableField(value = "is_enable") + private Boolean isEnable; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java index fb1df87..8d57adb 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java @@ -48,4 +48,5 @@ public class SysNotice extends TenantEntity { */ private String remark; + private Integer isRead; } diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfig.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfig.java new file mode 100644 index 0000000..df8d70b --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfig.java @@ -0,0 +1,92 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 赛邮服务配置对象 sys_submail_config + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_submail_config") +public class SysSubmailConfig extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @TableId(value = "id") + private Long id; + + /** + * 接口名称 + */ + private String name; + + /** + * 接口编码 + */ + private String code; + + /** + * 赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata) + */ + private String type; + + /** + * 接口Url + */ + private String url; + + /** + * AppId + */ + private String appid; + + /** + * signature + */ + private String signature; + private String project; //模板编码 + + /** + * tag参数 + */ + private String tag; + + /** + * UNIX 时间戳 + */ + private String timestamp; + + /** + * API 授权模式(normal) + */ + private String signType; + + /** + * signature加密计算方式 + */ + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + private String latestResStatus; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfigUser.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfigUser.java new file mode 100644 index 0000000..d1cba1e --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfigUser.java @@ -0,0 +1,52 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 赛邮服务配置用户对象 sys_submail_config_user + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_submail_config_user") +public class SysSubmailConfigUser extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 赛邮配置ID + */ + private Long submailConfigId; + private Long userId; + + /** + * 用户名称 + */ + private String name; + + /** + * 手机号 + */ + private String phonenumber; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailLog.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailLog.java new file mode 100644 index 0000000..c98bca4 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailLog.java @@ -0,0 +1,109 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 赛邮服务发送log对象 sys_submail_log + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_submail_log") +public class SysSubmailLog extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @TableId(value = "id") + private Long id; + + /** + * 赛邮配置ID + */ + private Long submailConfigId; + + /** + * 接口名称 + */ + private String name; + + /** + * 接口编码 + */ + private String code; + + /** + * 接口Url + */ + private String url; + + /** + * 接收人 + */ +// @TableField("to_receiver") + private String toReceiver; + + /** + * 内容 + */ + private String content; + + /** + * 模板编码 + */ + private String project; + + /** + * 整合文本 + */ + private String multi; + + /** + * 动态变量 + */ + private String vars; + + /** + * tag参数 + */ + private String tag; + + /** + * UNIX 时间戳 + */ + private String timestamp; + + /** + * API 授权模式(normal) + */ + private String signType; + + /** + * signature加密计算方式 + */ + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + private String latestResStatus; + + private String result; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysUploadFile.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysUploadFile.java new file mode 100644 index 0000000..49b7b11 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysUploadFile.java @@ -0,0 +1,211 @@ +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 org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +/** + * 系统上传文件对象 sys_upload_file + * + * @author tom + * @date 2024-12-21 + */ +@TableName("sys_upload_file") +public class SysUploadFile extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @TableId(value="id",type = IdType.AUTO) + private Long id; + + /** 删除标记 */ + @TableField("del_flag") + private Long delFlag; + + /** 文件名称 */ + @TableField("name") + private String name; + + /** 上传时文件名 */ + @TableField("file_name") + private String fileName; + + /** 物理路径 */ + @TableField("path") + private String path; + + /** 文件URL */ + @TableField("url") + private String url; + + /** 文件扩展名 */ + @TableField("extend") + private String extend; + + /** 文件类型 */ + @TableField("dict_file_type") + private Long dictFileType; + + /** 关联对象ID */ + @TableField("object_id") + private Long objectId; + + /** 关联对象类型 */ + @TableField("object_type") + private String objectType; + + /** 关联对象ID */ + @TableField("object_link_id") + private String objectLinkId; + + /** 排序 */ + @TableField("sort") + private Long sort; + + /** 标签 */ + @TableField("tags") + private String tags; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setDelFlag(Long delFlag) + { + this.delFlag = delFlag; + } + + public Long getDelFlag() + { + return delFlag; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setFileName(String fileName) + { + this.fileName = fileName; + } + + public String getFileName() + { + return fileName; + } + public void setPath(String path) + { + this.path = path; + } + + public String getPath() + { + return path; + } + public void setUrl(String url) + { + this.url = url; + } + + public String getUrl() + { + return url; + } + public void setExtend(String extend) + { + this.extend = extend; + } + + public String getExtend() + { + return extend; + } + public void setDictFileType(Long dictFileType) + { + this.dictFileType = dictFileType; + } + + public Long getDictFileType() + { + return dictFileType; + } + public void setObjectId(Long objectId) + { + this.objectId = objectId; + } + + public Long getObjectId() + { + return objectId; + } + public void setObjectType(String objectType) + { + this.objectType = objectType; + } + + public String getObjectType() + { + return objectType; + } + + public String getObjectLinkId() { + return objectLinkId; + } + + public void setObjectLinkId(String objectLinkId) { + this.objectLinkId = objectLinkId; + } + + public void setSort(Long sort) + { + this.sort = sort; + } + + public Long getSort() + { + return sort; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .append("name", getName()) + .append("fileName", getFileName()) + .append("path", getPath()) + .append("url", getUrl()) + .append("extend", getExtend()) + .append("dictFileType", getDictFileType()) + .append("objectId", getObjectId()) + .append("objectType", getObjectType()) + .append("sort", getSort()) + .toString(); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiBo.java new file mode 100644 index 0000000..f43f624 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiBo.java @@ -0,0 +1,68 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.DjiApi; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 大疆开发业务对象 dji_api + * + * @author szs + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DjiApi.class, reverseConvertGenerate = false) +public class DjiApiBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 大疆api类型 + */ + @NotBlank(message = "大疆api类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String djiApiType; + + /** + * 版本名称 + */ + @NotBlank(message = "版本名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 版本号 + */ + @NotBlank(message = "版本号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String nameVersionNo; + + /** + * 版本次数 + */ +// @NotNull(message = "版本次数不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer versionCount; + + /** + * 发步日期 + */ + @NotNull(message = "发步日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date timeRelease; + + /** + * 备注 + */ +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiErrorBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiErrorBo.java new file mode 100644 index 0000000..6ed64e3 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiErrorBo.java @@ -0,0 +1,84 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.DjiApiError; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 大疆开发-错误码业务对象 dji_api_error + * + * @author szs + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DjiApiError.class, reverseConvertGenerate = false) +public class DjiApiErrorBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 大疆APIId + */ + @NotNull(message = "大疆APIId不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long djiApiId; + + /** + * 大疆API版本 + */ +// @NotBlank(message = "大疆API版本不能为空", groups = { AddGroup.class, EditGroup.class }) + private String djiApiName; + + /** + * 错误码 + */ + @NotBlank(message = "错误码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 中文描述 + */ + @NotBlank(message = "中文描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String nameCn; + + /** + * 英文描述 + */ +// @NotBlank(message = "英文描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String nameEn; + + /** + * 是否变更 + */ +// @NotBlank(message = "是否变更不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isChangeFlag; + + /** + * 历史变更次数 + */ +// @NotNull(message = "历史变更次数不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer changeHistroyCount; + + /** + * 历史变更Ids(,分隔) + */ +// @NotBlank(message = "历史变更Ids(,分隔)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String changeHistoryIds; + + /** + * 大疆开发-错误码 + */ +// @NotBlank(message = "大疆开发-错误码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SiteWeekBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SiteWeekBo.java new file mode 100644 index 0000000..826ef37 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SiteWeekBo.java @@ -0,0 +1,73 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SiteWeek; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 工地日期周业务对象 site_week + * + * @author szs + * @date 2025-05-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SiteWeek.class, reverseConvertGenerate = false) +public class SiteWeekBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 名称 + */ +// @NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 年月日名称 + */ +// @NotBlank(message = "年月日名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String nameTime; + + /** + * 周编号 + */ +// @NotNull(message = "周编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long weekNo; + + /** + * 周描述 + */ +// @NotBlank(message = "周描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String weekNoDescr; + + /** + * 分组编号(备用) + */ +// @NotNull(message = "分组编号(备用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long groupNo; + + private String dirTile;//瓦片路径 + private String dirTileZip;//瓦片压缩包 + private String dirImg;//图片路径 + private String dirVideo;//视频路径 + private String isKeepFlag; //是否保存(0正常 1停用) + + + /** + * 备注 + */ +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SiteWeekOssBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SiteWeekOssBo.java new file mode 100644 index 0000000..84e23b0 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SiteWeekOssBo.java @@ -0,0 +1,78 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SiteWeekOss; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 工地周OSS对象存储业务对象 site_week_oss + * + * @author szs + * @date 2025-05-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SiteWeekOss.class, reverseConvertGenerate = false) +public class SiteWeekOssBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 工地周id + */ + @NotNull(message = "工地周id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long siteWeekId; + + /** + * 周编号 + */ + @NotNull(message = "周编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long weekNo; + + /** + * 文件名 + */ + @NotBlank(message = "文件名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fileName; + + /** + * 原名 + */ + @NotBlank(message = "原名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String originalName; + + /** + * 文件后缀名 + */ + @NotBlank(message = "文件后缀名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fileSuffix; + + /** + * URL地址 + */ + @NotBlank(message = "URL地址不能为空", groups = { AddGroup.class, EditGroup.class }) + private String url; + + /** + * 备注 + */ + @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + /** + * 服务商 + */ + @NotBlank(message = "服务商不能为空", groups = { AddGroup.class, EditGroup.class }) + private String service; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SubscribeApiBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SubscribeApiBo.java new file mode 100644 index 0000000..7098cee --- /dev/null +++ b/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 subscribeUser; + + /** + * 公钥 + */ + @NotNull(message = "公钥不能为空", groups = { EditGroup.class, AddGroup.class }) + private String publicKey; + + /** + *私钥 + */ + @NotNull(message = "私钥不能为空", groups = { EditGroup.class, AddGroup.class }) + private String privateKey; + + /** + *是否开启 + */ + private Boolean isEnable; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigBo.java new file mode 100644 index 0000000..136964f --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigBo.java @@ -0,0 +1,117 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SysSubmailConfig; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import org.dromara.system.domain.SysUser; + +import java.util.List; + +/** + * 赛邮服务配置业务对象 sys_submail_config + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysSubmailConfig.class, reverseConvertGenerate = false) +public class SysSubmailConfigBo extends BaseEntity { + + /** + * 字典编码 + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 接口名称 + */ + @NotBlank(message = "接口名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 接口编码 + */ + @NotBlank(message = "接口编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String code; + + /** + * 赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata) + */ + @NotBlank(message = "赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String type; + + /** + * 接口Url + */ + @NotBlank(message = "接口Url不能为空", groups = { AddGroup.class, EditGroup.class }) + private String url; + + /** + * AppId + */ + @NotBlank(message = "AppId不能为空", groups = { AddGroup.class, EditGroup.class }) + private String appid; + + /** + * signature + */ + @NotBlank(message = "signature不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signature; + private String project; //模板编码 + + /** + * tag参数 + */ +// @NotBlank(message = "tag参数不能为空", groups = { AddGroup.class, EditGroup.class }) + private String tag; + + /** + * UNIX 时间戳 + */ +// @NotBlank(message = "UNIX 时间戳不能为空", groups = { AddGroup.class, EditGroup.class }) + private String timestamp; + + /** + * API 授权模式(normal) + */ +// @NotBlank(message = "API 授权模式(normal)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signType; + + /** + * signature加密计算方式 + */ +// @NotBlank(message = "signature加密计算方式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ +// @NotBlank(message = "最新反馈状态(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String latestResStatus; + + /** + * 备注 + */ +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + + + //发送传参 + private String to; //接收人 + private String content; //内容 + private String multi; //整合文本 + private String multiParam; //整合文本-单个参数(适合批量发送) + private String vars; //动态变量 + private Long[] configUserIds; //动态变量 + private List configUserList; //动态变量 + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigUserBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigUserBo.java new file mode 100644 index 0000000..b911a1f --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigUserBo.java @@ -0,0 +1,58 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 赛邮服务配置用户业务对象 sys_submail_config_user + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysSubmailConfigUser.class, reverseConvertGenerate = false) +public class SysSubmailConfigUserBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 赛邮配置ID + */ + @NotNull(message = "赛邮配置ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long submailConfigId; + + @NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + + /** + * 用户名称 + */ + @NotBlank(message = "用户名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 手机号 + */ + @NotBlank(message = "手机号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String phonenumber; + + /** + * 备注 + */ + @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailLogBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailLogBo.java new file mode 100644 index 0000000..0d5d108 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailLogBo.java @@ -0,0 +1,126 @@ +package org.dromara.system.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 赛邮服务发送log业务对象 sys_submail_log + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysSubmailLog.class, reverseConvertGenerate = false) +public class SysSubmailLogBo extends BaseEntity { + + /** + * 字典编码 + */ + @NotNull(message = "字典编码不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 赛邮配置ID + */ + @NotNull(message = "赛邮配置ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long submailConfigId; + + /** + * 接口名称 + */ + @NotBlank(message = "接口名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 接口编码 + */ +// @NotBlank(message = "接口编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String code; + + /** + * 接口Url + */ + @NotBlank(message = "接口Url不能为空", groups = { AddGroup.class, EditGroup.class }) + private String url; + + /** + * 接收人 + */ +// @NotBlank(message = "接收人不能为空", groups = { AddGroup.class, EditGroup.class }) +// @TableField("to_receiver") +// private String to; + private String toReceiver; + + /** + * 内容 + */ +// @NotBlank(message = "内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String content; + + /** + * 模板编码 + */ +// @NotBlank(message = "模板编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String project; + + /** + * 整合文本 + */ +// @NotBlank(message = "整合文本不能为空", groups = { AddGroup.class, EditGroup.class }) + private String multi; + + /** + * 动态变量 + */ +// @NotBlank(message = "动态变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String vars; + + /** + * tag参数 + */ +// @NotBlank(message = "tag参数不能为空", groups = { AddGroup.class, EditGroup.class }) + private String tag; + + /** + * UNIX 时间戳 + */ +// @NotBlank(message = "UNIX 时间戳不能为空", groups = { AddGroup.class, EditGroup.class }) + private String timestamp; + + /** + * API 授权模式(normal) + */ +// @NotBlank(message = "API 授权模式(normal)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signType; + + /** + * signature加密计算方式 + */ +// @NotBlank(message = "signature加密计算方式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ +// @NotBlank(message = "最新反馈状态(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String latestResStatus; + + private String result; + + + /** + * 备注 + */ +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiErrorVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiErrorVo.java new file mode 100644 index 0000000..f0c34d2 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiErrorVo.java @@ -0,0 +1,93 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.DjiApiError; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 大疆开发-错误码视图对象 dji_api_error + * + * @author szs + * @date 2025-05-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DjiApiError.class) +public class DjiApiErrorVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 大疆APIId + */ + @ExcelProperty(value = "大疆APIId") + private Long djiApiId; + + /** + * 大疆API版本 + */ + @ExcelProperty(value = "大疆API版本") + private String djiApiName; + + /** + * 错误码 + */ + @ExcelProperty(value = "错误码") + private String name; + + /** + * 中文描述 + */ + @ExcelProperty(value = "中文描述") + private String nameCn; + + /** + * 英文描述 + */ + @ExcelProperty(value = "英文描述") + private String nameEn; + + /** + * 是否变更 + */ + @ExcelProperty(value = "是否变更", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_yes_no") + private String isChangeFlag; + + /** + * 历史变更次数 + */ + @ExcelProperty(value = "历史变更次数") + private Integer changeHistroyCount; + + /** + * 历史变更Ids(,分隔) + */ + @ExcelProperty(value = "历史变更Ids(,分隔)") + private String changeHistoryIds; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiVo.java new file mode 100644 index 0000000..aff408d --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiVo.java @@ -0,0 +1,77 @@ +package org.dromara.system.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.system.domain.DjiApi; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 大疆开发视图对象 dji_api + * + * @author szs + * @date 2025-05-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DjiApi.class) +public class DjiApiVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 大疆api类型 + */ + @ExcelProperty(value = "大疆api类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "dji_api_type") + private String djiApiType; + + /** + * 版本名称 + */ + @ExcelProperty(value = "版本名称") + private String name; + + /** + * 版本号 + */ + @ExcelProperty(value = "版本号") + private String nameVersionNo; + + /** + * 版本次数 + */ + @ExcelProperty(value = "版本次数") + private Integer versionCount; + + /** + * 发步日期 + */ + @ExcelProperty(value = "发步日期") + private Date timeRelease; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SiteWeekOssVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SiteWeekOssVo.java new file mode 100644 index 0000000..9271e36 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SiteWeekOssVo.java @@ -0,0 +1,86 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SiteWeekOss; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 工地周OSS对象存储视图对象 site_week_oss + * + * @author szs + * @date 2025-05-10 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SiteWeekOss.class) +public class SiteWeekOssVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 工地周id + */ + @ExcelProperty(value = "工地周id") + private Long siteWeekId; + + /** + * 周编号 + */ + @ExcelProperty(value = "周编号") + private Long weekNo; + + /** + * 文件名 + */ + @ExcelProperty(value = "文件名") + private String fileName; + + /** + * 原名 + */ + @ExcelProperty(value = "原名") + private String originalName; + + /** + * 文件后缀名 + */ + @ExcelProperty(value = "文件后缀名") + private String fileSuffix; + + /** + * URL地址 + */ + @ExcelProperty(value = "URL地址") + private String url; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 服务商 + */ + @ExcelProperty(value = "服务商") + private String service; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SiteWeekVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SiteWeekVo.java new file mode 100644 index 0000000..2085947 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SiteWeekVo.java @@ -0,0 +1,86 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SiteWeek; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 工地日期周视图对象 site_week + * + * @author szs + * @date 2025-05-10 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SiteWeek.class) +public class SiteWeekVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 名称 + */ + @ExcelProperty(value = "名称") + private String name; + + /** + * 年月日名称 + */ + @ExcelProperty(value = "年月日名称") + private String nameTime; + + /** + * 周编号 + */ + @ExcelProperty(value = "周编号") + private Long weekNo; + + /** + * 周描述 + */ + @ExcelProperty(value = "周描述") + private String weekNoDescr; + + /** + * 分组编号(备用) + */ + @ExcelProperty(value = "分组编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "备=用") + private Long groupNo; + + @ExcelProperty(value = "瓦片路径") + private String dirTile; + @ExcelProperty(value = "瓦片压缩包") + private String dirTileZip; + @ExcelProperty(value = "图片路径") + private String dirImg; + @ExcelProperty(value = "视频路径") + private String dirVideo; + @ExcelProperty(value = "是否保存") + private String isKeepFlag; //是否保存(0正常 1停用) + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigUserVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigUserVo.java new file mode 100644 index 0000000..5d8a7e2 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigUserVo.java @@ -0,0 +1,67 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SysSubmailConfigUser; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 赛邮服务配置用户视图对象 sys_submail_config_user + * + * @author szs + * @date 2025-05-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysSubmailConfigUser.class) +public class SysSubmailConfigUserVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 赛邮配置ID + */ + @ExcelProperty(value = "赛邮配置ID") + private Long submailConfigId; + + + @ExcelProperty(value = "用户ID") + private Long userId; + + + /** + * 用户名称 + */ + @ExcelProperty(value = "用户名称") + private String name; + + /** + * 手机号 + */ + @ExcelProperty(value = "手机号") + private String phonenumber; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigVo.java new file mode 100644 index 0000000..6ed78ef --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigVo.java @@ -0,0 +1,115 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SysSubmailConfig; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.system.domain.SysUser; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 赛邮服务配置视图对象 sys_submail_config + * + * @author szs + * @date 2025-05-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysSubmailConfig.class) +public class SysSubmailConfigVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @ExcelProperty(value = "字典编码") + private Long id; + + /** + * 接口名称 + */ + @ExcelProperty(value = "接口名称") + private String name; + + /** + * 接口编码 + */ + @ExcelProperty(value = "接口编码") + private String code; + + /** + * 赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata) + */ + @ExcelProperty(value = "赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata)") + private String type; + + /** + * 接口Url + */ + @ExcelProperty(value = "接口Url") + private String url; + + /** + * AppId + */ + @ExcelProperty(value = "AppId") + private String appid; + + /** + * signature + */ + @ExcelProperty(value = "signature") + private String signature; + private String project; //模板编码 + /** + * tag参数 + */ + @ExcelProperty(value = "tag参数") + private String tag; + + /** + * UNIX 时间戳 + */ + @ExcelProperty(value = "UNIX 时间戳") + private String timestamp; + + /** + * API 授权模式(normal) + */ + @ExcelProperty(value = "API 授权模式(normal)") + private String signType; + + /** + * signature加密计算方式 + */ + @ExcelProperty(value = "signature加密计算方式") + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + @ExcelProperty(value = "最新反馈状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_yes_no") + private String latestResStatus; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + private Long[] configUserIds; //动态变量 + private List configUserList; //动态变量 + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailLogVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailLogVo.java new file mode 100644 index 0000000..3e5dd70 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailLogVo.java @@ -0,0 +1,134 @@ +package org.dromara.system.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.system.domain.SysSubmailLog; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 赛邮服务发送log视图对象 sys_submail_log + * + * @author szs + * @date 2025-05-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysSubmailLog.class) +public class SysSubmailLogVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @ExcelProperty(value = "字典编码") + private Long id; + + /** + * 赛邮配置ID + */ + @ExcelProperty(value = "赛邮配置ID") + private Long submailConfigId; + + /** + * 接口名称 + */ + @ExcelProperty(value = "接口名称") + private String name; + + /** + * 接口编码 + */ + @ExcelProperty(value = "接口编码") + private String code; + + /** + * 接口Url + */ + @ExcelProperty(value = "接口Url") + private String url; + + /** + * 接收人 + */ + @ExcelProperty(value = "接收人") +// @TableField("to_receiver") + private String toReceiver; + + /** + * 内容 + */ + @ExcelProperty(value = "内容") + private String content; + + /** + * 模板编码 + */ + @ExcelProperty(value = "模板编码") + private String project; + + /** + * 整合文本 + */ + @ExcelProperty(value = "整合文本") + private String multi; + + /** + * 动态变量 + */ + @ExcelProperty(value = "动态变量") + private String vars; + + /** + * tag参数 + */ + @ExcelProperty(value = "tag参数") + private String tag; + + /** + * UNIX 时间戳 + */ + @ExcelProperty(value = "UNIX 时间戳") + private String timestamp; + + /** + * API 授权模式(normal) + */ + @ExcelProperty(value = "API 授权模式(normal)") + private String signType; + + /** + * signature加密计算方式 + */ + @ExcelProperty(value = "signature加密计算方式") + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + @ExcelProperty(value = "最新反馈状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_yes_no") + private String latestResStatus; + + @ExcelProperty(value = "返回结果") + private String result; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java new file mode 100644 index 0000000..ae7c0b4 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java @@ -0,0 +1,99 @@ +package org.dromara.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.sensitive.annotation.Sensitive; +import org.dromara.common.sensitive.core.SensitiveStrategy; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.system.domain.SysUser; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 用户信息视图对象 sys_user + * + * @author Michelle.Chung + */ +@Data +public class SysUserProVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户类型(sys_user系统用户) + */ + private String userType; + + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + + /** + * 帐号状态(0正常 1停用) + */ + private String status; + + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 部门名 + */ + private String deptName; + + + /** + * 平台名称 + */ + private String productName; + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java index 21be450..e82b872 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java @@ -8,6 +8,8 @@ import org.dromara.system.domain.SysConfig; import org.dromara.system.service.ISysConfigService; import org.springframework.stereotype.Service; +import java.util.List; + /** * 配置服务 * @@ -36,4 +38,10 @@ public class RemoteConfigServiceImpl implements RemoteConfigService { return ip; } +// @Override +// public List selectStreamType(String deviceSn) { +// List list =sysConfigService.selectStreamType(deviceSn); +// return list; +// } + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java new file mode 100644 index 0000000..981c85a --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java @@ -0,0 +1,38 @@ +package org.dromara.system.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.service.DictService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.resource.api.RemoteMessageService; +import org.dromara.system.api.RemoteNoticeService; +import org.dromara.system.api.domain.bo.RemoteNoticeBo; +import org.dromara.system.domain.SysNotice; +import org.dromara.system.mapper.SysNoticeMapper; +import org.springframework.stereotype.Service; + + + +/** + * @author sean + * @version 1.1 + * @date 2022/6/1 + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteNoticeServiceImpl implements RemoteNoticeService { + private final DictService dictService; + private final SysNoticeMapper sysNoticeMapper; + @DubboReference + private final RemoteMessageService remoteMessageService; + + @Override + public int saveNotice(RemoteNoticeBo bo) { + SysNotice notice = MapstructUtils.convert(bo, SysNotice.class); + /*String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType());*/ + remoteMessageService.publishAll(bo.getParam()); + return sysNoticeMapper.insert(notice); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java index ef659cb..410a68b 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java @@ -40,6 +40,7 @@ public class RemotePostServiceImpl implements RemotePostService { remotePostVo.setPostId(aiLabel.getPostId()); remotePostVo.setPostName(aiLabel.getPostName()); remotePostVo.setPostCode(aiLabel.getPostCode()); + remotePostVo.setStatus(aiLabel.getStatus()); return remotePostVo; }) .collect(Collectors.toList()); diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubmailConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubmailConfigServiceImpl.java new file mode 100644 index 0000000..e35f1c8 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubmailConfigServiceImpl.java @@ -0,0 +1,39 @@ +package org.dromara.system.dubbo; + +import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.domain.R; +import org.dromara.system.api.RemoteClientService; +import org.dromara.system.api.RemoteSubmailConfigService; +import org.dromara.system.api.domain.vo.RemoteClientVo; +import org.dromara.system.domain.vo.SysClientVo; +import org.dromara.system.service.ISysClientService; +import org.dromara.system.service.ISysSubmailConfigService; +import org.springframework.stereotype.Service; + +/** + * 客户端服务 + * + * @author Michelle.Chung + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteSubmailConfigServiceImpl implements RemoteSubmailConfigService { + + + private final ISysSubmailConfigService sysSubmailConfigService; + + + /** + * + * @param code 必须传参:smsMultixsend + * @param multiParam 前台传参 JSON.stringfy( {"jobName":"翟山街道华盛","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"}) + * @return + */ + @Override + public R remoteCmdSend(String code, String multiParam) { + return sysSubmailConfigService.cmdSend(code, multiParam); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubscribeServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubscribeServiceImpl.java new file mode 100644 index 0000000..273b027 --- /dev/null +++ b/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); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java index cb6bba9..6cfc187 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java @@ -309,7 +309,7 @@ public class RemoteUserServiceImpl implements RemoteUserService { */ @Override public List selectListByIds(List userIds) { - List sysUserVos = userService.selectUserByIds(userIds, null); + List sysUserVos = userService.selectFlwByIds(userIds, null); return MapstructUtils.convert(sysUserVos, RemoteUserVo.class); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/handle/ListTypeHandler.java b/dk-modules/system/src/main/java/org/dromara/system/handle/ListTypeHandler.java new file mode 100644 index 0000000..8ae1f87 --- /dev/null +++ b/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> { + + @Override + public void setParameter(PreparedStatement preparedStatement, int i, List alertTypeList, JdbcType jdbcType) throws SQLException { + preparedStatement.setString(i, JsonUtil.toJson(alertTypeList)); + } + + @Override + public List 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 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 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); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/listener/DjiApiErrorImportListener.java b/dk-modules/system/src/main/java/org/dromara/system/listener/DjiApiErrorImportListener.java new file mode 100644 index 0000000..7942b4e --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/listener/DjiApiErrorImportListener.java @@ -0,0 +1,177 @@ +package org.dromara.system.listener; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HtmlUtil; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StreamUtils; +import org.dromara.common.core.utils.ValidatorUtils; +import org.dromara.common.excel.core.ExcelListener; +import org.dromara.common.excel.core.ExcelResult; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.system.domain.bo.DjiApiBo; +import org.dromara.system.domain.bo.DjiApiErrorBo; +import org.dromara.system.domain.vo.DjiApiErrorVo; +import org.dromara.system.domain.vo.DjiApiVo; +import org.dromara.system.service.IDjiApiErrorService; +import org.dromara.system.service.IDjiApiService; + +import java.util.List; + +/** + * 系统用户自定义导入 + * + * @author Lion Li + */ +@Slf4j +public class DjiApiErrorImportListener extends AnalysisEventListener implements ExcelListener { + + + private final IDjiApiErrorService djiApiErrorService; + private final IDjiApiService djiApiService; + + + private final Boolean isUpdateSupport; + + private final Long operUserId; + + private int successNum = 0; + private int failureNum = 0; + private final StringBuilder successMsg = new StringBuilder(); + private final StringBuilder failureMsg = new StringBuilder(); + + public DjiApiErrorImportListener(Boolean isUpdateSupport) { + this.djiApiErrorService = SpringUtils.getBean(IDjiApiErrorService.class); + this.djiApiService = SpringUtils.getBean(IDjiApiService.class); + this.isUpdateSupport = isUpdateSupport; + this.operUserId = LoginHelper.getUserId(); + } + + @Override + public void invoke(DjiApiErrorVo apiErrVo, AnalysisContext context) { + if(StrUtil.isEmpty(apiErrVo.getDjiApiName())){ + failureNum++; + failureMsg.append("
").append(failureNum).append("大疆开发API 不存在,请检查大疆API"); + return; + } + //检查大疆API编号是否存在 + DjiApiBo djiApiBo = new DjiApiBo(); + djiApiBo.setName(apiErrVo.getDjiApiName()); + List djiApiVoList = djiApiService.queryList(djiApiBo); + if(djiApiVoList.size()<=0){ + failureNum++; + failureMsg.append("
").append(failureNum).append("大疆开发API ").append(apiErrVo.getDjiApiName()).append(" 不存在,请检查大疆API"); + }else{ + DjiApiVo djiApiVo = djiApiVoList.get(0); + //上次的版本 + DjiApiVo djiApiVoOld = null; + if(djiApiVo.getVersionCount() >= 2){ + int versionCountOld = djiApiVo.getVersionCount() - 1; + DjiApiBo djiApiBoOld = new DjiApiBo(); + djiApiBoOld.setDjiApiType(djiApiVo.getDjiApiType()); + djiApiBoOld.setVersionCount(versionCountOld); + List djiApiVoOldList = djiApiService.queryList(djiApiBoOld); + if(djiApiVoOldList.size() > 0){ + djiApiVoOld = djiApiVoOldList.get(0); + } + } + + + DjiApiErrorBo apiErrorBo = new DjiApiErrorBo(); + apiErrorBo.setDjiApiId(djiApiVo.getId()); + apiErrorBo.setName(apiErrVo.getName()); + DjiApiErrorVo djiApiErrorVo = this.djiApiErrorService.selectOneApiErrorByInfo(apiErrorBo); + + try { + // 验证是否存在这个用户 + if (ObjectUtil.isNull(djiApiErrorVo)) { + DjiApiErrorBo apiErrBo = BeanUtil.toBean(apiErrVo, DjiApiErrorBo.class); + apiErrBo.setDjiApiId(djiApiVo.getId()); + apiErrBo.setDjiApiName(djiApiVo.getName()); + ValidatorUtils.validate(apiErrBo); + apiErrBo.setCreateBy(operUserId); + + //找历史记录,查看上一个版本是否不同 + if(null != djiApiVoOld){ + DjiApiErrorBo lastErrBo = new DjiApiErrorBo(); + lastErrBo.setDjiApiId(djiApiVoOld.getId()); + lastErrBo.setName(apiErrVo.getName()); + DjiApiErrorVo lastErrVo = djiApiErrorService.selectOneApiErrorByInfo(lastErrBo); + if(StrUtil.equals(lastErrVo.getNameCn(),apiErrVo.getNameCn())){ + apiErrBo.setIsChangeFlag("N"); + }else { + apiErrBo.setIsChangeFlag("Y"); + } + } + + djiApiErrorService.insertByBo(apiErrBo); + successNum++; + successMsg.append("
").append(successNum).append("、错误码 ").append(apiErrBo.getName()).append(" 导入成功"); + } else if (isUpdateSupport) { + Long apiErrVoId = djiApiErrorVo.getId(); + DjiApiErrorBo apiErrBo = BeanUtil.toBean(apiErrVo, DjiApiErrorBo.class); + apiErrBo.setId(apiErrVoId); + ValidatorUtils.validate(apiErrBo); + apiErrBo.setUpdateBy(operUserId); + djiApiErrorService.updateByBo(apiErrBo); + successNum++; + successMsg.append("
").append(successNum).append("、错误码 ").append(apiErrBo.getName()).append(" 更新成功"); + } else { + failureNum++; + failureMsg.append("
").append(failureNum).append("、错误码 ").append(djiApiErrorVo.getName()).append(" 已存在"); + } + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、错误码 " + HtmlUtil.cleanHtmlTag(apiErrVo.getName()) + " 导入失败:"; + String message = e.getMessage(); + if (e instanceof ConstraintViolationException cvException) { + message = StreamUtils.join(cvException.getConstraintViolations(), ConstraintViolation::getMessage, ", "); + } + failureMsg.append(msg).append(message); + log.error(msg, e); + } + + + + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + + @Override + public ExcelResult getExcelResult() { + return new ExcelResult() { + + @Override + public String getAnalysis() { + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } else { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + @Override + public List getList() { + return null; + } + + @Override + public List getErrorList() { + return null; + } + }; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiErrorMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiErrorMapper.java new file mode 100644 index 0000000..b302324 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiErrorMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.DjiApiError; +import org.dromara.system.domain.vo.DjiApiErrorVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 大疆开发-错误码Mapper接口 + * + * @author szs + * @date 2025-05-14 + */ +public interface DjiApiErrorMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiMapper.java new file mode 100644 index 0000000..c9d458d --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.DjiApi; +import org.dromara.system.domain.vo.DjiApiVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 大疆开发Mapper接口 + * + * @author szs + * @date 2025-05-14 + */ +public interface DjiApiMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SiteWeekMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SiteWeekMapper.java new file mode 100644 index 0000000..1c306a9 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SiteWeekMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SiteWeek; +import org.dromara.system.domain.vo.SiteWeekVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 工地日期周Mapper接口 + * + * @author szs + * @date 2025-05-10 + */ +public interface SiteWeekMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SiteWeekOssMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SiteWeekOssMapper.java new file mode 100644 index 0000000..1e36b0b --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SiteWeekOssMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SiteWeekOss; +import org.dromara.system.domain.vo.SiteWeekOssVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 工地周OSS对象存储Mapper接口 + * + * @author szs + * @date 2025-05-10 + */ +public interface SiteWeekOssMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SubscribeApiMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SubscribeApiMapper.java new file mode 100644 index 0000000..bd4ab40 --- /dev/null +++ b/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 { +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigMapper.java new file mode 100644 index 0000000..6b454e1 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysSubmailConfig; +import org.dromara.system.domain.vo.SysSubmailConfigVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 赛邮服务配置Mapper接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface SysSubmailConfigMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigUserMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigUserMapper.java new file mode 100644 index 0000000..842e632 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigUserMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 赛邮服务配置用户Mapper接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface SysSubmailConfigUserMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailLogMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailLogMapper.java new file mode 100644 index 0000000..7913845 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailLogMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.domain.vo.SysSubmailLogVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 赛邮服务发送logMapper接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface SysSubmailLogMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java index bec69cc..537c71e 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java @@ -9,6 +9,7 @@ import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; @@ -91,4 +92,10 @@ public interface SysUserMapper extends BaseMapperPlus { }) int updateById(@Param(Constants.ENTITY) SysUser user); + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id") + }) + List selectFlwByIds(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + List allList(@Param("param") SysUserBo user); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java b/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java index 5a1f009..2994447 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java @@ -74,4 +74,7 @@ public interface IAiLabelService { List queryListByLabel(List labelIds); String getFlowCode(String labelCode); + + List selectLabelByList(String postCode); + List selectLabelList(); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiErrorService.java b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiErrorService.java new file mode 100644 index 0000000..24fb14e --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiErrorService.java @@ -0,0 +1,72 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.DjiApiError; +import org.dromara.system.domain.vo.DjiApiErrorVo; +import org.dromara.system.domain.bo.DjiApiErrorBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 大疆开发-错误码Service接口 + * + * @author szs + * @date 2025-05-14 + */ +public interface IDjiApiErrorService { + + /** + * 查询大疆开发-错误码 + * + * @param id 主键 + * @return 大疆开发-错误码 + */ + DjiApiErrorVo queryById(Long id); + + /** + * 分页查询大疆开发-错误码列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大疆开发-错误码分页列表 + */ + TableDataInfo queryPageList(DjiApiErrorBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的大疆开发-错误码列表 + * + * @param bo 查询条件 + * @return 大疆开发-错误码列表 + */ + List queryList(DjiApiErrorBo bo); + + /** + * 新增大疆开发-错误码 + * + * @param bo 大疆开发-错误码 + * @return 是否新增成功 + */ + Boolean insertByBo(DjiApiErrorBo bo); + + /** + * 修改大疆开发-错误码 + * + * @param bo 大疆开发-错误码 + * @return 是否修改成功 + */ + Boolean updateByBo(DjiApiErrorBo bo); + + /** + * 校验并批量删除大疆开发-错误码信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + DjiApiErrorVo selectOneApiErrorByInfo(DjiApiErrorBo apiErrorBo); + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiService.java b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiService.java new file mode 100644 index 0000000..fa273e4 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiService.java @@ -0,0 +1,69 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.DjiApi; +import org.dromara.system.domain.vo.DjiApiVo; +import org.dromara.system.domain.bo.DjiApiBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 大疆开发Service接口 + * + * @author szs + * @date 2025-05-14 + */ +public interface IDjiApiService { + + /** + * 查询大疆开发 + * + * @param id 主键 + * @return 大疆开发 + */ + DjiApiVo queryById(Long id); + + /** + * 分页查询大疆开发列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大疆开发分页列表 + */ + TableDataInfo queryPageList(DjiApiBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的大疆开发列表 + * + * @param bo 查询条件 + * @return 大疆开发列表 + */ + List queryList(DjiApiBo bo); + + /** + * 新增大疆开发 + * + * @param bo 大疆开发 + * @return 是否新增成功 + */ + Boolean insertByBo(DjiApiBo bo); + + /** + * 修改大疆开发 + * + * @param bo 大疆开发 + * @return 是否修改成功 + */ + Boolean updateByBo(DjiApiBo bo); + + /** + * 校验并批量删除大疆开发信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISiteWeekOssService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISiteWeekOssService.java new file mode 100644 index 0000000..437255e --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISiteWeekOssService.java @@ -0,0 +1,69 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.SiteWeekOss; +import org.dromara.system.domain.vo.SiteWeekOssVo; +import org.dromara.system.domain.bo.SiteWeekOssBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工地周OSS对象存储Service接口 + * + * @author szs + * @date 2025-05-10 + */ +public interface ISiteWeekOssService { + + /** + * 查询工地周OSS对象存储 + * + * @param id 主键 + * @return 工地周OSS对象存储 + */ + SiteWeekOssVo queryById(Long id); + + /** + * 分页查询工地周OSS对象存储列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工地周OSS对象存储分页列表 + */ + TableDataInfo queryPageList(SiteWeekOssBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的工地周OSS对象存储列表 + * + * @param bo 查询条件 + * @return 工地周OSS对象存储列表 + */ + List queryList(SiteWeekOssBo bo); + + /** + * 新增工地周OSS对象存储 + * + * @param bo 工地周OSS对象存储 + * @return 是否新增成功 + */ + Boolean insertByBo(SiteWeekOssBo bo); + + /** + * 修改工地周OSS对象存储 + * + * @param bo 工地周OSS对象存储 + * @return 是否修改成功 + */ + Boolean updateByBo(SiteWeekOssBo bo); + + /** + * 校验并批量删除工地周OSS对象存储信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISiteWeekService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISiteWeekService.java new file mode 100644 index 0000000..bc808b8 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISiteWeekService.java @@ -0,0 +1,69 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.SiteWeek; +import org.dromara.system.domain.vo.SiteWeekVo; +import org.dromara.system.domain.bo.SiteWeekBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工地日期周Service接口 + * + * @author szs + * @date 2025-05-10 + */ +public interface ISiteWeekService { + + /** + * 查询工地日期周 + * + * @param id 主键 + * @return 工地日期周 + */ + SiteWeekVo queryById(Long id); + + /** + * 分页查询工地日期周列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工地日期周分页列表 + */ + TableDataInfo queryPageList(SiteWeekBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的工地日期周列表 + * + * @param bo 查询条件 + * @return 工地日期周列表 + */ + List queryList(SiteWeekBo bo); + + /** + * 新增工地日期周 + * + * @param bo 工地日期周 + * @return 是否新增成功 + */ + Boolean insertByBo(SiteWeekBo bo); + + /** + * 修改工地日期周 + * + * @param bo 工地日期周 + * @return 是否修改成功 + */ + Boolean updateByBo(SiteWeekBo bo); + + /** + * 校验并批量删除工地日期周信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISubscribeApiService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISubscribeApiService.java new file mode 100644 index 0000000..7fd3c79 --- /dev/null +++ b/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); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java index e8dda5f..981170b 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java @@ -86,4 +86,6 @@ public interface ISysConfigService { String selectStreamIp(); + List selectStreamType(String deviceSn); + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigService.java new file mode 100644 index 0000000..7ae1f1c --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigService.java @@ -0,0 +1,75 @@ +package org.dromara.system.service; + +import org.dromara.common.core.domain.R; +import org.dromara.system.domain.SysSubmailConfig; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.vo.SysSubmailConfigVo; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 赛邮服务配置Service接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface ISysSubmailConfigService { + + /** + * 查询赛邮服务配置 + * + * @param id 主键 + * @return 赛邮服务配置 + */ + SysSubmailConfigVo queryById(Long id); + + /** + * 分页查询赛邮服务配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置分页列表 + */ + TableDataInfo queryPageList(SysSubmailConfigBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的赛邮服务配置列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置列表 + */ + List queryList(SysSubmailConfigBo bo); + + /** + * 新增赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否新增成功 + */ + Boolean insertByBo(SysSubmailConfigBo bo); + + /** + * 修改赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否修改成功 + */ + Boolean updateByBo(SysSubmailConfigBo bo); + + /** + * 校验并批量删除赛邮服务配置信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + R cmdSend(String code, String multiParam); + + String submailSendUtil(SysSubmailConfigBo bo, List configUserVoList); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigUserService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigUserService.java new file mode 100644 index 0000000..f9ad8fb --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigUserService.java @@ -0,0 +1,73 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 赛邮服务配置用户Service接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface ISysSubmailConfigUserService { + + /** + * 查询赛邮服务配置用户 + * + * @param id 主键 + * @return 赛邮服务配置用户 + */ + SysSubmailConfigUserVo queryById(Long id); + + /** + * 分页查询赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置用户分页列表 + */ + TableDataInfo queryPageList(SysSubmailConfigUserBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置用户列表 + */ + List queryList(SysSubmailConfigUserBo bo); + + /** + * 新增赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否新增成功 + */ + Boolean insertByBo(SysSubmailConfigUserBo bo); + + /** + * 修改赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否修改成功 + */ + Boolean updateByBo(SysSubmailConfigUserBo bo); + + /** + * 校验并批量删除赛邮服务配置用户信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + List selectConfigUserByConfigIds(List configIds); + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailLogService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailLogService.java new file mode 100644 index 0000000..3fda1eb --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailLogService.java @@ -0,0 +1,69 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.domain.vo.SysSubmailLogVo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 赛邮服务发送logService接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface ISysSubmailLogService { + + /** + * 查询赛邮服务发送log + * + * @param id 主键 + * @return 赛邮服务发送log + */ + SysSubmailLogVo queryById(Long id); + + /** + * 分页查询赛邮服务发送log列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务发送log分页列表 + */ + TableDataInfo queryPageList(SysSubmailLogBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的赛邮服务发送log列表 + * + * @param bo 查询条件 + * @return 赛邮服务发送log列表 + */ + List queryList(SysSubmailLogBo bo); + + /** + * 新增赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否新增成功 + */ + Boolean insertByBo(SysSubmailLogBo bo); + + /** + * 修改赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否修改成功 + */ + Boolean updateByBo(SysSubmailLogBo bo); + + /** + * 校验并批量删除赛邮服务发送log信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java index 5e8fd3c..5b188c5 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -260,6 +260,10 @@ public interface ISysUserService { */ List selectUserListByDept(Long deptId); + List selectUserList(SysUserBo user); //全量查询用户 + List selectUserwithPhonenumberList(SysUserBo user); //查询用户-有电话 + + /** * 通过角色ID查询用户ID * @@ -271,4 +275,8 @@ public interface ISysUserService { List selectUserByUserIds(List userIds); List assignUserSelect(Long deptId); + + List selectFlwByIds(List userIds, Long deptId); + + List allList(SysUserBo user); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java index 60ee64f..b42756c 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -9,6 +10,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo; +import org.dromara.system.domain.vo.AiLabelPostVo; +import org.dromara.system.domain.vo.SysPostVo; +import org.dromara.system.service.IAiLabelPostService; +import org.dromara.system.service.ISysPostService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.system.domain.bo.AiLabelBo; import org.dromara.system.domain.vo.AiLabelVo; @@ -20,6 +27,7 @@ import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * ai 识别类型Service业务层处理 @@ -33,6 +41,12 @@ public class AiLabelServiceImpl implements IAiLabelService { private final AiLabelMapper baseMapper; + @Autowired + private ISysPostService sysPostService; + + @Autowired + private IAiLabelPostService aiLabelPostService; + /** * 查询ai 识别类型 * @@ -40,7 +54,7 @@ public class AiLabelServiceImpl implements IAiLabelService { * @return ai 识别类型 */ @Override - public AiLabelVo queryById(Long labelId){ + public AiLabelVo queryById(Long labelId) { return baseMapper.selectVoById(labelId); } @@ -118,7 +132,7 @@ public class AiLabelServiceImpl implements IAiLabelService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(AiLabel entity){ + private void validEntityBeforeSave(AiLabel entity) { //TODO 做一些数据校验,如唯一约束 } @@ -131,7 +145,7 @@ public class AiLabelServiceImpl implements IAiLabelService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; @@ -140,7 +154,7 @@ public class AiLabelServiceImpl implements IAiLabelService { @Override public List queryListByLabel(List labelIds) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(!labelIds.isEmpty(),"label_id",labelIds); + queryWrapper.in(!labelIds.isEmpty(), "label_id", labelIds); return this.baseMapper.selectList(queryWrapper); } @@ -148,4 +162,40 @@ public class AiLabelServiceImpl implements IAiLabelService { public String getFlowCode(String labelCode) { return this.baseMapper.selectOne(new LambdaQueryWrapper().eq(AiLabel::getLabelEn, labelCode)).getFlowCode(); } + + @Override + public List selectLabelByList(String postCode) { + SysPostVo sysPostVo = sysPostService.selectLableByList(postCode, null); + if (sysPostVo != null) { + List postVoList = aiLabelPostService.queryListByLabel(sysPostVo.getPostId()); + return postVoList.stream() + .map(aiLabel -> { + AiLabelVo aiLabelVo = new AiLabelVo(); + aiLabelVo.setLabelId(aiLabel.getLabelId()); + aiLabelVo.setLabelEn(aiLabel.getLabelEn()); + aiLabelVo.setLabelCn(aiLabel.getLabelCn()); + aiLabelVo.setAiName(aiLabel.getAiName()); + return aiLabelVo; + }) + .collect(Collectors.toList()); + } + return ListUtil.empty(); + } + + @Override + public List selectLabelList() { + List aiLabelList = aiLabelPostService.getAiLabelList(); + return aiLabelList.stream() + .map(aiLabel -> { + AiLabelVo aiLabelVo = new AiLabelVo(); + aiLabelVo.setLabelId(aiLabel.getLabelId()); + aiLabelVo.setLabelEn(aiLabel.getLabelEn()); + aiLabelVo.setLabelCn(aiLabel.getLabelCn()); + aiLabelVo.setAiName(aiLabel.getAiName()); + return aiLabelVo; + }) + .collect(Collectors.toList()); + } + + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiErrorServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiErrorServiceImpl.java new file mode 100644 index 0000000..cb7f910 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiErrorServiceImpl.java @@ -0,0 +1,146 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.system.domain.SysUser; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.DjiApiErrorBo; +import org.dromara.system.domain.vo.DjiApiErrorVo; +import org.dromara.system.domain.DjiApiError; +import org.dromara.system.mapper.DjiApiErrorMapper; +import org.dromara.system.service.IDjiApiErrorService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 大疆开发-错误码Service业务层处理 + * + * @author szs + * @date 2025-05-14 + */ +@RequiredArgsConstructor +@Service +public class DjiApiErrorServiceImpl implements IDjiApiErrorService { + + private final DjiApiErrorMapper baseMapper; + + /** + * 查询大疆开发-错误码 + * + * @param id 主键 + * @return 大疆开发-错误码 + */ + @Override + public DjiApiErrorVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询大疆开发-错误码列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大疆开发-错误码分页列表 + */ + @Override + public TableDataInfo queryPageList(DjiApiErrorBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的大疆开发-错误码列表 + * + * @param bo 查询条件 + * @return 大疆开发-错误码列表 + */ + @Override + public List queryList(DjiApiErrorBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DjiApiErrorBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getDjiApiId() != null, DjiApiError::getDjiApiId, bo.getDjiApiId()); + lqw.like(StringUtils.isNotBlank(bo.getDjiApiName()), DjiApiError::getDjiApiName, bo.getDjiApiName()); + lqw.like(StringUtils.isNotBlank(bo.getName()), DjiApiError::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getNameCn()), DjiApiError::getNameCn, bo.getNameCn()); + lqw.eq(StringUtils.isNotBlank(bo.getNameEn()), DjiApiError::getNameEn, bo.getNameEn()); + lqw.eq(StringUtils.isNotBlank(bo.getIsChangeFlag()), DjiApiError::getIsChangeFlag, bo.getIsChangeFlag()); + lqw.eq(bo.getChangeHistroyCount() != null, DjiApiError::getChangeHistroyCount, bo.getChangeHistroyCount()); + lqw.eq(StringUtils.isNotBlank(bo.getChangeHistoryIds()), DjiApiError::getChangeHistoryIds, bo.getChangeHistoryIds()); + return lqw; + } + + /** + * 新增大疆开发-错误码 + * + * @param bo 大疆开发-错误码 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DjiApiErrorBo bo) { + DjiApiError add = MapstructUtils.convert(bo, DjiApiError.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改大疆开发-错误码 + * + * @param bo 大疆开发-错误码 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DjiApiErrorBo bo) { + DjiApiError update = MapstructUtils.convert(bo, DjiApiError.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DjiApiError entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除大疆开发-错误码信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public DjiApiErrorVo selectOneApiErrorByInfo(DjiApiErrorBo apiErrorBo) { + return baseMapper.selectVoOne(new LambdaQueryWrapper() + .eq(DjiApiError::getDjiApiId, apiErrorBo.getDjiApiId()) + .eq(DjiApiError::getName,apiErrorBo.getName())); + } + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiServiceImpl.java new file mode 100644 index 0000000..c31e273 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiServiceImpl.java @@ -0,0 +1,133 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.DjiApiBo; +import org.dromara.system.domain.vo.DjiApiVo; +import org.dromara.system.domain.DjiApi; +import org.dromara.system.mapper.DjiApiMapper; +import org.dromara.system.service.IDjiApiService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 大疆开发Service业务层处理 + * + * @author szs + * @date 2025-05-14 + */ +@RequiredArgsConstructor +@Service +public class DjiApiServiceImpl implements IDjiApiService { + + private final DjiApiMapper baseMapper; + + /** + * 查询大疆开发 + * + * @param id 主键 + * @return 大疆开发 + */ + @Override + public DjiApiVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询大疆开发列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大疆开发分页列表 + */ + @Override + public TableDataInfo queryPageList(DjiApiBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的大疆开发列表 + * + * @param bo 查询条件 + * @return 大疆开发列表 + */ + @Override + public List queryList(DjiApiBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DjiApiBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getDjiApiType()), DjiApi::getDjiApiType, bo.getDjiApiType()); + lqw.like(StringUtils.isNotBlank(bo.getName()), DjiApi::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getNameVersionNo()), DjiApi::getNameVersionNo, bo.getNameVersionNo()); + lqw.eq(bo.getVersionCount() != null, DjiApi::getVersionCount, bo.getVersionCount()); + lqw.eq(bo.getTimeRelease() != null, DjiApi::getTimeRelease, bo.getTimeRelease()); + return lqw; + } + + /** + * 新增大疆开发 + * + * @param bo 大疆开发 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DjiApiBo bo) { + DjiApi add = MapstructUtils.convert(bo, DjiApi.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改大疆开发 + * + * @param bo 大疆开发 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DjiApiBo bo) { + DjiApi update = MapstructUtils.convert(bo, DjiApi.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DjiApi entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除大疆开发信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/ISubscribeApiServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/ISubscribeApiServiceImpl.java new file mode 100644 index 0000000..06b9f33 --- /dev/null +++ b/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 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 wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SubscribeApi::getSubscribeCode, subscribeApiCode); + + return this.baseMapper.selectOne(wrapper); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SiteWeekOssServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SiteWeekOssServiceImpl.java new file mode 100644 index 0000000..efaac85 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SiteWeekOssServiceImpl.java @@ -0,0 +1,135 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SiteWeekOssBo; +import org.dromara.system.domain.vo.SiteWeekOssVo; +import org.dromara.system.domain.SiteWeekOss; +import org.dromara.system.mapper.SiteWeekOssMapper; +import org.dromara.system.service.ISiteWeekOssService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 工地周OSS对象存储Service业务层处理 + * + * @author szs + * @date 2025-05-10 + */ +@RequiredArgsConstructor +@Service +public class SiteWeekOssServiceImpl implements ISiteWeekOssService { + + private final SiteWeekOssMapper baseMapper; + + /** + * 查询工地周OSS对象存储 + * + * @param id 主键 + * @return 工地周OSS对象存储 + */ + @Override + public SiteWeekOssVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询工地周OSS对象存储列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工地周OSS对象存储分页列表 + */ + @Override + public TableDataInfo queryPageList(SiteWeekOssBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的工地周OSS对象存储列表 + * + * @param bo 查询条件 + * @return 工地周OSS对象存储列表 + */ + @Override + public List queryList(SiteWeekOssBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SiteWeekOssBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSiteWeekId() != null, SiteWeekOss::getSiteWeekId, bo.getSiteWeekId()); + lqw.eq(bo.getWeekNo() != null, SiteWeekOss::getWeekNo, bo.getWeekNo()); + lqw.like(StringUtils.isNotBlank(bo.getFileName()), SiteWeekOss::getFileName, bo.getFileName()); + lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SiteWeekOss::getOriginalName, bo.getOriginalName()); + lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SiteWeekOss::getFileSuffix, bo.getFileSuffix()); + lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SiteWeekOss::getUrl, bo.getUrl()); + lqw.eq(StringUtils.isNotBlank(bo.getService()), SiteWeekOss::getService, bo.getService()); + return lqw; + } + + /** + * 新增工地周OSS对象存储 + * + * @param bo 工地周OSS对象存储 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SiteWeekOssBo bo) { + SiteWeekOss add = MapstructUtils.convert(bo, SiteWeekOss.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改工地周OSS对象存储 + * + * @param bo 工地周OSS对象存储 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SiteWeekOssBo bo) { + SiteWeekOss update = MapstructUtils.convert(bo, SiteWeekOss.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SiteWeekOss entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除工地周OSS对象存储信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SiteWeekServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SiteWeekServiceImpl.java new file mode 100644 index 0000000..de8a353 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SiteWeekServiceImpl.java @@ -0,0 +1,135 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SiteWeekBo; +import org.dromara.system.domain.vo.SiteWeekVo; +import org.dromara.system.domain.SiteWeek; +import org.dromara.system.mapper.SiteWeekMapper; +import org.dromara.system.service.ISiteWeekService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 工地日期周Service业务层处理 + * + * @author szs + * @date 2025-05-10 + */ +@RequiredArgsConstructor +@Service +public class SiteWeekServiceImpl implements ISiteWeekService { + + private final SiteWeekMapper baseMapper; + + /** + * 查询工地日期周 + * + * @param id 主键 + * @return 工地日期周 + */ + @Override + public SiteWeekVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询工地日期周列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工地日期周分页列表 + */ + @Override + public TableDataInfo queryPageList(SiteWeekBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的工地日期周列表 + * + * @param bo 查询条件 + * @return 工地日期周列表 + */ + @Override + public List queryList(SiteWeekBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + lqw.orderByDesc(BaseEntity::getCreateTime); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SiteWeekBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getName()), SiteWeek::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getNameTime()), SiteWeek::getNameTime, bo.getNameTime()); + lqw.eq(bo.getWeekNo() != null, SiteWeek::getWeekNo, bo.getWeekNo()); + lqw.eq(StringUtils.isNotBlank(bo.getWeekNoDescr()), SiteWeek::getWeekNoDescr, bo.getWeekNoDescr()); + lqw.eq(bo.getGroupNo() != null, SiteWeek::getGroupNo, bo.getGroupNo()); + return lqw; + } + + /** + * 新增工地日期周 + * + * @param bo 工地日期周 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SiteWeekBo bo) { + SiteWeek add = MapstructUtils.convert(bo, SiteWeek.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改工地日期周 + * + * @param bo 工地日期周 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SiteWeekBo bo) { + SiteWeek update = MapstructUtils.convert(bo, SiteWeek.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SiteWeek entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除工地日期周信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java index 0899e3c..e99a3d1 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 参数配置 服务层实现 @@ -210,4 +211,12 @@ public class SysConfigServiceImpl implements ISysConfigService { return sysConfig.getConfigValue(); } + @Override + public List selectStreamType(String deviceSn) { + List sysConfig = baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysConfig::getConfigKey, "streamType").eq(SysConfig::getConfigValue, deviceSn)); + List collect = sysConfig.stream().map(SysConfig::getRemark).collect(Collectors.toList()); + return collect; + } + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigServiceImpl.java new file mode 100644 index 0000000..c5d9894 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigServiceImpl.java @@ -0,0 +1,272 @@ +package org.dromara.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.service.ISysConfigService; +import org.dromara.system.service.ISysSubmailConfigUserService; +import org.dromara.system.service.ISysSubmailLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.system.domain.vo.SysSubmailConfigVo; +import org.dromara.system.domain.SysSubmailConfig; +import org.dromara.system.mapper.SysSubmailConfigMapper; +import org.dromara.system.service.ISysSubmailConfigService; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.stream.Collectors; + +/** + * 赛邮服务配置Service业务层处理 + * + * @author szs + * @date 2025-05-11 + */ +@RequiredArgsConstructor +@Service +public class SysSubmailConfigServiceImpl implements ISysSubmailConfigService { + + private final SysSubmailConfigMapper baseMapper; + + @Autowired + private ISysSubmailConfigUserService sysSubmailConfigUserService; + @Autowired + private ISysSubmailLogService sysSubmailLogService; + + /** + * 查询赛邮服务配置 + * + * @param id 主键 + * @return 赛邮服务配置 + */ + @Override + public SysSubmailConfigVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询赛邮服务配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置分页列表 + */ + @Override + public TableDataInfo queryPageList(SysSubmailConfigBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的赛邮服务配置列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置列表 + */ + @Override + public List queryList(SysSubmailConfigBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysSubmailConfigBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getName()), SysSubmailConfig::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), SysSubmailConfig::getCode, bo.getCode()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), SysSubmailConfig::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysSubmailConfig::getUrl, bo.getUrl()); + lqw.eq(StringUtils.isNotBlank(bo.getAppid()), SysSubmailConfig::getAppid, bo.getAppid()); + lqw.eq(StringUtils.isNotBlank(bo.getSignature()), SysSubmailConfig::getSignature, bo.getSignature()); + lqw.eq(StringUtils.isNotBlank(bo.getTag()), SysSubmailConfig::getTag, bo.getTag()); + lqw.eq(StringUtils.isNotBlank(bo.getTimestamp()), SysSubmailConfig::getTimestamp, bo.getTimestamp()); + lqw.eq(StringUtils.isNotBlank(bo.getSignType()), SysSubmailConfig::getSignType, bo.getSignType()); + lqw.eq(StringUtils.isNotBlank(bo.getSignVersion()), SysSubmailConfig::getSignVersion, bo.getSignVersion()); + lqw.eq(StringUtils.isNotBlank(bo.getLatestResStatus()), SysSubmailConfig::getLatestResStatus, bo.getLatestResStatus()); + return lqw; + } + + /** + * 新增赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysSubmailConfigBo bo) { + SysSubmailConfig add = MapstructUtils.convert(bo, SysSubmailConfig.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysSubmailConfigBo bo) { + SysSubmailConfig update = MapstructUtils.convert(bo, SysSubmailConfig.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysSubmailConfig entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除赛邮服务配置信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public R cmdSend(String code, String multiParam) { + + //找到生效配置 + SysSubmailConfigBo bo = new SysSubmailConfigBo(); + bo.setCode(code); + List sysSubmailConfigVoTempList = this.queryList(bo); + if (sysSubmailConfigVoTempList.size() <= 0) { + return R.fail("暂无有效配置"); + } + SysSubmailConfigVo firstConfigVo = sysSubmailConfigVoTempList.get(0); + + BeanUtil.copyProperties(firstConfigVo,bo); + bo.setMultiParam(multiParam); + + //判断是否配置用户 + SysSubmailConfigUserBo mailUserQuery = new SysSubmailConfigUserBo(); + mailUserQuery.setSubmailConfigId(bo.getId()); + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.queryList(mailUserQuery); + List configUserVoList = sysSubmailConfigUserVoList.stream().filter(item -> StrUtil.isNotBlank(item.getPhonenumber())).collect(Collectors.toList()); + if(configUserVoList.size() <= 0) { + return R.fail("暂无配置有效用户"); + } + + String result = submailSendUtil(bo, configUserVoList); + return R.ok(result); + } + + public String submailSendUtil(SysSubmailConfigBo bo, List configUserVoList) { + String subMailSaveFlag = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("submail.log.save"); + HashMap postParam = new HashMap<>(); + postParam.put("appid", bo.getAppid()); + postParam.put("signature", bo.getSignature()); + + String phonenumber = configUserVoList.get(0).getPhonenumber(); + String result = ""; + switch (bo.getCode()){ + case "smsSend": //短信发送 to/content + postParam.put("to", phonenumber); + postParam.put("content", bo.getContent()); + result = HttpUtil.post(bo.getUrl(), postParam); //JSONUtil.parseObj(result).getStr("status") + saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + case "smsXsend": //短信模板发送 to/project + postParam.put("to", phonenumber); + postParam.put("project", bo.getProject()); + postParam.put("vars", bo.getVars()); + result = HttpUtil.post(bo.getUrl(), postParam); + saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + case "smsMultisend": //短信一对多发送 multi +// postParam.put("to", phonenumber); +// postParam.put("project", bo.getProject()); +// postParam.put("vars", bo.getVars()); +// result = HttpUtil.post(bo.getUrl(), postParam); +// saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + case "smsMultixsend": //短信模板一对多发送 project/multi + postParam.put("to", phonenumber); + postParam.put("project", bo.getProject()); +// 拼接multi + JSONArray multiJson = new JSONArray(); + for (SysSubmailConfigUserVo sysSubmailConfigUserVo : configUserVoList) { + JSONObject entries = new JSONObject(); + entries.set("to",sysSubmailConfigUserVo.getPhonenumber()); + entries.set("vars", JSONUtil.parseObj(bo.getMultiParam())); + multiJson.add(entries); + } + String multiJsonStr = multiJson.toString(); +// postParam.put("multi", multiJson.toString()); + postParam.put("multi", multiJsonStr); + + result = HttpUtil.post(bo.getUrl(), postParam); + saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + } + return result; + } + + //保存config发送log + private void saveConfigLog(SysSubmailConfigBo bo, String subMailSaveFlag, String phonenumber, String result) { + String [] ignoreProp = {"id","createBy","createTime","updateBy","updateTime","remark"}; + + if(BooleanUtil.toBoolean(subMailSaveFlag)){ + SysSubmailLogBo sysSubmailLog = new SysSubmailLogBo(); + BeanUtil.copyProperties(bo, sysSubmailLog, CopyOptions.create().setIgnoreProperties(ignoreProp)); + sysSubmailLog.setSubmailConfigId(bo.getId()); + sysSubmailLog.setToReceiver(phonenumber); + sysSubmailLog.setContent(bo.getContent()); + String latestStatus = ""; + if(JSONUtil.isTypeJSONArray(result)) { + latestStatus = new JSONObject(JSONUtil.parseArray(result).get(0)).getStr("status"); + }else{ + latestStatus = JSONUtil.parseObj(result).getStr("status"); + } + boolean successFlag = "success".equals(latestStatus); + String latestResStatus = successFlag ? "Y" : "N"; + sysSubmailLog.setLatestResStatus(latestResStatus); + sysSubmailLog.setResult(result); + sysSubmailLogService.insertByBo(sysSubmailLog); + + //更新状态 + SysSubmailConfigBo sysSubmailConfigBo = new SysSubmailConfigBo(); + sysSubmailConfigBo.setId(bo.getId()); + sysSubmailConfigBo.setLatestResStatus(latestResStatus); + this.updateByBo(sysSubmailConfigBo); + } + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigUserServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigUserServiceImpl.java new file mode 100644 index 0000000..e8a0659 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigUserServiceImpl.java @@ -0,0 +1,140 @@ +package org.dromara.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.mapper.SysSubmailConfigUserMapper; +import org.dromara.system.service.ISysSubmailConfigUserService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 赛邮服务配置用户Service业务层处理 + * + * @author szs + * @date 2025-05-11 + */ +@RequiredArgsConstructor +@Service +public class SysSubmailConfigUserServiceImpl implements ISysSubmailConfigUserService { + + private final SysSubmailConfigUserMapper baseMapper; + + /** + * 查询赛邮服务配置用户 + * + * @param id 主键 + * @return 赛邮服务配置用户 + */ + @Override + public SysSubmailConfigUserVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置用户分页列表 + */ + @Override + public TableDataInfo queryPageList(SysSubmailConfigUserBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置用户列表 + */ + @Override + public List queryList(SysSubmailConfigUserBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysSubmailConfigUserBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSubmailConfigId() != null, SysSubmailConfigUser::getSubmailConfigId, bo.getSubmailConfigId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), SysSubmailConfigUser::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getPhonenumber()), SysSubmailConfigUser::getPhonenumber, bo.getPhonenumber()); + return lqw; + } + + /** + * 新增赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysSubmailConfigUserBo bo) { + SysSubmailConfigUser add = MapstructUtils.convert(bo, SysSubmailConfigUser.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysSubmailConfigUserBo bo) { + SysSubmailConfigUser update = MapstructUtils.convert(bo, SysSubmailConfigUser.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysSubmailConfigUser entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除赛邮服务配置用户信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public List selectConfigUserByConfigIds(List configIds) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + lambdaQueryWrapper.in(SysSubmailConfigUser::getSubmailConfigId,configIds); + List sysSubmailConfigUserVoList = baseMapper.selectVoList(lambdaQueryWrapper); + return sysSubmailConfigUserVoList; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailLogServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailLogServiceImpl.java new file mode 100644 index 0000000..466ec4d --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailLogServiceImpl.java @@ -0,0 +1,144 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.domain.vo.SysSubmailLogVo; +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.mapper.SysSubmailLogMapper; +import org.dromara.system.service.ISysSubmailLogService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 赛邮服务发送logService业务层处理 + * + * @author szs + * @date 2025-05-11 + */ +@RequiredArgsConstructor +@Service +public class SysSubmailLogServiceImpl implements ISysSubmailLogService { + + private final SysSubmailLogMapper baseMapper; + + /** + * 查询赛邮服务发送log + * + * @param id 主键 + * @return 赛邮服务发送log + */ + @Override + public SysSubmailLogVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询赛邮服务发送log列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务发送log分页列表 + */ + @Override + public TableDataInfo queryPageList(SysSubmailLogBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + lqw.orderByDesc(BaseEntity::getCreateTime); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的赛邮服务发送log列表 + * + * @param bo 查询条件 + * @return 赛邮服务发送log列表 + */ + @Override + public List queryList(SysSubmailLogBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysSubmailLogBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSubmailConfigId() != null, SysSubmailLog::getSubmailConfigId, bo.getSubmailConfigId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), SysSubmailLog::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), SysSubmailLog::getCode, bo.getCode()); + lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysSubmailLog::getUrl, bo.getUrl()); + lqw.eq(StringUtils.isNotBlank(bo.getToReceiver()), SysSubmailLog::getToReceiver, bo.getToReceiver()); + lqw.eq(StringUtils.isNotBlank(bo.getContent()), SysSubmailLog::getContent, bo.getContent()); + lqw.eq(StringUtils.isNotBlank(bo.getProject()), SysSubmailLog::getProject, bo.getProject()); + lqw.eq(StringUtils.isNotBlank(bo.getMulti()), SysSubmailLog::getMulti, bo.getMulti()); + lqw.eq(StringUtils.isNotBlank(bo.getVars()), SysSubmailLog::getVars, bo.getVars()); + lqw.eq(StringUtils.isNotBlank(bo.getTag()), SysSubmailLog::getTag, bo.getTag()); + lqw.eq(StringUtils.isNotBlank(bo.getTimestamp()), SysSubmailLog::getTimestamp, bo.getTimestamp()); + lqw.eq(StringUtils.isNotBlank(bo.getSignType()), SysSubmailLog::getSignType, bo.getSignType()); + lqw.eq(StringUtils.isNotBlank(bo.getSignVersion()), SysSubmailLog::getSignVersion, bo.getSignVersion()); + lqw.eq(StringUtils.isNotBlank(bo.getLatestResStatus()), SysSubmailLog::getLatestResStatus, bo.getLatestResStatus()); + return lqw; + } + + /** + * 新增赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysSubmailLogBo bo) { + SysSubmailLog add = MapstructUtils.convert(bo, SysSubmailLog.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysSubmailLogBo bo) { + SysSubmailLog update = MapstructUtils.convert(bo, SysSubmailLog.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysSubmailLog entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除赛邮服务发送log信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 5c0da4e..8849a41 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ArrayUtil; @@ -552,6 +553,21 @@ public class SysUserServiceImpl implements ISysUserService { return baseMapper.selectVoList(lqw); } + @Override + public List selectUserList(SysUserBo user) { + List sysuserVoList = baseMapper.selectUserList(this.buildQueryWrapper(user)); + return sysuserVoList; + } + + @Override + public List selectUserwithPhonenumberList(SysUserBo user) { +// SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); + LambdaQueryWrapper sysUserBoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserBoLambdaQueryWrapper.isNotNull(SysUser::getPhonenumber); + List sysUserVoList = baseMapper.selectUserList(sysUserBoLambdaQueryWrapper); + return sysUserVoList; + } + @Override public List selectUserIdsByRoleIds(List roleIds) { List userRoles = userRoleMapper.selectList( @@ -576,6 +592,19 @@ public class SysUserServiceImpl implements ISysUserService { .in(ObjectUtil.isNotNull(departIdList), SysUser::getDeptId, departIdList)); } + @Override + public List selectFlwByIds(List userIds, Long deptId) { + return baseMapper.selectFlwByIds(new LambdaQueryWrapper() + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber).eq(SysUser::getStatus, UserConstants.USER_NORMAL) + .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId) + .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds)); + } + + @Override + public List allList(SysUserBo user) { + return baseMapper.allList(user); + } + /** * 通过用户ID查询用户账户 * diff --git a/dk-modules/system/src/main/java/org/dromara/system/utils/JsonUtil.java b/dk-modules/system/src/main/java/org/dromara/system/utils/JsonUtil.java new file mode 100644 index 0000000..a6eea9b --- /dev/null +++ b/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 jsonToPojo(String jsonData, Class beanType) { + try { + T t = MAPPER.readValue(jsonData, beanType); + return t; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 将json数据转换成pojo对象list + *

Title: jsonToList

+ *

Description:

+ * @param jsonData + * @param beanType + * @return + */ + public static List jsonToList(String jsonData, Class beanType) { + JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); + try { + List list = MAPPER.readValue(jsonData, javaType); + return list; + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + /** + * 将Object对象里面的属性和值转化成Map对象 + * + * @param obj + * @return + * @throws IllegalAccessException + */ + public static Map objectToMap(Object obj){ + try { + Map map = new HashMap(); + 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 jsonToMap(String json){ + try { + return MAPPER.readValue(json, new TypeReference>(){}); + } catch (JsonProcessingException e) { + e.printStackTrace(); + return null; + } + } + + public static LinkedHashMap jsonToStrMap(String json){ + try { + return MAPPER.readValue(json, new TypeReference>(){}); + } catch (JsonProcessingException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/utils/OssTianyiClientUtils.java b/dk-modules/system/src/main/java/org/dromara/system/utils/OssTianyiClientUtils.java new file mode 100644 index 0000000..9c557e8 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/utils/OssTianyiClientUtils.java @@ -0,0 +1,179 @@ +package org.dromara.system.utils; + +import cn.hutool.core.io.FileUtil; +import io.minio.*; +import io.minio.errors.*; +import io.minio.messages.Item; +import org.dromara.system.config.OssTianyiConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Component +public class OssTianyiClientUtils { + + private static MinioClient minioClient; + +// private static String endPoint = "https://jiangsu-10.zos.ctyun.cn"; //地域节点,可访问 +// // private static String endPoint = "https://dk-ty-oss-bucket.jiangsu-10.zos.ctyun.cn"; //说是桶的域名地址,支持公网访问ZOS,实测报错 +// private static String minioAccessKey = "22e3f37368a242b38f4f25d98c9baf1f"; +// private static String minioSecretKey = "0d858850666248e59830d9a596847062"; + + // private static String bucketName = "dk-ty-oss-bucket"; +// private String bucketName = "dkossbucket"; + private String objectName = "page.html"; + //注意,天翼云里默认路径就是文件名,不需要在前面加根路径/ + private String filePath = "dev/temp/"; + private String fileDir = "dev"; + + + @Autowired + OssTianyiConfig ossTianyiConfig; + + @Autowired + public OssTianyiClientUtils(OssTianyiConfig ossTianyiConfig) { + this.ossTianyiConfig = ossTianyiConfig; + init(); + } + + private void init() { + this.minioClient = MinioClient.builder() + .endpoint(ossTianyiConfig.getEndPoint()) + .credentials(ossTianyiConfig.getAccessKey(), ossTianyiConfig.getSecretKey()) + .build(); + } + + /** + * 天翼云OSS初始化(采用S3 Compatible Storage) + */ +// public void tianyiOssInit() { +// minioClient = MinioClient.builder() +// .endpoint(ossTianyiConfig.getEndPoint()) +// .credentials(ossTianyiConfig.getAccessKey(), ossTianyiConfig.getSecretKey()) +// .build(); +// } + + /** + * 文件上传 (固定) + */ + public void uploadFileTest(String objectName, String filePath, String localFilePath) throws Exception { + File file = new File(localFilePath); + BufferedInputStream inputStream = FileUtil.getInputStream(file); + String contentType = Files.probeContentType(file.toPath()); + if (contentType == null) { + contentType = "application/octet-stream"; + } + PutObjectArgs args = PutObjectArgs.builder() + .bucket(ossTianyiConfig.getBucketName()) + .object(filePath + objectName) + .stream(inputStream, FileUtil.size(file), -1) + .contentType(contentType) + .build(); + minioClient.putObject(args); + } + + public void uploadFile(String fileUrl, MultipartFile file) { + try { + PutObjectArgs args = PutObjectArgs.builder() + .bucket(ossTianyiConfig.getBucketName()) + .object( fileUrl) //路径 /dev/temp/page.png + .stream(file.getInputStream(), file.getSize(), -1) + .contentType(file.getContentType()) + .build(); + minioClient.putObject(args); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + + /** + * 文件删除 + */ + public void deleteFile( String objectName) throws Exception { + minioClient.removeObject( + RemoveObjectArgs.builder() + .bucket(ossTianyiConfig.getBucketName()) + .object(objectName) + .build()); + } + + /** + * 文件下载 + */ + public InputStream downloadFile( String objectUrl) { + InputStream inputStream = null; + try { + inputStream = minioClient.getObject( + GetObjectArgs.builder() + .bucket(ossTianyiConfig.getBucketName()) + .object(objectUrl) + .build() + ); + } catch (Exception e) { + throw new RuntimeException(e); + } +// FileUtil.writeFromStream(inputStream, new File(downloadPath)); + return inputStream; + } + + /** + * 文件列表 + * @param prefix + */ + public void listFiles( String prefix) { + Iterable> results = minioClient.listObjects( + ListObjectsArgs.builder() + .bucket(ossTianyiConfig.getBucketName()) + .prefix(prefix) + .recursive(true) + .build() + ); + + try { + for (Result result : results) { + try { +// System.out.println("文件名:" + result.get().objectName()); // 获取对象名称(文件路径) + System.out.println(result.get().objectName()); // 获取对象名称(文件路径) + } catch (Exception e) { + e.printStackTrace(); + } + } + + } catch (Exception e) { + System.err.println("文件读取异常: " + e.getMessage()); + } + + } + + + + +// public void updateFile(String bucketName, String objectName, String filePath, String localFilePath) throws Exception { +// uploadFile(bucketName, objectName, filePath, localFilePath); +// } + + +// public static void main(String[] args) throws Exception { +// String localFilePath = "D:\\123pan\\page.html"; +// +// tianyiOssInit("", "", ""); +// uploadFile(bucketName, objectName, filePath, localFilePath);//正常 +//// deleteFile(bucketName, filePath + objectName);//正常 +//// listFiles(bucketName, fileDir + "/"); // 正常 +// +//// downloadFile(bucketName, filePath + objectName, "D:\\123pan\\downloaded_page.html"); //正常 +// +// } + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/utils/WeekNoUtil.java b/dk-modules/system/src/main/java/org/dromara/system/utils/WeekNoUtil.java new file mode 100644 index 0000000..bb550b4 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/utils/WeekNoUtil.java @@ -0,0 +1,66 @@ +package org.dromara.system.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * WeekNo生成工具,基于固定日期计算(1970年1月1日) + * 测试结果:2025-05-10号距离固定日期为2889周 + */ +public class WeekNoUtil { + + // 设置参考点(ISO周:2023年第1周开始的周一) +// private static final String REFERENCE_DATE_STR = "2023-01-02 00:00:00"; + private static final String REFERENCE_DATE_STR = "1970-01-01 00:00:00"; + + public static int getWeekNoByDate(Date date) { + DateTime inputDate = DateUtil.date(date); + DateTime referenceDate = DateUtil.parse(REFERENCE_DATE_STR, "yyyy-MM-dd HH:mm:ss"); + + // 获取参考日所在的周一 + DateTime refMonday = DateUtil.beginOfWeek(referenceDate); + DateTime inputMonday = DateUtil.beginOfWeek(inputDate); + + // 计算两个周一之间的周数差值 + long weeks = DateUtil.between(inputMonday, refMonday, DateUnit.WEEK); + + // 周差 + 1,得到 weekNo + return (int) weeks + 1; + } + + public static int getWeekNoByStr(String dateStr) { + DateTime inputDate = DateUtil.parse(dateStr, "yyyy-MM-dd HH:mm:ss"); + DateTime referenceDate = DateUtil.parse(REFERENCE_DATE_STR, "yyyy-MM-dd HH:mm:ss"); + + // 获取参考日所在的周一 + DateTime refMonday = DateUtil.beginOfWeek(referenceDate); + DateTime inputMonday = DateUtil.beginOfWeek(inputDate); + + // 计算两个周一之间的周数差值 + long weeks = DateUtil.between(inputMonday, refMonday, DateUnit.WEEK); + + // 周差 + 1,得到 weekNo + return (int) weeks + 1; + } + + public static String generateDateStr(Date currentDate) { + int year = DateUtil.year(currentDate); + int month = DateUtil.month(currentDate); + int weekofMonth = DateUtil.weekOfMonth(currentDate); + String name = year + "年" + month + "月" + weekofMonth + "周"; + return name; + } + + /* public static void main(String[] args) { + String now = DateUtil.now(); // 当前时间 + int weekNo = getWeekNoByStr(now); + System.out.println("当前周No:" + weekNo); + + int weekNoD = getWeekNoByDate(new Date()); + System.out.println("当前周No:" + weekNoD); + }*/ +} diff --git a/dk-modules/system/src/main/resources/mapper/djidev/DjiApiErrorMapper.xml b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiErrorMapper.xml new file mode 100644 index 0000000..8ace2c7 --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiErrorMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/djidev/DjiApiMapper.xml b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiMapper.xml new file mode 100644 index 0000000..d37007e --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SiteWeekMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SiteWeekMapper.xml new file mode 100644 index 0000000..ccf5a3b --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SiteWeekMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SiteWeekOssMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SiteWeekOssMapper.xml new file mode 100644 index 0000000..253bf2c --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SiteWeekOssMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SubscribeApiMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SubscribeApiMapper.xml new file mode 100644 index 0000000..d81c0ee --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SubscribeApiMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigMapper.xml new file mode 100644 index 0000000..078246b --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigUserMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigUserMapper.xml new file mode 100644 index 0000000..bcd53cd --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigUserMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SysSubmailLogMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysSubmailLogMapper.xml new file mode 100644 index 0000000..8484568 --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SysSubmailLogMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml index 700b37a..4b35648 100644 --- a/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml @@ -83,4 +83,37 @@ ${ew.getCustomSqlSegment} + + + + + diff --git a/dk-modules/workflow/pom.xml b/dk-modules/workflow/pom.xml index c0160e2..85fc4d6 100644 --- a/dk-modules/workflow/pom.xml +++ b/dk-modules/workflow/pom.xml @@ -118,6 +118,11 @@ api-system
+ + org.dromara + common-encrypt + + diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/common/enums/ButtonPermissionEnum.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/common/enums/ButtonPermissionEnum.java index 0a79d84..b438fe2 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/common/enums/ButtonPermissionEnum.java +++ b/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), + /** + * 是否能移交 + */ + TRANSFER("是否能移交", "transfer", false), + /** * 忽略 */ diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java index dcd758f..86c0ee1 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java @@ -1,5 +1,6 @@ package org.dromara.workflow.controller; +import cn.hutool.core.util.ObjectUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -50,6 +51,10 @@ public class FlwTaskController extends BaseController { @PostMapping("/startWorkFlow") public R startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(startProcessBo); + + //加签 + flwTaskService.addSign(startProcessReturn.getProcessInstanceId()); + return R.ok("提交成功", startProcessReturn); } @@ -62,7 +67,13 @@ public class FlwTaskController extends BaseController { @RepeatSubmit() @PostMapping("/completeTask") public R completeTask(@Validated(AddGroup.class) @RequestBody CompleteTaskBo completeTaskBo) { - return toAjax(flwTaskService.completeTask(completeTaskBo)); + String instanceId = flwTaskService.completeTask(completeTaskBo); + + if (ObjectUtil.isNotEmpty(instanceId)){ + return toAjax(flwTaskService.addSign(Long.valueOf(instanceId))); + } + + return toAjax(true); } /** diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java index 4c6a8ff..8d9be72 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java @@ -43,7 +43,7 @@ public class BackProcessBo implements Serializable { /** * 驳回的节点id(目前未使用,直接驳回到申请人) */ - @NotBlank(message = "驳回的节点不能为空", groups = AddGroup.class) +// @NotBlank(message = "驳回的节点不能为空", groups = AddGroup.class) private String nodeCode; /** diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java index 138c2e1..959e93f 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java @@ -36,19 +36,21 @@ public class WorkflowPermissionHandler implements PermissionHandler { */ @Override public List permissions() { - LoginUser loginUser = LoginHelper.getLoginUser(); List resultList = new ArrayList<>(); - //如果为空则将管理员放进去 - resultList.add("1"); - resultList.add("dept:100"); + resultList.add("1"); + resultList.add("dept:1"); resultList.add("${handler}"); - if (ObjectUtil.isNull(loginUser)) { + //没登陆 + if (!LoginHelper.isLogin()){ + return resultList; } + LoginUser loginUser = LoginHelper.getLoginUser(); + // 使用一个流来构建权限列表 List permissionList = Stream.of( // 角色权限前缀 diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java index 92809c8..e71fd57 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java @@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param; import org.dromara.workflow.domain.bo.FlowInstanceBo; import org.dromara.workflow.domain.vo.FlowInstanceVo; +import java.util.List; + /** * 实例信息Mapper接口 * @@ -24,4 +26,6 @@ public interface FlwInstanceMapper { */ Page selectInstanceList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + List listInsByDefinition(@Param("definitionId") Long definitionId); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java index fa31d6c..c349234 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java @@ -57,4 +57,6 @@ public interface FlwTaskMapper { */ Page getTaskCopyByPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + List getPermissionFlag(@Param("definitionId") Long definitionId, + @Param("nodeCode") String nodeCode, @Param("nodeType") Integer nodeType); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java index 99729c2..89eaafc 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java @@ -156,4 +156,6 @@ public interface IFlwInstanceService { * @return 结果 */ boolean processInvalid(FlowInvalidBo bo); + + Boolean batchAddSign(Long definitionId); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index 52b4a0b..fa12064 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java @@ -37,7 +37,7 @@ public interface IFlwTaskService { * @param completeTaskBo 办理任务参数 * @return 结果 */ - boolean completeTask(CompleteTaskBo completeTaskBo); + String completeTask(CompleteTaskBo completeTaskBo); /** * 查询当前用户的待办任务 @@ -223,4 +223,7 @@ public interface IFlwTaskService { * @return 节点 */ FlowNode getByNodeCode(String nodeCode, Long definitionId); + + Boolean addSign(Long instanceId); + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index 137ec97..f32008c 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -46,15 +46,19 @@ import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.bo.FlowCancelBo; import org.dromara.workflow.domain.bo.FlowInstanceBo; import org.dromara.workflow.domain.bo.FlowInvalidBo; +import org.dromara.workflow.domain.bo.TaskOperationBo; import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.FlowVariableVo; import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwInstanceMapper; +import org.dromara.workflow.mapper.FlwTaskMapper; import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwInstanceService; +import org.dromara.workflow.service.IFlwTaskAssigneeService; import org.dromara.workflow.service.IFlwTaskService; +import org.dromara.workflow.utils.BatchProcessorUtil; import org.dromara.workflow.utils.MinioUntil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -78,12 +82,14 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { private final ChartService chartService; private final TaskService taskService; private final FlowHisTaskMapper flowHisTaskMapper; + private final FlwTaskMapper flwTaskMapper; private final FlowInstanceMapper flowInstanceMapper; private final FlowProcessEventHandler flowProcessEventHandler; private final IFlwTaskService flwTaskService; private final FlwInstanceMapper flwInstanceMapper; private final FlwCategoryMapper flwCategoryMapper; private final IFlwCommonService flwCommonService; + private final IFlwTaskAssigneeService flwTaskAssigneeService; @DubboReference private RemoteFileService remoteFileService; @@ -460,4 +466,77 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { throw new ServiceException(e.getMessage()); } } + + @Override + public Boolean batchAddSign(Long definitionId) { + try { + List instanceList = flwInstanceMapper.listInsByDefinition(definitionId); + + if (ObjectUtil.isEmpty(instanceList)) { + return true; + } + + //根据实例id查询所有的可执行的任务 + List insIdList = instanceList.stream().map(FlowInstanceVo::getId).distinct().toList(); + List flowTasks = flwTaskService.selectByInstIdList(insIdList); + + //拿到任务之后进行批量加签 + int startIndex = 0; + int batchSize = 1000; + boolean flag = BatchProcessorUtil.processBatches(flowTasks, batchSize, startIndex, batch -> { + batch.forEach(flowTask1 -> { + + //判断是否有人员,进行加签 + //获取当前任务的办理人 + List currentTaskUser = flwTaskService.currentTaskAllUser(flowTask1.getId()); + + Instance ins = insService.getById(flowTask1.getInstanceId()); + + //根据配置的人员查询系统中的用户 + String nodeCode = ins.getNodeCode(); + Integer nodeType = ins.getNodeType(); + List permissionUser = flwTaskMapper.getPermissionFlag(definitionId,nodeCode,nodeType); + String first = permissionUser.getFirst(); + + List totalUser = new ArrayList<>(); + + if (ObjectUtil.isNotEmpty(first)){ + String[] split = first.split("@@"); + for (String handleFlag : split) { + if (!handleFlag.equals("${handler}")){ + List remoteUserVos = flwTaskAssigneeService.fetchUsersByStorageId(handleFlag); + totalUser.addAll(remoteUserVos); + } + } + } + + //比较差值 + List different = totalUser.stream() + .filter(user -> currentTaskUser.stream().noneMatch(u -> u.getUserId().equals(user.getUserId()))) + .toList(); + + List userIds = different.stream() + .map(RemoteUserVo::getUserId) + .distinct() + .map(String::valueOf) + .toList(); + + //加签 + if (ObjectUtil.isNotEmpty(userIds)){ + TaskOperationBo taskOperationBo = new TaskOperationBo(); + taskOperationBo.setUserIds(userIds); + taskOperationBo.setTaskId(flowTask1.getId()); + + flwTaskService.taskOperation(taskOperationBo,"addSignature"); + } + }); + }); + + return flag; + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage(), e); + return false; + } + } } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 189a594..f705e55 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -41,6 +42,7 @@ import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.enums.MessageTypeEnum; +import org.dromara.workflow.common.enums.TaskAssigneeEnum; import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.bo.*; @@ -159,7 +161,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { */ @Override @Transactional(rollbackFor = Exception.class) - public boolean completeTask(CompleteTaskBo completeTaskBo) { + public String completeTask(CompleteTaskBo completeTaskBo) { try { // 获取任务ID并查询对应的流程任务和实例信息 Long taskId = completeTaskBo.getTaskId(); @@ -217,7 +219,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } //设置下一环节处理人 setNextHandler(ins.getId()); - return true; + return String.valueOf(ins.getId()); } catch (Exception e) { log.error(e.getMessage(), e); throw new ServiceException(e.getMessage()); @@ -495,9 +497,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public boolean backProcess(BackProcessBo bo) { try { Long taskId = bo.getTaskId(); - String notice = bo.getNotice(); - List messageType = bo.getMessageType(); +// String notice = bo.getNotice(); + String notice = "您有一条流程被退回!"; +// List messageType = bo.getMessageType(); + List messageType = List.of("1"); String message = bo.getMessage(); + if (ObjectUtil.isEmpty(message)){ + message = "退回"; + } FlowTask task = flowTaskMapper.selectById(taskId); if (ObjectUtil.isNull(task)) { throw new ServiceException("任务不存在!"); @@ -506,13 +513,19 @@ public class FlwTaskServiceImpl implements IFlwTaskService { BusinessStatusEnum.checkBackStatus(inst.getFlowStatus()); Long definitionId = task.getDefinitionId(); 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.nodeCode(bo.getNodeCode()); + flowParams.nodeCode(skipNode.getNodeCode()); flowParams.message(message); flowParams.skipType(SkipType.REJECT.getKey()); - flowParams.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus()) - .hisStatus(TaskStatusEnum.BACK.getStatus()); + flowParams.flowStatus(TaskStatusEnum.WAITING.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()); taskService.skip(task.getId(), flowParams); @@ -713,9 +726,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Task task = taskService.getById(taskId); FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId()); if ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) { - if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) { - throw new ServiceException(task.getNodeName() + "不是会签节点!"); - } +// if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) { +// throw new ServiceException(task.getNodeName() + "不是会签节点!"); +// } } // 设置任务状态并执行对应的任务操作 switch (taskOperation) { @@ -864,7 +877,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService { completeTaskBo.setTaskId(taskId); completeTaskBo.setMessageType(List.of(MessageTypeEnum.SYSTEM_MESSAGE.getCode())); IFlwTaskService service = applicationContext.getBean(IFlwTaskService.class); - return service.completeTask(completeTaskBo); + service.completeTask(completeTaskBo); + return true; } /** @@ -880,4 +894,72 @@ public class FlwTaskServiceImpl implements IFlwTaskService { .eq(FlowNode::getDefinitionId, definitionId)); } + @Override + public Boolean addSign(Long instanceId) { + try { + + List flowTasks = selectByInstId(instanceId); + FlowTask flowTask1 = flowTasks.getFirst(); + + //判断是否有人员,进行加签 + //获取当前任务的办理人 + List currentTaskUser = currentTaskAllUser(flowTask1.getId()); + + FlowTask flowTask = flowTaskMapper.selectById(flowTask1.getId()); + if (ObjectUtil.isNull(flowTask)) { + throw new ServiceException("流程任务不存在或任务已审批!"); + } + + Instance ins = insService.getById(flowTask.getInstanceId()); + + //根据配置的人员查询系统中的用户 + Long definitionId = ins.getDefinitionId(); + String nodeCode = ins.getNodeCode(); + Integer nodeType = ins.getNodeType(); + List permissionUser = this.flwTaskMapper.getPermissionFlag(definitionId,nodeCode,nodeType); + String first = permissionUser.getFirst(); + + List totalUser = new ArrayList<>(); + + if (ObjectUtil.isNotEmpty(first)){ + String[] split = first.split("@@"); + for (String handleFlag : split) { + if (!handleFlag.equals("${handler}")){ + List remoteUserVos = flwTaskAssigneeService.fetchUsersByStorageId(handleFlag); + totalUser.addAll(remoteUserVos); + } + } + } + + //比较差值 + List different = totalUser.stream() + .filter(user -> currentTaskUser.stream().noneMatch(u -> u.getUserId().equals(user.getUserId()))) + .toList(); + + List userIds = different.stream() + .map(RemoteUserVo::getUserId) + .distinct() + .map(String::valueOf) + .toList(); + + //加签 + if (ObjectUtil.isNotEmpty(userIds)){ + TaskOperationBo taskOperationBo = new TaskOperationBo(); + taskOperationBo.setUserIds(userIds); + taskOperationBo.setTaskId(flowTask1.getId()); + + IFlwTaskService flwTaskService = applicationContext.getBean(IFlwTaskService.class); + + flwTaskService.taskOperation(taskOperationBo,"addSignature"); + } + + return true; + + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage(), e); + return false; + } + } + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index d113438..ffcc856 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java @@ -136,7 +136,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public boolean completeTask(RemoteCompleteTask completeTask) { - return flwTaskService.completeTask(BeanUtil.toBean(completeTask, CompleteTaskBo.class)); + return ObjectUtil.isNotEmpty(flwTaskService.completeTask(BeanUtil.toBean(completeTask, CompleteTaskBo.class))); } /** @@ -160,7 +160,10 @@ public class WorkflowServiceImpl implements WorkflowService { public Boolean startWorkFlowBatch(List startProcess) { try { startProcess.forEach(startProcessBo -> { - flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class)); + RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class)); + + //加签 + flwTaskService.addSign(startProcessReturn.getProcessInstanceId()); }); } catch (Exception e) { return false; diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml index 30e2267..deb702b 100644 --- a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml @@ -33,4 +33,24 @@ ${ew.getCustomSqlSegment} + + diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml index f539030..6110a55 100644 --- a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml @@ -112,4 +112,9 @@ ) t ${ew.getCustomSqlSegment} + + + diff --git a/dk-visual/nacos/src/main/resources/application.properties b/dk-visual/nacos/src/main/resources/application.properties index 972740f..44fe8a3 100644 --- a/dk-visual/nacos/src/main/resources/application.properties +++ b/dk-visual/nacos/src/main/resources/application.properties @@ -40,9 +40,9 @@ spring.sql.init.platform=mysql db.num=1 ### Connect URL of DB: -db.url.0=jdbc:mysql://127.0.0.1:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true +db.url.0=jdbc:mysql://114.235.183.147:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true db.user.0=root -db.password.0=123456 +db.password.0=dkcy@yf ### the maximum retry times for push nacos.config.push.maxRetryTime=50 diff --git a/pom.xml b/pom.xml index 511c150..ff3f610 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 2.2.22 2.6.0 0.15.0 - 4.0.3 + 3.3.2 5.8.31 3.37.0 2.2.7