| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.job; |
| | | |
| | | import com.doumee.core.job.BaseJob; |
| | | import com.doumee.core.job.JobContext; |
| | | import com.doumee.core.job.JobParam; |
| | | import com.doumee.service.business.OrdersService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * èªå¨å®æè¶
æ¶æªç¡®è®¤çå·²é达订å |
| | | * æ ¹æ®è¿è¥é
ç½® AUTO_CONFIRM_RECEIPTï¼å¤©ï¼ï¼å°å·²éè¾¾è¶
è¿è¯¥å¤©æ°ç订åèªå¨æ è®°ä¸ºå·²å®æ |
| | | * @author rk |
| | | * @date 2026/04/22 |
| | | */ |
| | | @Slf4j |
| | | @Component("autoCompleteOrderJob") |
| | | public class AutoCompleteOrderJob extends BaseJob { |
| | | |
| | | @Autowired |
| | | private OrdersService ordersService; |
| | | |
| | | @Override |
| | | public JobContext execute(JobParam param) { |
| | | JobContext jobContext = new JobContext(); |
| | | try { |
| | | int count = ordersService.autoCompleteOrders(); |
| | | jobContext.setHandleSuccessSize(count); |
| | | jobContext.setHandleTotalSize(count); |
| | | jobContext.setContext("èªå¨å®æè¶
æ¶è®¢å宿ï¼å
±å®æ" + count + "å"); |
| | | } catch (Exception e) { |
| | | log.error("èªå¨å®æè®¢åä»»å¡å¼å¸¸", e); |
| | | } |
| | | return jobContext; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.job; |
| | | |
| | | import com.doumee.core.job.BaseJob; |
| | | import com.doumee.core.job.JobContext; |
| | | import com.doumee.core.job.JobParam; |
| | | import com.doumee.service.business.OrdersService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * è¶
æ¶æªæ¯ä»è®¢åèªå¨åæ¶ |
| | | * æ ¹æ®è¿è¥é
ç½® AUTO_CANCEL_TIMEï¼åéï¼ï¼åæ¶è¶
æ¶æªæ¯ä»è®¢å |
| | | * @author rk |
| | | * @date 2026/04/22 |
| | | */ |
| | | @Slf4j |
| | | @Component("cancelTimeoutOrderJob") |
| | | public class CancelTimeoutOrderJob extends BaseJob { |
| | | |
| | | @Autowired |
| | | private OrdersService ordersService; |
| | | |
| | | @Override |
| | | public JobContext execute(JobParam param) { |
| | | JobContext jobContext = new JobContext(); |
| | | try { |
| | | int count = ordersService.cancelTimeoutUnpaidOrders(); |
| | | jobContext.setHandleSuccessSize(count); |
| | | jobContext.setHandleTotalSize(count); |
| | | jobContext.setContext("è¶
æ¶æªæ¯ä»è®¢åèªå¨åæ¶å®æï¼å
±åæ¶" + count + "å"); |
| | | } catch (Exception e) { |
| | | log.error("è¶
æ¶åæ¶è®¢åä»»å¡å¼å¸¸", e); |
| | | } |
| | | return jobContext; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.job; |
| | | |
| | | import com.doumee.core.job.BaseJob; |
| | | import com.doumee.core.job.JobContext; |
| | | import com.doumee.core.job.JobParam; |
| | | import com.doumee.service.business.OrdersService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æ 人æ¢åçä¿¡éç¥å¹³å°äººå |
| | | * æ ¹æ®è¿è¥é
ç½® NO_GRAB_NOTIFY_TIMEï¼åéï¼ï¼å¯¹å·²å¯å䏿 人æ¢åç订ååéçä¿¡éç¥ |
| | | * @author rk |
| | | * @date 2026/04/22 |
| | | */ |
| | | @Slf4j |
| | | @Component("noGrabNotifyJob") |
| | | public class NoGrabNotifyJob extends BaseJob { |
| | | |
| | | @Autowired |
| | | private OrdersService ordersService; |
| | | |
| | | @Override |
| | | public JobContext execute(JobParam param) { |
| | | JobContext jobContext = new JobContext(); |
| | | try { |
| | | int count = ordersService.notifyUngrabbedOrders(); |
| | | jobContext.setHandleSuccessSize(count); |
| | | jobContext.setHandleTotalSize(count); |
| | | jobContext.setContext("æ 人æ¢åçä¿¡éç¥å®æï¼å
±éç¥" + count + "å"); |
| | | } catch (Exception e) { |
| | | log.error("æ 人æ¢åéç¥ä»»å¡å¼å¸¸", e); |
| | | } |
| | | return jobContext; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.job; |
| | | |
| | | import com.doumee.core.job.BaseJob; |
| | | import com.doumee.core.job.JobContext; |
| | | import com.doumee.core.job.JobParam; |
| | | import com.doumee.service.business.OrdersService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * 订åèªå¨ç»ç®å®æ¶ä»»å¡ |
| | | * æ ¹æ®è¿è¥é
ç½® SETTLEMENT_DATEï¼å°å·²å®æçå¾
ç»ç®è®¢åè¿è¡ç»ç® |
| | | * |
| | | * @author rk |
| | | * @date 2026/04/22 |
| | | */ |
| | | @Slf4j |
| | | @Component("settleOrdersJob") |
| | | public class SettleOrdersJob extends BaseJob { |
| | | |
| | | @Autowired |
| | | private OrdersService ordersService; |
| | | |
| | | @Override |
| | | public JobContext execute(JobParam param) { |
| | | JobContext jobContext = new JobContext(); |
| | | try { |
| | | ordersService.settleOrders(); |
| | | jobContext.setContext("订åç»ç®ä»»å¡æ§è¡å®æ"); |
| | | } catch (Exception e) { |
| | | log.error("订åç»ç®ä»»å¡å¼å¸¸", e); |
| | | jobContext.setContext("订åç»ç®ä»»å¡å¼å¸¸ï¼" + e.getMessage()); |
| | | } |
| | | return jobContext; |
| | | } |
| | | } |
| | |
| | | <weixin-java-pay.version>4.1.0</weixin-java-pay.version> |
| | | <!-- é¿éäºOSSåå¨ --> |
| | | <aliyun-oss.version>3.8.0</aliyun-oss.version> |
| | | <okhttp3.version>4.9.3</okhttp3.version> |
| | | <kotlin.version>1.5.31</kotlin.version> |
| | | <okio.version>2.10.0</okio.version> |
| | | </properties> |
| | | <dependencies> |
| | | <!-- Spring Boot --> |
| | |
| | | <groupId>com.github.wechatpay-apiv3</groupId> |
| | | <artifactId>wechatpay-java</artifactId> |
| | | <version>0.2.15</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <artifactId>okhttp</artifactId> |
| | | <groupId>com.squareup.okhttp3</groupId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <!-- OkHttp 4.x éè¦ okio 2.xï¼Kotlin çæ¬ï¼ --> |
| | | <dependency> |
| | | <groupId>com.squareup.okio</groupId> |
| | | <artifactId>okio</artifactId> |
| | | <version>2.10.0</version> |
| | | </dependency> |
| | | |
| | | <!-- é¿éäºOSS--> |
| | |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/22 订å鿬¾è¡¨æ°å¢é款å订åç¶æåæ®µ |
| | | -- ============================================================ |
| | | ALTER TABLE `orders_refund` ADD COLUMN `BEFORE_STATUS` INT NULL DEFAULT NULL COMMENT '鿬¾å订åç¶æ' AFTER `STATUS`; |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/22 订å鿬¾è¡¨æ°å¢é款éé¢å段 |
| | | -- ============================================================ |
| | | ALTER TABLE `orders_refund` ADD COLUMN `REFUND_AMOUNT` BIGINT NULL DEFAULT NULL COMMENT '鿬¾éé¢ï¼åï¼' AFTER `REFUND_REMARK`; |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/22 æ°å¢è®¢åèªå¨ç»ç®å®æ¶ä»»å¡ |
| | | -- ============================================================ |
| | | INSERT INTO `SYSTEM_JOB` VALUES (4, '订åèªå¨ç»ç®', 'æ ¹æ®è¿è¥é
ç½®SETTLEMENT_DATEï¼å°å·²å®æçå¾
ç»ç®è®¢åè¿è¡ç»ç®', 'settleOrdersJob', NULL, NULL, 1, 0, 1, 1, '0 0 2 * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0); |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/22 è¿è¥é
ç½®æ°å¢æ 人æ¢åéç¥æ¶é´åéç¥äººå |
| | | -- ============================================================ |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '30', 'NO_GRAB_NOTIFY_TIME', 0, 0, 1, NOW(), 0); |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'NO_GRAB_NOTIFY_USERS', 0, 0, 1, NOW(), 0); |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/22 订å表å¢å æ 人æ¥åæ¯å¦å·²çä¿¡éç¥å¹³å°å段 |
| | | -- ============================================================ |
| | | ALTER TABLE `orders` ADD COLUMN `PLATFORM_SMS_NOTIFIED` INT DEFAULT 0 COMMENT 'æ 人æ¥åæ¯å¦å·²çä¿¡éç¥å¹³å°ï¼0=å¦ï¼1=æ¯' AFTER `OUT_TRADE_NO`; |
| | | ALTER TABLE `orders` ADD COLUMN `PLATFORM_SMS_NOTIFIED_TIME` DATETIME DEFAULT NULL COMMENT 'æ 人æ¥åå·²çä¿¡éç¥å¹³å°æ¶é´' AFTER `PLATFORM_SMS_NOTIFIED`; |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/22 æ°å¢è®¢åç¸å
³å®æ¶ä»»å¡ï¼ä¸ä¸ªç¬ç«ä»»å¡ï¼ |
| | | -- ============================================================ |
| | | INSERT INTO `SYSTEM_JOB` VALUES (3, 'è¶
æ¶åæ¶è®¢å', 'æ ¹æ®è¿è¥é
ç½®AUTO_CANCEL_TIMEï¼åéï¼ï¼åæ¶è¶
æ¶æªæ¯ä»è®¢å', 'cancelTimeoutOrderJob', NULL, NULL, 1, 0, 1, 1, '0 */1 * * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_JOB` VALUES (5, 'æ 人æ¢åéç¥', 'æ ¹æ®è¿è¥é
ç½®NO_GRAB_NOTIFY_TIMEï¼åéï¼ï¼å¯¹å·²å¯å䏿 人æ¢åç订ååéçä¿¡éç¥å¹³å°äººå', 'noGrabNotifyJob', NULL, NULL, 1, 0, 1, 1, '0 */1 * * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_JOB` VALUES (6, 'èªå¨å®æè®¢å', 'æ ¹æ®è¿è¥é
ç½®AUTO_CONFIRM_RECEIPTï¼å¤©ï¼ï¼èªå¨å®æè¶
æ¶æªç¡®è®¤çå·²é达订å', 'autoCompleteOrderJob', NULL, NULL, 1, 0, 1, 1, '0 0 */1 * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0); |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/22 æç°è®°å½è¡¨å¢å æ¯ä»å®å®åå§ååæ®µ |
| | | -- ============================================================ |
| | | ALTER TABLE `withdrawal_orders` ADD COLUMN `ALI_NAME` VARCHAR(50) DEFAULT NULL COMMENT 'æ¯ä»å®å®åå§å' AFTER `ALI_ACCOUNT`; |
| | |
| | | <artifactId>alipay-sdk-java-v3</artifactId> |
| | | <version>3.1.70.ALL</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.squareup.okhttp3</groupId> |
| | | <artifactId>okhttp</artifactId> |
| | | <version>4.9.3</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | | </project> |
| | |
| | | dto.setInsuranceRate(getValue(Constants.OP_INSURANCE_RATE)); |
| | | dto.setOrderAcceptLimit(getValue(Constants.OP_ORDER_ACCEPT_LIMIT)); |
| | | dto.setAutoConfirmReceipt(getValue(Constants.OP_AUTO_CONFIRM_RECEIPT)); |
| | | dto.setNoGrabNotifyTime(getValue(Constants.OP_NO_GRAB_NOTIFY_TIME)); |
| | | dto.setNoGrabNotifyUsers(getValue(Constants.OP_NO_GRAB_NOTIFY_USERS)); |
| | | return dto; |
| | | } |
| | | |
| | |
| | | saveOrUpdate(Constants.OP_INSURANCE_RATE, "ä¿è´¹æ¯ç", dto.getInsuranceRate()); |
| | | saveOrUpdate(Constants.OP_ORDER_ACCEPT_LIMIT, "æ¥åæ°é", dto.getOrderAcceptLimit()); |
| | | saveOrUpdate(Constants.OP_AUTO_CONFIRM_RECEIPT, "èªå¨ç¡®è®¤æ¶è´§", dto.getAutoConfirmReceipt()); |
| | | saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_TIME, "æ 人æ¢åéç¥æ¶é´", dto.getNoGrabNotifyTime()); |
| | | saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_USERS, "æ 人æ¢åçä¿¡éç¥äººå", dto.getNoGrabNotifyUsers()); |
| | | } |
| | | |
| | | private String getValue(String label) { |
| | |
| | | || StringUtils.isBlank(dto.getAutoCancelTime()) |
| | | || StringUtils.isBlank(dto.getInsuranceRate()) |
| | | || StringUtils.isBlank(dto.getOrderAcceptLimit()) |
| | | || StringUtils.isBlank(dto.getAutoConfirmReceipt())) { |
| | | || StringUtils.isBlank(dto.getAutoConfirmReceipt()) |
| | | || StringUtils.isBlank(dto.getNoGrabNotifyTime()) |
| | | || StringUtils.isBlank(dto.getNoGrabNotifyUsers())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ææé
置项å为å¿
å¡«"); |
| | | } |
| | | } |
| | |
| | | this.loadAlipayConfig(); |
| | | } |
| | | |
| | | |
| | | public void loadAlipayConfig() { |
| | | try { |
| | | AlipayConfig config = new AlipayConfig(); |
| | | config.setServerUrl("https://openapi.alipay.com"); |
| | | config.setAppId("2021006147660139"); |
| | | String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM="; |
| | | config.setPrivateKey(privateKey); |
| | | config.setAppCertPath("pay/pro/appCertPublicKey.crt"); |
| | | config.setAlipayPublicCertPath("pay/pro/alipayCertPublicKey_RSA2.crt"); |
| | | config.setRootCertPath("pay/pro/alipayRootCert.crt"); |
| | | config.setAppId(alipayProperties.getAppId()); |
| | | // String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM="; |
| | | config.setPrivateKey(alipayProperties.getPrivateKey()); |
| | | config.setAppCertPath(alipayProperties.getAppCertPath()); |
| | | config.setAlipayPublicCertPath(alipayProperties.getAlipayPublicCertPath()); |
| | | config.setRootCertPath(alipayProperties.getRootCertPath()); |
| | | alipayConfig = config; |
| | | log.info("æ¯ä»å®é
ç½®åå§åæå, appId={}", config.getAppId()); |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | public static void main(String[] args) throws ApiException { |
| | | downLoadCertificates(); |
| | | } |
| | | /** |
| | | * APIå®å
¨å å¯é
ç½® |
| | | */ |
| | | private static RSAAutoCertificateConfig rsaAutoCertificateConfig() { |
| | | return new RSAAutoCertificateConfig.Builder() |
| | | // åæ·å· |
| | | .merchantId("1629568742") |
| | | // åæ·APIè¯ä¹¦ç§é¥çåæ¾è·¯å¾ |
| | | .privateKeyFromPath("D://ptzs/apiclient_key.pem") |
| | | // åæ·APIè¯ä¹¦åºåå· |
| | | .merchantSerialNumber("25D19D18217F4588841E5CD1AA0D1533DE8AF84A") |
| | | // APIv3å¯é¥ |
| | | .apiV3Key("NJTLJSTZYXZRGScaiwubuzichanbu666") |
| | | .build(); |
| | | } |
| | | /** |
| | | * ä¸è½½è¯ä¹¦ |
| | | */ |
| | | public static void downLoadCertificates() { |
| | | OkHttpClient okHttpClient = new OkHttpClient(); |
| | | HttpClient httpClient = new DefaultHttpClientBuilder() |
| | | .config(rsaAutoCertificateConfig()) |
| | | .okHttpClient(okHttpClient) |
| | | .build(); |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue()); |
| | | HttpRequest executeSendGetHttpRequest = new HttpRequest.Builder() |
| | | .httpMethod(HttpMethod.GET) |
| | | .url("https://api.mch.weixin.qq.com/v3/certificates") |
| | | .headers(headers) |
| | | .build(); |
| | | try { |
| | | HttpResponse<JSONObject> execute = httpClient.execute(executeSendGetHttpRequest, JSONObject.class); |
| | | JSONObject responseBody = execute.getServiceResponse(); |
| | | log.info("ä¸è½½å¹³å°è¯ä¹¦è¿å:{}", responseBody.toString()); |
| | | } catch (Exception e) { |
| | | log.error("ä¸è½½å¹³å°è¯ä¹¦å¼å¸¸", e); |
| | | } |
| | | } |
| | | |
| | | // public static void testTransger( ) throws ApiException { |
| | | // |
| | | // // åå§åSDK |
| | | // 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("佣鿥é
¬"); |
| | | // |
| | | // // è®¾ç½®è½¬è´¦åºæ¯ä¸æ¥ä¿¡æ¯ |
| | | // List<TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<TransferSceneReportInfo>(); |
| | | // TransferSceneReportInfo transferSceneReportInfos0 = new TransferSceneReportInfo(); |
| | | // transferSceneReportInfos0.setInfoType("佣鿥é
¬è¯´æ"); |
| | | // transferSceneReportInfos0.setInfoContent("3æå®¶æ¿æå¡æ¥é
¬"); |
| | | // transferSceneReportInfos.add(transferSceneReportInfos0); |
| | | // data.setTransferSceneReportInfos(transferSceneReportInfos); |
| | | // |
| | | // // 设置转账ä¸å¡è¯·æ±çæ©å±åæ° |
| | | // data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}"); |
| | | // |
| | | // /* // 设置ç¾åä¿¡æ¯ |
| | | // SignData signData = new SignData(); |
| | | // signData.setOriSign("EqHFP0z4a9iaQ1ep=="); |
| | | // signData.setPartnerId("ç¾åè¢«æææ¹æ¯ä»å®è´¦å·ID"); |
| | | // signData.setOriAppId("2021000185629012"); |
| | | // signData.setOriOutBizNo("åæ·è®¢åå·"); |
| | | // signData.setOriSignType("RSA2"); |
| | | // signData.setOriCharSet("UTF-8"); |
| | | // data.setSignData(signData); |
| | | //*/ |
| | | // try { |
| | | // AlipayFundTransUniTransferResponseModel response = api.transfer(data); |
| | | // } catch (ApiException e) { |
| | | // AlipayFundTransUniTransferDefaultResponse errorObject = (AlipayFundTransUniTransferDefaultResponse) e.getErrorObject(); |
| | | // System.out.println("è°ç¨å¤±è´¥:" + errorObject); |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * åç¬è½¬è´¦å°æ¯ä»å®è´¦æ· |
| | |
| | | // 设置转账ä¸å¡è¯·æ±çæ©å±åæ° |
| | | data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}"); |
| | | |
| | | /* // 设置ç¾åä¿¡æ¯ |
| | | SignData signData = new SignData(); |
| | | signData.setOriSign("EqHFP0z4a9iaQ1ep=="); |
| | | signData.setPartnerId("ç¾åè¢«æææ¹æ¯ä»å®è´¦å·ID"); |
| | | signData.setOriAppId("2021000185629012"); |
| | | signData.setOriOutBizNo("åæ·è®¢åå·"); |
| | | signData.setOriSignType("RSA2"); |
| | | signData.setOriCharSet("UTF-8"); |
| | | data.setSignData(signData); |
| | | */ |
| | | try { |
| | | AlipayFundTransUniTransferResponseModel response = api.transfer(data); |
| | | log.info("æ¯ä»å®è½¬è´¦æå, outBizNo={}, orderId={}", dto.getOutBizNo(), response.getOrderId()); |
| | |
| | | } |
| | | |
| | | |
| | | // private static AlipayConfig getAlipayConfig() { |
| | | // AlipayConfig alipayConfig = new AlipayConfig(); |
| | | // alipayConfig.setServerUrl("https://openapi.alipay.com"); |
| | | // alipayConfig.setAppId("2021006147660139"); |
| | | // String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM="; |
| | | // alipayConfig.setPrivateKey(privateKey); |
| | | // alipayConfig.setAppCertPath("pay/pro/appCertPublicKey.crt"); |
| | | // alipayConfig.setAlipayPublicCertPath("pay/pro/alipayCertPublicKey_RSA2.crt"); |
| | | // alipayConfig.setRootCertPath("pay/pro/alipayRootCert.crt"); |
| | | // |
| | | // return alipayConfig; |
| | | // } |
| | | } |
| | |
| | | } |
| | | String openid = shop.getOpenid(); |
| | | Integer shopId = getTokenId(token); |
| | | Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0) from shop_info where id = ?", Integer.class, shopId); |
| | | Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,0) from shop_info where id = ?", Integer.class, shopId); |
| | | if(isDeleted== Constants.ONE){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"åæ·å·²å é¤,请è系管çå"); |
| | | } |
| | |
| | | if(isForbidden == Constants.ONE){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"åæ·å·²ç¦ç¨,请è系管çå"); |
| | | } |
| | | String dbOpenid = dao.queryForObject(" select ifnull(openid,'') from shop where id = ?", String.class, shopId); |
| | | String dbOpenid = dao.queryForObject(" select ifnull(openid,'') from shop_info where id = ?", String.class, shopId); |
| | | if(StringUtils.isBlank(dbOpenid)||!openid.equals(dbOpenid)){ |
| | | throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME); |
| | | } |
| | | Integer count = dao.queryForObject("select count(1) from shop where id = ?", Integer.class, shopId); |
| | | Integer count = dao.queryForObject("select count(1) from shop_info where id = ?", Integer.class, shopId); |
| | | if (count != null && count > 0) { |
| | | request.setAttribute(JwtTokenUtil.SHOP_ID, shop.getId()); |
| | | return true; |
| | |
| | | public static final String OP_INSURANCE_RATE = "INSURANCE_RATE"; |
| | | public static final String OP_ORDER_ACCEPT_LIMIT = "ORDER_ACCEPT_LIMIT"; |
| | | public static final String OP_AUTO_CONFIRM_RECEIPT = "AUTO_CONFIRM_RECEIPT"; |
| | | public static final String OP_NO_GRAB_NOTIFY_TIME = "NO_GRAB_NOTIFY_TIME"; |
| | | public static final String OP_NO_GRAB_NOTIFY_USERS = "NO_GRAB_NOTIFY_USERS"; |
| | | public static boolean WORKORDER_SHE_EMAIL_SENDING = false; |
| | | public static boolean DEALING_COMPANY_SYNC = false ; |
| | | public static boolean DEALING_MEMBER_SYNC = false ; |
| | |
| | | LABOR_CONTRACT(11, "ææå³å¨åå"), |
| | | ORDER_FILE(12,"ä¸åå¾ç"), |
| | | STORE_OUT(13,"é¨åºåºåºå¾ç"), |
| | | REFUND_TAKE(14,"鿬¾åä»¶å¾ç") |
| | | |
| | | REFUND_TAKE(14,"鿬¾åä»¶å¾ç"), |
| | | COMMENT_ATTACH(15,"è¯ä»·éä»¶å¾ç") |
| | | ; |
| | | |
| | | private final int key; |
| | |
| | | arrived(5, "å·²å°åº/å·²éè¾¾/å¾
åä»¶"), |
| | | overdue(6, "åå¨é¾æ"), //å¼ç¨ |
| | | finished(7, "已宿"), |
| | | closed(96, "订åå
³éï¼é款ï¼"), |
| | | cancelOverdue(97, "忶龿"), //å¼ç¨ |
| | | cancelling(98, "åæ¶ä¸"), |
| | | cancelled(99, "已忶") |
| | | ; |
| | | private final int status; |
| | |
| | | waitDeliver(2, "å¾
é
é", new int[]{OrderStatus.accepted.status}), |
| | | waitReceive(3, "å¾
æ¶è´§", new int[]{ OrderStatus.delivering.status, OrderStatus.arrived.status}), |
| | | finished(4, "已宿", new int[]{OrderStatus.finished.status}), |
| | | refund(5, "鿬¾", new int[]{OrderStatus.closed.status, OrderStatus.cancelling.status}), |
| | | refund(5, "鿬¾", new int[]{OrderStatus.cancelled.status}), |
| | | home(6, "é¦é¡µæ¥è¯¢", new int[]{OrderStatus.waitPay.status, OrderStatus.waitDeposit.status, OrderStatus.deposited.status |
| | | , OrderStatus.accepted.status, OrderStatus.delivering.status, OrderStatus.arrived.status}) |
| | | ; |
| | |
| | | WAIT_PAY("waitPay", "订åå¾
æ¯ä»", "æ¨çè¡æè®¢åï¼{orderNo}å·²å建ï¼è¯·å¨{timeout}åéå
宿æ¯ä»ï¼è¶
æ¶å°èªå¨åæ¶"), |
| | | WAIT_VERIFY("waitVerify", "订åå¾
æ ¸éª", "æ¨çè¡æè®¢åï¼{orderNo}å·²æäº¤ï¼çå¾
é¨åºæ ¸éªç©åä¿¡æ¯ï¼åä»¶ç {storeCode}"), |
| | | WAIT_GRAB("waitGrab", "订åå¾
æ¢å", "æ¨çè¡æè®¢åï¼{orderNo}å·²æ ¸éªï¼æ£å¨ä¸ºæ¨å®æå件叿º"), |
| | | WAIT_PICKUP_REMIND("waitPickupRemind", "订åå¾
åä»¶", "订å{orderNo}è¡æå·²å¯åï¼è¯·è®°å¾å¨é¢çº¦åä»¶æ¶é´ååä»¶ç å徿å®é¨åºåå"), |
| | | WAIT_PICKUP_GRABBED("waitPickupGrabbed", "订åå·²æ¢å", "æ¨çè¡æè®¢åï¼å·²æå¸æº{driverName}æ¢åï¼æ£åå¾åä»¶å°ç¹"), |
| | | WAIT_PICKUP_REMIND("waitPickupRemind", "订åå¾
åä»¶", "æ¨çè¡æè®¢åï¼{orderNo}å·²å¯åï¼è¯·è®°å¾å¨é¢çº¦åä»¶æ¶é´ååä»¶ç åå¾{shopName}é¨åºåå"), |
| | | WAIT_PICKUP_GRABBED("waitPickupGrabbed", "订åå·²æ¢å", "æ¨çè¡æè®¢åï¼{orderNo}å·²æå¸æº{driverName}æ¢åï¼æ£åå¾åä»¶å°ç¹"), |
| | | DELIVERING("delivering", "订åé
éä¸", "æ¨çè¡æè®¢åï¼{orderNo}å·²ç±å¸æº{driverName}åä»¶ï¼æ£è¿å¾ç®çå°"), |
| | | ARRIVED_NO_SHOP("arrivedNoShop", "订åå·²éè¾¾", "æ¨çè¡æè®¢åï¼{orderNo}å·²éè¾¾{destination},è¯·åæ¶ç¡®è®¤æ¶è´§"), |
| | | ARRIVED_HAS_SHOP("arrivedHasShop", "订åå·²éè¾¾", "æ¨çè¡æè®¢åï¼{orderNo}å·²éè¾¾{destination},è¯·åæ¶åä»¶ï¼åä»¶ç {pickupCode}"), |
| | |
| | | WAIT_PICKUP("waitPickup", "订åå¾
åä»¶", "è¡æè®¢åï¼{orderNo}å·²æ¢åï¼çå¾
{name}åä»¶"), |
| | | REFUNDING("refunding", "订å鿬¾ä¸", "è¡æè®¢åï¼{orderNo}ç¨æ·æäº¤é款ç³è¯·ï¼è¯·ç¥æ"), |
| | | DELIVERING("delivering", "订åé
éä¸", "è¡æè®¢åï¼{orderNo}å·²ç±å¸æº{driverName}åä»¶ï¼æ£å¨é
éä¸"), |
| | | ARRIVED("arrived", "å·²éè¾¾", "è¡æè®¢åï¼{orderNo}å·²éè¾¾{destination},请èç³»ç¨æ·ç¡®è®¤ç¾æ¶"), |
| | | ARRIVED("arrived", "订åå·²éè¾¾", "è¡æè®¢åï¼{orderNo}å·²éè¾¾{destination},请èç³»ç¨æ·ç¡®è®¤ç¾æ¶"), |
| | | FINISHED("finished", "订å已宿", "è¡æè®¢åï¼{orderNo}已宿ï¼ç¸å
³è®¢åç»ç®ä¼å¨{settleDays}ä¸ªå·¥ä½æ¥å
宿"), |
| | | EVALUATED("evaluated", "订åå·²è¯ä»·", "è¡æè®¢åï¼{orderNo}ç¨æ·å·²å®æè¯ä»·ï¼å¯æ¥çè¯ä»·å
容"), |
| | | SETTLED("settled", "订åç»ç®", "è¡æè®¢åï¼{orderNo}å¹³å°å·²å®æç»ç®ï¼éé¢ä¸º{amount}å
ï¼è¯·æ³¨ææ¥æ¶ã") |
| | |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum DriverOrderNotify { |
| | | WAIT_DELIVER("waitDeliver", "订åå¾
é
é", "æ¨å·²æ¢åæåï¼è®¢åï¼{orderNo}è¯·ææ¶å°{shopName}åä»¶"), |
| | | DELIVERING("delivering", "é
éä¸", "è¡æè®¢åï¼{orderNo}å·²åä»¶ï¼æ£å¨é
éä¸ï¼è¯·ææ¶éè¾¾"), |
| | | ARRIVED("arrived", "å·²éè¾¾", "è¡æè®¢åï¼{orderNo}å·²éè¾¾{destination},请èç³»ç¨æ·ç¡®è®¤ç¾æ¶"), |
| | | WAIT_DELIVER("waitDeliver", "订åå¾
é
é", "æ¨å·²æ¢åæåï¼è¡æè®¢åï¼{orderNo}è¯·ææ¶å°{shopName}åä»¶"), |
| | | DELIVERING("delivering", "订åé
éä¸", "è¡æè®¢åï¼{orderNo}å·²åä»¶ï¼æ£å¨é
éä¸ï¼è¯·ææ¶éè¾¾"), |
| | | ARRIVED("arrived", "订åå·²éè¾¾", "è¡æè®¢åï¼{orderNo}å·²éè¾¾{destination},请èç³»ç¨æ·ç¡®è®¤ç¾æ¶"), |
| | | FINISHED("finished", "订å已宿", "è¡æè®¢åï¼{orderNo}已宿ï¼ç¸å
³è®¢åç»ç®ä¼å¨{settleDays}ä¸ªå·¥ä½æ¥å
ç»ç®"), |
| | | EVALUATED("evaluated", "订åå·²è¯ä»·", "è¡æè®¢åï¼{orderNo}ç¨æ·å·²å®æè¯ä»·ï¼å¯åå¾è®¢åæ¥çè¯ä»·å
容"), |
| | | REFUNDING("refunding", "鿬¾ä¸", "è¡æè®¢åï¼{orderNo}ç¨æ·å·²æäº¤é款ç³è¯·ï¼è¯¥è®¢åä»»å¡å·²åæ¶ï¼è¯·å¿åå¾ã"), |
| | | REFUNDING("refunding", "订å鿬¾ä¸", "è¡æè®¢åï¼{orderNo}ç¨æ·å·²æäº¤é款ç³è¯·ï¼è¯¥è®¢åä»»å¡å·²åæ¶ï¼è¯·å¿åå¾ã"), |
| | | SETTLED("settled", "订åå·²ç»ç®", "è¡æè®¢åï¼{orderNo}å¹³å°å·²å®æç»ç®ï¼éé¢ä¸º{amount}å
ï¼è¯·æ³¨ææ¥æ¶ã"), |
| | | CANCELLED("cancelled", "订ååæ¶æå", "è¡æè®¢åï¼{orderNo}已帮æ¨åæ¶ï¼æ¨ä»æ¥è¿å¯ä¸»å¨åæ¶{cancelLimit}次订åï¼è¯·åç宿æ¥åã") |
| | | ; |
| | |
| | | } |
| | | |
| | | /** |
| | | * çä¿¡éç¥æ¨¡æ¿æä¸¾ |
| | | * templateCode: é¿éäºç信模æ¿Code |
| | | * content: çä¿¡ææ¡æ¨¡æ¿ï¼å ä½ç¬¦ç¨ {xxx} 表示 |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum SmsNotify { |
| | | PLATFORM_WAIT_GRAB("SMS_505790009", "å¹³å°ç«¯-å¾
æ¢å", "æ¨å¥½ï¼è®¢åï¼{orderNo}å·²è¶
è¿{time}åéæ å¸æºæ¢åï¼è¯·å°½å¿«å æ¥æ´¾åï¼é¿å
客æ·è¿ä¹
çå¾
ã"), |
| | | SHOP_REFUNDING("SMS_505900008", "é¨åºç«¯-鿬¾ä¸", "è¡æè®¢åï¼{orderNo}客æ·å·²æäº¤é款ç³è¯·ï¼è¯·å°½å¿«å¤çã"), |
| | | SHOP_WAIT_VERIFY("SMS_505925004", "é¨åºç«¯-å¾
æ ¸éª", "æ°è¡æè®¢åï¼{orderNo}客æ·å·²æ¯ä»ï¼è¯·å°½å¿«æ ¸éªç¨æ·ç©åä¿¡æ¯ã"), |
| | | DRIVER_REFUNDING("SMS_505795005", "叿ºç«¯-鿬¾ä¸", "è¡æè®¢åï¼{orderNo}ç¨æ·å·²æäº¤é款ç³è¯·ï¼è¯¥è®¢åä»»å¡å·²åæ¶ï¼è¯·å¿åå¾ã"), |
| | | DRIVER_WAIT_PICKUP("SMS_505650038", "叿ºç«¯-å¾
åä»¶", "æ¨å·²æ¢åæåï¼è®¢å{orderNo}ï¼è¯·ææ¶å°{address}åä»¶ã"), |
| | | MEMBER_CANCELLED("SMS_505605028", "ä¼å端-已忶", "æ¨çè¡æè®¢åï¼{orderNo}å·²åæ¶ï¼æè°¢æ¨çæ¯æï¼æ¬¢è¿ä¸æ¬¡åä¼ã"), |
| | | MEMBER_REFUNDED("SMS_505920002", "ä¼å端-已鿬¾", "æ¨çè¡æè®¢åï¼{orderNo}鿬¾å·²å®æï¼éé¢{money}å
å°åè·¯éåï¼è¯·æ³¨ææ¥æ¶ã"), |
| | | MEMBER_ARRIVED("SMS_505875004", "ä¼å端-å·²éè¾¾", "æ¨çè¡æè®¢åï¼{orderNo}å·²éå°{address}ï¼è¯·åæ¶åä»¶ï¼åä»¶ç ï¼{code}ã"), |
| | | MEMBER_DELIVERING("SMS_505935002", "ä¼å端-é
éä¸", "æ¨çè¡æè®¢åï¼{orderNo}å·²ç±å¸æº{name}åä»¶ï¼æ£è¿å¾ç®çå°ã"), |
| | | VERIFY_CODE("SMS_333770877", "éªè¯ç çä¿¡", "æ¨çéªè¯ç 为ï¼{code}ï¼è¯·å¿æ³é²äºä»äººï¼"), |
| | | ; |
| | | |
| | | private final String templateCode; |
| | | private final String title; |
| | | private final String content; |
| | | |
| | | public String format(String... params) { |
| | | String result = this.content; |
| | | for (int i = 0; i < params.length - 1; i += 2) { |
| | | result = result.replace("{" + params[i] + "}", params[i + 1]); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¾å°request对象 |
| | | * |
| | | * @return |
| | |
| | | |
| | | @ApiModelProperty(value = "å
³è对象类åï¼0=é¨åºå
¶ä»ææï¼1=é¨åºå
é¨ç
§çï¼2=订åå¯åå¾çï¼3=é¨åºå
¥åºå¾çï¼4=叿ºåä»¶å¾çï¼5=叿ºå®æå¾çï¼6=叿ºå®å认è¯è½¦è¾ç
§çï¼" + |
| | | "7=叿ºå®å认è¯é©¾é©¶è¯ç
§çï¼8=叿ºå®å认è¯å
¶ä»å¾çï¼" + |
| | | "9=é¨åºé¨å¤´ç
§ï¼10=社ä¿ç¼´çº³è¯æï¼11=ææå³å¨ååï¼12=ä¸åå¾çï¼13=é¨åºåºåºå¾çï¼", example = "1") |
| | | "9=é¨åºé¨å¤´ç
§ï¼10=社ä¿ç¼´çº³è¯æï¼11=ææå³å¨ååï¼12=ä¸åå¾çï¼13=é¨åºåºåºå¾çï¼14=鿬¾å¾çï¼15=è¯ä»·å¾ç", example = "1") |
| | | private Integer objType; |
| | | |
| | | @ApiModelProperty(value = "æä»¶å°å") |
| | |
| | | private Integer selfTake; |
| | | |
| | | @ApiModelProperty(value = "订åç¶æ", example = "0") |
| | | @ExcelColumn(name = "订åç¶æ", valueMapping = "å°±å°å¯åç¶æï¼0=å¾
æ¯ä»;1=å¾
å¯å;2=å·²å¯å;5=å¾
åä»¶;6=åå¨é¾æ;7=已宿;96:订åå
³éï¼é款ï¼;97:忶龿;98=åæ¶ä¸;99=已忶;" + |
| | | "å¼å°å¯åç¶æï¼0=å¾
æ¯ä»;1=å¾
å¯å;2=å·²å¯å;3=å·²æ¥å;4=æ´¾éä¸;5=å·²å°åº/å·²éè¾¾;6=åå¨é¾æ;7=已宿;96:订åå
³éï¼é款ï¼;97:忶龿;98=åæ¶ä¸;99=已忶;") |
| | | @ExcelColumn(name = "订åç¶æ", valueMapping = "å°±å°å¯åç¶æï¼0=å¾
æ¯ä»;1=å¾
å¯å;2=å·²å¯å;5=å¾
åä»¶;6=åå¨é¾æ;7=已宿;99=已忶;" + |
| | | "å¼å°å¯åç¶æï¼0=å¾
æ¯ä»;1=å¾
å¯å;2=å·²å¯å;3=å·²æ¥å;4=æ´¾éä¸;5=å·²å°åº/å·²éè¾¾;6=åå¨é¾æ;7=已宿;99=已忶;") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å¼å¸¸è®¢åï¼0=å¦ï¼1=æ¯", example = "0") |
| | |
| | | @ApiModelProperty(value = "䏿¹è®¢åå·") |
| | | private String outTradeNo; |
| | | |
| | | @ApiModelProperty(value = "æ 人æ¥åæ¯å¦å·²çä¿¡éç¥å¹³å°ï¼0=å¦ï¼1=æ¯", example = "0") |
| | | private Integer platformSmsNotified; |
| | | |
| | | @ApiModelProperty(value = "æ 人æ¥åå·²çä¿¡éç¥å¹³å°æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date platformSmsNotifiedTime; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "å建å¼å§æ¶é´(æ¥è¯¢ç¨)", example = "2026-01-01") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | |
| | | @ApiModelProperty(value = "平尿ä½äººï¼type=1使ç¨ï¼", example = "0") |
| | | private Integer userId; |
| | | |
| | | @ApiModelProperty(value = "鿬¾éé¢ï¼åï¼", example = "10000") |
| | | private Long refundAmount; |
| | | |
| | | @ApiModelProperty(value = "鿬¾ç¶æï¼0=鿬¾ä¸ï¼1=鿬¾æåï¼2=鿬¾å¤±è´¥", example = "0") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "鿬¾å订åç¶æ", example = "1") |
| | | private Integer beforeStatus; |
| | | |
| | | } |
| | |
| | | import javax.validation.constraints.Max; |
| | | import javax.validation.constraints.Min; |
| | | import javax.validation.constraints.NotNull; |
| | | import javax.validation.constraints.Size; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 订åè¯ä»·è¯·æ± |
| | |
| | | @ApiModelProperty(value = "è¯ä»·å
容") |
| | | private String content; |
| | | |
| | | @Size(max = 3, message = "æå¤ä¸ä¼ 3å¼ å¾ç") |
| | | @ApiModelProperty(value = "å¾çå°ååè¡¨ï¼æå¤3å¼ ") |
| | | private List<String> images; |
| | | } |
| | |
| | | @ApiModelProperty(value = "èªå¨ç¡®è®¤æ¶è´§(天)", required = true) |
| | | private String autoConfirmReceipt; |
| | | |
| | | @ApiModelProperty(value = "æ 人æ¢åéç¥æ¶é´(åé)", required = true) |
| | | private String noGrabNotifyTime; |
| | | |
| | | @ApiModelProperty(value = "æ 人æ¢åçä¿¡éç¥äººå主é®(å¤ä¸ªä»¥,åå²)", required = true) |
| | | private String noGrabNotifyUsers; |
| | | |
| | | } |
| | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | @ApiModelProperty(value = "ä¸åéä»¶å¾çå
¨è·¯å¾å表") |
| | | private List<String> orderImages; |
| | | |
| | | // ---- 宿¶ç»çº¬åº¦ï¼å¼å°å¯åæç¶æè¿åï¼ ---- |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºç»åº¦") |
| | | private Double depositShopLng; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºçº¬åº¦") |
| | | private Double depositShopLat; |
| | | |
| | | @ApiModelProperty(value = "åä»¶ç¹ç»åº¦") |
| | | private Double takeLng; |
| | | |
| | | @ApiModelProperty(value = "åä»¶ç¹çº¬åº¦") |
| | | private Double takeLat; |
| | | |
| | | @ApiModelProperty(value = "叿ºå½åç»åº¦") |
| | | private Double driverLng; |
| | | |
| | | @ApiModelProperty(value = "叿ºå½å纬度") |
| | | private Double driverLat; |
| | | |
| | | // ---- è¯ä»·ä¿¡æ¯ ---- |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å·²è¯ä»·ï¼0=å¦ 1=æ¯") |
| | | private Integer commentStatus; |
| | | |
| | | @ApiModelProperty(value = "è¯ä»·æ¶é´") |
| | | @com.fasterxml.jackson.annotation.JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date commentTime; |
| | | |
| | | @ApiModelProperty(value = "è¯ä»·å
容") |
| | | private String commentContent; |
| | | |
| | | @ApiModelProperty(value = "è¯ä»·éä»¶å¾ç") |
| | | private List<String> commentImages; |
| | | |
| | | @ApiModelProperty(value = "叿ºè¯å") |
| | | private Integer driverScore; |
| | | |
| | | @Data |
| | | @ApiModel("ç©å项") |
| | | public static class OrderItem implements Serializable { |
| | |
| | | @ApiModelProperty(value = "订åç¶æ") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "订åç¶æææ¡") |
| | | private String statusName; |
| | | |
| | | @ApiModelProperty(value = "订åç¶ææè¿°") |
| | | private String statusDesc; |
| | | |
| | |
| | | |
| | | // ---- åä»¶ä¿¡æ¯ ---- |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºä¸»é®", example = "1") |
| | | private Integer takeShopId; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºåç§°ï¼æåä»¶é¨åºæ¶è¿åï¼") |
| | | private String takeShopName; |
| | | |
| | |
| | | @ApiModelProperty(value = "é¾æè´¹ç¨ï¼åï¼") |
| | | private Long overdueFee; |
| | | |
| | | // ---- 鿬¾ï¼status=96/99 æ¶è¿åï¼ ---- |
| | | |
| | | @ApiModelProperty(value = "鿬¾éé¢ï¼åï¼") |
| | | private Long refundAmount; |
| | | |
| | | @ApiModelProperty(value = "鿬¾ç³è¯·æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date refundApplyTime; |
| | | |
| | | @ApiModelProperty(value = "鿬¾æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date refundTime; |
| | | |
| | | @ApiModelProperty(value = "鿬¾å¤æ³¨") |
| | | private String refundRemark; |
| | | |
| | | // ---- æ è®° ---- |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å¼å¸¸: 0=å¦ 1=æ¯") |
| | |
| | | |
| | | @ApiModelProperty(value = "ç©åæç»å表") |
| | | private List<OrderItemVO> detailList; |
| | | |
| | | // ---- 叿ºä¿¡æ¯ ---- |
| | | |
| | | @ApiModelProperty(value = "叿ºä¸»é®") |
| | | private Integer driverId; |
| | | |
| | | @ApiModelProperty(value = "叿ºå§å") |
| | | private String driverName; |
| | | |
| | | @ApiModelProperty(value = "叿ºææºå·") |
| | | private String driverPhone; |
| | | |
| | | // ---- 宿¶ç»çº¬åº¦ï¼å¼å°å¯åæç¶æè¿åï¼ ---- |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºç»åº¦") |
| | | private Double depositShopLng; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºçº¬åº¦") |
| | | private Double depositShopLat; |
| | | |
| | | @ApiModelProperty(value = "åä»¶ç¹ç»åº¦") |
| | | private Double takeLng; |
| | | |
| | | @ApiModelProperty(value = "åä»¶ç¹çº¬åº¦") |
| | | private Double takeLat; |
| | | |
| | | @ApiModelProperty(value = "叿ºå½åç»åº¦") |
| | | private Double driverLng; |
| | | |
| | | @ApiModelProperty(value = "叿ºå½å纬度") |
| | | private Double driverLat; |
| | | |
| | | // ---- è¯ä»·ä¿¡æ¯ ---- |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å·²è¯ä»·ï¼0=å¦ 1=æ¯") |
| | | private Integer commentStatus; |
| | | |
| | | @ApiModelProperty(value = "è¯ä»·æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date commentTime; |
| | | |
| | | @ApiModelProperty(value = "è¯ä»·å
容") |
| | | private String commentContent; |
| | | |
| | | @ApiModelProperty(value = "è¯ä»·éä»¶å¾ç") |
| | | private List<String> commentImages; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºè¯å") |
| | | private Integer depositScore; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºè¯å") |
| | | private Integer takeScore; |
| | | |
| | | @ApiModelProperty(value = "叿ºè¯å") |
| | | private Integer driverScore; |
| | | } |
| | |
| | | @ApiModelProperty(value = "å¾
æ¶è´§è®¢åæ°é") |
| | | private Integer waitReceiveCount; |
| | | |
| | | @ApiModelProperty(value = "æ¯ä»å®æç°è´¦æ·") |
| | | private String aliAccount; |
| | | |
| | | @ApiModelProperty(value = "æ¯ä»å®å®åå§å") |
| | | private String aliName; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel("é¨åºéå®ç»è®¡") |
| | | public class ShopSalesStatsVO { |
| | | |
| | | @ApiModelProperty(value = "éå®é¢ï¼åï¼") |
| | | private Long salesAmount; |
| | | |
| | | @ApiModelProperty(value = "ç»ç®å©æ¶¦ï¼åï¼") |
| | | private Long settlementProfit; |
| | | |
| | | @ApiModelProperty(value = "è®¢åæ»æ°") |
| | | private Integer orderCount; |
| | | |
| | | @ApiModelProperty(value = "å¨åºè®¢åæ°") |
| | | private Integer storageCount; |
| | | |
| | | } |
| | |
| | | MyOrderDetailVO findMyOrderDetail(Integer id, Integer memberId); |
| | | |
| | | /** |
| | | * ä¼ååæ¶è®¢åï¼ä»
å¼å°å¯åï¼ |
| | | * ä¼ååæ¶è®¢å |
| | | * |
| | | * @param orderId 订åä¸»é® |
| | | * @param memberId ä¼åä¸»é® |
| | |
| | | */ |
| | | ActiveOrderTipVO getActiveOrderTip(Integer memberId); |
| | | |
| | | /** |
| | | * åæ¶è¶
æ¶æªæ¯ä»è®¢å |
| | | * æ ¹æ®è¿è¥é
ç½® AUTO_CANCEL_TIMEï¼åéï¼ï¼å°å建æ¶é´è¶
è¿è¯¥å¼ä¸ä»ä¸ºå¾
æ¯ä»çè®¢åæ¹éåæ¶ |
| | | * |
| | | * @return åæ¶çè®¢åæ°é |
| | | */ |
| | | int cancelTimeoutUnpaidOrders(); |
| | | |
| | | /** |
| | | * éç¥å¹³å°äººåï¼å·²å¯å订åè¶
æ¶æ 人æ¢å |
| | | * æ ¹æ®è¿è¥é
ç½® NO_GRAB_NOTIFY_TIMEï¼åéï¼ï¼æ«æå¼å°å·²å¯å(status=2)ä¸è¶
æ¶ç订åï¼ |
| | | * ç»é
ç½®çéç¥äººååéçä¿¡ï¼PLATFORM_WAIT_GRABï¼ï¼å¹¶æ è®°å·²éç¥é²æ¢éå¤ |
| | | * |
| | | * @return éç¥çè®¢åæ°é |
| | | */ |
| | | int notifyUngrabbedOrders(); |
| | | |
| | | /** |
| | | * èªå¨å®æè¶
æ¶æªç¡®è®¤ç订å |
| | | * æ ¹æ®è¿è¥é
ç½® AUTO_CONFIRM_RECEIPTï¼å¤©ï¼ï¼å°å·²éè¾¾(status=5)è¶
è¿è¯¥å¤©æ°ç订åèªå¨æ è®°ä¸ºå·²å®æ |
| | | * |
| | | * @return èªå¨å®æçè®¢åæ°é |
| | | */ |
| | | int autoCompleteOrders(); |
| | | |
| | | } |
| | |
| | | import com.doumee.dao.vo.ShopCenterVO; |
| | | import com.doumee.dao.vo.ShopDetailVO; |
| | | import com.doumee.dao.vo.ShopNearbyVO; |
| | | import com.doumee.dao.vo.ShopSalesStatsVO; |
| | | import com.doumee.dao.vo.ShopWebDetailVO; |
| | | |
| | | import java.math.BigDecimal; |
| | |
| | | */ |
| | | ShopLoginVO shopSilentLogin(Integer memberId); |
| | | |
| | | /** |
| | | * é¨åºéå®ç»è®¡ |
| | | * |
| | | * @param shopId é¨åºä¸»é® |
| | | * @param period ç»è®¡å¨æï¼0=仿¥, 1=æ¬æ, 2=䏿 |
| | | * @return éå®ç»è®¡ |
| | | */ |
| | | ShopSalesStatsVO getShopSalesStats(Integer shopId, Integer period); |
| | | |
| | | } |
| | |
| | | import com.doumee.dao.business.DriverInfoMapper; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.MultifileMapper; |
| | | import com.doumee.dao.business.OrderCommentMapper; |
| | | import com.doumee.dao.business.SmsrecordMapper; |
| | | import com.doumee.dao.business.CategoryMapper; |
| | | import com.doumee.dao.business.OrdersMapper; |
| | | import com.doumee.dao.business.ShopInfoMapper; |
| | | import com.doumee.dao.business.OrdersDetailMapper; |
| | | import com.doumee.dao.business.RevenueMapper; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | |
| | | 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.OrderComment; |
| | | import com.doumee.dao.business.model.ShopInfo; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.Multifile; |
| | | import com.doumee.dao.business.model.Smsrecord; |
| | |
| | | import com.doumee.service.business.NoticeService; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.RandomStringUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | * @author rk |
| | | * @date 2026/04/08 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class DriverInfoServiceImpl implements DriverInfoService { |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private OrdersMapper ordersMapper; |
| | | |
| | | @Autowired |
| | | private ShopInfoMapper shopInfoMapper; |
| | | |
| | | @Autowired |
| | | private OrderCommentMapper orderCommentMapper; |
| | | |
| | | @Autowired |
| | | private RevenueMapper revenueMapper; |
| | |
| | | } |
| | | } |
| | | |
| | | // å¼å°å¯å宿¶ç»çº¬åº¦ï¼æç¶æè¿åï¼ |
| | | if (Constants.ONE.equals(order.getType())) { |
| | | // 叿ºèªèº«ç»çº¬åº¦ |
| | | vo.setDriverLng(driverLng); |
| | | vo.setDriverLat(driverLat); |
| | | |
| | | // status=3(å·²æ¥å)ï¼è¿ååä»¶é¨åºç»çº¬åº¦ |
| | | if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) { |
| | | if (order.getDepositShopId() != null) { |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | if (depositShop != null) { |
| | | vo.setDepositShopLng(depositShop.getLongitude()); |
| | | vo.setDepositShopLat(depositShop.getLatitude()); |
| | | } |
| | | } |
| | | } |
| | | // status=4(é
éä¸)ï¼è¿ååä»¶ç¹ç»çº¬åº¦ |
| | | if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) { |
| | | if (order.getTakeShopId() != null) { |
| | | ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId()); |
| | | if (takeShop != null) { |
| | | vo.setTakeLng(takeShop.getLongitude()); |
| | | vo.setTakeLat(takeShop.getLatitude()); |
| | | } |
| | | } else if (order.getTakeLgt() != null && order.getTakeLat() != null) { |
| | | vo.setTakeLng(order.getTakeLgt().doubleValue()); |
| | | vo.setTakeLat(order.getTakeLat().doubleValue()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // ä¸åéä»¶å¾ç |
| | | String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() |
| | | + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode(); |
| | | vo.setOrderImages(getFileUrls(orderId, Constants.FileType.ORDER_FILE.getKey(), imgPrefix)); |
| | | |
| | | // è¯ä»·ä¿¡æ¯ |
| | | vo.setCommentStatus(order.getCommentStatus()); |
| | | if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) { |
| | | vo.setCommentTime(order.getCommentTime()); |
| | | // æ¥è¯¢å¸æºè¯ä»·è®°å½ |
| | | OrderComment driverComment = orderCommentMapper.selectOne(new QueryWrapper<OrderComment>().lambda() |
| | | .eq(OrderComment::getOrderId, orderId) |
| | | .eq(OrderComment::getTargetType, Constants.THREE) |
| | | .eq(OrderComment::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driverComment != null) { |
| | | vo.setDriverScore(driverComment.getScore()); |
| | | vo.setCommentContent(driverComment.getContent()); |
| | | } |
| | | // è¯ä»·éä»¶å¾ç |
| | | vo.setCommentImages(getFileUrls(orderId, Constants.FileType.COMMENT_ATTACH.getKey(), imgPrefix)); |
| | | } |
| | | |
| | | return vo; |
| | | } |
| | |
| | | sendDriverNotice(driverId, Constants.DriverOrderNotify.WAIT_DELIVER, orderId, |
| | | "orderNo", order.getCode(), |
| | | "shopName", shopName != null ? shopName : ""); |
| | | |
| | | // çä¿¡éç¥å¸æºï¼æ¢åæåï¼å¾
åä»¶ |
| | | String pickupAddress = order.getDepositShopAddress() != null ? order.getDepositShopAddress() : order.getDepositLocation(); |
| | | sendSmsNotify(driver.getTelephone(), Constants.SmsNotify.DRIVER_WAIT_PICKUP, |
| | | "orderNo", order.getCode(), |
| | | "address", pickupAddress != null ? pickupAddress : ""); |
| | | } |
| | | |
| | | @Override |
| | |
| | | // éç¥å¸æºï¼å·²åä»¶é
éä¸ |
| | | sendDriverNotice(driverId, Constants.DriverOrderNotify.DELIVERING, orderId, |
| | | "orderNo", order.getCode()); |
| | | |
| | | // çä¿¡éç¥ä¼åï¼å¸æºå·²åä»¶ï¼é
éä¸ |
| | | Member deliveringMember = memberMapper.selectById(order.getMemberId()); |
| | | if (deliveringMember != null) { |
| | | sendSmsNotify(deliveringMember.getTelephone(), Constants.SmsNotify.MEMBER_DELIVERING, |
| | | "orderNo", order.getCode(), |
| | | "name", driver.getName()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | return vo; |
| | | } |
| | | |
| | | /** |
| | | * åéçä¿¡éç¥ï¼å¤±è´¥ä¸å½±å主ä¸å¡ï¼ |
| | | */ |
| | | private void sendSmsNotify(String phone, Constants.SmsNotify smsNotify, String... paramPairs) { |
| | | if (StringUtils.isBlank(phone)) { |
| | | return; |
| | | } |
| | | String content = smsNotify.format(paramPairs); |
| | | try { |
| | | JSONObject templateParam = new JSONObject(); |
| | | for (int i = 0; i < paramPairs.length - 1; i += 2) { |
| | | templateParam.put(paramPairs[i], paramPairs[i + 1]); |
| | | } |
| | | boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | if (result) { |
| | | log.info("çä¿¡åéæå: phone={}, template={}", phone, smsNotify.name()); |
| | | } else { |
| | | log.warn("çä¿¡åé失败: phone={}, template={}", phone, smsNotify.name()); |
| | | } |
| | | // åå¨çä¿¡è®°å½ |
| | | Smsrecord record = new Smsrecord(); |
| | | record.setPhone(phone); |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); // 1=订åéç¥ |
| | | record.setStatus(result ? Constants.ONE : Constants.ZERO); |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |
| | | } catch (Exception e) { |
| | | log.error("çä¿¡åéå¼å¸¸: phone={}, template={}, error={}", phone, smsNotify.name(), e.getMessage()); |
| | | try { |
| | | Smsrecord record = new Smsrecord(); |
| | | record.setPhone(phone); |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); |
| | | record.setStatus(Constants.ZERO); |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |
| | | } catch (Exception ignored) {} |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.geocode.MapUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.core.utils.aliyun.AliSmsService; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.dao.system.SystemUserMapper; |
| | |
| | | import com.github.xiaoymin.knife4j.core.util.CollectionUtils; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | |
| | | * @author rk |
| | | * @date 2026/04/10 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class OrdersServiceImpl implements OrdersService { |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private NoticeService noticeService; |
| | | |
| | | @Autowired |
| | | private SmsrecordMapper smsrecordMapper; |
| | | |
| | | @Autowired |
| | | private WxPayV3Service wxPayV3Service; |
| | |
| | | if (takeShop == null || Constants.equalsInteger(takeShop.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "åä»¶åºéºä¸åå¨"); |
| | | } |
| | | if (takeShop.getStatus() == null || !Constants.equalsInteger(takeShop.getStatus(), Constants.ONE)) { |
| | | if (takeShop.getStatus() == null || Constants.equalsInteger(takeShop.getStatus(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "åä»¶åºéºå·²åä¸ï¼è¯·éæ©å
¶ä»é¨åº"); |
| | | } |
| | | takeLat = BigDecimal.valueOf(takeShop.getLatitude()); |
| | |
| | | // èªé
¬è®¡ç®ä¸å æ¯åå¨ |
| | | calculateAndSetFeeAllocation(orders, depositShop, takeShop); |
| | | |
| | | // æ 人æ¥åéç¥ç¸å
³åå§å |
| | | orders.setPlatformSmsNotified(Constants.ZERO); |
| | | orders.setPlatformSmsNotifiedTime(now); |
| | | |
| | | ordersMapper.insert(orders); |
| | | Integer orderId = orders.getId(); |
| | | |
| | |
| | | // 5. éæ°çæç¬¬ä¸æ¹è®¢åç¼å·ï¼é¿å
éå¤ï¼ |
| | | String orderTradeNo = generateOrderTradeNo(); |
| | | orders.setOutTradeNo(orderTradeNo); |
| | | orders.setPlatformSmsNotifiedTime(new Date()); |
| | | orders.setUpdateTime(new Date()); |
| | | ordersMapper.updateById(orders); |
| | | // 6. å¤èµ·å¾®ä¿¡æ¯ä» |
| | |
| | | // åæ¶/鿬¾ç¶ææ¶æ¥è¯¢éæ¬¾è®°å½ |
| | | Integer status = order.getStatus(); |
| | | if (status != null && (status == Constants.OrderStatus.overdue.getStatus() |
| | | || status == Constants.OrderStatus.closed.getStatus() |
| | | || status == Constants.OrderStatus.cancelOverdue.getStatus() |
| | | || status == Constants.OrderStatus.cancelling.getStatus() |
| | | || status == Constants.OrderStatus.cancelled.getStatus())) { |
| | | OrdersRefund ordersRefund = ordersRefundMapper.selectOne( |
| | | new QueryWrapper<OrdersRefund>().lambda() |
| | |
| | | .eq(Orders::getId, order.getId()) |
| | | .set(Orders::getIsUrgent, Constants.ONE) |
| | | .set(Orders::getPlatformRewardAmount, urgentFeeFen) |
| | | .set(Orders::getPlatformSmsNotified, Constants.ZERO) // éç½®éç¥ç¶æä¸ºæªéç¥ |
| | | .set(Orders::getPlatformSmsNotifiedTime, new Date()) // éç½®éç¥åºåæ¶é´ä¸ºå½å |
| | | .set(Orders::getUpdateTime, new Date()); |
| | | |
| | | // å¼å°å¯å䏿åä»¶é¨åºæ¶ï¼çæå¸æºæ ¸éç |
| | |
| | | vo.setExpectedDepositTime(order.getExpectedDepositTime()); |
| | | vo.setExpectedTakeTime(order.getExpectedTakeTime()); |
| | | vo.setArriveTime(order.getArriveTime()); |
| | | vo.setStatusName(Constants.OrderStatus.getDescByKey(order.getStatus(),order.getType())); |
| | | |
| | | // è´¹ç¨ï¼åï¼ |
| | | vo.setBasicAmount(order.getBasicAmount()); |
| | | vo.setDeclaredAmount(order.getDeclaredAmount()); |
| | | vo.setDeclaredFee(order.getDeclaredFee()); |
| | | vo.setUrgentAmount(order.getUrgentAmount()); |
| | | vo.setActualPayAmount(order.getPayAmount()); |
| | | vo.setActualPayAmount(Constants.equalsInteger(order.getPayStatus(), Constants.ONE)?order.getPayAmount():order.getEstimatedAmount()); |
| | | |
| | | // æ è®° |
| | | vo.setExceptionStatus(order.getExceptionStatus()); |
| | |
| | | |
| | | // åä»¶ä¿¡æ¯ |
| | | if (order.getTakeShopId() != null) { |
| | | vo.setTakeShopId(order.getTakeShopId()); |
| | | ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId()); |
| | | if (takeShop != null) { |
| | | vo.setTakeShopName(takeShop.getName()); |
| | |
| | | // åä»¶è系人 |
| | | vo.setTakeUser(order.getTakeUser()); |
| | | vo.setTakePhone(order.getTakePhone()); |
| | | |
| | | // 叿ºä¿¡æ¯ |
| | | if (order.getAcceptDriver() != null) { |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | if (driver != null) { |
| | | vo.setDriverId(driver.getId()); |
| | | vo.setDriverName(driver.getName()); |
| | | vo.setDriverPhone(driver.getTelephone()); |
| | | } |
| | | } |
| | | |
| | | // ç©åç±»ååç§° |
| | | if (order.getGoodType() != null) { |
| | |
| | | .eq(OrdersDetail::getDeleted, Constants.ZERO)); |
| | | vo.setDetailList(buildDetailList(details)); |
| | | |
| | | // é¾æä¿¡æ¯ |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details); |
| | | vo.setOverdue(overdueInfo.getOverdue()); |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | Integer orderStatus = order.getStatus(); |
| | | if(Constants.equalsInteger(orderStatus, Constants.FIVE)){ |
| | | // é¾æä¿¡æ¯ |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details); |
| | | if (Constants.ONE.equals(order.getType()) |
| | | && order.getTakeShopId() != null) { |
| | | // å¼å°å¯å + æåä»¶é¨åºï¼ |
| | | // æ ¹æ®è¡æè½¬ç§»å°åºæ¶é´(arriveTime)å½å¤©æä¸12ç¹å¤ææ¯å¦é¾æ |
| | | if (order.getArriveTime() != null) { |
| | | Calendar arriveCal = Calendar.getInstance(); |
| | | arriveCal.setTime(order.getArriveTime()); |
| | | arriveCal.set(Calendar.HOUR_OF_DAY, 23); |
| | | arriveCal.set(Calendar.MINUTE, 59); |
| | | arriveCal.set(Calendar.SECOND, 59); |
| | | Date arriveEndOfDay = arriveCal.getTime(); |
| | | boolean isOverdue = new Date().after(arriveEndOfDay); |
| | | vo.setOverdue(isOverdue); |
| | | if (isOverdue) { |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays() > 0 ? overdueInfo.getOverdueDays() : 1); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | } else { |
| | | vo.setOverdueDays(0); |
| | | vo.setOverdueFee(0L); |
| | | } |
| | | } else { |
| | | vo.setOverdue(false); |
| | | vo.setOverdueDays(0); |
| | | vo.setOverdueFee(0L); |
| | | } |
| | | } else if (Constants.ZERO.equals(order.getType())) { |
| | | // å°±å°å¯åï¼ä¿æåé»è¾ |
| | | vo.setOverdue(overdueInfo.getOverdue()); |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | } |
| | | } else { |
| | | vo.setOverdue(false); |
| | | vo.setOverdueDays(0); |
| | | vo.setOverdueFee(0L); |
| | | } |
| | | |
| | | // 鿬¾ä¿¡æ¯ï¼status=96å
³é/99åæ¶æ¶è¿åï¼ |
| | | if (orderStatus != null && |
| | | (Constants.equalsInteger(orderStatus, Constants.OrderStatus.cancelled.getStatus()))) { |
| | | vo.setRefundApplyTime(order.getCancelTime()); |
| | | // æ¥è¯¢é款记å½è·å鿬¾éé¢å夿³¨ |
| | | OrdersRefund ordersRefund = ordersRefundMapper.selectOne( |
| | | new QueryWrapper<OrdersRefund>().lambda() |
| | | .eq(OrdersRefund::getOrderId, order.getId()) |
| | | .eq(OrdersRefund::getDeleted, Constants.ZERO) |
| | | .orderByDesc(OrdersRefund::getCreateTime) |
| | | .last("limit 1")); |
| | | if (ordersRefund != null) { |
| | | vo.setRefundAmount(ordersRefund.getRefundAmount() != null |
| | | ? ordersRefund.getRefundAmount() : order.getRefundAmount()); |
| | | vo.setRefundRemark(ordersRefund.getRemark()); |
| | | vo.setRefundTime(ordersRefund.getRefundTime()); |
| | | } else { |
| | | vo.setRefundAmount(order.getRefundAmount()); |
| | | } |
| | | } |
| | | |
| | | // æ ¸éç |
| | | Integer status = order.getStatus(); |
| | |
| | | } else { |
| | | // é¨åºç«¯ï¼å§ç»è¿åä¼åæ ¸éç |
| | | vo.setMemberVerifyCode(order.getMemberVerifyCode()); |
| | | } |
| | | |
| | | // å¼å°å¯åç»çº¬åº¦ï¼å°±å°å¯åä¸è¿åï¼ |
| | | if (Constants.ONE.equals(order.getType())) { |
| | | // status=3(å·²æ¥å)ï¼è¿ååä»¶é¨åºç»çº¬åº¦ + 叿ºç»çº¬åº¦ |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | if (depositShop != null) { |
| | | vo.setDepositShopLng(depositShop.getLongitude()); |
| | | vo.setDepositShopLat(depositShop.getLatitude()); |
| | | } |
| | | if (order.getAcceptDriver() != null) { |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | if (driver != null) { |
| | | vo.setDriverLng(driver.getLongitude()); |
| | | vo.setDriverLat(driver.getLatitude()); |
| | | } |
| | | } |
| | | } |
| | | // status=4(é
éä¸)ï¼è¿ååä»¶ç¹ç»çº¬åº¦ + 叿ºç»çº¬åº¦ |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.delivering.getStatus())) { |
| | | // åä»¶ç¹ç»çº¬åº¦ï¼ä¼å
åä»¶é¨åºï¼å¦å订åä¸çåä»¶åæ ï¼ |
| | | if (order.getTakeShopId() != null) { |
| | | ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId()); |
| | | if (takeShop != null) { |
| | | vo.setTakeLng(takeShop.getLongitude()); |
| | | vo.setTakeLat(takeShop.getLatitude()); |
| | | } |
| | | } else if (order.getTakeLgt() != null && order.getTakeLat() != null) { |
| | | vo.setTakeLng(order.getTakeLgt().doubleValue()); |
| | | vo.setTakeLat(order.getTakeLat().doubleValue()); |
| | | } |
| | | if (order.getAcceptDriver() != null) { |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | if (driver != null) { |
| | | vo.setDriverLng(driver.getLongitude()); |
| | | vo.setDriverLat(driver.getLatitude()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // è¯ä»·ä¿¡æ¯ |
| | | vo.setCommentStatus(order.getCommentStatus()); |
| | | if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) { |
| | | vo.setCommentTime(order.getCommentTime()); |
| | | // æ¥è¯¢è¯ä»·è®°å½ï¼è·åå对象è¯å |
| | | List<OrderComment> comments = orderCommentMapper.selectList(new QueryWrapper<OrderComment>().lambda() |
| | | .eq(OrderComment::getOrderId, order.getId()) |
| | | .eq(OrderComment::getDeleted, Constants.ZERO)); |
| | | for (OrderComment c : comments) { |
| | | if (Constants.equalsInteger(c.getTargetType(), Constants.ONE)) { |
| | | vo.setDepositScore(c.getScore()); |
| | | vo.setCommentContent(c.getContent()); |
| | | } else if (Constants.equalsInteger(c.getTargetType(), Constants.TWO)) { |
| | | vo.setTakeScore(c.getScore()); |
| | | } else if (Constants.equalsInteger(c.getTargetType(), Constants.THREE)) { |
| | | vo.setDriverScore(c.getScore()); |
| | | } |
| | | } |
| | | // è¯ä»·éä»¶å¾ç |
| | | vo.setCommentImages(getFileUrls(order.getId(), Constants.FileType.COMMENT_ATTACH.getKey(), imgPrefix)); |
| | | } |
| | | |
| | | return vo; |
| | |
| | | order.setCancelTime(now); |
| | | ordersMapper.updateById(order); |
| | | saveCancelLog(order, "ä¼ååæ¶è®¢åï¼å¾
æ¯ä»ï¼", reason, memberId); |
| | | // çä¿¡éç¥ä¼åï¼è®¢å已忶 |
| | | Member cancelMember1 = memberMapper.selectById(memberId); |
| | | sendSmsNotify(cancelMember1 != null ? cancelMember1.getTelephone() : null, |
| | | Constants.SmsNotify.MEMBER_CANCELLED, "orderNo", order.getCode()); |
| | | return; |
| | | } |
| | | |
| | | // å¾
å¯åï¼ç´æ¥åæ¶ï¼å
¨é¢é款ï¼ä¸é订åç±»åï¼ |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.waitDeposit.getStatus())) { |
| | | // å
æ 记订å已忶 |
| | | order.setStatus(Constants.OrderStatus.cancelled.getStatus()); |
| | | order.setCancelTime(now); |
| | | order.setRefundAmount(order.getPayAmount()); |
| | | ordersMapper.updateById(order); |
| | | |
| | | saveCancelLog(order, "ä¼ååæ¶è®¢åï¼å¾
å¯åï¼å
¨é¢é款ï¼", reason, memberId); |
| | | // éç¥ä¼åï¼å·²åæ¶ |
| | | sendOrderNotice(memberId, Constants.MemberOrderNotify.CANCELLED, orderId, |
| | | "orderNo", order.getCode()); |
| | | // çä¿¡éç¥ä¼åï¼è®¢å已忶 |
| | | Member cancelMember2 = memberMapper.selectById(memberId); |
| | | sendSmsNotify(cancelMember2 != null ? cancelMember2.getTelephone() : null, |
| | | Constants.SmsNotify.MEMBER_CANCELLED, "orderNo", order.getCode()); |
| | | |
| | | // è°ç¨å¾®ä¿¡é款V3ï¼å
¨é¢é款 |
| | | com.wechat.pay.java.service.refund.model.Refund refundResult; |
| | | try { |
| | | refundResult = wxPayV3Service.refund(order.getOutTradeNo(), order.getPayAmount(), order.getPayAmount(), |
| | | "订å鿬¾", wxPayProperties.getV3RefundNotifyUrl()); |
| | | } catch (Exception e) { |
| | | log.error("å¾
å¯å订å鿬¾è°ç¨å¼å¸¸, orderId={}", orderId, e); |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鿬¾å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | |
| | | com.wechat.pay.java.service.refund.model.Status refundStatus = refundResult.getStatus(); |
| | | |
| | | // è®°å½éæ¬¾ä¿¡æ¯ |
| | | OrdersRefund refund = new OrdersRefund(); |
| | | refund.setOrderId(orderId); |
| | |
| | | refund.setCancelInfo(reason); |
| | | refund.setCreateTime(now); |
| | | refund.setDeleted(Constants.ZERO); |
| | | |
| | | // è°ç¨å¾®ä¿¡é款V3ï¼å
¨é¢é款 |
| | | Refund refundResult = wxPayV3Service.refund(order.getOutTradeNo(), order.getPayAmount(), order.getPayAmount(), |
| | | "订å鿬¾", wxPayProperties.getV3RefundNotifyUrl()); |
| | | refund.setBeforeStatus(Constants.OrderStatus.waitDeposit.getStatus()); |
| | | refund.setRefundAmount(order.getPayAmount()); |
| | | refund.setRefundCode(refundResult.getOutRefundNo()); |
| | | refund.setStatus(Constants.ZERO); // 鿬¾ä¸ |
| | | |
| | | if (com.wechat.pay.java.service.refund.model.Status.SUCCESS.equals(refundStatus)) { |
| | | // 鿬¾æå |
| | | refund.setStatus(Constants.ONE); |
| | | } else if (com.wechat.pay.java.service.refund.model.Status.PROCESSING.equals(refundStatus)) { |
| | | // 鿬¾ä¸ï¼çåè°å¤ç |
| | | refund.setStatus(Constants.ZERO); |
| | | } else { |
| | | // 鿬¾å¤±è´¥/å¼å¸¸ï¼CLOSED / ABNORMAL / å
¶ä»ï¼ |
| | | log.error("å¾
å¯å订å鿬¾å¤±è´¥, orderId={}, refundStatus={}", orderId, refundStatus); |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鿬¾å¤±è´¥ï¼è¯·è系客æå¤ç"); |
| | | } |
| | | ordersRefundMapper.insert(refund); |
| | | |
| | | order.setStatus(Constants.OrderStatus.cancelled.getStatus()); |
| | | order.setCancelTime(now); |
| | | order.setRefundAmount(order.getPayAmount()); |
| | | ordersMapper.updateById(order); |
| | | |
| | | saveCancelLog(order, "ä¼ååæ¶è®¢åï¼å¾
å¯åï¼å
¨é¢é款ï¼", reason, memberId); |
| | | // éç¥ä¼åï¼éæ¬¾ä¸ |
| | | sendOrderNotice(memberId, Constants.MemberOrderNotify.REFUNDING, orderId, |
| | | "orderNo", order.getCode()); |
| | | return; |
| | | } |
| | | |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ä»
å¼å°å¯å订åå¯åæ¶"); |
| | | } |
| | | |
| | | // å·²å¯å/å·²æ¥åï¼è¿å
¥åæ¶ä¸ç¶æ |
| | | // å·²å¯å/å·²æ¥åï¼ç´æ¥å°è®¢åç±»åæ¹ä¸ºå°±å°å¯å |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.deposited.getStatus()) |
| | | || Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | order.setStatus(Constants.OrderStatus.cancelling.getStatus()); |
| | | order.setCancelTime(now); |
| | | order.setType(Constants.ZERO); // å°±å°å¯å |
| | | ordersMapper.updateById(order); |
| | | saveCancelLog(order, "ä¼åç³è¯·åæ¶è®¢åï¼å·²å¯å/å·²æ¥åï¼", reason, memberId); |
| | | // éç¥åä»¶é¨åºï¼é款ç³è¯· |
| | | saveCancelLog(order, "ä¼ååæ¶å¼å°å¯å订åï¼è½¬ä¸ºå°±å°å¯å", reason, memberId); |
| | | // éç¥åä»¶é¨åº |
| | | if (order.getDepositShopId() != null) { |
| | | sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.REFUNDING, orderId, |
| | | "orderNo", order.getCode()); |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | sendSmsNotify(depositShop != null ? depositShop.getLinkPhone() : null, |
| | | Constants.SmsNotify.SHOP_REFUNDING, "orderNo", order.getCode()); |
| | | } |
| | | // éç¥å¸æºï¼è®¢å鿬¾ä¸ï¼å·²æ¥åæ
åµä¸å¸æºé忢æå¡ï¼ |
| | | if (order.getAcceptDriver() != null && Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) { |
| | | // éç¥å¸æºï¼è®¢å已忶ï¼å·²æ¥åæ
åµä¸å¸æºé忢æå¡ï¼ |
| | | if (order.getAcceptDriver() != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.REFUNDING, orderId, |
| | | "orderNo", order.getCode()); |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | sendSmsNotify(driver != null ? driver.getTelephone() : null, |
| | | Constants.SmsNotify.DRIVER_REFUNDING, "orderNo", order.getCode()); |
| | | } |
| | | return; |
| | | } |
| | |
| | | sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.WAIT_VERIFY, order.getId(), |
| | | "orderNo", order.getCode()); |
| | | } |
| | | |
| | | // çä¿¡éç¥åä»¶é¨åºï¼ææ°è®¢åå¾
æ ¸éª |
| | | if (order.getDepositShopId() != null) { |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | if (depositShop != null) { |
| | | sendSmsNotify(depositShop.getLinkPhone(), Constants.SmsNotify.SHOP_WAIT_VERIFY, |
| | | "orderNo", order.getCode()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (!Constants.equalsInteger(order.getMemberId(), memberId)) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "æ ææä½æ¤è®¢å"); |
| | | } |
| | | // ä»
已宿(7)ã已忶(99)ã已鿬¾(96)å¯å é¤ |
| | | // ä»
已宿(7)ã已忶(99) |
| | | int status = Constants.formatIntegerNum(order.getStatus()); |
| | | if (status != Constants.OrderStatus.finished.getStatus() |
| | | && status != Constants.OrderStatus.cancelled.getStatus() |
| | | && status != Constants.OrderStatus.closed.getStatus()) { |
| | | && status != Constants.OrderStatus.cancelled.getStatus()) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å½å订åç¶æä¸å¯å é¤"); |
| | | } |
| | | ordersMapper.update(new UpdateWrapper<Orders>().lambda() |
| | |
| | | orderCommentMapper.insert(driverComment); |
| | | } |
| | | |
| | | // 4.4 ä¿åè¯ä»·éä»¶å¾çï¼obj_type=15ï¼æå¤3å¼ ï¼ |
| | | saveVerifyImages(order.getId(), dto.getImages(), Constants.FileType.COMMENT_ATTACH.getKey(), null); |
| | | |
| | | // 5. æ´æ°é¨åº/叿ºå¹³åè¯å |
| | | updateTargetScore(Constants.ONE, order.getDepositShopId()); |
| | | if (isRemote && order.getTakeShopId() != null) { |
| | |
| | | refundRecord.setType(3); // åºåºé款 |
| | | refundRecord.setCreateTime(now); |
| | | refundRecord.setRefundRemark(remark); |
| | | refundRecord.setRefundAmount(order.getRefundAmount()); |
| | | refundRecord.setDeleted(Constants.ZERO); |
| | | refundRecord.setBeforeStatus(order.getStatus()); |
| | | ordersRefundMapper.insert(refundRecord); |
| | | |
| | | // è°ç¨å¾®ä¿¡é款V3ï¼æ¾å¨æåï¼ç¡®ä¿åç½®æä½å
¨é¨æåï¼ |
| | |
| | | Long takeShopFee = 0L; |
| | | Long driverFee = 0L; |
| | | |
| | | if (Constants.equalsInteger(order.getType(), Constants.TWO)) { |
| | | if (Constants.equalsInteger(order.getType(), Constants.ONE)) { |
| | | // å¼å°å¯åï¼åä»¶é¨åº + 叿º |
| | | driverFee = new BigDecimal(totalAmount) |
| | | .multiply(driverRate) |
| | |
| | | sendShopNotice(order.getTakeShopId(), Constants.ShopOrderNotify.ARRIVED, order.getId(), |
| | | "orderNo", order.getCode(), |
| | | "destination", destination); |
| | | } |
| | | |
| | | // çä¿¡éç¥ä¼åï¼è¡æå·²éè¾¾ |
| | | Member arrivedMember = memberMapper.selectById(order.getMemberId()); |
| | | if (arrivedMember != null) { |
| | | sendSmsNotify(arrivedMember.getTelephone(), Constants.SmsNotify.MEMBER_ARRIVED, |
| | | "orderNo", order.getCode(), |
| | | "address", destination, |
| | | "code", order.getMemberVerifyCode() != null ? order.getMemberVerifyCode() : ""); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.cancelled.getStatus())) { |
| | | return "订åå·²åæ¶ï¼æè°¢æ¨çæ¯æï¼æ¬¢è¿ä¸æ¬¡åä¼ï¼"; |
| | | } |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.cancelling.getStatus())) { |
| | | return "鿬¾ç³è¯·å·²æäº¤ï¼å¹³å°ä¼å°½å¿«ä¸ºæ¨å¤ç鿬¾"; |
| | | } |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.closed.getStatus())) { |
| | | return "鿬¾å·²æååè·¯è¿åï¼è¯·æ³¨ææ¥æ¶"; |
| | | } |
| | | return ""; |
| | | } |
| | |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public int cancelTimeoutUnpaidOrders() { |
| | | // è·åè¶
æ¶é
ç½®ï¼åéï¼ |
| | | String autoCancelTimeStr = operationConfigBiz.getConfig().getAutoCancelTime(); |
| | | if (StringUtils.isBlank(autoCancelTimeStr)) { |
| | | log.info("æªé
ç½®è¶
æ¶åæ¶æ¶é´ï¼è·³è¿"); |
| | | return 0; |
| | | } |
| | | int autoCancelMinutes; |
| | | try { |
| | | autoCancelMinutes = Integer.parseInt(autoCancelTimeStr); |
| | | } catch (NumberFormatException e) { |
| | | log.warn("è¶
æ¶åæ¶æ¶é´é
ç½®å¼å¸¸: {}", autoCancelTimeStr); |
| | | return 0; |
| | | } |
| | | if (autoCancelMinutes <= 0) { |
| | | return 0; |
| | | } |
| | | |
| | | // æ¥è¯¢ææè¶
æ¶æªæ¯ä»è®¢åï¼status=0 ä¸ å建æ¶é´ + é
ç½®åéæ° < å½åæ¶é´ |
| | | Date deadline = new Date(System.currentTimeMillis() - (long) autoCancelMinutes * 60 * 1000); |
| | | List<Orders> timeoutOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getStatus, Constants.OrderStatus.waitPay.getStatus()) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .lt(Orders::getCreateTime, deadline)); |
| | | |
| | | if (timeoutOrders == null || timeoutOrders.isEmpty()) { |
| | | return 0; |
| | | } |
| | | |
| | | int count = 0; |
| | | Date now = new Date(); |
| | | for (Orders order : timeoutOrders) { |
| | | try { |
| | | order.setStatus(Constants.OrderStatus.cancelled.getStatus()); |
| | | order.setCancelTime(now); |
| | | order.setUpdateTime(now); |
| | | ordersMapper.updateById(order); |
| | | |
| | | // åå
¥æä½æ¥å¿ |
| | | OrderLog orderLog = new OrderLog(); |
| | | orderLog.setOrderId(order.getId()); |
| | | orderLog.setTitle("ç³»ç»èªå¨åæ¶ï¼è¶
æ¶æªæ¯ä»ï¼"); |
| | | orderLog.setLogInfo("订åè¶
æ¶" + autoCancelMinutes + "åéæªæ¯ä»ï¼ç³»ç»èªå¨åæ¶"); |
| | | orderLog.setObjType(Constants.ORDER_LOG_CANCEL); |
| | | orderLog.setOrderStatus(Constants.OrderStatus.cancelled.getStatus()); |
| | | orderLog.setOptUserType(3); // 3=ç³»ç» |
| | | orderLog.setCreateTime(now); |
| | | orderLog.setDeleted(Constants.ZERO); |
| | | orderLogService.create(orderLog); |
| | | |
| | | // çä¿¡éç¥ä¼åï¼è®¢å已忶 |
| | | if (order.getMemberId() != null) { |
| | | Member member = memberMapper.selectById(order.getMemberId()); |
| | | sendSmsNotify(member != null ? member.getTelephone() : null, |
| | | Constants.SmsNotify.MEMBER_CANCELLED, "orderNo", order.getCode()); |
| | | } |
| | | |
| | | count++; |
| | | } catch (Exception e) { |
| | | log.error("åæ¶è¶
æ¶è®¢åå¼å¸¸, orderId={}, error={}", order.getId(), e.getMessage()); |
| | | } |
| | | } |
| | | log.info("è¶
æ¶æªæ¯ä»è®¢åèªå¨åæ¶å®æï¼å
±åæ¶{}å", count); |
| | | return count; |
| | | } |
| | | |
| | | @Override |
| | | public int notifyUngrabbedOrders() { |
| | | // è·åæ 人æ¢åéç¥æ¶é´é
ç½®ï¼åéï¼ |
| | | String noGrabTimeStr = operationConfigBiz.getConfig().getNoGrabNotifyTime(); |
| | | if (StringUtils.isBlank(noGrabTimeStr)) { |
| | | return 0; |
| | | } |
| | | int noGrabMinutes; |
| | | try { |
| | | noGrabMinutes = Integer.parseInt(noGrabTimeStr); |
| | | } catch (NumberFormatException e) { |
| | | log.warn("æ 人æ¢åéç¥æ¶é´é
ç½®å¼å¸¸: {}", noGrabTimeStr); |
| | | return 0; |
| | | } |
| | | if (noGrabMinutes <= 0) { |
| | | return 0; |
| | | } |
| | | |
| | | // è·åéç¥äººå主é®å表 |
| | | String noGrabUsers = operationConfigBiz.getConfig().getNoGrabNotifyUsers(); |
| | | if (StringUtils.isBlank(noGrabUsers)) { |
| | | return 0; |
| | | } |
| | | List<String> userIdStrList = Arrays.asList(noGrabUsers.split(",")); |
| | | List<Integer> userIds = new ArrayList<>(); |
| | | for (String idStr : userIdStrList) { |
| | | if (StringUtils.isNotBlank(idStr.trim())) { |
| | | userIds.add(Integer.parseInt(idStr.trim())); |
| | | } |
| | | } |
| | | if (userIds.isEmpty()) { |
| | | return 0; |
| | | } |
| | | |
| | | // æ¥è¯¢éç¥äººåææºå· |
| | | List<String> notifyPhones = new ArrayList<>(); |
| | | for (Integer userId : userIds) { |
| | | SystemUser user = systemUserMapper.selectById(userId); |
| | | if (user != null && StringUtils.isNotBlank(user.getMobile())) { |
| | | notifyPhones.add(user.getMobile()); |
| | | } |
| | | } |
| | | if (notifyPhones.isEmpty()) { |
| | | log.warn("æ 人æ¢åéç¥äººååæ ææææºå·"); |
| | | return 0; |
| | | } |
| | | |
| | | // æ¥è¯¢å¼å°å·²å¯å(status=2)ãæªéç¥(platformSmsNotified=0ænull)ãè¶
æ¶ç订å |
| | | Date deadline = new Date(System.currentTimeMillis() - (long) noGrabMinutes * 60 * 1000); |
| | | List<Orders> ungrabbedOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getType, Constants.ONE) // å¼å°å¯å |
| | | .eq(Orders::getStatus, Constants.OrderStatus.deposited.getStatus()) // å·²å¯å |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .ne(Orders::getPlatformSmsNotified, Constants.ONE) // æªéç¥ |
| | | .lt(Orders::getPlatformSmsNotifiedTime, deadline)); // éç¥åºåæ¶é´è¶
è¿é
ç½®æ¶é´ |
| | | |
| | | if (ungrabbedOrders == null || ungrabbedOrders.isEmpty()) { |
| | | return 0; |
| | | } |
| | | |
| | | int count = 0; |
| | | Date now = new Date(); |
| | | for (Orders order : ungrabbedOrders) { |
| | | try { |
| | | // ç»ææéç¥äººååçä¿¡ |
| | | for (String phone : notifyPhones) { |
| | | sendSmsNotify(phone, Constants.SmsNotify.PLATFORM_WAIT_GRAB, |
| | | "orderNo", order.getCode(), |
| | | "time", String.valueOf(noGrabMinutes)); |
| | | } |
| | | // æ è®°å·²éç¥ + è®°å½éç¥æ¶é´ |
| | | order.setPlatformSmsNotified(Constants.ONE); |
| | | order.setPlatformSmsNotifiedTime(now); |
| | | order.setUpdateTime(now); |
| | | ordersMapper.updateById(order); |
| | | count++; |
| | | } catch (Exception e) { |
| | | log.error("æ 人æ¢åçä¿¡éç¥å¼å¸¸, orderId={}, error={}", order.getId(), e.getMessage()); |
| | | } |
| | | } |
| | | log.info("æ 人æ¢åçä¿¡éç¥å®æï¼å
±éç¥{}å", count); |
| | | return count; |
| | | } |
| | | |
| | | @Override |
| | | public int autoCompleteOrders() { |
| | | // è·åèªå¨ç¡®è®¤æ¶è´§å¤©æ°é
ç½® |
| | | String autoConfirmDaysStr = operationConfigBiz.getConfig().getAutoConfirmReceipt(); |
| | | if (StringUtils.isBlank(autoConfirmDaysStr)) { |
| | | return 0; |
| | | } |
| | | int autoConfirmDays; |
| | | try { |
| | | autoConfirmDays = Integer.parseInt(autoConfirmDaysStr); |
| | | } catch (NumberFormatException e) { |
| | | log.warn("èªå¨ç¡®è®¤æ¶è´§å¤©æ°é
ç½®å¼å¸¸: {}", autoConfirmDaysStr); |
| | | return 0; |
| | | } |
| | | if (autoConfirmDays <= 0) { |
| | | return 0; |
| | | } |
| | | |
| | | // æ¥è¯¢å·²éè¾¾(status=5)ä¸éè¾¾æ¶é´è¶
è¿é
置天æ°ç订å |
| | | Date deadline = new Date(System.currentTimeMillis() - (long) autoConfirmDays * 24 * 60 * 60 * 1000); |
| | | List<Orders> orders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus()) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .isNotNull(Orders::getArriveTime) |
| | | .lt(Orders::getArriveTime, deadline)); |
| | | |
| | | if (orders == null || orders.isEmpty()) { |
| | | return 0; |
| | | } |
| | | |
| | | int count = 0; |
| | | Date now = new Date(); |
| | | for (Orders order : orders) { |
| | | try { |
| | | // é¾ææªæ¯ä»çä¸èªå¨å®æ |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | continue; |
| | | } |
| | | |
| | | // æ´æ°è®¢åç¶æä¸ºå·²å®æ |
| | | order.setStatus(Constants.OrderStatus.finished.getStatus()); |
| | | order.setFinishTime(now); |
| | | order.setUpdateTime(now); |
| | | ordersMapper.updateById(order); |
| | | |
| | | // éæ¾æ ¸éç |
| | | if (StringUtils.isNotBlank(order.getMemberVerifyCode())) { |
| | | releaseVerifyCode(order.getMemberVerifyCode()); |
| | | } |
| | | |
| | | // çææ¶çè®°å½ |
| | | calculateAndSaveOrderFees(order.getId()); |
| | | generateRevenueRecords(order.getId()); |
| | | |
| | | // è®°å½æä½æ¥å¿ |
| | | OrderLog orderLog = new OrderLog(); |
| | | orderLog.setOrderId(order.getId()); |
| | | orderLog.setTitle("ç³»ç»èªå¨å®æ"); |
| | | orderLog.setLogInfo("订åå·²éè¾¾è¶
è¿" + autoConfirmDays + "天æªç¡®è®¤ï¼ç³»ç»èªå¨å®æ"); |
| | | orderLog.setObjType(Constants.ORDER_LOG_CANCEL); |
| | | orderLog.setOrderStatus(Constants.OrderStatus.finished.getStatus()); |
| | | orderLog.setOptUserType(3); // 3=ç³»ç» |
| | | orderLog.setCreateTime(now); |
| | | orderLog.setDeleted(Constants.ZERO); |
| | | orderLogService.create(orderLog); |
| | | |
| | | // éç¥ä¼åï¼è®¢å已宿 |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(), |
| | | "orderNo", order.getCode()); |
| | | // éç¥åä»¶é¨åºååä»¶é¨åº |
| | | String settleDays = operationConfigBiz.getConfig().getSettlementDate(); |
| | | notifyBothShops(order, Constants.ShopOrderNotify.FINISHED, |
| | | "orderNo", order.getCode(), |
| | | "settleDays", settleDays != null ? settleDays : "7"); |
| | | // éç¥å¸æº |
| | | if (order.getAcceptDriver() != null) { |
| | | sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.FINISHED, order.getId(), |
| | | "orderNo", order.getCode(), |
| | | "settleDays", settleDays != null ? settleDays : "7"); |
| | | } |
| | | |
| | | count++; |
| | | } catch (Exception e) { |
| | | log.error("èªå¨å®æè®¢åå¼å¸¸, orderId={}, error={}", order.getId(), e.getMessage()); |
| | | } |
| | | } |
| | | log.info("èªå¨å®æè¶
æ¶è®¢å宿ï¼å
±å®æ{}å", count); |
| | | return count; |
| | | } |
| | | |
| | | /** |
| | | * åéçä¿¡éç¥ï¼å¤±è´¥ä¸å½±å主ä¸å¡ï¼ |
| | | * @param phone æ¥æ¶ææºå· |
| | | * @param smsNotify çä¿¡æ¨¡æ¿æä¸¾ |
| | | * @param paramPairs 模æ¿åæ°ï¼key-value 交æ¿ä¼ å
¥ï¼å¦ "orderNo", "XL202604220001" |
| | | */ |
| | | private void sendSmsNotify(String phone, Constants.SmsNotify smsNotify, String... paramPairs) { |
| | | if (StringUtils.isBlank(phone)) { |
| | | return; |
| | | } |
| | | String content = smsNotify.format(paramPairs); |
| | | try { |
| | | JSONObject templateParam = new JSONObject(); |
| | | for (int i = 0; i < paramPairs.length - 1; i += 2) { |
| | | templateParam.put(paramPairs[i], paramPairs[i + 1]); |
| | | } |
| | | boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | if (result) { |
| | | log.info("çä¿¡åéæå: phone={}, template={}", phone, smsNotify.name()); |
| | | } else { |
| | | log.warn("çä¿¡åé失败: phone={}, template={}", phone, smsNotify.name()); |
| | | } |
| | | // åå¨çä¿¡è®°å½ |
| | | Smsrecord record = new Smsrecord(); |
| | | record.setPhone(phone); |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); // 1=订åéç¥ |
| | | record.setStatus(result ? Constants.ONE : Constants.ZERO); // 1=å·²åé, 0=åé失败 |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |
| | | } catch (Exception e) { |
| | | log.error("çä¿¡åéå¼å¸¸: phone={}, template={}, error={}", phone, smsNotify.name(), e.getMessage()); |
| | | // å¼å¸¸ä¹è®°å½ |
| | | try { |
| | | Smsrecord record = new Smsrecord(); |
| | | record.setPhone(phone); |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); |
| | | record.setStatus(Constants.ZERO); // åé失败 |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |
| | | } catch (Exception ignored) {} |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "é¨åºä¸åå¨"); |
| | | } |
| | | Integer memberId = shop.getRegionMemberId(); |
| | | return buildRevenueStatistics(memberId, Constants.TWO, shop.getBalance()); |
| | | return buildRevenueStatistics(shop.getId(), Constants.TWO, shop.getBalance()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | IPage<Revenue> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | QueryWrapper<Revenue> qw = buildRevenueQueryWrapper(pageWrap.getModel(), shop.getRegionMemberId()); |
| | | QueryWrapper<Revenue> qw = buildRevenueQueryWrapper(pageWrap.getModel(), shop.getId()); |
| | | PageData<Revenue> result = PageData.from(revenueMapper.selectPage(page, qw)); |
| | | if (result != null && result.getRecords() != null) { |
| | | for (Revenue model : result.getRecords()) { |
| | |
| | | if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | return buildRevenueSummary(queryDTO, shop.getRegionMemberId()); |
| | | return buildRevenueSummary(queryDTO, shop.getId()); |
| | | } |
| | | |
| | | private QueryWrapper<Revenue> buildRevenueQueryWrapper(RevenueQueryDTO query, Integer memberId) { |
| | |
| | | import com.doumee.dao.vo.ShopCenterVO; |
| | | import com.doumee.dao.vo.ShopLoginVO; |
| | | import com.doumee.dao.vo.ShopNearbyVO; |
| | | import com.doumee.dao.vo.ShopSalesStatsVO; |
| | | import com.doumee.dao.vo.ShopWebDetailVO; |
| | | import com.doumee.service.business.AreasService; |
| | | import com.doumee.service.business.ShopInfoService; |
| | |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(), Constants.OrderStatus.arrived.getStatus())); |
| | | vo.setWaitReceiveCount(waitReceiveCount.intValue()); |
| | | // æ¯ä»å®æç°è´¦å· |
| | | vo.setAliAccount(shop.getAliAccount()); |
| | | vo.setAliName(shop.getAliName()); |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public ShopSalesStatsVO getShopSalesStats(Integer shopId, Integer period) { |
| | | // è®¡ç®æ¶é´èå´ 0=仿¥ 1=æ¬æ 2=䏿 |
| | | Calendar cal = Calendar.getInstance(); |
| | | Date startTime; |
| | | Date endTime; |
| | | |
| | | if (Constants.equalsInteger(period, 2)) { |
| | | // 䏿ï¼ä¸æ1å·00:00:00 ~ æ¬æ1å·00:00:00 |
| | | cal.set(Calendar.DAY_OF_MONTH, 1); |
| | | cal.set(Calendar.HOUR_OF_DAY, 0); |
| | | cal.set(Calendar.MINUTE, 0); |
| | | cal.set(Calendar.SECOND, 0); |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | endTime = cal.getTime(); |
| | | cal.add(Calendar.MONTH, -1); |
| | | startTime = cal.getTime(); |
| | | } else if (Constants.equalsInteger(period, 1)) { |
| | | // æ¬æï¼æ¬æ1å·00:00:00 ~ 䏿1å·00:00:00 |
| | | cal.set(Calendar.DAY_OF_MONTH, 1); |
| | | cal.set(Calendar.HOUR_OF_DAY, 0); |
| | | cal.set(Calendar.MINUTE, 0); |
| | | cal.set(Calendar.SECOND, 0); |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | startTime = cal.getTime(); |
| | | cal.add(Calendar.MONTH, 1); |
| | | endTime = cal.getTime(); |
| | | } else { |
| | | // 仿¥ï¼ä»å¤©00:00:00 ~ æå¤©00:00:00 |
| | | cal.set(Calendar.HOUR_OF_DAY, 0); |
| | | cal.set(Calendar.MINUTE, 0); |
| | | cal.set(Calendar.SECOND, 0); |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | startTime = cal.getTime(); |
| | | cal.add(Calendar.DAY_OF_MONTH, 1); |
| | | endTime = cal.getTime(); |
| | | } |
| | | |
| | | ShopSalesStatsVO vo = new ShopSalesStatsVO(); |
| | | |
| | | // 1. éå®é¢ + è®¢åæ°ï¼æè®¢åå建æ¶é´ï¼åä»¶é¨åºæåä»¶é¨åºæ¯æ¬é¨åº |
| | | // åä»¶é¨åº |
| | | List<Orders> depositSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .ge(Orders::getCreateTime, startTime) |
| | | .lt(Orders::getCreateTime, endTime) |
| | | .eq(Orders::getDepositShopId, shopId)); |
| | | // åä»¶é¨åº |
| | | List<Orders> takeSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .ge(Orders::getCreateTime, startTime) |
| | | .lt(Orders::getCreateTime, endTime) |
| | | .eq(Orders::getTakeShopId, shopId)); |
| | | long salesAmount = depositSalesOrders.stream().mapToLong(o -> o.getTotalAmount() != null ? o.getTotalAmount() : 0L).sum() |
| | | + takeSalesOrders.stream().mapToLong(o -> o.getTotalAmount() != null ? o.getTotalAmount() : 0L).sum(); |
| | | vo.setSalesAmount(salesAmount); |
| | | vo.setOrderCount(depositSalesOrders.size() + takeSalesOrders.size()); |
| | | |
| | | // 2. ç»ç®å©æ¶¦ï¼æç»ç®æ¶é´ï¼æ ¹æ®é¨åºè§è²ådepositShopFeeætakeShopFee |
| | | // åä»¶é¨åº = æ¬é¨åº ç订åï¼å depositShopFee |
| | | List<Orders> depositSettleOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getSettlementStatus, Constants.ONE) |
| | | .ge(Orders::getSettlementTime, startTime) |
| | | .lt(Orders::getSettlementTime, endTime) |
| | | .eq(Orders::getDepositShopId, shopId)); |
| | | // åä»¶é¨åº = æ¬é¨åº ç订åï¼å takeShopFee |
| | | List<Orders> takeSettleOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getSettlementStatus, Constants.ONE) |
| | | .ge(Orders::getSettlementTime, startTime) |
| | | .lt(Orders::getSettlementTime, endTime) |
| | | .eq(Orders::getTakeShopId, shopId)); |
| | | long depositFee = depositSettleOrders.stream() |
| | | .mapToLong(o -> o.getDepositShopFee() != null ? o.getDepositShopFee() : 0L).sum(); |
| | | long takeFee = takeSettleOrders.stream() |
| | | .mapToLong(o -> o.getTakeShopFee() != null ? o.getTakeShopFee() : 0L).sum(); |
| | | vo.setSettlementProfit(depositFee + takeFee); |
| | | |
| | | // 3. å¨åºè®¢åæ° |
| | | // 3.1 åä»¶é¨åº=æ¬é¨åºï¼status in (2å·²å¯å, 5å¾
åä»¶) |
| | | Long depositStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getDepositShopId, shopId) |
| | | .in(Orders::getStatus, |
| | | Constants.OrderStatus.deposited.getStatus(), |
| | | Constants.OrderStatus.arrived.getStatus())); |
| | | // 3.2 åä»¶é¨åº=æ¬é¨åºï¼status = 5å¾
åä»¶ |
| | | Long takeStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getTakeShopId, shopId) |
| | | .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus())); |
| | | vo.setStorageCount(depositStorageCount.intValue() + takeStorageCount.intValue()); |
| | | |
| | | return vo; |
| | | } |
| | | |
| | |
| | | |
| | | alipay: |
| | | pay: |
| | | appId: 2021006146614417 |
| | | privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC0zIy4Ej8yG34uQ8zECWu12INdTWYuvSudhrf1qtUrPx4FO9vDGc8NdPz63M3y+akWh9o8gsl7qQqOoB7o8gYebLTzF2ZP3ByxgkNRGUwZBIi0iL/28eq/2uDCWnqNBDEeFQpfWeRcErC28LCB6JSI7F6owH78LiU8pNO0pVvqwvcLovlVee4UDtLThBegUxkkHXq4EM9yutkfps1ruDiTGFYyTjS8g9BmNJ7rJoRSKTE85Gl8OYp1SuFbyurPEaFLBW9yGHbsqMqegys2PwV6PxZq3WBbFMiuWI5fane+VL2jyVoV36CYPS2GFjq0stuUHZvPL1uYk+bwAAei7a2JAgMBAAECggEBAJMnTX1gNJl28Qt82YPRWx6F292r6nguNfqftMi6Q4hQdgGyh5rTPcfpKSKRZvrVIz+YURMhLBZ/Ln2Ja78ThdFrjxewOvDS6XO830d5vIs8OnweNYgrvHJtFrR5afeuqr+eRnP3OTuLZtNvMWp6v7J2GFFnY7OjZ2Flkn4cfKSkqnLQnZ/oDKA/a40OclHRmaQZcS5YkGZqeR+NssanUDad89IVz7NU0kXTbaXjbGHyJscLr6hM3otdfrYsboJ5XHLOnnpSLptv3I0HSUeHBSdhAbP5Hlot+xOo6EbeougefmT2FZWaDA+kPHgajCOdZHW3v+13Xp+PioRW0IPcsLUCgYEA+11Fqm+tpP351tdkJyW+weTy0/OnvUuSVQP/0/kvzQ84kjfkxdoyTKe6kT8+K5b5dkCQhGRfWgb7/amKEe1loCQsujf7/6aebUgTevrOs96LErMT1fCqId1t/MWgXVFpzo8n2OTks2r0nleHY7C9VZiPIbGBQDbkJChIFRAiRXsCgYEAuCIg2p4RrlOG/i4/r1xKmOIwba9snTBnAB8/bri913xMy055OVF6P46hC6d/J25QNqYGODBBF4kmiBuco+vtuz6C94Uo3h/oYD3jetmwlAnRWjEl9Z3Pkf5cbE+o5KBZmUa+M7BTrBDutzdRDqX2SANvnoDWVF03teY9lcVNL8sCgYEAoFdeEhtNC/tKfKZG58XnCe4Oi+9YJ6LmRD7Z2RCSUl8MOhFXaHIINeekVfSeptWWab1DsoAIZvgflC6quUbS1bVdpqgBopFZa+JXMtJ8OjaSRipfU9BB5npGJ8C0y/Ib6TxeMbfIvz5RrhOtdIUQMWKwotCE3z5khz/+wxjYk7MCgYBrMesgeo9ehl/7T99hboA7GssIv+yiYhBEoOxjwAc9EK8AWNH3zXg20gjtaPh8cxsdhW/vfCAY3I5jBHgfcfU3YcAK6ymMjtTQWpc46MyEkmafdCdeIx45JvSVVZbEaplewzFtlARSEpV2ciytM276I43yn5ynBpGtQrmtnGxAGwKBgQCy8imu84IhC+BivLRYdsQ+hMsqs0nih4wfVPKWr6K64QO6CZ4riL76lppH8UBG5EXtRd6cjBbORgvQtr22OJxFcj8WuZjBvYvvCOsTE0jGMdiyBqx9k0PsLrtlVZPFP4kj9vDSFNIyAgIOiAmYY4kBtGfhQqRcDgZK+mgHY0zMbg== |
| | | appCertPath: foo/dev/appCertPublicKey_2021006146614417.crt |
| | | alipayPublicCertPath: foo/dev/alipayCertPublicKey_RSA2.crt |
| | | rootCertPath: foo/dev/alipayRootCert.crt |
| | | appId: 2021006147660139 |
| | | privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM= |
| | | appCertPath: pay/pro/appCertPublicKey.crt |
| | | alipayPublicCertPath: pay/pro/alipayCertPublicKey_RSA2.crt |
| | | rootCertPath: pay/pro/alipayRootCert.crt |
| | | |
| | | upload: |
| | | type: ftp |
| | | |
| | | # è
¾è®¯å°å¾apikey |
| | | tencent_key: WE3BZ-HN6WS-ONDOH-62QCV-MNL6F-5NFNE |
| | | tencent_key: |
| | | |
| | | # é«å¾·å°å¾apikey |
| | | geocode_map_key: 9a6c1f0eff2e5aa91989ca9d4c21e262 |
| | |
| | | package com.doumee.api.web; |
| | | |
| | | import com.doumee.core.annotation.LoginRequired; |
| | | import com.doumee.core.annotation.LoginShopRequired; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.model.ApiResponse; |
| | |
| | | } |
| | | |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation(value = "é¨åºéç¥æ¶æ¯å页", notes = "æªè¯»ä¼å
ï¼æ¶é´ååº") |
| | | @PostMapping("/shopNoticePage") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<PageData<Notice>> shopNoticePage(@RequestBody PageWrap<Notice> pageWrap) { |
| | | if (pageWrap.getModel() == null) { |
| | | pageWrap.setModel(new Notice()); |
| | | } |
| | | pageWrap.getModel().setUserId(this.getShopId()); |
| | | pageWrap.getModel().setUserType(Constants.TWO); |
| | | return ApiResponse.success("æ¥è¯¢æå", noticeService.findPage(pageWrap)); |
| | | } |
| | | |
| | | @LoginRequired |
| | | @ApiOperation(value = "é¨åºæ è®°å
¨é¨å·²è¯»", notes = "æ è®°å½åç¨æ·æææªè¯»éç¥ä¸ºå·²è¯»") |
| | | @PostMapping("/shopReadAllNotice") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse shopReadAllNotice() { |
| | | noticeService.readAllNotice(Constants.TWO, this.getShopId()); |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | |
| | | |
| | | @LoginRequired |
| | | @ApiOperation(value = "é¦é¡µè¿è¡ä¸è®¢åæç¤º", notes = "è¿åææ°ä¸æ¡è¿è¡ä¸è®¢åçç¶æåæç¤ºææ¡ï¼æ 订åè¿ånull") |
| | | @GetMapping("/getActiveOrderTip") |
| | |
| | | import com.doumee.config.wx.WxPayV3Service; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.utils.ID; |
| | | import com.doumee.core.utils.aliyun.AliSmsService; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.OrdersRefundMapper; |
| | | import com.doumee.dao.business.OrdersMapper; |
| | | import com.doumee.dao.business.SmsrecordMapper; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.Notice; |
| | | import com.doumee.dao.business.model.Orders; |
| | | import com.doumee.dao.business.model.OrdersRefund; |
| | | import com.doumee.dao.business.model.Smsrecord; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.doumee.service.business.NoticeService; |
| | | import com.doumee.service.business.OrdersService; |
| | | import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; |
| | |
| | | |
| | | @Autowired |
| | | private NoticeService noticeService; |
| | | |
| | | @Autowired |
| | | private SmsrecordMapper smsrecordMapper; |
| | | |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | |
| | | |
| | | // ==================== V2 åè° ==================== |
| | |
| | | .last("limit 1")); |
| | | if (refundRecord != null) { |
| | | Status refundStatus = refundNotification.getRefundStatus(); |
| | | if (Status.SUCCESS.equals(refundStatus)) { |
| | | refundRecord.setStatus(Constants.ONE); // 鿬¾æå |
| | | refundRecord.setRefundTime(new java.util.Date()); |
| | | } else if (Status.CLOSED.equals(refundStatus) || Status.ABNORMAL.equals(refundStatus)) { |
| | | refundRecord.setStatus(Constants.TWO); // 鿬¾å¤±è´¥ |
| | | } |
| | | ordersRefundMapper.updateById(refundRecord); |
| | | log.info("鿬¾è®°å½ç¶æå·²æ´æ°, refundRecordId={}, status={}", refundRecord.getId(), refundRecord.getStatus()); |
| | | |
| | | // 鿬¾æå â éç¥ä¼å |
| | | if (Status.SUCCESS.equals(refundStatus) && refundRecord.getOrderId() != null) { |
| | | Orders refundOrder = ordersMapper.selectById(refundRecord.getOrderId()); |
| | | if (refundOrder != null) { |
| | | Notice notice = new Notice(); |
| | | notice.setUserType(0); |
| | | notice.setUserId(refundOrder.getMemberId()); |
| | | notice.setTitle(Constants.MemberOrderNotify.REFUNDED.getTitle()); |
| | | notice.setContent(Constants.MemberOrderNotify.REFUNDED.format( |
| | | "orderNo", refundOrder.getCode(), |
| | | "amount", String.valueOf(Constants.getFormatMoney(refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L)))); |
| | | notice.setObjId(refundOrder.getId()); |
| | | notice.setObjType(0); |
| | | notice.setStatus(0); |
| | | notice.setIsdeleted(Constants.ZERO); |
| | | notice.setCreateDate(new java.util.Date()); |
| | | noticeService.create(notice); |
| | | // å¹ç夿ï¼å·²æå/已失败çä¸éå¤å¤ç |
| | | if (!Constants.equalsInteger(refundRecord.getStatus(), Constants.ZERO)) { |
| | | log.info("鿬¾è®°å½å·²å¤ç, refundRecordId={}, status={}, è·³è¿", refundRecord.getId(), refundRecord.getStatus()); |
| | | } else { |
| | | if (Status.SUCCESS.equals(refundStatus)) { |
| | | refundRecord.setStatus(Constants.ONE); // 鿬¾æå |
| | | refundRecord.setRefundTime(new java.util.Date()); |
| | | } else if (Status.CLOSED.equals(refundStatus) || Status.ABNORMAL.equals(refundStatus)) { |
| | | refundRecord.setStatus(Constants.TWO); // 鿬¾å¤±è´¥ |
| | | refundRecord.setRemark("å¾®ä¿¡éæ¬¾å¤±è´¥: " + refundStatus.name()); |
| | | } |
| | | // PROCESSING ç¶ææ ååï¼ä¸æ´æ° |
| | | ordersRefundMapper.updateById(refundRecord); |
| | | log.info("鿬¾è®°å½ç¶æå·²æ´æ°, refundRecordId={}, status={}", refundRecord.getId(), refundRecord.getStatus()); |
| | | |
| | | // 鿬¾æå â éç¥ä¼å |
| | | if (Status.SUCCESS.equals(refundStatus) && refundRecord.getOrderId() != null) { |
| | | Orders refundOrder = ordersMapper.selectById(refundRecord.getOrderId()); |
| | | if (refundOrder != null) { |
| | | Notice notice = new Notice(); |
| | | notice.setUserType(0); |
| | | notice.setUserId(refundOrder.getMemberId()); |
| | | notice.setTitle(Constants.MemberOrderNotify.REFUNDED.getTitle()); |
| | | notice.setContent(Constants.MemberOrderNotify.REFUNDED.format( |
| | | "orderNo", refundOrder.getCode(), |
| | | "amount", String.valueOf(Constants.getFormatMoney(refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L)))); |
| | | notice.setObjId(refundOrder.getId()); |
| | | notice.setObjType(0); |
| | | notice.setStatus(0); |
| | | notice.setIsdeleted(Constants.ZERO); |
| | | notice.setCreateDate(new java.util.Date()); |
| | | noticeService.create(notice); |
| | | |
| | | // çä¿¡éç¥ä¼åï¼éæ¬¾å·²å®æ |
| | | Member refundMember = memberMapper.selectById(refundOrder.getMemberId()); |
| | | if (refundMember != null && StringUtils.isNotBlank(refundMember.getTelephone())) { |
| | | String smsContent = Constants.SmsNotify.MEMBER_REFUNDED.format( |
| | | "orderNo", refundOrder.getCode(), |
| | | "money", String.valueOf(Constants.getFormatMoney( |
| | | refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L))); |
| | | try { |
| | | JSONObject templateParam = new JSONObject(); |
| | | templateParam.put("orderNo", refundOrder.getCode()); |
| | | templateParam.put("money", String.valueOf(Constants.getFormatMoney( |
| | | refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L))); |
| | | boolean smsResult = AliSmsService.sendSms(refundMember.getTelephone(), |
| | | Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | if (smsResult) { |
| | | log.info("鿬¾çä¿¡åéæå: phone={}", refundMember.getTelephone()); |
| | | } else { |
| | | log.warn("鿬¾çä¿¡åé失败: phone={}", refundMember.getTelephone()); |
| | | } |
| | | // åå¨çä¿¡è®°å½ |
| | | Smsrecord smsRecord = new Smsrecord(); |
| | | smsRecord.setPhone(refundMember.getTelephone()); |
| | | smsRecord.setContent(smsContent); |
| | | smsRecord.setType(Constants.ONE); |
| | | smsRecord.setStatus(smsResult ? Constants.ONE : Constants.ZERO); |
| | | smsRecord.setCreateTime(new java.util.Date()); |
| | | smsRecord.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(smsRecord); |
| | | } catch (Exception smsEx) { |
| | | log.error("鿬¾çä¿¡åéå¼å¸¸: {}", smsEx.getMessage()); |
| | | try { |
| | | Smsrecord smsRecord = new Smsrecord(); |
| | | smsRecord.setPhone(refundMember.getTelephone()); |
| | | smsRecord.setContent(smsContent); |
| | | smsRecord.setType(Constants.ONE); |
| | | smsRecord.setStatus(Constants.ZERO); |
| | | smsRecord.setCreateTime(new java.util.Date()); |
| | | smsRecord.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(smsRecord); |
| | | } catch (Exception ignored) {} |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | import com.doumee.dao.vo.ShopDetailVO; |
| | | import com.doumee.dao.vo.ShopCenterVO; |
| | | import com.doumee.dao.vo.ShopNearbyVO; |
| | | import com.doumee.dao.vo.ShopSalesStatsVO; |
| | | import com.doumee.dao.vo.ShopWebDetailVO; |
| | | import com.doumee.dao.vo.PayResponse; |
| | | import com.doumee.service.business.OrdersService; |
| | |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation("é¨åºéå®ç»è®¡") |
| | | @GetMapping("/salesStats") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "é¨åºtokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "period", value = "ç»è®¡å¨æï¼0=仿¥, 1=æ¬æ, 2=䏿", required = true) |
| | | }) |
| | | public ApiResponse<ShopSalesStatsVO> salesStats(@RequestParam Integer period) { |
| | | return ApiResponse.success("æ¥è¯¢æå", shopInfoService.getShopSalesStats(getShopId(), period)); |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation("ç»´æ¤é¨åºä¿¡æ¯ï¼æ¯ä»æ¼éåï¼") |
| | | @PostMapping("/maintain") |
| | | public ApiResponse maintain(@RequestBody ShopInfoMaintainDTO dto) { |