diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpController.java index fbde44880..5287ee555 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpController.java @@ -18,7 +18,7 @@ import com.jsowell.pile.service.MemberGroupService; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.vo.base.PileInfoVO; import com.jsowell.pile.vo.uniapp.customer.GroundLockInfoVO; -import com.jsowell.pile.vo.uniapp.customer.PileConnectorVO; +import com.jsowell.pile.vo.uniapp.customer.AppletPileDetailVO; import com.jsowell.pile.vo.web.ThirdPartySnRelationVO; import com.jsowell.service.PileService; import com.jsowell.thirdparty.common.CommonService; @@ -70,7 +70,7 @@ public class JumpController extends BaseController { try { // 进入充电桩详情做一下鉴权 String memberId = getMemberIdByAuthorization(request); - PileConnectorVO vo = pileService.getPileDetailByPileSn(pileSn); + AppletPileDetailVO vo = pileService.getPileDetailByPileSn(pileSn); addMember2MemberGroup(memberId, vo); response = new RestApiResponse<>(vo); } catch (BusinessException e) { @@ -85,7 +85,7 @@ public class JumpController extends BaseController { } // 针对汇鑫大厦的用户,自动加入集团中 - private void addMember2MemberGroup(String memberId, PileConnectorVO vo) { + private void addMember2MemberGroup(String memberId, AppletPileDetailVO vo) { if (vo == null || StringUtils.isBlank(memberId)) { return; } @@ -131,7 +131,7 @@ public class JumpController extends BaseController { memberId = getMemberIdByAuthorization(request); } - PileConnectorVO vo = pileService.getConnectorDetail(pileConnectorCode); + AppletPileDetailVO vo = pileService.getConnectorDetail(pileConnectorCode); if (StringUtils.isNotBlank(memberId)) { addMember2MemberGroup(memberId, vo); } diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpXixiaoController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpXixiaoController.java index 7106f6435..246bbfdad 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpXixiaoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/JumpXixiaoController.java @@ -11,7 +11,7 @@ import com.jsowell.common.util.file.AliyunOssUploadUtils; import com.jsowell.common.util.file.FileUtils; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.vo.uniapp.customer.GroundLockInfoVO; -import com.jsowell.pile.vo.uniapp.customer.PileConnectorVO; +import com.jsowell.pile.vo.uniapp.customer.AppletPileDetailVO; import com.jsowell.service.PileService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -42,7 +42,7 @@ public class JumpXixiaoController extends BaseController { logger.info("User-Agent:{}", request.getHeader("user-agent")); RestApiResponse response = null; try { - PileConnectorVO vo = pileService.getPileDetailByPileSn(pileSn); + AppletPileDetailVO vo = pileService.getPileDetailByPileSn(pileSn); response = new RestApiResponse<>(vo); } catch (BusinessException e) { logger.warn("app-xcx-h5查询充电桩详情 warn", e); @@ -65,7 +65,7 @@ public class JumpXixiaoController extends BaseController { logger.info("User-Agent:{}", request.getHeader("user-agent")); RestApiResponse response = null; try { - PileConnectorVO vo = pileService.getConnectorDetail(pileConnectorCode); + AppletPileDetailVO vo = pileService.getConnectorDetail(pileConnectorCode); response = new RestApiResponse<>(vo); } catch (BusinessException e) { logger.warn("app-xcx-h5查询充电枪口详情 warn param:{}", pileConnectorCode, e); diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java index abf002ce4..58ad47cb8 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java @@ -209,7 +209,7 @@ public class MemberController extends BaseController { logger.error("查询用户账户信息", e); response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_MEMBER_ACCOUNT_AMOUNT_ERROR); } - logger.info("查询用户账户信息 param memberId:{}, result:{}", memberId, response); + logger.info("查询用户账户信息, param:{}, result:{}", memberId, response); return response; } diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java index cd913da96..af4ab3dca 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java @@ -43,7 +43,7 @@ public class OccupyOrderController extends BaseController { */ @GetMapping("/getStationOccupyFee/{stationId}") public RestApiResponse getStationOccupyFee(@PathVariable("stationId") String stationId) { - logger.info("查询站点占桩费率 params:{}", stationId); + // logger.info("查询站点占桩费率 params:{}", stationId); RestApiResponse response = null; try { BillingTemplateVO vo = pileBillingTemplateService.queryUsedBillingTemplate(stationId); @@ -52,7 +52,7 @@ public class OccupyOrderController extends BaseController { logger.error("查询站点占桩费率 error,", e); response = new RestApiResponse<>(e); } - logger.info("查询站点占桩费率 result:{}", response); + logger.info("查询站点占桩费率 params:{}, result:{}", stationId, response); return response; } @@ -92,7 +92,7 @@ public class OccupyOrderController extends BaseController { */ @GetMapping("/getOccupyOrderDetail/{occupyCode}") public RestApiResponse getOccupyOrderDetail(@PathVariable("occupyCode") String occupyCode) { - logger.info("查询占桩订单详情页 param:{}", occupyCode); + // logger.info("查询占桩订单详情页 param:{}", occupyCode); RestApiResponse response = null; try { OccupyOrderDetailVO vo = orderPileOccupyService.getOccupyOrderDetail(occupyCode); @@ -101,7 +101,7 @@ public class OccupyOrderController extends BaseController { logger.error("查询占桩订单详情页 error,", e); response = new RestApiResponse<>(e); } - logger.info("查询占桩订单详情页 result:{}", response); + logger.info("查询占桩订单详情页, param:{}, result:{}", occupyCode, response); return response; } diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java index 789362dea..ba17f1c30 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java @@ -287,7 +287,7 @@ public class OrderController extends BaseController { */ @PostMapping("/queryUninvoicedOrderList") public RestApiResponse queryUninvoicedOrderList(HttpServletRequest request, @RequestBody QueryOrderDTO dto) { - logger.info("查询未开发票订单 param:{}", JSON.toJSONString(dto)); + // logger.info("查询未开发票订单 param:{}", JSON.toJSONString(dto)); RestApiResponse response; try { String memberId = getMemberIdByAuthorization(request); diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java index 68decfc61..8cde783a0 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java @@ -220,7 +220,7 @@ public class PersonPileController extends BaseController { logger.error("获取某枪口某段时间内累计信息 error", e); response = new RestApiResponse<>(e); } - logger.info("获取某枪口某段时间内累计信息 result:{}", response); + logger.info("获取某枪口某段时间内累计信息, params:{}, result:{}", JSON.toJSONString(dto), response); return response; } @@ -235,7 +235,7 @@ public class PersonPileController extends BaseController { */ @RequestMapping("/getChargingRecord") public RestApiResponse getChargingRecord(HttpServletRequest request, @RequestBody QueryPersonPileDTO dto) { - logger.info("获取个人桩充电记录 params:{}", JSON.toJSONString(dto)); + // logger.info("获取个人桩充电记录 params:{}", JSON.toJSONString(dto)); RestApiResponse response = null; try { String memberId = getMemberIdByAuthorization(request); @@ -249,7 +249,7 @@ public class PersonPileController extends BaseController { logger.error("获取个人桩充电记录 error", e); response = new RestApiResponse<>(e); } - logger.info("获取个人桩充电记录 result:{}", response); + logger.info("获取个人桩充电记录, params:{}, result:{}", JSON.toJSONString(dto), JSON.toJSONString(response)); return response; } diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PileController.java index 68efa2b28..9196d1949 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PileController.java @@ -63,7 +63,7 @@ public class PileController extends BaseController { */ @PostMapping("/queryStationInfos") public RestApiResponse queryStationInfos(HttpServletRequest request, @RequestBody QueryStationDTO queryStationDTO) { - logger.info("查询充电站信息列表 param:{}", JSON.toJSONString(queryStationDTO)); + // logger.info("查询充电站信息列表 param:{}", JSON.toJSONString(queryStationDTO)); RestApiResponse response; try { // 获取appid(第三方平台用) @@ -73,7 +73,7 @@ public class PileController extends BaseController { List deptIds = pileMerchantInfoService.getDeptIdsByAppId(appId); queryStationDTO.setMerchantDeptIds(deptIds); } - logger.info("uniApp查询充电站信息appId:{}, dto:{}", appId, JSON.toJSONString(queryStationDTO)); + logger.debug("uniApp查询充电站信息appId:{}, dto:{}", appId, JSON.toJSONString(queryStationDTO)); PageResponse pageResponse = pileStationInfoService.uniAppQueryStationInfoList(queryStationDTO); response = new RestApiResponse<>(pageResponse); } catch (BusinessException e) { @@ -83,7 +83,7 @@ public class PileController extends BaseController { logger.error("查询充电站信息列表异常 error", e); response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_PILE_STATION_INFO_ERROR); } - logger.info("查询充电站信息列表 result:{}", JSON.toJSONString(response)); + logger.debug("查询充电站信息列表 param:{}, result:{}", JSON.toJSONString(queryStationDTO), JSON.toJSONString(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 f97f92646..62200a433 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -23,7 +23,7 @@ import com.jsowell.pile.vo.uniapp.customer.BillingPriceVO; import com.jsowell.pile.vo.uniapp.customer.PersonPileConnectorSumInfoVO; import com.jsowell.pile.vo.uniapp.customer.PersonPileRealTimeVO; import com.jsowell.pile.vo.uniapp.customer.PileConnectorDetailVO; -import com.jsowell.pile.vo.uniapp.customer.PileConnectorVO; +import com.jsowell.pile.vo.uniapp.customer.AppletPileDetailVO; import com.jsowell.pile.vo.web.PileDetailVO; import com.jsowell.pile.vo.web.PileStationVO; import org.apache.commons.collections4.CollectionUtils; @@ -159,16 +159,28 @@ public class PileService { /** * 前端扫码跳转接口 */ - public PileConnectorVO getPileDetailByPileSn(String param) throws ExecutionException, InterruptedException { + public AppletPileDetailVO getPileDetailByPileSn(String param) throws ExecutionException, InterruptedException { if (StringUtils.isBlank(param)) { throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); } String pileSn; - if (param.length() == 16) { - pileSn = StringUtils.substring(param, 0, param.length() - 2); + // param长度大于10是汽车桩, 否则是电单车桩 + if (param.length() > 10) { + // 汽车桩, 桩编号14位, 枪口号2位 + if (param.length() == 16) { + pileSn = StringUtils.substring(param, 0, param.length() - 2); + } else { + pileSn = param; + } } else { - pileSn = param; + // 电单车桩, 桩编号8位, 枪口号2位 + if (param.length() == 10) { + pileSn = StringUtils.substring(param, 0, param.length() - 2); + } else { + pileSn = param; + } } + // 查询充电桩信息 PileInfoVO pileInfoVO = pileBasicInfoService.selectPileInfoBySn(pileSn); if (pileInfoVO == null) { @@ -207,7 +219,7 @@ public class PileService { MerchantInfoVO merchantInfoVO = merchantInfoVOFuture.get(); List billingPriceVOS = billingPriceFuture.get(); - PileConnectorVO vo = PileConnectorVO.builder() + AppletPileDetailVO vo = AppletPileDetailVO.builder() .pileInfo(pileInfoVO) .connectorInfoList(connectorInfoList) .merchantInfo(merchantInfoVO) @@ -225,17 +237,20 @@ public class PileService { * @throws ExecutionException * @throws InterruptedException */ - public PileConnectorVO getConnectorDetail(String pileConnectorCode) throws ExecutionException, InterruptedException { + public AppletPileDetailVO getConnectorDetail(String pileConnectorCode) throws ExecutionException, InterruptedException { PileConnectorDetailVO pileConnectorDetailVO = queryPileConnectorDetail(pileConnectorCode); if (pileConnectorDetailVO == null) { return null; } - // 枪口状态不为2:占用(未充电) - if (!StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), pileConnectorDetailVO.getConnectorStatus())) { - throw new BusinessException(ReturnCodeEnum.CODE_PILE_CONNECTOR_STATUS_ERROR); + // 不是电单车的桩, 需要判断插枪状态 + if (!StringUtils.equals(Constants.THREE, pileConnectorDetailVO.getChargePortType())) { + // 枪口状态不为2:占用(未充电) + if (!StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), pileConnectorDetailVO.getConnectorStatus())) { + throw new BusinessException(ReturnCodeEnum.CODE_PILE_CONNECTOR_STATUS_ERROR); + } } String pileSn = pileConnectorDetailVO.getPileSn(); - PileConnectorVO resultVO = getPileDetailByPileSn(pileSn); + AppletPileDetailVO resultVO = getPileDetailByPileSn(pileSn); List connectorInfoList = resultVO.getConnectorInfoList(); if (connectorInfoList.size() > 1) { List list = Lists.newArrayList(); diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 324bd1617..c54888c83 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -341,6 +341,20 @@ public class SpringBootTestController { adapayService.createBalancePaymentRequest(outMemberId, inMemberId, transAmt, title, desc, wechatAppId); } + /** + * + */ + @Test + public void createBalancePaymentRequestTest2() { + String outMemberId = "0"; // 出账memberId + String inMemberId = "ACM25158725"; // 入账memberId + String transAmt = "42.7"; // 金额 + String title = "订单金额补分账"; // 标题 + String desc = "补C69401257710,C86364369573结算金额"; // 描述 + String wechatAppId = wechatAppId1; // 万车充id + adapayService.createBalancePaymentRequest(outMemberId, inMemberId, transAmt, title, desc, wechatAppId); + } + @Test public void decryptPhoneNum() throws Exception { @@ -961,17 +975,7 @@ public class SpringBootTestController { // 需要重新分账的订单信息(针对未分账的订单) public JSONArray getPaymentList() { String jsonArrayString = "[" + - "{\"orderCode\":\"C67926008811\", \"settleAmount\":\"14.91\", \"paymentId\":\"002212024020312191210599708616768860160\"}" + - "{\"orderCode\":\"C42430351162\", \"settleAmount\":\"29.91\", \"paymentId\":\"002212024020417400510600151759191855104\"}" + - "{\"orderCode\":\"C46840673835\", \"settleAmount\":\"49.91\", \"paymentId\":\"002212024020508232410600374051907993600\"}" + - "{\"orderCode\":\"C80418255104\", \"settleAmount\":\"49.91\", \"paymentId\":\"002212024020519172410600538637863464960\"}" + - "{\"orderCode\":\"C27663220132\", \"settleAmount\":\"49.92\", \"paymentId\":\"002212024020615260710600842821125234688\"}" + - "{\"orderCode\":\"C46848081446\", \"settleAmount\":\"24.36\", \"paymentId\":\"002212024020708224510601098662578515968\"}" + - "{\"orderCode\":\"C61630340544\", \"settleAmount\":\"49.91\", \"paymentId\":\"002212024020813363810601540042416410624\"}" + - "{\"orderCode\":\"C80011863345\", \"settleAmount\":\"14.91\", \"paymentId\":\"002212024021416374510603759951855538176\"}" + - "{\"orderCode\":\"C25198228680\", \"settleAmount\":\"4.91\", \"paymentId\":\"002212024021513502010604080206798815232\"}" + - "{\"orderCode\":\"C29771066410\", \"settleAmount\":\"49.92\", \"paymentId\":\"002212024021719245910604889199513939968\"}" + - "{\"orderCode\":\"C29391457129\", \"settleAmount\":\"9.90\", \"paymentId\":\"002212024022016543010605938491023716352\"}" + + "{\"orderCode\":\"C25133803815\", \"settleAmount\":\"42.94\", \"paymentId\":\"002212024071413111510658428550211133440\"}" + "]"; return JSONArray.parseArray(jsonArrayString); } @@ -985,7 +989,7 @@ public class SpringBootTestController { // TODO 获取默认结算账户,如需分给对应商户就填写正确的汇付会员id // AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.getDefault(); AdapayMemberAccount adapayMemberAccount = new AdapayMemberAccount(); - adapayMemberAccount.setAdapayMemberId("ACM21943395"); + adapayMemberAccount.setAdapayMemberId("ACM25158725"); for (int i = 0; i < paymentList.size(); i++) { JSONObject jsonObject = (JSONObject) paymentList.get(i); BigDecimal confirmAmt = jsonObject.getBigDecimal("settleAmount"); // 确认金额就是结算金额 @@ -1165,766 +1169,1050 @@ public class SpringBootTestController { private List getPaymentIdList1() { List list = Lists.newArrayList(); - list.add("002212024063019153910653446823208845312"); - list.add("002212024063019333910653451354565480448"); - list.add("002212024063020120010653461003825848320"); - list.add("002212024063020164610653462203656101888"); - list.add("002212024063021540510653486694827216896"); - list.add("002212024063022090910653490489297354752"); - list.add("002212024063023152510653507166029918208"); - list.add("002212024070100032010653519223591591936"); - list.add("002212024070100070510653520164398272512"); - list.add("002212024070100100910653520939317780480"); - list.add("002212024070101520910653546608303972352"); - list.add("002212024070107295910653631624618889216"); - list.add("002212024070108141010653642747079180288"); - list.add("002212024070109504010653667030322298880"); - list.add("002212024070111252110653690855937368064"); - list.add("002212024070112022410653700181202190336"); - list.add("002212024070114425510653740575734018048"); - list.add("002212024070117300010653782623067541504"); - list.add("002212024070117420010653785643043704832"); - list.add("002212024070118002210653790265628086272"); - list.add("002212024070119182010653809888832753664"); - list.add("002212024070119363410653814474845339648"); - list.add("002212024070120195710653825394154700800"); - list.add("002212024070121081110653837532633198592"); - list.add("002212024070122582010653865253213540352"); - list.add("002212024070123234110653871633297018880"); - list.add("002212024070123250310653871977170296832"); - list.add("002212024070200003010653880896310394880"); - list.add("002212024070200085910653883033759162368"); - list.add("002212024070200300810653888354992791552"); - list.add("002212024070208370510654010898954469376"); - list.add("002212024070210403310654041973098725376"); - list.add("002212024070211281710654053983767203840"); - list.add("002212024070211551710654060777452396544"); - list.add("002212024070211594410654061899120934912"); - list.add("002212024070213274310654084039234379776"); - list.add("002212024070215594910654122315480485888"); - list.add("002212024070217441810654148612768575488"); - list.add("002212024070217501510654150108051107840"); - list.add("002212024070218042710654153683651616768"); - list.add("002212024070218285810654159850489430016"); - list.add("002212024070218333910654161030190116864"); - list.add("002212024070218511810654165472050327552"); - list.add("002212024070219210810654172982117371904"); - list.add("002212024070220350910654191607741448192"); - list.add("002212024070221574610654212396526522368"); - list.add("002212024070222331610654221330641330176"); - list.add("002212024070222423010654223656797429760"); - list.add("002212024070222484110654225211178000384"); - list.add("002212024070223093010654230450027110400"); - list.add("002212024070300391810654253051071258624"); - list.add("002212024070301091910654260603666358272"); - list.add("002212024070307070010654350616367173632"); - list.add("002212024070308093310654366360100323328"); - list.add("002212024070313312810654447370082865152"); - list.add("002212024070313331010654447800708177920"); - list.add("002212024070313410210654449777592664064"); - list.add("002212024070313412210654449862338576384"); - list.add("002212024070315331910654478037165064192"); - list.add("002212024070316305710654492540400992256"); - list.add("002212024070316321810654492878030213120"); - list.add("002212024070317494010654512352134430720"); - list.add("002212024070317585210654514664594317312"); - list.add("002212024070317595310654514920050614272"); - list.add("002212024070318205410654520211465994240"); - list.add("002212024070318304310654522682393120768"); - list.add("002212024070318453010654526401123450880"); - list.add("002212024070318464410654526710800498688"); - list.add("002212024070319151110654533871735717888"); - list.add("002212024070319205510654535312017399808"); - list.add("002212024070319410910654540406954569728"); - list.add("002212024070320055210654546626492547072"); - list.add("002212024070320075510654547139866599424"); - list.add("002212024070320494410654557664153866240"); - list.add("002212024070322065210654577075991044096"); - list.add("002212024070322463310654587064410398720"); - list.add("002212024070322500410654587946865631232"); - list.add("002212024070323055310654591927182647296"); - list.add("002212024070323083110654592592834088960"); - list.add("002212024070323182210654595071746613248"); - list.add("002212024070400043510654606700514279424"); - list.add("002212024070401070110654622413509582848"); - list.add("002212024070411202610654776785829150720"); - list.add("002212024070411452510654783073156247552"); - list.add("002212024070414215310654822445935337472"); - list.add("002212024070415295710654839576183922688"); - list.add("002212024070415352210654840942190563328"); - list.add("002212024070415533810654845536025968640"); - list.add("002212024070416200710654852201766096896"); - list.add("002212024070417134910654865715534544896"); - list.add("002212024070417244110654868449402511360"); - list.add("002212024070418125410654880586149617664"); - list.add("002212024070418211110654882671140974592"); - list.add("002212024070418221110654882919225192448"); - list.add("002212024070418531410654890734787076096"); - list.add("002212024070419015410654892917545984000"); - list.add("002212024070419271510654899294473785344"); - list.add("002212024070420544210654921301937737728"); - list.add("002212024070422553510654951724405956608"); - list.add("002212024070422585010654952541457440768"); - list.add("002212024070423031110654953637526859776"); - list.add("002212024070500321510654976053021728768"); - list.add("002212024070507361410655082748140490752"); - list.add("002212024070507414910655084155359305728"); - list.add("002212024070507540210655087229685989376"); - list.add("002212024070508461810655100382228094976"); - list.add("002212024070509343710655112542049214464"); - list.add("002212024070509372810655113259535613952"); - list.add("002212024070512023910655149796289646592"); - list.add("002212024070512182110655153748099960832"); - list.add("002212024070513131710655167572507729920"); - list.add("002212024070516282010655216656372092928"); - list.add("002212024070517193210655229540392153088"); - list.add("002212024070517242110655230753206145024"); - list.add("002212024070518071010655241528445198336"); - list.add("002212024070518234510655245703651835904"); - list.add("002212024070518331910655248109020557312"); - list.add("002212024070519112710655257706414387200"); - list.add("002212024070519125410655258073885941760"); - list.add("002212024070519240710655260893953613824"); - list.add("002212024070519255010655261328764526592"); - list.add("002212024070519303310655262514976915456"); - list.add("002212024070519330510655263150606909440"); - list.add("002212024070519392610655264748257562624"); - list.add("002212024070520405010655280199963615232"); - list.add("002212024070521091010655287331636322304"); - list.add("002212024070521111110655287840426328064"); - list.add("002212024070521545210655298833732075520"); - list.add("002212024070522281210655307219839967232"); - list.add("002212024070522334310655308609772818432"); - list.add("002212024070522413110655310572729257984"); - list.add("002212024070522484310655312385309196288"); - list.add("002212024070600115910655333338944000000"); - list.add("002212024070601465610655357233207402496"); - list.add("002212024070608150310655454906787037184"); - list.add("002212024070609443210655477425073000448"); - list.add("002212024070609470210655478055367917568"); - list.add("002212024070610025010655482031497805824"); - list.add("002212024070610133310655484726802616320"); - list.add("002212024070611124110655499611523194880"); - list.add("002212024070611492310655508845049634816"); - list.add("002212024070612244210655517734433681408"); - list.add("002212024070612522810655524719983185920"); - list.add("002212024070615224910655562557442396160"); - list.add("002212024070616444310655583170279395328"); - list.add("002212024070617184010655591713568108544"); - list.add("002212024070617594610655602054681550848"); - list.add("002212024070618121310655605190602571776"); - list.add("002212024070618280810655609193977581568"); - list.add("002212024070618344710655610866438918144"); - list.add("002212024070619121910655620313005850624"); - list.add("002212024070619292710655624624479141888"); - list.add("002212024070620475410655644368126713856"); - list.add("002212024070621285010655654667959623680"); - list.add("002212024070622032910655663388524433408"); - list.add("002212024070622133210655665917259415552"); - list.add("002212024070622494410655675027426115584"); - list.add("002212024070622531710655675919249608704"); - list.add("002212024070622532710655675964148113408"); - list.add("002212024070623375810655687168240619520"); - list.add("002212024070623571010655691996148473856"); - list.add("002212024070701064310655709501076217856"); - list.add("002212024070703170210655742298149986304"); - list.add("002212024070711241010655864885930844160"); - list.add("002212024070711333910655867272184057856"); - list.add("002212024070711391210655868668839624704"); - list.add("002212024070711464610655870576101601280"); - list.add("002212024070712342910655882584466964480"); - list.add("002212024070713145110655892741667278848"); - list.add("002212024070714180110655908638340378624"); - list.add("002212024070714182810655908749871321088"); - list.add("002212024070714255410655910621177098240"); - list.add("002212024070714581210655918751400493056"); - list.add("002212024070715042010655920295677222912"); - list.add("002212024070716433010655945250131255296"); - list.add("002212024070716563110655948526360162304"); - list.add("002212024070717073910655951327763152896"); - list.add("002212024070717275510655956430003945472"); - list.add("002212024070719105510655982349233311744"); - list.add("002212024070720000710655994729787527168"); - list.add("002212024070720065010655996419065630720"); - list.add("002212024070720230310656000500815364096"); - list.add("002212024070720231410656000549828632576"); - list.add("002212024070720412810656005137347293184"); - list.add("002212024070720524610656007981028315136"); - list.add("002212024070721025310656010527680757760"); - list.add("002212024070721263210656016476817637376"); - list.add("002212024070722111310656027721786421248"); - list.add("002212024070723320610656048078178660352"); - list.add("002212024070800244810656061338556272640"); - list.add("002212024070801101010656072755464343552"); - list.add("002212024070801284310656077424099065856"); - list.add("002212024070812511910656249205153554432"); - list.add("002212024070812555110656250349805801472"); - list.add("002212024070813190810656256205966327808"); - list.add("002212024070814440510656277585945124864"); - list.add("002212024070818265710656333670815485952"); - list.add("002212024070818324110656335114252750848"); - list.add("002212024070818340910656335483692851200"); - list.add("002212024070818375310656336421887311872"); - list.add("002212024070819095910656344502896340992"); - list.add("002212024070819114910656344964292460544"); - list.add("002212024070819185610656346755184693248"); - list.add("002212024070819243810656348187279462400"); - list.add("002212024070819390110656351807508783104"); - list.add("002212024070821202610656377331394506752"); - list.add("002212024070822141410656390870672564224"); - list.add("002212024070822155610656391296960634880"); - list.add("002212024070822260210656393837772189696"); - list.add("002212024070822443310656398499647442944"); - list.add("002212024070822531210656400677518401536"); - list.add("002212024070823373910656411861952978944"); - list.add("002212024070823463010656414091182231552"); - list.add("002212024070823524210656415649555595264"); - list.add("002212024070912035710656599673915797504"); - list.add("002212024070912201710656603786087604224"); - list.add("002212024070915434410656654984798711808"); - list.add("002212024070918170510656693575173496832"); - list.add("002212024070918214610656694754481741824"); - list.add("002212024070918274610656696263882096640"); - list.add("002212024070918512910656702233019113472"); - list.add("002212024070918514810656702312949190656"); - list.add("002212024070919005010656704585385349120"); - list.add("002212024070919120010656707395706834944"); - list.add("002212024070919460810656715984938586112"); - list.add("002212024070919473210656716339923083264"); - list.add("002212024070919540110656717971815313408"); - list.add("002212024070920050110656720739976454144"); - list.add("002212024070920484110656731726689861632"); - list.add("002212024070921292110656741961891745793"); - list.add("002212024070921480410656746673746595840"); - list.add("002212024070922272610656756578458640384"); - list.add("002212024070922525910656763011069554688"); - list.add("002212024070923393210656774725237637120"); - list.add("002212024070923544210656778540210192384"); - list.add("002212024071000383510656789584638902272"); - list.add("002212024071010133010656934265967042560"); - list.add("002212024071011060810656947514322423808"); - list.add("002212024071012221210656966657260175360"); - list.add("002212024071012302010656968702566031360"); - list.add("002212024071013083510656978329889058816"); - list.add("002212024071015563010657020587005562880"); - list.add("002212024071016040010657022473409445888"); - list.add("002212024071017292010657043947560738816"); - list.add("002212024071017373010657046004543426560"); - list.add("002212024071018230510657057476182970368"); - list.add("002212024071018362410657060823931191296"); - list.add("002212024071019002110657066853582655488"); - list.add("002212024071019174310657071222014869504"); - list.add("002212024071020144710657085583465877504"); - list.add("002212024071020395010657091890486648832"); - list.add("002212024071021072710657098839364636672"); - list.add("002212024071021162410657101090939895808"); - list.add("002212024071021375810657106519018090496"); - list.add("002212024071021391210657106827129872384"); - list.add("002212024071022223010657117725882015744"); - list.add("002212024071023350710657136000491229184"); - list.add("002212024071100112610657145139130765312"); - list.add("002212024071109021710657278734080118784"); - list.add("002212024071111034110657309285941104640"); - list.add("002212024071112520110657336548354646016"); - list.add("002212024071113385310657348339878768640"); - list.add("002212024071115045910657370007443517440"); - list.add("002212024071115192510657373640100581376"); - list.add("002212024071115511710657381659649204224"); - list.add("002212024071116221610657389459108839424"); - list.add("002212024071117413510657409419432124416"); - list.add("002212024071117584910657413755782991872"); - list.add("002212024071118531310657427446852374528"); - list.add("002212024071119012510657429507929165824"); - list.add("002212024071119212510657434542920171520"); - list.add("002212024071119282410657436301489807360"); - list.add("002212024071119335110657437672744587264"); - list.add("002212024071119394610657439158669053952"); - list.add("002212024071119395910657439214293913600"); - list.add("002212024071120585810657459093215793152"); - list.add("002212024071121435210657470389454344192"); - list.add("002212024071122154510657478413626028032"); - list.add("002212024071122513010657487413303808000"); - list.add("002212024071123561410657503703519944704"); - list.add("002212024071200340710657513234679115776"); - list.add("002212024071202043410657536000580612096"); - list.add("002212024071204333010657573477580443648"); - list.add("002212024071211323310657678935035699200"); - list.add("002212024071211380410657680324959830016"); - list.add("002212024071213554910657714989515104256"); - list.add("002212024071214010010657716296226398208"); - list.add("002212024071217172810657765737572249600"); - list.add("002212024071217182110657765957822173184"); - list.add("002212024071218094110657778878196183041"); - list.add("002212024071218144710657780159988068352"); - list.add("002212024071218570810657790818915876864"); - list.add("002212024071219324010657799762957209600"); - list.add("002212024071219400110657801610545221632"); - list.add("002212024071220132610657810021746913280"); - list.add("002212024071220210810657811957216407552"); - list.add("002212024071221381110657831350571474944"); - list.add("002212024071221551810657835654929354752"); - list.add("002212024071222421510657847470173151232"); - list.add("002212024071222583910657851600559046656"); - list.add("002212024071223510910657864810678603776"); - list.add("002212024071300200310657872082335666176"); - list.add("002212024071300404210657877282689286144"); - list.add("002212024071300583010657881761235968000"); - list.add("002212024071302302910657904909738156032"); - list.add("002212024071307403610657982953855766528"); - list.add("002212024071309591010658017822784200704"); - list.add("002212024071312015010658048692860080128"); - list.add("002212024071312380310658057806120980480"); - list.add("002212024071316233510658114564513452032"); - list.add("002212024071316254810658115121511026688"); - list.add("002212024071316445110658119918843379712"); - list.add("002212024071317335010658132244744523776"); - list.add("002212024071317541010658137359831638016"); - list.add("002212024071319373410658163382800240640"); - list.add("002212024071319502610658166621430575104"); - list.add("002212024071320183010658173685240401920"); - list.add("002212024071320260710658175600118902784"); - list.add("002212024071320341010658177625419988992"); - list.add("002212024071320384010658178759129993216"); - list.add("002212024071320542710658182730569650176"); - list.add("002212024071320555710658183108601053184"); - list.add("002212024071321021310658184687082713088"); - list.add("002212024071322073110658201118324867072"); - list.add("002212024071322103610658201895744425984"); - list.add("002212024071322104610658201937978433536"); - list.add("002212024071322242710658205378722357248"); - list.add("002212024071322383910658208953166929920"); - list.add("002212024071323065510658216065751580672"); - list.add("002212024071323201810658219435336974336"); - list.add("002212024071323534810658227866867773440"); - list.add("002212024071401135710658248034367266816"); - list.add("002212024071402574710658274165264183296"); - list.add("002212024071409464210658377075400003584"); - list.add("002212024071410333610658388877494882304"); - list.add("002212024071411305410658403297631100928"); - list.add("002212024071415143610658459592126996480"); - list.add("002212024071416203610658476203262287872"); - list.add("002212024071416290210658478325575602176"); - list.add("002212024071416330210658479331466170368"); - list.add("002212024071416442310658482188440481792"); - list.add("002212024071417222310658491748499324928"); - list.add("002212024071417463110658497824297807872"); - list.add("002212024071418095210658503700136697856"); - list.add("002212024071418241910658507337462292480"); - list.add("002212024071418520910658514340199268352"); - list.add("002212024071419065410658518053344296960"); - list.add("002212024071419093610658518730817785856"); - list.add("002212024071420000910658531454371991552"); - list.add("002212024071420440110658542494894174208"); - list.add("002212024071421410710658556864312266752"); - list.add("002212024071421533610658560004148953088"); - list.add("002212024071421534710658560051303829504"); - list.add("002212024071422205310658566870639534080"); - list.add("002212024071422292510658569018839027712"); - list.add("002212024071422293510658569058408697856"); - list.add("002212024071422483210658573829309059072"); - list.add("002212024071423385310658586499360448512"); - list.add("002212024071500084010658593995683635200"); - list.add("002212024071501090910658609217545293824"); - list.add("002212024071511161410658761994496540672"); - list.add("002212024071513280410658795172632420352"); - list.add("002212024071513441810658799254744453120"); - list.add("002212024071514134010658806644448399360"); - list.add("002212024071514322410658811358983069696"); - list.add("002212024071516152310658837279305076736"); - list.add("002212024071516571010658847792281640960"); - list.add("002212024071517344110658857233118822400"); - list.add("002212024071518335110658872124857171968"); - list.add("002212024071519145310658882450216890368"); - list.add("002212024071519151110658882526294532096"); - list.add("002212024071519251010658885039130062848"); - list.add("002212024071519270910658885535523086336"); - list.add("002212024071519303010658886379672903680"); - list.add("002212024071520292110658901191358373888"); - list.add("002212024071521030510658909677543014400"); - list.add("002212024071522295810658931544999493632"); - list.add("002212024071522424710658934770277769216"); - list.add("002212024071523074010658941031189741568"); - list.add("002212024071600000410658954218836901888"); - list.add("002212024071603434610659010515370684416"); - list.add("002212024071606254010659051257723785216"); - list.add("002212024071606312010659052682687021056"); - list.add("002212024071611313710659128254829215744"); - list.add("002212024071611474810659132327465963520"); - list.add("002212024071613412510659160920036331520"); - list.add("002212024071614202210659170718330302464"); - list.add("002212024071614455310659177142450769920"); - list.add("002212024071616120110659198817581924352"); - list.add("002212024071617402210659221053621665792"); - list.add("002212024071618360110659235057642184704"); - list.add("002212024071618581310659240642243567616"); - list.add("002212024071620560710659270313064173568"); - list.add("002212024071621181610659275887985033216"); - list.add("002212024071621183310659275958260293632"); - list.add("002212024071621225310659277048132362240"); - list.add("002212024071622011010659286684718043136"); - list.add("002212024071622283510659293584995241984"); - list.add("002212024071623282610659308644488142848"); - list.add("002212024071623480510659313589164646400"); - list.add("002212024071700220910659322163814879232"); - list.add("002212024071700535410659330153477775360"); - list.add("002212024071707214210659427746084458496"); - list.add("002212024071708594610659452427842617344"); - list.add("002212024071711003510659482829413117952"); - list.add("002212024071712094910659500253107081216"); - list.add("002212024071712183410659502455532601344"); - list.add("002212024071713530510659526239962578944"); - list.add("002212024071714262810659534643640029184"); - list.add("002212024071716220510659563737027678208"); - list.add("002212024071717502710659585976355422208"); - list.add("002212024071717541810659586948200550400"); - list.add("002212024071718140210659591910154731520"); - list.add("002212024071718261510659594987159101440"); - list.add("002212024071718285910659595676147216384"); - list.add("002212024071718385110659598156935901184"); - list.add("002212024071718462610659600064509554688"); - list.add("002212024071718561810659602547476238336"); - list.add("002212024071719115810659606489581707265"); - list.add("002212024071719263910659610186310455296"); - list.add("002212024071719275610659610511448432640"); - list.add("002212024071719532810659616936728170496"); - list.add("002212024071719543310659617209810993152"); - list.add("002212024071720280610659625649236770816"); - list.add("002212024071720333810659627042321727488"); - list.add("002212024071720421310659629204341755904"); - list.add("002212024071721111310659636502437666816"); - list.add("002212024071721593710659648680759861248"); - list.add("002212024071722022710659649394210971648"); - list.add("002212024071722451410659660160519536640"); - list.add("002212024071723043810659665046152114176"); - list.add("002212024071723083410659666033322491904"); - list.add("002212024071800142710659682613491306496"); - list.add("002212024071800571210659693370750214144"); - list.add("002212024071802195510659714189578956800"); - list.add("002212024071812473910659872164945903616"); - list.add("002212024071813220610659880830803808256"); - list.add("002212024071814462810659902064822030336"); - list.add("002212024071816351710659929448841175040"); - list.add("002212024071817535710659949244943396864"); - list.add("002212024071817582210659950358319030272"); - list.add("002212024071818334610659959267898687489"); - list.add("002212024071818483310659962988370812928"); - list.add("002212024071819032810659966741164240896"); - list.add("002212024071819242610659972015167315968"); - list.add("002212024071819394310659975862358790144"); - list.add("002212024071820260210659987517399076864"); - list.add("002212024071820324410659989203875385344"); - list.add("002212024071821363610660005278326939648"); - list.add("002212024071821381710660005699964858368"); - list.add("002212024071821400910660006171053805568"); - list.add("002212024071821434910660007095399399424"); - list.add("002212024071822152910660015062249082880"); - list.add("002212024071823502310660038944565121024"); - list.add("002212024071823554310660040288344625152"); - list.add("002212024071901330110660064775793647616"); - list.add("002212024071908362310660171316458123264"); - list.add("002212024071910070310660194134058074112"); - list.add("002212024071912325810660230856912101376"); - list.add("002212024071912510610660235418379923456"); - list.add("002212024071912533010660236023805366272"); - list.add("002212024071914133210660256164214112256"); - list.add("002212024071915062610660269477543239680"); - list.add("002212024071915423610660278578141376512"); - list.add("002212024071916085410660285196926353408"); - list.add("002212024071917520310660311154555666432"); - list.add("002212024071918313710660321113217404928"); - list.add("002212024071918345710660321951587139584"); - list.add("002212024071919112210660331117254279168"); - list.add("002212024071919164110660332454306119680"); - list.add("002212024071919283610660335453217918976"); - list.add("002212024071919334110660336731753504768"); - list.add("002212024071919431410660339134941831168"); - list.add("002212024071919432810660339194256531456"); - list.add("002212024071920091210660345672701313024"); - list.add("002212024071920154110660347300766244864"); - list.add("002212024071920223610660349042645901312"); - list.add("002212024071921470610660370309860970496"); - list.add("002212024071922233010660379466675695616"); - list.add("002212024071922301010660381147116228608"); - list.add("002212024071922560310660387658671693825"); - list.add("002212024071923210310660393951240331264"); - list.add("002212024072001563710660433101498777600"); - list.add("002212024072008340510660533125984202752"); - list.add("002212024072010335110660563267700805632"); - list.add("002212024072010385610660564544769073152"); - list.add("002212024072010411310660565122622529536"); - list.add("002212024072011052010660571188585873408"); - list.add("002212024072011552210660583781464236032"); - list.add("002212024072011555710660583928339677184"); - list.add("002212024072013572910660614512231366656"); - list.add("002212024072014424810660625916837466112"); - list.add("002212024072015510710660643111617110016"); - list.add("002212024072016435810660656410357051392"); - list.add("002212024072017321210660668547296620544"); - list.add("002212024072017511710660673352314359808"); - list.add("002212024072018195710660680562863726592"); - list.add("002212024072019311810660698519623143424"); - list.add("002212024072021184910660725578040832000"); - list.add("002212024072022060610660737478827663360"); - list.add("002212024072022095110660738422694383616"); - list.add("002212024072022285410660743215805366272"); - list.add("002212024072022434410660746945973559296"); - list.add("002212024072101061510660782811850182656"); - list.add("002212024072101415610660791794814595072"); - list.add("002212024072108352310660895839786311680"); - list.add("002212024072109241810660908150468497408"); - list.add("002212024072111115210660935222133784576"); - list.add("002212024072111190310660937031436382208"); - list.add("002212024072112101910660949930262884352"); - list.add("002212024072112103410660949993850638336"); - list.add("002212024072112172110660951702897594368"); - list.add("002212024072114130110660980811018010624"); - list.add("002212024072114411210660987900811956224"); - list.add("002212024072114580110660992134161047552"); - list.add("002212024072116463310661019446894366720"); - list.add("002212024072117135610661026337405698048"); - list.add("002212024072117203210661028001354309632"); - list.add("002212024072117523610661036069702033408"); - list.add("002212024072117534110661036340577800192"); - list.add("002212024072118293110661045361061969920"); - list.add("002212024072119335810661061580418076672"); - list.add("002212024072119364710661062289260331008"); - list.add("002212024072119370910661062379868172288"); - list.add("002212024072121453010661094681760387072"); - list.add("002212024072122025410661099061711646720"); - list.add("002212024072122475510661110387772448768"); - list.add("002212024072123500110661126014958792704"); - list.add("002212024072200060910661130077043736576"); - list.add("002212024072200405110661138810633162752"); - list.add("002212024072200455010661140061427240960"); - list.add("002212024072211055510661296112135413760"); - list.add("002212024072211192110661299494831640576"); - list.add("002212024072212401410661319848941703168"); - list.add("002212024072213072510661326687296077824"); - list.add("002212024072213424910661335598480433152"); - list.add("002212024072214205510661345186060656640"); - list.add("002212024072214360110661348986164310016"); - list.add("002212024072217462910661396919777718272"); - list.add("002212024072218295610661407851657142272"); - list.add("002212024072219034810661416374111789056"); - list.add("002212024072219253410661421855267524608"); - list.add("002212024072220000510661430540861878272"); - list.add("002212024072220244310661436740307431424"); - list.add("002212024072220341810661439151171031040"); - list.add("002212024072220444710661441787717443584"); - list.add("002212024072220504010661443267925426176"); - list.add("002212024072220570110661444866881839104"); - list.add("002212024072222121310661463790457397248"); - list.add("002212024072222204810661465951628427264"); - list.add("002212024072222343410661469418185719808"); - list.add("002212024072223223110661481482059689984"); - list.add("002212024072300460410661502509520146432"); - list.add("002212024072308211510661617060238065664"); - list.add("002212024072308461010661623330723762176"); - list.add("002212024072310130110661645187749687296"); - list.add("002212024072312422810661682799113842688"); - list.add("002212024072313162610661691345359196160"); - list.add("002212024072314285910661709602762747904"); - list.add("002212024072315342310661726063310610432"); - list.add("002212024072316012910661732883531419648"); - list.add("002212024072317565210661761918588276736"); - list.add("002212024072318030410661763480097177601"); - list.add("002212024072319094010661780240724353024"); - list.add("002212024072319154510661781770336673792"); - list.add("002212024072319231910661783676281327616"); - list.add("002212024072320284910661800160531013632"); - list.add("002212024072320433610661803880117866496"); - list.add("002212024072322300310661830669448163328"); - list.add("002212024072322363110661832295173169152"); - list.add("002212024072322373210661832551203020800"); - list.add("002212024072322393310661833057128648704"); - list.add("002212024072322594010661838121214935040"); - list.add("002212024072323114710661841170223771648"); - list.add("002212024072323140110661841734526455808"); - list.add("002212024072323263010661844874588282880"); - list.add("002212024072401121010661871466556805120"); - list.add("002212024072402380710661893096266473472"); - list.add("002212024072411213010662024810671636480"); - list.add("002212024072411314310662027382244204544"); - list.add("002212024072411444410662030657385623552"); - list.add("002212024072412421310662045123676442624"); - list.add("002212024072414252810662071106696224768"); - list.add("002212024072414353810662073663728492544"); - list.add("002212024072415114710662082764211982336"); - list.add("002212024072416360110662103959310434304"); - list.add("002212024072417243810662116195447447552"); - list.add("002212024072418244010662131301192192000"); - list.add("002212024072418323010662133275245838336"); - list.add("002212024072419412310662150609387126784"); - list.add("002212024072420191210662160126138560512"); - list.add("002212024072420331810662163674097827840"); - list.add("002212024072421150610662174195163295744"); - list.add("002212024072421191410662175234400411648"); - list.add("002212024072421524910662183685548322816"); - list.add("002212024072422054210662186928072663040"); - list.add("002212024072422391410662195366426624000"); - list.add("002212024072422451410662196875497746432"); - list.add("002212024072423544610662214375649517568"); - list.add("002212024072500013910662216107302846464"); - list.add("002212024072500141410662219275458801664"); - list.add("002212024072501203410662235969809752064"); - list.add("002212024072501391810662240683988004864"); - list.add("002212024072512201010662401963658539008"); - list.add("002212024072513434710662423002989350912"); - list.add("002212024072514312210662434978347003904"); - list.add("002212024072515273610662449131530653696"); - list.add("002212024072517585610662487213909737472"); - list.add("002212024072518514010662500486880911360"); - list.add("002212024072519022610662503194177249280"); - list.add("002212024072519120310662505614073618432"); - list.add("002212024072519345310662511363568340992"); - list.add("002212024072519364510662511829930708992"); - list.add("002212024072519374810662512095916691456"); - list.add("002212024072520511310662530572639584256"); - list.add("002212024072521275310662539798382342144"); - list.add("002212024072522122810662551018453831680"); - list.add("002212024072522521310662561022518697984"); - list.add("002212024072523001210662563030722383872"); - list.add("002212024072523122110662566090312040448"); - list.add("002212024072600172610662582468216201216"); - list.add("002212024072600190210662582869410873344"); - list.add("002212024072601344110662601908745101312"); - list.add("002212024072611422710662754857725452288"); - list.add("002212024072612290910662766611114344448"); - list.add("002212024072612430110662770098166218752"); - list.add("002212024072613315610662782411633713152"); - list.add("002212024072614282610662796629251555328"); - list.add("002212024072614484010662801720243642368"); - list.add("002212024072614500510662802075453935616"); - list.add("002212024072614543010662803188519251968"); - list.add("002212024072616072910662821554372837376"); - list.add("002212024072617284110662841989332434944"); - list.add("002212024072617422910662845463691198464"); - list.add("002212024072618024710662850573449814016"); - list.add("002212024072618104110662852560895598592"); - list.add("002212024072618423610662860591497150464"); - list.add("002212024072618481810662862027435245568"); - list.add("002212024072618532410662863311535456256"); - list.add("002212024072618591110662864765108101120"); - list.add("002212024072619062710662866595653345280"); - list.add("002212024072619151210662868796523266048"); - list.add("002212024072619170310662869261451186176"); - list.add("002212024072620120410662883108109074432"); - list.add("002212024072620344910662888833099153408"); - list.add("002212024072620505310662892876711788544"); - list.add("002212024072621520010662908255929827328"); - list.add("002212024072622263010662916936528527360"); - list.add("002212024072622313610662918219964448768"); - list.add("002212024072622424510662921027761700864"); - list.add("002212024072623204610662930595696197632"); - list.add("002212024072623451910662936771811540992"); - list.add("002212024072700460010662952045679136768"); - list.add("002212024072702111310662973492050010112"); - list.add("002212024072708482010663073426228838400"); - list.add("002212024072712573010663136130998476800"); - list.add("002212024072713305910663144558488829952"); - list.add("002212024072713595810663151851537817600"); - list.add("002212024072714024110663152536007311360"); - list.add("002212024072714152110663155725185499136"); - list.add("002212024072714423710663162586565128192"); - list.add("002212024072715003810663167120806084608"); - list.add("002212024072715380510663176546879504384"); - list.add("002212024072717262810663203821630177280"); - list.add("002212024072717435810663208223953920000"); - list.add("002212024072717481710663209312427098112"); - list.add("002212024072719025210663228078236827648"); - list.add("002212024072719301310663234962318942208"); - list.add("002212024072719452610663238790849855488"); - list.add("002212024072721175310663262059237933056"); - list.add("002212024072721253310663263985865187328"); - list.add("002212024072721451410663268939213504512"); - list.add("002212024072722162810663276800488759296"); - list.add("002212024072722190310663277453268942848"); - list.add("002212024072722220010663278195291152384"); - list.add("002212024072722335310663281184663265280"); - list.add("002212024072722422810663283344554786816"); - list.add("002212024072723245310663294019568873472"); - list.add("002212024072800131410663306185077653504"); - list.add("002212024072801535110663331505630588928"); - list.add("002212024072808394210663433641836130304"); - list.add("002212024072811283610663476148493361152"); - list.add("002212024072812204410663489267949875200"); - list.add("002212024072813420310663509730340089856"); - list.add("002212024072814010210663514507537506304"); - list.add("002212024072814163510663518422364438528"); - list.add("002212024072814290610663521570372648960"); - list.add("002212024072814402810663524432623919104"); - list.add("002212024072815402010663539499842850816"); - list.add("002212024072816491910663556859089321984"); - list.add("002212024072817525310663572858029850625"); - list.add("002212024072818080910663576697455693824"); - list.add("002212024072818272410663581540980031488"); - list.add("002212024072818591510663589559566532608"); - list.add("002212024072819080610663591783213424640"); - list.add("002212024072819372810663599174219825152"); - list.add("002212024072820054710663606301289021440"); - list.add("002212024072820213110663610259744423936"); - list.add("002212024072820295010663612354917048320"); - list.add("002212024072820433810663615825347850240"); - list.add("002212024072820470510663616696720678912"); - list.add("002212024072821035310663620921002491904"); - list.add("002212024072821331210663628300301565952"); - list.add("002212024072821533310663633422290235392"); - list.add("002212024072822243510663641233208557568"); - list.add("002212024072822285610663642328485539840"); - list.add("002212024072823294010663657612256862208"); - list.add("002212024072900034510663666188039872512"); - list.add("002212024072900274510663672229277433856"); - list.add("002212024072906485210663768138442264576"); - list.add("002212024072910472010663828148988510208"); - list.add("002212024072914102010663879235867500544"); - list.add("002212024072916031510663907653475053568"); - list.add("002212024072918070710663938826113306624"); - list.add("002212024072918422210663947697234038784"); - list.add("002212024072919074210663954070626598912"); - list.add("002212024072919075610663954132222816256"); - list.add("002212024072919084210663954323615494144"); - list.add("002212024072919282910663959304597364736"); - list.add("002212024072919295410663959659570536448"); - list.add("002212024072919425410663962931520274432"); - list.add("002212024072920210410663972535940374528"); - list.add("002212024072920285110663974493530304512"); - list.add("002212024072921244610663988564858187776"); - list.add("002212024072921312210663990228635344896"); - list.add("002212024072922343810664006147944210432"); - list.add("002212024072922531010664010811004796928"); - list.add("002212024072922540410664011039579168768"); - list.add("002212024072923175610664017047036866560"); - list.add("002212024072923382310664022193383067648"); - list.add("002212024073001412910664053170718384128"); - list.add("002212024073012140510664212369414488064"); - list.add("002212024073015423010664264820845654016"); - list.add("002212024073017263310664291004912435200"); - list.add("002212024073018174110664303873070673920"); - list.add("002212024073018255210664305933879529472"); - list.add("002212024073018473110664311380141629440"); - list.add("002212024073018542910664313133895368704"); - list.add("002212024073019391410664324395507843072"); - list.add("002212024073019510510664327376421003264"); - list.add("002212024073022340310664368388547796992"); - list.add("002212024073023121110664377984430047232"); - list.add("002212024073100175010664394509192200192"); - list.add("002212024073100222210664395650593636352"); - list.add("002212024073100413910664400499374227456"); - list.add("002212024073102491810664432626716073984"); - list.add("002212024073104022910664451042307407872"); - list.add("002212024073111253410664562548772954112"); - list.add("002212024073111452110664567525092032512"); - list.add("002212024073118043010664662942944002048"); - list.add("002212024073118140810664665367261749248"); - list.add("002212024073118214610664667288861138944"); - list.add("002212024073118381910664671452108894208"); - list.add("002212024073118390910664671663595708416"); - list.add("002212024073119371110664686269646602240"); - list.add("002212024073119475410664688964712390656"); - list.add("002212024073120524910664705300197199872"); - list.add("002212024073121223810664712805447860224"); - list.add("002212024073123052910664738687723356160"); - list.add("002212024073123090910664739609386516480"); + list.add("002212024080104094610664815265025318912"); + list.add("002212024080105103710664830576223019008"); + list.add("002212024080108001210664873255346294784"); + list.add("002212024080108412010664883605782069248"); + list.add("002212024080109525010664901597116350464"); + list.add("002212024080110275510664910426482388992"); + list.add("002212024080111083110664920645352226816"); + list.add("002212024080111235510664924521971265536"); + list.add("002212024080112000910664933640326447104"); + list.add("002212024080112013810664934014549938176"); + list.add("002212024080112143010664937250031849472"); + list.add("002212024080112150810664937409924030464"); + list.add("002212024080112301710664941222257934336"); + list.add("002212024080112455010664945135876505600"); + list.add("002212024080113542210664962383167336448"); + list.add("002212024080114212610664969194190352384"); + list.add("002212024080114343110664972488951562240"); + list.add("002212024080114505410664976609326358528"); + list.add("002212024080114560610664977917021642752"); + list.add("002212024080115161610664982992343715840"); + list.add("002212024080115352410664987809193373696"); + list.add("002212024080115443810664990132963819520"); + list.add("002212024080115460810664990511769780224"); + list.add("002212024080115502210664991574988107776"); + list.add("002212024080115551310664992795539759104"); + list.add("002212024080116170310664998291486662656"); + list.add("002212024080116263510665000688016941056"); + list.add("002212024080116340510665002577152114688"); + list.add("002212024080116521410665007142716227584"); + list.add("002212024080116555310665008063851102208"); + list.add("002212024080117021810665009678799724544"); + list.add("002212024080117542410665022790376800256"); + list.add("002212024080118112610665027074774646784"); + list.add("002212024080118114410665027150580506624"); + list.add("002212024080118193810665029138942640128"); + list.add("002212024080118390810665034045501202432"); + list.add("002212024080118473310665036165738332160"); + list.add("002212024080119061010665040848014925824"); + list.add("002212024080119151510665043137811931136"); + list.add("002212024080120433910665065380672110592"); + list.add("002212024080120590410665069262617935872"); + list.add("002212024080121443110665080698558414848"); + list.add("002212024080121473910665081489074274304"); + list.add("002212024080123253010665106112446324736"); + list.add("002212024080200253310665121224583512064"); + list.add("002212024080202251410665151344785674240"); + list.add("002212024080203385610665169893484838912"); + list.add("002212024080209293710665258143690620928"); + list.add("002212024080209585410665265515150540800"); + list.add("002212024080210143810665269471420989440"); + list.add("002212024080210211210665271124075139072"); + list.add("002212024080210233610665271731604127744"); + list.add("002212024080210345810665274589423579136"); + list.add("002212024080211333210665289328886554624"); + list.add("002212024080212193410665300914728271872"); + list.add("002212024080212372010665305386619699200"); + list.add("002212024080213004610665311281768816640"); + list.add("002212024080213220210665316634561327104"); + list.add("002212024080214022710665326804091977728"); + list.add("002212024080214050010665327445220704256"); + list.add("002212024080214114610665329150380466176"); + list.add("002212024080214151510665330026138558464"); + list.add("002212024080214223110665331854134456320"); + list.add("002212024080214283010665333361139892224"); + list.add("002212024080214350610665335020519403520"); + list.add("002212024080214512110665339113114664960"); + list.add("002212024080215034410665342228779352064"); + list.add("002212024080215093910665343715997868032"); + list.add("002212024080215203110665346449251418112"); + list.add("002212024080215341110665349888488620032"); + list.add("002212024080215390810665351134304501760"); + list.add("002212024080216102710665359016776105984"); + list.add("002212024080216155910665360410954555392"); + list.add("002212024080216201310665361475100934144"); + list.add("002212024080216321310665364496530735104"); + list.add("002212024080216454410665367898734931968"); + list.add("002212024080216492010665368802691506176"); + list.add("002212024080217063510665373144279515136"); + list.add("002212024080217155110665375477394800640"); + list.add("002212024080217433010665382435747999744"); + list.add("002212024080217484410665383750525509632"); + list.add("002212024080218032710665387454144643072"); + list.add("002212024080218115610665389589846679552"); + list.add("002212024080218141110665390154025123840"); + list.add("002212024080218142310665390207798005760"); + list.add("002212024080218392510665396504942182400"); + list.add("002212024080218535710665400161620713472"); + list.add("002212024080218571810665401007111888896"); + list.add("002212024080219060910665403231725412352"); + list.add("002212024080219495310665414241440620544"); + list.add("002212024080220015110665417250660626432"); + list.add("002212024080220135810665420301967785984"); + list.add("002212024080220403710665427005615878144"); + list.add("002212024080220441510665427920991772672"); + list.add("002212024080221294010665439350487449600"); + list.add("002212024080221581110665446529006485504"); + list.add("002212024080222064310665448676009566208"); + list.add("002212024080303041710665523558944550912"); + list.add("002212024080308162710665602119980527616"); + list.add("002212024080309092510665615448547901440"); + list.add("002212024080309125710665616336617680896"); + list.add("002212024080309314610665621074962292736"); + list.add("002212024080309524710665626361571672064"); + list.add("002212024080310180810665632743369220096"); + list.add("002212024080310331610665636552024899584"); + list.add("002212024080310422210665638841287114752"); + list.add("002212024080311412910665653716406099968"); + list.add("002212024080312043510665659529736433664"); + list.add("002212024080312090510665660664467632128"); + list.add("002212024080312105210665661111254614016"); + list.add("002212024080312540410665671981626941440"); + list.add("002212024080313212910665678885270970368"); + list.add("002212024080313445410665684776936914944"); + list.add("002212024080313580610665688098869530624"); + list.add("002212024080314020010665689080487960576"); + list.add("002212024080314035010665689542944063488"); + list.add("002212024080314161910665692684595167232"); + list.add("002212024080314215410665694089347170304"); + list.add("002212024080314274510665695559727546368"); + list.add("002212024080314341610665697201267867648"); + list.add("002212024080314542410665702267058569216"); + list.add("002212024080315521610665716828467486720"); + list.add("002212024080315540210665717274259410944"); + list.add("002212024080316553910665732779360903168"); + list.add("002212024080317055910665735379597578240"); + list.add("002212024080317185310665738628437835776"); + list.add("002212024080317190510665738676627824640"); + list.add("002212024080317315910665741922796404736"); + list.add("002212024080317395910665743938544152576"); + list.add("002212024080318075610665750969054625792"); + list.add("002212024080318163110665753131443675136"); + list.add("002212024080318322610665757138359910400"); + list.add("002212024080318531910665762393684410368"); + list.add("002212024080319115810665767083973533696"); + list.add("002212024080319454610665775589695664128"); + list.add("002212024080320440510665790267765477376"); + list.add("002212024080320470710665791029984878592"); + list.add("002212024080321452510665805703280443392"); + list.add("002212024080321560210665808372814237696"); + list.add("002212024080400562810665853780193828864"); + list.add("002212024080401033610665855576057847808"); + list.add("002212024080401282610665861825640976384"); + list.add("002212024080401365510665863961000984576"); + list.add("002212024080402241810665875886119329792"); + list.add("002212024080405202110665920190800904192"); + list.add("002212024080406172310665934542809194496"); + list.add("002212024080408054310665961806835986432"); + list.add("002212024080408224910665966108853133312"); + list.add("002212024080408565410665974688557498368"); + list.add("002212024080409131910665978819158409216"); + list.add("002212024080410071210665992379048329216"); + list.add("002212024080410214610665996042642862080"); + list.add("002212024080411165110666009905000726528"); + list.add("002212024080411333610666014120597749760"); + list.add("002212024080411351010666014513695154176"); + list.add("002212024080411492710666018109418471424"); + list.add("002212024080411535710666019244328812544"); + list.add("002212024080412042810666021889539579904"); + list.add("002212024080412065410666022503438868480"); + list.add("002212024080412312210666028657940836352"); + list.add("002212024080412422810666031451671896064"); + list.add("002212024080412543910666034517279965184"); + list.add("002212024080414385910666060772805148672"); + list.add("002212024080415292810666073477954600960"); + list.add("002212024080416023210666081799051096064"); + list.add("002212024080416214210666086623131140096"); + list.add("002212024080416564310666095435551789056"); + list.add("002212024080417261710666102875463548928"); + list.add("002212024080417283010666103435180834816"); + list.add("002212024080417312710666104175659241472"); + list.add("002212024080417322410666104416193675264"); + list.add("002212024080417355710666105308291383296"); + list.add("002212024080417523310666109488152805376"); + list.add("002212024080417553510666110251735826432"); + list.add("002212024080417595710666111350671343616"); + list.add("002212024080418094310666113805454901248"); + list.add("002212024080418375110666120887968387072"); + list.add("002212024080419043310666127608176623616"); + list.add("002212024080419045310666127690422730752"); + list.add("002212024080419203010666131618770108416"); + list.add("002212024080422071110666173567684235264"); + list.add("002212024080422564010666186019733950464"); + list.add("002212024080423021510666187427632578560"); + list.add("002212024080423501610666199510433640448"); + list.add("002212024080501521810666230221972885504"); + list.add("002212024080502031310666232967372144640"); + list.add("002212024080504283910666269567132291072"); + list.add("002212024080506023210666293192582201344"); + list.add("002212024080508185010666327494886621184"); + list.add("002212024080509495110666350401487732736"); + list.add("002212024080509590310666352716702015488"); + list.add("002212024080510165910666357227676741632"); + list.add("002212024080510353910666361925253685248"); + list.add("002212024080511000510666368075780771840"); + list.add("002212024080511042310666369155222953984"); + list.add("002212024080511442110666379213052690432"); + list.add("002212024080512190810666387966120542208"); + list.add("002212024080512483610666395384411258880"); + list.add("002212024080512581110666397796035907584"); + list.add("002212024080513161810666402354884763648"); + list.add("002212024080513415510666408802698604544"); + list.add("002212024080513495310666410807329751040"); + list.add("002212024080514051110666414658317418496"); + list.add("002212024080514254810666419844345085952"); + list.add("002212024080514354710666422356600356864"); + list.add("002212024080514410810666423704668844032"); + list.add("002212024080514520110666426444328304640"); + list.add("002212024080515063310666430098074730496"); + list.add("002212024080515171310666432784269246464"); + list.add("002212024080515272410666435347695280128"); + list.add("002212024080515443210666439657584275456"); + list.add("002212024080516030410666444322064154624"); + list.add("002212024080516311810666451427728740352"); + list.add("002212024080516452310666454973769179136"); + list.add("002212024080518111710666476591483043840"); + list.add("002212024080518315310666481772834009088"); + list.add("002212024080519393010666498792096538624"); + list.add("002212024080519432210666499763158761472"); + list.add("002212024080520112810666506833171263488"); + list.add("002212024080520285610666511231835537408"); + list.add("002212024080601094010666581877453086720"); + list.add("002212024080602203810666599740264636416"); + list.add("002212024080604170410666629038563590144"); + list.add("002212024080604230710666630561827094528"); + list.add("002212024080605020810666640383466254336"); + list.add("002212024080605374310666649337389744128"); + list.add("002212024080609305010666708001655980032"); + list.add("002212024080610080210666717361663574016"); + list.add("002212024080610361410666724462076633088"); + list.add("002212024080611430110666741265966772224"); + list.add("002212024080611494310666742953381396480"); + list.add("002212024080611502910666743147056185344"); + list.add("002212024080613130210666763919736418304"); + list.add("002212024080613222510666766280198832128"); + list.add("002212024080613403210666770839141449728"); + list.add("002212024080613482910666772841372155904"); + list.add("002212024080614243010666781907290341376"); + list.add("002212024080614501310666788376784363520"); + list.add("002212024080614552310666789677732454400"); + list.add("002212024080614595110666790801674461184"); + list.add("002212024080615055810666792341081653248"); + list.add("002212024080615061810666792426223288320"); + list.add("002212024080615260310666797393876856832"); + list.add("002212024080615474210666802844591116288"); + list.add("002212024080615514010666803839777820672"); + list.add("002212024080616045310666807167221940224"); + list.add("002212024080616501310666818575674490880"); + list.add("002212024080616550610666819803656159232"); + list.add("002212024080617201910666826151189204992"); + list.add("002212024080617234810666827028332535808"); + list.add("002212024080617361710666830171178229760"); + list.add("002212024080618352710666845060948230144"); + list.add("002212024080619192110666856105608839168"); + list.add("002212024080619395710666861291127971840"); + list.add("002212024080621254010666887897211416576"); + list.add("002212024080621335810666889982712139776"); + list.add("002212024080621401110666891550591401984"); + list.add("002212024080622534110666910044120395776"); + list.add("002212024080623570210666925989803442176"); + list.add("002212024080702201810666962041185697792"); + list.add("002212024080705102610667004858573111296"); + list.add("002212024080708482810667059727228710912"); + list.add("002212024080709163110667066785783570432"); + list.add("002212024080712271810667114799679852544"); + list.add("002212024080712291110667115274827386880"); + list.add("002212024080713013110667123411014918144"); + list.add("002212024080713165710667127294088642560"); + list.add("002212024080713261610667129636883451904"); + list.add("002212024080713303510667130724762370048"); + list.add("002212024080713393510667132989553704960"); + list.add("002212024080713451510667134417240772608"); + list.add("002212024080714032810667139000873353216"); + list.add("002212024080714261910667144749458710528"); + list.add("002212024080715182910667157878802071552"); + list.add("002212024080715340410667161801787498496"); + list.add("002212024080715434010667164217245532160"); + list.add("002212024080715523810667166471036428288"); + list.add("002212024080716304310667176058931437568"); + list.add("002212024080717040410667184450251874304"); + list.add("002212024080718210610667203837482881024"); + list.add("002212024080720250510667235036944498688"); + list.add("002212024080720322910667236898726047744"); + list.add("002212024080723012010667274358363840512"); + list.add("002212024080802491010667331693869387776"); + list.add("002212024080808025410667410649889955840"); + list.add("002212024080808313010667417845853294592"); + list.add("002212024080808552810667423875851563008"); + list.add("002212024080809015510667425500338515968"); + list.add("002212024080809502910667437722733961216"); + list.add("002212024080810262410667446763367489536"); + list.add("002212024080811365810667464519517155328"); + list.add("002212024080811412810667465654613368832"); + list.add("002212024080811502310667467898144014336"); + list.add("002212024080811563810667469470052999168"); + list.add("002212024080812231010667476146765791232"); + list.add("002212024080812275910667477358762876928"); + list.add("002212024080812421810667480963001974784"); + list.add("002212024080812565010667484619310989312"); + list.add("002212024080813095010667487889055383553"); + list.add("002212024080813263710667492115130281984"); + list.add("002212024080813440310667496501861101568"); + list.add("002212024080813565110667499721584472064"); + list.add("002212024080814212110667505888473559040"); + list.add("002212024080814253410667506951025258496"); + list.add("002212024080814310610667508343907201024"); + list.add("002212024080814420210667511094261551104"); + list.add("002212024080814422710667511200335499264"); + list.add("002212024080814553710667514510159310848"); + list.add("002212024080815174210667520070443917312"); + list.add("002212024080815215210667521118453686272"); + list.add("002212024080815575310667530182065242112"); + list.add("002212024080816361110667539818737401856"); + list.add("002212024080816392610667540640173481984"); + list.add("002212024080816402010667540866507444224"); + list.add("002212024080817232510667551708565417984"); + list.add("002212024080818022410667561519670743040"); + list.add("002212024080818304110667568634427662336"); + list.add("002212024080818570010667575258180939776"); + list.add("002212024080819401210667586128558919680"); + list.add("002212024080819452510667587442633781248"); + list.add("002212024080820043710667592275754024960"); + list.add("002212024080820163610667595289149239296"); + list.add("002212024080820545110667604915368607744"); + list.add("002212024080823193110667641324547137536"); + list.add("002212024080902265810667688495754608640"); + list.add("002212024080902545510667695527764221952"); + list.add("002212024080904433010667722854777577472"); + list.add("002212024080906582610667756810848907264"); + list.add("002212024080909350010667796213585264640"); + list.add("002212024080909533210667800876103827456"); + list.add("002212024080910491710667814906090459136"); + list.add("002212024080911162910667821755296964608"); + list.add("002212024080911325910667825907358851072"); + list.add("002212024080911490910667829975219933184"); + list.add("002212024080911492310667830031538630656"); + list.add("002212024080911541410667831255008997376"); + list.add("002212024080911541910667831272344358912"); + list.add("002212024080911575810667832190995361792"); + list.add("002212024080912191810667837562428182528"); + list.add("002212024080912403310667842909818531840"); + list.add("002212024080912483110667844915238862848"); + list.add("002212024080913041710667848881661919232"); + list.add("002212024080913193810667852743959310336"); + list.add("002212024080913194610667852778505338880"); + list.add("002212024080913233310667853731039076352"); + list.add("002212024080913252610667854203618709504"); + list.add("002212024080913293010667855228746952704"); + list.add("002212024080913303510667855499504332800"); + list.add("002212024080913330410667856124862476288"); + list.add("002212024080913455510667859361428115456"); + list.add("002212024080914041110667863954462027776"); + list.add("002212024080914120310667865935332343808"); + list.add("002212024080914265810667869688310587392"); + list.add("002212024080915011110667878299966828544"); + list.add("002212024080915020610667878529691353088"); + list.add("002212024080915110910667880810630729728"); + list.add("002212024080915231910667883870716223488"); + list.add("002212024080915374810667887515553468416"); + list.add("002212024080916065410667894840477585408"); + list.add("002212024080916243610667899294173818880"); + list.add("002212024080917021310667908759541485568"); + list.add("002212024080917280410667915266046656512"); + list.add("002212024080917283610667915401071017984"); + list.add("002212024080917385710667918006131720192"); + list.add("002212024080917470410667920045979938816"); + list.add("002212024080918222110667928925300948992"); + list.add("002212024080918551010667937183354175488"); + list.add("002212024080918571410667937704577425408"); + list.add("002212024080919052510667939763110641664"); + list.add("002212024080919320910667946492542816256"); + list.add("002212024080919380410667947979253055488"); + list.add("002212024080919571110667952790359359488"); + list.add("002212024080920243610667959692482433024"); + list.add("002212024080920365310667962781373755392"); + list.add("002212024080920492810667965947836694528"); + list.add("002212024080921011610667968920285057024"); + list.add("002212024080921340810667977190263140352"); + list.add("002212024080921480910667980716171522048"); + list.add("002212024080921594510667983637971963904"); + list.add("002212024081003250910668065525961035776"); + list.add("002212024081004284310668081521272745984"); + list.add("002212024081007255010668126096408772608"); + list.add("002212024081007421110668130209682800640"); + list.add("002212024081009242710668155945002586112"); + list.add("002212024081009535910668163379845230592"); + list.add("002212024081009562610668163995149627392"); + list.add("002212024081010294210668172367766401024"); + list.add("002212024081010302410668172545372782592"); + list.add("002212024081011061310668181558174273536"); + list.add("002212024081011531010668193374540759040"); + list.add("002212024081012004310668195271155879936"); + list.add("002212024081012221210668200678343688192"); + list.add("002212024081012382710668204769365819392"); + list.add("002212024081012442210668206257195286528"); + list.add("002212024081012585610668209922465161216"); + list.add("002212024081013022810668210811524972544"); + list.add("002212024081013043610668211348372258816"); + list.add("002212024081013180610668214745624281088"); + list.add("002212024081013490810668222557000945664"); + list.add("002212024081013522610668223387001257984"); + list.add("002212024081014051710668226620649472000"); + list.add("002212024081014401010668235398563090432"); + list.add("002212024081014445310668236585786880000"); + list.add("002212024081015205710668245665027809280"); + list.add("002212024081015262210668247026286145536"); + list.add("002212024081015343410668249088980770816"); + list.add("002212024081016092910668257876277051392"); + list.add("002212024081016352010668264380398759936"); + list.add("002212024081016355310668264522415837184"); + list.add("002212024081017045110668271812546367488"); + list.add("002212024081018200010668290720659501056"); + list.add("002212024081018351810668294573772038144"); + list.add("002212024081019000410668300807672520704"); + list.add("002212024081019045810668302037707624448"); + list.add("002212024081019132210668304154714529792"); + list.add("002212024081019201110668305868646723584"); + list.add("002212024081019204710668306020817670144"); + list.add("002212024081019361510668309912280481792"); + list.add("002212024081021330710668339322446741504"); + list.add("002212024081022193210668351004296056832"); + list.add("002212024081022351210668354947799175168"); + list.add("002212024081101193910668396332717015040"); + list.add("002212024081102412710668416914698129408"); + list.add("002212024081106130810668470186784559104"); + list.add("002212024081106203910668472078862450688"); + list.add("002212024081106301110668474481311801344"); + list.add("002212024081106363810668476102712287232"); + list.add("002212024081106401610668477014926921728"); + list.add("002212024081106423110668477583490232320"); + list.add("002212024081106442310668478052458737664"); + list.add("002212024081107164910668486215759532032"); + list.add("002212024081108500110668509670922878976"); + list.add("002212024081109212610668517576490848256"); + list.add("002212024081109292110668519566018437120"); + list.add("002212024081109412910668522622886260736"); + list.add("002212024081109443310668523394556727296"); + list.add("002212024081111274510668549365485891584"); + list.add("002212024081111334610668550878459658240"); + list.add("002212024081112033710668558388659838976"); + list.add("002212024081113052110668573925315239936"); + list.add("002212024081113071410668574398197501952"); + list.add("002212024081113222610668578225461514240"); + list.add("002212024081113443610668583802839855104"); + list.add("002212024081113560710668586703196356608"); + list.add("002212024081114190810668592493691334656"); + list.add("002212024081115003510668602926779916288"); + list.add("002212024081115050310668604048988532736"); + list.add("002212024081115402010668612929247043584"); + list.add("002212024081115421310668613402110525440"); + list.add("002212024081115575010668617333729103872"); + list.add("002212024081116212310668623257915211776"); + list.add("002212024081116491910668630287262388224"); + list.add("002212024081117085710668635232123019264"); + list.add("002212024081117125010668636208560254976"); + list.add("002212024081117321710668641102336331776"); + list.add("002212024081117380010668642541875351552"); + list.add("002212024081117473410668644946984013824"); + list.add("002212024081118131810668651426396594176"); + list.add("002212024081118363010668657263781728256"); + list.add("002212024081118394810668658095298359296"); + list.add("002212024081118452810668659520506023936"); + list.add("002212024081119082110668665276622090240"); + list.add("002212024081119200710668668237850988544"); + list.add("002212024081119243310668669356159909888"); + list.add("002212024081119392410668673093475094528"); + list.add("002212024081120191210668683108023894016"); + list.add("002212024081120333310668686720689156096"); + list.add("002212024081120405310668688565791424512"); + list.add("002212024081120470810668690136223801344"); + list.add("002212024081121050110668694639610257408"); + list.add("002212024081122010410668708745313226752"); + list.add("002212024081122305010668716232835510272"); + list.add("002212024081201200010668758805243990016"); + list.add("002212024081202215310668774382098280448"); + list.add("002212024081208110710668862266700558336"); + list.add("002212024081208150810668863277108269056"); + list.add("002212024081209482710668886761105874944"); + list.add("002212024081209593210668889552820727808"); + list.add("002212024081210522110668902844377042944"); + list.add("002212024081211380510668914353231159296"); + list.add("002212024081211592510668919720750583808"); + list.add("002212024081212053810668921285809127424"); + list.add("002212024081212284910668927120206299136"); + list.add("002212024081213215310668940474241875968"); + list.add("002212024081213271410668941820800184320"); + list.add("002212024081213400210668945043156484096"); + list.add("002212024081213420810668945571223011328"); + list.add("002212024081213484510668947234078560256"); + list.add("002212024081213495710668947539752484864"); + list.add("002212024081213511610668947870276620288"); + list.add("002212024081214304110668957787465302016"); + list.add("002212024081214412510668960490947174400"); + list.add("002212024081214560110668964164608651264"); + list.add("002212024081215152710668969053223452672"); + list.add("002212024081215422010668975821578362880"); + list.add("002212024081216003010668980392123666432"); + list.add("002212024081216232610668986164098035712"); + list.add("002212024081217154710668999339711328256"); + list.add("002212024081217155310668999364178984960"); + list.add("002212024081217172110668999729857097728"); + list.add("002212024081217182510669000000175796224"); + list.add("002212024081217231110669001200040882176"); + list.add("002212024081217414810669005885425758208"); + list.add("002212024081218031310669011274895028224"); + list.add("002212024081218225310669016223554588672"); + list.add("002212024081218532410669023904177946624"); + list.add("002212024081219004410669025749778104320"); + list.add("002212024081219162910669029714316288000"); + list.add("002212024081219202210669030689491619840"); + list.add("002212024081219465610669037376271118336"); + list.add("002212024081219590510669040433235062784"); + list.add("002212024081220173510669045087873622016"); + list.add("002212024081220245510669046933137043456"); + list.add("002212024081220315510669048697127088128"); + list.add("002212024081222471510669082755191070720"); + list.add("002212024081223021510669086529090314240"); + list.add("002212024081223194310669090924252422144"); + list.add("002212024081300011110669101358962618368"); + list.add("002212024081300283310669108246639210496"); + list.add("002212024081304494410669173974388150272"); + list.add("002212024081309045810669238209035751424"); + list.add("002212024081309231910669242825882324992"); + list.add("002212024081310512610669265002396504064"); + list.add("002212024081310543010669265772634935296"); + list.add("002212024081311145110669270895572258816"); + list.add("002212024081311210710669272468786442240"); + list.add("002212024081311412410669277575118962688"); + list.add("002212024081312035610669283245977210880"); + list.add("002212024081312500710669294867963011072"); + list.add("002212024081312532010669295679427547136"); + list.add("002212024081313251910669303726297677824"); + list.add("002212024081313280310669304414745755648"); + list.add("002212024081313484410669309621279457280"); + list.add("002212024081314301910669320082529017856"); + list.add("002212024081314365710669321754465243136"); + list.add("002212024081314394010669322435989311488"); + list.add("002212024081315140110669331082623934464"); + list.add("002212024081315250510669333866354139136"); + list.add("002212024081315350610669336386869723136"); + list.add("002212024081316310110669350461496569856"); + list.add("002212024081316340510669351230767198208"); + list.add("002212024081316520710669355769381613568"); + list.add("002212024081316592910669357625566134272"); + list.add("002212024081317073710669359668385873920"); + list.add("002212024081317563010669371972120571904"); + list.add("002212024081317590810669372634905796608"); + list.add("002212024081318000910669372890114785280"); + list.add("002212024081318060610669374387898667008"); + list.add("002212024081318072110669374702887038976"); + list.add("002212024081318283910669380064224833536"); + list.add("002212024081318303210669380538628018176"); + list.add("002212024081318384210669382593199681536"); + list.add("002212024081318500710669385465488834560"); + list.add("002212024081318544810669386643735937024"); + list.add("002212024081319015610669388439426117632"); + list.add("002212024081319254510669394431360077824"); + list.add("002212024081320030010669403805627920384"); + list.add("002212024081320121610669406138784477184"); + list.add("002212024081320402010669413203991183360"); + list.add("002212024081320453610669414529683107840"); + list.add("002212024081321035310669419129812385792"); + list.add("002212024081321385510669427945539342336"); + list.add("002212024081323114910669451323022946304"); + list.add("002212024081401193510669483477956886528"); + list.add("002212024081406324710669562298277916672"); + list.add("002212024081408104510669586950488297472"); + list.add("002212024081408161110669588320069562368"); + list.add("002212024081409371010669608699237597184"); + list.add("002212024081410311610669622313806528512"); + list.add("002212024081410424110669625188332834816"); + list.add("002212024081411330510669637870372433920"); + list.add("002212024081411422710669640228558962688"); + list.add("002212024081411582410669644241326923776"); + list.add("002212024081412113210669647545528659968"); + list.add("002212024081412573910669659150237511680"); + list.add("002212024081413190010669664526980464640"); + list.add("002212024081413332410669668147474530304"); + list.add("002212024081414030410669675614206222336"); + list.add("002212024081414312410669682745420255232"); + list.add("002212024081416311710669712916524740608"); + list.add("002212024081416361310669714155138805760"); + list.add("002212024081417473010669732096660062208"); + list.add("002212024081417482010669732306207469568"); + list.add("002212024081418035210669736212799012864"); + list.add("002212024081418222210669740870588751872"); + list.add("002212024081419303210669758023860576256"); + list.add("002212024081419385510669760132881149952"); + list.add("002212024081419475810669762412710256640"); + list.add("002212024081420435110669776476881670144"); + list.add("002212024081508223210669952304580325376"); + list.add("002212024081508411710669957024677801984"); + list.add("002212024081508595610669961717060415488"); + list.add("002212024081509512210669974661518946304"); + list.add("002212024081510000510669976855456108544"); + list.add("002212024081511442010670003090716856320"); + list.add("002212024081511453310670003395982098432"); + list.add("002212024081511485610670004245062676480"); + list.add("002212024081511495310670004487397629952"); + list.add("002212024081511561010670006065033469952"); + list.add("002212024081512421610670017668468015104"); + list.add("002212024081513082210670024236038287360"); + list.add("002212024081514194610670042206877372416"); + list.add("002212024081515010410670052600021368832"); + list.add("002212024081515130010670055603639595008"); + list.add("002212024081515135110670055816771518464"); + list.add("002212024081515181110670056908062523392"); + list.add("002212024081516102610670070055734435840"); + list.add("002212024081516190110670072213811466240"); + list.add("002212024081516375310670076962279493632"); + list.add("002212024081517123210670085683821469696"); + list.add("002212024081517204410670087747150905344"); + list.add("002212024081517343010670091209521037312"); + list.add("002212024081517424410670093281946861568"); + list.add("002212024081517512410670095464969601024"); + list.add("002212024081518201710670102732796424192"); + list.add("002212024081518230910670103453287510016"); + list.add("002212024081519083810670114902681006080"); + list.add("002212024081519191510670117571079892992"); + list.add("002212024081519222410670118365992497152"); + list.add("002212024081519533010670126191930699776"); + list.add("002212024081520005810670128072351383552"); + list.add("002212024081521024910670143634692751360"); + list.add("002212024081521232210670148806412189696"); + list.add("002212024081606421610670289458420629504"); + list.add("002212024081607233610670299860747747328"); + list.add("002212024081607284610670301162578063360"); + list.add("002212024081611145210670358059802755072"); + list.add("002212024081612151510670373258689343488"); + list.add("002212024081612163710670373602760683520"); + list.add("002212024081612444310670380674516631552"); + list.add("002212024081613114710670387483918303232"); + list.add("002212024081613224010670390222652768256"); + list.add("002212024081613232710670390422058135552"); + list.add("002212024081613265410670391286923100160"); + list.add("002212024081614030810670400408841039872"); + list.add("002212024081614171810670403974289260544"); + list.add("002212024081614451410670411002042331136"); + list.add("002212024081614541310670413263479857152"); + list.add("002212024081615091810670417059379793920"); + list.add("002212024081615504810670427503509209088"); + list.add("002212024081616000310670429830685749248"); + list.add("002212024081616254310670436287820431360"); + list.add("002212024081616331810670438198463225856"); + list.add("002212024081617054210670446353451757568"); + list.add("002212024081617362810670454096099192832"); + list.add("002212024081618175910670464541565333504"); + list.add("002212024081618224810670465753762729984"); + list.add("002212024081619363110670484304710307840"); + list.add("002212024081619374810670484629554376704"); + list.add("002212024081619491710670487520081969152"); + list.add("002212024081621312510670513220540116992"); + list.add("002212024081622391810670530306019516416"); + list.add("002212024081623080410670537544067362816"); + list.add("002212024081623204910670540751059386368"); + list.add("002212024081623294810670543014356156416"); + list.add("002212024081623345110670544283342045184"); + list.add("002212024081623410110670545835678818304"); + list.add("002212024081700004110670550786296610816"); + list.add("002212024081700193210670555530503225344"); + list.add("002212024081701154210670569664637136896"); + list.add("002212024081701452210670577131407900672"); + list.add("002212024081705245210670632370572455936"); + list.add("002212024081707022410670656915062304768"); + list.add("002212024081707232810670662216224575488"); + list.add("002212024081708134610670674875522842624"); + list.add("002212024081708454210670682908471037952"); + list.add("002212024081708524810670684696098582528"); + list.add("002212024081708574410670685939688206336"); + list.add("002212024081709573710670701010011525120"); + list.add("002212024081710020610670702137511440384"); + list.add("002212024081710043710670702771950792704"); + list.add("002212024081710111110670704424149176320"); + list.add("002212024081710193810670706547442909184"); + list.add("002212024081710354410670710600123461632"); + list.add("002212024081711430010670727528745099264"); + list.add("002212024081712043010670732937986666496"); + list.add("002212024081712062310670733413971451904"); + list.add("002212024081712163110670735962120073216"); + list.add("002212024081712292510670739212199903232"); + list.add("002212024081712313910670739773035089920"); + list.add("002212024081712431710670742700643942400"); + list.add("002212024081712543110670745526908981248"); + list.add("002212024081712553910670745813882077184"); + list.add("002212024081713051510670748226926501889"); + list.add("002212024081713133010670750304825217024"); + list.add("002212024081713162910670751054592040960"); + list.add("002212024081713182610670751547673346048"); + list.add("002212024081713252110670753286818336768"); + list.add("002212024081713341010670755505180889088"); + list.add("002212024081713341510670755528136372224"); + list.add("002212024081713452110670758318427287552"); + list.add("002212024081714124410670765208906596352"); + list.add("002212024081714142410670765629614182400"); + list.add("002212024081714353210670770950699597824"); + list.add("002212024081714412810670772442311520256"); + list.add("002212024081714530610670775367974432768"); + list.add("002212024081715082010670779202615443456"); + list.add("002212024081715104310670779803706707968"); + list.add("002212024081715181110670781679974715392"); + list.add("002212024081715243510670783291413147648"); + list.add("002212024081715275510670784132059086848"); + list.add("002212024081715295210670784623635922944"); + list.add("002212024081715384710670786865738121216"); + list.add("002212024081715533610670790594973499392"); + list.add("002212024081716255610670798730817789952"); + list.add("002212024081716292210670799597804306432"); + list.add("002212024081717131010670810619147026432"); + list.add("002212024081717175010670811792625602561"); + list.add("002212024081718065210670824131347931136"); + list.add("002212024081718151210670826229141659648"); + list.add("002212024081718294410670829887559421952"); + list.add("002212024081718505710670835224647741440"); + list.add("002212024081719100510670840042880208896"); + list.add("002212024081719243910670843708845162496"); + list.add("002212024081720084110670854788960337920"); + list.add("002212024081720340910670861199140286464"); + list.add("002212024081721322610670875863739887616"); + list.add("002212024081723012710670898266643222528"); + list.add("002212024081801513510670941080610115584"); + list.add("002212024081801564510670942383308603392"); + list.add("002212024081802063610670944862099570688"); + list.add("002212024081802480110670955285536927744"); + list.add("002212024081804102510670976019943227392"); + list.add("002212024081808081910671035889879711744"); + list.add("002212024081808420910671044403943538688"); + list.add("002212024081809114110671051836242358272"); + list.add("002212024081810060310671065517019222016"); + list.add("002212024081810383410671073703166447616"); + list.add("002212024081812063210671095841585819648"); + list.add("002212024081812233110671100113163743232"); + list.add("002212024081812444810671105469440823296"); + list.add("002212024081812493710671106680195502080"); + list.add("002212024081812590810671109078119677952"); + list.add("002212024081813320210671117354777509888"); + list.add("002212024081813441910671120447598325760"); + list.add("002212024081813492810671121744806211584"); + list.add("002212024081813544610671123077190443008"); + list.add("002212024081814052210671125746774294528"); + list.add("002212024081814233910671130345882615808"); + list.add("002212024081814261410671130997240160256"); + list.add("002212024081814343010671133075381010432"); + list.add("002212024081814393610671134360525778944"); + list.add("002212024081814451610671135784379559936"); + list.add("002212024081814481910671136552465436672"); + list.add("002212024081814580110671138996187942912"); + list.add("002212024081815111610671142328609595392"); + list.add("002212024081815251610671145854508658688"); + list.add("002212024081816461410671166226547458048"); + list.add("002212024081816472310671166519652069376"); + list.add("002212024081817101810671172284259303424"); + list.add("002212024081817183210671174357431713792"); + list.add("002212024081817270610671176513073283072"); + list.add("002212024081817335610671178231838904320"); + list.add("002212024081818020210671185305787813888"); + list.add("002212024081818123410671187953762271232"); + list.add("002212024081818152510671188672878931968"); + list.add("002212024081818294510671192279494135808"); + list.add("002212024081819070910671201692962902016"); + list.add("002212024081819333010671208320330203136"); + list.add("002212024081819374810671209405623537664"); + list.add("002212024081820030510671215768414121984"); + list.add("002212024081821244510671236317307383808"); + list.add("002212024081821245110671236343876665344"); + list.add("002212024081822243410671251374234071040"); + list.add("002212024081823443010671271488453197824"); + list.add("002212024081900300110671282944504090624"); + list.add("002212024081900322510671283547138785280"); + list.add("002212024081900353510671284342715695104"); + list.add("002212024081908071610671398014695862272"); + list.add("002212024081910351710671435264874196992"); + list.add("002212024081910435810671437447325216768"); + list.add("002212024081911134710671444952040456192"); + list.add("002212024081911234610671447465929969664"); + list.add("002212024081911422910671452173836312576"); + list.add("002212024081912283210671463762054709248"); + list.add("002212024081912341810671465214669840384"); + list.add("002212024081912401810671466723921199104"); + list.add("002212024081913101210671474250156957696"); + list.add("002212024081913143310671475343957110784"); + list.add("002212024081913382210671481339695427584"); + list.add("002212024081913430610671482528406011904"); + list.add("002212024081913535310671485243749629952"); + list.add("002212024081914084010671488962858418176"); + list.add("002212024081914284110671494000782462976"); + list.add("002212024081914333610671495236560715776"); + list.add("002212024081914491110671499159554084864"); + list.add("002212024081915052110671503229866070016"); + list.add("002212024081915190910671506701626585088"); + list.add("002212024081915432710671512816254922752"); + list.add("002212024081915535310671515443889909760"); + list.add("002212024081915561110671516020583284736"); + list.add("002212024081915582010671516560687464448"); + list.add("002212024081915585010671516689658871808"); + list.add("002212024081916095810671519487463620608"); + list.add("002212024081916110210671519757666185216"); + list.add("002212024081916242910671523141173350400"); + list.add("002212024081916253210671523405305806848"); + list.add("002212024081916321210671525085665267712"); + list.add("002212024081916544010671530738913497088"); + list.add("002212024081916544910671530776842924032"); + list.add("002212024081917052010671533421342871552"); + list.add("002212024081917071510671533905566588928"); + list.add("002212024081917101310671534650161573888"); + list.add("002212024081917174010671536526824927232"); + list.add("002212024081918051610671548504739590144"); + list.add("002212024081918124110671550371453263872"); + list.add("002212024081918233410671553111992156160"); + list.add("002212024081918531810671560592468795392"); + list.add("002212024081919070910671564077964431360"); + list.add("002212024081919363010671571465918189568"); + list.add("002212024081919580510671576895895228416"); + list.add("002212024081920204010671582579936653312"); + list.add("002212024081921355510671601515843481600"); + list.add("002212024081921492210671604903077593088"); + list.add("002212024082000155510671641784572391424"); + list.add("002212024082002042910671669103782625280"); + list.add("002212024082005095010671715749411278848"); + list.add("002212024082005125310671716517647024128"); + list.add("002212024082007122810671746609782808576"); + list.add("002212024082009145410671777421578567680"); + list.add("002212024082009350610671782504368631808"); + list.add("002212024082010105110671791500769984512"); + list.add("002212024082011204410671809090011627520"); + list.add("002212024082011513710671816860424941568"); + list.add("002212024082012274110671825936938500096"); + list.add("002212024082012305610671826753827995648"); + list.add("002212024082013034510671835014838063104"); + list.add("002212024082013080010671836083545538560"); + list.add("002212024082013185810671838844615458816"); + list.add("002212024082013250410671840379576897536"); + list.add("002212024082013372610671843490339581952"); + list.add("002212024082013472210671845988735479808"); + list.add("002212024082014134310671852622924857344"); + list.add("002212024082014213610671854606627581952"); + list.add("002212024082014220810671854739446132736"); + list.add("002212024082014302010671856804941180928"); + list.add("002212024082015110810671867073230655488"); + list.add("002212024082015361410671873389891215360"); + list.add("002212024082016160510671883418297761792"); + list.add("002212024082016564010671893629760368640"); + list.add("002212024082017241110671900553977122816"); + list.add("002212024082018112910671912456319991808"); + list.add("002212024082018491410671921959431426048"); + list.add("002212024082019420910671935276813180928"); + list.add("002212024082020204710671944996808146944"); + list.add("002212024082020453810671951253023461376"); + list.add("002212024082021402910671965056562167808"); + list.add("002212024082101552110672029192848789504"); + list.add("002212024082108503810672133702554841088"); + list.add("002212024082110424010672161897670701056"); + list.add("002212024082110581810672165830275600384"); + list.add("002212024082111252910672172670472392704"); + list.add("002212024082111513010672179219942838272"); + list.add("002212024082111534110672179768360669184"); + list.add("002212024082112182410672185990444310528"); + list.add("002212024082113011010672196750814072832"); + list.add("002212024082113064210672198142855315456"); + list.add("002212024082114463010672223261089652736"); + list.add("002212024082115543210672240383268028416"); + list.add("002212024082116230610672247568475684864"); + list.add("002212024082116265710672248537489575936"); + list.add("002212024082116403910672251986384465920"); + list.add("002212024082118420910672282565320085504"); + list.add("002212024082118455210672283500100423680"); + list.add("002212024082119092210672289412814966784"); + list.add("002212024082119162310672291178815512576"); + list.add("002212024082120552410672316096606732288"); + list.add("002212024082122500510672344958887321600"); + list.add("002212024082200585710672377389260042240"); + list.add("002212024082202510710672405615587459072"); + list.add("002212024082205351910672446936411246592"); + list.add("002212024082208533510672496834867458048"); + list.add("002212024082210172510672517929806159872"); + list.add("002212024082211272710672535553908244480"); + list.add("002212024082211312810672536566183849984"); + list.add("002212024082211442510672539826464141312"); + list.add("002212024082211470610672540498856861696"); + list.add("002212024082214095410672576437038002176"); + list.add("002212024082214370510672583276149288960"); + list.add("002212024082214484610672586218227466240"); + list.add("002212024082215202110672594164802748416"); + list.add("002212024082215272210672595933436641280"); + list.add("002212024082215451110672600417142669312"); + list.add("002212024082216280410672611206149758976"); + list.add("002212024082216364910672613410956029952"); + list.add("002212024082217035210672620216928231424"); + list.add("002212024082217140410672622786121273344"); + list.add("002212024082217384110672628979766226944"); + list.add("002212024082218140710672637894658736128"); + list.add("002212024082218172010672638706703069184"); + list.add("002212024082218185410672639101888479232"); + list.add("002212024082219000610672649467777835008"); + list.add("002212024082219092310672651804319625216"); + list.add("002212024082219500610672662051264106496"); + list.add("002212024082219542010672663117900476416"); + list.add("002212024082220200210672669582861623296"); + list.add("002212024082221083110672681787368058880"); + list.add("002212024082221491410672692032247402496"); + list.add("002212024082221491810672692048205242368"); + list.add("002212024082222014410672695179089600512"); + list.add("002212024082222221210672700328977989632"); + list.add("002212024082302061010672756690242592768"); + list.add("002212024082306523410672828764729208832"); + list.add("002212024082307400110672840706617573376"); + list.add("002212024082308141410672849317102714880"); + list.add("002212024082310002410672876034359148544"); + list.add("002212024082310552010672889860714725376"); + list.add("002212024082311011910672891365742403584"); + list.add("002212024082311291710672898406521044992"); + list.add("002212024082312140910672909693823279104"); + list.add("002212024082312235910672912171441684480"); + list.add("002212024082312392510672916054826123264"); + list.add("002212024082312560210672920235689496576"); + list.add("002212024082312564810672920427732496384"); + list.add("002212024082313182410672925865470164992"); + list.add("002212024082313280910672928317283708928"); + list.add("002212024082313345810672930032807694336"); + list.add("002212024082313524310672934502337179648"); + list.add("002212024082313574010672935747361566720"); + list.add("002212024082314272610672943237681926144"); + list.add("002212024082314302510672943986406293504"); + list.add("002212024082314400110672946403230912512"); + list.add("002212024082314565010672950636291325952"); + list.add("002212024082315004010672951602831183872"); + list.add("002212024082315095810672953941008613376"); + list.add("002212024082315431310672962309234581504"); + list.add("002212024082315524710672964718359044096"); + list.add("002212024082316030110672967293662433280"); + list.add("002212024082316264110672973249648877568"); + list.add("002212024082316343610672975240594628608"); + list.add("002212024082316432010672977436093485056"); + list.add("002212024082317442710672992816477413376"); + list.add("002212024082318134310673000181658460160"); + list.add("002212024082318413010673007174334128128"); + list.add("002212024082319052610673013198796447744"); + list.add("002212024082319055010673013300145442816"); + list.add("002212024082320581010673041569572753408"); + list.add("002212024082321202710673047175370285056"); + list.add("002212024082321382710673051705302958080"); + list.add("002212024082322111110673059943912607744"); + list.add("002212024082322264010673063841947017216"); + list.add("002212024082323320710673080310533017600"); + list.add("002212024082400353310673096275145089024"); + list.add("002212024082400503810673100071304785920"); + list.add("002212024082401401710673112567752982528"); + list.add("002212024082401511010673115303009865728"); + list.add("002212024082413515310673296679484608512"); + list.add("002212024082414155110673302708300042240"); + list.add("002212024082416040410673329942928683008"); + list.add("002212024082416114410673331874325983232"); + list.add("002212024082416380710673338513939283968"); + list.add("002212024082419015110673374686272724992"); + list.add("002212024082419122910673377362454638592"); + list.add("002212024082419333210673382657427894272"); + list.add("002212024082419504510673386989792894976"); + list.add("002212024082419554210673388234616307712"); + list.add("002212024082419562710673388426954383360"); + list.add("002212024082420005810673389559933214720"); + list.add("002212024082420400710673399413550739456"); + list.add("002212024082420590510673404187180625920"); + list.add("002212024082420590610673404193299980288"); + list.add("002212024082421342210673413067494739968"); + list.add("002212024082421473210673416378948079616"); + list.add("002212024082421530810673417788495532032"); + list.add("002212024082422580210673434120149753856"); + list.add("002212024082423402010673444766392119296"); + list.add("002212024082423432010673445520792313856"); + list.add("002212024082500073910673451641854316544"); + list.add("002212024082502064410673481610618073088"); + list.add("002212024082508242410673576653049843712"); + list.add("002212024082510272710673607618244165632"); + list.add("002212024082510405010673610987399979008"); + list.add("002212024082511242610673621957903351808"); + list.add("002212024082511363210673625003889086464"); + list.add("002212024082512263610673637606588174336"); + list.add("002212024082512584710673645705491402752"); + list.add("002212024082513084310673648203606282240"); + list.add("002212024082514002710673661222501347328"); + list.add("002212024082514102110673663712101486592"); + list.add("002212024082514370510673670443307401216"); + list.add("002212024082515352910673685140192751616"); + list.add("002212024082515595810673691300906516480"); + list.add("002212024082516264710673698050618392576"); + list.add("002212024082516324010673699530720710656"); + list.add("002212024082516365510673700598930702336"); + list.add("002212024082517113910673709339983069185"); + list.add("002212024082517233110673712325576269824"); + list.add("002212024082517392810673716341527932928"); + list.add("002212024082518170910673725825269415936"); + list.add("002212024082518551810673735423010889728"); + list.add("002212024082600153310673816018736926720"); + list.add("002212024082605381910673897244331900928"); + list.add("002212024082605415510673898149860573184"); + list.add("002212024082606102310673905314032476160"); + list.add("002212024082607510610673930660142759936"); + list.add("002212024082608481710673945051812904960"); + list.add("002212024082608534710673946436701364224"); + list.add("002212024082609452910673959444868059136"); + list.add("002212024082609595210673963063890243584"); + list.add("002212024082610463510673974821784559616"); + list.add("002212024082611112210673981060432130048"); + list.add("002212024082611404110673988436719788032"); + list.add("002212024082612405510674003596039454720"); + list.add("002212024082612551710674007210526019584"); + list.add("002212024082613032510674009259126050816"); + list.add("002212024082614230710674029313849925632"); + list.add("002212024082614534310674037015166107648"); + list.add("002212024082615140710674042149753622528"); + list.add("002212024082616372310674063105348894720"); + list.add("002212024082617023510674069447236616192"); + list.add("002212024082617251910674075167328477184"); + list.add("002212024082617494710674081326091563008"); + list.add("002212024082617504410674081561622700032"); + list.add("002212024082619191810674103853341696000"); + list.add("002212024082619212010674104361557123072"); + list.add("002212024082620351410674122962621988865"); + list.add("002212024082620481210674126222785073152"); + list.add("002212024082621051610674130518827122688"); + list.add("002212024082621290610674136515282489344"); + list.add("002212024082622492810674156743246835712"); + list.add("002212024082707184110674284890709516288"); + list.add("002212024082709270610674317207794384896"); + list.add("002212024082710150310674329274870157312"); + list.add("002212024082712593810674370692674244608"); + list.add("002212024082713584810674385582413537280"); + list.add("002212024082715511210674413871156817920"); + list.add("002212024082716444310674427339473506304"); + list.add("002212024082717031910674432019516190720"); + list.add("002212024082717340610674439763553964032"); + list.add("002212024082717493810674443676340224000"); + list.add("002212024082718101210674448850159964160"); + list.add("002212024082719560710674475505674186752"); + list.add("002212024082721441610674502721719586816"); + list.add("002212024082807361910674651715794391040"); + list.add("002212024082814415510674758822426083328"); + list.add("002212024082815403010674773565165707264"); + list.add("002212024082820220410674844423546826752"); + list.add("002212024082820373810674848342790750208"); + list.add("002212024082821222510674859611067080704"); + list.add("002212024082822163210674873228287123456"); + list.add("002212024082900035210674900239143178240"); + list.add("002212024082900352410674908175986638848"); + list.add("002212024082911563910675079619899662336"); + list.add("002212024082913390310675105388980727808"); return list; } @@ -1936,6 +2224,10 @@ public class SpringBootTestController { return resultList; } + public List getPaymentIdListForFile() { + return null; + } + @Test public void testClearingWithdraw() { // 保存提现记录 diff --git a/jsowell-admin/src/test/resources/payment_ids b/jsowell-admin/src/test/resources/payment_ids new file mode 100644 index 000000000..830968d23 --- /dev/null +++ b/jsowell-admin/src/test/resources/payment_ids @@ -0,0 +1,1044 @@ +002212024080104094610664815265025318912 +002212024080105103710664830576223019008 +002212024080108001210664873255346294784 +002212024080108412010664883605782069248 +002212024080109525010664901597116350464 +002212024080110275510664910426482388992 +002212024080111083110664920645352226816 +002212024080111235510664924521971265536 +002212024080112000910664933640326447104 +002212024080112013810664934014549938176 +002212024080112143010664937250031849472 +002212024080112150810664937409924030464 +002212024080112301710664941222257934336 +002212024080112455010664945135876505600 +002212024080113542210664962383167336448 +002212024080114212610664969194190352384 +002212024080114343110664972488951562240 +002212024080114505410664976609326358528 +002212024080114560610664977917021642752 +002212024080115161610664982992343715840 +002212024080115352410664987809193373696 +002212024080115443810664990132963819520 +002212024080115460810664990511769780224 +002212024080115502210664991574988107776 +002212024080115551310664992795539759104 +002212024080116170310664998291486662656 +002212024080116263510665000688016941056 +002212024080116340510665002577152114688 +002212024080116521410665007142716227584 +002212024080116555310665008063851102208 +002212024080117021810665009678799724544 +002212024080117542410665022790376800256 +002212024080118112610665027074774646784 +002212024080118114410665027150580506624 +002212024080118193810665029138942640128 +002212024080118390810665034045501202432 +002212024080118473310665036165738332160 +002212024080119061010665040848014925824 +002212024080119151510665043137811931136 +002212024080120433910665065380672110592 +002212024080120590410665069262617935872 +002212024080121443110665080698558414848 +002212024080121473910665081489074274304 +002212024080123253010665106112446324736 +002212024080200253310665121224583512064 +002212024080202251410665151344785674240 +002212024080203385610665169893484838912 +002212024080209293710665258143690620928 +002212024080209585410665265515150540800 +002212024080210143810665269471420989440 +002212024080210211210665271124075139072 +002212024080210233610665271731604127744 +002212024080210345810665274589423579136 +002212024080211333210665289328886554624 +002212024080212193410665300914728271872 +002212024080212372010665305386619699200 +002212024080213004610665311281768816640 +002212024080213220210665316634561327104 +002212024080214022710665326804091977728 +002212024080214050010665327445220704256 +002212024080214114610665329150380466176 +002212024080214151510665330026138558464 +002212024080214223110665331854134456320 +002212024080214283010665333361139892224 +002212024080214350610665335020519403520 +002212024080214512110665339113114664960 +002212024080215034410665342228779352064 +002212024080215093910665343715997868032 +002212024080215203110665346449251418112 +002212024080215341110665349888488620032 +002212024080215390810665351134304501760 +002212024080216102710665359016776105984 +002212024080216155910665360410954555392 +002212024080216201310665361475100934144 +002212024080216321310665364496530735104 +002212024080216454410665367898734931968 +002212024080216492010665368802691506176 +002212024080217063510665373144279515136 +002212024080217155110665375477394800640 +002212024080217433010665382435747999744 +002212024080217484410665383750525509632 +002212024080218032710665387454144643072 +002212024080218115610665389589846679552 +002212024080218141110665390154025123840 +002212024080218142310665390207798005760 +002212024080218392510665396504942182400 +002212024080218535710665400161620713472 +002212024080218571810665401007111888896 +002212024080219060910665403231725412352 +002212024080219495310665414241440620544 +002212024080220015110665417250660626432 +002212024080220135810665420301967785984 +002212024080220403710665427005615878144 +002212024080220441510665427920991772672 +002212024080221294010665439350487449600 +002212024080221581110665446529006485504 +002212024080222064310665448676009566208 +002212024080303041710665523558944550912 +002212024080308162710665602119980527616 +002212024080309092510665615448547901440 +002212024080309125710665616336617680896 +002212024080309314610665621074962292736 +002212024080309524710665626361571672064 +002212024080310180810665632743369220096 +002212024080310331610665636552024899584 +002212024080310422210665638841287114752 +002212024080311412910665653716406099968 +002212024080312043510665659529736433664 +002212024080312090510665660664467632128 +002212024080312105210665661111254614016 +002212024080312540410665671981626941440 +002212024080313212910665678885270970368 +002212024080313445410665684776936914944 +002212024080313580610665688098869530624 +002212024080314020010665689080487960576 +002212024080314035010665689542944063488 +002212024080314161910665692684595167232 +002212024080314215410665694089347170304 +002212024080314274510665695559727546368 +002212024080314341610665697201267867648 +002212024080314542410665702267058569216 +002212024080315521610665716828467486720 +002212024080315540210665717274259410944 +002212024080316553910665732779360903168 +002212024080317055910665735379597578240 +002212024080317185310665738628437835776 +002212024080317190510665738676627824640 +002212024080317315910665741922796404736 +002212024080317395910665743938544152576 +002212024080318075610665750969054625792 +002212024080318163110665753131443675136 +002212024080318322610665757138359910400 +002212024080318531910665762393684410368 +002212024080319115810665767083973533696 +002212024080319454610665775589695664128 +002212024080320440510665790267765477376 +002212024080320470710665791029984878592 +002212024080321452510665805703280443392 +002212024080321560210665808372814237696 +002212024080400562810665853780193828864 +002212024080401033610665855576057847808 +002212024080401282610665861825640976384 +002212024080401365510665863961000984576 +002212024080402241810665875886119329792 +002212024080405202110665920190800904192 +002212024080406172310665934542809194496 +002212024080408054310665961806835986432 +002212024080408224910665966108853133312 +002212024080408565410665974688557498368 +002212024080409131910665978819158409216 +002212024080410071210665992379048329216 +002212024080410214610665996042642862080 +002212024080411165110666009905000726528 +002212024080411333610666014120597749760 +002212024080411351010666014513695154176 +002212024080411492710666018109418471424 +002212024080411535710666019244328812544 +002212024080412042810666021889539579904 +002212024080412065410666022503438868480 +002212024080412312210666028657940836352 +002212024080412422810666031451671896064 +002212024080412543910666034517279965184 +002212024080414385910666060772805148672 +002212024080415292810666073477954600960 +002212024080416023210666081799051096064 +002212024080416214210666086623131140096 +002212024080416564310666095435551789056 +002212024080417261710666102875463548928 +002212024080417283010666103435180834816 +002212024080417312710666104175659241472 +002212024080417322410666104416193675264 +002212024080417355710666105308291383296 +002212024080417523310666109488152805376 +002212024080417553510666110251735826432 +002212024080417595710666111350671343616 +002212024080418094310666113805454901248 +002212024080418375110666120887968387072 +002212024080419043310666127608176623616 +002212024080419045310666127690422730752 +002212024080419203010666131618770108416 +002212024080422071110666173567684235264 +002212024080422564010666186019733950464 +002212024080423021510666187427632578560 +002212024080423501610666199510433640448 +002212024080501521810666230221972885504 +002212024080502031310666232967372144640 +002212024080504283910666269567132291072 +002212024080506023210666293192582201344 +002212024080508185010666327494886621184 +002212024080509495110666350401487732736 +002212024080509590310666352716702015488 +002212024080510165910666357227676741632 +002212024080510353910666361925253685248 +002212024080511000510666368075780771840 +002212024080511042310666369155222953984 +002212024080511442110666379213052690432 +002212024080512190810666387966120542208 +002212024080512483610666395384411258880 +002212024080512581110666397796035907584 +002212024080513161810666402354884763648 +002212024080513415510666408802698604544 +002212024080513495310666410807329751040 +002212024080514051110666414658317418496 +002212024080514254810666419844345085952 +002212024080514354710666422356600356864 +002212024080514410810666423704668844032 +002212024080514520110666426444328304640 +002212024080515063310666430098074730496 +002212024080515171310666432784269246464 +002212024080515272410666435347695280128 +002212024080515443210666439657584275456 +002212024080516030410666444322064154624 +002212024080516311810666451427728740352 +002212024080516452310666454973769179136 +002212024080518111710666476591483043840 +002212024080518315310666481772834009088 +002212024080519393010666498792096538624 +002212024080519432210666499763158761472 +002212024080520112810666506833171263488 +002212024080520285610666511231835537408 +002212024080601094010666581877453086720 +002212024080602203810666599740264636416 +002212024080604170410666629038563590144 +002212024080604230710666630561827094528 +002212024080605020810666640383466254336 +002212024080605374310666649337389744128 +002212024080609305010666708001655980032 +002212024080610080210666717361663574016 +002212024080610361410666724462076633088 +002212024080611430110666741265966772224 +002212024080611494310666742953381396480 +002212024080611502910666743147056185344 +002212024080613130210666763919736418304 +002212024080613222510666766280198832128 +002212024080613403210666770839141449728 +002212024080613482910666772841372155904 +002212024080614243010666781907290341376 +002212024080614501310666788376784363520 +002212024080614552310666789677732454400 +002212024080614595110666790801674461184 +002212024080615055810666792341081653248 +002212024080615061810666792426223288320 +002212024080615260310666797393876856832 +002212024080615474210666802844591116288 +002212024080615514010666803839777820672 +002212024080616045310666807167221940224 +002212024080616501310666818575674490880 +002212024080616550610666819803656159232 +002212024080617201910666826151189204992 +002212024080617234810666827028332535808 +002212024080617361710666830171178229760 +002212024080618352710666845060948230144 +002212024080619192110666856105608839168 +002212024080619395710666861291127971840 +002212024080621254010666887897211416576 +002212024080621335810666889982712139776 +002212024080621401110666891550591401984 +002212024080622534110666910044120395776 +002212024080623570210666925989803442176 +002212024080702201810666962041185697792 +002212024080705102610667004858573111296 +002212024080708482810667059727228710912 +002212024080709163110667066785783570432 +002212024080712271810667114799679852544 +002212024080712291110667115274827386880 +002212024080713013110667123411014918144 +002212024080713165710667127294088642560 +002212024080713261610667129636883451904 +002212024080713303510667130724762370048 +002212024080713393510667132989553704960 +002212024080713451510667134417240772608 +002212024080714032810667139000873353216 +002212024080714261910667144749458710528 +002212024080715182910667157878802071552 +002212024080715340410667161801787498496 +002212024080715434010667164217245532160 +002212024080715523810667166471036428288 +002212024080716304310667176058931437568 +002212024080717040410667184450251874304 +002212024080718210610667203837482881024 +002212024080720250510667235036944498688 +002212024080720322910667236898726047744 +002212024080723012010667274358363840512 +002212024080802491010667331693869387776 +002212024080808025410667410649889955840 +002212024080808313010667417845853294592 +002212024080808552810667423875851563008 +002212024080809015510667425500338515968 +002212024080809502910667437722733961216 +002212024080810262410667446763367489536 +002212024080811365810667464519517155328 +002212024080811412810667465654613368832 +002212024080811502310667467898144014336 +002212024080811563810667469470052999168 +002212024080812231010667476146765791232 +002212024080812275910667477358762876928 +002212024080812421810667480963001974784 +002212024080812565010667484619310989312 +002212024080813095010667487889055383553 +002212024080813263710667492115130281984 +002212024080813440310667496501861101568 +002212024080813565110667499721584472064 +002212024080814212110667505888473559040 +002212024080814253410667506951025258496 +002212024080814310610667508343907201024 +002212024080814420210667511094261551104 +002212024080814422710667511200335499264 +002212024080814553710667514510159310848 +002212024080815174210667520070443917312 +002212024080815215210667521118453686272 +002212024080815575310667530182065242112 +002212024080816361110667539818737401856 +002212024080816392610667540640173481984 +002212024080816402010667540866507444224 +002212024080817232510667551708565417984 +002212024080818022410667561519670743040 +002212024080818304110667568634427662336 +002212024080818570010667575258180939776 +002212024080819401210667586128558919680 +002212024080819452510667587442633781248 +002212024080820043710667592275754024960 +002212024080820163610667595289149239296 +002212024080820545110667604915368607744 +002212024080823193110667641324547137536 +002212024080902265810667688495754608640 +002212024080902545510667695527764221952 +002212024080904433010667722854777577472 +002212024080906582610667756810848907264 +002212024080909350010667796213585264640 +002212024080909533210667800876103827456 +002212024080910491710667814906090459136 +002212024080911162910667821755296964608 +002212024080911325910667825907358851072 +002212024080911490910667829975219933184 +002212024080911492310667830031538630656 +002212024080911541410667831255008997376 +002212024080911541910667831272344358912 +002212024080911575810667832190995361792 +002212024080912191810667837562428182528 +002212024080912403310667842909818531840 +002212024080912483110667844915238862848 +002212024080913041710667848881661919232 +002212024080913193810667852743959310336 +002212024080913194610667852778505338880 +002212024080913233310667853731039076352 +002212024080913252610667854203618709504 +002212024080913293010667855228746952704 +002212024080913303510667855499504332800 +002212024080913330410667856124862476288 +002212024080913455510667859361428115456 +002212024080914041110667863954462027776 +002212024080914120310667865935332343808 +002212024080914265810667869688310587392 +002212024080915011110667878299966828544 +002212024080915020610667878529691353088 +002212024080915110910667880810630729728 +002212024080915231910667883870716223488 +002212024080915374810667887515553468416 +002212024080916065410667894840477585408 +002212024080916243610667899294173818880 +002212024080917021310667908759541485568 +002212024080917280410667915266046656512 +002212024080917283610667915401071017984 +002212024080917385710667918006131720192 +002212024080917470410667920045979938816 +002212024080918222110667928925300948992 +002212024080918551010667937183354175488 +002212024080918571410667937704577425408 +002212024080919052510667939763110641664 +002212024080919320910667946492542816256 +002212024080919380410667947979253055488 +002212024080919571110667952790359359488 +002212024080920243610667959692482433024 +002212024080920365310667962781373755392 +002212024080920492810667965947836694528 +002212024080921011610667968920285057024 +002212024080921340810667977190263140352 +002212024080921480910667980716171522048 +002212024080921594510667983637971963904 +002212024081003250910668065525961035776 +002212024081004284310668081521272745984 +002212024081007255010668126096408772608 +002212024081007421110668130209682800640 +002212024081009242710668155945002586112 +002212024081009535910668163379845230592 +002212024081009562610668163995149627392 +002212024081010294210668172367766401024 +002212024081010302410668172545372782592 +002212024081011061310668181558174273536 +002212024081011531010668193374540759040 +002212024081012004310668195271155879936 +002212024081012221210668200678343688192 +002212024081012382710668204769365819392 +002212024081012442210668206257195286528 +002212024081012585610668209922465161216 +002212024081013022810668210811524972544 +002212024081013043610668211348372258816 +002212024081013180610668214745624281088 +002212024081013490810668222557000945664 +002212024081013522610668223387001257984 +002212024081014051710668226620649472000 +002212024081014401010668235398563090432 +002212024081014445310668236585786880000 +002212024081015205710668245665027809280 +002212024081015262210668247026286145536 +002212024081015343410668249088980770816 +002212024081016092910668257876277051392 +002212024081016352010668264380398759936 +002212024081016355310668264522415837184 +002212024081017045110668271812546367488 +002212024081018200010668290720659501056 +002212024081018351810668294573772038144 +002212024081019000410668300807672520704 +002212024081019045810668302037707624448 +002212024081019132210668304154714529792 +002212024081019201110668305868646723584 +002212024081019204710668306020817670144 +002212024081019361510668309912280481792 +002212024081021330710668339322446741504 +002212024081022193210668351004296056832 +002212024081022351210668354947799175168 +002212024081101193910668396332717015040 +002212024081102412710668416914698129408 +002212024081106130810668470186784559104 +002212024081106203910668472078862450688 +002212024081106301110668474481311801344 +002212024081106363810668476102712287232 +002212024081106401610668477014926921728 +002212024081106423110668477583490232320 +002212024081106442310668478052458737664 +002212024081107164910668486215759532032 +002212024081108500110668509670922878976 +002212024081109212610668517576490848256 +002212024081109292110668519566018437120 +002212024081109412910668522622886260736 +002212024081109443310668523394556727296 +002212024081111274510668549365485891584 +002212024081111334610668550878459658240 +002212024081112033710668558388659838976 +002212024081113052110668573925315239936 +002212024081113071410668574398197501952 +002212024081113222610668578225461514240 +002212024081113443610668583802839855104 +002212024081113560710668586703196356608 +002212024081114190810668592493691334656 +002212024081115003510668602926779916288 +002212024081115050310668604048988532736 +002212024081115402010668612929247043584 +002212024081115421310668613402110525440 +002212024081115575010668617333729103872 +002212024081116212310668623257915211776 +002212024081116491910668630287262388224 +002212024081117085710668635232123019264 +002212024081117125010668636208560254976 +002212024081117321710668641102336331776 +002212024081117380010668642541875351552 +002212024081117473410668644946984013824 +002212024081118131810668651426396594176 +002212024081118363010668657263781728256 +002212024081118394810668658095298359296 +002212024081118452810668659520506023936 +002212024081119082110668665276622090240 +002212024081119200710668668237850988544 +002212024081119243310668669356159909888 +002212024081119392410668673093475094528 +002212024081120191210668683108023894016 +002212024081120333310668686720689156096 +002212024081120405310668688565791424512 +002212024081120470810668690136223801344 +002212024081121050110668694639610257408 +002212024081122010410668708745313226752 +002212024081122305010668716232835510272 +002212024081201200010668758805243990016 +002212024081202215310668774382098280448 +002212024081208110710668862266700558336 +002212024081208150810668863277108269056 +002212024081209482710668886761105874944 +002212024081209593210668889552820727808 +002212024081210522110668902844377042944 +002212024081211380510668914353231159296 +002212024081211592510668919720750583808 +002212024081212053810668921285809127424 +002212024081212284910668927120206299136 +002212024081213215310668940474241875968 +002212024081213271410668941820800184320 +002212024081213400210668945043156484096 +002212024081213420810668945571223011328 +002212024081213484510668947234078560256 +002212024081213495710668947539752484864 +002212024081213511610668947870276620288 +002212024081214304110668957787465302016 +002212024081214412510668960490947174400 +002212024081214560110668964164608651264 +002212024081215152710668969053223452672 +002212024081215422010668975821578362880 +002212024081216003010668980392123666432 +002212024081216232610668986164098035712 +002212024081217154710668999339711328256 +002212024081217155310668999364178984960 +002212024081217172110668999729857097728 +002212024081217182510669000000175796224 +002212024081217231110669001200040882176 +002212024081217414810669005885425758208 +002212024081218031310669011274895028224 +002212024081218225310669016223554588672 +002212024081218532410669023904177946624 +002212024081219004410669025749778104320 +002212024081219162910669029714316288000 +002212024081219202210669030689491619840 +002212024081219465610669037376271118336 +002212024081219590510669040433235062784 +002212024081220173510669045087873622016 +002212024081220245510669046933137043456 +002212024081220315510669048697127088128 +002212024081222471510669082755191070720 +002212024081223021510669086529090314240 +002212024081223194310669090924252422144 +002212024081300011110669101358962618368 +002212024081300283310669108246639210496 +002212024081304494410669173974388150272 +002212024081309045810669238209035751424 +002212024081309231910669242825882324992 +002212024081310512610669265002396504064 +002212024081310543010669265772634935296 +002212024081311145110669270895572258816 +002212024081311210710669272468786442240 +002212024081311412410669277575118962688 +002212024081312035610669283245977210880 +002212024081312500710669294867963011072 +002212024081312532010669295679427547136 +002212024081313251910669303726297677824 +002212024081313280310669304414745755648 +002212024081313484410669309621279457280 +002212024081314301910669320082529017856 +002212024081314365710669321754465243136 +002212024081314394010669322435989311488 +002212024081315140110669331082623934464 +002212024081315250510669333866354139136 +002212024081315350610669336386869723136 +002212024081316310110669350461496569856 +002212024081316340510669351230767198208 +002212024081316520710669355769381613568 +002212024081316592910669357625566134272 +002212024081317073710669359668385873920 +002212024081317563010669371972120571904 +002212024081317590810669372634905796608 +002212024081318000910669372890114785280 +002212024081318060610669374387898667008 +002212024081318072110669374702887038976 +002212024081318283910669380064224833536 +002212024081318303210669380538628018176 +002212024081318384210669382593199681536 +002212024081318500710669385465488834560 +002212024081318544810669386643735937024 +002212024081319015610669388439426117632 +002212024081319254510669394431360077824 +002212024081320030010669403805627920384 +002212024081320121610669406138784477184 +002212024081320402010669413203991183360 +002212024081320453610669414529683107840 +002212024081321035310669419129812385792 +002212024081321385510669427945539342336 +002212024081323114910669451323022946304 +002212024081401193510669483477956886528 +002212024081406324710669562298277916672 +002212024081408104510669586950488297472 +002212024081408161110669588320069562368 +002212024081409371010669608699237597184 +002212024081410311610669622313806528512 +002212024081410424110669625188332834816 +002212024081411330510669637870372433920 +002212024081411422710669640228558962688 +002212024081411582410669644241326923776 +002212024081412113210669647545528659968 +002212024081412573910669659150237511680 +002212024081413190010669664526980464640 +002212024081413332410669668147474530304 +002212024081414030410669675614206222336 +002212024081414312410669682745420255232 +002212024081416311710669712916524740608 +002212024081416361310669714155138805760 +002212024081417473010669732096660062208 +002212024081417482010669732306207469568 +002212024081418035210669736212799012864 +002212024081418222210669740870588751872 +002212024081419303210669758023860576256 +002212024081419385510669760132881149952 +002212024081419475810669762412710256640 +002212024081420435110669776476881670144 +002212024081508223210669952304580325376 +002212024081508411710669957024677801984 +002212024081508595610669961717060415488 +002212024081509512210669974661518946304 +002212024081510000510669976855456108544 +002212024081511442010670003090716856320 +002212024081511453310670003395982098432 +002212024081511485610670004245062676480 +002212024081511495310670004487397629952 +002212024081511561010670006065033469952 +002212024081512421610670017668468015104 +002212024081513082210670024236038287360 +002212024081514194610670042206877372416 +002212024081515010410670052600021368832 +002212024081515130010670055603639595008 +002212024081515135110670055816771518464 +002212024081515181110670056908062523392 +002212024081516102610670070055734435840 +002212024081516190110670072213811466240 +002212024081516375310670076962279493632 +002212024081517123210670085683821469696 +002212024081517204410670087747150905344 +002212024081517343010670091209521037312 +002212024081517424410670093281946861568 +002212024081517512410670095464969601024 +002212024081518201710670102732796424192 +002212024081518230910670103453287510016 +002212024081519083810670114902681006080 +002212024081519191510670117571079892992 +002212024081519222410670118365992497152 +002212024081519533010670126191930699776 +002212024081520005810670128072351383552 +002212024081521024910670143634692751360 +002212024081521232210670148806412189696 +002212024081606421610670289458420629504 +002212024081607233610670299860747747328 +002212024081607284610670301162578063360 +002212024081611145210670358059802755072 +002212024081612151510670373258689343488 +002212024081612163710670373602760683520 +002212024081612444310670380674516631552 +002212024081613114710670387483918303232 +002212024081613224010670390222652768256 +002212024081613232710670390422058135552 +002212024081613265410670391286923100160 +002212024081614030810670400408841039872 +002212024081614171810670403974289260544 +002212024081614451410670411002042331136 +002212024081614541310670413263479857152 +002212024081615091810670417059379793920 +002212024081615504810670427503509209088 +002212024081616000310670429830685749248 +002212024081616254310670436287820431360 +002212024081616331810670438198463225856 +002212024081617054210670446353451757568 +002212024081617362810670454096099192832 +002212024081618175910670464541565333504 +002212024081618224810670465753762729984 +002212024081619363110670484304710307840 +002212024081619374810670484629554376704 +002212024081619491710670487520081969152 +002212024081621312510670513220540116992 +002212024081622391810670530306019516416 +002212024081623080410670537544067362816 +002212024081623204910670540751059386368 +002212024081623294810670543014356156416 +002212024081623345110670544283342045184 +002212024081623410110670545835678818304 +002212024081700004110670550786296610816 +002212024081700193210670555530503225344 +002212024081701154210670569664637136896 +002212024081701452210670577131407900672 +002212024081705245210670632370572455936 +002212024081707022410670656915062304768 +002212024081707232810670662216224575488 +002212024081708134610670674875522842624 +002212024081708454210670682908471037952 +002212024081708524810670684696098582528 +002212024081708574410670685939688206336 +002212024081709573710670701010011525120 +002212024081710020610670702137511440384 +002212024081710043710670702771950792704 +002212024081710111110670704424149176320 +002212024081710193810670706547442909184 +002212024081710354410670710600123461632 +002212024081711430010670727528745099264 +002212024081712043010670732937986666496 +002212024081712062310670733413971451904 +002212024081712163110670735962120073216 +002212024081712292510670739212199903232 +002212024081712313910670739773035089920 +002212024081712431710670742700643942400 +002212024081712543110670745526908981248 +002212024081712553910670745813882077184 +002212024081713051510670748226926501889 +002212024081713133010670750304825217024 +002212024081713162910670751054592040960 +002212024081713182610670751547673346048 +002212024081713252110670753286818336768 +002212024081713341010670755505180889088 +002212024081713341510670755528136372224 +002212024081713452110670758318427287552 +002212024081714124410670765208906596352 +002212024081714142410670765629614182400 +002212024081714353210670770950699597824 +002212024081714412810670772442311520256 +002212024081714530610670775367974432768 +002212024081715082010670779202615443456 +002212024081715104310670779803706707968 +002212024081715181110670781679974715392 +002212024081715243510670783291413147648 +002212024081715275510670784132059086848 +002212024081715295210670784623635922944 +002212024081715384710670786865738121216 +002212024081715533610670790594973499392 +002212024081716255610670798730817789952 +002212024081716292210670799597804306432 +002212024081717131010670810619147026432 +002212024081717175010670811792625602561 +002212024081718065210670824131347931136 +002212024081718151210670826229141659648 +002212024081718294410670829887559421952 +002212024081718505710670835224647741440 +002212024081719100510670840042880208896 +002212024081719243910670843708845162496 +002212024081720084110670854788960337920 +002212024081720340910670861199140286464 +002212024081721322610670875863739887616 +002212024081723012710670898266643222528 +002212024081801513510670941080610115584 +002212024081801564510670942383308603392 +002212024081802063610670944862099570688 +002212024081802480110670955285536927744 +002212024081804102510670976019943227392 +002212024081808081910671035889879711744 +002212024081808420910671044403943538688 +002212024081809114110671051836242358272 +002212024081810060310671065517019222016 +002212024081810383410671073703166447616 +002212024081812063210671095841585819648 +002212024081812233110671100113163743232 +002212024081812444810671105469440823296 +002212024081812493710671106680195502080 +002212024081812590810671109078119677952 +002212024081813320210671117354777509888 +002212024081813441910671120447598325760 +002212024081813492810671121744806211584 +002212024081813544610671123077190443008 +002212024081814052210671125746774294528 +002212024081814233910671130345882615808 +002212024081814261410671130997240160256 +002212024081814343010671133075381010432 +002212024081814393610671134360525778944 +002212024081814451610671135784379559936 +002212024081814481910671136552465436672 +002212024081814580110671138996187942912 +002212024081815111610671142328609595392 +002212024081815251610671145854508658688 +002212024081816461410671166226547458048 +002212024081816472310671166519652069376 +002212024081817101810671172284259303424 +002212024081817183210671174357431713792 +002212024081817270610671176513073283072 +002212024081817335610671178231838904320 +002212024081818020210671185305787813888 +002212024081818123410671187953762271232 +002212024081818152510671188672878931968 +002212024081818294510671192279494135808 +002212024081819070910671201692962902016 +002212024081819333010671208320330203136 +002212024081819374810671209405623537664 +002212024081820030510671215768414121984 +002212024081821244510671236317307383808 +002212024081821245110671236343876665344 +002212024081822243410671251374234071040 +002212024081823443010671271488453197824 +002212024081900300110671282944504090624 +002212024081900322510671283547138785280 +002212024081900353510671284342715695104 +002212024081908071610671398014695862272 +002212024081910351710671435264874196992 +002212024081910435810671437447325216768 +002212024081911134710671444952040456192 +002212024081911234610671447465929969664 +002212024081911422910671452173836312576 +002212024081912283210671463762054709248 +002212024081912341810671465214669840384 +002212024081912401810671466723921199104 +002212024081913101210671474250156957696 +002212024081913143310671475343957110784 +002212024081913382210671481339695427584 +002212024081913430610671482528406011904 +002212024081913535310671485243749629952 +002212024081914084010671488962858418176 +002212024081914284110671494000782462976 +002212024081914333610671495236560715776 +002212024081914491110671499159554084864 +002212024081915052110671503229866070016 +002212024081915190910671506701626585088 +002212024081915432710671512816254922752 +002212024081915535310671515443889909760 +002212024081915561110671516020583284736 +002212024081915582010671516560687464448 +002212024081915585010671516689658871808 +002212024081916095810671519487463620608 +002212024081916110210671519757666185216 +002212024081916242910671523141173350400 +002212024081916253210671523405305806848 +002212024081916321210671525085665267712 +002212024081916544010671530738913497088 +002212024081916544910671530776842924032 +002212024081917052010671533421342871552 +002212024081917071510671533905566588928 +002212024081917101310671534650161573888 +002212024081917174010671536526824927232 +002212024081918051610671548504739590144 +002212024081918124110671550371453263872 +002212024081918233410671553111992156160 +002212024081918531810671560592468795392 +002212024081919070910671564077964431360 +002212024081919363010671571465918189568 +002212024081919580510671576895895228416 +002212024081920204010671582579936653312 +002212024081921355510671601515843481600 +002212024081921492210671604903077593088 +002212024082000155510671641784572391424 +002212024082002042910671669103782625280 +002212024082005095010671715749411278848 +002212024082005125310671716517647024128 +002212024082007122810671746609782808576 +002212024082009145410671777421578567680 +002212024082009350610671782504368631808 +002212024082010105110671791500769984512 +002212024082011204410671809090011627520 +002212024082011513710671816860424941568 +002212024082012274110671825936938500096 +002212024082012305610671826753827995648 +002212024082013034510671835014838063104 +002212024082013080010671836083545538560 +002212024082013185810671838844615458816 +002212024082013250410671840379576897536 +002212024082013372610671843490339581952 +002212024082013472210671845988735479808 +002212024082014134310671852622924857344 +002212024082014213610671854606627581952 +002212024082014220810671854739446132736 +002212024082014302010671856804941180928 +002212024082015110810671867073230655488 +002212024082015361410671873389891215360 +002212024082016160510671883418297761792 +002212024082016564010671893629760368640 +002212024082017241110671900553977122816 +002212024082018112910671912456319991808 +002212024082018491410671921959431426048 +002212024082019420910671935276813180928 +002212024082020204710671944996808146944 +002212024082020453810671951253023461376 +002212024082021402910671965056562167808 +002212024082101552110672029192848789504 +002212024082108503810672133702554841088 +002212024082110424010672161897670701056 +002212024082110581810672165830275600384 +002212024082111252910672172670472392704 +002212024082111513010672179219942838272 +002212024082111534110672179768360669184 +002212024082112182410672185990444310528 +002212024082113011010672196750814072832 +002212024082113064210672198142855315456 +002212024082114463010672223261089652736 +002212024082115543210672240383268028416 +002212024082116230610672247568475684864 +002212024082116265710672248537489575936 +002212024082116403910672251986384465920 +002212024082118420910672282565320085504 +002212024082118455210672283500100423680 +002212024082119092210672289412814966784 +002212024082119162310672291178815512576 +002212024082120552410672316096606732288 +002212024082122500510672344958887321600 +002212024082200585710672377389260042240 +002212024082202510710672405615587459072 +002212024082205351910672446936411246592 +002212024082208533510672496834867458048 +002212024082210172510672517929806159872 +002212024082211272710672535553908244480 +002212024082211312810672536566183849984 +002212024082211442510672539826464141312 +002212024082211470610672540498856861696 +002212024082214095410672576437038002176 +002212024082214370510672583276149288960 +002212024082214484610672586218227466240 +002212024082215202110672594164802748416 +002212024082215272210672595933436641280 +002212024082215451110672600417142669312 +002212024082216280410672611206149758976 +002212024082216364910672613410956029952 +002212024082217035210672620216928231424 +002212024082217140410672622786121273344 +002212024082217384110672628979766226944 +002212024082218140710672637894658736128 +002212024082218172010672638706703069184 +002212024082218185410672639101888479232 +002212024082219000610672649467777835008 +002212024082219092310672651804319625216 +002212024082219500610672662051264106496 +002212024082219542010672663117900476416 +002212024082220200210672669582861623296 +002212024082221083110672681787368058880 +002212024082221491410672692032247402496 +002212024082221491810672692048205242368 +002212024082222014410672695179089600512 +002212024082222221210672700328977989632 +002212024082302061010672756690242592768 +002212024082306523410672828764729208832 +002212024082307400110672840706617573376 +002212024082308141410672849317102714880 +002212024082310002410672876034359148544 +002212024082310552010672889860714725376 +002212024082311011910672891365742403584 +002212024082311291710672898406521044992 +002212024082312140910672909693823279104 +002212024082312235910672912171441684480 +002212024082312392510672916054826123264 +002212024082312560210672920235689496576 +002212024082312564810672920427732496384 +002212024082313182410672925865470164992 +002212024082313280910672928317283708928 +002212024082313345810672930032807694336 +002212024082313524310672934502337179648 +002212024082313574010672935747361566720 +002212024082314272610672943237681926144 +002212024082314302510672943986406293504 +002212024082314400110672946403230912512 +002212024082314565010672950636291325952 +002212024082315004010672951602831183872 +002212024082315095810672953941008613376 +002212024082315431310672962309234581504 +002212024082315524710672964718359044096 +002212024082316030110672967293662433280 +002212024082316264110672973249648877568 +002212024082316343610672975240594628608 +002212024082316432010672977436093485056 +002212024082317442710672992816477413376 +002212024082318134310673000181658460160 +002212024082318413010673007174334128128 +002212024082319052610673013198796447744 +002212024082319055010673013300145442816 +002212024082320581010673041569572753408 +002212024082321202710673047175370285056 +002212024082321382710673051705302958080 +002212024082322111110673059943912607744 +002212024082322264010673063841947017216 +002212024082323320710673080310533017600 +002212024082400353310673096275145089024 +002212024082400503810673100071304785920 +002212024082401401710673112567752982528 +002212024082401511010673115303009865728 +002212024082413515310673296679484608512 +002212024082414155110673302708300042240 +002212024082416040410673329942928683008 +002212024082416114410673331874325983232 +002212024082416380710673338513939283968 +002212024082419015110673374686272724992 +002212024082419122910673377362454638592 +002212024082419333210673382657427894272 +002212024082419504510673386989792894976 +002212024082419554210673388234616307712 +002212024082419562710673388426954383360 +002212024082420005810673389559933214720 +002212024082420400710673399413550739456 +002212024082420590510673404187180625920 +002212024082420590610673404193299980288 +002212024082421342210673413067494739968 +002212024082421473210673416378948079616 +002212024082421530810673417788495532032 +002212024082422580210673434120149753856 +002212024082423402010673444766392119296 +002212024082423432010673445520792313856 +002212024082500073910673451641854316544 +002212024082502064410673481610618073088 +002212024082508242410673576653049843712 +002212024082510272710673607618244165632 +002212024082510405010673610987399979008 +002212024082511242610673621957903351808 +002212024082511363210673625003889086464 +002212024082512263610673637606588174336 +002212024082512584710673645705491402752 +002212024082513084310673648203606282240 +002212024082514002710673661222501347328 +002212024082514102110673663712101486592 +002212024082514370510673670443307401216 +002212024082515352910673685140192751616 +002212024082515595810673691300906516480 +002212024082516264710673698050618392576 +002212024082516324010673699530720710656 +002212024082516365510673700598930702336 +002212024082517113910673709339983069185 +002212024082517233110673712325576269824 +002212024082517392810673716341527932928 +002212024082518170910673725825269415936 +002212024082518551810673735423010889728 +002212024082600153310673816018736926720 +002212024082605381910673897244331900928 +002212024082605415510673898149860573184 +002212024082606102310673905314032476160 +002212024082607510610673930660142759936 +002212024082608481710673945051812904960 +002212024082608534710673946436701364224 +002212024082609452910673959444868059136 +002212024082609595210673963063890243584 +002212024082610463510673974821784559616 +002212024082611112210673981060432130048 +002212024082611404110673988436719788032 +002212024082612405510674003596039454720 +002212024082612551710674007210526019584 +002212024082613032510674009259126050816 +002212024082614230710674029313849925632 +002212024082614534310674037015166107648 +002212024082615140710674042149753622528 +002212024082616372310674063105348894720 +002212024082617023510674069447236616192 +002212024082617251910674075167328477184 +002212024082617494710674081326091563008 +002212024082617504410674081561622700032 +002212024082619191810674103853341696000 +002212024082619212010674104361557123072 +002212024082620351410674122962621988865 +002212024082620481210674126222785073152 +002212024082621051610674130518827122688 +002212024082621290610674136515282489344 +002212024082622492810674156743246835712 +002212024082707184110674284890709516288 +002212024082709270610674317207794384896 +002212024082710150310674329274870157312 +002212024082712593810674370692674244608 +002212024082713584810674385582413537280 +002212024082715511210674413871156817920 +002212024082716444310674427339473506304 +002212024082717031910674432019516190720 +002212024082717340610674439763553964032 +002212024082717493810674443676340224000 +002212024082718101210674448850159964160 +002212024082719560710674475505674186752 +002212024082721441610674502721719586816 +002212024082807361910674651715794391040 +002212024082814415510674758822426083328 +002212024082815403010674773565165707264 +002212024082820220410674844423546826752 +002212024082820373810674848342790750208 +002212024082821222510674859611067080704 +002212024082822163210674873228287123456 +002212024082900035210674900239143178240 +002212024082900352410674908175986638848 +002212024082911563910675079619899662336 +002212024082913390310675105388980727808 \ No newline at end of file diff --git a/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java b/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java index ef2a7a75c..691409d04 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java @@ -10,21 +10,35 @@ import java.util.Arrays; */ @Slf4j public class YouDianUtils { - public static void main(String[] args) { - String s = "44 4e 59 0a 00 3b 37 ab 04 01 00 21 00 38 02"; - byte[] bytes = BytesUtil.hexStringToByteArray(s); - String s2 = BytesUtil.printHexBinary(bytes); - System.out.println(s2); - byte[] bytes2 = BytesUtil.hexStringToByteArray(s2); - System.out.println(bytes2); - boolean b = validateChecksum(bytes); - // - String s3 = "44 4e 59 0a 00 3b 37 ab 04 01 00 21 00"; - byte[] bytes3 = BytesUtil.hexStringToByteArray(s3); - int i = calculateCheckField(bytes3); - BytesUtil.intToBytesLittle(i); + /** + * 将byte数组转换为物理ID + * @param bytes 输入的byte数组 + * @return 物理ID对象,包含设备识别码和二维码下方的编号 + */ + public static int convertToPhysicalId(byte[] bytes) { + // 检查输入是否合法 + if (bytes == null || bytes.length != 4) { + throw new IllegalArgumentException("Input byte array must be of length 4."); + } + + // 小端模式转大端模式 + byte[] bigEndianBytes = new byte[4]; + bigEndianBytes[0] = bytes[3]; + bigEndianBytes[1] = bytes[2]; + bigEndianBytes[2] = bytes[1]; + bigEndianBytes[3] = bytes[0]; + + // 提取设备识别码 + byte deviceId = bigEndianBytes[0]; + + // 剩余的三个字节转换为十进制 + int deviceNumber = ((bigEndianBytes[1] & 0xFF) << 16) | + ((bigEndianBytes[2] & 0xFF) << 8) | + (bigEndianBytes[3] & 0xFF); + log.debug("设备识别码:{}, 桩编号:{}", deviceId, deviceNumber); + return deviceNumber; } /** diff --git a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java index 36948a661..03ab3501b 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java +++ b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java @@ -92,6 +92,8 @@ public class Constants { // // public static final String APP_SECRET = "bbac689f4654b209de4d6944808ec80b"; // 举视充电网 bbac689f4654b209de4d6944808ec80b + public static final String SYSTEM = "system"; + public static final String ZERO = "0"; public static final String ONE = "1"; diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ebike/PortStatusEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ebike/PortStatusEnum.java index 8ec21bbf2..c1a3c3cd3 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ebike/PortStatusEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ebike/PortStatusEnum.java @@ -4,29 +4,32 @@ package com.jsowell.common.enums.ebike; * 电单车端口状态 */ public enum PortStatusEnum { - IDLE(0, "空闲"), - CHARGING(1, "充电中"), - CHARGER_CONNECTED_NOT_CHARGING_USER(2, "有充电器但未充电(用户未启动充电)"), - CHARGER_CONNECTED_NOT_CHARGING_FULL(3, "有充电器但未充电(已充满电)"), - UNMEASURABLE(4, "该路无法计量"), - FLOAT_CHARGE(5, "浮充"), - MEMORY_DAMAGE(6, "存储器损坏"), - SOCKET_SPRING_STUCK(7, "插座弹片卡住故障"), - CONTACT_BAD_OR_FUSE_BLOWN(8, "接触不良或保险丝烧断故障"), - RELAY_GLUE(9, "算法-继电器粘连"), - HALL_SWITCH_DAMAGE(10, "霍尔开关损坏(即插入检测传感器)"), - PRE_INSPECTION_RELAY_OR_FUSE_BAD(11, "预检-继电器坏或保险丝断"), - PRE_INSPECTION_LOAD_SHORT_CIRCUIT(13, "预检-负载短路"), - FILTERED_PRE_INSPECTION_RELAY_GLUE(14, "过滤性预检-继电器粘连"), - CARD_CHIP_DAMAGE(15, "刷卡芯片损坏故障"), - DETECTION_CIRCUIT_FAULT(16, "检测电路故障"); + IDLE(0, "空闲", "1"), + CHARGING(1, "充电中", "3"), + CHARGER_CONNECTED_NOT_CHARGING_USER(2, "有充电器但未充电(用户未启动充电)", "2"), + CHARGER_CONNECTED_NOT_CHARGING_FULL(3, "有充电器但未充电(已充满电)", "2"), + UNMEASURABLE(4, "该路无法计量", "255"), + FLOAT_CHARGE(5, "浮充", "3"), + MEMORY_DAMAGE(6, "存储器损坏", "255"), + SOCKET_SPRING_STUCK(7, "插座弹片卡住故障", "255"), + CONTACT_BAD_OR_FUSE_BLOWN(8, "接触不良或保险丝烧断故障", "255"), + RELAY_GLUE(9, "算法-继电器粘连", "255"), + HALL_SWITCH_DAMAGE(10, "霍尔开关损坏(即插入检测传感器)", "255"), + PRE_INSPECTION_RELAY_OR_FUSE_BAD(11, "预检-继电器坏或保险丝断", "255"), + PRE_INSPECTION_LOAD_SHORT_CIRCUIT(13, "预检-负载短路", "255"), + FILTERED_PRE_INSPECTION_RELAY_GLUE(14, "过滤性预检-继电器粘连", "255"), + CARD_CHIP_DAMAGE(15, "刷卡芯片损坏故障", "255"), + DETECTION_CIRCUIT_FAULT(16, "检测电路故障", "255"); private final int value; private final String description; + // 状态 0:离网 (默认);1:空闲;2:占用(未充电);3:占用(充电中);4:占用(预约锁定) ;255:故障 + private final String dbStatus; - PortStatusEnum(int value, String description) { + PortStatusEnum(int value, String description, String dbStatus) { this.value = value; this.description = description; + this.dbStatus = dbStatus; } public int getValue() { @@ -37,6 +40,10 @@ public enum PortStatusEnum { return description; } + public String getDbStatus() { + return dbStatus; + } + // 新增方法: 根据 value 获取描述 public static String getDescriptionByValue(int value) { for (PortStatusEnum status : values()) { @@ -46,4 +53,14 @@ public enum PortStatusEnum { } return "未知状态"; } + + // 根据value 获取枚举对象 + public static PortStatusEnum getEnumByValue(int value) { + for (PortStatusEnum status : values()) { + if (status.getValue() == value) { + return status; + } + } + return null; + } } \ No newline at end of file diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java b/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java index bfa054737..099dc078e 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java @@ -2,6 +2,7 @@ package com.jsowell.common.util; import com.google.common.primitives.Bytes; import com.jsowell.common.constant.Constants; +import lombok.extern.slf4j.Slf4j; import javax.xml.bind.DatatypeConverter; import java.io.UnsupportedEncodingException; @@ -11,6 +12,7 @@ import java.time.LocalDateTime; import java.util.Date; import java.util.Stack; +@Slf4j public class BytesUtil { static final long fx = 0xffl; diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/StringUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/StringUtils.java index 426e8f0f8..832de4fc2 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/StringUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/StringUtils.java @@ -617,4 +617,69 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { return url.replace(Constants.URL_DELIMITER, ""); } + /** + * 含有unicode 的字符串转一般字符串 + * @param unicodeStr 混有 Unicode 的字符串 + * @return + */ + public static String unicodeStr2String(String unicodeStr) { + int length = unicodeStr.length(); + int count = 0; + //正则匹配条件,可匹配“\\u”1到4位,一般是4位可直接使用 String regex = "\\\\u[a-f0-9A-F]{4}"; + String regex = "\\\\u[a-f0-9A-F]{1,4}"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(unicodeStr); + StringBuffer sb = new StringBuffer(); + + while(matcher.find()) { + String oldChar = matcher.group();//原本的Unicode字符 + String newChar = unicode2String(oldChar);//转换为普通字符 + // int index = unicodeStr.indexOf(oldChar); + // 在遇见重复出现的unicode代码的时候会造成从源字符串获取非unicode编码字符的时候截取索引越界等 + int index = matcher.start(); + + sb.append(unicodeStr.substring(count, index));//添加前面不是unicode的字符 + sb.append(newChar);//添加转换后的字符 + count = index+oldChar.length();//统计下标移动的位置 + } + sb.append(unicodeStr.substring(count, length));//添加末尾不是Unicode的字符 + return sb.toString(); + } + + /** + * 字符串转换unicode + * @param string + * @return + */ + public static String string2Unicode(String string) { + StringBuffer unicode = new StringBuffer(); + for (int i = 0; i < string.length(); i++) { + // 取出每一个字符 + char c = string.charAt(i); + // 转换为unicode + unicode.append("\\u" + Integer.toHexString(c)); + } + + return unicode.toString(); + } + + /** + * unicode 转字符串 + * @param unicode 全为 Unicode 的字符串 + * @return + */ + public static String unicode2String(String unicode) { + StringBuffer string = new StringBuffer(); + String[] hex = unicode.split("\\\\u"); + + for (int i = 1; i < hex.length; i++) { + // 转换出每一个代码点 + int data = Integer.parseInt(hex[i], 16); + // 追加成string + string.append((char) data); + } + + return string.toString(); + } + } \ No newline at end of file diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/GetServerTimeHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/DeviceGetServerTimeHandler.java similarity index 82% rename from jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/GetServerTimeHandler.java rename to jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/DeviceGetServerTimeHandler.java index f17dc30fa..2afe0e5ba 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/GetServerTimeHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/DeviceGetServerTimeHandler.java @@ -16,8 +16,8 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component -public class GetServerTimeHandler extends AbstractEBikeHandler { - private final String type = EBikeCommandEnum.GET_SERVER_TIME.getCode(); +public class DeviceGetServerTimeHandler extends AbstractEBikeHandler { + private final String type = EBikeCommandEnum.DEVICE_GET_SERVER_TIME.getCode(); @Override public void afterPropertiesSet() throws Exception { @@ -35,13 +35,13 @@ public class GetServerTimeHandler extends AbstractEBikeHandler { public byte[] supplyProcess(EBikeDataProtocol dataProtocol, ChannelHandlerContext ctx) { // 解析字节数组 EBikeMessageCmd22 message = (EBikeMessageCmd22) AbsEBikeMessage.parseMessage(dataProtocol.getBytes()); - log.info("设备获取服务器时间:{}", JSON.toJSONString(message)); + log.info("设备 获取服务器时间:{}", JSON.toJSONString(message)); // 保存时间 saveLastTimeAndCheckChannel(message.getPhysicalId() + "", ctx); // 获取当前服务器10位时间戳 byte[] timeBytes = BytesUtil.getIntBytes((int) (System.currentTimeMillis() / 1000)); - // System.out.println("data: " + BytesUtil.bytesToIntLittle(timeBytes)); + return getResult(dataProtocol, timeBytes); } } diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java index 84757fe1b..c191d449a 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java @@ -3,16 +3,21 @@ package com.jsowell.netty.handler.electricbicycles; import com.alibaba.fastjson2.JSON; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ebike.EBikeDataProtocol; -import com.jsowell.common.util.BytesUtil; -import com.jsowell.common.util.bean.SerializationUtil; +import com.jsowell.common.enums.ebike.PortStatusEnum; +import com.jsowell.common.util.StringUtils; import com.jsowell.netty.factory.EBikeOperateFactory; import com.jsowell.pile.domain.ebike.AbsEBikeMessage; import com.jsowell.pile.domain.ebike.EBikeCommandEnum; import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd21; +import com.jsowell.pile.service.PileBasicInfoService; +import com.jsowell.pile.service.PileConnectorInfoService; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; + /** * 设备心跳包 */ @@ -21,6 +26,12 @@ import org.springframework.stereotype.Component; public class HeartbeatHandler extends AbstractEBikeHandler { private final String type = EBikeCommandEnum.HEARTBEAT_2.getCode(); + @Autowired + private PileBasicInfoService pileBasicInfoService; + + @Autowired + private PileConnectorInfoService pileConnectorInfoService; + @Override public void afterPropertiesSet() throws Exception { EBikeOperateFactory.register(type, this); @@ -40,17 +51,46 @@ public class HeartbeatHandler extends AbstractEBikeHandler { // 保存时间 saveLastTimeAndCheckChannel(message.getPhysicalId() + "", ctx); - try { - byte[] serialize = SerializationUtil.serialize(message); - log.info("心跳包序列化:{}", BytesUtil.binary(serialize, 16)); - EBikeMessageCmd21 deserialize = SerializationUtil.deserialize(EBikeMessageCmd21.class, serialize); - log.info("心跳包反序列化:{}", JSON.toJSONString(deserialize)); - } catch (Exception e) { - log.info("error", e); - } - EBikeMessageCmd21.DeviceHeartbeat deviceHeartbeat = message.getDeviceHeartbeat(); log.info("设备心跳包:{}", JSON.toJSONString(message)); + + updatePileStatus(message); + return getResult(dataProtocol, Constants.zeroByteArray); } + + /** + * 更新充电桩状态 + * @param message + */ + private void updatePileStatus(EBikeMessageCmd21 message) { + String pileSn = message.getPhysicalId() + ""; + EBikeMessageCmd21.DeviceHeartbeat deviceHeartbeat = message.getDeviceHeartbeat(); + int portNumber = deviceHeartbeat.getPortNumber(); + List portStatus = deviceHeartbeat.getPortStatus(); + for (int i = 0; i < portNumber; i++) { + // 组装pile_connector_info表数据 + String connectorCode = String.format("%1$02d", i + 1); + String pileConnectorCode = pileSn + connectorCode; + // 电单车协议状态 + String eBikeStatus = portStatus.get(i); + pileConnectorInfoService.updateConnectorStatus(pileConnectorCode, eBikeStatusTransformDBStatus(eBikeStatus)); + } + } + + /** + * 电单车协议状态转换为数据库状态 + * @param eBikeStatus + * @return + */ + private String eBikeStatusTransformDBStatus(String eBikeStatus) { + String dbStatus = Constants.ZERO; // 默认0-离网 + if (StringUtils.isNotBlank(eBikeStatus)) { + PortStatusEnum enumByValue = PortStatusEnum.getEnumByValue(Integer.parseInt(eBikeStatus)); + if (enumByValue != null) { + dbStatus = enumByValue.getDbStatus(); + } + } + return dbStatus; + } } diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HostGetServerTimeHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HostGetServerTimeHandler.java new file mode 100644 index 000000000..0d9bf4eee --- /dev/null +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HostGetServerTimeHandler.java @@ -0,0 +1,56 @@ +package com.jsowell.netty.handler.electricbicycles; + +import com.alibaba.fastjson2.JSON; +import com.jsowell.common.core.domain.ebike.EBikeDataProtocol; +import com.jsowell.common.util.BytesUtil; +import com.jsowell.netty.factory.EBikeOperateFactory; +import com.jsowell.pile.domain.ebike.AbsEBikeMessage; +import com.jsowell.pile.domain.ebike.EBikeCommandEnum; +import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd12; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 设备获取服务器时间 + */ +@Slf4j +@Component +public class HostGetServerTimeHandler extends AbstractEBikeHandler { + private final String type = EBikeCommandEnum.HOST_GET_SERVER_TIME.getCode(); + + @Override + public void afterPropertiesSet() throws Exception { + EBikeOperateFactory.register(type, this); + } + + /** + * 执行逻辑 + * 有应答 + * + * @param dataProtocol + * @param ctx + */ + @Override + public byte[] supplyProcess(EBikeDataProtocol dataProtocol, ChannelHandlerContext ctx) { + // 解析字节数组 + EBikeMessageCmd12 message = (EBikeMessageCmd12) AbsEBikeMessage.parseMessage(dataProtocol.getBytes()); + log.info("主机 获取服务器时间:{}", JSON.toJSONString(message)); + // 保存时间 + saveLastTimeAndCheckChannel(message.getPhysicalId() + "", ctx); + + // 获取当前服务器10位时间戳 + byte[] timeBytes = BytesUtil.getIntBytes((int) (System.currentTimeMillis() / 1000)); + // System.out.println("data: " + BytesUtil.bytesToIntLittle(timeBytes)); + return getResult(dataProtocol, timeBytes); + } + + public static void main(String[] args) { + // DE 5C A9 5F,转小端模式,=0x5FA95CDE=1604934878=2020-11-09 23:14:38 + String str = "DE 5C A9 5F".replace(" ", ""); + byte[] bytes = BytesUtil.hexStringToByteArray(str); + System.out.println("data: " + BytesUtil.binary(bytes, 16)); + System.out.println("time: " + BytesUtil.bytesToIntLittle(bytes)); + + } +} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/RegistrationHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/RegistrationHandler.java index 8b90effbd..a9a6ebb7c 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/RegistrationHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/RegistrationHandler.java @@ -7,8 +7,10 @@ import com.jsowell.netty.factory.EBikeOperateFactory; import com.jsowell.pile.domain.ebike.AbsEBikeMessage; import com.jsowell.pile.domain.ebike.EBikeCommandEnum; import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd20; +import com.jsowell.pile.service.PileBasicInfoService; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** @@ -19,6 +21,9 @@ import org.springframework.stereotype.Component; public class RegistrationHandler extends AbstractEBikeHandler { private final String type = EBikeCommandEnum.REGISTRATION.getCode(); + @Autowired + private PileBasicInfoService pileBasicInfoService; + @Override public void afterPropertiesSet() throws Exception { EBikeOperateFactory.register(type, this); @@ -39,6 +44,7 @@ public class RegistrationHandler extends AbstractEBikeHandler { saveLastTimeAndCheckChannel(message.getPhysicalId() + "", ctx); EBikeMessageCmd20.DeviceRegister deviceRegister = message.getDeviceRegister(); log.info("设备注册包:{}", JSON.toJSONString(message)); + pileBasicInfoService.registrationEBikePile(message); return getResult(dataProtocol, Constants.zeroByteArray); } } diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java index 0e09df344..ff2ce1d79 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/AbstractYkcHandler.java @@ -78,7 +78,7 @@ public abstract class AbstractYkcHandler implements InitializingBean { */ protected void saveLastTimeAndCheckChannel(String pileSn, ChannelHandlerContext ctx) { String redisKey = CacheConstants.PILE_LAST_CONNECTION + pileSn; - redisCache.setCacheObject(redisKey, DateUtils.getDateTime(), CacheConstants.cache_expire_time_1d); + redisCache.setCacheObject(redisKey, DateUtils.getDateTime(), CacheConstants.cache_expire_time_30d); // 保存桩号和channel的关系 PileChannelEntity.checkChannel(pileSn, ctx); diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java index d8f1e65d5..2cd48363c 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java @@ -1,6 +1,5 @@ package com.jsowell.netty.server.electricbicycles; -import com.alibaba.fastjson2.JSON; import com.google.common.collect.Lists; import com.jsowell.common.enums.ykc.PileChannelEntity; import com.jsowell.common.util.BytesUtil; @@ -61,14 +60,11 @@ public class ElectricBicyclesServerHandler extends ChannelInboundHandlerAdapter */ @Override public void channelRead(ChannelHandlerContext ctx, Object message) throws Exception { - Channel channel = ctx.channel(); - log.info("收到消息, channelId:{}, msg:{}", channel.id().toString(), JSON.toJSONString(message)); byte[] msg = (byte[]) message; - // 处理数据 byte[] response = eBikeService.process(msg, ctx); if (Objects.nonNull(response)) { - log.info("响应数据:{}", BytesUtil.binary(response, 16)); + log.info("[响应数据]:{}", BytesUtil.binary(response, 16)); // 响应客户端 ByteBuf buffer = ctx.alloc().buffer().writeBytes(response); // this.channelWrite(channel.id(), buffer); diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/service/electricbicycles/impl/EBikeBusinessServiceImpl.java b/jsowell-netty/src/main/java/com/jsowell/netty/service/electricbicycles/impl/EBikeBusinessServiceImpl.java index 571f4ad9b..92c260183 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/service/electricbicycles/impl/EBikeBusinessServiceImpl.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/service/electricbicycles/impl/EBikeBusinessServiceImpl.java @@ -33,13 +33,14 @@ public class EBikeBusinessServiceImpl implements EBikeBusinessService { @Override public byte[] process(byte[] msg, ChannelHandlerContext ctx) { - EBikeDataProtocol ykcDataProtocol = new EBikeDataProtocol(msg); + EBikeDataProtocol eBikeDataProtocol = new EBikeDataProtocol(msg); // 获取帧类型 - String command = BytesUtil.bin2HexStr(ykcDataProtocol.getCommand()); + String command = BytesUtil.bin2HexStr(eBikeDataProtocol.getCommand()); + log.info("收到消息, channelId:{}, 指令:{}, msg:{}", ctx.channel().id().toString(), command, BytesUtil.binary(msg, 16)); // 获取业务处理handler AbstractEBikeHandler invokeStrategy = EBikeOperateFactory.getInvokeStrategy(command); if (invokeStrategy != null) { - return invokeStrategy.supplyProcess(ykcDataProtocol, ctx); + return invokeStrategy.supplyProcess(eBikeDataProtocol, ctx); } return null; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileBasicInfo.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileBasicInfo.java index d0c548b2d..a38c4877d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileBasicInfo.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileBasicInfo.java @@ -3,6 +3,8 @@ package com.jsowell.pile.domain; import com.fasterxml.jackson.annotation.JsonFormat; import com.jsowell.common.annotation.Excel; import com.jsowell.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -14,6 +16,8 @@ import java.util.Date; * @author jsowell * @date 2022-08-26 */ +@Getter +@Setter public class PileBasicInfo extends BaseEntity { private static final long serialVersionUID = 1L; @@ -52,9 +56,9 @@ public class PileBasicInfo extends BaseEntity { private String secretKey; /** - * 软件协议(1-云快充;2-永联) + * 软件协议(1-云快充; 2-永联; 3-友电) */ - @Excel(name = "软件协议", readConverterExp = "1=-云快充;2-永联") + @Excel(name = "软件协议", readConverterExp = "1=-云快充; 2-永联; 3-友电") private String softwareProtocol; /** @@ -107,131 +111,6 @@ public class PileBasicInfo extends BaseEntity { */ private String delFlag; - public void setId(Long id) { - this.id = id; - } - - public Long getId() { - return id; - } - - public void setSn(String sn) { - this.sn = sn; - } - - public String getSn() { - return sn; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public void setBusinessType(String businessType) { - this.businessType = businessType; - } - - public String getBusinessType() { - return businessType; - } - - public void setSoftwareProtocol(String softwareProtocol) { - this.softwareProtocol = softwareProtocol; - } - - public String getSoftwareProtocol() { - return softwareProtocol; - } - - public void setProductionDate(Date productionDate) { - this.productionDate = productionDate; - } - - public Date getProductionDate() { - return productionDate; - } - - public void setLicenceId(Long licenceId) { - this.licenceId = licenceId; - } - - public Long getLicenceId() { - return licenceId; - } - - public void setModelId(Long modelId) { - this.modelId = modelId; - } - - public Long getModelId() { - return modelId; - } - - public void setSimId(Long simId) { - this.simId = simId; - } - - public Long getSimId() { - return simId; - } - - public void setMerchantId(Long merchantId) { - this.merchantId = merchantId; - } - - public Long getMerchantId() { - return merchantId; - } - - public void setStationId(Long stationId) { - this.stationId = stationId; - } - - public Long getStationId() { - return stationId; - } - - public void setFaultReason(String faultReason) { - this.faultReason = faultReason; - } - - public String getFaultReason() { - return faultReason; - } - - public void setDelFlag(String delFlag) { - this.delFlag = delFlag; - } - - public String getDelFlag() { - return delFlag; - } - - public String getSecretKey() { - return secretKey; - } - - public void setSecretKey(String secretKey) { - this.secretKey = secretKey; - } - - public static long getSerialVersionUID() { - return serialVersionUID; - } - - @Override - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java index ef12e063b..0546ba61d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java @@ -1,5 +1,6 @@ package com.jsowell.pile.domain.ebike; +import com.jsowell.common.YouDianUtils; import com.jsowell.common.util.BytesUtil; import com.jsowell.pile.domain.ebike.deviceupload.*; import lombok.Getter; @@ -41,6 +42,8 @@ public abstract class AbsEBikeMessage { return new EBikeMessageCmd04(header, length, physicalId, messageId, command, null, checksum, new EBikeMessageCmd04.ConfirmOrder(dataBytes)); case "06": return new EBikeMessageCmd06(header, length, physicalId, messageId, command, null, checksum, new EBikeMessageCmd06.PowerHeartbeat(dataBytes)); + case "12": + return new EBikeMessageCmd12(header, length, physicalId, messageId, command, null, checksum); case "20": return new EBikeMessageCmd20(header, length, physicalId, messageId, command, null, checksum, new EBikeMessageCmd20.DeviceRegister(dataBytes)); case "21": @@ -73,7 +76,7 @@ public abstract class AbsEBikeMessage { // 读取物理ID byte[] physicalIdBytes = Arrays.copyOfRange(messageBytes, 5, 9); - int physicalId = BytesUtil.bytesToIntLittle(physicalIdBytes); + int physicalId = YouDianUtils.convertToPhysicalId(physicalIdBytes); // 读取消息ID byte[] messageIdBytes = Arrays.copyOfRange(messageBytes, 9, 11); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/EBikeCommandEnum.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/EBikeCommandEnum.java index 96ee33931..36196b3ef 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/EBikeCommandEnum.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/EBikeCommandEnum.java @@ -9,8 +9,9 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public enum EBikeCommandEnum { // HEARTBEAT("01", "设备心跳包"), + HOST_GET_SERVER_TIME("12", "主机获取服务器时间", EBikeMessageCmd12.class), REGISTRATION("20", "设备注册包", EBikeMessageCmd20.class), - GET_SERVER_TIME("22", "设备获取服务器时间", EBikeMessageCmd22.class), + DEVICE_GET_SERVER_TIME("22", "设备获取服务器时间", EBikeMessageCmd22.class), HEARTBEAT_2("21", "设备心跳包", EBikeMessageCmd21.class), CARD_OPERATION("02", "刷卡操作", EBikeMessageCmd02.class), SETTLEMENT_UPLOAD("03", "结算消费信息上传", EBikeMessageCmd03.class), diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd12.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd12.java new file mode 100644 index 000000000..8097f40a1 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd12.java @@ -0,0 +1,34 @@ +package com.jsowell.pile.domain.ebike.deviceupload; + +import com.jsowell.common.util.bean.SerializationUtil; +import com.jsowell.pile.domain.ebike.AbsEBikeMessage; +import lombok.Getter; +import lombok.Setter; + +/** + * 主机获取服务器时间(0x12) + * 此命令主机每次上电后就会发送,直至服务器应答后就停止发送。如服务器无应答,则每隔3分钟发送一次请求 + * 每12小时从服务器获取一次时间,如服务器不应答则每隔3分钟发送一次请求 + * 不带RTC模块的主机不会发送此命令 + * DE 5C A9 5F,转小端模式,=0x5FA95CDE=1604934878=2020-11-09 23:14:38 + */ +@Getter +@Setter +public class EBikeMessageCmd12 extends AbsEBikeMessage { + + public EBikeMessageCmd12(String header, int length, int physicalId, int messageId, String command, Object payload, int checksum) { + super(header, length, physicalId, messageId, command, payload, checksum); + } + + @Override + public void parsePayload(byte[] dataBytes) { + + } + + @Override + public byte[] getMessageBytes() { + byte[] serialize = SerializationUtil.serialize(this); + return serialize; + } + +} \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java index 5d1d671d8..a1610074a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java @@ -42,7 +42,7 @@ public class EBikeMessageCmd20 extends AbsEBikeMessage { /** * 端口数量 表示设备总共有多少个端口 */ - private String portNumber; + private int portNumber; /** * 虚拟ID:需要内部组网的设备的本地地址,如485、LORA系列,如不需组网的设备,默认为00 @@ -66,7 +66,7 @@ public class EBikeMessageCmd20 extends AbsEBikeMessage { public DeviceRegister(byte[] dataBytes) { this.firmwareVersion = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, 0, 2)) * 0.01 + ""; - this.portNumber = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, 2, 3)) + ""; + this.portNumber = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, 2, 3)); this.virtualId = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, 3, 4)) + ""; this.deviceType = BytesUtil.printHexBinary(Arrays.copyOfRange(dataBytes, 4, 5)); this.workMode = BytesUtil.bcd2StrLittle(Arrays.copyOfRange(dataBytes, 5, 6)); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java index 029ba14e7..04c8463db 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java @@ -62,6 +62,8 @@ public class EBikeMessageCmd21 extends AbsEBikeMessage { */ private List portStatus; + private List statusDescList; + /** * 信号强度:指分机与主机之间的无线信号强度,如LORA信号。00则为有线组网或无信号强度功能 */ @@ -79,13 +81,21 @@ public class EBikeMessageCmd21 extends AbsEBikeMessage { byte[] statusBytes = BytesUtil.copyBytes(dataBytes, 3, this.portNumber); List statusList = Lists.newArrayList(); + List statusDescList = Lists.newArrayList(); for (byte statusByte : statusBytes) { int status = BytesUtil.bytesToIntLittle(new byte[]{statusByte}); - statusList.add(PortStatusEnum.getDescriptionByValue(status)); + statusList.add(String.valueOf(status)); + statusDescList.add(PortStatusEnum.getDescriptionByValue(status)); } this.portStatus = statusList; - this.rssi = BytesUtil.bcd2StrLittle(Arrays.copyOfRange(dataBytes, dataBytes.length - 2, dataBytes.length - 1)); - this.temperature = BytesUtil.bcd2StrLittle(Arrays.copyOfRange(dataBytes, dataBytes.length - 1, dataBytes.length)); + this.statusDescList = statusDescList; + this.rssi = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, dataBytes.length - 2, dataBytes.length - 1)) + ""; + // + int i = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, dataBytes.length - 1, dataBytes.length)); + if (i > 65) { + i = i - 65; + } + this.temperature = i + ""; } } 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 d0ff490df..463697708 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 @@ -2,6 +2,7 @@ package com.jsowell.pile.service; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.pile.domain.PileBasicInfo; +import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd20; import com.jsowell.pile.dto.*; import com.jsowell.pile.thirdparty.ConnectorInfo; import com.jsowell.pile.thirdparty.EquipmentInfo; @@ -221,4 +222,10 @@ public interface PileBasicInfoService { String startPersonalPileCharging(StartPersonPileDTO dto); void startupResult(ReservationChargingStartupResult chargingStartupResult); + + /** + * 注册电单车桩 + * @param message + */ + void registrationEBikePile(EBikeMessageCmd20 message); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java index f51f423ac..9c4583e7e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java @@ -1,6 +1,5 @@ package com.jsowell.pile.service.impl; -import com.alibaba.fastjson2.JSON; import com.google.common.collect.Maps; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.core.redis.RedisCache; @@ -25,17 +24,22 @@ public class AdapayCallbackRecordServiceImpl implements AdapayCallbackRecordServ @Autowired private RedisCache redisCache; + /** + * 接收到支付回调记录保存到数据库 + * paymentId添加了唯一约束, 如果存在则报错 + * @param callbackRecord + */ @Override public void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord) { - AdapayCallbackRecord adapayCallbackRecord = selectByPaymentId(callbackRecord.getPaymentId()); - if (adapayCallbackRecord != null) { - return; - } - try { - adapayCallbackRecordMapper.insert(callbackRecord); - } catch (Exception e) { - log.error("saveAdapayCallbackRecord:{}, error", JSON.toJSONString(callbackRecord), e); - } + // AdapayCallbackRecord adapayCallbackRecord = selectByPaymentId(callbackRecord.getPaymentId()); + // if (adapayCallbackRecord != null) { + // return; + // } + // try { + // } catch (Exception e) { + // log.error("saveAdapayCallbackRecord:{}, error", JSON.toJSONString(callbackRecord), e); + // } + adapayCallbackRecordMapper.insert(callbackRecord); } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index b74777671..e29da0188 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -3872,7 +3872,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { .payMode(OrderPayRecordEnum.WHITELIST_PAYMENT.getValue()) .payAmount(payAmount) .acquirer(AcquirerEnum.LOCAL.getValue()) - .createBy("system") + .createBy(Constants.SYSTEM) .createTime(DateUtils.getNowDate()) .delFlag(DelFlagEnum.NORMAL.getValue()) .build(); 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 0d787f9f5..67e44f8e6 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 @@ -11,13 +11,11 @@ import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.lianlian.LianLianPileStatusEnum; -import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum; -import com.jsowell.common.enums.ykc.PileConnectorStatusEnum; -import com.jsowell.common.enums.ykc.PileStatusEnum; -import com.jsowell.common.enums.ykc.ReturnCodeEnum; +import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.*; import com.jsowell.pile.domain.*; +import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd20; import com.jsowell.pile.dto.*; import com.jsowell.pile.mapper.PileBasicInfoMapper; import com.jsowell.pile.service.*; @@ -27,6 +25,8 @@ import com.jsowell.pile.thirdparty.ConnectorInfo; import com.jsowell.pile.thirdparty.EquipmentInfo; import com.jsowell.pile.thirdparty.ZDLConnectorInfo; import com.jsowell.pile.thirdparty.ZDLEquipmentInfo; +import com.jsowell.pile.transaction.dto.PileTransactionDTO; +import com.jsowell.pile.transaction.service.TransactionService; import com.jsowell.pile.util.UserUtils; import com.jsowell.pile.vo.base.MerchantInfoVO; import com.jsowell.pile.vo.base.PileInfoVO; @@ -83,6 +83,9 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { @Autowired private RedisCache redisCache; + @Autowired + private TransactionService pileTransactionService; + @Value("${baseurl.prefix}") private String BASE_URL_PREFIX; @@ -1249,4 +1252,59 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { wxAppletRemoteService.reservationStartupResultSendMsg(memberVO.getOpenId(), startTime, endTime, startUpResult, failReason); } } + + /** + * 注册电单车桩 + * @param message + */ + @Override + public void registrationEBikePile(EBikeMessageCmd20 message) { + // 根据物理id(桩编号)查询桩信息 + PileBasicInfo pileBasicInfo = this.selectPileBasicInfoBySN(message.getPhysicalId() + ""); + if (pileBasicInfo != null) { + return; + } + List basicInfoList = Lists.newArrayList(); + List connectorInfoList = Lists.newArrayList(); + + // 组装pile_basic_info表数据 + PileBasicInfo basicInfo = new PileBasicInfo(); + // 桩编号 + String sn = message.getPhysicalId() + ""; + basicInfo.setSn(sn); + basicInfo.setBusinessType(Constants.ONE); // 经营类型 1-运营桩;2-个人桩 + basicInfo.setSoftwareProtocol(Constants.THREE); // 软件协议 + basicInfo.setMerchantId(Long.valueOf("1")); // 运营商id 默认1 + basicInfo.setStationId(Long.valueOf("2")); // 站点id + basicInfo.setModelId(null); // 型号id + basicInfo.setProductionDate(new Date()); // 生产日期 + basicInfo.setLicenceId(null); // TODO 证书编号 + basicInfo.setSimId(null); // TODO sim卡 + basicInfo.setRemark(null); // 备注 + basicInfo.setCreateBy(Constants.SYSTEM); // 创建人 + basicInfo.setDelFlag(DelFlagEnum.NORMAL.getValue()); // 删除标识 + basicInfoList.add(basicInfo); + + EBikeMessageCmd20.DeviceRegister deviceRegister = message.getDeviceRegister(); + int portNumber = deviceRegister.getPortNumber(); + PileConnectorInfo connectorInfo; + for (int i = 1; i < portNumber + 1; i++) { + // 组装pile_connector_info表数据 + connectorInfo = new PileConnectorInfo(); + connectorInfo.setPileSn(sn); // sn号 + String connectorCode = String.format("%1$02d", i); + connectorInfo.setPileConnectorCode(sn + connectorCode); // 枪口号 + connectorInfo.setStatus(Constants.ZERO); //状态,默认 0-离网 + connectorInfo.setCreateBy(Constants.SYSTEM); // 创建人 + connectorInfo.setDelFlag(DelFlagEnum.NORMAL.getValue()); // 删除标识 + connectorInfoList.add(connectorInfo); + } + + // 批量入库 + PileTransactionDTO transactionDTO = PileTransactionDTO.builder() + .pileBasicInfoList(basicInfoList) + .pileConnectorInfoList(connectorInfoList) + .build(); + pileTransactionService.doCreatePileTransaction(transactionDTO); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java index 716dfe765..d97064c8a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java @@ -455,6 +455,17 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService { infoVO.setRatedPower(pileModelInfoVO.getRatedPower()); infoVO.setRatedCurrent(pileModelInfoVO.getRatedCurrent()); infoVO.setRatedVoltage(pileModelInfoVO.getRatedVoltage()); + String chargePortType; + if (StringUtils.equals(Constants.TWO, pileModelInfoVO.getChargerPileType())) { + chargePortType = Constants.THREE; + } else { + if (StringUtils.equals(Constants.ONE, pileModelInfoVO.getSpeedType())) { + chargePortType = Constants.ONE; + } else { + chargePortType = Constants.TWO; + } + } + infoVO.setChargePortType(chargePortType); } connectorInfoList.add(infoVO); } @@ -682,14 +693,14 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService { * @return true离线 */ public boolean checkPileOffLine(String pileSn) { - // 获取桩最后连接时间,最后连接到平台的时间在1分钟之前,判定为离线 + // 获取桩最后连接时间,最后连接到平台的时间在3分钟之前,判定为离线 String lastConnectionTime = redisCache.getCacheObject(CacheConstants.PILE_LAST_CONNECTION + pileSn); if (StringUtils.isBlank(lastConnectionTime)) { // 没有最后连接时间,返回离线 return true; } long l = DateUtils.intervalTime(lastConnectionTime, DateUtils.getDateTime()); - return l >= 1L; + return l > 3L; } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java index ab7a831af..fd19f794e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java @@ -5,7 +5,6 @@ import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.pile.domain.PileMemberRelation; import com.jsowell.pile.mapper.PileMemberRelationMapper; -import com.jsowell.pile.service.PileConnectorInfoService; import com.jsowell.pile.service.PileMemberRelationService; import com.jsowell.pile.vo.uniapp.customer.MemberVO; import org.springframework.beans.factory.annotation.Autowired; @@ -24,8 +23,6 @@ public class PileMemberRelationServiceImpl implements PileMemberRelationService @Autowired private PileMemberRelationMapper pileMemberRelationMapper; - @Autowired - private PileConnectorInfoService pileConnectorInfoService; /** * 查询桩与用户绑定关系 * diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java index b5e63cf0e..9c4ad86d9 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java @@ -581,7 +581,7 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic pileReservationInfo.setFreq("daily"); pileReservationInfo.setStatus(Constants.ZERO); pileReservationInfo.setCreateTime(DateUtils.getNowDate()); - pileReservationInfo.setCreateBy("system"); + pileReservationInfo.setCreateBy(Constants.SYSTEM); pileReservationInfo.setDelFlag(DelFlagEnum.NORMAL.getValue()); pileReservationInfoMapper.insert(pileReservationInfo); log.info("未查询到个人桩预约信息, 初始化个人桩预约信息:{}", JSON.toJSONString(pileReservationInfo)); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 9862c2fab..70a55f3a2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -762,11 +762,13 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 余额支付最大下发200 BigDecimal defaultAmount = Constants.BALANCE_PAY_MAX_AMOUNT; if (totalAccountAmount.compareTo(defaultAmount) < 0) { - principalBalancePay = memberVO.getPrincipalBalance(); - giftBalancePay = memberVO.getGiftBalance(); + // 总余额小于200,下发全部余额 + principalBalancePay = memberVO.getPrincipalBalance(); // 本金余额全部支付 + giftBalancePay = memberVO.getGiftBalance(); // 赠送金额全部支付 } else { - principalBalancePay = defaultAmount.min(memberVO.getPrincipalBalance()); - giftBalancePay = defaultAmount.subtract(principalBalancePay); + // 总余额大于200,下发200 + principalBalancePay = defaultAmount.min(memberVO.getPrincipalBalance()); // 本金余额与200取最小值 + giftBalancePay = defaultAmount.subtract(principalBalancePay); // defaultAmount - principalBalancePay 为赠送金支付金额 } Map resultMap = Maps.newHashMap(); resultMap.put("principalBalancePay", principalBalancePay); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/ConnectorInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/ConnectorInfoVO.java index f381425d9..5e4fa27ef 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/ConnectorInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/ConnectorInfoVO.java @@ -46,6 +46,11 @@ public class ConnectorInfoVO { */ private String chargingType; + /** + * 充电接口类型 1-快充,2-慢充,3-电单车 + */ + private String chargePortType; + /** * 额定功率 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/PileInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/PileInfoVO.java index 39432b58e..0402a818a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/PileInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/PileInfoVO.java @@ -60,6 +60,11 @@ public class PileInfoVO { */ private String speedType; + /** + * 充电接口类型 1-快充,2-慢充,3-电单车 + */ + private String chargePortType; + /** * 枪口编号 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PileConnectorVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/AppletPileDetailVO.java similarity index 87% rename from jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PileConnectorVO.java rename to jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/AppletPileDetailVO.java index 1111aba55..ae0dcd49d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PileConnectorVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/AppletPileDetailVO.java @@ -11,21 +11,25 @@ import lombok.NoArgsConstructor; import java.util.List; +/** + * 小程序充电桩详情页VO + * 小程序 + */ @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class PileConnectorVO { +public class AppletPileDetailVO { - // 充电枪信息列表 + // 充电桩信息 + private PileInfoVO pileInfo; + + // 充电枪口信息列表 private List connectorInfoList; // 计费模板信息 // private BillingTemplateVO billingTemplate; - // 充电桩信息 - private PileInfoVO pileInfo; - // 运营商信息 private MerchantInfoVO merchantInfo; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PileConnectorDetailVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PileConnectorDetailVO.java index 1948e31f5..074a1bc2e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PileConnectorDetailVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PileConnectorDetailVO.java @@ -55,5 +55,8 @@ public class PileConnectorDetailVO { */ private String softwareProtocol; - + /** + * 充电接口类型 1-快充,2-慢充,3-电单车 + */ + private String chargePortType; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileDetailVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileDetailVO.java index 02eed999f..274b2348e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileDetailVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileDetailVO.java @@ -132,4 +132,9 @@ public class PileDetailVO { * 型号名称 */ private String modelName; + + /** + * 充电接口类型 1-快充,2-慢充,3-电单车 + */ + private String chargePortType; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileModelInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileModelInfoVO.java index d2664d4ef..b80463e58 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileModelInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileModelInfoVO.java @@ -47,7 +47,7 @@ public class PileModelInfoVO { private String ratedVoltage; /** - * 充电类型 + * 充电类型 (1-快充;2-慢充) */ private String speedType; diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml index c41521271..6c5e24dba 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileBasicInfoMapper.xml @@ -261,6 +261,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" t1.sim_id AS simId, t5.iccid AS iccid , t5.sim_supplier as simSupplier, + IF(t4.charger_pile_type = '2','3',(IF(t4.speed_type = '1','1','2'))) AS pileType, t5.operator FROM pile_basic_info t1 @@ -307,10 +308,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" t2.pile_connector_code AS pileConnectorCode, t2.status AS connectorStatus, t1.business_type AS businessType, - t1.software_protocol AS softwareProtocol + t1.software_protocol AS softwareProtocol, + IF(t3.charger_pile_type = '2','3',(IF(t3.speed_type = '1','1','2'))) AS chargePortType FROM pile_basic_info t1 JOIN pile_connector_info t2 ON t1.sn = t2.pile_sn + join pile_model_info t3 on t3.id = t1.model_id WHERE t2.pile_connector_code = #{pileConnectorCode,jdbcType=VARCHAR}