From 10afe53f3e0635bed6517182353ba650d19d73a6 Mon Sep 17 00:00:00 2001 From: luyie Date: Mon, 30 Sep 2024 15:09:30 +0800 Subject: [PATCH 1/5] =?UTF-8?q?add:url=E6=96=87=E4=BB=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?https=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/hnac/hzims/common/utils/FileUtil.java | 115 +++++++++------------ 1 file changed, 46 insertions(+), 69 deletions(-) diff --git a/hzims-biz-common/src/main/java/com/hnac/hzims/common/utils/FileUtil.java b/hzims-biz-common/src/main/java/com/hnac/hzims/common/utils/FileUtil.java index 21c2583..0663c1f 100644 --- a/hzims-biz-common/src/main/java/com/hnac/hzims/common/utils/FileUtil.java +++ b/hzims-biz-common/src/main/java/com/hnac/hzims/common/utils/FileUtil.java @@ -11,13 +11,20 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.util.EntityUtils; +import org.springblade.core.tool.utils.StringUtil; import org.springframework.web.multipart.MultipartFile; +import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import java.io.*; +import java.net.HttpURLConnection; import java.net.URL; -import java.net.URLDecoder; +import java.net.URLConnection; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; import java.util.Base64; +import java.util.UUID; /** * @Author: ypj @@ -43,12 +50,16 @@ public class FileUtil { return bytes; } - public static byte[] getUrlByte(URL url) throws IOException { - InputStream inputStream = null; + public static byte[] getUrlByte(URL url) throws IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException { + URLConnection conn = getUrlConnection(url); + conn.connect(); + return getUrlByte(conn.getInputStream()); + } + + public static byte[] getUrlByte(InputStream inputStream) throws IOException { ByteArrayOutputStream outputStream = null; byte[] fileBytes = null; try { - inputStream = url.openStream(); outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; int bytesRead; @@ -67,80 +78,46 @@ public class FileUtil { return fileBytes; } - public static byte[] getUrlByte(String urlString) throws IOException { + public static byte[] getUrlByte(String urlString) throws IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException { return getUrlByte(new URL(urlString)); } - public static String getContentTypeFromUrl(String url) { - String result = ""; - String fileType = url.toLowerCase(); - if (fileType.indexOf(".png") >= 0) { - result = "image/png"; - } else if (fileType.indexOf(".gif") >= 0) { - result = "image/gif"; - } else if (fileType.indexOf(".jpg") >= 0 || fileType.indexOf(".jpeg") >= 0) { - result = "image/jpeg"; - } else if (fileType.indexOf(".svg") >= 0) { - result = "image/svg+xml"; - } else if (fileType.indexOf(".doc") >= 0) { - result = "application/msword"; - } else if (fileType.indexOf(".xls") >= 0) { - result = "application/x-excel"; - } else if (fileType.indexOf(".zip") >= 0) { - result = "application/zip"; - } else if (fileType.indexOf(".pdf") >= 0) { - result = "application/pdf"; - } else if (fileType.indexOf(".mpeg") >= 0) { //MP3 - result = "audio/mpeg"; - } else if (fileType.indexOf(".mp4") >= 0) { - result = "video/mp4"; - } else if (fileType.indexOf(".plain") >= 0) { - result = "text/plain"; - } else if (fileType.indexOf(".html") >= 0) { - result = "text/html"; - } else if (fileType.indexOf(".json") >= 0) { - result = "application/json"; - } else { - result = "application/octet-stream"; - } - return result; + public static String getUrlBase64(String urlString) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException { + return getBase64(getUrlByte(urlString)); } - public static String getPureUrl(String url) throws UnsupportedEncodingException { - String result = removeUrlParam(url); - result = URLDecoder.decode(result, "utf-8"); - int index = result.lastIndexOf("http"); - if (index > 0) { - result = result.substring(index); + public static URLConnection getUrlConnection(URL url) throws IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + URLConnection conn = url.openConnection(); + if (url.getProtocol().equalsIgnoreCase("https")) { + SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, (x509Certificate, s) -> true).build(); + ((HttpsURLConnection) conn).setSSLSocketFactory(sslContext.getSocketFactory()); + ((HttpsURLConnection) conn).setHostnameVerifier(NoopHostnameVerifier.INSTANCE); } - return result; + ((HttpURLConnection) conn).setRequestMethod("GET"); + conn.setRequestProperty("User-Agent", "Mozilla/5.0"); + conn.setRequestProperty("Accept", "*/*"); + return conn; } - public static String getOriginalFilename(String path) { - String result = path; - int index = path.lastIndexOf("/"); - if (index > 0) { - result = path.substring(index + 1); - } - return result; + public static URLConnection getUrlConnection(String urlString) throws IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + URL url = new URL(urlString); + return getUrlConnection(url); } - public static String removeUrlParam(String url) { - int index = url.indexOf("?"); - if (index > 0) { - return url.substring(0, index); - } - return url; - } - - public static ByteArrayMultipartFile getMultipartFileFromUrl(String urlStr) throws IOException { + public static ByteArrayMultipartFile getMultipartFileFromUrl(String urlStr, String fileName) { ByteArrayMultipartFile result = null; - URL url = new URL(urlStr); - byte[] bytes = getUrlByte(url); - String name = url.getPath(); - String originalName = getOriginalFilename(name); - String contentType = getContentTypeFromUrl(originalName); - result = new ByteArrayMultipartFile(name, originalName, contentType, bytes); + try { + URL url = new URL(urlStr); + URLConnection conn = getUrlConnection(url); + conn.connect(); + byte[] bytes = getUrlByte(conn.getInputStream()); + String name = url.getPath(); + String originalName = StringUtil.isBlank(fileName) ? UUID.randomUUID().toString() : fileName; + String contentType = conn.getContentType(); + result = new ByteArrayMultipartFile(name, originalName, contentType, bytes); + } catch (Exception e) { + log.error("获取传输文件失败", e); + } return result; } @@ -148,11 +125,11 @@ public class FileUtil { return Base64.getEncoder().encodeToString(bytes); } - public static String getBase64(String filePath) throws IOException { + public static String getFileBase64(String filePath) throws IOException { return getBase64(getFileBytes(filePath)); } - public static String getBase64(URL url) throws IOException { + public static String getUrlBase64(URL url) throws IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException { return getBase64(getUrlByte(url)); } From 7fc34083ffefa857cc9e0f3d9006e0f9a5a5ba93 Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Mon, 30 Sep 2024 15:35:24 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E8=AE=BE=E5=A4=87=E5=8A=A9=E6=89=8B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzims/equipment/scheduled/DeviceLedgerScheduledTask.java | 5 ++++- .../hnac/hzims/operational/access/feign/OperAccessTaskClient.java | 3 ++- .../com/hnac/hzims/ticket/workTicket/feign/TicketInfoClient.java | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/scheduled/DeviceLedgerScheduledTask.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/scheduled/DeviceLedgerScheduledTask.java index d40b068..ed1af25 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/scheduled/DeviceLedgerScheduledTask.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/scheduled/DeviceLedgerScheduledTask.java @@ -60,7 +60,10 @@ public class DeviceLedgerScheduledTask { // 取出数据ID 删除数据 JSONObject queryJson = JSONObject.parseObject(JSON.toJSONString(searchResult.getData())); JSONArray data = Optional.ofNullable(queryJson).map(json -> json.getJSONObject("Get")) - .map(json -> json.getJSONArray(ScheduledConstant.DEVICE_LEDGER_CLASS_NAME)).orElse(null); + .map(jsonObject -> { + Optional tableName = jsonObject.keySet().stream().filter(key -> key.contains(ScheduledConstant.DEVICE_LEDGER_CLASS_NAME)).findFirst(); + return tableName.isPresent() ? jsonObject.getJSONArray(tableName.get()) : null; + }).orElse(null); if(Func.isNotEmpty(data)) { List ids = data.stream().map(item -> { JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(item)); diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/feign/OperAccessTaskClient.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/feign/OperAccessTaskClient.java index a526cd8..b195c78 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/feign/OperAccessTaskClient.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/feign/OperAccessTaskClient.java @@ -131,7 +131,8 @@ public class OperAccessTaskClient implements IOperAccessTaskClient, IAccessTaskC // 确保日期格式一致 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String formattedDate = sdf.format(task.getPlanStartTime()); - String overview = String.format(overviewTemplate, task.getCreateUserName(), formattedDate, task.getEmName(), task.getActHours(), details); + Integer actHour = Optional.ofNullable(task.getActHours()).orElse(0); + String overview = String.format(overviewTemplate, task.getCreateUserName(), formattedDate, task.getEmName(), actHour, details); return overview; }).filter(Func::isNotEmpty).collect(Collectors.toList()); return R.data(overviewList); diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/TicketInfoClient.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/TicketInfoClient.java index d742272..8be69a0 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/TicketInfoClient.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/TicketInfoClient.java @@ -25,6 +25,8 @@ import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.*; import org.springblade.flow.core.feign.IFlowClient; +import org.springblade.system.user.cache.UserCache; +import org.springblade.system.user.entity.User; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -37,6 +39,7 @@ import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; import java.util.stream.Collectors; @@ -303,7 +306,8 @@ public class TicketInfoClient implements ITicketInfoClient { if(Func.isNotEmpty(workTicketList)) { List overviewList = workTicketList.stream().map(workTicketInfo -> { String startTime = workTicketInfo.getPlanStartTime().format(DateUtil.DATETIME_FORMATTER); - return String.format(overviewTemplate, workTicketInfo.getCreateUserName(), startTime, workTicketInfo.getEmName(), workTicketInfo.getWorkContent()); + String createUserName = Optional.ofNullable(workTicketInfo.getCreateUser()).map(UserCache::getUser).map(User::getName).orElse(""); + return String.format(overviewTemplate, createUserName, startTime, workTicketInfo.getEmName(), workTicketInfo.getWorkContent()); }).collect(Collectors.toList()); return R.data(overviewList); } From c471eb8b620eea8b90a4a9d61f3e832d4421bf9e Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Mon, 30 Sep 2024 16:54:33 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hnac/gglm/bigmodel/business/service/DataSourceService.java | 2 +- .../java/com/hnac/hzinfo/inspect/plan/controller/PlanController.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/business/service/DataSourceService.java b/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/business/service/DataSourceService.java index cc44b07..93e7916 100644 --- a/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/business/service/DataSourceService.java +++ b/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/business/service/DataSourceService.java @@ -53,7 +53,7 @@ public class DataSourceService { for (TableAuthVO tableAuthVO : sqlVO.getTableAuthVOList()) { // 查询改数据源下的表格是否存在鉴权 LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() - .eq(TablePropertyEntity::getDatasourceId, tableAuthVO.getDatasourceName()) + //.eq(TablePropertyEntity::getDatasourceId, tableAuthVO.getDatasourceName()) .eq(TablePropertyEntity::getTableName, tableAuthVO.getTableName()); List propertise = tablePropertyService.list(wrapper); Assert.isTrue(Func.isNotEmpty(propertise), () -> { diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/plan/controller/PlanController.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/plan/controller/PlanController.java index 6106a16..6b211c9 100644 --- a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/plan/controller/PlanController.java +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/plan/controller/PlanController.java @@ -218,7 +218,9 @@ public class PlanController extends BladeController { throw new HzServiceException("未获取到机器人配置!"); } // 获取机器人巡检路线 - List routeEntityList = routeService.list(Wrappers.lambdaQuery().eq(RouteEntity::getCreateDept, UserCache.getUser(robotEntity.getUserId()).getDeptId())); + List routeEntityList = routeService.list(Wrappers.lambdaQuery() + .eq(RouteEntity::getCreateDept, UserCache.getUser(robotEntity.getUserId()).getDeptId()) + .eq(RouteEntity::getSupportAutoVideo, Constants.InspectTypeEnum.ROBOT.getVal())); if(CollectionUtil.isEmpty(routeEntityList)) { throw new HzServiceException("获取机器人巡检路线失败!"); } From eefbc42b425716b76c3fab1f42b4cacb67a0d454 Mon Sep 17 00:00:00 2001 From: luyie Date: Tue, 8 Oct 2024 10:22:57 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix:=E6=96=87=E4=BB=B6=E8=8E=B7=E5=8F=96bas?= =?UTF-8?q?e64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gglm/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java b/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java index 1b6c95f..61cf98f 100644 --- a/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java +++ b/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java @@ -105,7 +105,7 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); }); try { - return FileUtil.getBase64(request.getFilePath()); + return FileUtil.getFileBase64(request.getFilePath()); } catch (IOException e) { throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); } From 2622b1a00e49c9b0d69229d6572cdad46d38338c Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Tue, 8 Oct 2024 13:19:37 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=E4=B8=9A=E5=8A=A1=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=A4=A7=E6=A8=A1=E5=9E=8B=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=8F=AF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ControlAnswerResolveServiceImpl.java | 16 ++++++++++++---- .../src/main/resources/template/template.yml | 3 +++ .../service/impl/WorkTicketInfoServiceImpl.java | 5 ++++- .../ticket/src/main/resources/template/template.yml | 3 +++ .../ticket/src/test/resources/application-test.yml | 3 +++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/interactive/service/impl/ControlAnswerResolveServiceImpl.java b/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/interactive/service/impl/ControlAnswerResolveServiceImpl.java index 9ab80ef..4335f19 100644 --- a/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/interactive/service/impl/ControlAnswerResolveServiceImpl.java +++ b/hzims-service/gglm-big-model/src/main/java/com/hnac/gglm/bigmodel/interactive/service/impl/ControlAnswerResolveServiceImpl.java @@ -8,9 +8,11 @@ import com.hnac.gglm.bigmodel.interactive.factory.AnswerResolveFactory; import com.hnac.gglm.bigmodel.interactive.service.IAnswerResolveService; import com.hnac.gglm.bigmodel.interactive.vo.AnswerVO; import com.hnac.gglm.bigmodel.interactive.vo.ExtraVO; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.Func; import org.springblade.system.cache.ParamCache; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.hnac.gglm.bigmodel.interactive.constants.ParamKeyConstants; @@ -23,8 +25,14 @@ import java.util.Map; */ @Service(AnswerResolveFactory.CONTROL_DEVICE_SERVICE) @Slf4j +@RequiredArgsConstructor public class ControlAnswerResolveServiceImpl implements IAnswerResolveService { + @Value("${gglm.remote.initiateRobotPlan}") + private String initiateRobotPlanUrl; + @Value("${gglm.remote.initiateVideoTask}") + private String initiateVideoTaskUrl; + @Override public AnswerVO resolve(AnswerVO answer) { Object[] extraArray = this.extraStream(answer).map(this::getExtra).toArray(); @@ -38,14 +46,14 @@ public class ControlAnswerResolveServiceImpl implements IAnswerResolveService { JSONObject params = originExtra.getJSONObject("params"); if(Func.isNotEmpty(params) && Func.isNotEmpty(params.getString("itemId"))) { String itemId = ParamCache.getValue(ParamKeyConstants.VIDEO_INSPECTION_CODE); - String url = ParamCache.getValue(ParamKeyConstants.VIDEO_INSPECTION_URL); - if(Func.isNotEmpty(itemId) && Func.isNotEmpty(url) + //String url = ParamCache.getValue(ParamKeyConstants.VIDEO_INSPECTION_URL); + if(Func.isNotEmpty(itemId) && Func.isNotEmpty(initiateVideoTaskUrl) && itemId.equals(params.getString("itemId")) && Func.isNotEmpty(params.getString("stationId"))) { log.info("控制指令传参为:{}", JSON.toJSONString(originExtra)); String stationId = params.getString("stationId"); HashMap param = new HashMap<>(1); param.put("stationId",stationId); - String body = HttpRequest.post(url).body(JSON.toJSONString(param)).execute().body(); + String body = HttpRequest.post(initiateVideoTaskUrl).body(JSON.toJSONString(param)).execute().body(); params.put("data",body); log.info("识别结果为:{}", body); ExtraVO result = originExtra.toJavaObject(ExtraVO.class); @@ -55,7 +63,7 @@ public class ControlAnswerResolveServiceImpl implements IAnswerResolveService { HashMap param = new HashMap<>(1); param.put("itemName", params.getString("itemName")); log.info("机器人巡检传参为:{}", JSON.toJSONString(param)); - String body = HttpRequest.post("http://192.168.60.29:8080/api/hzinfo-inspect/plan/initiateRobotPlan").body(JSON.toJSONString(param)).execute().body(); + String body = HttpRequest.post(initiateRobotPlanUrl).body(JSON.toJSONString(param)).execute().body(); log.info("结果为:{}",body); ExtraVO result = originExtra.toJavaObject(ExtraVO.class); result.setType(FunctionConstants.TypeEnum.PARAMS.getType()); diff --git a/hzims-service/gglm-big-model/src/main/resources/template/template.yml b/hzims-service/gglm-big-model/src/main/resources/template/template.yml index 745470a..f8d2753 100644 --- a/hzims-service/gglm-big-model/src/main/resources/template/template.yml +++ b/hzims-service/gglm-big-model/src/main/resources/template/template.yml @@ -68,6 +68,9 @@ gglm: insertVectors: "/vector/insert_vectors" createTable: "/vector/create_table" deleteTable: "/vector/delete_table" + remote: + initiateRobotPlan: "http://${hzims.server.ip}/api/hzinfo-inspect/plan/initiateRobotPlan" + initiateVideoTask: "http://${hzims.server.ip}/api/hzinfo-inspect/feign/ai/analysisByStationId" swagger: base-packages: com.hnac.hzims.bigmodel diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java index 2538182..f7ab13e 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketInfoServiceImpl.java @@ -121,6 +121,9 @@ public class WorkTicketInfoServiceImpl extends ServiceImpl