From 25c3a33dad9b2aad2a47f1df56c7807be6de548b Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Jun 2024 16:03:23 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=85=85=E7=94=B5=E6=A1=A9=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/PersonPileController.java | 43 ++++++++++++++--- .../java/com/jsowell/service/PileService.java | 43 ++++++++++++----- .../test/java/SpringBootTestController.java | 10 ++++ .../common/response/RestApiResponse.java | 11 +++++ .../jsowell/pile/dto/CreateReservedDTO.java | 48 +++++++++++++++++++ .../com/jsowell/pile/dto/PileReservedDTO.java | 34 +++++++++++++ .../pile/service/PileReservedInfoService.java | 5 +- .../impl/PileReservedInfoServiceImpl.java | 35 +++++++++----- 8 files changed, 194 insertions(+), 35 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java index eb59ed0da..e47ff49c5 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java @@ -1,6 +1,7 @@ package com.jsowell.api.uniapp; import com.alibaba.fastjson2.JSON; +import com.google.common.collect.ImmutableMap; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.page.PageResponse; @@ -8,6 +9,8 @@ import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.dto.CreateReservedDTO; +import com.jsowell.pile.dto.PileReservedDTO; import com.jsowell.pile.dto.PileMemberBindingDTO; import com.jsowell.pile.dto.QueryPersonPileDTO; import com.jsowell.pile.service.PileBasicInfoService; @@ -251,24 +254,50 @@ public class PersonPileController extends BaseController { */ /** - * 取消预约 + * 修改预约充电状态 + * http://localhost:8080/uniapp/personalPile/updateReservedStatus */ - public RestApiResponse canal(HttpServletRequest request, @RequestBody QueryPersonPileDTO dto) { - logger.info("取消预约params:{}", JSON.toJSONString(dto)); + @PostMapping("/updateReservedStatus") + public RestApiResponse updateReservedStatus(HttpServletRequest request, @RequestBody PileReservedDTO dto) { + // logger.info("修改预约充电状态params:{}", dto); RestApiResponse response = null; try { String memberId = getMemberIdByAuthorization(request); dto.setMemberId(memberId); - pileService.canalReserved(dto); + pileService.updateReservedStatus(dto); response = new RestApiResponse<>(); } catch (BusinessException e) { - logger.error("取消预约error", e); + logger.error("修改预约充电状态error, params:{}", dto, e); response = new RestApiResponse<>(e.getCode(), e.getMessage()); } catch (Exception e) { - logger.error("取消预约error", e); + logger.error("修改预约充电状态error, params:{}", dto, e); response = new RestApiResponse<>(e); } - logger.info("取消预约result:{}", response); + logger.info("修改预约充电状态params:{}, result:{}", dto, response); + return response; + } + + /** + * 添加预约充电 + * http://localhost:8080/uniapp/personalPile/createReserved + */ + @PostMapping("/createReserved") + public RestApiResponse createReserved(HttpServletRequest request, @RequestBody CreateReservedDTO dto) { + // logger.info("修改预约充电状态params:{}", dto); + RestApiResponse response = null; + try { + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + int reservedId = pileService.createReserved(dto); + response = new RestApiResponse<>(ImmutableMap.of("reservedId", reservedId)); + } catch (BusinessException e) { + logger.error("添加预约充电error, params:{}", dto, e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("添加预约充电error, params:{}", dto, e); + response = new RestApiResponse<>(e); + } + logger.info("添加预约充电params:{}, result:{}", dto, response); return response; } } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index 28f4ddcfe..0fb4b15a3 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -16,19 +16,10 @@ import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.SecurityUtils; import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.domain.*; +import com.jsowell.pile.dto.*; import com.jsowell.pile.util.SnUtils; import com.jsowell.pile.service.*; -import com.jsowell.pile.domain.MemberBasicInfo; -import com.jsowell.pile.domain.OrderBasicInfo; -import com.jsowell.pile.domain.PileBasicInfo; -import com.jsowell.pile.domain.PileConnectorInfo; -import com.jsowell.pile.domain.PileMemberRelation; -import com.jsowell.pile.domain.PileStationInfo; -import com.jsowell.pile.dto.BatchCreatePileDTO; -import com.jsowell.pile.dto.MemberRegisterAndLoginDTO; -import com.jsowell.pile.dto.PileMemberBindingDTO; -import com.jsowell.pile.dto.QueryPersonPileDTO; -import com.jsowell.pile.dto.QueryStationDTO; import com.jsowell.pile.transaction.dto.PileTransactionDTO; import com.jsowell.pile.transaction.service.TransactionService; import com.jsowell.pile.vo.base.ConnectorInfoVO; @@ -95,6 +86,9 @@ public class PileService { @Autowired private PileRemoteService pileRemoteService; + @Autowired + private PileReservedInfoService pileReservedInfoService; + /** * 查询设备信息 * @@ -562,10 +556,33 @@ public class PileService { /** - * 取消预约充电 + * 修改预约充电状态 * @param dto */ - public void canalReserved(QueryPersonPileDTO dto) { + public void updateReservedStatus(PileReservedDTO dto) { + if (StringUtils.equals(dto.getStatus(), Constants.ZERO)) { + pileReservedInfoService.deactivateReserved(dto); + } else if (StringUtils.equals(dto.getStatus(), Constants.ONE)) { + pileReservedInfoService.activateReserved(dto); + } + } + public int createReserved(CreateReservedDTO dto) { + PileReservedInfo reservedInfo = new PileReservedInfo(); + reservedInfo.setMemberId(dto.getMemberId()); + reservedInfo.setPileSn(dto.getPileSn()); + reservedInfo.setStatus(Constants.ZERO); // 默认未生效 + reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime())); + reservedInfo.setEndTime(DateUtils.parseDate(dto.getEndTime())); + if (StringUtils.isNotBlank(dto.getFreq())) { + reservedInfo.setReservedType("recurring"); + reservedInfo.setFreq(dto.getFreq()); + } else { + reservedInfo.setReservedType("single"); + reservedInfo.setFreq(null); + } + reservedInfo.setCreateBy(dto.getMemberId()); + pileReservedInfoService.insertSelective(reservedInfo); + return reservedInfo.getId(); } } diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 6531889b1..da83d14fe 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -262,6 +262,16 @@ public class SpringBootTestController { @Autowired private NotificationService notificationService; + @Test + public void queryPaymentReverseTest2() { + String paymentId = "002212024061717243610648707836701741056"; + try { + adapayService.queryPaymentReverse(paymentId, wechatAppId1); + } catch (BaseAdaPayException e) { + throw new RuntimeException(e); + } + } + @Test public void createBalancePaymentRequestTest() { String outMemberId = "ACM40782726"; diff --git a/jsowell-common/src/main/java/com/jsowell/common/response/RestApiResponse.java b/jsowell-common/src/main/java/com/jsowell/common/response/RestApiResponse.java index 7ec0312f8..0e115f541 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/response/RestApiResponse.java +++ b/jsowell-common/src/main/java/com/jsowell/common/response/RestApiResponse.java @@ -2,6 +2,8 @@ package com.jsowell.common.response; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; @Data public class RestApiResponse { @@ -40,4 +42,13 @@ public class RestApiResponse { this.resCode = returnCodeEnum.getValue(); this.msg = returnCodeEnum.getLabel(); } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) + .append("resCode", resCode) + .append("msg", msg) + .append("obj", obj) + .toString(); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java new file mode 100644 index 000000000..b65b03e92 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java @@ -0,0 +1,48 @@ +package com.jsowell.pile.dto; + +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +@Getter +@Setter +public class CreateReservedDTO { + /** + * 会员id + */ + private String memberId; + + /** + * 充电桩编号 + */ + private String pileSn; + + /** + * 预约开始时间 + */ + private String startTime; + + /** + * 预约结束时间 + */ + private String endTime; + + /** + * 周期性预约的频率,对于单次预约,该字段可以为 NULL。可能的值包括 daily, weekly, monthly + */ + private String freq; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) + .append("memberId", memberId) + .append("pileSn", pileSn) + .append("startTime", startTime) + .append("endTime", endTime) + .append("freq", freq) + .toString(); + } +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java new file mode 100644 index 000000000..6ebded0cd --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java @@ -0,0 +1,34 @@ +package com.jsowell.pile.dto; + +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +@Getter +@Setter +public class PileReservedDTO { + /** + * 会员id + */ + private String memberId; + + /** + * 预约id + */ + private String reservedId; + + /** + * 状态 (0-停用;1-启用) + */ + private String status; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) + .append("memberId", memberId) + .append("reservedId", reservedId) + .append("status", status) + .toString(); + } +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java index 40f182329..5d95a366c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java @@ -2,6 +2,7 @@ package com.jsowell.pile.service; import java.util.List; +import com.jsowell.pile.dto.PileReservedDTO; import com.jsowell.pile.domain.PileReservedInfo; public interface PileReservedInfoService { @@ -31,9 +32,9 @@ public interface PileReservedInfoService { List getReservationsByMemberIdAndPileSn(String memberId, String pileSn); - void activateReservation(int reservationId); + void activateReserved(PileReservedDTO dto); - void deactivateReservation(int reservationId); + void deactivateReserved(PileReservedDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java index 5435d6059..716792b77 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java @@ -2,6 +2,8 @@ package com.jsowell.pile.service.impl; import com.jsowell.common.constant.Constants; import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.dto.PileReservedDTO; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -81,29 +83,36 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { /** * 启用预约 - * @param reservationId */ @Override - public void activateReservation(int reservationId) { - PileReservedInfo pileReservedInfo = pileReservedInfoMapper.selectByPrimaryKey(reservationId); - if (pileReservedInfo != null) { - pileReservedInfo.setStatus(Constants.ONE); - // pileReservedInfoMapper.updateByPrimaryKeySelective(pileReservedInfo); - saveReservation(pileReservedInfo); + public void activateReserved(PileReservedDTO dto) { + PileReservedInfo pileReservedInfo = pileReservedInfoMapper.selectByPrimaryKey(Integer.parseInt(dto.getReservedId())); + if (pileReservedInfo == null) { + return; } + if (!StringUtils.equals(dto.getMemberId(), pileReservedInfo.getMemberId())) { + return; + } + pileReservedInfo.setStatus(Constants.ONE); + // 保存之前,校验时间是否重叠 + saveReservation(pileReservedInfo); } /** * 禁用预约 - * @param reservationId */ @Override - public void deactivateReservation(int reservationId) { - PileReservedInfo pileReservedInfo = pileReservedInfoMapper.selectByPrimaryKey(reservationId); - if (pileReservedInfo != null) { - pileReservedInfo.setStatus(Constants.ZERO); - pileReservedInfoMapper.updateByPrimaryKeySelective(pileReservedInfo); + public void deactivateReserved(PileReservedDTO dto) { + PileReservedInfo pileReservedInfo = pileReservedInfoMapper.selectByPrimaryKey(Integer.parseInt(dto.getReservedId())); + if (pileReservedInfo == null) { + return; } + if (!StringUtils.equals(dto.getMemberId(), pileReservedInfo.getMemberId())) { + return; + } + // 校验通过可以修改预约 + pileReservedInfo.setStatus(Constants.ZERO); + pileReservedInfoMapper.updateByPrimaryKeySelective(pileReservedInfo); } From 0ef1e0cbf8cf9fbc160358f51c2c983e0e240ac9 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Jun 2024 16:08:01 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=AE=9D=E5=B0=8F=E7=A8=8B=E5=BA=8Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jsowell-admin/src/main/resources/application-prd.yml | 2 ++ jsowell-admin/src/main/resources/application-pre.yml | 2 ++ jsowell-admin/src/main/resources/application-sit.yml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/jsowell-admin/src/main/resources/application-prd.yml b/jsowell-admin/src/main/resources/application-prd.yml index a6ffb53e7..810aa7765 100644 --- a/jsowell-admin/src/main/resources/application-prd.yml +++ b/jsowell-admin/src/main/resources/application-prd.yml @@ -167,12 +167,14 @@ adapay: rsaPrivateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOl7qJyrkrks7FKnBPr/Sngub897Ni5Bkn5pEa81zfs+4LrYsuWZQ8G1n7Q8/rjH4G/T7vPX+So41vNU74Sqn6E1b3BpW+wWBULhs9p1JSPT7Kzima4FmPigUr80NLrlVKn5bW+V4/odpN+bJWvpxdd024edHAD8mXX1M1N1lU5ZAgMBAAECgYA+mxbiM6tbFe2kV/6g4vVv9luq0cn8az7BwKCqT44U8Y5G67ZElG0zsuTI6pYOrCHFOpnXLrE0HhudEchL1YiJqW/SDKaoC4oDZf5nybhh11kOR3N5maLqvUz/WxdNy17th/2XxqVfTTu752X9yeeoXDj89N5OxyMl0jmxlhWbgQJBAPeoitR7FCxcjKtcKsEyrtV3T0H2WtQ2Pbku7CGe6VCtL4+DJNeUentn7plBj4IhbH3EwNmyCYzNlfp0X2d8fWkCQQDxWONjt1vV/dyKQYRvSVw/SWQWlR7g2OnHZokU2SNeewiCX2umCdYKh0doN0JHbSTLOGG5IA3+6Vxam+9hzPtxAkEAjr+QHf8/Vn6V+mOqpSdgjNwzS/MC0ZTeKPI52vsswnrAkjjmMHh9zMnQRnf6juhTD38sJY6wYH9TdkRDhXPFGQJATiFYe4+AS2ZDXv6WwPAezN4VaLodpOyTwdmPxxAEQzHRL2N0levZPs9MbpB1BGpw3tkBycx2u28QVsTkWeTiAQJAGRsAVr6Rhhdaq2vTjt9orhMVwt6BCoSQ0zzHSYilv4PMOtSu1Pyt4K8BDv3gjEyAi1GtE7kkJ0dcbsvOGiLzqQ== appId: app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa wechatAppId: wxbb3e0d474569481d + alipayAppId: 2021004145642756 xixiao: apiKey: api_live_8690aad5-18df-4c94-ba8c-4f9499721c65 mockApiKey: api_test_a2944395-e6ba-4d59-969a-f629b7a9e53e rsaPrivateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ608yEkr5Fxj3ID9fIzavuwW/orgjlD1SIrmZVTwLFzM+ljnr/iFMRRhjJZZGImO+ySj296N+VPujHiiQZqymgIACdORs3YyRvxOeWQoPKiik21mOiF7RRw2GIOQEzqo0MKeJ/qdK89FvwnAIZKRXl+ccH/VTTr68VGWuiLWEK3AgMBAAECgYACsMCaZDvRtGIhJa4KsBJ1N9UnVYt8mwjG7oRJAsV2fKR5pWWwjQ2bEmK7Acbw3wMPDKD/28uMyKA4bkWyZScPO5T2Mhvo28AVOfdsbBht70iKzBAXuqHhHd99+AEmQL9ZcoCYCvoP2JqV8cHp5sXGEvncm9VRsjs3iSTsBYu0WQJBANB6x0DCPnAFXYnKvtBcBmF4jU8pO0iIGtx/ZR/N0pRTbL7cIvh+z6ZqtWo880Xbcli6i1qwZl1ctWwV0yKArOsCQQDC4dN6e8/Gj3FubXLmyLfIrbq7BuHW8kg19t0/wmAXunpkBtFhAA2FD7FYGg+/l6/f6YqWX8nSUr6pFZQI0Z5lAkARvBANIzj6gIpXeWbIBLwKOJ4UuNYxMlrOnQu2K+UY9wvOJJ3Y87ioWHV8RxkOvT856wyFt3HNyWAphKXETpvnAkEAnIjJ1ktW9FXJtfph3bABt0acg5eelYmcqQP2aT1W9BhMMMYtLi3drjCRsYOVfL55fXBYajrcoHzoOmZjtsWw5QJBAM/Wpk6L7BLVi357icleuivPtKsP04Ix5afUpgiFmssEheiLAxr+Zs5/nk/HM6V4Pk8kA0ILaNbRqjfAF5ZnAvk= appId: app_7848ccb2-f7e7-4841-a968-fbf02cc265ad wechatAppId: wx20abc5210391649c + alipayAppId: wx20abc5210391649c # 待修改为真正的支付宝小程序id #高德地图相关配置 aMap: diff --git a/jsowell-admin/src/main/resources/application-pre.yml b/jsowell-admin/src/main/resources/application-pre.yml index 60274dd96..1e6facb70 100644 --- a/jsowell-admin/src/main/resources/application-pre.yml +++ b/jsowell-admin/src/main/resources/application-pre.yml @@ -167,12 +167,14 @@ adapay: rsaPrivateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOl7qJyrkrks7FKnBPr/Sngub897Ni5Bkn5pEa81zfs+4LrYsuWZQ8G1n7Q8/rjH4G/T7vPX+So41vNU74Sqn6E1b3BpW+wWBULhs9p1JSPT7Kzima4FmPigUr80NLrlVKn5bW+V4/odpN+bJWvpxdd024edHAD8mXX1M1N1lU5ZAgMBAAECgYA+mxbiM6tbFe2kV/6g4vVv9luq0cn8az7BwKCqT44U8Y5G67ZElG0zsuTI6pYOrCHFOpnXLrE0HhudEchL1YiJqW/SDKaoC4oDZf5nybhh11kOR3N5maLqvUz/WxdNy17th/2XxqVfTTu752X9yeeoXDj89N5OxyMl0jmxlhWbgQJBAPeoitR7FCxcjKtcKsEyrtV3T0H2WtQ2Pbku7CGe6VCtL4+DJNeUentn7plBj4IhbH3EwNmyCYzNlfp0X2d8fWkCQQDxWONjt1vV/dyKQYRvSVw/SWQWlR7g2OnHZokU2SNeewiCX2umCdYKh0doN0JHbSTLOGG5IA3+6Vxam+9hzPtxAkEAjr+QHf8/Vn6V+mOqpSdgjNwzS/MC0ZTeKPI52vsswnrAkjjmMHh9zMnQRnf6juhTD38sJY6wYH9TdkRDhXPFGQJATiFYe4+AS2ZDXv6WwPAezN4VaLodpOyTwdmPxxAEQzHRL2N0levZPs9MbpB1BGpw3tkBycx2u28QVsTkWeTiAQJAGRsAVr6Rhhdaq2vTjt9orhMVwt6BCoSQ0zzHSYilv4PMOtSu1Pyt4K8BDv3gjEyAi1GtE7kkJ0dcbsvOGiLzqQ== appId: app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa wechatAppId: wxbb3e0d474569481d + alipayAppId: 2021004145642756 xixiao: apiKey: api_live_8690aad5-18df-4c94-ba8c-4f9499721c65 mockApiKey: api_test_a2944395-e6ba-4d59-969a-f629b7a9e53e rsaPrivateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ608yEkr5Fxj3ID9fIzavuwW/orgjlD1SIrmZVTwLFzM+ljnr/iFMRRhjJZZGImO+ySj296N+VPujHiiQZqymgIACdORs3YyRvxOeWQoPKiik21mOiF7RRw2GIOQEzqo0MKeJ/qdK89FvwnAIZKRXl+ccH/VTTr68VGWuiLWEK3AgMBAAECgYACsMCaZDvRtGIhJa4KsBJ1N9UnVYt8mwjG7oRJAsV2fKR5pWWwjQ2bEmK7Acbw3wMPDKD/28uMyKA4bkWyZScPO5T2Mhvo28AVOfdsbBht70iKzBAXuqHhHd99+AEmQL9ZcoCYCvoP2JqV8cHp5sXGEvncm9VRsjs3iSTsBYu0WQJBANB6x0DCPnAFXYnKvtBcBmF4jU8pO0iIGtx/ZR/N0pRTbL7cIvh+z6ZqtWo880Xbcli6i1qwZl1ctWwV0yKArOsCQQDC4dN6e8/Gj3FubXLmyLfIrbq7BuHW8kg19t0/wmAXunpkBtFhAA2FD7FYGg+/l6/f6YqWX8nSUr6pFZQI0Z5lAkARvBANIzj6gIpXeWbIBLwKOJ4UuNYxMlrOnQu2K+UY9wvOJJ3Y87ioWHV8RxkOvT856wyFt3HNyWAphKXETpvnAkEAnIjJ1ktW9FXJtfph3bABt0acg5eelYmcqQP2aT1W9BhMMMYtLi3drjCRsYOVfL55fXBYajrcoHzoOmZjtsWw5QJBAM/Wpk6L7BLVi357icleuivPtKsP04Ix5afUpgiFmssEheiLAxr+Zs5/nk/HM6V4Pk8kA0ILaNbRqjfAF5ZnAvk= appId: app_7848ccb2-f7e7-4841-a968-fbf02cc265ad wechatAppId: wx20abc5210391649c + alipayAppId: wx20abc5210391649c # 待修改为真正的支付宝小程序id #高德地图相关配置 aMap: diff --git a/jsowell-admin/src/main/resources/application-sit.yml b/jsowell-admin/src/main/resources/application-sit.yml index b6091ff00..883fcc662 100644 --- a/jsowell-admin/src/main/resources/application-sit.yml +++ b/jsowell-admin/src/main/resources/application-sit.yml @@ -170,12 +170,14 @@ adapay: rsaPrivateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOl7qJyrkrks7FKnBPr/Sngub897Ni5Bkn5pEa81zfs+4LrYsuWZQ8G1n7Q8/rjH4G/T7vPX+So41vNU74Sqn6E1b3BpW+wWBULhs9p1JSPT7Kzima4FmPigUr80NLrlVKn5bW+V4/odpN+bJWvpxdd024edHAD8mXX1M1N1lU5ZAgMBAAECgYA+mxbiM6tbFe2kV/6g4vVv9luq0cn8az7BwKCqT44U8Y5G67ZElG0zsuTI6pYOrCHFOpnXLrE0HhudEchL1YiJqW/SDKaoC4oDZf5nybhh11kOR3N5maLqvUz/WxdNy17th/2XxqVfTTu752X9yeeoXDj89N5OxyMl0jmxlhWbgQJBAPeoitR7FCxcjKtcKsEyrtV3T0H2WtQ2Pbku7CGe6VCtL4+DJNeUentn7plBj4IhbH3EwNmyCYzNlfp0X2d8fWkCQQDxWONjt1vV/dyKQYRvSVw/SWQWlR7g2OnHZokU2SNeewiCX2umCdYKh0doN0JHbSTLOGG5IA3+6Vxam+9hzPtxAkEAjr+QHf8/Vn6V+mOqpSdgjNwzS/MC0ZTeKPI52vsswnrAkjjmMHh9zMnQRnf6juhTD38sJY6wYH9TdkRDhXPFGQJATiFYe4+AS2ZDXv6WwPAezN4VaLodpOyTwdmPxxAEQzHRL2N0levZPs9MbpB1BGpw3tkBycx2u28QVsTkWeTiAQJAGRsAVr6Rhhdaq2vTjt9orhMVwt6BCoSQ0zzHSYilv4PMOtSu1Pyt4K8BDv3gjEyAi1GtE7kkJ0dcbsvOGiLzqQ== appId: app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa wechatAppId: wxbb3e0d474569481d + alipayAppId: 2021004145642756 xixiao: apiKey: api_live_8690aad5-18df-4c94-ba8c-4f9499721c65 mockApiKey: api_test_a2944395-e6ba-4d59-969a-f629b7a9e53e rsaPrivateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ608yEkr5Fxj3ID9fIzavuwW/orgjlD1SIrmZVTwLFzM+ljnr/iFMRRhjJZZGImO+ySj296N+VPujHiiQZqymgIACdORs3YyRvxOeWQoPKiik21mOiF7RRw2GIOQEzqo0MKeJ/qdK89FvwnAIZKRXl+ccH/VTTr68VGWuiLWEK3AgMBAAECgYACsMCaZDvRtGIhJa4KsBJ1N9UnVYt8mwjG7oRJAsV2fKR5pWWwjQ2bEmK7Acbw3wMPDKD/28uMyKA4bkWyZScPO5T2Mhvo28AVOfdsbBht70iKzBAXuqHhHd99+AEmQL9ZcoCYCvoP2JqV8cHp5sXGEvncm9VRsjs3iSTsBYu0WQJBANB6x0DCPnAFXYnKvtBcBmF4jU8pO0iIGtx/ZR/N0pRTbL7cIvh+z6ZqtWo880Xbcli6i1qwZl1ctWwV0yKArOsCQQDC4dN6e8/Gj3FubXLmyLfIrbq7BuHW8kg19t0/wmAXunpkBtFhAA2FD7FYGg+/l6/f6YqWX8nSUr6pFZQI0Z5lAkARvBANIzj6gIpXeWbIBLwKOJ4UuNYxMlrOnQu2K+UY9wvOJJ3Y87ioWHV8RxkOvT856wyFt3HNyWAphKXETpvnAkEAnIjJ1ktW9FXJtfph3bABt0acg5eelYmcqQP2aT1W9BhMMMYtLi3drjCRsYOVfL55fXBYajrcoHzoOmZjtsWw5QJBAM/Wpk6L7BLVi357icleuivPtKsP04Ix5afUpgiFmssEheiLAxr+Zs5/nk/HM6V4Pk8kA0ILaNbRqjfAF5ZnAvk= appId: app_7848ccb2-f7e7-4841-a968-fbf02cc265ad wechatAppId: wx20abc5210391649c + alipayAppId: wx20abc5210391649c # 待修改为真正的支付宝小程序id #高德地图相关配置 From 7025301d902f67bd3bccc1391090d25e4dfc809a Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Jun 2024 16:13:09 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E5=85=85=E7=94=B5=E6=A1=A9=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/api/uniapp/PersonPileController.java | 4 ++-- .../java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java index e47ff49c5..a4cf57b85 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java @@ -271,7 +271,7 @@ public class PersonPileController extends BaseController { response = new RestApiResponse<>(e.getCode(), e.getMessage()); } catch (Exception e) { logger.error("修改预约充电状态error, params:{}", dto, e); - response = new RestApiResponse<>(e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_UPDATE_RESERVED_STATUS_ERROR); } logger.info("修改预约充电状态params:{}, result:{}", dto, response); return response; @@ -295,7 +295,7 @@ public class PersonPileController extends BaseController { response = new RestApiResponse<>(e.getCode(), e.getMessage()); } catch (Exception e) { logger.error("添加预约充电error, params:{}", dto, e); - response = new RestApiResponse<>(e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_CREATE_RESERVED_ERROR); } logger.info("添加预约充电params:{}, result:{}", dto, response); return response; diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java index 552b3fb0a..4983c00e8 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java @@ -167,6 +167,9 @@ public enum ReturnCodeEnum { CODE_UNBIND_PILE_ERROR("00400012", "解绑个人桩异常!"), + CODE_CREATE_RESERVED_ERROR("00400013", "创建预约失败"), + CODE_UPDATE_RESERVED_STATUS_ERROR("00400014", "修改预约充电状态失败"), + /* 个人桩 end */ CODE_THIS_CARNO_HAS_BEEN_BINDING("00500001", "当前车牌号已经绑定,请检查!"), From 313392104a122f2c0cd2da28cbdf9ee767effe92 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Jun 2024 16:26:12 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=85=85=E7=94=B5=E6=A1=A9=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/PileService.java | 7 +++++-- .../src/main/java/com/jsowell/common/util/DateUtils.java | 3 +++ .../java/com/jsowell/pile/domain/PileReservedInfo.java | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index 0fb4b15a3..bea8a1747 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; +import java.sql.Time; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -572,8 +573,10 @@ public class PileService { reservedInfo.setMemberId(dto.getMemberId()); reservedInfo.setPileSn(dto.getPileSn()); reservedInfo.setStatus(Constants.ZERO); // 默认未生效 - reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime())); - reservedInfo.setEndTime(DateUtils.parseDate(dto.getEndTime())); + // reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime())); + reservedInfo.setStartTime(Time.valueOf(dto.getStartTime())); + // reservedInfo.setEndTime(DateUtils.parseDate(dto.getEndTime())); + reservedInfo.setEndTime(Time.valueOf(dto.getEndTime())); if (StringUtils.isNotBlank(dto.getFreq())) { reservedInfo.setReservedType("recurring"); reservedInfo.setFreq(dto.getFreq()); diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java index 66b10677f..03f233035 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java @@ -10,6 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.management.ManagementFactory; +import java.sql.Time; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -42,6 +43,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + public static String HH_MM = "HH:mm"; + public static String RFC3339 = "yyyy-MM-dd'T'HH:mm:ssXXX"; private static String[] parsePatterns = { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java index 6b2f69f7b..bd66a98d5 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java @@ -1,5 +1,6 @@ package com.jsowell.pile.domain; +import java.sql.Time; import java.util.Date; import lombok.AllArgsConstructor; import lombok.Data; @@ -44,12 +45,12 @@ public class PileReservedInfo { /** * 预约开始时间 */ - private Date startTime; + private Time startTime; /** * 预约结束时间 */ - private Date endTime; + private Time endTime; /** * 周期性预约的频率,对于单次预约,该字段可以为 NULL。可能的值包括 daily, weekly, monthly From f5b00e969635baf16e43360e475e5f2f30bc3fda Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Jun 2024 17:13:29 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E5=85=85=E7=94=B5=E6=A1=A9=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/PersonPileController.java | 73 +++++++++++++------ .../java/com/jsowell/service/PileService.java | 33 +++++++++ .../common/enums/ykc/ReturnCodeEnum.java | 5 ++ .../com/jsowell/pile/dto/PileReservedDTO.java | 9 +++ .../impl/PileReservedInfoServiceImpl.java | 15 ++-- .../com/jsowell/pile/vo/PileReservedVO.java | 38 ++++++++++ 6 files changed, 144 insertions(+), 29 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java index a4cf57b85..4169fd0c4 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PersonPileController.java @@ -15,6 +15,7 @@ import com.jsowell.pile.dto.PileMemberBindingDTO; import com.jsowell.pile.dto.QueryPersonPileDTO; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.service.PileMerchantInfoService; +import com.jsowell.pile.vo.PileReservedVO; import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO; import com.jsowell.pile.vo.uniapp.PersonPileRealTimeVO; import com.jsowell.pile.vo.uniapp.PersonalPileInfoVO; @@ -253,6 +254,54 @@ public class PersonPileController extends BaseController { * 个人桩启动充电 */ + /** + * 添加预约充电 + * http://localhost:8080/uniapp/personalPile/createReserved + */ + @PostMapping("/createReserved") + public RestApiResponse createReserved(HttpServletRequest request, @RequestBody CreateReservedDTO dto) { + // logger.info("修改预约充电状态params:{}", dto); + RestApiResponse response = null; + try { + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + int reservedId = pileService.createReserved(dto); + response = new RestApiResponse<>(ImmutableMap.of("reservedId", reservedId)); + } catch (BusinessException e) { + logger.error("添加预约充电error, params:{}", dto, e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("添加预约充电error, params:{}", dto, e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_CREATE_RESERVED_ERROR); + } + logger.info("添加预约充电params:{}, result:{}", dto, response); + return response; + } + + /** + * 查询预约充电列表 + * http://localhost:8080/uniapp/personalPile/queryReservedList + */ + @PostMapping("/queryReservedList") + public RestApiResponse queryReservedList(HttpServletRequest request, @RequestBody PileReservedDTO dto) { + // logger.info("修改预约充电状态params:{}", dto); + RestApiResponse response = null; + try { + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + PageResponse pageResponse = pileService.queryReservedList(dto); + response = new RestApiResponse<>(pageResponse); + } catch (BusinessException e) { + logger.error("查询预约列表error, params:{}", dto, e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("查询预约列表error, params:{}", dto, e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_QUERY_RESERVED_LIST_ERROR); + } + logger.info("查询预约列表params:{}, result:{}", dto, response); + return response; + } + /** * 修改预约充电状态 * http://localhost:8080/uniapp/personalPile/updateReservedStatus @@ -277,27 +326,5 @@ public class PersonPileController extends BaseController { return response; } - /** - * 添加预约充电 - * http://localhost:8080/uniapp/personalPile/createReserved - */ - @PostMapping("/createReserved") - public RestApiResponse createReserved(HttpServletRequest request, @RequestBody CreateReservedDTO dto) { - // logger.info("修改预约充电状态params:{}", dto); - RestApiResponse response = null; - try { - String memberId = getMemberIdByAuthorization(request); - dto.setMemberId(memberId); - int reservedId = pileService.createReserved(dto); - response = new RestApiResponse<>(ImmutableMap.of("reservedId", reservedId)); - } catch (BusinessException e) { - logger.error("添加预约充电error, params:{}", dto, e); - response = new RestApiResponse<>(e.getCode(), e.getMessage()); - } catch (Exception e) { - logger.error("添加预约充电error, params:{}", dto, e); - response = new RestApiResponse<>(ReturnCodeEnum.CODE_CREATE_RESERVED_ERROR); - } - logger.info("添加预约充电params:{}, result:{}", dto, response); - return response; - } + } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index bea8a1747..1b837d9d7 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -22,6 +22,7 @@ import com.jsowell.pile.util.SnUtils; import com.jsowell.pile.service.*; import com.jsowell.pile.transaction.dto.PileTransactionDTO; import com.jsowell.pile.transaction.service.TransactionService; +import com.jsowell.pile.vo.PileReservedVO; import com.jsowell.pile.vo.base.ConnectorInfoVO; import com.jsowell.pile.vo.base.MerchantInfoVO; import com.jsowell.pile.vo.base.PileInfoVO; @@ -562,8 +563,10 @@ public class PileService { */ public void updateReservedStatus(PileReservedDTO dto) { if (StringUtils.equals(dto.getStatus(), Constants.ZERO)) { + // 停用 pileReservedInfoService.deactivateReserved(dto); } else if (StringUtils.equals(dto.getStatus(), Constants.ONE)) { + // 启用 pileReservedInfoService.activateReserved(dto); } } @@ -588,4 +591,34 @@ public class PileService { pileReservedInfoService.insertSelective(reservedInfo); return reservedInfo.getId(); } + + public PageResponse queryReservedList(PileReservedDTO dto) { + int pageNo = dto.getPageNo() == null ? Constants.one : dto.getPageNo(); + int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize(); + PageHelper.startPage(pageNo, pageSize); + List list = pileReservedInfoService.getReservationsByMemberIdAndPileSn(dto.getMemberId(), dto.getPileSn()); + PageInfo pageInfo = new PageInfo<>(list); + + PageResponse pageResponse = new PageResponse(); + pageResponse.setPageNum(pageInfo.getPageNum()); + pageResponse.setPageSize(pageInfo.getPageSize()); + pageResponse.setPages(pageInfo.getPages()); + pageResponse.setTotal(pageInfo.getTotal()); + + List resultList = Lists.newArrayList(); + for (PileReservedInfo reservedInfo : pageInfo.getList()) { + resultList.add( + PileReservedVO.builder() + .reservedId(reservedInfo.getId() + "") + .pileSn(reservedInfo.getPileSn()) + .startTime(reservedInfo.getStartTime().toString()) + .endTime(reservedInfo.getEndTime().toString()) + .freq(reservedInfo.getFreq()) + .status(reservedInfo.getStatus()) + .build() + ); + } + pageResponse.setList(resultList); + return pageResponse; + } } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java index 4983c00e8..a7ddfb376 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java @@ -168,8 +168,13 @@ public enum ReturnCodeEnum { CODE_UNBIND_PILE_ERROR("00400012", "解绑个人桩异常!"), CODE_CREATE_RESERVED_ERROR("00400013", "创建预约失败"), + CODE_UPDATE_RESERVED_STATUS_ERROR("00400014", "修改预约充电状态失败"), + CODE_QUERY_RESERVED_LIST_ERROR("00400015", "查询预约充电列表失败"), + + CODE_UPDATE_RESERVED_STATUS_REFUSED("00400016", "时间与现有预订重叠"), + /* 个人桩 end */ CODE_THIS_CARNO_HAS_BEEN_BINDING("00500001", "当前车牌号已经绑定,请检查!"), diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java index 6ebded0cd..29fbe6e45 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservedDTO.java @@ -23,6 +23,15 @@ public class PileReservedDTO { */ private String status; + /** + * 桩编号 + */ + private String pileSn; + + private Integer pageNo; + + private Integer pageSize; + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java index 716792b77..d17e2bd09 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java @@ -1,12 +1,15 @@ package com.jsowell.pile.service.impl; import com.jsowell.common.constant.Constants; +import com.jsowell.common.enums.ykc.ReturnCodeEnum; +import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.pile.dto.PileReservedDTO; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.sql.Time; import java.time.LocalTime; import java.util.Date; import java.util.List; @@ -125,17 +128,17 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { * @param reservationId * @return */ - public boolean isTimeSlotAvailable(String memberId, String pileSn, Date startTime, Date endTime, Integer reservationId) { + public boolean isTimeSlotAvailable(String memberId, String pileSn, Time startTime, Time endTime, Integer reservationId) { List reservations = pileReservedInfoMapper.findByMemberIdAndPileSnAndStatus(memberId, pileSn, "1"); - LocalTime newStartTime = LocalTime.parse(DateUtils.formatDateTime(startTime)); - LocalTime newEndTime = LocalTime.parse(DateUtils.formatDateTime(endTime)); + LocalTime newStartTime = startTime.toLocalTime(); + LocalTime newEndTime = endTime.toLocalTime(); for (PileReservedInfo res : reservations) { if (res.getId().equals(reservationId)) { continue; // Skip the current reservation if updating } - LocalTime existingStartTime = LocalTime.parse(DateUtils.formatDateTime(res.getStartTime())); - LocalTime existingEndTime = LocalTime.parse(DateUtils.formatDateTime(res.getEndTime())); + LocalTime existingStartTime = res.getStartTime().toLocalTime(); + LocalTime existingEndTime = res.getEndTime().toLocalTime(); if (newStartTime.isBefore(existingEndTime) && newEndTime.isAfter(existingStartTime)) { return false; // Time slot overlaps @@ -148,7 +151,7 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { if (isTimeSlotAvailable(reservation.getMemberId(), reservation.getPileSn(), reservation.getStartTime(), reservation.getEndTime(), reservation.getId())) { this.updateByPrimaryKeySelective(reservation); } else { - throw new RuntimeException("Time slot overlaps with an existing reservation."); + throw new BusinessException(ReturnCodeEnum.CODE_UPDATE_RESERVED_STATUS_REFUSED); } } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java new file mode 100644 index 000000000..3e7387c15 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/PileReservedVO.java @@ -0,0 +1,38 @@ +package com.jsowell.pile.vo; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +public class PileReservedVO { + private String reservedId; + + /** + * 充电桩编号 + */ + private String pileSn; + + /** + * 预约开始时间 + */ + private String startTime; + + /** + * 预约结束时间 + */ + private String endTime; + + /** + * 周期性预约的频率,对于单次预约,该字段可以为 NULL。可能的值包括 daily, weekly, monthly + */ + private String freq; + + /** + * 状态(0-未生效;1-生效) + */ + private String status; + +} From 0900acbb0fe87e0e0190c534cd1a1af5f7a62dd0 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 19 Jun 2024 09:00:06 +0800 Subject: [PATCH 06/10] =?UTF-8?q?date=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/common/util/DateUtils.java | 55 +++++++++++++++++-- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java index 03f233035..8e3752531 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java @@ -674,10 +674,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { // public static String date2HexStr(Date date) { // return Cp56Time2aUtil.date2HexStr(date); // } - public static void main(String[] args) { - String yesterdayStr = getYesterdayStr(); - System.out.println(yesterdayStr); - } + /** * 获取两个时间的间隔时间 * @@ -1034,4 +1031,54 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return maxDate; } + public static LocalDateTime convertToLocalDateTime(String time, boolean isNextDay) { + LocalTime localTime = LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm:ss")); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime dateTime = now.with(localTime); + + if (isNextDay) { + dateTime = dateTime.plusDays(1); + } + + return dateTime; + } + + /** + * 转换预约时间 + * @param startTime + * @param endTime + * @return + */ + public static LocalDateTime[] convertStartAndEndTime(String startTime, String endTime) { + LocalTime startLocalTime = LocalTime.parse(startTime, DateTimeFormatter.ofPattern("HH:mm:ss")); + LocalTime endLocalTime = LocalTime.parse(endTime, DateTimeFormatter.ofPattern("HH:mm:ss")); + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startDateTime = now.with(startLocalTime); + LocalDateTime endDateTime = now.with(endLocalTime); + + // 如果结束时间比开始时间小或相同,则结束时间为第二天 + if (endLocalTime.isBefore(startLocalTime) || endLocalTime.equals(startLocalTime)) { + endDateTime = endDateTime.plusDays(1); + } + + return new LocalDateTime[]{startDateTime, endDateTime}; + } + + public static void main(String[] args) { + String startTime = "22:00:00"; + String endTime1 = "05:30:00"; + String endTime2 = "22:00:00"; + + LocalDateTime[] dateTime1 = convertStartAndEndTime(startTime, endTime1); + LocalDateTime[] dateTime2 = convertStartAndEndTime(startTime, endTime2); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + System.out.println("Start DateTime: " + dateTime1[0].format(formatter)); + System.out.println("End DateTime (Next Day): " + dateTime1[1].format(formatter)); + + System.out.println("Start DateTime: " + dateTime2[0].format(formatter)); + System.out.println("End DateTime (Same Day): " + dateTime2[1].format(formatter)); + } + } From 3f195311fa5434fdad91a628db53617da2cdfaa1 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 19 Jun 2024 15:42:57 +0800 Subject: [PATCH 07/10] update --- .../test/java/SpringBootTestController.java | 1021 ++++------------- 1 file changed, 251 insertions(+), 770 deletions(-) diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index da83d14fe..85b20610e 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -939,8 +939,8 @@ public class SpringBootTestController { public void queryCreateConfirmReverse() throws BaseAdaPayException { List paymentIdList = getPaymentIdList(); // 查询分账信息 - List unSplitList = Lists.newArrayList(); // - List splitList = Lists.newArrayList(); // + List unSplitList = Lists.newArrayList(); // 未分帐 + List splitList = Lists.newArrayList(); // 已分帐 BigDecimal total = BigDecimal.ZERO; List selfList = Lists.newArrayList(); @@ -1096,774 +1096,255 @@ public class SpringBootTestController { private List getPaymentIdList1() { List list = Lists.newArrayList(); - list.add("002212024010105140910587642852073115648"); - list.add("002212024010105164010587643484248064000"); - list.add("002212024010108281310587691691265712128"); - list.add("002212024010109223110587705352690479104"); - list.add("002212024010109534910587713230205759488"); - list.add("002212024010110300810587722370920607744"); - list.add("002212024010111190010587734668495249408"); - list.add("002212024010111555510587743958016831488"); - list.add("002212024010112261110587751575549341696"); - list.add("002212024010113305410587767861726371840"); - list.add("002212024010113312110587767973720502272"); - list.add("002212024010113322510587768244083724288"); - list.add("002212024010113395010587770109632729088"); - list.add("002212024010114110810587777987342086144"); - list.add("002212024010115105610587793034673369088"); - list.add("002212024010115233910587796236878852096"); - list.add("002212024010115405810587800595778441216"); - list.add("002212024010116222510587811026888945664"); - list.add("002212024010117175210587824980144885760"); - list.add("002212024010117283110587827661843685376"); - list.add("002212024010117483210587832697992654848"); - list.add("002212024010117510710587833348917256192"); - list.add("002212024010117580010587835079405219840"); - list.add("002212024010118485310587847884872216576"); - list.add("002212024010120172810587870177805045760"); - list.add("002212024010121581610587895543306432512"); - list.add("002212024010122005410587896209115287552"); - list.add("002212024010123400710587921176524206080"); - list.add("002212024010201052810587942653671444480"); - list.add(""); - list.add("002212024010208004610588047170942676992"); - list.add("002212024010208442110588058135178096640"); - list.add("002212024010209494210588074583666298880"); - list.add("002212024010210433510588088142478405632"); - list.add("002212024010212162310588111498239307776"); - list.add("002212024010212193110588112286479925248"); - list.add("002212024010212405210588117657447165952"); - list.add("002212024010213013210588122857758142464"); - list.add("002212024010213274910588129475047698432"); - list.add("002212024010213291310588129824899186688"); - list.add("002212024010213301710588130093398110208"); - list.add("002212024010213392810588132405930389504"); - list.add("002212024010214393910588147549470601216"); - list.add("002212024010214411610588147957548412928"); - list.add("002212024010214581710588152242047070208"); - list.add("002212024010215033310588153564514242560"); - list.add(""); - list.add("002212024010215101710588155259517886464"); - list.add("002212024010215431010588163534376767488"); - list.add("002212024010215542710588166375175032832"); - list.add("002212024010216405110588178052995461120"); - list.add("002212024010217183210588187533857288192"); - list.add(""); - list.add("002212024010218183010588202627551838208"); - list.add("002212024010221363810588252487987777536"); - list.add("002212024010223003910588273630469525504"); - list.add("002212024010223283610588280666732474368"); - list.add("002212024010302584510588333553947357184"); - list.add("002212024010305401010588374171870662656"); - list.add("002212024010310292510588446965722820608"); - list.add("002212024010311105610588457413943455744"); - list.add("002212024010311592510588469614441336832"); - list.add("002212024010312195010588474754456334336"); - list.add("002212024010312205310588475015696347136"); - list.add("002212024010312511810588482672879841280"); - list.add("002212024010313013910588485277455347712"); - list.add("002212024010314224310588505676416651264"); - list.add("002212024010315432510588525984907112448"); - list.add("002212024010316272410588537054307926016"); - list.add("002212024010316380410588539738533015552"); - list.add("002212024010317100210588547785655103488"); - list.add("002212024010317200310588550303411974144"); - list.add("002212024010317433110588556211036073984"); - list.add("002212024010318022810588560981031251968"); - list.add("002212024010318404310588570607421853696"); - list.add("002212024010319074310588577400032350208"); - list.add("002212024010319091810588577798165585920"); - list.add("002212024010319264510588582188912865280"); - list.add("002212024010319511310588588347325173760"); - list.add("002212024010321260810588612235363577856"); - list.add("002212024010403220610588701817823948800"); - list.add("002212024010408064310588773441416572928"); - list.add("002212024010410201110588807029942267904"); - list.add("002212024010412072710588834022674513920"); - list.add("002212024010412440910588843261602934784"); - list.add("002212024010412571410588846554176532480"); - list.add("002212024010413225210588853004072062976"); - list.add("002212024010414045510588863586674348032"); - list.add("002212024010414245510588868621276246016"); - list.add("002212024010414343110588871034695184384"); - list.add("002212024010414530910588875723984191488"); - list.add("002212024010415550710588891316875542528"); - list.add("002212024010416204510588897770757910528"); - list.add("002212024010416233110588898465537527808"); - list.add("002212024010416383310588902249646219264"); - list.add("002212024010418024210588923427149254656"); - list.add("002212024010418063110588924386491740160"); - list.add("002212024010418192010588927611642417152"); - list.add("002212024010419322710588946011228147712"); - list.add("002212024010421565310588982358823170048"); - list.add("002212024010422264210588989865398571008"); - list.add("002212024010503422310589069309852102656"); - list.add("002212024010508493210589146603667206144"); - list.add("002212024010512203810589199729497038848"); - list.add("002212024010513012910589210008453681152"); - list.add("002212024010513390410589219469042761728"); - list.add("002212024010514102910589227375142412288"); - list.add("002212024010514260210589231287828983808"); - list.add("002212024010514300910589232325934698496"); - list.add("002212024010514575810589239325632008192"); - list.add("002212024010516015010589255399119294464"); - list.add("002212024010516045810589256187476480000"); - list.add("002212024010516071610589256763717459968"); - list.add("002212024010516123810589258113776287744"); - list.add("002212024010518274310589292110518616064"); - list.add("002212024010518555010589299186311524352"); - list.add("002212024010519083810589302405275619328"); - list.add("002212024010519202310589305361828978688"); - list.add("002212024010519253710589306681909424128"); - list.add("002212024010520085910589317595099197440"); - list.add("002212024010522214210589350993572749312"); - list.add("002212024010522333210589353971115212800"); - list.add("002212024010523011310589360936974266368"); - list.add("002212024010601270010589397625907118080"); - list.add("002212024010604344310589444866759032832"); - list.add("002212024010609525110589524925455106048"); - list.add("002212024010609542310589525315029393408"); - list.add("002212024010611352110589550722119204864"); - list.add("002212024010611500210589554415880151040"); - list.add("002212024010612433110589567876705710080"); - list.add("002212024010613145810589575791161319424"); - list.add("002212024010614575410589601694792065024"); - list.add("002212024010615073610589604134962057216"); - list.add("002212024010615350210589611042544123904"); - list.add("002212024010616253110589623746114658304"); - list.add("002212024010616304210589625051192913920"); - list.add("002212024010616391610589627205286785024"); - list.add("002212024010616492410589629756543496192"); - list.add("002212024010617552110589646350352654336"); - list.add("002212024010618084710589649732601217024"); - list.add("002212024010619101210589665189306679296"); - list.add("002212024010620024510589678413608919040"); - list.add("002212024010701191410589758059547234304"); - list.add("002212024010703080510589785453448433664"); - list.add("002212024010709192910589878916212568064"); - list.add("002212024010709301410589881625295831040"); - list.add("002212024010709374410589883510933463040"); - list.add("002212024010709460610589885615266955264"); - list.add("002212024010711341810589912844171591680"); - list.add("002212024010712174210589923769393987584"); - list.add("002212024010712293410589926753890213888"); - list.add("002212024010713294310589941889740251136"); - list.add("002212024010714162410589953639011618816"); - list.add("002212024010715053310589966009022644224"); - list.add("002212024010715220810589970180526288896"); - list.add("002212024010715394110589974598291644416"); - list.add("002212024010715530310589977960951783424"); - list.add("002212024010715535710589978190702080000"); - list.add("002212024010715553010589978580159811584"); - list.add("002212024010715575210589979173691748352"); - list.add("002212024010716114710589982677215981568"); - list.add("002212024010716155510589983715766292480"); - list.add("002212024010716301310589987316148629504"); - list.add("002212024010716355710589988759131639808"); - list.add("002212024010716512710589992661342420992"); - list.add("002212024010717142210589998424360120320"); - list.add("002212024010717304610590002552651100160"); - list.add("002212024010717340310590003381306433536"); - list.add("002212024010718595910590025005585387520"); - list.add("002212024010719303310590032700077604864"); - list.add("002212024010719431610590035900214116352"); - list.add("002212024010720441710590051255371259904"); - list.add("002212024010721262510590061858348171264"); - list.add("002212024010722163510590074482951434240"); - list.add("002212024010723310810590093240771178496"); - list.add("002212024010801234210590121571174932480"); - list.add("002212024010808200210590226343585894400"); - list.add("002212024010808575910590235895560183808"); - list.add("002212024010809182810590241051781668864"); - list.add("002212024010810093010590253895061430272"); - list.add("002212024010811275210590273616585695232"); - list.add("002212024010812011510590282017054597120"); - list.add("002212024010813083010590298937834274816"); - list.add("002212024010813570510590311164752805888"); - list.add("002212024010814322810590320071982301184"); - list.add("002212024010815504110590339752872214528"); - list.add("002212024010816241510590348203136233472"); - list.add("002212024010816333010590350528305111040"); - list.add("002212024010816345010590350867406356480"); - list.add("002212024010817524710590370480527806464"); - list.add("002212024010817531510590370600776048640"); - list.add("002212024010819442110590398558322667520"); - list.add("002212024010820311610590410365399445504"); - list.add("002212024010821194610590422571309899776"); - list.add("002212024010821224810590423334787317760"); - list.add("002212024010903394410590518191898869760"); - list.add("002212024010906435610590564548453584896"); - list.add("002212024010911460110590640571849752576"); - list.add("002212024010912395510590654134638858240"); - list.add("002212024010913004510590659378532409344"); - list.add("002212024010913223210590664859952726016"); - list.add("002212024010914100910590676840871997440"); - list.add("002212024010914155910590678309669445632"); - list.add("002212024010914465110590686078906912768"); - list.add("002212024010915103310590692044332539904"); - list.add("002212024010915272510590696288296411136"); - list.add("002212024010917000310590719599549988864"); - list.add("002212024010917142910590723233272676352"); - list.add("002212024010917392610590729511610810368"); - list.add("002212024010917492210590732010741129216"); - list.add("002212024010917562610590733788495421440"); - list.add("002212024010918313610590742640133648384"); - list.add("002212024010920025210590765606946250752"); - list.add("002212024010920051810590766218583584768"); - list.add("002212024010920251910590771257604296704"); - list.add("002212024010920453610590776359274663936"); - list.add("002212024010921160810590784043145428992"); - list.add("002212024011001463910590852120421756928"); - list.add("002212024011003360910590879678332178432"); - list.add("002212024011007572510590945429954736128"); - list.add("002212024011008275110590953085801603072"); - list.add("002212024011008425310590956872182906880"); - list.add("002212024011009271910590968054200700928"); - list.add("002212024011009275910590968222245965824"); - list.add("002212024011012221410591012072433655808"); - list.add("002212024011012292910591013895922630656"); - list.add("002212024011012554610591020512596574208"); - list.add("002212024011013273810591028529017253888"); - list.add("002212024011013433210591032533925482496"); - list.add("002212024011014372610591046095351799808"); - list.add("002212024011014375210591046206713450496"); - list.add("002212024011015045010591052990007640064"); - list.add("002212024011015095210591054259711217664"); - list.add("002212024011015152910591055673510518784"); - list.add("002212024011015182610591056415863296000"); - list.add("002212024011015235410591057791130755072"); - list.add("002212024011015360310591060847420145664"); - list.add("002212024011016361010591075978081570816"); - list.add("002212024011016482210591079046616403968"); - list.add("002212024011017070910591083773309124608"); - list.add("002212024011018100810591099625657810944"); - list.add("002212024011018542010591110745493852160"); - list.add("002212024011019384910591121941026734080"); - list.add("002212024011020361510591136396656472064"); - list.add("002212024011022074310591159411961221120"); - list.add("002212024011022443710591168698979676160"); - list.add("002212024011100455410591199221220216832"); - list.add("002212024011103460110591244550372253696"); - list.add("002212024011104583010591262792289722368"); - list.add("002212024011107201010591298441709461504"); - list.add("002212024011111023710591354425660252160"); - list.add("002212024011111183810591358453657755648"); - list.add("002212024011111372010591363161638166528"); - list.add("002212024011113224510591389688611434496"); - list.add("002212024011114355110591408086924869632"); - list.add("002212024011114413110591409513868947456"); - list.add("002212024011115234210591420127512002560"); - list.add("002212024011116222410591434900089065472"); - list.add("002212024011116334110591437740936609792"); - list.add("002212024011117550110591458205978255360"); - list.add("002212024011118262010591466090003857408"); - list.add("002212024011119001310591474614765309952"); - list.add("002212024011119281010591481650923388928"); - list.add("002212024011120465310591501461268545536"); - list.add("002212024011121431810591515656835907584"); - list.add("002212024011202055610591581749288493056"); - list.add("002212024011208453010591682306620747776"); - list.add("002212024011209480510591698054968721408"); - list.add("002212024011210321110591709150938480640"); - list.add("002212024011210565610591715381020622848"); - list.add("002212024011212160010591735280043778048"); - list.add("002212024011212181710591735855118409728"); - list.add("002212024011212221310591736845650968576"); - list.add("002212024011213045610591747595688427520"); - list.add("002212024011213592810591761317389623296"); - list.add("002212024011215080510591778585540665344"); - list.add("002212024011215403510591786764712140800"); - list.add("002212024011215592710591791512444895232"); - list.add("002212024011216090210591793923649077248"); - list.add("002212024011216105310591794388513972224"); - list.add("002212024011216482910591803853729656832"); - list.add("002212024011217030510591807527790039040"); - list.add("002212024011217072010591808595729006592"); - list.add("002212024011217255310591813263572762624"); - list.add("002212024011217341310591815362836918272"); - list.add("002212024011217341510591815369501396992"); - list.add("002212024011218145710591825613780058112"); - list.add("002212024011218213010591827258970398720"); - list.add("002212024011221032210591867994465071104"); - list.add("002212024011222134110591885690146758656"); - list.add("002212024011302212310591948024930058240"); - list.add("002212024011309181510592052934661062656"); - list.add("002212024011309271110592055183661584384"); - list.add("002212024011309323410592056539401900032"); - list.add("002212024011311455410592090093296238592"); - list.add("002212024011312133910592097076208418816"); - list.add("002212024011313344610592117489365807104"); - list.add("002212024011314364310592133079880134656"); - list.add("002212024011314411210592134208486588416"); - list.add("002212024011314513710592136828158033920"); - list.add("002212024011315051210592140249305874432"); - list.add("002212024011315263310592145622158909441"); - list.add("002212024011315373610592148400582127616"); - list.add("002212024011315495610592151507333472256"); - list.add("002212024011316051910592155375091970048"); - list.add("002212024011317134310592172591542075392"); - list.add("002212024011317151010592172954869288960"); - list.add("002212024011317241610592175243017310208"); - list.add("002212024011317342510592177801358139392"); - list.add("002212024011318090810592186535455334400"); - list.add("002212024011318571310592198634839314432"); - list.add("002212024011320030310592215204944232448"); - list.add("002212024011320443710592225665992085504"); - list.add("002212024011320452710592225872905428992"); - list.add("002212024011321355510592238574350491648"); - list.add("002212024011400560510592288949676003328"); - list.add("002212024011401515710592303006843916288"); - list.add("002212024011409265910592417518954704896"); - list.add("002212024011410391110592435691809595392"); - list.add("002212024011410432810592436767558332416"); - list.add("002212024011410483710592438063986364416"); - list.add("002212024011411434910592451955699343360"); - list.add("002212024011412425910592466847619981312"); - list.add("002212024011412465610592467841403445248"); - list.add("002212024011413312610592479039473704960"); - list.add("002212024011413540910592484756123475968"); - list.add("002212024011414144310592489932594429952"); - list.add("002212024011414351810592495112661401600"); - list.add("002212024011415505310592514132070227968"); - list.add("002212024011416024910592517133612716032"); - list.add("002212024011416142010592520032212410368"); - list.add("002212024011416294310592523903176503296"); - list.add("002212024011416564710592530716501315584"); - list.add("002212024011417015910592532025912958976"); - list.add("002212024011417103710592534198113697792"); - list.add("002212024011418001910592546703697108992"); - list.add("002212024011418115110592549609018335232"); - list.add("002212024011418484310592558885858021376"); - list.add("002212024011419173610592566152900890624"); - list.add("002212024011419343610592570432802099200"); - list.add("002212024011419353610592570685307588608"); - list.add("002212024011420024910592577532735627264"); - list.add("002212024011420210810592582141426130944"); - list.add("002212024011420220210592582367522164736"); - list.add("002212024011420540910592590450201825280"); - list.add("002212024011421300610592599498044436480"); - list.add("002212024011423185310592626873663590400"); - list.add("002212024011509494910592785655947456512"); - list.add("002212024011509561810592787287614324736"); - list.add("002212024011512152610592822301650141184"); - list.add("002212024011512190510592823220656570368"); - list.add("002212024011513172410592837894982524928"); - list.add("002212024011513220410592839070252433408"); - list.add("002212024011515094210592866156293079040"); - list.add("002212024011515175510592868222430306304"); - list.add("002212024011517003010592894041168994304"); - list.add("002212024011517271010592900751760510976"); - list.add("002212024011517391710592903799480860672"); - list.add("002212024011520134810592942686232829952"); - list.add("002212024011520163710592943393296777216"); - list.add("002212024011521051810592955646988738560"); - list.add("002212024011521483010592966519358590976"); - list.add("002212024011522013210592969798484353024"); - list.add("002212024011522013410592969805348458496"); - list.add("002212024011523031810592985341578928128"); - list.add("002212024011600225310593005370859012096"); - list.add("002212024011604303910593067719815176192"); - list.add("002212024011608364310593129644301385728"); - list.add("002212024011611585510593180532999618560"); - list.add("002212024011612102310593183419309334528"); - list.add("002212024011612191910593185665405083648"); - list.add("002212024011612415910593191370413498368"); - list.add("002212024011613251410593202252646313984"); - list.add("002212024011614305510593218782040588288"); - list.add("002212024011614362210593220156639256576"); - list.add("002212024011615003510593226250044473344"); - list.add("002212024011615530110593239444016758784"); - list.add("002212024011615541410593239748970246144"); - list.add("002212024011617093510593258713292337152"); - list.add("002212024011618182810593276048531120128"); - list.add("002212024011620082310593303708087832576"); - list.add("002212024011621071210593318512451551232"); - list.add("002212024011621293710593324150976577536"); - list.add("002212024011708054210593484229904388096"); - list.add("002212024011708290410593490109518827520"); - list.add("002212024011708483910593495037628747776"); - list.add("002212024011709344410593506636509966336"); - list.add("002212024011710230210593518791625003008"); - list.add("002212024013113261410598638323451650048"); - list.add("002212024011711544010593541850900688896"); - list.add("002212024012115200010595043076939075584"); - list.add("002212024011714061810593574975631630336"); - list.add("002212024012110330610594970874455695360"); - list.add("002212024011714491910593585802325483520"); - list.add("002212024011715094310593590937179078656"); - list.add("002212024011715360810593597582103793664"); - list.add("002212024011718460210593645373444190208"); - list.add("002212024011719071310593650706055155712"); - list.add("002212024011719375810593658445124157440"); - list.add("002212024011720430310593674822353899520"); - list.add("002212024011722592410593709135519367168"); - list.add("002212024011810170710593879688734474240"); - list.add("002212024011811015810593890977072144384"); - list.add("002212024011811070210593892248565743616"); - list.add("002212024011812160510593909626577195008"); - list.add("002212024011813181110593925253643735040"); - list.add("002212024011815023010593951506652450816"); - list.add("002212024011815460810593962487097229312"); - list.add("002212024011816410810593976329233358848"); - list.add("002212024011817133610593984498777055232"); - list.add("002212024011819021410594011837596622848"); - list.add("002212024011819281010594018364520218624"); - list.add("002212024011819295910594018823575019520"); - list.add("002212024011819565910594025617147985920"); - list.add("002212024011820481010594038499168182272"); - list.add("002212024011821103410594044136689582080"); - list.add("002212024011821532510594054916756373504"); - list.add("002212024011900475210594098819414749184"); - list.add("002212024011909535010594236217586999296"); - list.add("002212024011912043610594269124712067072"); - list.add("002212024011912181810594272573607280640"); - list.add("002212024011912484510594280238151852032"); - list.add("002212024011913211310594288404700151808"); - list.add("002212024011913475210594295114394988544"); - list.add("002212024011913560010594297160600821760"); - list.add("002212024011914333110594306602034466816"); - list.add("002212024011914391710594308053214810112"); - list.add("002212024011914502310594310845945761792"); - list.add("002212024011914551310594312064577429504"); - list.add("002212024011915163310594317429507481600"); - list.add("002212024011915292310594320660709593088"); - list.add("002212024011915515710594326340069642240"); - list.add("002212024011916395410594338407247634432"); - list.add("002212024011917463410594355185384574976"); - list.add("002212024011918041410594359631212597248"); - list.add("002212024011918344410594367306148446208"); - list.add("002212024011918424710594369331184443392"); - list.add("002212024011918430310594369397831622656"); - list.add("002212024011920062610594390382367674368"); - list.add("002212024011920462110594400429641736192"); - list.add("002212024011920470210594400600587063296"); - list.add("002212024011921114010594406799775305728"); - list.add("002212024011921594110594418882618478592"); - list.add("002212024011922153610594422889777057792"); - list.add("002212024012008270810594576786891046912"); - list.add("002212024012011254510594621737931235328"); - list.add("002212024012011275510594622281237823488"); - list.add("002212024012013130710594648754859397120"); - list.add("002212024012013173010594649859567767552"); - list.add("002212024012014140110594664081477533696"); - list.add("002212024012014492210594672978996928512"); - list.add("002212024012016074210594692693024796672"); - list.add("002212024012016312610594698662851026944"); - list.add("002212024012016421110594701367658315776"); - list.add("002212024012017260610594712420651794432"); - list.add("002212024012017414010594716338950393856"); - list.add("002212024012018331210594729307904057344"); - list.add("002212024012019324310594744286936158208"); - list.add("002212024012019561010594750186792853504"); - list.add("002212024012020132710594754534655819776"); - list.add("002212024012021300910594773839804166144"); - list.add("002212024012023041010594797499689291776"); - list.add("002212024012108374910594941863177650176"); - list.add("002212024012109052110594948790294007808"); - list.add("002212024012109202510594952583963312128"); - list.add("002212024012110105210594965280795774976"); - list.add("002212024012110335210594971066146082816"); - list.add("002212024012110552710594976500804132864"); - list.add("002212024012110593910594977554249900032"); - list.add("002212024012111242810594983803232317440"); - list.add("002212024012111243810594983843470336000"); - list.add("002212024012111254210594984110821560320"); - list.add("002212024012112065310594994476939038720"); - list.add("002212024012112272110594999624358289408"); - list.add("002212024012113344110595016571717357568"); - list.add("002212024012114193010595027851712098304"); - list.add("002212024012114364710595032199309676544"); - list.add("002212024012114450310595034278006509568"); - list.add("002212024012114514910595035983689457664"); - list.add("002212024012115085910595040302446534656"); - list.add("002212024012115202110595043161746006016"); - list.add("002212024012115272310595044933001707520"); - list.add("002212024012115512010595050958892003328"); - list.add("002212024012116213910595058590057062400"); - list.add("002212024012117022210595068836906434560"); - list.add("002212024012117110610595071036043939840"); - list.add("002212024012117233610595074181759324160"); - list.add("002212024012117371010595077595782381568"); - list.add("002212024012117490210595080582085414912"); - list.add("002212024012118293210595090774054576128"); - list.add("002212024012118442910595094536980910080"); - list.add("002212024012119025110595099156243369984"); - list.add("002212024012119051710595099771472146432"); - list.add("002212024012120005810595113782077227008"); - list.add("002212024012120403210595123740844429312"); - list.add("002212024012121224010595134344283201536"); - list.add("002212024012122203110595148902776115200"); - list.add("002212024012123421210595169459005980672"); - list.add("002212024012208093710595297152465522688"); - list.add("002212024012208493210595307199736434688"); - list.add("002212024012208502610595307425409470464"); - list.add("002212024012212010710595355410677231616"); - list.add("002212024012212033410595356030977044480"); - list.add("002212024012212144710595358851435917312"); - list.add("002212024012212252710595361535787134976"); - list.add("002212024012212533810595368629079314432"); - list.add("002212024012213551110595384118188068864"); - list.add("002212024012214263710595392027851915264"); - list.add("002212024012215102210595403040186585088"); - list.add("002212024012215203910595405628225265664"); - list.add("002212024012215254410595406904377114624"); - list.add("002212024012217451810595442029139755008"); - list.add("002212024012218214410595451199487332352"); - list.add("002212024012218294110595453199761367040"); - list.add("002212024012220381410595485549092270080"); - list.add("002212024012221131810595494372460687360"); - list.add("002212024012300055310595537806275993600"); - list.add("002212024012310393910595697296881348608"); - list.add("002212024012311043810595703587223724032"); - list.add("002212024012311484710595714695089221632"); - list.add("002212024012312005110595717732028706816"); - list.add("002212024012312210410595722820309082112"); - list.add("002212024012312464210595729270310084608"); - list.add("002212024012312491710595729921895497728"); - list.add("002212024012312545610595731343019831296"); - list.add("002212024012312595710595732606544674816"); - list.add("002212024012313035310595733595709132800"); - list.add("002212024012314475810595759790186426368"); - list.add("002212024012315034410595763758213799936"); - list.add("002212024012315170110595767102269644800"); - list.add("002212024012315563310595777049392930816"); - list.add("002212024012316284910595785169015840768"); - list.add("002212024012317485010595805308169285632"); - list.add("002212024012318392710595818044966719488"); - list.add("002212024012319514410595836233372463104"); - list.add("002212024012320393710595848286006996992"); - list.add("002212024012321414710595863929003343872"); - list.add("002212024012322240910595874591164198912"); - list.add("002212024012323544510595897392660054016"); - list.add("002212024012408194610596024483331903488"); - list.add("002212024012408233810596025456998969344"); - list.add("002212024012408481210596031638941814784"); - list.add("002212024012410242610596055857016688640"); - list.add("002212024012412165710596084171367350272"); - list.add("002212024012412170810596084219007930368"); - list.add("002212024012412333610596088361923805184"); - list.add("002212024012413215710596100531070607360"); - list.add("002212024012413265910596101795888144384"); - list.add("002212024012413314810596103010269462528"); - list.add("002212024012414330910596118446654447616"); - list.add("002212024012414384010596119835849981952"); - list.add("002212024012416590610596155176922284032"); - list.add("002212024012417193210596160319806885888"); - list.add("002212024012417531910596168822533279744"); - list.add("002212024012418023210596171141509664768"); - list.add("002212024012418132110596173865229942784"); - list.add("002212024012418411010596180862836789248"); - list.add("002212024012418461810596182156704083968"); - list.add("002212024012418502610596183197950009344"); - list.add("002212024012418592710596185465428811776"); - list.add("002212024012419261010596192187700858880"); - list.add("002212024012419471510596197496491728896"); - list.add("002212024012420001310596200758301777920"); - list.add("002212024012420162710596204841320280064"); - list.add("002212024012420262210596207338624811008"); - list.add("002212024012421205510596221065204948992"); - list.add("002212024012421443610596227025446432768"); - list.add("002212024012501255010596282703742201856"); - list.add("002212024012502044110596292479570268160"); - list.add("002212024012506345910596360502397431808"); - list.add("002212024012509212610596402390780280832"); - list.add("002212024012510403710596422316644044800"); - list.add("002212024012512340810596450884852768768"); - list.add("002212024012512572910596456759921012736"); - list.add("002212024012513005510596457624776933376"); - list.add("002212024012513223410596463073396948992"); - list.add("002212024012514344110596481223897767936"); - list.add("002212024012514352010596481387453075456"); - list.add("002212024012514404210596482737805021184"); - list.add("002212024012515170110596491877333770240"); - list.add("002212024012515265610596494372105969664"); - list.add("002212024012515402110596497746068144128"); - list.add("002212024012516160610596506745774501888"); - list.add("002212024012517111710596520631047417856"); - list.add("002212024012517223710596523484640645120"); - list.add("002212024012518165810596537163835920384"); - list.add("002212024012519170710596552299563651072"); - list.add("002212024012519322410596556145680023552"); - list.add("002212024012519502010596560659456319488"); - list.add("002212024012520371210596572454165774336"); - list.add("002212024012521304810596585940093620224"); - list.add("002212024012521555210596592248970739712"); - list.add("002212024012522240610596599354531610624"); - list.add("002212024012523301810596616012768935936"); - list.add("002212024012600585410596638312314634240"); - list.add("002212024012606262410596720731743522816"); - list.add("002212024012607420110596739758508855296"); - list.add("002212024012609332910596767811508756480"); - list.add("002212024012609515110596772432593190912"); - list.add("002212024012610325710596782774197542912"); - list.add("002212024012612212310596810063106924544"); - list.add("002212024012612482810596816878410522624"); - list.add("002212024012613441710596830928433803264"); - list.add("002212024012614035310596835860938166272"); - list.add("002212024012614211210596840215802642432"); - list.add("002212024012614412910596845323146883072"); - list.add("002212024012614413910596845364449763328"); - list.add("002212024012615022710596850596368314368"); - list.add("002212024012615205110596855228946386944"); - list.add("002212024012615395210596860016099979264"); - list.add("002212024012616540710596878700264443904"); - list.add("002212024012616584010596879846060290048"); - list.add("002212024012617355710596889226555809792"); - list.add("002212024012617451910596891583902584832"); - list.add("002212024012618301010596902872956948480"); - list.add("002212024012618524710596908561800712192"); - list.add("002212024012618561210596909423199428608"); - list.add("002212024012619262210596917016171204608"); - list.add("002212024012619520910596923504868347904"); - list.add("002212024012621195810596945602563362816"); - list.add("002212024012621292710596947991619010560"); - list.add("002212024012621403510596950793050218496"); - list.add("002212024012622133810596959108552781824"); - list.add("002212024012622482610596967866885328896"); - list.add("002212024012708330510597114998998007808"); - list.add("002212024012708393810597116645996331008"); - list.add("002212024012709322910597129947783225344"); - list.add("002212024012710562310597151059592695808"); - list.add("002212024012710572910597151337391448064"); - list.add("002212024012712082510597169188075065344"); - list.add("002212024012712342010597175709751988224"); - list.add("002212024012712385110597176846051856384"); - list.add("002212024012713350010597190976532082688"); - list.add("002212024012713452610597193603714084864"); - list.add("002212024012714125610597200523545116672"); - list.add("002212024012714343910597205991234596864"); - list.add("002212024012714375110597206796276723712"); - list.add("002212024012715005410597212597221289984"); - list.add("002212024012715154110597216315425648640"); - list.add("002212024012715403010597222559943315456"); - list.add("002212024012716374310597236960556646400"); - list.add("002212024012717070010597244331493289984"); - list.add("002212024012717361210597251676298407936"); - list.add("002212024012717435310597253613708840960"); - list.add("002212024012718131510597261003888427008"); - list.add("002212024012718300610597265242211807232"); - list.add("002212024012718402610597267844295905280"); - list.add("002212024012719111310597275588897763328"); - list.add("002212024012720370610597297203772977152"); - list.add("002212024012720540410597301471511465984"); - list.add("002212024012720573510597302358994755584"); - list.add("002212024012721202510597308102834323456"); - list.add("002212024012721562110597317148712521728"); - list.add("002212024012801552610597377316330557440"); - list.add("002212024012808345110597477830614745088"); - list.add("002212024012809564410597498438242136064"); - list.add("002212024012810041210597500316680019968"); - list.add("002212024012810194010597504209398910976"); - list.add("002212024012810213410597504688790237184"); - list.add("002212024012810261710597505875258986496"); - list.add("002212024012810595010597514315141541888"); - list.add("002212024012812403610597539675238166528"); - list.add("002212024012812480510597541559172558848"); - list.add("002212024012813022810597545180037242880"); - list.add("002212024012813083610597546720593117184"); - list.add("002212024012813220610597550119937499136"); - list.add("002212024012813235810597550588448034816"); - list.add("002212024012814012010597559994200981504"); - list.add("002212024012816095910597592367947804672"); - list.add("002212024012816253410597596290841899008"); - list.add("002212024012816463010597601558219653120"); - list.add("002212024012817093910597607386240479232"); - list.add("002212024012817204910597610194229850112"); - list.add("002212024012818231110597625888744833024"); - list.add("002212024012819235410597641170214154240"); - list.add("002212024012819392810597645088558043136"); - list.add("002212024012820054910597651719708934144"); - list.add("002212024012820253610597656695134347264"); - list.add("002212024012820595910597665350501208064"); - list.add("002212024012821040710597666388156731392"); - list.add("002212024012822285610597687734697807872"); - list.add("002212024012900310410597718469377462272"); - list.add("002212024012901282310597732895592980480"); - list.add("002212024012911350910597885593121460224"); - list.add("002212024012911494710597889275216257024"); - list.add("002212024012912004510597892034807558144"); - list.add("002212024012912473510597903821860245504"); - list.add("002212024012912593610597906846337822720"); - list.add("002212024012913303810597914655524216832"); - list.add("002212024012913304910597914699695599616"); - list.add("002212024012914302010597929679041982464"); - list.add("002212024012915162310597941269026439168"); - list.add("002212024012915292510597944548227149824"); - list.add("002212024012916034810597953200531550208"); - list.add("002212024012916473710597964225750347776"); - list.add("002212024012917004210597967519790403584"); - list.add("002212024012917553910597981350647812096"); - list.add("002212024012917585010597982148297220096"); - list.add("002212024012918242410597988582271475712"); - list.add("002212024012919084210597999733049118720"); - list.add("002212024012919145010598001275155382272"); - list.add("002212024012921565910598042082611478528"); - list.add("002212024012922322810598051012159680512"); - list.add("002212024012922353210598051783814332416"); - list.add("002212024013001031810598088968948768768"); - list.add("002212024013008240010598199877948137472"); - list.add("002212024013008341010598202435459559424"); - list.add("002212024013009341310598217548523253760"); - list.add("002212024013011001910598239212842905600"); - list.add("002212024013011175110598243627769270272"); - list.add("002212024013011334610598247631366656000"); - list.add("002212024013011412410598249554917064704"); - list.add("002212024013011440610598250232417345536"); - list.add("002212024013012394910598264254885781504"); - list.add("002212024013012405110598264513237966848"); - list.add("002212024013014021510598284999956312064"); - list.add("002212024013014431110598295300709654528"); - list.add("002212024013015054410598300974251864064"); - list.add("002212024013015201010598304608440553472"); - list.add("002212024013015311410598307391990607872"); - list.add("002212024013016584810598329430364381184"); - list.add("002212024013017233110598335649209389056"); - list.add("002212024013017560510598343845003259904"); - list.add("002212024013018341010598353429926760448"); - list.add("002212024013018490610598357186822017024"); - list.add("002212024013018514510598357852907778048"); - list.add("002212024013019224110598365637195440128"); - list.add("002212024013021421410598400758027304960"); - list.add("002212024013021574310598404654998630400"); - list.add("002212024013021584610598404919967199232"); - list.add("002212024013022033810598406145270181888"); - list.add("002212024013022575010598419785089654784"); - list.add("002212024013023093110598422723187847168"); - list.add("002212024013108025410598556953917468672"); - list.add("002212024013109374010598580804117688320"); - list.add("002212024013109490410598583672145653760"); - list.add("002212024013110185610598591187321221120"); - list.add("002212024013110300910598594009295597568"); - list.add("002212024013111524310598614788732080128"); - list.add("002212024013111571410598615924988653568"); - list.add("002212024013112164810598620849395048448"); - list.add("002212024013112233410598622552137789440"); - list.add("002212024013113260210598638274593165312"); - list.add("002212024013113270610598638540718211072"); - list.add("002212024013114024910598647531979325440"); - list.add("002212024013115110510598664711185457152"); - list.add("002212024013115125810598665185726705664"); - list.add("002212024013115143310598665583746969600"); - list.add("002212024013115211510598667269731868672"); - list.add("002212024013116031010598677817391935488"); - list.add("002212024013116243410598683202429304832"); - list.add("002212024013117103210598694770658111488"); - list.add("002212024013117364710598701377501618176"); - list.add("002212024013117392610598702041871147008"); - list.add("002212024013118273610598714166080811008"); - list.add("002212024013118550110598721065975132160"); - list.add("002212024013118591410598722127382540288"); - list.add("002212024013119273510598729261521436672"); - list.add("002212024013119275610598729347382587392"); - list.add("002212024013119282510598729472011497472"); - list.add("002212024013119384310598732060087169024"); - list.add("002212024013119410610598732662236692480"); - list.add("002212024013119482610598734508616265728"); - list.add("002212024013120144410598741127241281536"); - list.add("002212024013120353110598746354702094336"); - list.add("002212024013121122110598755626863931392"); - list.add("002212024013121310510598760338438844416"); - list.add("002212024013122244310598773835959619584"); + list.add("002212024013008060410598195363803480064"); + list.add("002212024013008130010598197109908156416"); + list.add("002212024013019392410598369846177918976"); + list.add("002212024013108410410598566558256963584"); + list.add("002212024013108505610598569040739135488"); + list.add("002212024013110011810598586751293992960"); + list.add("002212024013112032710598617491298971648"); + list.add("002212024020108052910598919992595804160"); + list.add("002212024020108304410598926348483653632"); + list.add("002212024020108363910598927835231076352"); + list.add("002212024020111390410598973743414730752"); + list.add("002212024020114322110599017350088626176"); + list.add("002212024020114474410599021222320615424"); + list.add("002212024020115092510599026678041018368"); + list.add("002212024020119590210599099564427669504"); + list.add("002212024020207054910599267366398578688"); + list.add("002212024020208262510599287646486110208"); + list.add("002212024020214265010599378351836442624"); + list.add("002212024020215343210599395386694881280"); + list.add("002212024020307373210599637734226214912"); + list.add("002212024020316072110599766035400572928"); + list.add("002212024020322230010599860568206397440"); + list.add("002212024020408093410600008184035123200"); + list.add("002212024020409244810600027116138618880"); + list.add("002212024020508184010600372861536260096"); + list.add("002212024020514283510600465955553648640"); + list.add("002212024020517003910600504221174415360"); + list.add("002212024020521230310600570256004050944"); + list.add("002212024020608155210600734545404710912"); + list.add("002212024020608382510600740220346396672"); + list.add("002212024020608451110600741920730718208"); + list.add("002212024020609124110600748841333379072"); + list.add("002212024020614411210600831517739819008"); + list.add("002212024020708312310601100837498085376"); + list.add("002212024020714333610601191990266511360"); + list.add("002212024020808475610601467388114333696"); + list.add("002212024020810053710601486939065114624"); + list.add("002212024020811101310601503195798601728"); + list.add("002212024020813113610601533745412943872"); + list.add("002212024020908390010601827531082936320"); + list.add("002212024020910022910601848539790401536"); + list.add("002212024020910361810601857048976125952"); + list.add("002212024020914165310601912561811931136"); + list.add("002212024020914461510601919951398666240"); + list.add("002212024020918534910601982251957444608"); + list.add("002212024021120334410602732175872696320"); + list.add("002212024021122380810602763479644069888"); + list.add("002212024021214122510602998599363010560"); + list.add("002212024021315415910603383530189070336"); + list.add("002212024021400083110603511002905235456"); + list.add("002212024021416051710603751779179274240"); + list.add("002212024021423023410603856791162929152"); + list.add("002212024021511412210604047750442496000"); + list.add("002212024021514072810604084516702027776"); + list.add("002212024021515430710604108588191272960"); + list.add("002212024021523001310604218587504525312"); + list.add("002212024021608381110604364039677882368"); + list.add("002212024021623020310604581439817023488"); + list.add("002212024021722362610604937380427948032"); + list.add("002212024021808001010605079249543716864"); + list.add("002212024021808104810605081925655490560"); + list.add("002212024021808185910605083981192704000"); + list.add("002212024021810383210605119103427313664"); + list.add("002212024021908582810605456306802053120"); + list.add("002212024022109131310606184796175687680"); + list.add("002212024022119525210606345768395419648"); + list.add("002212024022218212410606685138835025920"); + list.add("002212024022307485310606888346055372800"); + list.add("002212024022308550410606905004268617728"); + list.add("002212024022408553910607267536671035392"); + list.add("002212024022517022910607752442171338752"); + list.add("002212024022521075910607814222629285888"); + list.add("002212024022609245810607999689369276416"); + list.add("002212024022708185910608345472558899200"); + list.add("002212024022808171110608707409136111616"); + list.add("002212024022808415410608713630598144000"); + list.add("002212024022908220310609071021906227200"); + list.add("002212024022908291710609072841400475648"); + list.add("002212024022908495410609078031603834880"); + list.add("002212024022908535210609079026622164992"); + list.add("002212024022920294410609254148826947584"); + list.add("002212024030108013710609428267015561216"); + list.add("002212024030108192710609432753644294144"); + list.add("002212024030109255810609449496542498816"); + list.add("002212024030110432610609468990032666624"); + list.add("002212024030114414110609528945117454336"); + list.add("002212024030200361910609678590595244032"); + list.add("002212024030300003710610031994312007680"); + list.add("002212024030408224710610520757550407680"); + list.add("002212024030408314410610523009898565632"); + list.add("002212024030422585110610741225040171008"); + list.add("002212024030508104110610880098894979072"); + list.add("002212024030508365710610886712358817792"); + list.add("002212024030508490010610889744259559424"); + list.add("002212024030521512910611086662637559808"); + list.add("002212024030608175710611244317067141120"); + list.add("002212024030708090510611604472871477248"); + list.add("002212024030708282910611609355581992960"); + list.add("002212024030708502610611614878784106496"); + list.add("002212024030709174810611621767196659712"); + list.add("002212024030719534010611781785478717440"); + list.add("002212024030807594010611964492124340224"); + list.add("002212024030822443910612187206556524544"); + list.add("002212024030906325510612305048975122432"); + list.add("002212024030907350010612320673259941888"); + list.add("002212024030915525410612445973697167360"); + list.add("002212024030916303810612455470245429248"); + list.add("002212024030921533110612536725873057792"); + list.add("002212024031017202310612830374738165760"); + list.add("002212024031020531910612883964449075200"); + list.add("002212024031023432510612926769309773824"); + list.add("002212024031108301510613059352027627520"); + list.add("002212024031109563110613081060800557056"); + list.add("002212024031114040910613143380055498752"); + list.add("002212024031208192510613419012528644096"); + list.add("002212024031208341810613422759090114560"); + list.add("002212024031208412810613424562076852224"); + list.add("002212024031308225010613782262091567104"); + list.add("002212024031308360610613785598963986432"); + list.add("002212024031308371210613785876779442176"); + list.add("002212024031308422110613787173562695680"); + list.add("002212024031408241810614145019098722304"); + list.add("002212024031508224410614507010081640448"); + list.add("002212024031508590910614516174918074368"); + list.add("002212024031509281210614523487750299648"); + list.add("002212024031510283910614538700956971008"); + list.add("002212024031515211110614612316401750016"); + list.add("002212024031520151910614686339450355712"); + list.add("002212024031609341910614887414428016640"); + list.add("002212024031718294510615384546949754880"); + list.add("002212024031808035610615589445707841536"); + list.add("002212024031808260710615595025820246016"); + list.add("002212024031815323210615702336330211328"); + list.add("002212024031815375110615703677041405952"); + list.add("002212024031911254310616002613799657472"); + list.add("002212024032008101710616315817846980608"); + list.add("002212024032011532310616371961915990016"); + list.add("002212024032108120110616678642146373632"); + list.add("002212024032108354410616684610730549248"); + list.add("002212024032108424510616686374340608000"); + list.add("002212024032114381810616775853463097344"); + list.add("002212024032208245610617044281046831104"); + list.add("002212024032208312010617045888861618176"); + list.add("002212024032208434810617049027454844928"); + list.add("002212024032323465610617638697148858368"); + list.add("002212024032402541210617685824652591104"); + list.add("002212024032508523610618138407486066688"); + list.add("002212024032520172810618310759024463872"); + list.add("002212024032608315810618495600729882624"); + list.add("002212024032608391310618497425932648448"); + list.add("002212024032608510410618500408262008832"); + list.add("002212024032708422710618860627711471616"); + list.add("002212024032714244610618946776453619712"); + list.add("002212024032808424210619223076450693120"); + list.add("002212024032814205310619308187015802880"); + list.add("002212024032907525410619572932763545600"); + list.add("002212024032908303010619582395874840576"); + list.add("002212024032908500610619587327303061504"); + list.add("002212024032911524710619633303216230400"); + list.add("002212024032923193810619806154641907712"); + list.add("002212024033016321410620066014643077120"); + list.add("002212024033016343310620066598362058752"); + list.add("002212024033020173810620122738665811968"); + list.add("002212024040108490910620674253468303360"); + list.add("002212024040109022110620677573939793920"); + list.add("002212024040208244810621030511414784000"); + list.add("002212024040308254910621393156197027840"); + list.add("002212024040308393710621396627855544320"); + list.add("002212024040308404410621396912069971968"); + list.add("002212024040309543710621415504291794944"); + list.add("002212024040311170810621436271049670656"); + list.add("002212024040323530210621626497573154816"); + list.add("002212024040402372510621667866323075072"); + list.add("002212024040408542210621762730175643648"); + list.add("002212024040415481010621866867580702720"); + list.add("002212024040512391510622181710707392512"); + list.add("002212024040516392110622242135366791168"); + list.add("002212024040614223510622570105679126528"); + list.add("002212024040623165710622704580477042688"); + list.add("002212024040809150910623217512072990720"); + list.add("002212024040811153710623247826547335168"); + list.add("002212024040908295510623568517415526400"); + list.add("002212024040908523110623574205092974592"); + list.add("002212024040911290310623613595104657408"); + list.add("002212024041009232810623944378227253248"); + list.add("002212024041107493210624283130019381248"); + list.add("002212024041108193110624290674609082368"); + list.add("002212024041208114810624651118629326848"); + list.add("002212024041208300810624655733583732736"); + list.add("002212024041209162410624667378518835200"); + list.add("002212024041210260110624684896674537472"); + list.add("002212024041214283110624745923243118592"); + list.add("002212024041420442210625565287085670400"); + list.add("002212024041507423510625730932126121984"); + list.add("002212024041508341410625743931251539968"); + list.add("002212024041521063510625933262427582464"); + list.add("002212024041609581110626127442457104384"); + list.add("002212024041707543510626458728699969536"); + list.add("002212024041708271210626466935588491264"); + list.add("002212024041708532810626473545384984576"); + list.add("002212024041808322310626830625628844032"); + list.add("002212024041808581710626837143647076352"); + list.add("002212024041810270010626859470992621568"); + list.add("002212024041810323510626860875480481792"); + list.add("002212024041816371210626952633348419584"); + list.add("002212024041820424210627014417214259200"); + list.add("002212024041908145410627188615932936192"); + list.add("002212024041908295410627192392017481728"); + list.add("002212024042012450810627619008926924800"); + list.add("002212024042012542310627621336262328320"); + list.add("002212024042023094310627776190762885120"); + list.add("002212024042109541010627938373800124416"); + list.add("002212024042207451110628268298934329344"); + list.add("002212024042220074210628455161424855040"); + list.add("002212024042307511610628632220004851712"); + list.add("002212024042308012110628634756814118912"); + list.add("002212024042308204710628639647745916928"); + list.add("002212024042309213010628654927362727936"); + list.add("002212024042407541510628995359758417920"); + list.add("002212024042419503110629175610779844608"); + list.add("002212024042507593310629359080569290752"); + list.add("002212024042508162210629363310436741120"); + list.add("002212024042508444810629370468299612160"); + list.add("002212024042510044010629390566508900352"); + list.add("002212024042608042610629722695250190336"); + list.add("002212024042608254110629728043720839168"); + list.add("002212024042608495310629734132524331008"); + list.add("002212024042613574610629811616614793216"); + list.add("002212024042808054110630447788521406464"); + list.add("002212024042809245110630467710966120448"); + list.add("002212024042823254410630679326345379840"); + list.add("002212024042907322310630801794375454720"); + list.add("002212024042913113810630887168829394944"); + list.add("002212024043008265210631177893526605824"); + list.add("002212024043008304710631178879007895552"); + list.add("002212024043008514610631184158888271872"); + list.add("002212024043008590110631185985480146944"); + list.add("002212024043009003010631186356933967872"); + list.add("002212024043010533110631214799365967872"); + list.add("002212024050107092310631520782677000192"); + list.add("002212024050107525610631531743152410624"); + list.add("002212024050416563310632755709779451904"); + list.add("002212024050515232310633094653215678464"); + list.add("002212024050520055610633165758466428928"); + list.add("002212024050520481310633176399665774592"); + list.add("002212024050607533110633343829061480448"); + list.add("002212024050607564510633344642827370496"); + list.add("002212024050608283810633352666908696576"); + list.add("002212024050608393610633355426893475840"); return list; } From e0976354cdb54f8a48be747d39f62259250d6a2b Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 19 Jun 2024 16:03:34 +0800 Subject: [PATCH 08/10] =?UTF-8?q?update=20=E6=89=93=E5=8D=B0=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/common/util/file/FtpUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java index 95a4b6603..4f6e37c65 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java @@ -10,6 +10,7 @@ import com.jsowell.common.util.ServletUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.id.IdUtils; import com.jsowell.common.util.ip.IpUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.apache.commons.net.ftp.FTPClient; @@ -23,7 +24,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; - +@Slf4j @Component public class FtpUtils { @@ -60,6 +61,7 @@ public class FtpUtils { String ip = IpUtils.getIpFormDomainName(ftpConfig.getIp()); ftp.connect(ip, ftpConfig.getPort()); ftp.login(ftpConfig.getUsername(), ftpConfig.getPassword()); + log.info("ftp连接信息, ip:{}, port:{}, 连接信息:{}", ip, ftpConfig.getPort(), ftp.getStatus()); if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { // 不合法时断开连接 ftp.disconnect(); From d6325558690c52c7771b9f6d415690a0c00563f3 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 19 Jun 2024 17:04:01 +0800 Subject: [PATCH 09/10] update FTP --- jsowell-admin/src/test/java/SpringBootTestController.java | 1 + .../main/java/com/jsowell/common/util/file/FtpUtils.java | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 85b20610e..b305dd387 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -903,6 +903,7 @@ public class SpringBootTestController { // 需要重新分账的订单信息(针对未分账的订单) public JSONArray getPaymentList() { String jsonArrayString = "[" + + "{\"orderCode\":\"C44778282947\", \"settleAmount\":\"8.38\", \"paymentId\":\"002212023101608315910559788773415297024\"}" + "{\"orderCode\":\"C44778282947\", \"settleAmount\":\"8.38\", \"paymentId\":\"002212023101608315910559788773415297024\"}" + "]"; return JSONArray.parseArray(jsonArrayString); diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java index 4f6e37c65..4e5eb7775 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/file/FtpUtils.java @@ -60,7 +60,13 @@ public class FtpUtils { /** 3. 连接ftp服务器*/ String ip = IpUtils.getIpFormDomainName(ftpConfig.getIp()); ftp.connect(ip, ftpConfig.getPort()); - ftp.login(ftpConfig.getUsername(), ftpConfig.getPassword()); + boolean login = ftp.login(ftpConfig.getUsername(), ftpConfig.getPassword()); + if (login) { + log.info("FTP登录成功"); + } else { + log.info("FTP登录失败"); + } + ftp.enterLocalPassiveMode(); // 设置为被动模式 log.info("ftp连接信息, ip:{}, port:{}, 连接信息:{}", ip, ftpConfig.getPort(), ftp.getStatus()); if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { // 不合法时断开连接 From af96ae4a1c054c94be764b267432cfadbaa8fbe4 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 20 Jun 2024 13:54:38 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=85=85=E7=94=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/service/PileService.java | 1 + .../common/constant/CacheConstants.java | 11 +- .../handler/UploadRealTimeMonitorHandler.java | 530 +++++++++--------- .../jsowell/pile/domain/PileReservedInfo.java | 5 + .../jsowell/pile/dto/CreateReservedDTO.java | 5 + .../pile/service/PileBasicInfoService.java | 10 + .../pile/service/PileReservedInfoService.java | 15 + .../impl/PileBasicInfoServiceImpl.java | 39 +- .../impl/PileReservedInfoServiceImpl.java | 12 +- .../mapper/pile/PileReservedInfoMapper.xml | 73 ++- 10 files changed, 413 insertions(+), 288 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index 1b837d9d7..60bb9c0c3 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -575,6 +575,7 @@ public class PileService { PileReservedInfo reservedInfo = new PileReservedInfo(); reservedInfo.setMemberId(dto.getMemberId()); reservedInfo.setPileSn(dto.getPileSn()); + reservedInfo.setPileConnectorCode(dto.getPileConnectorCode()); reservedInfo.setStatus(Constants.ZERO); // 默认未生效 // reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime())); reservedInfo.setStartTime(Time.valueOf(dto.getStartTime())); diff --git a/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java b/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java index 841164106..fbd438a11 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java +++ b/jsowell-common/src/main/java/com/jsowell/common/constant/CacheConstants.java @@ -27,9 +27,15 @@ public class CacheConstants { // 缓存时间 12小时 public static final int cache_expire_time_12h = cache_expire_time_1h * 12; - // 缓存时间 24小时 + // 缓存时间 1天 24小时 public static final int cache_expire_time_1d = cache_expire_time_1h * 24; + // 缓存时间 3天 + public static final int cache_expire_time_3d = cache_expire_time_1d * 3; + + // 缓存时间 7天 + public static final int cache_expire_time_7d = cache_expire_time_1d * 7; + // 缓存时间 10天 public static final int cache_expire_time_10d = cache_expire_time_1d * 10; @@ -61,6 +67,9 @@ public class CacheConstants { // 平台测试员 public static final String PLATFORM_TESTER = "platform_tester:"; + // 枪口插枪状态 缓存前缀 + public static final String CHARGER_PLUGGED_IN_STATUS = "charger_plugged_in_status:"; + // 查询桩型号信息 public static final String GET_PILE_MODEL_INFO_BY_MODEL_ID = "get_pile_model_info_by_model_id:"; diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java index 6813b372f..3d3747a81 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java @@ -9,6 +9,7 @@ import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.enums.ykc.PileConnectorStatusEnum; import com.jsowell.common.enums.ykc.YKCPileFaultReasonEnum; import com.jsowell.common.util.BytesUtil; +import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.YKCUtils; import com.jsowell.netty.factory.YKCOperateFactory; @@ -37,303 +38,322 @@ import java.util.concurrent.TimeUnit; @Slf4j @Component public class UploadRealTimeMonitorHandler extends AbstractHandler { - private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.UPLOAD_REAL_TIME_MONITOR_DATA_CODE.getBytes()); - private final String oldVersionType = YKCUtils.frameType2Str(YKCFrameTypeCode.UPLOAD_REAL_TIME_MONITOR_DATA_OLD_VERSION_CODE.getBytes()); + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.UPLOAD_REAL_TIME_MONITOR_DATA_CODE.getBytes()); + private final String oldVersionType = YKCUtils.frameType2Str(YKCFrameTypeCode.UPLOAD_REAL_TIME_MONITOR_DATA_OLD_VERSION_CODE.getBytes()); - @Override - public void afterPropertiesSet() throws Exception { - YKCOperateFactory.register(type, this); - YKCOperateFactory.register(oldVersionType, this); - } + @Override + public void afterPropertiesSet() throws Exception { + YKCOperateFactory.register(type, this); + YKCOperateFactory.register(oldVersionType, this); + } - @Autowired - private PileBasicInfoService pileBasicInfoService; + @Autowired + private PileBasicInfoService pileBasicInfoService; - @Autowired - private OrderBasicInfoService orderBasicInfoService; + @Autowired + private OrderBasicInfoService orderBasicInfoService; - @Autowired - private CommonService commonService; + @Autowired + private CommonService commonService; - @Autowired - private RedisCache redisCache; + @Autowired + private RedisCache redisCache; - @Override - public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, Channel channel) { - // log.info("[===获取桩上传的实时监测数据===] param:{}, channel:{}", JSON.toJSONString(ykcDataProtocol), channel.toString()); - RealTimeMonitorData realTimeMonitorData = new RealTimeMonitorData(); + @Override + public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, Channel channel) { + // log.info("[===获取桩上传的实时监测数据===] param:{}, channel:{}", JSON.toJSONString(ykcDataProtocol), channel.toString()); + RealTimeMonitorData realTimeMonitorData = new RealTimeMonitorData(); - // 获取消息体 - byte[] msgBody = ykcDataProtocol.getMsgBody(); - // log.info("上传实时数据msgBody:{}", BytesUtil.bcd2Str(msgBody)); - int startIndex = 0; - int length = 16; + // 获取消息体 + byte[] msgBody = ykcDataProtocol.getMsgBody(); + // log.info("上传实时数据msgBody:{}", BytesUtil.bcd2Str(msgBody)); + int startIndex = 0; + int length = 16; - // 交易流水号 - byte[] orderCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String transactionCode = BytesUtil.bcd2Str(orderCodeByteArr); - realTimeMonitorData.setTransactionCode(transactionCode); + // 交易流水号 + byte[] orderCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String transactionCode = BytesUtil.bcd2Str(orderCodeByteArr); + realTimeMonitorData.setTransactionCode(transactionCode); - // 桩编码 - startIndex += length; - length = 7; - byte[] pileSnByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String pileSn = BytesUtil.bcd2Str(pileSnByteArr); - realTimeMonitorData.setPileSn(pileSn); + // 桩编码 + startIndex += length; + length = 7; + byte[] pileSnByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String pileSn = BytesUtil.bcd2Str(pileSnByteArr); + realTimeMonitorData.setPileSn(pileSn); - // 保存时间 - saveLastTimeAndCheckChannel(pileSn, channel); + // 保存时间 + saveLastTimeAndCheckChannel(pileSn, channel); - // 枪号 - startIndex += length; - length = 1; - byte[] pileConnectorCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String connectorCode = BytesUtil.bcd2Str(pileConnectorCodeByteArr); - realTimeMonitorData.setConnectorCode(connectorCode); + // 枪号 + startIndex += length; + length = 1; + byte[] connectorCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String connectorCode = BytesUtil.bcd2Str(connectorCodeByteArr); + realTimeMonitorData.setConnectorCode(connectorCode); + + // 枪口编号 + String pileConnectorCode = pileSn + connectorCode; // 枪口状态 0x00:离线 0x01:故障 0x02:空闲 0x03:充电 0x04 预约中 - startIndex += length; - length = 1; - byte[] connectorStatusByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String connectorStatus = BytesUtil.bcd2Str(connectorStatusByteArr); - realTimeMonitorData.setConnectorStatus(connectorStatus); + startIndex += length; + length = 1; + byte[] connectorStatusByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String connectorStatus = BytesUtil.bcd2Str(connectorStatusByteArr); + realTimeMonitorData.setConnectorStatus(connectorStatus); - // 是否归位 0x00:否 0x01:是 0x02:未知(无法检测到枪是否插回枪座即 未知) - startIndex += length; - length = 1; - byte[] homingFlagByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String homingFlag = BytesUtil.bcd2Str(homingFlagByteArr); - realTimeMonitorData.setHomingFlag(homingFlag); + // 是否归位 0x00:否 0x01:是 0x02:未知(无法检测到枪是否插回枪座即 未知) + startIndex += length; + length = 1; + byte[] homingFlagByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String homingFlag = BytesUtil.bcd2Str(homingFlagByteArr); + realTimeMonitorData.setHomingFlag(homingFlag); - // 是否插枪 0x00:否 0x01:是 - startIndex += length; - length = 1; - byte[] putGunTypeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String putGunType = BytesUtil.bcd2Str(putGunTypeByteArr); - realTimeMonitorData.setPutGunType(putGunType); + // 是否插枪 0x00:否 0x01:是 + startIndex += length; + length = 1; + byte[] isChargerPluggedInByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String isChargerPluggedIn = BytesUtil.bcd2Str(isChargerPluggedInByteArr); + realTimeMonitorData.setPutGunType(isChargerPluggedIn); - // 输出电压 精确到小数点后一位;待机置零 - startIndex += length; - length = 2; - byte[] outputVoltageByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String outputVoltage = YKCUtils.convertVoltageCurrent(outputVoltageByteArr); - realTimeMonitorData.setOutputVoltage(outputVoltage); + // 输出电压 精确到小数点后一位;待机置零 + startIndex += length; + length = 2; + byte[] outputVoltageByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String outputVoltage = YKCUtils.convertVoltageCurrent(outputVoltageByteArr); + realTimeMonitorData.setOutputVoltage(outputVoltage); - // 输出电流 精确到小数点后一位;待机置零 - startIndex += length; - length = 2; - byte[] outputCurrentByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String outputCurrent = YKCUtils.convertVoltageCurrent(outputCurrentByteArr); - realTimeMonitorData.setOutputCurrent(outputCurrent); + // 输出电流 精确到小数点后一位;待机置零 + startIndex += length; + length = 2; + byte[] outputCurrentByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String outputCurrent = YKCUtils.convertVoltageCurrent(outputCurrentByteArr); + realTimeMonitorData.setOutputCurrent(outputCurrent); - // 枪线温度 整形, 偏移量-50;待机置零 - startIndex += length; - length = 1; - byte[] gunLineTemperatureByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String gunLineTemperature = YKCUtils.transitionTemperature(gunLineTemperatureByteArr); - realTimeMonitorData.setGunLineTemperature(gunLineTemperature); + // 枪线温度 整形, 偏移量-50;待机置零 + startIndex += length; + length = 1; + byte[] gunLineTemperatureByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String gunLineTemperature = YKCUtils.transitionTemperature(gunLineTemperatureByteArr); + realTimeMonitorData.setGunLineTemperature(gunLineTemperature); - // 枪线编码 没有置零 - startIndex += length; - length = 8; - byte[] gunLineCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String gunLineCode = BytesUtil.bcd2Str(gunLineCodeByteArr); - realTimeMonitorData.setGunLineCode(gunLineCode); + // 枪线编码 没有置零 + startIndex += length; + length = 8; + byte[] gunLineCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String gunLineCode = BytesUtil.bcd2Str(gunLineCodeByteArr); + realTimeMonitorData.setGunLineCode(gunLineCode); - // SOC 待机置零;交流桩置零 - startIndex += length; - length = 1; - byte[] SOCByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String SOC = String.valueOf(SOCByteArr[0]); - realTimeMonitorData.setSOC(SOC); + // SOC 待机置零;交流桩置零 + startIndex += length; + length = 1; + byte[] SOCByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String SOC = String.valueOf(SOCByteArr[0]); + realTimeMonitorData.setSOC(SOC); - // 电池组最高温度 整形, 偏移量-50 ºC;待机置零; 交流桩置零 - startIndex += length; - length = 1; - byte[] batteryMaxTemperatureByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String batteryMaxTemperature = YKCUtils.transitionTemperature(batteryMaxTemperatureByteArr); - realTimeMonitorData.setBatteryMaxTemperature(batteryMaxTemperature); + // 电池组最高温度 整形, 偏移量-50 ºC;待机置零; 交流桩置零 + startIndex += length; + length = 1; + byte[] batteryMaxTemperatureByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String batteryMaxTemperature = YKCUtils.transitionTemperature(batteryMaxTemperatureByteArr); + realTimeMonitorData.setBatteryMaxTemperature(batteryMaxTemperature); - // 累计充电时间 单位: min;待机置零 - startIndex += length; - length = 2; - byte[] sumChargingTimeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - int sumChargingTime = BytesUtil.bytesToIntLittle(sumChargingTimeByteArr); - realTimeMonitorData.setSumChargingTime(String.valueOf(sumChargingTime)); + // 累计充电时间 单位: min;待机置零 + startIndex += length; + length = 2; + byte[] sumChargingTimeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + int sumChargingTime = BytesUtil.bytesToIntLittle(sumChargingTimeByteArr); + realTimeMonitorData.setSumChargingTime(String.valueOf(sumChargingTime)); - // 剩余时间 单位: min;待机置零、交流桩置零 - startIndex += length; - length = 2; - byte[] timeRemainingByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - int timeRemaining = BytesUtil.bytesToIntLittle(timeRemainingByteArr); - realTimeMonitorData.setTimeRemaining(String.valueOf(timeRemaining)); + // 剩余时间 单位: min;待机置零、交流桩置零 + startIndex += length; + length = 2; + byte[] timeRemainingByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + int timeRemaining = BytesUtil.bytesToIntLittle(timeRemainingByteArr); + realTimeMonitorData.setTimeRemaining(String.valueOf(timeRemaining)); - // 充电度数 精确到小数点后四位;待机置零 - startIndex += length; - length = 4; - byte[] chargingDegreeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String chargingDegree = YKCUtils.convertDecimalPoint(chargingDegreeByteArr, 4); - realTimeMonitorData.setChargingDegree(chargingDegree); + // 充电度数 精确到小数点后四位;待机置零 + startIndex += length; + length = 4; + byte[] chargingDegreeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String chargingDegree = YKCUtils.convertDecimalPoint(chargingDegreeByteArr, 4); + realTimeMonitorData.setChargingDegree(chargingDegree); - // 计损充电度数 精确到小数点后四位;待机置零 未设置计损比例时等于充电度数 - startIndex += length; - length = 4; - byte[] lossDegreeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String lossDegree = YKCUtils.convertDecimalPoint(lossDegreeByteArr, 4); - realTimeMonitorData.setLossDegree(lossDegree); + // 计损充电度数 精确到小数点后四位;待机置零 未设置计损比例时等于充电度数 + startIndex += length; + length = 4; + byte[] lossDegreeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String lossDegree = YKCUtils.convertDecimalPoint(lossDegreeByteArr, 4); + realTimeMonitorData.setLossDegree(lossDegree); - // 已充金额 精确到小数点后四位;待机置零 (电费+服务费) *计损充电度数 - startIndex += length; - length = 4; - byte[] chargingAmountByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String chargingAmount = YKCUtils.convertDecimalPoint(chargingAmountByteArr, 4); - realTimeMonitorData.setChargingAmount(chargingAmount); + // 已充金额 精确到小数点后四位;待机置零 (电费+服务费) *计损充电度数 + startIndex += length; + length = 4; + byte[] chargingAmountByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String chargingAmount = YKCUtils.convertDecimalPoint(chargingAmountByteArr, 4); + realTimeMonitorData.setChargingAmount(chargingAmount); - /** - * 硬件故障 - * - * Bit 位表示(0 否 1 是), 低位到高位顺序 - * Bit1:急停按钮动作故障; - * Bit2:无可用整流模块; - * Bit3:出风口温度过高; - * Bit4:交流防雷故障; - * Bit5:交直流模块 DC20 通信中断; - * Bit6:绝缘检测模块 FC08 通信中断; - * Bit7:电度表通信中断; - * Bit8:读卡器通信中断; - * Bit9: RC10 通信中断; - * Bit10:风扇调速板故障; - * Bit11:直流熔断器故障; - * Bit12:高压接触器故障; - * Bit13:门打开; - */ - startIndex += length; - length = 2; - byte[] hardwareFaultTempByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String hardwareFaultTemp = BytesUtil.bcd2Str(hardwareFaultTempByteArr); - String faultReason = "无"; + /** + * 硬件故障 + * + * Bit 位表示(0 否 1 是), 低位到高位顺序 + * Bit1:急停按钮动作故障; + * Bit2:无可用整流模块; + * Bit3:出风口温度过高; + * Bit4:交流防雷故障; + * Bit5:交直流模块 DC20 通信中断; + * Bit6:绝缘检测模块 FC08 通信中断; + * Bit7:电度表通信中断; + * Bit8:读卡器通信中断; + * Bit9: RC10 通信中断; + * Bit10:风扇调速板故障; + * Bit11:直流熔断器故障; + * Bit12:高压接触器故障; + * Bit13:门打开; + */ + startIndex += length; + length = 2; + byte[] hardwareFaultTempByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String hardwareFaultTemp = BytesUtil.bcd2Str(hardwareFaultTempByteArr); + String faultReason = "无"; - if (!StringUtils.equals(hardwareFaultTemp, "0000")) { - // 不等于0000说明有故障 - StringBuffer sb = new StringBuffer(hardwareFaultTemp); - String lowOrder = sb.substring(0, 2); - String highOrder = sb.substring(2, 4); + if (!StringUtils.equals(hardwareFaultTemp, "0000")) { + // 不等于0000说明有故障 + StringBuffer sb = new StringBuffer(hardwareFaultTemp); + String lowOrder = sb.substring(0, 2); + String highOrder = sb.substring(2, 4); - // String hardwareFault = highOrder + lowOrder; - byte[] hardwareFaultByteArr = BytesUtil.str2Bcd(highOrder + lowOrder); - String binStr = BytesUtil.bytes2BinStr(hardwareFaultByteArr); - // log.info("binStr:{}", binStr); // 0000 0000 0000 0001 - int faultCode = 0; - for (int i = 0; i < binStr.length(); i++) { - if (binStr.charAt(i) == '1') { - faultCode = 15 - i; - break; - } - } - faultReason = YKCPileFaultReasonEnum.getValueByCode(faultCode); - // log.info("故障码:{}, 故障原因:{}", faultCode, faultReason); - } - realTimeMonitorData.setHardwareFault(faultReason); + // String hardwareFault = highOrder + lowOrder; + byte[] hardwareFaultByteArr = BytesUtil.str2Bcd(highOrder + lowOrder); + String binStr = BytesUtil.bytes2BinStr(hardwareFaultByteArr); + // log.info("binStr:{}", binStr); // 0000 0000 0000 0001 + int faultCode = 0; + for (int i = 0; i < binStr.length(); i++) { + if (binStr.charAt(i) == '1') { + faultCode = 15 - i; + break; + } + } + faultReason = YKCPileFaultReasonEnum.getValueByCode(faultCode); + } + realTimeMonitorData.setHardwareFault(faultReason); - // if (!StringUtils.equals(connectorStatus, "02")) { - if (!StringUtils.equals(connectorStatus, PileConnectorStatusEnum.FREE.getValue())) { - log.info("0x13上传实时监测数据==交易流水号:{}, 桩编号:{}, 枪口号:{}, 枪口状态:{}, 枪口状态描述:{}, 枪是否归位(00-否;01-是;02-未知):{}, 是否插枪(00-否;01-是):{}, 输出电压:{}, 输出电流:{}, 枪线温度:{}, " + - "枪线编码:{}, SOC:{}, 电池组最高温度:{}, 累计充电时间:{}, 剩余时间:{}, 充电度数:{}, 记损充电度数:{}, 已充金额:{}, " + - "硬件故障:{}, 故障码转换结果:{}", transactionCode, pileSn, connectorCode, connectorStatus, PileConnectorStatusEnum.getLabelByValue(connectorStatus), homingFlag, putGunType, outputVoltage, - outputCurrent, gunLineTemperature, gunLineCode, SOC, batteryMaxTemperature, sumChargingTime, timeRemaining, - chargingDegree, lossDegree, chargingAmount, hardwareFaultTemp, faultReason - ); - } + if (!StringUtils.equals(connectorStatus, PileConnectorStatusEnum.FREE.getValue())) { + log.info("0x13上传实时监测数据==交易流水号:{}, 桩编号:{}, 枪口号:{}, 枪口状态:{}, 枪口状态描述:{}, 枪是否归位(00-否;01-是;02-未知):{}, 是否插枪(00-否;01-是):{}, 输出电压:{}, 输出电流:{}, 枪线温度:{}, " + + "枪线编码:{}, SOC:{}, 电池组最高温度:{}, 累计充电时间:{}, 剩余时间:{}, 充电度数:{}, 记损充电度数:{}, 已充金额:{}, " + + "硬件故障:{}, 故障码转换结果:{}", transactionCode, pileSn, connectorCode, connectorStatus, PileConnectorStatusEnum.getLabelByValue(connectorStatus), homingFlag, isChargerPluggedIn, outputVoltage, + outputCurrent, gunLineTemperature, gunLineCode, SOC, batteryMaxTemperature, sumChargingTime, timeRemaining, + chargingDegree, lossDegree, chargingAmount, hardwareFaultTemp, faultReason + ); + } - // 公共方法修改状态 - pileBasicInfoService.updateStatus(BytesUtil.bcd2Str(ykcDataProtocol.getFrameType()), pileSn, connectorCode, connectorStatus, putGunType); + // 插枪状态 + String plugRedisKey = CacheConstants.CHARGER_PLUGGED_IN_STATUS + pileConnectorCode; + if (StringUtils.equals("01", isChargerPluggedIn)) { + // 插枪状态 + if (redisCache.setnx(plugRedisKey, pileConnectorCode, CacheConstants.cache_expire_time_30d)) { + log.info("时间:{}, 枪口号:{}, 首次插入充电枪", DateUtils.getDateTime(), pileConnectorCode); + // 设置成功说明 第一次插枪 + pileBasicInfoService.firstPlugInCharger(pileConnectorCode); + } + } else { + // 未插枪状态 + if (redisCache.hasKey(plugRedisKey) && redisCache.deleteObject(plugRedisKey)) { + log.info("时间:{}, 枪口号:{}, 首次拔出充电枪", DateUtils.getDateTime(), pileConnectorCode); + // redis有值,并且删除成功,说明首次拔枪 + pileBasicInfoService.firstUnplugCharger(pileConnectorCode); + } + } - // 01表示故障 - if (StringUtils.equals(connectorStatus, PileConnectorStatusEnum.FAULT.getValue())) { - // 故障原因存入缓存 - String redisKey = CacheConstants.PILE_HARDWARE_FAULT + pileSn + connectorCode; - redisCache.setCacheObject(redisKey, faultReason, 5, TimeUnit.MINUTES); - } + // 公共方法修改状态 + pileBasicInfoService.updateStatus(BytesUtil.bcd2Str(ykcDataProtocol.getFrameType()), pileSn, connectorCode, connectorStatus, isChargerPluggedIn); - // 03表示充电中 - if (StringUtils.equals(connectorStatus, PileConnectorStatusEnum.OCCUPIED_CHARGING.getValue())) { - // 默认保存到redis - boolean saveRedisFlag = true; + // 01表示故障 + if (StringUtils.equals(connectorStatus, PileConnectorStatusEnum.FAULT.getValue())) { + // 故障原因存入缓存 + String redisKey = CacheConstants.PILE_HARDWARE_FAULT + pileConnectorCode; + redisCache.setCacheObject(redisKey, faultReason, 5, TimeUnit.MINUTES); + } - // 查询数据库中该订单当前信息 - OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); - if (Objects.nonNull(orderInfo)) { - if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue()) - || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.STAY_SETTLEMENT.getValue())) { - // 在订单状态为 订单完成或待结算,不保存 - saveRedisFlag = false; - } + // 03表示充电中 + if (StringUtils.equals(connectorStatus, PileConnectorStatusEnum.OCCUPIED_CHARGING.getValue())) { + // 默认保存到redis + boolean saveRedisFlag = true; - boolean updateFlag = false; - if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.NOT_START.getValue()) - || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ABNORMAL.getValue()) - || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.STAY_SETTLEMENT.getValue())) { - updateFlag = true; - // 如果是未启动状态或者异常状态, 修改这个订单状态为充电中 2023年7月7日新增 如果是待结算状态,也改为充电中 - orderInfo.setOrderStatus(OrderStatusEnum.IN_THE_CHARGING.getValue()); - } + // 查询数据库中该订单当前信息 + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); + if (Objects.nonNull(orderInfo)) { + if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue()) + || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.STAY_SETTLEMENT.getValue())) { + // 在订单状态为 订单完成或待结算,不保存 + saveRedisFlag = false; + } - // 如果原来没有开始充电时间就保存当前时间为开始充电时间 - if (orderInfo.getChargeStartTime() == null) { - updateFlag = true; - orderInfo.setChargeStartTime(new Date()); - } + boolean updateFlag = false; + if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.NOT_START.getValue()) + || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ABNORMAL.getValue()) + || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.STAY_SETTLEMENT.getValue())) { + updateFlag = true; + // 如果是未启动状态或者异常状态, 修改这个订单状态为充电中 2023年7月7日新增 如果是待结算状态,也改为充电中 + orderInfo.setOrderStatus(OrderStatusEnum.IN_THE_CHARGING.getValue()); + } - if (updateFlag) { - orderBasicInfoService.updateOrderBasicInfo(orderInfo); - } - } + // 如果原来没有开始充电时间就保存当前时间为开始充电时间 + if (orderInfo.getChargeStartTime() == null) { + updateFlag = true; + orderInfo.setChargeStartTime(new Date()); + } - // 充电时保存实时数据到redis - if (saveRedisFlag) { - pileBasicInfoService.saveRealTimeMonitorData2Redis(realTimeMonitorData); - } - } + if (updateFlag) { + orderBasicInfoService.updateOrderBasicInfo(orderInfo); + } + } - // 异步推送第三方平台实时数据 - CompletableFuture.runAsync(() -> { - try { - commonService.pushRealTimeInfo(pileSn, connectorCode, connectorStatus, realTimeMonitorData, transactionCode); - } catch (Exception e) { - log.error("统一推送第三方平台实时数据 error, ", e); - } - }); + // 充电时保存实时数据到redis + if (saveRedisFlag) { + pileBasicInfoService.saveRealTimeMonitorData2Redis(realTimeMonitorData); + } + } - // 异步推送第三方平台实时数据V2 - CompletableFuture.runAsync(() -> { - try { - commonService.pushRealTimeInfoV2(pileSn, connectorCode, connectorStatus, realTimeMonitorData, transactionCode); - } catch (Exception e) { - log.error("统一推送第三方平台实时数据V2 error, ", e); - } - }); + // 异步推送第三方平台实时数据 + CompletableFuture.runAsync(() -> { + try { + commonService.pushRealTimeInfo(pileSn, connectorCode, connectorStatus, realTimeMonitorData, transactionCode); + } catch (Exception e) { + log.error("统一推送第三方平台实时数据 error, ", e); + } + }); - return null; - } + // 异步推送第三方平台实时数据V2 + CompletableFuture.runAsync(() -> { + try { + commonService.pushRealTimeInfoV2(pileSn, connectorCode, connectorStatus, realTimeMonitorData, transactionCode); + } catch (Exception e) { + log.error("统一推送第三方平台实时数据V2 error, ", e); + } + }); - public static void main(String[] args) { - StringBuffer sb = new StringBuffer("0100"); - String lowOrder = sb.substring(0, 2); - String highOrder = sb.substring(2, 4); + return null; + } - // String hardwareFault = highOrder + lowOrder; - byte[] hardwareFaultByteArr = BytesUtil.str2Bcd(highOrder + lowOrder); - String binStr = BytesUtil.bytes2BinStr(hardwareFaultByteArr); - // log.info("binStr:{}", binStr); // 0000 0000 0000 0001 - int faultCode = 0; - for (int i = 0; i < binStr.length(); i++) { - if (binStr.charAt(i) == '1') { - faultCode = 16 - i; - break; - } - } - String faultReason = YKCPileFaultReasonEnum.getValueByCode(faultCode); - System.out.println(faultReason); - } + public static void main(String[] args) { + StringBuffer sb = new StringBuffer("0100"); + String lowOrder = sb.substring(0, 2); + String highOrder = sb.substring(2, 4); + + // String hardwareFault = highOrder + lowOrder; + byte[] hardwareFaultByteArr = BytesUtil.str2Bcd(highOrder + lowOrder); + String binStr = BytesUtil.bytes2BinStr(hardwareFaultByteArr); + // log.info("binStr:{}", binStr); // 0000 0000 0000 0001 + int faultCode = 0; + for (int i = 0; i < binStr.length(); i++) { + if (binStr.charAt(i) == '1') { + faultCode = 16 - i; + break; + } + } + String faultReason = YKCPileFaultReasonEnum.getValueByCode(faultCode); + System.out.println(faultReason); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java index bd66a98d5..285f48c70 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileReservedInfo.java @@ -32,6 +32,11 @@ public class PileReservedInfo { */ private String pileSn; + /** + * 充电桩枪口编号 + */ + private String pileConnectorCode; + /** * 状态(0-未生效;1-生效) */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java index b65b03e92..64a96d440 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/CreateReservedDTO.java @@ -20,6 +20,11 @@ public class CreateReservedDTO { */ private String pileSn; + /** + * 充电桩枪口编号 + */ + private String pileConnectorCode; + /** * 预约开始时间 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java index a1bd9d3d7..3631263ca 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java @@ -116,6 +116,16 @@ public interface PileBasicInfoService { */ List selectPileListByStationIds(List stationIdList); + /** + * 首次插枪 + */ + public void firstPlugInCharger(String pileConnectorCode); + + /** + * 首次拔枪 + */ + public void firstUnplugCharger(String pileConnectorCode); + /** * 通过桩编号查询站点id * @param sn 桩编号 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java index 5d95a366c..f023a688c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservedInfoService.java @@ -32,9 +32,24 @@ public interface PileReservedInfoService { List getReservationsByMemberIdAndPileSn(String memberId, String pileSn); + /** + * 启动预约 + * @param dto + */ void activateReserved(PileReservedDTO dto); + /** + * 关闭预约 + * @param dto + */ void deactivateReserved(PileReservedDTO dto); + /** + * 根据充电枪口编号发送预约指令 + * @param pileConnectorCode + */ + void pushReservedByPileConnectorCode(String pileConnectorCode); + + void cancelOneTimeReservation(String pileConnectorCode); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java index 39711837b..3bff151d4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java @@ -82,18 +82,15 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { @Autowired private SimCardService simCardService; - @Autowired - private PileSimInfoMapper pileSimInfoMapper; - - @Autowired - private PileMerchantInfoMapper pileMerchantInfoMapper; - @Autowired private RedisCache redisCache; @Value("${baseurl.prefix}") private String BASE_URL_PREFIX; + @Autowired + private PileReservedInfoService pileReservedInfoService; + /** * 查询设备管理 * @@ -460,6 +457,28 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { return pileInfoVOS; } + /** + * 首次插枪 + * + * @param pileConnectorCode + */ + @Override + public void firstPlugInCharger(String pileConnectorCode) { + // 下发预约指令 + pileReservedInfoService.pushReservedByPileConnectorCode(pileConnectorCode); + } + + /** + * 首次拔枪 + * + * @param pileConnectorCode + */ + @Override + public void firstUnplugCharger(String pileConnectorCode) { + // 关闭仅执行一次的预约 + pileReservedInfoService.cancelOneTimeReservation(pileConnectorCode); + } + /** * 修改状态 * 用于登陆协议,心跳包协议,上传实时数据协议 更新状态的方法 @@ -476,10 +495,10 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { * 7.上传实时数据,枪状态传0x03充电,设置为【3-占用(充电中)】 */ @Override - public void updateStatus(String frameType, String pileSn, String connectorCode, String status, String putGunType) { + public void updateStatus(String frameType, String pileSn, String connectorCode, String status, String isChargerPluggedIn) { // 清缓存 cleanRedisCache(pileSn); - // log.info("updateStatus传参:帧类型:{}, 桩编号:{}, 枪口号:{}, 状态:{}, 插拔枪:{}", "0x" + frameType, pileSn, connectorCode, status, putGunType); + // log.info("updateStatus传参:帧类型:{}, 桩编号:{}, 枪口号:{}, 状态:{}, 插拔枪:{}", "0x" + frameType, pileSn, connectorCode, status, isChargerPluggedIn); /* 0x01 登陆认证 登陆成功,把充电桩和枪口的状态都更新为【在线】 @@ -522,7 +541,7 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { */ if (StringUtils.equals(frameType, BytesUtil.bcd2Str(YKCFrameTypeCode.UPLOAD_REAL_TIME_MONITOR_DATA_CODE.getBytes())) || StringUtils.equals(frameType, BytesUtil.bcd2Str(YKCFrameTypeCode.UPLOAD_REAL_TIME_MONITOR_DATA_OLD_VERSION_CODE.getBytes()))) { - // log.info("上传实时数据中的修改状态逻辑 桩号:{}, 枪号:{}, 枪状态{}, 是否插枪:{}", pileSn, connectorCode, status, putGunType); + // log.info("上传实时数据中的修改状态逻辑 桩号:{}, 枪号:{}, 枪状态{}, 是否插枪:{}", pileSn, connectorCode, status, isChargerPluggedIn); /** * 更新枪状态 * connectorStatus 桩传过来的枪口状态: 0x00:离线 0x01:故障 0x02:空闲 0x03:充电 @@ -535,7 +554,7 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { statusDataBase = PileConnectorDataBaseStatusEnum.FAULT.getValue(); } else if (StringUtils.equals(status, PileConnectorStatusEnum.FREE.getValue())) { // 空闲 //是否插枪 0x00:否 0x01:是 - if (StringUtils.equals(putGunType, Constants.ZERO_ONE)) { + if (StringUtils.equals(isChargerPluggedIn, Constants.ZERO_ONE)) { // 空闲并插枪 设置为【占用(未充电)】 statusDataBase = PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(); } else { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java index d17e2bd09..02731b52c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservedInfoServiceImpl.java @@ -3,7 +3,6 @@ package com.jsowell.pile.service.impl; import com.jsowell.common.constant.Constants; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; -import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.pile.dto.PileReservedDTO; import org.springframework.stereotype.Service; @@ -11,7 +10,6 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.sql.Time; import java.time.LocalTime; -import java.util.Date; import java.util.List; import com.jsowell.pile.mapper.PileReservedInfoMapper; @@ -118,7 +116,6 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { pileReservedInfoMapper.updateByPrimaryKeySelective(pileReservedInfo); } - /** * 校验时间是否重叠 * @param memberId @@ -154,5 +151,14 @@ public class PileReservedInfoServiceImpl implements PileReservedInfoService { throw new BusinessException(ReturnCodeEnum.CODE_UPDATE_RESERVED_STATUS_REFUSED); } } + + /** + * 根据充电枪口编号发送指令 + * @param pileConnectorCode + */ + @Override + public void pushReservedByPileConnectorCode(String pileConnectorCode) { + // 根据充电枪口编号查询正在生效中的预约 + } } diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml index cb127d486..278267d78 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileReservedInfoMapper.xml @@ -7,6 +7,7 @@ + @@ -20,8 +21,8 @@ - id, member_id, pile_sn, `status`, reserved_type, start_time, end_time, freq, create_by, - create_time, update_by, update_time, del_flag + id, member_id, pile_sn, pile_connector_code, `status`, reserved_type, start_time, + end_time, freq, create_by, create_time, update_by, update_time, del_flag