From b86b2936c58c5dc701a3d8fdf14a96ab1ab87c0b Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Wed, 24 Apr 2024 18:33:05 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=E5=91=8A=E8=AD=A6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=BB=91=E5=AE=9A=E8=A7=86=E9=A2=91=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzims/equipment/feign/IEmInfoClient.java | 5 +- .../hzims/equipment/feign/IEmInfoClientBack.java | 5 ++ .../hnac/hzims/equipment/feign/IEmVideoClient.java | 39 ++++++++++++ .../hnac/hzims/equipment/feign/EmInfoClient.java | 8 +++ .../hnac/hzims/equipment/feign/EmVideoClient.java | 42 +++++++++++++ .../alarm/show/controller/ShowAlarmController.java | 9 +++ .../hzims/alarm/show/service/AlarmService.java | 9 +++ .../alarm/show/service/impl/AlarmServiceImpl.java | 73 ++++++++++++++++++++++ 8 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmVideoClient.java create mode 100644 hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClient.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClient.java index 084f3b0..6e6dec3 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClient.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClient.java @@ -81,8 +81,8 @@ public interface IEmInfoClient { String GET_CHILDREN_BY_EM_CODE = API_PREFIX + "/getChildrenByEmCode"; String GET_EM_CREATE_TABLE = API_PREFIX + "/getEmCreateTable"; String GET_VIDEO_DEVICE_BY_EM_CODE = API_PREFIX + "/getVideoDeviceByEmCode"; - String DEVICE_BY_PATH = API_PREFIX + "/deviceByPath"; + String EM_INFO_LIST = API_PREFIX + "/emInfoList"; @PostMapping(DETAIL) EmInfoEntity getByCode(@RequestParam("code") String id); @@ -166,4 +166,7 @@ public interface IEmInfoClient { @GetMapping(DEVICE_BY_PATH) List deviceByPath(@RequestParam("emCode") String emCode); + + @GetMapping(EM_INFO_LIST) + R> emInfoList(EmInfoEntity req); } diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClientBack.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClientBack.java index 9239354..c411e7e 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClientBack.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmInfoClientBack.java @@ -109,4 +109,9 @@ public class IEmInfoClientBack implements IEmInfoClient { public List deviceByPath(String emCode) { return new ArrayList<>(); } + + @Override + public R> emInfoList(EmInfoEntity req) { + return R.fail("远程调用失败"); + } } diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmVideoClient.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmVideoClient.java new file mode 100644 index 0000000..6b6098c --- /dev/null +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/equipment/feign/IEmVideoClient.java @@ -0,0 +1,39 @@ +package com.hnac.hzims.equipment.feign; + +import com.hnac.hzims.EquipmentConstants; +import com.hnac.hzims.equipment.entity.EmVideoBandingEntity; +import org.springblade.core.tool.api.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @Author: huangxing + * @Date: 2024/04/19 17:00 + */ +@FeignClient(value = EquipmentConstants.APP_NAME) +public interface IEmVideoClient { + + String API_PREFIX = "/feign/em/video"; + String GET_EM_BANDING_VIDEOS = API_PREFIX + "/getEmBandingVideos"; + String IS_BANDING_VIDEO_BY_EM_CODES = API_PREFIX + "/isBandingVideoByEmCode"; + + /** + * 获取设备绑定视频列表 + * @param emCodes 设备编号 + * @return 视频列表 + */ + @GetMapping(GET_EM_BANDING_VIDEOS) + R> getEmBandingVideos(@RequestParam String emCodes); + + /** + * 验证设备编号是否绑定视频 + * @param emCode 设备编号 + * @return 是否绑定视频结果 + */ + @GetMapping(IS_BANDING_VIDEO_BY_EM_CODES) + R isBandingVideoByEmCode(@RequestParam String emCode); + +} diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmInfoClient.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmInfoClient.java index ca0e5f3..637da20 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmInfoClient.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmInfoClient.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Lists; +import com.hnac.hzims.common.utils.Condition; import com.hnac.hzims.equipment.entity.EmInfoEntity; import com.hnac.hzims.equipment.service.IEmInfoService; import com.hnac.hzims.equipment.vo.DeviceVO; @@ -147,6 +148,13 @@ public class EmInfoClient implements IEmInfoClient { return service.deviceByPath(emCode); } + @Override + @GetMapping(EM_INFO_LIST) + public R> emInfoList(EmInfoEntity req) { + LambdaQueryWrapper queryWrapper = Condition.getQueryWrapper(EmInfoEntity.class, req); + return R.data(service.list(queryWrapper)); + } + @PostMapping(GET_EM_CREATE_TABLE) @Override public List getEmCreateTable(List tableNames) { diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java new file mode 100644 index 0000000..458e2a6 --- /dev/null +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java @@ -0,0 +1,42 @@ +package com.hnac.hzims.equipment.feign; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.hnac.hzims.equipment.entity.EmVideoBandingEntity; +import com.hnac.hzims.equipment.service.IEmVideoBandingService; +import com.hnac.hzims.equipment.service.IEmVideoService; +import lombok.AllArgsConstructor; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.Func; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collection; +import java.util.List; + +/** + * @Author: huangxing + * @Date: 2024/04/24 11:21 + */ +@RestController +@AllArgsConstructor +public class EmVideoClient implements IEmVideoClient{ + + private final IEmVideoBandingService emVideoBandingService; + + @Override + @GetMapping(GET_EM_BANDING_VIDEOS) + public R> getEmBandingVideos(@RequestParam String emCodes) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().in(EmVideoBandingEntity::getEmCode, Func.toLongList(",",emCodes)); + return R.data(emVideoBandingService.list(wrapper)); + } + + @Override + public R isBandingVideoByEmCode(String emCode) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().eq(EmVideoBandingEntity::getEmCode, emCode); + List videoList = emVideoBandingService.list(wrapper); + return R.status(CollectionUtil.isNotEmpty(videoList)); + } +} diff --git a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/controller/ShowAlarmController.java b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/controller/ShowAlarmController.java index 625e5b3..162c113 100644 --- a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/controller/ShowAlarmController.java +++ b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/controller/ShowAlarmController.java @@ -6,6 +6,7 @@ import com.hnac.hzims.alarm.config.entity.AlarmEntity; import com.hnac.hzims.alarm.source.service.SystemAlarmService; import com.hnac.hzims.alarm.show.service.AlarmService; import com.hnac.hzims.alarm.config.vo.AlarmCountVo; +import com.hnac.hzims.equipment.entity.EmVideoBandingEntity; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -53,4 +54,12 @@ public class ShowAlarmController extends BladeController { return R.data(alarmService.counts(alarm)); } + @GetMapping("/getVideosByStationAndRealId") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "站点") + public R> getVideosByStationAndRealId(@ApiParam("站点编号") @RequestParam String stationCode, + @ApiParam("监测点ID") @RequestParam String realId) { + return R.data(alarmService.getVideosByStationAndRealId(stationCode,realId)); + } + } \ No newline at end of file diff --git a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/AlarmService.java b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/AlarmService.java index ecc3077..8b62437 100644 --- a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/AlarmService.java +++ b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/AlarmService.java @@ -3,6 +3,7 @@ package com.hnac.hzims.alarm.show.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.hnac.hzims.alarm.config.entity.AlarmEntity; import com.hnac.hzims.alarm.config.vo.AlarmCountVo; +import com.hnac.hzims.equipment.entity.EmVideoBandingEntity; import org.springblade.core.mp.base.BaseService; import org.springframework.web.socket.TextMessage; @@ -20,4 +21,12 @@ public interface AlarmService extends BaseService { List broadcast(String startTime, String endTime); TextMessage majorAlarm(List depts); + + /** + * 根据站点、realId 获取视频列表 + * @param stationCode 站点编号 + * @param realId hz3000点位信息 + * @return 视频列表 + */ + List getVideosByStationAndRealId(String stationCode,String realId); } \ No newline at end of file diff --git a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java index 913e0a1..fdd96f2 100644 --- a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java +++ b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java @@ -12,19 +12,30 @@ import com.hnac.hzims.alarm.show.service.AlarmService; import com.hnac.hzims.alarm.source.service.MessageService; import com.hnac.hzims.alarm.config.vo.AlarmCountVo; import com.hnac.hzims.alarm.config.vo.ChildAlarmCountVo; +import com.hnac.hzims.equipment.entity.EmInfoEntity; +import com.hnac.hzims.equipment.entity.EmVideoBandingEntity; +import com.hnac.hzims.equipment.feign.IEmInfoClient; +import com.hnac.hzims.equipment.feign.IEmVideoClient; import com.hnac.hzims.message.dto.MailMessageDTO; import com.hnac.hzims.message.fegin.IMessageClient; import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.feign.IStationClient; +import com.hnac.hzinfo.sdk.v5.device.DeviceDataClient; +import com.hnac.hzinfo.sdk.v5.device.client.DeviceClient; +import com.hnac.hzinfo.sdk.v5.device.vo.DeviceInstanceAttrVO; +import com.hnac.hzinfo.sdk.v5.project.ProjectClient; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.user.entity.User; import org.springblade.system.user.feign.IUserClient; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; import org.springframework.web.socket.TextMessage; import java.util.*; @@ -49,6 +60,9 @@ public class AlarmServiceImpl extends BaseServiceImpl private final IStationClient stationClient; private final IMessageClient messageClient; + private final IEmInfoClient emInfoClient; + private final DeviceClient deviceClient; + private final IEmVideoClient emVideoClient; /** * 查询告警列表 @@ -215,6 +229,65 @@ public class AlarmServiceImpl extends BaseServiceImpl return new TextMessage(JSONObject.toJSONString(alarms.stream().sorted(Comparator.comparing(AlarmEntity::getAlarmTime).reversed()).collect(Collectors.toList()))); } + @Override + public List getVideosByStationAndRealId(String stationCode, String realId) { + R stationR = stationClient.getStationByCode(stationCode); + Assert.isTrue(stationR.isSuccess() && Func.isNotEmpty(stationR.getData()), () -> { + throw new ServiceException("获取站点信息失败!"); + }); + EmInfoEntity emReq = new EmInfoEntity(); + emReq.setDepartment(stationR.getData().getRefDept()); + R> emListR = emInfoClient.emInfoList(emReq); + Assert.isTrue(emListR.isSuccess() && CollectionUtil.isNotEmpty(emListR.getData()), () -> { + throw new ServiceException("该站点未获取到设备!"); + }); + List emInfoList = emListR.getData(); + String emCodes = emInfoList.stream().parallel() + .filter(this::isBandingVideoByEmCode) + .filter(this::isDeviceCodeExist) + .filter(em -> this.isRealIdBanding(realId, em.getNumber())) + .map(EmInfoEntity::getNumber) + .collect(Collectors.joining(",")); + R> videoListR = emVideoClient.getEmBandingVideos(emCodes); + Assert.isTrue(videoListR.isSuccess(), () -> { + throw new ServiceException("获取设备绑定视频列表失败!"); + }); + return videoListR.getData().stream().distinct().collect(Collectors.toList()); + } + + /** + * 验证设备编号是否绑定视频 + * @param emInfo 设备信息 + * @return 是否绑定视频结果 + */ + public Boolean isBandingVideoByEmCode(EmInfoEntity emInfo) { + return emVideoClient.isBandingVideoByEmCode(emInfo.getNumber()).isSuccess(); + } + + /** + * 验证设备实例中的属性是否绑定realId + * @param realId hz3000监测点ID + * @param emCode 设备编号 + * @return 绑定结果 + */ + private Boolean isRealIdBanding(String realId,String emCode) { + R> deviceAttrR = deviceClient.getOnlineAttr(emCode); + if(deviceAttrR.isSuccess() && CollectionUtil.isNotEmpty(deviceAttrR.getData())) { + return deviceAttrR.getData().stream().anyMatch(attr -> realId.equals(attr.getFacDeviceAttrId())); + } + return false; + } + + + /** + * 验证设备code是否存在 (存在是true) + * @param emInfo 设备信息 + * @return 是否存在 + */ + private Boolean isDeviceCodeExist(EmInfoEntity emInfo) { + R isExistResult = deviceClient.isDeviceCodeExist(emInfo.getNumber()); + return Optional.ofNullable(isExistResult).filter(r -> r.isSuccess()).map(R::getData).orElse(false); + } /** * 子类型数量集合 From 0b49694e3ab9af94efc387ba4d86406e4d6f9805 Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Wed, 24 Apr 2024 18:40:14 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=E5=91=8A=E8=AD=A6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=BB=91=E5=AE=9A=E8=A7=86=E9=A2=91=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hzims-service/equipment/src/main/resources/db/2.0.1.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service/equipment/src/main/resources/db/2.0.1.sql b/hzims-service/equipment/src/main/resources/db/2.0.1.sql index 1905851..ff8bdfc 100644 --- a/hzims-service/equipment/src/main/resources/db/2.0.1.sql +++ b/hzims-service/equipment/src/main/resources/db/2.0.1.sql @@ -1,2 +1,2 @@ -- 批量处理设备历史数据,将其设为一级设备 -update hzims_em_info set `path` = CONCAT('/',`NUMBER`) where `path` is null and `is_deleted` = 0 \ No newline at end of file +update hzims_em_info set `path` = CONCAT('/',`NUMBER`) where `path` is null and `is_deleted` = 0; \ No newline at end of file From 39ebdc0021889b05f2079780df141cbbe0df4345 Mon Sep 17 00:00:00 2001 From: haungxing <1203316822@qq.com> Date: Wed, 24 Apr 2024 19:16:43 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=E5=91=8A=E8=AD=A6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=BB=91=E5=AE=9A=E8=A7=86=E9=A2=91=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java | 2 +- .../java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java index 458e2a6..f1a6cf8 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/feign/EmVideoClient.java @@ -29,7 +29,7 @@ public class EmVideoClient implements IEmVideoClient{ @Override @GetMapping(GET_EM_BANDING_VIDEOS) public R> getEmBandingVideos(@RequestParam String emCodes) { - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().in(EmVideoBandingEntity::getEmCode, Func.toLongList(",",emCodes)); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().in(EmVideoBandingEntity::getEmCode, Func.toStrList(",",emCodes)); return R.data(emVideoBandingService.list(wrapper)); } diff --git a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java index fdd96f2..2b769ec 100644 --- a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java +++ b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/show/service/impl/AlarmServiceImpl.java @@ -248,6 +248,9 @@ public class AlarmServiceImpl extends BaseServiceImpl .filter(em -> this.isRealIdBanding(realId, em.getNumber())) .map(EmInfoEntity::getNumber) .collect(Collectors.joining(",")); + Assert.isTrue(StringUtil.isNotBlank(emCodes) && Func.isNotEmpty(emCodes), () -> { + throw new ServiceException("未获取到设备!"); + }); R> videoListR = emVideoClient.getEmBandingVideos(emCodes); Assert.isTrue(videoListR.isSuccess(), () -> { throw new ServiceException("获取设备绑定视频列表失败!"); From 086c2a6f5c6b1aba68e8c69abe3efefb57ea161d Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Wed, 24 Apr 2024 19:24:22 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=EF=BC=9A=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E7=A5=A8=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ticket/twoTicket/constant/TicketConstant.java | 2 +- .../service/impl/FirstWorkTicketServiceImpl.java | 4 +++- .../com/hnac/hzims/ticket/utils/MergeDocUtils.java | 5 +++-- .../com/hnac/hzims/ticket/utils/ObjectUtils.java | 12 ++++++------ .../template/水力机械工作票模版.docx | Bin 36398 -> 36689 bytes 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java index c374b59..db0e96e 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java @@ -12,7 +12,7 @@ public class TicketConstant { /** * window操作系统工作票访问路径 */ - public static final String TICKET_WINDOW_PATH = "E:/project/HZIMS/hzims-service/ticket/src/main/resources/template/"; + public static final String TICKET_WINDOW_PATH = "D:/Java/hzims-back/hzims-service/ticket/src/main/resources/template/"; /** * Liunx操作系统工作票访问路径 diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java index 41d0b30..4ff1b08 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java @@ -321,7 +321,7 @@ public class FirstWorkTicketServiceImpl extends BaseServiceImpl result = new HashMap() {{ - put(prefix + split + "year", dateTime.getYear()); - put(prefix + split + "month", dateTime.getMonthValue()); - put(prefix + split + "day", dateTime.getDayOfMonth()); - put(prefix + split + "hour", dateTime.getHour()); - put(prefix + split + "minuter", dateTime.getMinute()); - put(prefix + split + "second", dateTime.getSecond()); + put(prefix + split + "year",String.format("%02d", dateTime.getYear())); + put(prefix + split + "month",String.format("%02d",dateTime.getMonthValue())); + put(prefix + split + "day",String.format("%02d", dateTime.getDayOfMonth())); + put(prefix + split + "hour",String.format("%02d", dateTime.getHour())); + put(prefix + split + "minuter", String.format("%02d",dateTime.getMinute())); + put(prefix + split + "second",String.format("%02d",dateTime.getSecond())); }}; return result; } diff --git a/hzims-service/ticket/src/main/resources/template/水力机械工作票模版.docx b/hzims-service/ticket/src/main/resources/template/水力机械工作票模版.docx index e5b56d6a57f5e2b258c6fed5a2bb5aafb2b9b092..4070848385fed17531834350c5fd3b08de9519e9 100644 GIT binary patch delta 14827 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 CUKR}i delta 14473 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 PNF`6CfgX(d&pZDMHHd1>