server/services/db/db_change.sql
@@ -5,6 +5,12 @@ -- ============================================================ -- 2026/04/20 订å表å¢å ç©å级å«å段 -- ============================================================ ALTER TABLE `orders` ADD COLUMN `GOOD_LEVEL` INT DEFAULT NULL COMMENT 'ç©å级å«ï¼category主é®ï¼type=3ï¼' AFTER `GOOD_TYPE`; -- ============================================================ -- 2026/04/17 订åé¢è®¡éè¾¾æ¶é´å段 -- ============================================================ ALTER TABLE `orders` ADD COLUMN `ESTIMATED_DELIVERY_TIME` DATETIME DEFAULT NULL COMMENT 'é¢è®¡éè¾¾æ¶é´' AFTER `CODE`; server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
@@ -17,39 +17,29 @@ ApiClient defaultClient = Configuration.getDefaultApiClient(); // åå§åalipayåæ°ï¼å ¨å±è®¾ç½®ä¸æ¬¡ï¼ defaultClient.setAlipayConfig(getAlipayConfig()); // æé 请æ±åæ°ä»¥è°ç¨æ¥å£ AlipayFundTransUniApi api = new AlipayFundTransUniApi(); AlipayFundTransUniTransferModel data = new AlipayFundTransUniTransferModel(); // 设置åå®¶ä¾§å¯ä¸è®¢åå· data.setOutBizNo("202606300001"); // è®¾ç½®è®¢åæ»éé¢ data.setTransAmount("1"); // 设置æè¿°ç¹å®çä¸å¡åºæ¯ data.setBizScene("DIRECT_TRANSFER"); // 设置ä¸å¡äº§åç data.setProductCode("TRANS_ACCOUNT_NO_PWD"); // 设置转账ä¸å¡çæ é¢ data.setOrderTitle("201905代å"); // è®¾ç½®åæ¯ä»å®ä¸å¡åå· data.setOriginalOrderId("20190620110075000006640000063056"); // è®¾ç½®æ¶æ¬¾æ¹ä¿¡æ¯ Participant payeeInfo = new Participant(); payeeInfo.setIdentity("15345690849"); payeeInfo.setName("æ±è"); payeeInfo.setIdentityType("ALIPAY_LOGON_ID"); data.setPayeeInfo(payeeInfo); // 设置ä¸å¡å¤æ³¨ data.setRemark("201905代å"); // è®¾ç½®è½¬è´¦åºæ¯åç§° data.setTransferSceneName("ä½£éæ¥é ¬"); @@ -74,7 +64,6 @@ signData.setOriCharSet("UTF-8"); data.setSignData(signData); */ try { AlipayFundTransUniTransferResponseModel response = api.transfer(data); } catch (ApiException e) { server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -46,4 +46,43 @@ */ private String keyPath; /** * apiV3Key */ private String apiV3Key; /** * åæ·è¯ä¹¦åºåå· */ private String serialNumer; /** * 鿬¾åè° */ private String refundNotifyUrl; /** * åæ·æ¯ä»å ¬é¥ */ private String pubKeyPath; /** * æ¯ä»ç§é¥ */ private String privateCertPath; /** * æ¯ä»key */ private String privateKeyPath; } server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -191,6 +191,9 @@ @ExcelColumn(name = "ååç±»å") private Integer goodType; @ApiModelProperty(value = "ç©å级å«ï¼category主é®ï¼type=3ï¼") private Integer goodLevel; @ApiModelProperty(value = "è¡¥å ä¿¡æ¯") @ExcelColumn(name = "è¡¥å ä¿¡æ¯") private String supplement; server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.doumee.dao.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; /** * 叿ºè¿è¡ä¸è®¢åæ¥è¯¢è¯·æ± * @author rk * @date 2026/04/17 */ @Data @ApiModel("叿ºè¿è¡ä¸è®¢åæ¥è¯¢è¯·æ±") public class DriverActiveOrderDTO { @NotNull(message = "订åç¶æä¸è½ä¸ºç©º") @ApiModelProperty(value = "订åç¶æï¼3=å·²æ¢åï¼4=æ´¾éä¸", example = "3", required = true) private Integer status; } server/services/src/main/java/com/doumee/dao/dto/DriverGrabOrderDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.doumee.dao.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; /** * 叿ºæ¢åå¤§å æ¥è¯¢è¯·æ± * @author rk * @date 2026/04/17 */ @Data @ApiModel("叿ºæ¢åå¤§å æ¥è¯¢è¯·æ±") public class DriverGrabOrderDTO implements Serializable { @ApiModelProperty(value = "æåºç±»åï¼1=综åæåºï¼å建æ¶é´ååºï¼ï¼2=è·ç¦»æè¿ï¼è·åä»¶é¨åºè·ç¦»ååºï¼", example = "1") private Integer sortType; @ApiModelProperty(value = "ç©åç级IDï¼category type=3ï¼ï¼çé该ç级ä¸çææç©ååç±»", example = "5") private Integer gradeId; @ApiModelProperty(value = "è·ç¦»çéï¼åä½ï¼ç±³ï¼ï¼å¸æºå°åä»¶é¨åºçæå¤§è·ç¦»", example = "5000") private Integer distance; } server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,71 @@ package com.doumee.dao.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.util.List; /** * 叿ºæ¢å大å å表项 * @author rk * @date 2026/04/17 */ @Data @ApiModel("叿ºæ¢å大å å表项") public class DriverGrabOrderVO implements Serializable { @ApiModelProperty(value = "订å主é®") private Integer id; @ApiModelProperty(value = "订åç¼å·") private String code; @ApiModelProperty(value = "å©ä½åéæ°ï¼å½åæ¶é´å°é¢è®¡éè¾¾æ¶é´ï¼") private Long remainMinutes; @ApiModelProperty(value = "æ¯å¦å æ¥ï¼0=å¦ï¼1=æ¯") private Integer isUrgent; @ApiModelProperty(value = "åä»¶é¨åºåç§°") private String depositShopName; @ApiModelProperty(value = "åä»¶é¨åºå°å") private String depositShopAddress; @ApiModelProperty(value = "è·åä»¶é¨åºè·ç¦»ï¼å¦ 500mã1.2kmï¼") private String depositDistance; @ApiModelProperty(value = "åä»¶åç§°ï¼é¨åºåç§°æèªå®ä¹å°ç¹ï¼") private String takeName; @ApiModelProperty(value = "åä»¶è·ç¦»ï¼å¦ 500mã1.2kmï¼") private String takeDistance; @ApiModelProperty(value = "èç³»çµè¯ï¼status=2åä»¶é¨åºçµè¯ï¼status=3/4æåä»¶é¨åºè¿åé¨åºçµè¯ï¼æ åè¿åå件人çµè¯ï¼") private String contactPhone; @ApiModelProperty(value = "叿ºèªé ¬ï¼åï¼") private Long driverFee; @ApiModelProperty(value = "å æ¥è´¹ç¨ï¼åï¼") private Long urgentAmount; @ApiModelProperty(value = "ç©åæç»å表") private List<OrderItem> items; @ApiModelProperty(value = "æ¯å¦è´µéç©å") private Boolean isValuable; @Data @ApiModel("æ¢å大å ç©å项") public static class OrderItem implements Serializable { @ApiModelProperty(value = "ç©ååç§°") private String name; @ApiModelProperty(value = "æ°é") private Integer quantity; } } server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,89 @@ package com.doumee.dao.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.util.List; /** * 叿ºç«¯è®¢å详æ * @author rk * @date 2026/04/17 */ @Data @ApiModel("叿ºç«¯è®¢å详æ ") public class DriverOrderDetailVO implements Serializable { @ApiModelProperty(value = "订å主é®") private Integer id; @ApiModelProperty(value = "订åç¼å·") private String code; @ApiModelProperty(value = "订åç¶æ") private Integer status; @ApiModelProperty(value = "订åç¶ææè¿°") private String statusDesc; @ApiModelProperty(value = "å©ä½åéæ°ï¼å½åæ¶é´å°é¢è®¡éè¾¾æ¶é´ï¼") private Long remainMinutes; @ApiModelProperty(value = "æ¯å¦å æ¥ï¼0=å¦ï¼1=æ¯") private Integer isUrgent; @ApiModelProperty(value = "åä»¶é¨åºåç§°") private String depositShopName; @ApiModelProperty(value = "åä»¶é¨åºå°å") private String depositShopAddress; @ApiModelProperty(value = "è·åä»¶é¨åºè·ç¦»ï¼å¦ 500mã1.2kmï¼") private String depositDistance; @ApiModelProperty(value = "åä»¶åç§°ï¼é¨åºåç§°æèªå®ä¹å°ç¹ï¼") private String takeName; @ApiModelProperty(value = "åä»¶è·ç¦»ï¼å¦ 500mã1.2kmï¼") private String takeDistance; @ApiModelProperty(value = "èç³»çµè¯") private String contactPhone; @ApiModelProperty(value = "叿ºèªé ¬ï¼åï¼") private Long driverFee; @ApiModelProperty(value = "å æ¥è´¹ç¨ï¼åï¼") private Long urgentAmount; @ApiModelProperty(value = "ç©åæç»å表") private List<OrderItem> items; @ApiModelProperty(value = "æ¯å¦è´µéç©å") private Boolean isValuable; @ApiModelProperty(value = "导èªçº¬åº¦ï¼status=2åä»¶é¨åºçº¬åº¦ï¼status=3/4å件纬度ï¼") private Double navigateLat; @ApiModelProperty(value = "导èªç»åº¦ï¼status=2åä»¶é¨åºç»åº¦ï¼status=3/4åä»¶ç»åº¦ï¼") private Double navigateLng; @ApiModelProperty(value = "客æ·ä¿¡æ¯ï¼å¦ï¼åå çï¼ææºå°¾å·1234ï¼") private String customerInfo; @ApiModelProperty(value = "ä¸åéä»¶å¾çå ¨è·¯å¾å表") private List<String> orderImages; @Data @ApiModel("ç©å项") public static class OrderItem implements Serializable { @ApiModelProperty(value = "ç©ååç§°") private String name; @ApiModelProperty(value = "æ°é") private Integer quantity; } } server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java
@@ -35,6 +35,12 @@ @ApiModelProperty("è·ç¦»(km)") private BigDecimal distance; @ApiModelProperty("æ éè¾¾é¢è®¡æ¶é¿(å°æ¶ï¼ä¸åæ´)") private Integer standardHours; @ApiModelProperty("æéè¾¾é¢è®¡æ¶é¿(å°æ¶ï¼ä¸åæ´)") private Integer urgentHours; @ApiModelProperty("天æ°") private Integer days; } server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
@@ -215,4 +215,13 @@ */ com.doumee.dao.vo.DriverOrderDetailVO driverOrderDetail(Integer driverId, Integer orderId); /** * 叿ºåæ¶è®¢åï¼å·²æ¥åstatus=2æ¶åæ¶ï¼éæ¾åæ¢å大å ï¼ * * @param driverId 叿ºä¸»é® * @param orderId 订åä¸»é® * @param reason åæ¶åå */ void cancelOrder(Integer driverId, Integer orderId, String reason); } server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -299,6 +299,15 @@ void confirmStoreOut(Integer orderId, Integer shopId, List<String> images, String remark); /** * ä¼å确认æ¶è´§ * å¼å°å¯å䏿 åä»¶é¨åºç订åï¼éè¾¾å(status=5)ï¼ä¼å确认æ¶è´§æ 记订å宿 * * @param orderId 订åä¸»é® * @param memberId å½åç»å½ä¼åID */ void memberConfirmReceipt(Integer orderId, Integer memberId); /** * 计ç®å¹¶æ´æ°è®¢å䏿¹æ¶çï¼åä»¶é¨åº/åä»¶é¨åº/叿ºï¼ * å°±å°å¯åï¼ä» åä»¶é¨åºæ¶ç * å¼å°å¯åï¼åä»¶é¨åº + 叿ºæ¶çï¼æåä»¶é¨åºæ¶å ä¸åä»¶é¨åºæ¶ç server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -21,8 +21,11 @@ import com.doumee.dao.business.OrdersDetailMapper; import com.doumee.dao.business.RevenueMapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.biz.system.OperationConfigBiz; import com.doumee.dao.business.OrderLogMapper; import com.doumee.dao.business.model.Category; import com.doumee.dao.business.model.DriverInfo; import com.doumee.dao.business.model.OrderLog; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Multifile; import com.doumee.dao.business.model.Smsrecord; @@ -98,6 +101,12 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private OrderLogMapper orderLogMapper; @Autowired private OperationConfigBiz operationConfigBiz; @Override public Integer create(DriverInfo driverInfo) { @@ -660,6 +669,9 @@ if (driver == null) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "叿ºä¿¡æ¯ä¸åå¨"); } if (!Constants.THREE.equals(driver.getAuditStatus())) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "请å 宿æ¼éæ¯ä»"); } driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() .set(DriverInfo::getAcceptingStatus, status) .eq(DriverInfo::getId, driver.getId())); @@ -763,6 +775,10 @@ if (driver == null || driver.getLatitude() == null || driver.getLongitude() == null) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "叿ºä½ç½®ä¿¡æ¯ç¼ºå¤±ï¼è¯·å å¼å¯å®ä½"); } // æ ¡éªå¸æºå·²æ¯ä»æ¼é if (!Constants.THREE.equals(driver.getAuditStatus())) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "请å 宿æ¼éæ¯ä»"); } double driverLat = driver.getLatitude(); double driverLng = driver.getLongitude(); @@ -807,6 +823,11 @@ wrapper.eq(Orders::getType, Constants.ONE) .eq(Orders::getStatus, Constants.TWO) .eq(Orders::getDeleted, Constants.ZERO); // 叿ºçº§å« >= 订åç©åçº§å« if (driver.getDriverLevel() != null) { wrapper.apply("t.GOOD_LEVEL <= {0}", driver.getDriverLevel()); } // å æ¥ OR å¨é éèå´å wrapper.and(w -> w @@ -1046,6 +1067,72 @@ return vo; } @Override @Transactional(rollbackFor = Exception.class) public void cancelOrder(Integer driverId, Integer orderId, String reason) { // 1. æ¥è¯¢å¸æºä¿¡æ¯ DriverInfo driver = driverInfoMapper.selectById(driverId); if (driver == null) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "叿ºä¿¡æ¯ä¸åå¨"); } // 2. æ ¡éªè®¢å Orders order = ordersMapper.selectById(orderId); if (order == null || Constants.ONE.equals(order.getDeleted())) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "订åä¸åå¨"); } if (!Constants.ONE.equals(order.getType())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ä» å¼å°å¯å订åå¯åæ¶"); } if (!Constants.TWO.equals(order.getStatus())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å½å订åç¶æä¸å è®¸åæ¶"); } if (!driverId.equals(order.getAcceptDriver())) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "æ ææä½è¯¥è®¢å"); } // 3. æ¯æ¥åæ¶æ¬¡æ°éå¶ String limitStr = operationConfigBiz.getConfig().getDriverDailyCancelLimit(); int limit = 3; if (StringUtils.isNotBlank(limitStr)) { try { limit = Integer.parseInt(limitStr); } catch (NumberFormatException ignored) {} } Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); Date todayStart = cal.getTime(); Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda() .eq(OrderLog::getOptUserId, driver.getMemberId()) .eq(OrderLog::getObjType, Constants.ORDER_LOG_CANCEL) .eq(OrderLog::getOptUserType, Constants.ONE) .ge(OrderLog::getCreateTime, todayStart)); if (todayCancelCount != null && todayCancelCount >= limit) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "仿¥åæ¶æ¬¡æ°å·²è¾¾ä¸é"); } // 4. é置订å叿ºå段ï¼ä¿æstatus=2ï¼éæ¾åæ¢å大å ï¼ ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getAcceptDriver, null) .set(Orders::getAcceptTime, null) .set(Orders::getAcceptType, null) .eq(Orders::getId, orderId)); // 5. åå ¥åæ¶æ¥å¿ OrderLog log = new OrderLog(); log.setOrderId(orderId); log.setTitle("叿ºåæ¶è®¢å"); log.setLogInfo(StringUtils.isNotBlank(reason) ? reason : "叿ºåæ¶æ¥å"); log.setObjType(Constants.ORDER_LOG_CANCEL); log.setOptUserId(driver.getMemberId()); log.setOptUserType(Constants.ONE); log.setOrderStatus(order.getStatus()); log.setCreateTime(new Date()); log.setDeleted(Constants.ZERO); orderLogMapper.insert(log); } private List<String> getFileUrls(Integer orderId, int objType, String prefix) { List<Multifile> files = multifileMapper.selectList( new QueryWrapper<Multifile>().lambda() server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -536,6 +536,33 @@ result.setUrgentFee(urgentFeeFen); result.setTotalPrice(totalPrice); result.setDistance(distanceKm); // 7. é¢è®¡éè¾¾æ¶é¿ï¼pricing_rule type=2ï¼fieldA=1æ éè¾¾ï¼fieldA=2æéè¾¾ï¼ List<PricingRule> timeRules = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda() .eq(PricingRule::getDeleted, Constants.ZERO) .eq(PricingRule::getType, Constants.TWO) .eq(PricingRule::getCityId, dto.getCityId()) .in(PricingRule::getFieldA, Arrays.asList("1", "2"))); for (PricingRule tr : timeRules) { BigDecimal baseKm = new BigDecimal(tr.getFieldB()); int baseHours = Integer.parseInt(tr.getFieldC()); BigDecimal extraKm = new BigDecimal(tr.getFieldD()); int extraHours = Integer.parseInt(tr.getFieldE()); int hours; if (distanceKm.compareTo(baseKm) <= 0) { hours = baseHours; } else { BigDecimal overDistance = distanceKm.subtract(baseKm); int extraCount = overDistance.divide(extraKm, 0, RoundingMode.CEILING).intValue(); hours = baseHours + extraCount * extraHours; } if ("1".equals(tr.getFieldA())) { result.setStandardHours(hours); } else if ("2".equals(tr.getFieldA())) { result.setUrgentHours(hours); } } return result; } @@ -742,6 +769,7 @@ // ç©åä¿¡æ¯ orders.setGoodType(dto.getGoodType()); orders.setGoodLevel(goodTypeCategory.getRelationId()); // æ¼æ¥ç©åä¿¡æ¯ï¼ç©åç±»ååç§°ã尺寸åç§°*æ°éï¼æ°ç»åç¬¦ä¸²ï¼ List<String> goodsParts = new ArrayList<>(); for (ItemPriceVO itemVO : priceResult.getItemList()) { @@ -2339,6 +2367,43 @@ } @Override @Transactional(rollbackFor = Exception.class) public void memberConfirmReceipt(Integer orderId, Integer memberId) { // 1. æ¥è¯¢è®¢å Orders order = ordersMapper.selectById(orderId); if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "订åä¸åå¨"); } // 2. æ ¡éªå½å± if (!memberId.equals(order.getMemberId())) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "æ ææä½è¯¥è®¢å"); } // 3. æ ¡éªè®¢åç±»åï¼å¼å°å¯å if (!Constants.ONE.equals(order.getType())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ä» å¼å°å¯å订å坿ä½"); } // 4. æ ¡éªæ åä»¶é¨åº if (order.getTakeShopId() != null) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订åæåä»¶é¨åºï¼éé¨åºç¡®è®¤åºåº"); } // 5. æ ¡éªç¶æï¼å·²éè¾¾(5) if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å½å订åç¶æä¸å 许确认æ¶è´§"); } // 6. æ´æ°è®¢åç¶æä¸ºå·²å®æ Date now = new Date(); order.setStatus(Constants.OrderStatus.finished.getStatus()); order.setFinishTime(now); order.setUpdateTime(now); ordersMapper.updateById(order); // 7. çææ¶çè®°å½ calculateAndSaveOrderFees(orderId); generateRevenueRecords(orderId); } @Override public void calculateAndSaveOrderFees(Integer orderId) { Orders order = ordersMapper.selectById(orderId); if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) { server/services/src/main/resources/application-dev.yml
@@ -83,12 +83,25 @@ ########################微信æ¯ä»ç¸å ³é ç½®######################## wx: pay: appId: wxcd2b89fd2ff065f8 appSecret: 3462fa186da7cb06c544df8d8664b63a mchId: 1229817002 mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM notifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayNotify keyPath: D:\DouMee\dmkjWxcert\apiclient_cert.p12 # appId: wxcd2b89fd2ff065f8 # appSecret: 3462fa186da7cb06c544df8d8664b63a # mchId: 1229817002 # mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM # notifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayNotify # keyPath: D:\DouMee\dmkjWxcert\apiclient_cert.p12 appId: wxb1b59320e803dc6c appSecret: eb93785c7bca3f0ff0364b0e26bfeb59 mchId: 1229817002 #åæ·å· mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM #åæ·ç§é¥ apiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB #apiV3Key serialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 #åæ·è¯ä¹¦åºåå· notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify keyPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.p12 privateCertPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.pem privateKeyPath: D:\DouMee\1229817002_20220310_cert\apiclient_key.pem pubKeyPath: D:\DouMee\1229817002_20220310_cert\pub_key.pem #åæ·æ¯ä»å ¬é¥ # appId: wx6264b4f3a697cbe8 # appSecret: 23734577e8978138c946b727f0394027 # mchId: 1629568742 server/services/src/main/resources/application-pro.yml
@@ -52,39 +52,19 @@ ########################微信æ¯ä»ç¸å ³é ç½®######################## wx: pay: #æå¡å---------start------- åæ°è¯¦è§£å°å https://pay.weixin.qq.com/doc/v3/partner/4013080340 mchId: 1700071922 #æå¡åå¨å¾®ä¿¡æ¯ä»ä¾§çå¯ä¸èº«ä»½æ è¯ appId: wx6cc1087ca79db7f6 #æå¡åå¨å¾®ä¿¡å¼æ¾å¹³å°ï¼ç§»å¨åºç¨ï¼æå ¬ä¼å¹³å°ï¼å ¬ä¼å·/å°ç¨åºï¼ä¸ç³è¯·çä¸ä¸ªå¯ä¸æ è¯ apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 #7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB serialNumer: 6696086F6EFB8D6A4F821BD47DDBAF75C3BC1209 #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #æå¡åè¯ä¹¦åºåå· payPublicKeyId: PUB_KEY_ID_0117000719222024112700219100000508 #åæ·/平尿¯ä»å ¬é¥id #mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S notifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wxPayNotify refundNotifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wxRefundNotify keyPath: /usr/local/jars/payFile/apiclient_cert.p12 privateCertPath: /usr/local/jars/payFile/apiclient_cert.pem privateKeyPath: /usr/local/jars/payFile/apiclient_key.pem pubKeyPath: /usr/local/jars/payFile/pub_key.pem #åæ·æ¯ä»å ¬é¥ appId: wxb1b59320e803dc6c appSecret: eb93785c7bca3f0ff0364b0e26bfeb59 mchId: 1229817002 #åæ·å· mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM #åæ·ç§é¥ apiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB #apiV3Key serialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 #åæ·è¯ä¹¦åºåå· notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify keyPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.p12 privateCertPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.pem privateKeyPath: D:\DouMee\1229817002_20220310_cert\apiclient_key.pem pubKeyPath: D:\DouMee\1229817002_20220310_cert\pub_key.pem #åæ·æ¯ä»å ¬é¥ #æå¡å-------------end--- #åæ·ä¿¡æ¯ wechatSerialNumer: 12C0F0DD0F3D2B565B45586D3FEA225EBF723BEC wechatPayPublicKeyId: PUB_KEY_ID_0117233260692025072500181939000603 #åæ·/平尿¯ä»å ¬é¥id wechatPubKeyPath: /usr/local/jars/payFile/shanghu/pub_key.pem #åæ·æ¯ä»å ¬é¥ wechatPrivateKeyPath: /usr/local/jars/payFile/shanghu/apiclient_key.pem #åæ·ç§é¥ wechatNotifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wechat/transferNotify #åæ·è½¬è´¦åè°å°å wechatApiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB existsSub: 1 appSecret: #ååæ·------------start---- subMchId: 1723326069 #ååæ·å· subAppId: wx332441ae5b12be7d #å°ç¨åºid subAppSecret: add86d6406f5c14501ac5bbb1a60e004 #å°ç¨åºç§é¥ #ååæ·------------end---- # mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM typeId: jinkuai alipay: server/web/src/main/java/com/doumee/api/web/ConfigApi.java
@@ -7,6 +7,7 @@ import com.doumee.dao.business.model.Areas; import com.doumee.dao.business.model.Banner; import com.doumee.dao.business.model.Category; import com.doumee.dao.dto.AreasDto; import com.doumee.dao.dto.CalculateLocalPriceDTO; import com.doumee.dao.dto.CalculateRemotePriceDTO; import com.doumee.dao.dto.SameCityCheckDTO; @@ -18,6 +19,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -53,6 +55,15 @@ @Autowired private MemberService memberService; @ApiOperation("å ¨é¨åºåæ å½¢æ¥è¯¢") @PostMapping("/treeList") public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap) { Areas a = new Areas(); BeanUtils.copyProperties(pageWrap,a); areasService.cacheData(); return ApiResponse.success(areasService.findList(a)); } @ApiOperation(value = "è·ååç±»å表", notes = "å°ç¨åºç«¯") @GetMapping("/getCategoryList") @ApiImplicitParams({ server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
@@ -6,6 +6,7 @@ import com.doumee.core.model.ApiResponse; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.DriverInfo; import com.doumee.dao.dto.DriverActiveOrderDTO; import com.doumee.dao.dto.DriverGrabOrderDTO; import com.doumee.dao.dto.DriverLoginRequest; @@ -86,7 +87,7 @@ @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) }) public ApiResponse verifyDetail() { public ApiResponse<DriverInfo> verifyDetail() { return ApiResponse.success(driverInfoService.getVerifyDetail(this.getDriverId())); } @@ -162,4 +163,17 @@ return ApiResponse.success("æä½æå", driverInfoService.driverOrderDetail(this.getDriverId(), orderId)); } @LoginDriverRequired @Trace @ApiOperation(value = "叿ºåæ¶è®¢å", notes = "å·²æ¥å(status=2)æ¶åæ¶ï¼éæ¾è®¢å忢å大å ") @PostMapping("/cancelOrder") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) }) public ApiResponse cancelOrder(@RequestParam Integer orderId, @RequestParam(required = false) String reason) { driverInfoService.cancelOrder(this.getDriverId(), orderId, reason); return ApiResponse.success("åæ¶æå"); } } server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -214,5 +214,16 @@ return ApiResponse.success("è¯ä»·æå"); } @LoginRequired @ApiOperation(value = "ä¼å确认æ¶è´§", notes = "å¼å°å¯å䏿 åä»¶é¨åºç订åï¼éè¾¾å确认æ¶è´§æ 记订å宿") @PostMapping("/confirmReceipt") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) }) public ApiResponse confirmReceipt(@RequestParam Integer orderId) { ordersService.memberConfirmReceipt(orderId, getMemberId()); return ApiResponse.success("确认æ¶è´§æå"); } }