server/platform/src/main/java/com/doumee/api/business/DouyinVerifyController.java
@@ -16,6 +16,7 @@ import com.doumee.dao.business.model.DouyinVerifyLog; import com.doumee.dao.business.model.DouyinVerifyRecord; import com.doumee.dao.business.vo.DouyinVerifyRecordPageVO; import com.doumee.dao.business.web.response.DouyinShopPoiVO; import com.doumee.service.business.DouyinVerifyLogService; import com.doumee.service.business.DouyinVerifyService; import io.swagger.annotations.Api; @@ -64,22 +65,26 @@ return ApiResponse.success(douyinVerifyService.findManagePage(pageWrap)); } @ApiOperation("æ¥è¯¢æé³åæ·ä¸é¨åº(ç¨äºéæ ¸éé¨åº;account_id ä»åå ¸è¯»å)") @ApiOperation("æ¥è¯¢æé³åæ·ä¸é¨åº(poiId + é¨åºåç§°æå¯¹è¿å;account_id ä»åå ¸è¯»å)") @PostMapping("/poiList") @RequiresPermissions("business:douyinVerify:query") public ApiResponse<List<String>> poiList() { public ApiResponse<List<DouyinShopPoiVO>> poiList() { // é¨åºæ¥è¯¢ä¸ºæ ç¶æéä¼ (æ è½åº),Controller â DouyinClient ç´è¿;account_id ç± Client ä»åå ¸è¯»å DouyinBaseResp<DouyinShopPoiResp> resp = douyinClient.shopPoiQuery(); List<DouyinShopPoiResp.Poi> pois = resp == null || resp.getData() == null ? null : resp.getData().getPois(); if (pois == null || pois.isEmpty()) { return ApiResponse.success(Collections.emptyList()); } // ä» æåé¨åºID,è¿æ»¤ poi èç¹æ poiId ä¸ºç©ºçæ¡ç® List<String> poiIds = pois.stream() // æåé¨åºID + é¨åºåç§°æå¯¹è¿å;è¿æ»¤ poi èç¹æ poiId ä¸ºç©ºçæ¡ç® // é¨åºåç§°å®é è·¯å¾ä¸º pois[].account.poi_account.account_name List<DouyinShopPoiVO> poiList = pois.stream() .filter(p -> p != null && p.getPoi() != null && StringUtils.isNotBlank(p.getPoi().getPoiId())) .map(p -> p.getPoi().getPoiId()) .map(p -> new DouyinShopPoiVO( p.getPoi().getPoiId(), p.getAccount() == null || p.getAccount().getPoiAccount() == null ? null : p.getAccount().getPoiAccount().getAccountName())) .collect(Collectors.toList()); return ApiResponse.success(poiIds); return ApiResponse.success(poiList); } @PreventRepeat server/platform/src/main/resources/application.yml
@@ -9,7 +9,7 @@ # application: # name: parkbike profiles: active: dev active: pro # JSONè¿åé ç½® jackson: # é»è®¤æ¶åº server/services/src/main/java/com/doumee/core/douyin/dto/DouyinShopPoiResp.java
@@ -8,8 +8,10 @@ /** * ãæ¥è¯¢é¨åºä¿¡æ¯ãåºå(data èç¹)ã * <p>GET https://open.douyin.com/goodlife/v1/shop/poi/query/ * <p>è¿ååæ·ä¸å·²è®¤é¢çé¨åºå表,é¨åºIDåµå¥å¨ pois[].poi.poi_idã * å½ååªç¨é¨åºID,å ¶ä½èç¹(account / root_account ç)ä¸åæ å°ã * <p>è¿ååæ·ä¸å·²è®¤é¢çé¨åºå表: * é¨åºIDåµå¥å¨ pois[].poi.poi_id, * é¨åºåç§°åµå¥å¨ pois[].account.poi_account.account_nameã * å½åç¨é¨åºID + é¨åºåç§°,å ¶ä½èç¹ä¸åæ å°ã * * @author rk * @date 2026/06/26 @@ -30,17 +32,21 @@ private String description; /** * å个é¨åºæ¡ç®ãä» è§£æ poi èç¹åé¨åºIDã * å个é¨åºæ¡ç®ãè§£æ poi èç¹åé¨åºID,account.poi_account åé¨åºåç§°ã */ @Data public static class Poi { /** é¨åºåºæ¬ä¿¡æ¯(å« poi_id) */ @JSONField(name = "poi") private PoiInfo poi; /** è´¦å·ä¿¡æ¯(å« parent_account / poi_account,é¨åºåç§°å¨ poi_account.account_name) */ @JSONField(name = "account") private Account account; } /** * é¨åºåºæ¬ä¿¡æ¯ãå½åååºä» ç¨å° poi_idã * é¨åºåºæ¬ä¿¡æ¯ãå½åååºç¨å° poi_idã */ @Data public static class PoiInfo { @@ -48,4 +54,24 @@ @JSONField(name = "poi_id") private String poiId; } /** * è´¦å·ä¿¡æ¯ãå½åååºç¨å° poi_account.account_name ä½ä¸ºé¨åºåç§°å±ç¤ºã */ @Data public static class Account { /** é¨åºå¯¹åºçæé³æ¥å®¢è´¦å·(å« account_name é¨åºåç§°) */ @JSONField(name = "poi_account") private PoiAccount poiAccount; } /** * é¨åºè´¦å·ä¿¡æ¯ãaccount_name ä½ä¸ºé¨åºåç§°å±ç¤ºã */ @Data public static class PoiAccount { /** é¨åºåç§°(æé³ä¾§è´¦å·åç§°,ç¨äºåç«¯éæ ¸éé¨åºå±ç¤º) */ @JSONField(name = "account_name") private String accountName; } } server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
@@ -80,8 +80,8 @@ request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); request.setNotifyUrl(WxMiniConfig.wxProperties.getRefundNotifyUrl()); AmountReq amountReq = new AmountReq(); amountReq.setTotal(1L);//refundDTO.getTotalAmount().longValue()); amountReq.setRefund(1L);//refundDTO.getRefundAmount().longValue()); amountReq.setTotal(refundDTO.getTotalAmount().longValue()); amountReq.setRefund(refundDTO.getRefundAmount().longValue()); amountReq.setCurrency("CNY"); request.setAmount(amountReq); try { server/services/src/main/java/com/doumee/dao/business/web/response/DouyinShopPoiVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package com.doumee.dao.business.web.response; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * æé³åæ·ä¸é¨åº(poiId + é¨åºåç§°æå¯¹è¿å)ã * <p>ç¨äºç®¡ç端 /business/douyinVerify/poiList éæ ¸éé¨åºä¸æå±ç¤ºã * poiId åèªæé³ååº pois[].poi.poi_id,poiName åèª pois[].poi_account.account_nameã * * @author rk * @date 2026/07/03 */ @Data @NoArgsConstructor @AllArgsConstructor @ApiModel("æé³é¨åº(poiId + åç§°)") public class DouyinShopPoiVO { @ApiModelProperty("æé³é¨åºPOI ID(æ ¸éé¨åºID)") private String poiId; @ApiModelProperty("é¨åºåç§°(æé³ poi_account.account_name)") private String poiName; } server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -1377,7 +1377,7 @@ request.setOutTradeNo(goodsorder.getId()); request.setNotifyUrl(WxMiniConfig.wxProperties.getNotifyUrl());//è¿ä¸ªåè°urlå¿ é¡»æ¯httpså¼å¤´ç Amount amount = new Amount(); amount.setTotal(1);//goodsorder.getMoney().intValue()); amount.setTotal(goodsorder.getMoney().intValue()); request.setAmount(amount); // PrepayResponse res = WxMiniConfig.wxPayService.prepay(request); // è·ä¹åä¸å示ä¾ä¸æ ·ï¼å¡«å é¢ä¸ååæ° server/services/src/main/java/com/doumee/service/business/impl/ReportServiceImpl.java
@@ -433,6 +433,8 @@ IPage<OperationOrderVO> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); OperationOrderQueryDTO model = pageWrap.getModel() == null ? new OperationOrderQueryDTO() : pageWrap.getModel(); // ç§ç¨ä¸(status=1):éè¿æ»¤ææ éªè¡è®°å½ç订å(å·²æ¯ä»ä½ç¨æ·ä»æªå¼ééªè¡) boolean queryInProgress = Objects.nonNull(model.getStatus()) && model.getStatus().equals(Constants.ONE); // ââ æ¥éª¤1:å页主æ¥è¯¢ ââ // 主表 goodsorder left join member(åææºå·)+ left join base_param(åç»ç®è½¦åå); @@ -459,6 +461,9 @@ // 订åç±»å:æéªè¡è®°å½ member_rides.type çé(å¯é) .inSql(Objects.nonNull(model.getBikeType()), Goodsorder::getId, "select ordre_id from member_rides where isdeleted = 0 and type = " + model.getBikeType()) // ç§ç¨ä¸(status=1):ä» ä¿çåå¨éªè¡è®°å½ç订å,è¿æ»¤æå·²æ¯ä»ä½æ éªè¡è®°å½çæ°æ® .inSql(queryInProgress, Goodsorder::getId, "select ordre_id from member_rides where isdeleted = 0") .orderByDesc(Goodsorder::getPayDate); IPage<OperationOrderVO> result = goodsorderMapper.selectJoinPage(page, OperationOrderVO.class, wrapper); List<OperationOrderVO> records = result.getRecords(); server/services/src/main/resources/application-dev.yml
@@ -54,12 +54,12 @@ # refundNotifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxRefundNotify notifyUrl: https://test.doumee.cn/bikeWeb/api/wxPayNotify refundNotifyUrl: https://test.doumee.cn/bikeWeb/api/wxRefundNotify keyPath: /usr/local/jars/bike/apiclient_cert.p12 privateCertPath: /usr/local/jars/bike/apiclient_cert.pem privateKeyPath: /usr/local/jars/bike/apiclient_key.pem # keyPath: d://apiclient_cert.p12 # privateCertPath: d://apiclient_cert.pem # privateKeyPath: d://apiclient_key.pem # keyPath: /usr/local/jars/bike/apiclient_cert.p12 # privateCertPath: /usr/local/jars/bike/apiclient_cert.pem # privateKeyPath: /usr/local/jars/bike/apiclient_key.pem keyPath: d://apiclient_cert.p12 privateCertPath: d://apiclient_cert.pem privateKeyPath: d://apiclient_key.pem #æå¡å-------------end--- existsSub: 1 appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24 server/web/src/main/resources/application.yml
@@ -9,7 +9,7 @@ # application: # name: parkbike profiles: active: dev active: pro # JSONè¿åé ç½® jackson: # é»è®¤æ¶åº server/½Ó¿Ú±ä¸ü˵Ã÷.txt
@@ -20,7 +20,7 @@ äºãæé³å¸æ ¸é(æ°æä»¶ DouyinVerifyController,/business/douyinVerify) 4. POST /business/douyinVerify/page æ ¸éè®°å½å页(对å¤) 5. POST /business/douyinVerify/poiList æ¥è¯¢æé³åæ·ä¸é¨åºIDå表(æ å ¥å,è¿å List<String>) 5. POST /business/douyinVerify/poiList æ¥è¯¢æé³åæ·ä¸é¨åºå表(æ å ¥å,è¿å List<DouyinShopPoiVO>:poiId + poiName é¨åºåç§°æå¯¹) 6. POST /business/douyinVerify/cancel æ¤éæ ¸é(管ç端,ä¸å1å°æ¶éå¶) ä¸ãæé³åå(æ°æä»¶ DouyinProductController,/business/douyinProduct)