Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun
| | |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("确认顾客å°åº") |
| | | @PostMapping("/confirmArrived") |
| | | @RequiresPermissions("business:orders:update") |
| | | public ApiResponse confirmArrived(@RequestBody ConfirmArriveDTO dto) { |
| | | ordersService.confirmCustomerArrived(dto.getOrderId(), dto.getShopId()); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æå¨è§¦å订åç»ç®") |
| | | @PostMapping("/settle") |
| | | @RequiresPermissions("business:orders:update") |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: dev |
| | | active: pro |
| | | # JSONè¿åé
ç½® |
| | | jackson: |
| | | # é»è®¤æ¶åº |
| | |
| | | |
| | | // ç»çº¬åº¦æ°´å°å¤ç |
| | | InputStream uploadStream = is; |
| | | if (latitude != null && longitude != null) { |
| | | if (latitude != null && longitude != null && latitude > 0 && longitude > 0) { |
| | | try { |
| | | JSONObject geoResult = MapUtil.reverseGeocode(latitude, longitude); |
| | | String address = geoResult != null ? geoResult.getString("formatted_addresses") : ""; |
| | |
| | | |
| | | public static final String HEADER_KEY = "token"; |
| | | |
| | | public static final String SHOP_HEADER_KEY = "shopToken"; |
| | | |
| | | |
| | | |
| | | public static final String MEMBER_ID = "MEMBER_ID"; |
| | | |
| | | public static final String SHOP_ID = "SHOP_ID"; |
| | |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.ShopInfo; |
| | | import io.jsonwebtoken.JwtException; |
| | | import lombok.extern.log4j.Log4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Bean; |
| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.Objects; |
| | | import java.util.logging.Logger; |
| | | |
| | | @Configuration |
| | | public class WebMvcConfig implements WebMvcConfigurer { |
| | |
| | | } |
| | | }else if (beanType.isAnnotationPresent(LoginShopRequired.class)) { |
| | | //è·åtoken |
| | | String token = request.getHeader(JwtTokenUtil.HEADER_KEY); // ä» http 请æ±å¤´ä¸ååº token |
| | | String token = request.getHeader(JwtTokenUtil.SHOP_HEADER_KEY); // ä» http 请æ±å¤´ä¸ååº token |
| | | if (StringUtils.isNotBlank(token)) { |
| | | checkShopLogin(request,response); |
| | | checkShopLogin(token,request,response); |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"æªç»å½"); |
| | | throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE.getCode(),"æªç»å½"); |
| | | } |
| | | }else if (handlerMethod.hasMethodAnnotation(LoginShopRequired.class)){ |
| | | //è·åtoken |
| | | String token = request.getHeader(JwtTokenUtil.HEADER_KEY); // ä» http 请æ±å¤´ä¸ååº token |
| | | String token = request.getHeader(JwtTokenUtil.SHOP_HEADER_KEY); // ä» http 请æ±å¤´ä¸ååº token |
| | | if (StringUtils.isNotBlank(token)) { |
| | | checkShopLogin(request,response); |
| | | checkShopLogin(token,request,response); |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"æªç»å½"); |
| | | throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE.getCode(),"æªç»å½"); |
| | | } |
| | | }else if (beanType.isAnnotationPresent(LoginDriverRequired.class)) { |
| | | //è·åtoken |
| | |
| | | |
| | | public Boolean checkMemberLogin(HttpServletRequest request, HttpServletResponse response){ |
| | | String token = request.getHeader(JwtTokenUtil.HEADER_KEY); |
| | | System.out.println("ä¼åtoken:=========>{}"+token); |
| | | try { |
| | | if(!token.startsWith(Constants.ZERO+"")){ |
| | | throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME); |
| | |
| | | } |
| | | |
| | | |
| | | public Boolean checkShopLogin(HttpServletRequest request, HttpServletResponse response){ |
| | | String token = request.getHeader(JwtTokenUtil.HEADER_KEY); |
| | | public Boolean checkShopLogin(String token,HttpServletRequest request, HttpServletResponse response){ |
| | | System.out.println("é¨åºtoken:=========>{}"+token); |
| | | try { |
| | | if(!token.startsWith(Constants.TWO+"")){ |
| | | throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME); |
| | | throw new BusinessException(ResponseStatus.SHOP_TOKEN_EXCEED_TIME); |
| | | } |
| | | String tokenRedis = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token); |
| | | if(StringUtils.isBlank(tokenRedis)){ |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE); |
| | | throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE); |
| | | } |
| | | ShopInfo shop = JSONObject.parseObject(tokenRedis, ShopInfo.class); |
| | | if(Objects.isNull(shop)){ |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE); |
| | | throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE); |
| | | } |
| | | String openid = shop.getOpenid(); |
| | | Integer shopId = getTokenId(token); |
| | |
| | | } |
| | | 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); |
| | | throw new BusinessException(ResponseStatus.SHOP_TOKEN_EXCEED_TIME); |
| | | } |
| | | 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; |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"ç¨æ·ä¿¡æ¯åºé"); |
| | | throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE.getCode(),"ç¨æ·ä¿¡æ¯åºé"); |
| | | } |
| | | } catch (IllegalArgumentException | JwtException e) { |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE); |
| | | throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE); |
| | | } |
| | | } |
| | | |
| | | public Boolean checkDriverLogin(HttpServletRequest request, HttpServletResponse response){ |
| | | String token = request.getHeader(JwtTokenUtil.HEADER_KEY); |
| | | System.out.println("叿ºtoken:=========>{}"+token); |
| | | try { |
| | | if(!token.startsWith(Constants.ONE+"")){ |
| | | throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME); |
| | |
| | | public static final String USER_AGREEMENT ="USER_AGREEMENT" ; |
| | | public static final String PRIVACY_AGREEMENT ="PRIVACY_AGREEMENT" ; |
| | | |
| | | public static final String STORE_RISK_COMMITMENT = "STORE_RISK_COMMITMENT"; |
| | | public static final String STORE_COOPERATION_AGREEMENT = "STORE_COOPERATION_AGREEMENT"; |
| | | public static final String STORE_LUGGAGE_STORAGE_NOTICE = "STORE_LUGGAGE_STORAGE_NOTICE"; |
| | | public static final String STORE_PRIVACY_POLICY = "STORE_PRIVACY_POLICY"; |
| | | public static final String OWNER_LUGGAGE_STORAGE_NOTICE = "OWNER_LUGGAGE_STORAGE_NOTICE"; |
| | | public static final String OWNER_SERVICE_AGREEMENT = "OWNER_SERVICE_AGREEMENT"; |
| | | public static final String OWNER_RISK_COMMITMENT = "OWNER_RISK_COMMITMENT"; |
| | | public static final String ERRAND_RISK_COMMITMENT = "ERRAND_RISK_COMMITMENT"; |
| | | public static final String ERRAND_SERVICE_AGREEMENT = "ERRAND_SERVICE_AGREEMENT"; |
| | | public static final String ERRAND_LUGGAGE_STORAGE_NOTICE = "ERRAND_LUGGAGE_STORAGE_NOTICE"; |
| | | public static final String USER_SERVICE_AGREEMENT = "USER_SERVICE_AGREEMENT"; |
| | | public static final String USER_PRIVACY_POLICY = "USER_PRIVACY_POLICY"; |
| | | public static final String DRIVER_PRIVACY_POLICY = "DRIVER_PRIVACY_POLICY"; |
| | | public static final String PRICE_DESCRIPTION = "PRICE_DESCRIPTION"; |
| | | public static final String PROHIBITED_ITEMS = "PROHIBITED_ITEMS"; |
| | | |
| | | public static final String ACCESS_ID="ACCESS_ID"; |
| | | public static final String BUCKETNAME = "BUCKETNAME"; |
| | | |
| | |
| | | public static final Integer FOUR = 4; |
| | | public static final Integer SIX = 6; |
| | | public static final Integer FIVE = 5; |
| | | public static final Integer SEVEN = 7; |
| | | public static final String INENTITY_FILES = "INENTITY_FILES"; |
| | | public static final String MEMBER_FILES = "MEMBER_FILES"; |
| | | public static final String CATEGORY_FILES = "CATEGORY_FILES"; |
| | |
| | | |
| | | public final static String GOODS_ORDER_CREATE_LOCK = "goods:order:create:lock:"; |
| | | |
| | | // è®¢åæ¥å¿æä½ç±»å |
| | | public static final int ORDER_LOG_DISPATCH = 1; // æ´¾å |
| | | public static final int ORDER_LOG_URGENT_FEE = 2; // å æ¥è´¹ |
| | | public static final int ORDER_LOG_ASSIGN_DRIVER = 3; // ææ´¾å¸æº |
| | | public static final int ORDER_LOG_CANCEL = 4; // åæ¶è®¢å |
| | | public static final int ORDER_LOG_CONFIRM_ARRIVE = 5; // 确认顾客å°åº |
| | | public static final int ORDER_LOG_DRIVER_PICKUP = 6; // 叿ºå®æåä»¶ |
| | | public static final int ORDER_LOG_DRIVER_DELIVER = 7; // 叿ºç¡®è®¤éè¾¾ |
| | | |
| | | public static final String SUCCESS = "SUCCESS"; |
| | | public static final String FAIL = "FAIL"; |
| | |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum OrderLogType { |
| | | urgent(0, "å¹³å°å æ¥", "å¹³å°å æ¥ï¼å¥å±é {param} å
ã"), |
| | | dispatch(1, "å¹³å°ææ´¾", "å¹³å°ææ´¾å¸æº {param} æ¥åã") |
| | | urgent(2, "å¹³å°å æ¥", "å¹³å°å æ¥ï¼å¥å±éã{param}ãå
"), |
| | | assignDriver(3, "å¹³å°ææ´¾", "å¹³å°ææ´¾å¸æºã{param}ãæ¥åï¼å¥å±éã{param1}ãå
"), |
| | | memberCancel(4, "ä¼ååæ¶è®¢å", "{param}"), |
| | | driverCancel(4, "叿ºåæ¶è®¢å", "{param}"), |
| | | systemCancel(4, "ç³»ç»èªå¨åæ¶", "{param}"), |
| | | systemComplete(4, "ç³»ç»èªå¨å®æ", "{param}"), |
| | | memberCancelToConvert(4, "ä¼ååæ¶å¼å°å¯å", "{param}"), |
| | | shopDeposit(8, "é¨åºç¡®è®¤å¯å", "é¨åºã{param}ã确认å¯å"), |
| | | shopTake(9, "é¨åºç¡®è®¤åä»¶", "é¨åºã{param}ã确认åä»¶ï¼è®¢å宿"), |
| | | shopOutStock(10, "é¨åºç¡®è®¤åºåº", "{param}"), |
| | | shopConfirmArriveOverdue(5, "确认顾客å°åºï¼é¾æï¼", "{param}"), |
| | | shopConfirmArrive(5, "确认顾客å°åº", "{param}"), |
| | | driverGrab(6, "叿ºæ¢å", "叿ºã{param}ãæ¢åæå"), |
| | | driverPickup(6, "叿ºå®æåä»¶", "叿ºã{param}ã宿åä»¶ï¼å¼å§æ´¾é"), |
| | | driverDeliver(7, "叿ºç¡®è®¤éè¾¾", "{param}"), |
| | | ; |
| | | private int status; |
| | | private String title; |
| | | private String statusInfo; |
| | | private final int status; |
| | | private final String title; |
| | | private final String statusInfo; |
| | | |
| | | public String format(String... params) { |
| | | String result = statusInfo; |
| | | if (params != null && params.length > 0) { |
| | | result = result.replace("{param}", params[0] != null ? params[0] : ""); |
| | | } |
| | | for (int i = 1; i < params.length; i++) { |
| | | result = result.replace("{param" + i + "}", params[i] != null ? params[i] : ""); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | if(Constants.equalsInteger(type,Constants.ZERO)){ |
| | | return "å¾
åä»¶"; |
| | | }else{ |
| | | return Constants.equalsInteger(type,Constants.ONE)?"å·²å°åº":"å·²éè¾¾"; |
| | | return "å·²éè¾¾"; |
| | | } |
| | | } |
| | | return c.getValue(); |
| | |
| | | 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.cancelled.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}) |
| | | , OrderStatus.accepted.status, OrderStatus.delivering.status, OrderStatus.arrived.status}), |
| | | shopHome(7, "é¨åºé¦é¡µæ¥è¯¢", new int[]{OrderStatus.waitDeposit.status, OrderStatus.deposited.status |
| | | , OrderStatus.delivering.status, OrderStatus.arrived.status}) |
| | | ; |
| | | private final int key; |
| | | private final String desc; |
| | |
| | | MEMBER_ARRIVED("SMS_505875004", "ä¼å端-å·²éè¾¾", "æ¨çè¡æè®¢åï¼{orderNo}å·²éå°{address}ï¼è¯·åæ¶åä»¶ï¼åä»¶ç ï¼{code}ã"), |
| | | MEMBER_DELIVERING("SMS_505935002", "ä¼å端-é
éä¸", "æ¨çè¡æè®¢åï¼{orderNo}å·²ç±å¸æº{name}åä»¶ï¼æ£è¿å¾ç®çå°ã"), |
| | | VERIFY_CODE("SMS_333770877", "éªè¯ç çä¿¡", "æ¨çéªè¯ç 为ï¼{code}ï¼è¯·å¿æ³é²äºä»äººï¼"), |
| | | DRIVER_AUTH_REJECTED("SMS_505790115", "叿ºç«¯-叿ºè®¤è¯è¢«æç»", "å°æ¬ç{driver}ï¼å¾éæ¾ï¼æ¨ç叿ºè®¤è¯æªéè¿å®¡æ ¸ãåå ï¼{reason}ãæ¨å¯ä¿®æ¹èµæåéæ°æäº¤ã"), |
| | | DRIVER_AUTH_APPROVED("SMS_505885083", "叿ºç«¯-叿ºè®¤è¯éè¿", "å°æ¬ç{driver}ï¼æåæ¨å·²éè¿å¹³å°å¸æºè®¤è¯å®¡æ ¸ãæ¨å¯ç»å½å¸æºç«¯APPå¼å§æ¥åï¼é
éè¿ç¨ä¸è¯·æ³¨æå®å
¨ï¼ç¥æ¨æ¥å顺å©ï¼"), |
| | | DRIVER_URGENT_DISPATCH("SMS_505885082", "叿ºç«¯-å æ¥æ´¾å", "æ¨å¥½ï¼æ¨æä¸ä¸ªæ°çè¡æè®¢åï¼ç¼å·ï¼{orderNo}ï¼ãèµ·ç¹ï¼{address1}ï¼ç»ç¹ï¼{address2}ï¼é
éè´¹{money1}å
ï¼å«å æ¥è´¹{money2}å
ï¼ã请尽快确认订åä»»å¡ã"), |
| | | SHOP_AUTH_REJECTED("SMS_505925106", "é¨åºç«¯-èµæå®¡æ ¸è¢«æç»", "å¾éæ¾ï¼æ¨çé¨åº\"{storeName}\"æªéè¿å®¡æ ¸ï¼åå ï¼{reason}ï¼æ¨å¯ä¿®æ¹èµæåéæ°æäº¤ã"), |
| | | SHOP_AUTH_APPROVED_DEPOSIT("SMS_505705111", "é¨åºç«¯-å®¡æ ¸éè¿é缴纳æ¼é", "æåæ¨ï¼æ¨çé¨åº\"{storeName}\"å·²éè¿åæ¥å®¡æ ¸ã请æ¯ä»æ¼é{money}å
以宿å
¥é©»ï¼æ¯ä»åå³å¯ç»å½é¨åºåå°æ£å¼æ¥åã"), |
| | | SHOP_AUTH_SUCCESS("SMS_505810110", "é¨åºç«¯-æåå
¥é©»éç¥", "æåæ¨ï¼æ¨çé¨åº\"{storeName}\"å·²éè¿å¹³å°å®¡æ ¸ï¼æ£å¼å
¥é©»æåãæ¨å¯ç»å½åå®¶åå°å¼å§æ¥åï¼è´¦å·ï¼{phone}ï¼åå§å¯ç ï¼{password}ï¼å»ºè®®é¦æ¬¡ç»å½åä¿®æ¹ï¼ã"), |
| | | ; |
| | | |
| | | private final String templateCode; |
| | |
| | | NOT_ALLOWED(5110, "ä¸å
许çæä½"), |
| | | BE_OVERDUE(5112, "æªç»å½"), |
| | | TOKEN_EXCEED_TIME(5113, "对ä¸èµ·ï¼ç»å½å·²å¤±æï¼"), |
| | | |
| | | SHOP_BE_OVERDUE(51121, "æªç»å½"), |
| | | SHOP_TOKEN_EXCEED_TIME(51131, "对ä¸èµ·ï¼ç»å½å·²å¤±æï¼"), |
| | | ; |
| | | |
| | | private int code; |
| | |
| | | return connectionHttp(url, "POST", data, "application/json"); |
| | | } |
| | | } |
| | | public static String postJson(String url, String data, String authorization) { |
| | | if(url.startsWith("https://")){ |
| | | return connection(url, "POST", data, "application/json", true, authorization); |
| | | }else{ |
| | | return connectionHttp(url, "POST", data, "application/json", authorization); |
| | | } |
| | | } |
| | | public static String uploadTempMedia(String urlString ,String fileUrl){ |
| | | HttpsURLConnection conn= null; |
| | | try { |
| | |
| | | |
| | | } |
| | | public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){ |
| | | return connection(url, method, data, contentType, ignoreSSL, null); |
| | | } |
| | | public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL, String authorization){ |
| | | HttpsURLConnection connection = null; |
| | | try { |
| | | URL _url = new URL(url); |
| | |
| | | connection.setUseCaches(false); |
| | | if(contentType != null){ |
| | | connection.setRequestProperty("Content-Type", contentType); |
| | | } |
| | | if(authorization != null){ |
| | | connection.setRequestProperty("Authorization", authorization); |
| | | } |
| | | |
| | | if(ignoreSSL){ |
| | |
| | | return null; |
| | | } |
| | | public static String connectionHttp(String url,String method,String data,String contentType ){ |
| | | return connectionHttp(url, method, data, contentType, null); |
| | | } |
| | | public static String connectionHttp(String url,String method,String data,String contentType, String authorization ){ |
| | | HttpURLConnection connection = null; |
| | | try { |
| | | URL _url = new URL(url); |
| | |
| | | if(contentType != null){ |
| | | connection.setRequestProperty("Content-Type", contentType); |
| | | } |
| | | if(authorization != null){ |
| | | connection.setRequestProperty("Authorization", authorization); |
| | | } |
| | | |
| | | connection.connect(); |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.utils.jpush; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.doumee.core.utils.HttpsUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.util.Base64; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æå
æ¨éå·¥å
·ç±»ï¼åºäºJPush REST APIï¼ |
| | | * |
| | | * @author rk |
| | | * @date 2026/04/24 |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | public class JPushUtil { |
| | | |
| | | private static final String PUSH_URL = "https://bjapi.push.jiguang.cn/v3/push"; |
| | | |
| | | private static String authHeader; |
| | | private static boolean apnsProduction; |
| | | |
| | | @Value("${jpush.appKey:}") |
| | | private String appKey; |
| | | |
| | | @Value("${jpush.masterSecret:}") |
| | | private String masterSecret; |
| | | |
| | | @Value("${jpush.apnsProduction:false}") |
| | | private boolean apnsProd; |
| | | |
| | | @PostConstruct |
| | | public void init() { |
| | | if (StringUtils.isNotBlank(appKey) && StringUtils.isNotBlank(masterSecret)) { |
| | | authHeader = "Basic " + Base64.getEncoder().encodeToString((appKey + ":" + masterSecret).getBytes()); |
| | | apnsProduction = apnsProd; |
| | | log.info("JPush initialized, appKey={}", appKey); |
| | | } else { |
| | | log.warn("JPush not configured, push disabled"); |
| | | } |
| | | } |
| | | |
| | | // ==================== éç¥æ æ¨é ==================== |
| | | |
| | | /** |
| | | * æå«åæ¨ééç¥ |
| | | * |
| | | * @param alias å«åï¼å¦ä¼åID/叿ºID/é¨åºIDï¼ |
| | | * @param title éç¥æ é¢ |
| | | * @param content éç¥å
容 |
| | | * @param extras éå åæ®µï¼å¯éï¼ |
| | | * @return æ¯å¦æ¨éæå |
| | | */ |
| | | public static boolean sendByAlias(String alias, String title, String content, Map<String, String> extras) { |
| | | return sendByAliases(Collections.singletonList(alias), title, content, extras); |
| | | } |
| | | |
| | | /** |
| | | * æå«åæ¹éæ¨ééç¥ |
| | | */ |
| | | public static boolean sendByAliases(List<String> aliases, String title, String content, Map<String, String> extras) { |
| | | if (!available() || aliases == null || aliases.isEmpty()) { |
| | | return false; |
| | | } |
| | | JSONObject body = buildNotificationBody(aliases, "alias", title, content, extras); |
| | | return doPush(body, "sendByAliases"); |
| | | } |
| | | |
| | | /** |
| | | * æRegistrationIdæ¨ééç¥ |
| | | */ |
| | | public static boolean sendByRegId(String regId, String title, String content, Map<String, String> extras) { |
| | | return sendByRegIds(Collections.singletonList(regId), title, content, extras); |
| | | } |
| | | |
| | | /** |
| | | * æRegistrationIdæ¹éæ¨ééç¥ |
| | | */ |
| | | public static boolean sendByRegIds(List<String> regIds, String title, String content, Map<String, String> extras) { |
| | | if (!available() || regIds == null || regIds.isEmpty()) { |
| | | return false; |
| | | } |
| | | JSONObject body = buildNotificationBody(regIds, "registration_id", title, content, extras); |
| | | return doPush(body, "sendByRegIds"); |
| | | } |
| | | |
| | | /** |
| | | * å¹¿ææ¨ééç¥ï¼æ¨éç»ææç¨æ·ï¼ |
| | | */ |
| | | public static boolean sendToAll(String title, String content, Map<String, String> extras) { |
| | | if (!available()) { |
| | | return false; |
| | | } |
| | | JSONObject body = buildNotificationBody(null, "all", title, content, extras); |
| | | return doPush(body, "sendToAll"); |
| | | } |
| | | |
| | | // ==================== èªå®ä¹æ¶æ¯ï¼é黿¨éï¼ä¸æ¾ç¤ºéç¥æ ï¼ ==================== |
| | | |
| | | /** |
| | | * æå«åæ¨éèªå®ä¹æ¶æ¯ |
| | | */ |
| | | public static boolean sendMessageByAlias(String alias, String content, Map<String, String> extras) { |
| | | return sendMessagesByAlias(Collections.singletonList(alias), content, extras); |
| | | } |
| | | |
| | | /** |
| | | * æå«åæ¹éæ¨éèªå®ä¹æ¶æ¯ |
| | | */ |
| | | public static boolean sendMessagesByAlias(List<String> aliases, String content, Map<String, String> extras) { |
| | | if (!available() || aliases == null || aliases.isEmpty()) { |
| | | return false; |
| | | } |
| | | JSONObject body = buildMessageBody(aliases, "alias", content, extras); |
| | | return doPush(body, "sendMessageByAlias"); |
| | | } |
| | | |
| | | // ==================== å
鍿¹æ³ ==================== |
| | | |
| | | private static boolean available() { |
| | | return StringUtils.isNotBlank(authHeader); |
| | | } |
| | | |
| | | /** |
| | | * æå»ºéç¥æ æ¨é请æ±ä½ |
| | | */ |
| | | private static JSONObject buildNotificationBody(List<String> targets, String audienceType, |
| | | String title, String content, Map<String, String> extras) { |
| | | JSONObject body = new JSONObject(); |
| | | // platform |
| | | body.put("platform", "all"); |
| | | |
| | | // audience |
| | | if ("all".equals(audienceType)) { |
| | | body.put("audience", "all"); |
| | | } else { |
| | | JSONObject audience = new JSONObject(); |
| | | JSONArray arr = new JSONArray(); |
| | | arr.addAll(targets); |
| | | audience.put(audienceType, arr); |
| | | body.put("audience", audience); |
| | | } |
| | | |
| | | // notification |
| | | JSONObject notification = new JSONObject(); |
| | | |
| | | // Android |
| | | JSONObject android = new JSONObject(); |
| | | android.put("title", title); |
| | | android.put("alert", content); |
| | | if (extras != null && !extras.isEmpty()) { |
| | | android.put("extras", mapToJson(extras)); |
| | | } |
| | | notification.put("android", android); |
| | | |
| | | // iOS |
| | | JSONObject ios = new JSONObject(); |
| | | ios.put("alert", content); |
| | | ios.put("sound", "default"); |
| | | if (extras != null && !extras.isEmpty()) { |
| | | ios.put("extras", mapToJson(extras)); |
| | | } |
| | | notification.put("ios", ios); |
| | | |
| | | body.put("notification", notification); |
| | | |
| | | // options |
| | | JSONObject options = new JSONObject(); |
| | | options.put("apns_production", apnsProduction); |
| | | body.put("options", options); |
| | | |
| | | return body; |
| | | } |
| | | |
| | | /** |
| | | * æå»ºèªå®ä¹æ¶æ¯è¯·æ±ä½ï¼ä¸æ¾ç¤ºéç¥æ ï¼ |
| | | */ |
| | | private static JSONObject buildMessageBody(List<String> targets, String audienceType, |
| | | String content, Map<String, String> extras) { |
| | | JSONObject body = new JSONObject(); |
| | | body.put("platform", "all"); |
| | | |
| | | JSONObject audience = new JSONObject(); |
| | | JSONArray arr = new JSONArray(); |
| | | arr.addAll(targets); |
| | | audience.put(audienceType, arr); |
| | | body.put("audience", audience); |
| | | |
| | | // message |
| | | JSONObject message = new JSONObject(); |
| | | message.put("msg_content", content); |
| | | if (extras != null && !extras.isEmpty()) { |
| | | message.put("extras", mapToJson(extras)); |
| | | } |
| | | body.put("message", message); |
| | | |
| | | JSONObject options = new JSONObject(); |
| | | options.put("apns_production", apnsProduction); |
| | | body.put("options", options); |
| | | |
| | | return body; |
| | | } |
| | | |
| | | /** |
| | | * Map<String, String> â JSONObject |
| | | */ |
| | | private static JSONObject mapToJson(Map<String, String> map) { |
| | | JSONObject json = new JSONObject(); |
| | | json.putAll(map); |
| | | return json; |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡æ¨éè¯·æ± |
| | | */ |
| | | private static boolean doPush(JSONObject body, String action) { |
| | | try { |
| | | String response = HttpsUtil.postJson(PUSH_URL, body.toJSONString(), authHeader); |
| | | log.info("JPush {}, response={}", action, response); |
| | | if (StringUtils.isNotBlank(response)) { |
| | | JSONObject resp = JSONObject.parseObject(response); |
| | | return resp.containsKey("msg_id") || (resp.containsKey("statusCode") && resp.getIntValue("statusCode") == 0); |
| | | } |
| | | return false; |
| | | } catch (Exception e) { |
| | | log.error("JPush {} error", action, e); |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | |
| | | @ExcelColumn(name = "ç¶æ", index = 8, width = 8, valueMapping = "0=å¯ç¨ï¼1=ç¦ç¨ï¼") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "审æ¹ç¶æï¼0=å¾
审æ¹ï¼1=审æ¹éè¿ï¼2=审æ¹é©³å", example = "0") |
| | | @ExcelColumn(name = "审æ¹ç¶æ", index = 9, width = 10, valueMapping = "0=å¾
审æ¹ï¼1=审æ¹éè¿ï¼2=审æ¹é©³å") |
| | | @ApiModelProperty(value = "审æ¹ç¶æï¼0=å¾
审æ¹ï¼1=审æ¹éè¿ï¼2=审æ¹é©³åï¼3=å·²æ¯ä»æ¼éï¼99=æªè®¤è¯ï¼", example = "0") |
| | | @ExcelColumn(name = "审æ¹ç¶æ", index = 9, width = 10, valueMapping = "审æ¹ç¶æï¼0=å¾
审æ¹ï¼1=审æ¹éè¿ï¼2=审æ¹é©³åï¼3=å·²æ¯ä»æ¼éï¼99=æªè®¤è¯ï¼") |
| | | private Integer auditStatus; |
| | | |
| | | @ApiModelProperty(value = "OPENID(APP)") |
| | |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date createTimeEnd; |
| | | |
| | | // ---- çå¸åºä¿¡æ¯ï¼éæ°æ®åºåæ®µï¼ ---- |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ç份主é®") |
| | | private Integer provinceId; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ç份åç§°") |
| | | private String provinceName; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "åå¸ä¸»é®") |
| | | private Integer cityId; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "åå¸åç§°") |
| | | private String cityName; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "åºå¿ä¸»é®") |
| | | private Integer districtId; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "åºå¿åç§°") |
| | | private String districtName; |
| | | |
| | | } |
| | |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 订åæä½æ¥å¿ |
| | |
| | | @ApiModelProperty(value = "æä½äººç±»åï¼0=ç¨æ·ï¼1=叿ºï¼2=é¨åºï¼3=ç³»ç»ç®¡çå", example = "0") |
| | | private Integer optUserType; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "æä½ç±»åï¼å¤éæ¥è¯¢ï¼") |
| | | private List<Integer> objTypeList; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "ç©åççº§è´µéæ è¯ï¼å
³èæ¥è¯¢ï¼0=å¦ï¼1=æ¯ï¼") |
| | | private String c2OtherField; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ç©åç级åç§°ï¼å
³èæ¥è¯¢ï¼") |
| | | private String goodLevelName; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "æ¯å¦åå¨ç¹å¤§å°ºå¯¸ï¼0=å¦ 1=æ¯ï¼å
³èæ¥è¯¢ï¼") |
| | | private Integer hasOversized; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "叿ºå§åï¼å
³èæ¥è¯¢ï¼") |
| | | private String driverName; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "叿ºçµè¯ï¼å
³èæ¥è¯¢ï¼") |
| | | private String driverPhone; |
| | | |
| | | } |
| | |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date refundTime; |
| | | |
| | | @ApiModelProperty(value = "é¨åºå¤æ³¨") |
| | | @ApiModelProperty(value = "鿬¾å¤æ³¨") |
| | | private String refundRemark; |
| | | |
| | | @ApiModelProperty(value = "平尿ä½äººï¼type=1使ç¨ï¼", example = "0") |
| | |
| | | @ApiModelProperty(value = "订å主é®", required = true) |
| | | private Integer orderId; |
| | | |
| | | @NotNull(message = "é¨åºä¸»é®ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "å½åæä½é¨åºä¸»é®", required = true) |
| | | private Integer shopId; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 叿ºè®¢åå页æ¥è¯¢è¯·æ± |
| | | * @author rk |
| | | * @date 2026/04/25 |
| | | */ |
| | | @Data |
| | | @ApiModel("叿ºè®¢åå页æ¥è¯¢è¯·æ±") |
| | | public class DriverOrderPageDTO { |
| | | |
| | | @ApiModelProperty(value = "订åç¶æçéï¼null=å
¨é¨ï¼3=å¾
åä»¶ï¼4=é
éä¸ï¼7=已宿") |
| | | private Integer status; |
| | | |
| | | } |
| | |
| | | @Size(min = 1, max = 3, message = "åä»¶å¾ç1-3å¼ ") |
| | | @ApiModelProperty(value = "åä»¶å¾çåè¡¨ï¼æå¤3å¼ ï¼", required = true) |
| | | private List<String> images; |
| | | |
| | | @ApiModelProperty(value = "夿³¨") |
| | | private String remark; |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | package com.doumee.dao.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | |
| | | private String carColor; |
| | | |
| | | @ApiModelProperty(value = "é©¾é©¶è¯æææå¼å§æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date cardStartDate; |
| | | |
| | | @ApiModelProperty(value = "é©¾é©¶è¯æææç»ææ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date cardEndDate; |
| | | |
| | | @NotEmpty(message = "èº«ä»½è¯æ£é¢ç
§ä¸è½ä¸ºç©º") |
| | |
| | | @ApiModelProperty(value = "订åç¶æï¼å¯éï¼ä¸ä¼ æ¥å
¨é¨ï¼", example = "0") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "åå¹¶ç¶æï¼å¯éï¼ä¸ä¼ æ¥å
¨é¨ï¼: 0=å¾
æ¯ä» 1=å¾
æ ¸éª 2=å¾
é
é 3=å¾
æ¶è´§ 4=已宿 5=鿬¾", example = "0") |
| | | @ApiModelProperty(value = "åå¹¶ç¶æï¼å¯éï¼ä¸ä¼ æ¥å
¨é¨ï¼: 0=å¾
æ¯ä» 1=å¾
æ ¸éª 2=å¾
é
é 3=å¾
æ¶è´§ 4=已宿 5=鿬¾ 6ä¼åé¦é¡µ 7é¨åºå¾
å¤ç订å", example = "0") |
| | | private Integer combinedStatus; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "é¨åºå¤´å") |
| | | private String coverImg; |
| | | |
| | | @ApiModelProperty(value = "é¨åºå¤´åï¼å
¨è·¯å¾ï¼") |
| | | private String coverImgUrl; |
| | | |
| | | @ApiModelProperty(value = "é¨åºä»ç»") |
| | | private String content; |
| | | |
| | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.NotNull; |
| | | import javax.validation.constraints.Size; |
| | | import java.util.List; |
| | | |
| | |
| | | @ApiModel("é¨åºæ ¸é请æ±") |
| | | public class ShopVerifyDTO { |
| | | |
| | | @NotBlank(message = "æ ¸éç ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "ä¼åæ ¸éç ", required = true) |
| | | private String verifyCode; |
| | | @NotNull(message = "订å主é®ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "订å主é®", required = true) |
| | | private Integer orderId; |
| | | |
| | | @Size(max = 3, message = "æå¤ä¸ä¼ 3å¼ å¾ç") |
| | | @ApiModelProperty(value = "å¾çå°ååè¡¨ï¼æå¤3å¼ ") |
| | |
| | | @ApiModelProperty(value = "订åç¶æ") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "订åç¶æææ¡") |
| | | private String statusDesc; |
| | | |
| | | @ApiModelProperty(value = "ç¶ææç¤ºææ¡") |
| | | private String tip; |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 叿ºè¿è¡ä¸è®¢åæ°é |
| | | * @author rk |
| | | * @date 2026/04/25 |
| | | */ |
| | | @Data |
| | | @ApiModel("叿ºè¿è¡ä¸è®¢åæ°é") |
| | | public class DriverActiveOrderCountVO { |
| | | |
| | | @ApiModelProperty(value = "å·²æ¢åæ°é", example = "0") |
| | | private Integer grabbedCount; |
| | | |
| | | @ApiModelProperty(value = "æ´¾é䏿°é", example = "0") |
| | | private Integer deliveringCount; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 叿ºä»æ¥åæ¶æ¬¡æ° |
| | | * @author rk |
| | | * @date 2026/04/25 |
| | | */ |
| | | @Data |
| | | @ApiModel("叿ºä»æ¥åæ¶æ¬¡æ°") |
| | | public class DriverCancelLimitVO { |
| | | |
| | | @ApiModelProperty(value = "æ¯æ¥åæ¶ä¸é", example = "3") |
| | | private Integer limit; |
| | | |
| | | @ApiModelProperty(value = "仿¥å·²åæ¶æ¬¡æ°", example = "1") |
| | | private Integer used; |
| | | |
| | | @ApiModelProperty(value = "仿¥å©ä½å¯åæ¶æ¬¡æ°", example = "2") |
| | | private Integer remain; |
| | | } |
| | |
| | | @ApiModelProperty(value = "æå¡è¯å") |
| | | private String score; |
| | | |
| | | @ApiModelProperty(value = "叿ºå®çº§ï¼5=S 4=A 3=B 2=C 1=D") |
| | | private Integer driverLevel; |
| | | |
| | | @ApiModelProperty(value = "å®¡æ ¸ç¶æï¼0=å¾
å®¡æ¹ 1=审æ¹éè¿ 2=审æ¹é©³å") |
| | | private Integer auditStatus; |
| | | |
| | | @ApiModelProperty(value = "å®¡æ ¸å¤æ³¨ï¼é©³ååå ï¼") |
| | | private String auditRemark; |
| | | |
| | | @ApiModelProperty(value = "仿¥é¢è®¡ä½£é(å)") |
| | | private Long todayCommission; |
| | | |
| | |
| | | @ApiModelProperty(value = "å¾
é
éè®¢åæ°é") |
| | | private Integer waitDeliverCount; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦æ¥åä¸ï¼0=å·²ä¸çº¿ï¼1=æ¥åä¸", example = "0") |
| | | private Integer acceptingStatus; |
| | | |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "è·åä»¶é¨åºè·ç¦»ï¼å¦ 500mã1.2kmï¼") |
| | | private String depositDistance; |
| | | |
| | | @ApiModelProperty(value = "åä»¶åç§°ï¼é¨åºåç§°æèªå®ä¹å°ç¹ï¼") |
| | | @ApiModelProperty(value = "åä»¶é¨åºåç§°") |
| | | private String takeName; |
| | | |
| | | @ApiModelProperty(value = "åä»¶å°å") |
| | | private String takeAddress; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºä¸»é®ï¼æåä»¶é¨åºæ¶è¿åï¼") |
| | | private Integer takeShopId; |
| | | |
| | | @ApiModelProperty(value = "åä»¶è·ç¦»ï¼å¦ 500mã1.2kmï¼") |
| | | private String takeDistance; |
| | |
| | | @ApiModelProperty(value = "æ¯å¦è´µéç©å") |
| | | private Boolean isValuable; |
| | | |
| | | @ApiModelProperty(value = "ç©åç级åç§°") |
| | | private String goodLevelName; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦åå¨ç¹å¤§å°ºå¯¸ï¼0=å¦ 1=æ¯") |
| | | private Integer hasOversized; |
| | | |
| | | @ApiModelProperty(value = "叿ºåè´§ç ï¼å¾
åè´§ç¶ææ¶è¿åï¼") |
| | | private String driverVerifyCode; |
| | | |
| | | @Data |
| | | @ApiModel("æ¢å大å
ç©å项") |
| | | public static class OrderItem implements Serializable { |
| | |
| | | |
| | | @ApiModelProperty(value = "æ°é") |
| | | private Integer quantity; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å¤§ä»¶ç©åï¼0=å¦ 1=æ¯") |
| | | private Integer isOversized; |
| | | } |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "åä»¶åç§°ï¼é¨åºåç§°æèªå®ä¹å°ç¹ï¼") |
| | | private String takeName; |
| | | |
| | | @ApiModelProperty(value = "åä»¶å°å") |
| | | private String takeAddress; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºä¸»é®ï¼æåä»¶é¨åºæ¶è¿åï¼") |
| | | private Integer takeShopId; |
| | | |
| | | @ApiModelProperty(value = "åä»¶è·ç¦»ï¼å¦ 500mã1.2kmï¼") |
| | | private String takeDistance; |
| | | |
| | |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦è´µéç©å") |
| | | private Boolean isValuable; |
| | | |
| | | @ApiModelProperty(value = "ç©åç级åç§°") |
| | | private String goodLevelName; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦åå¨ç¹å¤§å°ºå¯¸ï¼0=å¦ 1=æ¯") |
| | | private Integer hasOversized; |
| | | |
| | | @ApiModelProperty(value = "叿ºåè´§ç ï¼å¾
åè´§ç¶ææ¶è¿åï¼") |
| | | private String driverVerifyCode; |
| | | |
| | | @ApiModelProperty(value = "导èªçº¬åº¦ï¼status=2åä»¶é¨åºçº¬åº¦ï¼status=3/4å件纬度ï¼") |
| | | private Double navigateLat; |
| | |
| | | |
| | | @ApiModelProperty(value = "æ°é") |
| | | private Integer quantity; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å¤§ä»¶ç©åï¼0=å¦ 1=æ¯") |
| | | private Integer isOversized; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 叿ºç´¯è®¡ç»è®¡ |
| | | * |
| | | * @author rk |
| | | * @date 2026/04/24 |
| | | */ |
| | | @Data |
| | | @ApiModel("叿ºç´¯è®¡ç»è®¡") |
| | | public class DriverStatsVO { |
| | | |
| | | @ApiModelProperty(value = "累计佣é(å)") |
| | | private Long totalCommission; |
| | | |
| | | @ApiModelProperty(value = "å¾
ç»ç®ä½£é(å)") |
| | | private Long pendingCommission; |
| | | |
| | | @ApiModelProperty(value = "è®¢åæ»æ°") |
| | | private Integer totalOrderCount; |
| | | |
| | | @ApiModelProperty(value = "é±å
ä½é¢(å)") |
| | | private Long balance; |
| | | |
| | | } |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import com.doumee.dao.business.model.OrdersRefund; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | @ApiModelProperty(value = "ä¿ä»·ä¿è´¹ï¼åï¼") |
| | | private Long declaredFee; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å æ¥ï¼0=å¦ï¼1=æ¯") |
| | | private Integer isUrgent; |
| | | |
| | | @ApiModelProperty(value = "å æ¥è´¹ç¨ï¼åï¼") |
| | | private Long urgentAmount; |
| | | |
| | |
| | | private Long actualPayAmount; |
| | | |
| | | // ---- 龿 ---- |
| | | |
| | | //é¾æç¶æ: 0=æªå°åºæªé¾æ 1=æªå°åºåå¨é¾æ 2=å·²å°åºæªåå¨é¾æ 3=å·²å°åºå¾
æ¯ä»é¾æ 4=龿已æ¯ä» |
| | | @ApiModelProperty(value = "é¾æç¶æ: 0=æªå°åºæªé¾æ 1=æªå°åºåå¨é¾æ 2=å·²å°åºæªé¾æ 3=å·²å°åºå¾
æ¯ä»é¾æ 4=龿已æ¯ä»") |
| | | private Integer overdueStatus; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦é¾æ") |
| | | private Boolean overdue; |
| | |
| | | |
| | | // ---- 鿬¾ï¼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 = "鿬¾è®°å½") |
| | | private OrdersRefund refundInfo; |
| | | |
| | | // ---- æ è®° ---- |
| | | |
| | |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | @ApiModelProperty(value = "订å夿³¨") |
| | | private String remark; |
| | | |
| | | @ApiModelProperty(value = "é¢è®¡åä»¶æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date expectedTakeTime; |
| | |
| | | @ApiModelProperty(value = "åä»¶é¨åºå°åï¼æåä»¶é¨åºæ¶è¿åï¼") |
| | | private String takeShopAddress; |
| | | |
| | | @ApiModelProperty(value = "åä»¶é¨åºèç³»çµè¯ï¼æåä»¶é¨åºæ¶è¿åï¼") |
| | | private String takeShopPhone; |
| | | |
| | | @ApiModelProperty(value = "åä»¶å°ç¹ï¼æ åä»¶é¨åºæ¶è¿åï¼ç¨æ·èªéï¼") |
| | | private String takeLocation; |
| | | |
| | |
| | | |
| | | // ---- 龿 ---- |
| | | |
| | | @ApiModelProperty(value = "é¾æç¶æï¼0=æªå°åºæªé¾æï¼1=æªå°åºåå¨é¾æï¼2=å·²å°åºæªé¾æï¼3=å·²å°åºå¾
æ¯ä»é¾æï¼4=龿已æ¯ä»") |
| | | private Integer overdueStatus; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦é¾æ") |
| | | private Boolean overdue; |
| | | |
| | |
| | | @ApiModelProperty(value = "å½åé¨åºè§è²ï¼1=åä»¶é¨åºï¼2=åä»¶é¨åºï¼ä»
é¨åºç«¯è¿åï¼") |
| | | private Integer shopRole; |
| | | |
| | | // ---- 叿ºä¿¡æ¯ ---- |
| | | |
| | | @ApiModelProperty(value = "叿ºå§åï¼å¼å°å¯åæå¸æºæ¶è¿åï¼") |
| | | private String driverName; |
| | | |
| | | @ApiModelProperty(value = "叿ºçµè¯ï¼å¼å°å¯åæå¸æºæ¶è¿åï¼") |
| | | private String driverPhone; |
| | | |
| | | // ---- è¯ä»· ---- |
| | | |
| | | @ApiModelProperty(value = "è¯ä»·ç¶æï¼0=æªè¯ä»·ï¼1=å·²è¯ä»·") |
| | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * å¹³å°ä¿¡æ¯ï¼å
³äºæä»¬ãåè®®çï¼ |
| | | * |
| | |
| | | @ApiModelProperty(value = "å
³äºæä»¬") |
| | | private String aboutUs; |
| | | |
| | | @ApiModelProperty(value = "ç¨æ·åè®®") |
| | | private String userAgreement; |
| | | |
| | | @ApiModelProperty(value = "éç§åè®®") |
| | | private String privacyAgreement; |
| | | |
| | | @ApiModelProperty(value = "è§èé¡»ç¥") |
| | | private String serverIntroduce; |
| | | @ApiModelProperty(value = "å议须ç¥å表ï¼key=æä¸¾ç¼ç ï¼value=坿æ¬å
容") |
| | | private Map<String, String> agreements; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "ç»å®å¼æ·ä¼å头å") |
| | | private String payMemberCoverImage; |
| | | |
| | | @ApiModelProperty(value = "é¨åºå¤´åï¼å
¨è·¯å¾ï¼") |
| | | private String shopAvatar; |
| | | } |
| | |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.dao.dto.DriverActiveOrderDTO; |
| | | import com.doumee.dao.dto.DriverGrabOrderDTO; |
| | | import com.doumee.dao.dto.DriverOrderPageDTO; |
| | | import com.doumee.dao.business.model.DriverInfo; |
| | | import com.doumee.dao.dto.DriverLoginRequest; |
| | | import com.doumee.dao.dto.DriverDeliverDTO; |
| | |
| | | import com.doumee.dao.dto.DriverRegisterRequest; |
| | | import com.doumee.dao.dto.DriverVerifyRequest; |
| | | import com.doumee.dao.vo.AccountResponse; |
| | | import com.doumee.dao.vo.DriverActiveOrderCountVO; |
| | | import com.doumee.dao.vo.DriverGrabOrderVO; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | com.doumee.dao.vo.DriverCenterVO getDriverCenterInfo(Integer memberId); |
| | | |
| | | /** |
| | | * 叿ºç´¯è®¡ç»è®¡ï¼ç´¯è®¡ä½£éãå¾
ç»ç®ä½£éãè®¢åæ»æ°ãé±å
ä½é¢ï¼ |
| | | */ |
| | | com.doumee.dao.vo.DriverStatsVO getDriverStats(Integer memberId); |
| | | |
| | | /** |
| | | * 叿ºæ¢å大å
- å页æ¥è¯¢å¯æ¢è®¢å |
| | | * |
| | | * @param memberId å½åç»å½ä¼åä¸»é® |
| | |
| | | */ |
| | | void confirmDeliver(Integer driverId, DriverDeliverDTO dto); |
| | | |
| | | /** |
| | | * 叿ºä¿®æ¹å¯ç |
| | | * |
| | | * @param driverId 叿ºä¸»é® |
| | | * @param newPassword æ°å¯ç |
| | | * @param token å½åtokenï¼ä¿®æ¹æå忏
é¤ï¼ |
| | | */ |
| | | void changePassword(Integer driverId, String newPassword, String token); |
| | | |
| | | /** |
| | | * è·å叿ºè¿è¡ä¸è®¢åæ°é |
| | | * |
| | | * @param driverId 叿ºä¸»é® |
| | | * @return è¿è¡ä¸è®¢åæ°é |
| | | */ |
| | | DriverActiveOrderCountVO getActiveOrderCount(Integer driverId); |
| | | |
| | | /** |
| | | * 叿ºè®¢åå页æ¥è¯¢ |
| | | * |
| | | * @param driverId 叿ºä¸»é® |
| | | * @param pageWrap å页忰ï¼model.status: null=å
¨é¨, 3=å¾
åä»¶, 4=é
éä¸, 7=å·²å®æï¼ |
| | | * @return åé¡µç»æ |
| | | */ |
| | | PageData<DriverGrabOrderVO> driverOrderPage(Integer driverId, PageWrap<DriverOrderPageDTO> pageWrap); |
| | | |
| | | /** |
| | | * æ¥è¯¢å¸æºä»æ¥å¯åæ¶æ¬¡æ° |
| | | * |
| | | * @param driverId 叿ºä¸»é® |
| | | * @return DriverCancelLimitVO |
| | | */ |
| | | com.doumee.dao.vo.DriverCancelLimitVO getTodayCancelLimit(Integer driverId); |
| | | |
| | | } |
| | |
| | | void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark); |
| | | |
| | | /** |
| | | * é¨åºæ ¸éï¼èªå¨è¯å«ä¼åæ ¸éç /叿ºæ ¸éç ï¼ |
| | | * |
| | | * @param verifyCode æ ¸éç |
| | | * @param shopId é¨åºä¸»é® |
| | | * @param images å¾ç |
| | | * @param remark 夿³¨ |
| | | */ |
| | | void verifyOrder(String verifyCode, Integer shopId, List<String> images, String remark); |
| | | |
| | | /** |
| | | * é¨åºéè¿è®¢å䏻鮿 ¸é |
| | | * |
| | | * @param orderId 订åä¸»é® |
| | | * @param shopId é¨åºä¸»é® |
| | | * @param images å¾ç |
| | | * @param remark 夿³¨ |
| | | */ |
| | | void verifyOrderByShopId(Integer orderId, Integer shopId, List<String> images, String remark); |
| | | |
| | | /** |
| | | * é¨åºç«¯æ¥è¯¢è®¢å详æ
|
| | | * æ¯ææè®¢åä¸»é®ææ ¸éç æ¥è¯¢ï¼å¤ç¨ä¼å端详æ
é»è¾ |
| | | * |
| | |
| | | */ |
| | | ShopSalesStatsVO getShopSalesStats(Integer shopId, Integer period); |
| | | |
| | | /** |
| | | * é¨åºä¿®æ¹å¯ç |
| | | * |
| | | * @param shopId é¨åºä¸»é® |
| | | * @param newPassword æ°å¯ç |
| | | * @param token å½åtokenï¼ä¿®æ¹æå忏
é¤ï¼ |
| | | */ |
| | | void changePassword(Integer shopId, String newPassword, String token); |
| | | |
| | | } |
| | |
| | | import com.doumee.core.utils.PinYinUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.AreasMapper; |
| | | import com.doumee.dao.business.PricingRuleMapper; |
| | | import com.doumee.dao.business.model.Areas; |
| | | import com.doumee.dao.business.model.PricingRule; |
| | | import com.doumee.service.business.AreasService; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import org.apache.commons.lang3.StringUtils; |
| | |
| | | private AreasMapper areasMapper; |
| | | |
| | | @Autowired |
| | | private PricingRuleMapper pricingRuleMapper; |
| | | |
| | | @Autowired |
| | | RestTemplate restTemplate ; |
| | | |
| | | |
| | |
| | | } |
| | | }*/ |
| | | areas.setIsdeleted(Constants.ZERO); |
| | | areas.setCreateDate(new Date()); |
| | | areasMapper.insert(areas); |
| | | areas.setCode(areas.getId().toString()); |
| | | areasMapper.updateById(areas); |
| | |
| | | @Override |
| | | public void deleteById(Integer id) { |
| | | areasMapper.deleteById(id); |
| | | // 忥å é¤è¯¥åå¸å
³èç计价è§åé
ç½® |
| | | PricingRule deleteRule = new PricingRule(); |
| | | deleteRule.setCityId(id); |
| | | QueryWrapper<PricingRule> deleteWrapper = new QueryWrapper<>(deleteRule); |
| | | pricingRuleMapper.delete(deleteWrapper); |
| | | //å·æ°ç¼åæ°æ® |
| | | cacheData(); |
| | | } |
| | |
| | | queryWrapper.orderByAsc(sortData.getProperty()); |
| | | } |
| | | } |
| | | // é»è®¤æåºï¼æåºç ååºã主é®é¡ºåº |
| | | queryWrapper.lambda().orderByDesc(Banner::getSortnum).orderByAsc(Banner::getId); |
| | | PageData<Banner> result = PageData.from(bannerMapper.selectPage(page, queryWrapper)); |
| | | if (result != null && result.getRecords() != null) { |
| | | String path = getBannerPath(); |
| | |
| | | if(Objects.isNull(category) |
| | | || Objects.isNull(category.getType()) |
| | | || Objects.isNull(category.getName()) |
| | | || StringUtils.isBlank(category.getDetail()) |
| | | ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | // type=2ï¼å¯å说æï¼detailä¸å¿
å¡«ï¼å
¶ä»ç±»åå¿
å¡« |
| | | if (!Constants.equalsInteger(category.getType(), Constants.TWO) && StringUtils.isBlank(category.getDetail())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | validateByType(category); |
| | |
| | | || Objects.isNull(category.getId()) |
| | | || Objects.isNull(category.getType()) |
| | | || Objects.isNull(category.getName()) |
| | | || StringUtils.isBlank(category.getDetail()) |
| | | ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | // type=2ï¼å¯å说æï¼detailä¸å¿
å¡«ï¼å
¶ä»ç±»åå¿
å¡« |
| | | if (!Constants.equalsInteger(category.getType(), Constants.TWO) && StringUtils.isBlank(category.getDetail())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | validateByType(category); |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | category.setUpdateTime(new Date()); |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.doumee.biz.system.impl.AreasBizImpl; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | |
| | | import com.doumee.dao.business.ShopInfoMapper; |
| | | import com.doumee.dao.business.OrdersDetailMapper; |
| | | import com.doumee.dao.business.RevenueMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.service.business.AreasService; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.biz.system.OperationConfigBiz; |
| | | import com.doumee.dao.business.OrderLogMapper; |
| | | import com.doumee.dao.business.model.Category; |
| | | import com.doumee.dao.business.model.DriverInfo; |
| | | import com.doumee.dao.business.model.OrderLog; |
| | | import com.doumee.dao.business.model.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.dao.business.model.Orders; |
| | | import com.doumee.dao.business.model.OrdersDetail; |
| | | import com.doumee.dao.business.model.Revenue; |
| | | import com.doumee.dao.dto.*; |
| | | import com.doumee.dao.vo.AccountResponse; |
| | | import com.doumee.dao.vo.DriverActiveOrderCountVO; |
| | | import com.doumee.dao.vo.DriverCancelLimitVO; |
| | | import com.doumee.dao.vo.DriverCenterVO; |
| | | import com.doumee.dao.vo.DriverGrabOrderVO; |
| | | import com.doumee.dao.vo.DriverOrderDetailVO; |
| | | import com.doumee.core.utils.aliyun.AliSmsService; |
| | | import com.doumee.dao.business.model.Notice; |
| | | import com.doumee.service.business.DriverInfoService; |
| | | import com.doumee.service.business.NoticeService; |
| | | import com.alibaba.fastjson.JSONObject; |
| | |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | |
| | | @Autowired |
| | | private NoticeService noticeService; |
| | | |
| | | @Autowired |
| | | private AreasBizImpl areasBiz; |
| | | |
| | | /** |
| | | * åé订åç«å
ä¿¡éç¥ |
| | |
| | | member.setUpdateTime(now); |
| | | member.setTelephone(telephone); |
| | | member.setNickName(telephone.substring(0, 3) + "****" + telephone.substring(7)); |
| | | member.setName(telephone); |
| | | member.setName(member.getNickName()); |
| | | member.setUserType(Constants.ONE); |
| | | member.setBusinessStatus(Constants.ZERO); |
| | | member.setPassword(secure.encryptPassword(defaultPassword, salt)); |
| | |
| | | |
| | | // åå»ºå¸æºåºç¡ä¿¡æ¯ |
| | | DriverInfo driverInfo = new DriverInfo(); |
| | | driverInfo.setId(member.getId()); |
| | | driverInfo.setDeleted(Constants.ZERO); |
| | | driverInfo.setCreateTime(now); |
| | | driverInfo.setUpdateTime(now); |
| | | driverInfo.setTelephone(telephone); |
| | | driverInfo.setName(member.getNickName()); |
| | | driverInfo.setMemberId(member.getId()); |
| | | driverInfo.setStatus(Constants.ZERO); |
| | | driverInfo.setAuditStatus(null); |
| | | driverInfo.setAuditStatus(99); |
| | | driverInfoMapper.insert(driverInfo); |
| | | } |
| | | |
| | |
| | | .set(DriverInfo::getAliAccount, request.getAliAccount()) |
| | | .set(DriverInfo::getAliName, request.getAliName()) |
| | | .set(DriverInfo::getUpdateTime, now) |
| | | .set(DriverInfo::getAuditStatus, Constants.ZERO) |
| | | .set(DriverInfo::getAuditRemark, null) |
| | | .set(DriverInfo::getAuditTime, null) |
| | | .eq(DriverInfo::getId, driverInfo.getId())); |
| | |
| | | @Override |
| | | public DriverInfo getVerifyDetail(Integer memberId) { |
| | | DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (Objects.isNull(driverInfo)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | // æ¼æ¥å¾çåç¼ |
| | | String imgPrefix = ""; |
| | | try { |
| | | imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() |
| | | + systemDictDataBiz.queryByCode(Constants.OSS, Constants.DRIVER_FILES).getCode(); |
| | | } catch (Exception e) { |
| | | // æªé
ç½®æ¶å¿½ç¥ |
| | | } |
| | | driverInfo.setImgPrefix(imgPrefix); |
| | | // æ¥è¯¢è½¦è¾ç±»ååç§°åæ¯å¦éè¦é©¾é©¶è¯ |
| | | if (driverInfo.getCarType() != null) { |
| | | Category category = categoryMapper.selectById(driverInfo.getCarType()); |
| | | if (Objects.nonNull(category)) { |
| | | driverInfo.setCarTypeName(category.getName()); |
| | | driverInfo.setNeedLicense(Constants.equalsInteger(Integer.valueOf(category.getOtherField()), Constants.ONE) ? Constants.ONE : Constants.ZERO); |
| | | } |
| | | } |
| | | // æ¥è¯¢çå¸åºä¿¡æ¯ |
| | | if (driverInfo.getAreaId() != null) { |
| | | Areas district = areasBiz.resolveArea(driverInfo.getAreaId()); |
| | | if (district != null) { |
| | | driverInfo.setDistrictId(district.getId()); |
| | | driverInfo.setDistrictName(district.getName()); |
| | | driverInfo.setCityId(district.getCityId()); |
| | | driverInfo.setCityName(district.getCityName()); |
| | | driverInfo.setProvinceId(district.getProvinceId()); |
| | | driverInfo.setProvinceName(district.getProvinceName()); |
| | | } |
| | | } |
| | | // æ¥è¯¢ç
§çå表 |
| | |
| | | .set(Member::getBusinessStatus, driverStatus) |
| | | .set(Member::getUpdateTime, now) |
| | | .eq(Member::getId, driverInfo.getMemberId())); |
| | | |
| | | // çä¿¡éç¥ |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | // 审æ¹éè¿ |
| | | sendSmsNotify(driverInfo.getTelephone(), |
| | | Constants.SmsNotify.DRIVER_AUTH_APPROVED, |
| | | "driver", driverInfo.getName()); |
| | | } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) { |
| | | // 审æ¹é©³å |
| | | sendSmsNotify(driverInfo.getTelephone(), |
| | | Constants.SmsNotify.DRIVER_AUTH_REJECTED, |
| | | "driver", driverInfo.getName(), |
| | | "reason", auditDTO.getAuditRemark() != null ? auditDTO.getAuditRemark() : ""); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | vo.setImgUrl(driver.getImgurl()); |
| | | vo.setCarCode(driver.getCarCode()); |
| | | vo.setScore(driver.getScore() != null ? driver.getScore().toPlainString() : "0"); |
| | | vo.setDriverLevel(driver.getDriverLevel()); |
| | | vo.setAuditStatus(driver.getAuditStatus()); |
| | | vo.setAuditRemark(driver.getAuditRemark()); |
| | | vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L); |
| | | |
| | | vo.setAcceptingStatus(driver.getAcceptingStatus()); |
| | | // 头åå
¨è·¯å¾ |
| | | if (StringUtils.isNotBlank(driver.getImgurl())) { |
| | | String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() |
| | |
| | | Long todayOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getAcceptDriver, driver.getId()) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .ge(Orders::getFinishTime, todayStart)); |
| | | .ge(Orders::getAcceptTime, todayStart)); |
| | | vo.setTodayOrderCount(todayOrderCount.intValue()); |
| | | |
| | | // å¾
åè´§ï¼å·²æ¥å=3ï¼ |
| | |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getStatus, Constants.OrderStatus.delivering.getStatus())); |
| | | vo.setWaitDeliverCount(waitDeliverCount.intValue()); |
| | | |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public com.doumee.dao.vo.DriverStatsVO getDriverStats(Integer memberId) { |
| | | DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driver == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "叿ºä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | |
| | | com.doumee.dao.vo.DriverStatsVO vo = new com.doumee.dao.vo.DriverStatsVO(); |
| | | |
| | | // 累计佣éï¼type=0(å®æè®¢å) + vaildStatus=1(å·²å
¥è´¦) |
| | | QueryWrapper<Revenue> totalWrapper = new QueryWrapper<>(); |
| | | totalWrapper.lambda() |
| | | .eq(Revenue::getMemberId, memberId) |
| | | .eq(Revenue::getMemberType, Constants.ONE) |
| | | .eq(Revenue::getType, Constants.ZERO) |
| | | .eq(Revenue::getVaildStatus, Constants.ONE) |
| | | .eq(Revenue::getDeleted, Constants.ZERO); |
| | | totalWrapper.select("IFNULL(SUM(AMOUNT),0) as amount"); |
| | | Revenue totalResult = revenueMapper.selectOne(totalWrapper); |
| | | vo.setTotalCommission(totalResult != null && totalResult.getAmount() != null ? totalResult.getAmount() : 0L); |
| | | |
| | | // å¾
ç»ç®ä½£éï¼type=0(å®æè®¢å) + vaildStatus=0(å
¥è´¦ä¸) |
| | | QueryWrapper<Revenue> pendingWrapper = new QueryWrapper<>(); |
| | | pendingWrapper.lambda() |
| | | .eq(Revenue::getMemberId, memberId) |
| | | .eq(Revenue::getMemberType, Constants.ONE) |
| | | .eq(Revenue::getType, Constants.ZERO) |
| | | .eq(Revenue::getVaildStatus, Constants.ZERO) |
| | | .eq(Revenue::getDeleted, Constants.ZERO); |
| | | pendingWrapper.select("IFNULL(SUM(AMOUNT),0) as amount"); |
| | | Revenue pendingResult = revenueMapper.selectOne(pendingWrapper); |
| | | vo.setPendingCommission(pendingResult != null && pendingResult.getAmount() != null ? pendingResult.getAmount() : 0L); |
| | | |
| | | // è®¢åæ»æ° |
| | | Long totalOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getAcceptDriver, driver.getId()) |
| | | .eq(Orders::getDeleted, Constants.ZERO)); |
| | | vo.setTotalOrderCount(totalOrderCount.intValue()); |
| | | |
| | | // é±å
ä½é¢ |
| | | vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L); |
| | | |
| | | return vo; |
| | | } |
| | |
| | | goodTypeIds = cats.stream().map(Category::getId).collect(Collectors.toList()); |
| | | } |
| | | |
| | | // 3. Haversine SQLå
¬å¼ï¼å¸æºå°åä»¶é¨åºè·ç¦»(km)ï¼ä½¿ç¨Ordersèªå¸¦åæ |
| | | String depositDist = "(6371 * acos(cos(radians(" + driverLat + ")) * cos(radians(t.DEPOSIT_LGT)) " |
| | | + "* cos(radians(t.DEPOSIT_LAT) - radians(" + driverLng + ")) " |
| | | + "+ sin(radians(" + driverLat + ")) * sin(radians(t.DEPOSIT_LGT))))"; |
| | | // 3. ST_Distance_Sphere计ç®å¸æºå°åä»¶é¨åºè·ç¦»(km)ï¼ä½¿ç¨Ordersèªå¸¦åæ |
| | | String depositDist = "(ST_Distance_Sphere(POINT(" + driverLng + ", " + driverLat + "), POINT(t.DEPOSIT_LGT, t.DEPOSIT_LAT)) / 1000)"; |
| | | |
| | | // 4. æé MPJæ¥è¯¢ |
| | | IPage<Orders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | |
| | | .select("s2.link_phone as takeShopLinkPhone") |
| | | // ç©åççº§è´µéæ è¯ |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("c2.name as goodLevelName") |
| | | // æ¯å¦åå¨ç¹å¤§å°ºå¯¸ |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | // JOIN |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0") |
| | |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s2.link_phone as takeShopLinkPhone") |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("c2.name as goodLevelName") |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0") |
| | | .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0") |
| | | .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3") |
| | | .eq(Orders::getAcceptDriver, driver.getId()) |
| | | .eq(Orders::getType, Constants.ONE) |
| | | .eq(Orders::getStatus, dto.getStatus()) |
| | | .eq(Objects.nonNull(dto.getStatus()),Orders::getStatus, dto.getStatus()) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .orderByAsc(Orders::getAcceptTime); |
| | | |
| | |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s2.link_phone as takeShopLinkPhone") |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0") |
| | | .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0") |
| | |
| | | vo.setDepositShopAddress(base.getDepositShopAddress()); |
| | | vo.setDepositDistance(base.getDepositDistance()); |
| | | vo.setTakeName(base.getTakeName()); |
| | | vo.setTakeAddress(base.getTakeAddress()); |
| | | vo.setTakeShopId(base.getTakeShopId()); |
| | | |
| | | vo.setTakeDistance(base.getTakeDistance()); |
| | | vo.setContactPhone(base.getContactPhone()); |
| | | vo.setDriverFee(base.getDriverFee()); |
| | | vo.setUrgentAmount(base.getUrgentAmount()); |
| | | vo.setIsValuable(base.getIsValuable()); |
| | | vo.setGoodLevelName(base.getGoodLevelName()); |
| | | vo.setHasOversized(base.getHasOversized()); |
| | | vo.setDriverVerifyCode(base.getDriverVerifyCode()); |
| | | |
| | | // ç©åæç»ï¼è½¬æ¢ç±»åï¼ |
| | | List<DriverOrderDetailVO.OrderItem> detailItems = new ArrayList<>(); |
| | |
| | | DriverOrderDetailVO.OrderItem item = new DriverOrderDetailVO.OrderItem(); |
| | | item.setName(src.getName()); |
| | | item.setQuantity(src.getQuantity()); |
| | | item.setIsOversized(src.getIsOversized()); |
| | | detailItems.add(item); |
| | | } |
| | | } |
| | |
| | | Date todayStart = cal.getTime(); |
| | | Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda() |
| | | .eq(OrderLog::getOptUserId, driver.getMemberId()) |
| | | .eq(OrderLog::getObjType, Constants.ORDER_LOG_CANCEL) |
| | | .eq(OrderLog::getObjType, Constants.OrderLogType.driverCancel.getStatus()) |
| | | .eq(OrderLog::getOptUserType, Constants.ONE) |
| | | .ge(OrderLog::getCreateTime, todayStart)); |
| | | if (todayCancelCount != null && todayCancelCount >= limit) { |
| | |
| | | // 5. åå
¥åæ¶æ¥å¿ |
| | | OrderLog log = new OrderLog(); |
| | | log.setOrderId(orderId); |
| | | log.setTitle("叿ºåæ¶è®¢å"); |
| | | log.setLogInfo(StringUtils.isNotBlank(reason) ? reason : "叿ºåæ¶æ¥å"); |
| | | log.setObjType(Constants.ORDER_LOG_CANCEL); |
| | | log.setTitle(Constants.OrderLogType.driverCancel.getTitle()); |
| | | log.setLogInfo(Constants.OrderLogType.driverCancel.format(StringUtils.isNotBlank(reason) ? reason : "叿ºåæ¶æ¥å")); |
| | | log.setObjType(Constants.OrderLogType.driverCancel.getStatus()); |
| | | log.setOptUserId(driver.getMemberId()); |
| | | log.setOptUserType(Constants.ONE); |
| | | log.setOrderStatus(order.getStatus()); |
| | |
| | | |
| | | // 5. ååæ´æ°ï¼å¸¦ status=2 æ¡ä»¶é²æ¢å¹¶åé夿¢å |
| | | Date now = new Date(); |
| | | String driverVerifyCode = generateVerifyCode(); |
| | | int rows = ordersMapper.update(new UpdateWrapper<Orders>().lambda() |
| | | .set(Orders::getAcceptDriver, driverId) |
| | | .set(Orders::getAcceptTime, now) |
| | | .set(Orders::getAcceptType, 0) // 0=æå¨æ¢å |
| | | .set(Orders::getStatus, Constants.OrderStatus.accepted.getStatus()) |
| | | .set(Orders::getDriverVerifyCode, driverVerifyCode) |
| | | .set(Orders::getUpdateTime, now) |
| | | .eq(Orders::getId, orderId) |
| | | .eq(Orders::getStatus, Constants.TWO)); |
| | |
| | | // 6. åå
¥æä½æ¥å¿ |
| | | OrderLog log = new OrderLog(); |
| | | log.setOrderId(orderId); |
| | | log.setTitle("叿ºæ¢å"); |
| | | log.setLogInfo("叿ºã" + driver.getName() + "ãæ¢åæå"); |
| | | log.setObjType(Constants.ORDER_LOG_DRIVER_PICKUP); |
| | | log.setTitle(Constants.OrderLogType.driverGrab.getTitle()); |
| | | log.setLogInfo(Constants.OrderLogType.driverGrab.format(driver.getName())); |
| | | log.setObjType(Constants.OrderLogType.driverGrab.getStatus()); |
| | | log.setOptUserId(driver.getMemberId()); |
| | | log.setOptUserType(Constants.ONE); |
| | | log.setOrderStatus(Constants.OrderStatus.accepted.getStatus()); |
| | |
| | | // 5. åå
¥æä½æ¥å¿ |
| | | OrderLog log = new OrderLog(); |
| | | log.setOrderId(orderId); |
| | | log.setTitle("叿ºå®æåä»¶"); |
| | | log.setLogInfo("叿ºã" + driver.getName() + "ã宿åä»¶ï¼å¼å§æ´¾é"); |
| | | log.setObjType(Constants.ORDER_LOG_DRIVER_PICKUP); |
| | | log.setTitle(Constants.OrderLogType.driverPickup.getTitle()); |
| | | log.setLogInfo(Constants.OrderLogType.driverPickup.format(driver.getName())); |
| | | log.setObjType(Constants.OrderLogType.driverPickup.getStatus()); |
| | | log.setOptUserId(driver.getMemberId()); |
| | | log.setOptUserType(Constants.ONE); |
| | | log.setOrderStatus(Constants.OrderStatus.delivering.getStatus()); |
| | | log.setRemark(dto.getRemark()); |
| | | log.setCreateTime(now); |
| | | log.setDeleted(Constants.ZERO); |
| | | orderLogMapper.insert(log); |
| | |
| | | // 5. åå
¥æä½æ¥å¿ |
| | | OrderLog log = new OrderLog(); |
| | | log.setOrderId(orderId); |
| | | log.setTitle("叿ºç¡®è®¤éè¾¾"); |
| | | log.setLogInfo(StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "叿ºã" + driver.getName() + "ãå·²éè¾¾"); |
| | | log.setObjType(Constants.ORDER_LOG_DRIVER_DELIVER); |
| | | log.setTitle(Constants.OrderLogType.driverDeliver.getTitle()); |
| | | log.setLogInfo(Constants.OrderLogType.driverDeliver.format( |
| | | StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "叿ºã" + driver.getName() + "ãå·²éè¾¾")); |
| | | log.setObjType(Constants.OrderLogType.driverDeliver.getStatus()); |
| | | log.setOptUserId(driver.getMemberId()); |
| | | log.setOptUserType(Constants.ONE); |
| | | log.setOrderStatus(Constants.OrderStatus.arrived.getStatus()); |
| | |
| | | return Math.round(km * 1000) + "m"; |
| | | } |
| | | return String.format("%.1fkm", km); |
| | | } |
| | | |
| | | /** |
| | | * çæ6使°åæ ¸éç ï¼Redis SETNX ä¿è¯å¯ä¸ï¼ |
| | | */ |
| | | private String generateVerifyCode() { |
| | | Random random = new Random(); |
| | | String redisKey = Constants.REDIS_VERIFY_CODE_KEY; |
| | | for (int i = 0; i < 200; i++) { |
| | | String code = String.format("%06d", random.nextInt(1000000)); |
| | | Boolean success = redisTemplate.opsForValue().setIfAbsent(redisKey + code, "1", 24, TimeUnit.HOURS); |
| | | if (success != null && success) { |
| | | return code; |
| | | } |
| | | } |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ¸éç çæå¤±è´¥ï¼è¯·éè¯"); |
| | | } |
| | | |
| | | private double haversine(double lat1, double lng1, double lat2, double lng2) { |
| | |
| | | boolean hasTakeShop = order.getTakeShopId() != null && StringUtils.isNotBlank(order.getTakeShopName()); |
| | | if (hasTakeShop) { |
| | | vo.setTakeName(order.getTakeShopName()); |
| | | vo.setTakeAddress(order.getTakeShopAddress()); |
| | | vo.setTakeShopId(order.getTakeShopId()); |
| | | vo.setContactPhone(order.getTakeShopLinkPhone()); |
| | | } else { |
| | | vo.setTakeName(order.getTakeLocation()); |
| | | vo.setTakeAddress(order.getTakeLocationRemark()); |
| | | vo.setContactPhone(order.getTakePhone()); |
| | | } |
| | | if (driverLat != null && driverLng != null |
| | |
| | | |
| | | // è´µéç©å |
| | | vo.setIsValuable("1".equals(order.getC2OtherField())); |
| | | vo.setGoodLevelName(order.getGoodLevelName()); |
| | | vo.setHasOversized(order.getHasOversized()); |
| | | |
| | | // å¾
åè´§ç¶æ(status=3)è¿å叿ºåè´§ç |
| | | if (Constants.equalsInteger(order.getStatus(), Constants.THREE)||Constants.equalsInteger(order.getStatus(), Constants.FOUR)) { |
| | | vo.setDriverVerifyCode(order.getDriverVerifyCode()); |
| | | } |
| | | |
| | | // ç©åæç» |
| | | List<OrdersDetail> details = detailMap.getOrDefault(order.getId(), Collections.emptyList()); |
| | | // æ¹éæ¥è¯¢æ¶åå°ç luggageId 对åºç categoryï¼å¤ææ¯å¦å¤§ä»¶ |
| | | Set<Integer> luggageIds = details.stream() |
| | | .map(OrdersDetail::getLuggageId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Set<Integer> oversizedIds = new HashSet<>(); |
| | | if (!luggageIds.isEmpty()) { |
| | | categoryMapper.selectList(new QueryWrapper<Category>().lambda() |
| | | .in(Category::getId, luggageIds) |
| | | .eq(Category::getType, Constants.FOUR) |
| | | .eq(Category::getOtherField, "1") |
| | | .eq(Category::getDeleted, Constants.ZERO)) |
| | | .forEach(c -> oversizedIds.add(c.getId())); |
| | | } |
| | | List<DriverGrabOrderVO.OrderItem> items = new ArrayList<>(); |
| | | for (OrdersDetail detail : details) { |
| | | DriverGrabOrderVO.OrderItem item = new DriverGrabOrderVO.OrderItem(); |
| | | item.setName(detail.getLuggageName()); |
| | | item.setQuantity(detail.getNum()); |
| | | item.setIsOversized(oversizedIds.contains(detail.getLuggageId()) ? Constants.ONE : Constants.ZERO); |
| | | items.add(item); |
| | | } |
| | | vo.setItems(items); |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void changePassword(Integer driverId, String newPassword, String token) { |
| | | if (StringUtils.isBlank(newPassword)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å¯ç ä¸è½ä¸ºç©º"); |
| | | } |
| | | // æ ¡éªå¯ç å¿
须忶å
å«åæ¯åæ°å |
| | | boolean hasLetter = newPassword.chars().anyMatch(Character::isLetter); |
| | | boolean hasDigit = newPassword.chars().anyMatch(Character::isDigit); |
| | | if (!hasLetter || !hasDigit) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å¯ç å¿
须忶å
å«åæ¯åæ°å"); |
| | | } |
| | | // æ¥è¯¢å¸æºå¯¹åºçä¼å |
| | | DriverInfo driverInfo = driverInfoMapper.selectById(driverId); |
| | | if (driverInfo == null || driverInfo.getMemberId() == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | Member member = memberMapper.selectById(driverInfo.getMemberId()); |
| | | if (member == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | // å 坿°å¯ç å¹¶æ´æ° |
| | | String salt = RandomStringUtils.randomAlphanumeric(6); |
| | | String encryptPwd = secure.encryptPassword(newPassword, salt); |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getPassword, encryptPwd) |
| | | .set(Member::getSalt, salt) |
| | | .eq(Member::getId, member.getId())); |
| | | // æ¸
é¤tokenï¼å¼ºå¶éæ°ç»å½ |
| | | if (StringUtils.isNotBlank(token)) { |
| | | redisTemplate.delete(token); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public DriverActiveOrderCountVO getActiveOrderCount(Integer driverId) { |
| | | // å·²æ¢å(status=3)æ°é |
| | | Long grabbed = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getAcceptDriver, driverId) |
| | | .eq(Orders::getStatus, Constants.OrderStatus.accepted.getStatus()) |
| | | .eq(Orders::getDeleted, Constants.ZERO)); |
| | | // æ´¾éä¸(status=4)æ°é |
| | | Long delivering = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getAcceptDriver, driverId) |
| | | .eq(Orders::getStatus, Constants.OrderStatus.delivering.getStatus()) |
| | | .eq(Orders::getDeleted, Constants.ZERO)); |
| | | DriverActiveOrderCountVO vo = new DriverActiveOrderCountVO(); |
| | | vo.setGrabbedCount(grabbed != null ? grabbed.intValue() : 0); |
| | | vo.setDeliveringCount(delivering != null ? delivering.intValue() : 0); |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public PageData<DriverGrabOrderVO> driverOrderPage(Integer driverId, PageWrap<DriverOrderPageDTO> pageWrap) { |
| | | DriverInfo driver = driverInfoMapper.selectById(driverId); |
| | | if (driver == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "叿ºä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | |
| | | DriverOrderPageDTO model = pageWrap.getModel(); |
| | | Integer status = model != null ? model.getStatus() : null; |
| | | |
| | | // åæ³ç¶ææ ¡éª |
| | | List<Integer> validStatuses = Arrays.asList( |
| | | Constants.OrderStatus.accepted.getStatus(), |
| | | Constants.OrderStatus.delivering.getStatus(), |
| | | Constants.OrderStatus.finished.getStatus()); |
| | | if (status != null && !validStatuses.contains(status)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ç¶æåªè½ä¸º3(å¾
åä»¶)ã4(é
éä¸)ã7(已宿)"); |
| | | } |
| | | |
| | | IPage<Orders> p = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<>(); |
| | | wrapper.selectAll(Orders.class) |
| | | .select("s1.name", Orders::getDepositShopName) |
| | | .select("s1.address", Orders::getDepositShopAddress) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s2.link_phone as takeShopLinkPhone") |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("c2.name as goodLevelName") |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0") |
| | | .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0") |
| | | .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3") |
| | | .eq(Orders::getAcceptDriver, driverId) |
| | | .in(status == null, Orders::getStatus, validStatuses) |
| | | .eq(status != null, Orders::getStatus, status) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .orderByDesc(Orders::getAcceptTime); |
| | | |
| | | IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper); |
| | | |
| | | List<DriverGrabOrderVO> voList = new ArrayList<>(); |
| | | if (orderPage != null && orderPage.getRecords() != null) { |
| | | // æ¹éæ¥ç©åæç» |
| | | List<Integer> orderIds = orderPage.getRecords().stream().map(Orders::getId).collect(Collectors.toList()); |
| | | Map<Integer, List<OrdersDetail>> detailMap = new HashMap<>(); |
| | | if (!orderIds.isEmpty()) { |
| | | List<OrdersDetail> allDetails = ordersDetailMapper.selectList( |
| | | new QueryWrapper<OrdersDetail>().lambda() |
| | | .in(OrdersDetail::getOrderId, orderIds)); |
| | | for (OrdersDetail d : allDetails) { |
| | | detailMap.computeIfAbsent(d.getOrderId(), k -> new ArrayList<>()).add(d); |
| | | } |
| | | } |
| | | |
| | | Double driverLat = driver.getLatitude(); |
| | | Double driverLng = driver.getLongitude(); |
| | | Date now = new Date(); |
| | | for (Orders order : orderPage.getRecords()) { |
| | | boolean needDepositDist = Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus()); |
| | | voList.add(buildDriverOrderVO(order, driverLat, driverLng, needDepositDist, now, detailMap)); |
| | | } |
| | | } |
| | | |
| | | IPage<DriverGrabOrderVO> vPage = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | PageData<DriverGrabOrderVO> pageData = PageData.from(vPage); |
| | | pageData.setRecords(voList); |
| | | if (orderPage != null) { |
| | | pageData.setTotal(orderPage.getTotal()); |
| | | pageData.setPage(orderPage.getCurrent()); |
| | | pageData.setCapacity(orderPage.getSize()); |
| | | } |
| | | return pageData; |
| | | } |
| | | |
| | | @Override |
| | | public DriverCancelLimitVO getTodayCancelLimit(Integer driverId) { |
| | | DriverInfo driver = driverInfoMapper.selectById(driverId); |
| | | if (driver == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "叿ºä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | |
| | | // æ¯æ¥åæ¶ä¸é |
| | | String limitStr = operationConfigBiz.getConfig().getDriverDailyCancelLimit(); |
| | | int limit = 3; |
| | | if (StringUtils.isNotBlank(limitStr)) { |
| | | try { limit = Integer.parseInt(limitStr); } catch (NumberFormatException ignored) {} |
| | | } |
| | | |
| | | // 仿¥å·²åæ¶æ¬¡æ° |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.set(Calendar.HOUR_OF_DAY, 0); |
| | | cal.set(Calendar.MINUTE, 0); |
| | | cal.set(Calendar.SECOND, 0); |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | Date todayStart = cal.getTime(); |
| | | Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda() |
| | | .eq(OrderLog::getOptUserId, driver.getMemberId()) |
| | | .eq(OrderLog::getObjType, Constants.OrderLogType.driverCancel.getStatus()) |
| | | .eq(OrderLog::getOptUserType, Constants.ONE) |
| | | .ge(OrderLog::getCreateTime, todayStart)); |
| | | int used = todayCancelCount != null ? todayCancelCount.intValue() : 0; |
| | | |
| | | DriverCancelLimitVO vo = new DriverCancelLimitVO(); |
| | | vo.setLimit(limit); |
| | | vo.setUsed(used); |
| | | vo.setRemain(Math.max(limit - used, 0)); |
| | | return vo; |
| | | } |
| | | |
| | | } |
| | |
| | | import javax.annotation.Resource; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.Random; |
| | | import java.util.concurrent.TimeUnit; |
| | |
| | | public PlatformAboutVO getPlatformAboutUs(){ |
| | | PlatformAboutVO vo = new PlatformAboutVO(); |
| | | vo.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode())); |
| | | vo.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode())); |
| | | vo.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode())); |
| | | vo.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode())); |
| | | |
| | | Map<String, String> agreements = new LinkedHashMap<>(); |
| | | String[] agreementKeys = { |
| | | Constants.STORE_RISK_COMMITMENT, |
| | | Constants.STORE_COOPERATION_AGREEMENT, |
| | | Constants.STORE_LUGGAGE_STORAGE_NOTICE, |
| | | Constants.STORE_PRIVACY_POLICY, |
| | | Constants.OWNER_LUGGAGE_STORAGE_NOTICE, |
| | | Constants.OWNER_SERVICE_AGREEMENT, |
| | | Constants.OWNER_RISK_COMMITMENT, |
| | | Constants.ERRAND_RISK_COMMITMENT, |
| | | Constants.ERRAND_SERVICE_AGREEMENT, |
| | | Constants.ERRAND_LUGGAGE_STORAGE_NOTICE, |
| | | Constants.USER_SERVICE_AGREEMENT, |
| | | Constants.USER_PRIVACY_POLICY, |
| | | Constants.DRIVER_PRIVACY_POLICY, |
| | | Constants.PRICE_DESCRIPTION, |
| | | Constants.PROHIBITED_ITEMS |
| | | }; |
| | | for (String key : agreementKeys) { |
| | | try { |
| | | String value = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM, key).getCode()); |
| | | agreements.put(key, value); |
| | | } catch (Exception e) { |
| | | agreements.put(key, null); |
| | | } |
| | | } |
| | | vo.setAgreements(agreements); |
| | | return vo; |
| | | } |
| | | |
| | |
| | | if (pageWrap.getModel().getOptUserId() != null) { |
| | | queryWrapper.lambda().eq(OrderLog::getOptUserId, pageWrap.getModel().getOptUserId()); |
| | | } |
| | | if (pageWrap.getModel().getObjTypeList() != null && !pageWrap.getModel().getObjTypeList().isEmpty()) { |
| | | queryWrapper.lambda().in(OrderLog::getObjType, pageWrap.getModel().getObjTypeList()); |
| | | } |
| | | for (PageWrap.SortData sortData : pageWrap.getSorts()) { |
| | | if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { |
| | | queryWrapper.orderByDesc(sortData.getProperty()); |
| | |
| | | queryWrapper.orderByAsc(sortData.getProperty()); |
| | | } |
| | | } |
| | | // é»è®¤ææ¶é´ååº |
| | | queryWrapper.lambda().orderByDesc(OrderLog::getCreateTime); |
| | | return PageData.from(orderLogMapper.selectPage(page, queryWrapper)); |
| | | } |
| | | |
| | |
| | | queryWrapper.eq(pageWrap.getModel().getTakeShopId() != null, Orders::getTakeShopId, pageWrap.getModel().getTakeShopId()); |
| | | queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword()) |
| | | .or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword())); |
| | | queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus()); |
| | | for (PageWrap.SortData sortData : pageWrap.getSorts()) { |
| | | if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { |
| | | queryWrapper.orderByDesc(sortData.getProperty()); |
| | |
| | | queryWrapper.eq(pageWrap.getModel().getTakeShopId() != null, Orders::getTakeShopId, pageWrap.getModel().getTakeShopId()); |
| | | queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword()) |
| | | .or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword())); |
| | | queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus()); |
| | | |
| | | queryWrapper.select( |
| | | "IFNULL(SUM(t.total_amount), 0) as total_amount_sum", |
| | |
| | | |
| | | String optUserName = getCurrentUserName(); |
| | | |
| | | // å æ¥è´¹æ¥å¿ï¼æ¯æ¬¡åç¬è®°å½æ¬æ¬¡å æ¥è´¹ï¼ |
| | | Constants.OrderLogType urgentLogType = Constants.OrderLogType.urgent; |
| | | // å æ¥è´¹æ¥å¿ |
| | | OrderLog feeLog = new OrderLog(); |
| | | feeLog.setOrderId(order.getId()); |
| | | feeLog.setTitle(urgentLogType.getTitle()); |
| | | feeLog.setLogInfo(urgentLogType.getStatusInfo().replace("{param}", dto.getUrgentFee().toPlainString())); |
| | | feeLog.setObjType(urgentLogType.getStatus()); |
| | | feeLog.setTitle(Constants.OrderLogType.urgent.getTitle()); |
| | | feeLog.setLogInfo(Constants.OrderLogType.urgent.format(dto.getUrgentFee().toPlainString())); |
| | | feeLog.setObjType(Constants.OrderLogType.urgent.getStatus()); |
| | | feeLog.setOrderStatus(order.getStatus()); |
| | | feeLog.setOptUserType(3); |
| | | feeLog.setOptUserName(optUserName); |
| | |
| | | Member driver = memberMapper.selectById(dto.getDriverId()); |
| | | String driverName = driver != null ? driver.getName() : String.valueOf(dto.getDriverId()); |
| | | |
| | | Constants.OrderLogType dispatchLogType = Constants.OrderLogType.dispatch; |
| | | OrderLog driverLog = new OrderLog(); |
| | | driverLog.setOrderId(order.getId()); |
| | | driverLog.setTitle(dispatchLogType.getTitle()); |
| | | driverLog.setLogInfo(dispatchLogType.getStatusInfo().replace("{param}", driverName)); |
| | | driverLog.setObjType(dispatchLogType.getStatus()); |
| | | driverLog.setTitle(Constants.OrderLogType.assignDriver.getTitle()); |
| | | driverLog.setLogInfo(Constants.OrderLogType.assignDriver.format(driverName, dto.getUrgentFee().toPlainString())); |
| | | driverLog.setObjType(Constants.OrderLogType.assignDriver.getStatus()); |
| | | driverLog.setOrderStatus(order.getStatus()); |
| | | driverLog.setOptUserType(3); |
| | | driverLog.setOptUserName(optUserName); |
| | | driverLog.setCreateTime(new Date()); |
| | | driverLog.setDeleted(Constants.ZERO); |
| | | orderLogService.create(driverLog); |
| | | |
| | | // çä¿¡éç¥ææ´¾å¸æºï¼å æ¥æ´¾åï¼ |
| | | DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, dto.getDriverId()) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driverInfo != null) { |
| | | String address1 = order.getDepositShopAddress() != null ? order.getDepositShopAddress() : order.getDepositShopName(); |
| | | String address2 = order.getTakeShopAddress() != null ? order.getTakeShopAddress() : |
| | | (order.getTakeLocation() != null ? order.getTakeLocation() : ""); |
| | | // é
éè´¹ = 叿ºé
éè´¹ + å æ¥è´¹ |
| | | long totalDriverFee = (order.getDriverFee() != null ? order.getDriverFee() : 0L) + urgentFeeFen; |
| | | sendSmsNotify(driverInfo.getTelephone(), |
| | | Constants.SmsNotify.DRIVER_URGENT_DISPATCH, |
| | | "orderNo", order.getCode(), |
| | | "address1", address1, |
| | | "address2", address2, |
| | | "money1", String.valueOf(totalDriverFee / 100.0), |
| | | "money2", String.valueOf(urgentFeeFen / 100.0)); |
| | | } |
| | | } |
| | | |
| | | ordersMapper.update(updateWrapper); |
| | |
| | | .select("s1.link_phone", Orders::getDepositShopLinkPhone) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s2.link_phone", Orders::getTakeShopLinkPhone) |
| | | .select("d.name", Orders::getDriverName) |
| | | .select("d.telephone", Orders::getDriverPhone) |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID") |
| | | .leftJoin("driver_info d on d.id = t.ACCEPT_DRIVER") |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getMemberId, memberId) |
| | | .eq(status != null, Orders::getStatus, status) |
| | |
| | | vo.setTakeShopId(o.getTakeShopId()); |
| | | vo.setTakeShopName(o.getTakeShopName()); |
| | | vo.setTakeShopAddress(o.getTakeShopAddress()); |
| | | vo.setTakeShopPhone(o.getTakeShopLinkPhone()); |
| | | } else { |
| | | vo.setTakeLocation(o.getTakeLocation()); |
| | | vo.setTakeLocationRemark(o.getTakeLocationRemark()); |
| | | } |
| | | |
| | | // 叿ºä¿¡æ¯ |
| | | vo.setDriverName(o.getDriverName()); |
| | | vo.setDriverPhone(o.getDriverPhone()); |
| | | |
| | | // åä»¶è系人 |
| | | vo.setTakeUser(o.getTakeUser()); |
| | |
| | | // ç©åæç» |
| | | vo.setDetailList(buildDetailList(details)); |
| | | |
| | | // é¾æä¿¡æ¯ï¼ä»
å¾
åä»¶ç¶æè®¡ç®ï¼ |
| | | if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) { |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details); |
| | | vo.setOverdue(overdueInfo.getOverdue()); |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | } |
| | | // é¾æç¶æ |
| | | fillOverdueStatus(vo, o, details); |
| | | voList.add(vo); |
| | | } |
| | | } |
| | |
| | | .select("s1.link_phone", Orders::getDepositShopLinkPhone) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s2.link_phone", Orders::getTakeShopLinkPhone) |
| | | .select("d.name", Orders::getDriverName) |
| | | .select("d.telephone", Orders::getDriverPhone) |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID") |
| | | .eq(Orders::getPayStatus, Constants.ONE) |
| | | .and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId)) |
| | | .eq(status != null, Orders::getStatus, status) |
| | | .in(statusList != null, Orders::getStatus, statusList) |
| | | .orderByDesc(Orders::getCreateTime); |
| | | .leftJoin("driver_info d on d.id = t.ACCEPT_DRIVER") |
| | | .eq(Orders::getPayStatus, Constants.ONE); |
| | | |
| | | // é¨åºå¾
å¤ç订åï¼æä¸å¡ç¯èåºåé¨åºè§è² |
| | | if (combinedStatus != null && Constants.equalsInteger(combinedStatus, Constants.SEVEN)) { |
| | | wrapper.and(w -> w |
| | | .and(w1 -> w1.eq(Orders::getDepositShopId, shopId) |
| | | .in(Orders::getStatus, Constants.OrderStatus.waitDeposit.getStatus(), |
| | | Constants.OrderStatus.deposited.getStatus())) |
| | | .or(w2 -> w2.eq(Orders::getTakeShopId, shopId) |
| | | .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(), |
| | | Constants.OrderStatus.arrived.getStatus())) |
| | | ); |
| | | } else { |
| | | wrapper.and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId)); |
| | | } |
| | | |
| | | wrapper.eq(status != null, Orders::getStatus, status) |
| | | .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList) |
| | | .orderByDesc(Orders::getId); |
| | | |
| | | IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper); |
| | | List<MyOrderVO> voList = new ArrayList<>(); |
| | |
| | | Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO) |
| | | ); |
| | | vo.setCreateTime(o.getCreateTime()); |
| | | vo.setRemark(o.getRemark()); |
| | | vo.setExpectedTakeTime(o.getExpectedTakeTime()); |
| | | |
| | | vo.setDepositShopName(o.getDepositShopName()); |
| | |
| | | if (o.getTakeShopId() != null) { |
| | | vo.setTakeShopName(o.getTakeShopName()); |
| | | vo.setTakeShopAddress(o.getTakeShopAddress()); |
| | | vo.setTakeShopPhone(o.getTakeShopLinkPhone()); |
| | | } else { |
| | | vo.setTakeLocation(o.getTakeLocation()); |
| | | vo.setTakeLocationRemark(o.getTakeLocationRemark()); |
| | | } |
| | | |
| | | // 叿ºä¿¡æ¯ |
| | | vo.setDriverName(o.getDriverName()); |
| | | vo.setDriverPhone(o.getDriverPhone()); |
| | | |
| | | vo.setTakeUser(o.getTakeUser()); |
| | | vo.setTakePhone(o.getTakePhone()); |
| | |
| | | |
| | | vo.setDetailList(buildDetailList(details)); |
| | | |
| | | if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) { |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details); |
| | | vo.setOverdue(overdueInfo.getOverdue()); |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | } |
| | | |
| | | // é¾æç¶æ |
| | | fillOverdueStatus(vo, o, details); |
| | | |
| | | // if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) { |
| | | // OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details); |
| | | // vo.setOverdue(overdueInfo.getOverdue()); |
| | | // vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | // vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | // } |
| | | voList.add(vo); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | if (order == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "订åä¸åå¨"); |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "æ ¸éç æ æ"); |
| | | } |
| | | return buildOrderDetailVO(order, false); |
| | | } |
| | |
| | | vo.setDeclaredAmount(order.getDeclaredAmount()); |
| | | vo.setDeclaredFee(order.getDeclaredFee()); |
| | | vo.setUrgentAmount(order.getUrgentAmount()); |
| | | vo.setIsUrgent(order.getIsUrgent()); |
| | | vo.setActualPayAmount(Constants.equalsInteger(order.getPayStatus(), Constants.ONE)?order.getPayAmount():order.getEstimatedAmount()); |
| | | |
| | | // æ è®° |
| | |
| | | .eq(OrdersDetail::getDeleted, Constants.ZERO)); |
| | | vo.setDetailList(buildDetailList(details)); |
| | | |
| | | 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); |
| | | } |
| | | // é¾æç¶æï¼0=æªå°åºæªé¾æ 1=æªå°åºåå¨é¾æ 2=å·²å°åºæªé¾æ 3=å·²å°åºå¾
æ¯ä»é¾æ 4=龿已æ¯ä» |
| | | fillOverdueStatus(vo, order, details); |
| | | |
| | | // 鿬¾ä¿¡æ¯ï¼status=96å
³é/99åæ¶æ¶è¿åï¼ |
| | | if (orderStatus != null && |
| | | (Constants.equalsInteger(orderStatus, Constants.OrderStatus.cancelled.getStatus()))) { |
| | | // 鿬¾ä¿¡æ¯ï¼status=99åæ¶æ¶è¿åï¼ |
| | | if (order.getStatus() != null && |
| | | Constants.equalsInteger(order.getStatus(), 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()); |
| | | } |
| | | vo.setRefundInfo(ordersRefund); |
| | | } |
| | | |
| | | // æ ¸éç |
| | |
| | | order.setStatus(Constants.OrderStatus.cancelled.getStatus()); |
| | | order.setCancelTime(now); |
| | | ordersMapper.updateById(order); |
| | | saveCancelLog(order, "ä¼ååæ¶è®¢åï¼å¾
æ¯ä»ï¼", reason, memberId); |
| | | saveCancelLog(order, Constants.OrderLogType.memberCancel, "ä¼ååæ¶è®¢åï¼å¾
æ¯ä»ï¼", memberId); |
| | | // çä¿¡éç¥ä¼åï¼è®¢å已忶 |
| | | Member cancelMember1 = memberMapper.selectById(memberId); |
| | | sendSmsNotify(cancelMember1 != null ? cancelMember1.getTelephone() : null, |
| | |
| | | order.setRefundAmount(order.getPayAmount()); |
| | | ordersMapper.updateById(order); |
| | | |
| | | saveCancelLog(order, "ä¼ååæ¶è®¢åï¼å¾
å¯åï¼å
¨é¢é款ï¼", reason, memberId); |
| | | saveCancelLog(order, Constants.OrderLogType.memberCancel, "ä¼ååæ¶è®¢åï¼å¾
å¯åï¼å
¨é¢é款ï¼", memberId); |
| | | // éç¥ä¼åï¼å·²åæ¶ |
| | | sendOrderNotice(memberId, Constants.MemberOrderNotify.CANCELLED, orderId, |
| | | "orderNo", order.getCode()); |
| | |
| | | // å·²å¯å/å·²æ¥åï¼ç´æ¥å°è®¢åç±»åæ¹ä¸ºå°±å°å¯å |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.deposited.getStatus()) |
| | | || Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | order.setType(Constants.ZERO); // å°±å°å¯å |
| | | ordersMapper.updateById(order); |
| | | 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()); |
| | | // å
ä¿åå叿ºä¿¡æ¯ï¼ç¨äºåç»éç¥ |
| | | Integer originalDriverId = order.getAcceptDriver(); |
| | | DriverInfo originalDriver = originalDriverId != null ? driverInfoMapper.selectById(originalDriverId) : null; |
| | | |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | // åä»¶ç¹ä¿¡æ¯æ´æ°ä¸ºåä»¶é¨åºï¼ä½¿ç¨ UpdateWrapper ç¡®ä¿ null åæ®µä¹è½çæ |
| | | UpdateWrapper<Orders> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.lambda() |
| | | .eq(Orders::getId, order.getId()) |
| | | .set(Orders::getType, Constants.ZERO) |
| | | .set(Orders::getTakeShopId, order.getDepositShopId()) |
| | | .set(Orders::getTakeShopName, order.getDepositShopName()) |
| | | .set(Orders::getTakeShopAddress, order.getDepositShopAddress()) |
| | | .set(Orders::getTakeShopLinkPhone, order.getDepositShopLinkPhone()) |
| | | .set(Orders::getTakeLocation, order.getDepositLocation()) |
| | | .set(Orders::getTakeLocationRemark, order.getDepositLocationRemark()) |
| | | .set(Orders::getTakeLat, order.getDepositLat()) |
| | | .set(Orders::getTakeLgt, order.getDepositLgt()) |
| | | .set(Orders::getExpectedTakeTime, new Date()); |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | updateWrapper.lambda() |
| | | .set(Orders::getAcceptDriver, null) |
| | | .set(Orders::getAcceptType, null) |
| | | .set(Orders::getAcceptTime, null); |
| | | } |
| | | ordersMapper.update(null, updateWrapper); |
| | | saveCancelLog(order, Constants.OrderLogType.memberCancelToConvert, "ä¼ååæ¶å¼å°å¯å订åï¼è½¬ä¸ºå°±å°å¯å", memberId); |
| | | // éç¥å¸æºï¼è®¢å已忶ï¼å·²æ¥åæ
åµä¸å¸æºé忢æå¡ï¼ |
| | | if (order.getAcceptDriver() != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.REFUNDING, orderId, |
| | | if (originalDriverId != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | sendDriverNotice(originalDriverId, Constants.DriverOrderNotify.REFUNDING, orderId, |
| | | "orderNo", order.getCode()); |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | sendSmsNotify(driver != null ? driver.getTelephone() : null, |
| | | sendSmsNotify(originalDriver != null ? originalDriver.getTelephone() : null, |
| | | Constants.SmsNotify.DRIVER_REFUNDING, "orderNo", order.getCode()); |
| | | } |
| | | return; |
| | |
| | | /** |
| | | * ä¿ååæ¶è®¢åæä½æ¥å¿ |
| | | */ |
| | | private void saveCancelLog(Orders order, String title, String reason, Integer memberId) { |
| | | private void saveCancelLog(Orders order, Constants.OrderLogType logType, String reason, Integer memberId) { |
| | | OrderLog log = new OrderLog(); |
| | | log.setOrderId(order.getId()); |
| | | log.setTitle(title); |
| | | log.setLogInfo(reason); |
| | | log.setObjType(Constants.ORDER_LOG_CANCEL); |
| | | log.setTitle(logType.getTitle()); |
| | | log.setLogInfo(logType.format(reason)); |
| | | log.setObjType(logType.getStatus()); |
| | | log.setOrderStatus(order.getStatus()); |
| | | log.setOptUserId(memberId); |
| | | log.setOptUserType(0); // 0=ç¨æ· |
| | |
| | | /** |
| | | * ä¿åé¨åºæ ¸éæ¥å¿ |
| | | */ |
| | | private void saveShopVerifyLog(Orders order, String title, String logInfo, String remark, Integer shopId) { |
| | | private void saveShopVerifyLog(Orders order, Constants.OrderLogType logType, String logInfo, String remark, Integer shopId) { |
| | | OrderLog log = new OrderLog(); |
| | | log.setOrderId(order.getId()); |
| | | log.setTitle(title); |
| | | log.setLogInfo(logInfo); |
| | | log.setTitle(logType.getTitle()); |
| | | log.setLogInfo(logInfo != null ? logInfo : logType.getStatusInfo()); |
| | | log.setRemark(remark); |
| | | log.setObjType(logType.getStatus()); |
| | | log.setOrderStatus(order.getStatus()); |
| | | log.setOptUserId(shopId); |
| | | log.setOptUserType(2); // 2=é¨åº |
| | |
| | | shopInfo.setUpdateTime(now); |
| | | shopInfoMapper.updateById(shopInfo); |
| | | |
| | | // çä¿¡éç¥é¨åºï¼æåå
¥é©» |
| | | String rawPassword = shopInfo.getTelephone() != null && shopInfo.getTelephone().length() >= 6 |
| | | ? shopInfo.getTelephone().substring(shopInfo.getTelephone().length() - 6) + "@123456" : ""; |
| | | sendSmsNotify(shopInfo.getTelephone(), |
| | | Constants.SmsNotify.SHOP_AUTH_SUCCESS, |
| | | "storeName", shopInfo.getName(), |
| | | "phone", shopInfo.getTelephone() != null ? shopInfo.getTelephone() : "", |
| | | "password", rawPassword); |
| | | |
| | | // 6. æ¼éæ¯ä»å®æåï¼è¥å叿ªå¼éåèªå¨å¼é |
| | | if (shopInfo.getAreaId() != null) { |
| | | Areas shopArea = areasBiz.resolveArea(shopInfo.getAreaId()); |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void verifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) { |
| | | if (StringUtils.isBlank(verifyCode)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ¸éç ä¸è½ä¸ºç©º"); |
| | | } |
| | | // å
æ¥ä¼åæ ¸éç |
| | | Orders query = new Orders(); |
| | | query.setMemberVerifyCode(verifyCode); |
| | | query.setDeleted(Constants.ZERO); |
| | | Orders byMemberCode = findOne(query); |
| | | if (byMemberCode != null) { |
| | | shopVerifyOrder(verifyCode, shopId, images, remark); |
| | | } else { |
| | | driverVerifyOrder(verifyCode, images, remark, shopId); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void verifyOrderByShopId(Integer orderId, Integer shopId, List<String> images, String remark) { |
| | | if (orderId == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "订å主é®ä¸è½ä¸ºç©º"); |
| | | } |
| | | // æ ¹æ®è®¢å䏻鮿¥æ¾è®¢å |
| | | Orders order = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getId, orderId) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (order == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "订åä¸åå¨"); |
| | | } |
| | | |
| | | // æ¥è¯¢é¨åºåç§°ç¨äºæ¥å¿ |
| | | String shopName = ""; |
| | | ShopInfo shopInfo = shopInfoMapper.selectById(shopId); |
| | | if (shopInfo != null) { |
| | | shopName = shopInfo.getName() != null ? shopInfo.getName() : ""; |
| | | } |
| | | |
| | | Integer status = order.getStatus(); |
| | | Date now = new Date(); |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.waitDeposit.getStatus())) { |
| | | // å¾
å¯å(1) â å·²å¯å(2)ï¼ä¸¤ç§ç±»åéç¨ |
| | | // æ ¡éªå½åé¨åºæ¯å¦ä¸ºè®¢åçåä»¶é¨åº |
| | | if (!shopId.equals(order.getDepositShopId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订åä¸å±äºå½åé¨åºï¼æ æ³æ ¸é"); |
| | | } |
| | | order.setStatus(Constants.equalsInteger(order.getType(),Constants.ZERO)?Constants.OrderStatus.arrived.getStatus():Constants.OrderStatus.deposited.getStatus()); |
| | | order.setDepositTime(now); |
| | | // éæ¾å½åæ ¸éç ï¼çææ°çæ ¸éç ä¾åä»¶æ¶ä½¿ç¨ |
| | | String verifyCode = order.getMemberVerifyCode(); |
| | | if (StringUtils.isNotBlank(verifyCode)) { |
| | | releaseVerifyCode(verifyCode); |
| | | } |
| | | order.setMemberVerifyCode(generateVerifyCode()); |
| | | ordersMapper.updateById(order); |
| | | // ä¿åå¯åå¾çï¼obj_type=2 订åå¯åå¾çï¼æå¤3å¼ ï¼ |
| | | saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId); |
| | | // è®°å½è®¢åæ¥å¿ |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopDeposit, Constants.OrderLogType.shopDeposit.format(shopName), remark, shopId); |
| | | // éç¥ä¼åï¼é¨åºæ ¸éæå |
| | | if (Constants.equalsInteger(order.getType(), Constants.ONE)) { |
| | | // å¼å°å¯å â å¾
æ¢å |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_GRAB, order.getId(), |
| | | "orderNo", order.getCode()); |
| | | } else { |
| | | // å°±å°å¯å â å¾
åä»¶æé |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_REMIND, order.getId(), |
| | | "orderNo", order.getCode(), "shopName", shopName); |
| | | } |
| | | } else if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) { |
| | | // å¼å°å¯å + æ åä»¶é¨åº â æ æ³æ ¸éï¼å®¢æ·èªåï¼æ é¨åºæä½ï¼ |
| | | if (Constants.equalsInteger(order.getType(), Constants.ONE) && order.getTakeShopId() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "è¯¥è®¢åæ åä»¶é¨åºï¼æ æ³æ ¸é"); |
| | | } |
| | | // æ ¡éªåä»¶é¨åºä¸å½åç»å½é¨åºä¸è´ |
| | | if (!shopId.equals(order.getTakeShopId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订åä¸å±äºå½åé¨åºï¼æ æ³æ ¸é"); |
| | | } |
| | | // æ ¡éªæ¯å¦å·²ç¡®è®¤é¡¾å®¢å°åº |
| | | if (order.getConfirmArriveTime() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "请å
确认顾客å°åº"); |
| | | } |
| | | // æ ¡éªæ¯å¦åå¨å¾
å¤ççé¾æè´¹ç¨ |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "åå¨é¾æè´¹ç¨å¾
å¤çï¼è¯·å
å®æé¾æè´¹ç¨æ¯ä»"); |
| | | } |
| | | // å¾
åä»¶(5) â 已宿(7) |
| | | order.setStatus(Constants.OrderStatus.finished.getStatus()); |
| | | order.setConfirmArriveTime(now); |
| | | ordersMapper.updateById(order); |
| | | // 订å宿ï¼éæ¾æ ¸éç |
| | | String verifyCode = order.getMemberVerifyCode(); |
| | | if (StringUtils.isNotBlank(verifyCode)) { |
| | | releaseVerifyCode(verifyCode); |
| | | } |
| | | // ä¿ååºåºå¾çï¼obj_type=13 é¨åºåºåºå¾çï¼æå¤3å¼ ï¼ |
| | | saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId); |
| | | // çææ¶çè®°å½ |
| | | calculateAndSaveOrderFees(order.getId()); |
| | | generateRevenueRecords(order.getId()); |
| | | // è®°å½è®¢åæ¥å¿ |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopTake, Constants.OrderLogType.shopTake.format(shopName), remark, shopId); |
| | | // éç¥ä¼åï¼è®¢å已宿 |
| | | 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"); |
| | | } |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å½å订åç¶æä¸å
è®¸æ ¸é"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) { |
| | | if (StringUtils.isBlank(verifyCode)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ¸éç ä¸è½ä¸ºç©º"); |
| | |
| | | // ä¿åå¯åå¾çï¼obj_type=2 订åå¯åå¾çï¼æå¤3å¼ ï¼ |
| | | saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId); |
| | | // è®°å½è®¢åæ¥å¿ |
| | | saveShopVerifyLog(order, "é¨åºç¡®è®¤å¯å", "é¨åºã" + shopName + "ã确认å¯å", remark, shopId); |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopDeposit, Constants.OrderLogType.shopDeposit.format(shopName), remark, shopId); |
| | | // éç¥ä¼åï¼é¨åºæ ¸éæå |
| | | if (Constants.equalsInteger(order.getType(), Constants.ONE)) { |
| | | // å¼å°å¯å â å¾
æ¢å |
| | |
| | | } else { |
| | | // å°±å°å¯å â å¾
åä»¶æé |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_REMIND, order.getId(), |
| | | "orderNo", order.getCode()); |
| | | "orderNo", order.getCode(), "shopName", shopName); |
| | | } |
| | | } else if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) { |
| | | // å¼å°å¯å + æ åä»¶é¨åº â æ æ³æ ¸éï¼å®¢æ·èªåï¼æ é¨åºæä½ï¼ |
| | |
| | | // æ ¡éªåä»¶é¨åºä¸å½åç»å½é¨åºä¸è´ |
| | | if (!shopId.equals(order.getTakeShopId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订åä¸å±äºå½åé¨åºï¼æ æ³æ ¸é"); |
| | | } |
| | | // æ ¡éªæ¯å¦å·²ç¡®è®¤é¡¾å®¢å°åº |
| | | if (order.getConfirmArriveTime() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "请å
确认顾客å°åº"); |
| | | } |
| | | // æ ¡éªæ¯å¦åå¨å¾
å¤ççé¾æè´¹ç¨ |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "åå¨é¾æè´¹ç¨å¾
å¤çï¼è¯·å
å®æé¾æè´¹ç¨æ¯ä»"); |
| | | } |
| | | // å¾
åä»¶(5) â 已宿(7) |
| | | order.setStatus(Constants.OrderStatus.finished.getStatus()); |
| | |
| | | calculateAndSaveOrderFees(order.getId()); |
| | | generateRevenueRecords(order.getId()); |
| | | // è®°å½è®¢åæ¥å¿ |
| | | saveShopVerifyLog(order, "é¨åºç¡®è®¤åä»¶", "é¨åºã" + shopName + "ã确认åä»¶ï¼è®¢å宿", remark, shopId); |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopTake, Constants.OrderLogType.shopTake.format(shopName), remark, shopId); |
| | | // éç¥ä¼åï¼è®¢å已宿 |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(), |
| | | "orderNo", order.getCode()); |
| | |
| | | if (order.getRefundAmount() != null && order.getRefundAmount() > 0) { |
| | | logInfo += "ï¼é款" + Constants.getFormatMoney(order.getRefundAmount()) + "å
"; |
| | | } |
| | | saveShopVerifyLog(order, "é¨åºç¡®è®¤åºåº", logInfo, remark, shopId); |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopOutStock, logInfo, remark, shopId); |
| | | // éç¥ä¼åï¼è®¢å已宿 |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(), |
| | | "orderNo", order.getCode()); |
| | |
| | | ordersMapper.updateById(order); |
| | | |
| | | // è®°å½è®¢åæ¥å¿ |
| | | saveShopVerifyLog(order, "确认顾客å°åºï¼é¾æï¼", |
| | | "é¨åºã" + shopName + "ã确认顾客å°åºï¼é¾æ" + overdueInfo.getOverdueDays() |
| | | + "天ï¼é¾æè´¹ç¨" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "å
", |
| | | String overdueLogInfo = "é¨åºã" + shopName + "ã确认顾客å°åºï¼é¾æ" + overdueInfo.getOverdueDays() |
| | | + "天ï¼é¾æè´¹ç¨" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "å
"; |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopConfirmArriveOverdue, overdueLogInfo, |
| | | null, shopId); |
| | | } else { |
| | | // æªé¾æï¼æ è®°é¾æç¶æä¸º0ï¼è®¢åä¿æå½åç¶æ |
| | |
| | | if (order.getRefundAmount() != null && order.getRefundAmount() > 0) { |
| | | logInfo += "ï¼é鿬¾" + Constants.getFormatMoney(order.getRefundAmount()) + "å
"; |
| | | } |
| | | saveShopVerifyLog(order, "确认顾客å°åº", logInfo, null, shopId); |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopConfirmArrive, logInfo, null, shopId); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | /** |
| | | * å¡«å
é¾æç¶æå° VOï¼MyOrderVOï¼ |
| | | * overdueStatus: 0=æªå°åºæªé¾æ 1=æªå°åºåå¨é¾æ 2=å·²å°åºæªé¾æ 3=å·²å°åºå¾
æ¯ä»é¾æ 4=龿已æ¯ä» |
| | | */ |
| | | private void fillOverdueStatus(MyOrderVO vo, Orders order, List<OrdersDetail> details) { |
| | | Integer[] result = calcOverdueStatus(order, details); |
| | | vo.setOverdueStatus(result[0]); |
| | | vo.setOverdue(result[1] == 1); |
| | | vo.setOverdueDays(result[2]); |
| | | vo.setOverdueFee(result[3].longValue()); |
| | | } |
| | | |
| | | /** |
| | | * å¡«å
é¾æç¶æå° VOï¼MyOrderDetailVOï¼ |
| | | */ |
| | | private void fillOverdueStatus(MyOrderDetailVO vo, Orders order, List<OrdersDetail> details) { |
| | | Integer[] result = calcOverdueStatus(order, details); |
| | | vo.setOverdueStatus(result[0]); |
| | | vo.setOverdue(result[1] == 1); |
| | | vo.setOverdueDays(result[2]); |
| | | vo.setOverdueFee(result[3].longValue()); |
| | | } |
| | | |
| | | /** |
| | | * 计ç®é¾æç¶æ |
| | | * @return [overdueStatus, isOverdue(0/1), overdueDays, overdueFee] |
| | | */ |
| | | private Integer[] calcOverdueStatus(Orders order, List<OrdersDetail> details) { |
| | | // 4=龿已æ¯ä»ï¼è®¢å overdueStatus=2ï¼ |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.TWO)) { |
| | | return new Integer[]{4, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0}; |
| | | } |
| | | // 3=å·²å°åºå¾
æ¯ä»é¾æï¼è®¢å overdueStatus=1ï¼ |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | return new Integer[]{3, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0}; |
| | | } |
| | | // 计ç®å®æ¶é¾æ |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details); |
| | | boolean hasOverdue = overdueInfo.getOverdue() != null && overdueInfo.getOverdue() |
| | | && overdueInfo.getOverdueFee() != null && overdueInfo.getOverdueFee() > 0; |
| | | if (order.getConfirmArriveTime() != null) { |
| | | // å·²å°åº |
| | | int days = hasOverdue ? overdueInfo.getOverdueDays() : 0; |
| | | long fee = hasOverdue ? overdueInfo.getOverdueFee() : 0L; |
| | | return new Integer[]{2, hasOverdue ? 1 : 0, days, (int) fee}; |
| | | } else { |
| | | // æªå°åº |
| | | if (hasOverdue) { |
| | | return new Integer[]{1, 1, overdueInfo.getOverdueDays(), overdueInfo.getOverdueFee().intValue()}; |
| | | } else { |
| | | return new Integer[]{0, 0, 0, 0}; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * é¾æè´¹ç¨å
é¨è®¡ç®ï¼ä¸æ¥åºï¼æ¥å颿¥è¯¢çæ°æ®ï¼ |
| | | * ä¾å页çå·²æ¥è¯¢æç»çä¸å¡åºæ¯å¤ç¨ï¼é¿å
é夿¥è¯¢ |
| | | */ |
| | |
| | | // ç©ååºç¡æ¥è´¹ç¨ = Σ(åä»· à æ°é) |
| | | long dailyBaseFee = 0L; |
| | | for (OrdersDetail d : details) { |
| | | dailyBaseFee += (d.getUnitPrice() != null ? d.getUnitPrice() : 0L) |
| | | * (d.getNum() != null ? d.getNum() : 0); |
| | | dailyBaseFee += (d.getLocallyPrice() != null ? d.getLocallyPrice() : 0L) |
| | | * (d.getNum() != null ? d.getNum() : 1); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | |
| | | |
| | | /** |
| | | * å°±å°å¯å龿天æ°è®¡ç® |
| | | * è¿äºé¢è®¡åä»¶æ¶é´å½å¤©ç12ç¹åæç®ä¸å¤© |
| | | * è¿äºé¢è®¡åä»¶æ¥æçæ¬¡æ¥ï¼åªæ¯è¾å¹´ææ¥ï¼åå¼å§è®¡é¾æå¤©æ° |
| | | */ |
| | | private int calcLocalOverdueDays(Date now, Date expectedTakeTime) { |
| | | if (expectedTakeTime == null || !now.after(expectedTakeTime)) { |
| | | if (expectedTakeTime == null) { |
| | | return 0; |
| | | } |
| | | // åºåæ¶é´ = é¢è®¡åä»¶æ¥æç12:00 |
| | | // åªåå¹´ææ¥ |
| | | Calendar baseCal = Calendar.getInstance(); |
| | | baseCal.setTime(expectedTakeTime); |
| | | baseCal.set(Calendar.HOUR_OF_DAY, 12); |
| | | baseCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseCal.set(Calendar.MINUTE, 0); |
| | | baseCal.set(Calendar.SECOND, 0); |
| | | baseCal.set(Calendar.MILLISECOND, 0); |
| | | Date baseTime = baseCal.getTime(); |
| | | |
| | | if (!now.after(baseTime)) { |
| | | return 0; |
| | | } |
| | | // é¾æå¤©æ° = å½åæ¥æ - åºåæ¥æï¼æå¤©åå·®ï¼ |
| | | Calendar nowCal = Calendar.getInstance(); |
| | | nowCal.setTime(now); |
| | | nowCal.set(Calendar.HOUR_OF_DAY, 0); |
| | |
| | | nowCal.set(Calendar.SECOND, 0); |
| | | nowCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | Calendar baseDateCal = Calendar.getInstance(); |
| | | baseDateCal.setTime(baseTime); |
| | | baseDateCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseDateCal.set(Calendar.MINUTE, 0); |
| | | baseDateCal.set(Calendar.SECOND, 0); |
| | | baseDateCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis(); |
| | | int days = (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | return Math.max(days, 0); |
| | | // åºåæ¥æ = é¢è®¡åä»¶æ¥æçæ¬¡æ¥ï¼å½å¤©åä¹åä¸ç®é¾æ |
| | | if (nowCal.before(baseCal)) { |
| | | return 0; |
| | | } |
| | | // é¾æå¤©æ° = å½åæ¥æ - åºåæ¥æ |
| | | long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis(); |
| | | return (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | } |
| | | |
| | | /** |
| | | * å¼å°å¯å龿天æ°è®¡ç® |
| | | * è¿äºè½¬ç§»å°åºæ¶é´å½å¤©çæä¸12ç¹ï¼24:00ï¼åæç®ç¬¬ä¸å¤© |
| | | * è¿äºè½¬ç§»å°åºæ¥æç次æ¥ï¼åªæ¯è¾å¹´ææ¥ï¼åå¼å§è®¡é¾æå¤©æ° |
| | | */ |
| | | private int calcRemoteOverdueDays(Date now, Date arriveTime) { |
| | | if (arriveTime == null || !now.after(arriveTime)) { |
| | | if (arriveTime == null) { |
| | | return 0; |
| | | } |
| | | // åºåæ¶é´ = 转移å°åºæ¥æçæ¬¡æ¥ 00:00ï¼å³å½å¤©24:00ï¼ |
| | | // åªåå¹´ææ¥ |
| | | Calendar baseCal = Calendar.getInstance(); |
| | | baseCal.setTime(arriveTime); |
| | | baseCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseCal.set(Calendar.MINUTE, 0); |
| | | baseCal.set(Calendar.SECOND, 0); |
| | | baseCal.set(Calendar.MILLISECOND, 0); |
| | | baseCal.add(Calendar.DAY_OF_MONTH, 1); // 次æ¥00:00 = å½å¤©24:00 |
| | | Date baseTime = baseCal.getTime(); |
| | | |
| | | if (!now.after(baseTime)) { |
| | | return 0; |
| | | } |
| | | // é¾æå¤©æ° = å½åæ¥æ - åºåæ¥æ |
| | | Calendar nowCal = Calendar.getInstance(); |
| | | nowCal.setTime(now); |
| | | nowCal.set(Calendar.HOUR_OF_DAY, 0); |
| | |
| | | nowCal.set(Calendar.SECOND, 0); |
| | | nowCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | Calendar baseDateCal = Calendar.getInstance(); |
| | | baseDateCal.setTime(baseTime); |
| | | baseDateCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseDateCal.set(Calendar.MINUTE, 0); |
| | | baseDateCal.set(Calendar.SECOND, 0); |
| | | baseDateCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis(); |
| | | int days = (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | return Math.max(days, 0); |
| | | // åºåæ¥æ = å°åºæ¥æç次æ¥ï¼å½å¤©åä¹åä¸ç®é¾æ |
| | | baseCal.add(Calendar.DAY_OF_MONTH, 1); |
| | | if (nowCal.before(baseCal)) { |
| | | return 0; |
| | | } |
| | | // é¾æå¤©æ° = å½åæ¥æ - åºåæ¥æ |
| | | long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis(); |
| | | return (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | } |
| | | |
| | | @Override |
| | |
| | | ActiveOrderTipVO vo = new ActiveOrderTipVO(); |
| | | vo.setOrderId(order.getId()); |
| | | vo.setStatus(order.getStatus()); |
| | | vo.setStatusDesc(Constants.OrderStatus.getDescByKey(order.getStatus(), order.getType())); |
| | | |
| | | // æå»ºæç¤ºææ¡ |
| | | boolean isLocal = Constants.equalsInteger(order.getType(), Constants.ZERO); |
| | |
| | | // åå
¥æä½æ¥å¿ |
| | | OrderLog orderLog = new OrderLog(); |
| | | orderLog.setOrderId(order.getId()); |
| | | orderLog.setTitle("ç³»ç»èªå¨åæ¶ï¼è¶
æ¶æªæ¯ä»ï¼"); |
| | | orderLog.setLogInfo("订åè¶
æ¶" + autoCancelMinutes + "åéæªæ¯ä»ï¼ç³»ç»èªå¨åæ¶"); |
| | | orderLog.setObjType(Constants.ORDER_LOG_CANCEL); |
| | | orderLog.setTitle(Constants.OrderLogType.systemCancel.getTitle()); |
| | | orderLog.setLogInfo(Constants.OrderLogType.systemCancel.format("订åè¶
æ¶" + autoCancelMinutes + "åéæªæ¯ä»ï¼ç³»ç»èªå¨åæ¶")); |
| | | orderLog.setObjType(Constants.OrderLogType.systemCancel.getStatus()); |
| | | orderLog.setOrderStatus(Constants.OrderStatus.cancelled.getStatus()); |
| | | orderLog.setOptUserType(3); // 3=ç³»ç» |
| | | orderLog.setCreateTime(now); |
| | |
| | | // è®°å½æä½æ¥å¿ |
| | | OrderLog orderLog = new OrderLog(); |
| | | orderLog.setOrderId(order.getId()); |
| | | orderLog.setTitle("ç³»ç»èªå¨å®æ"); |
| | | orderLog.setLogInfo("订åå·²éè¾¾è¶
è¿" + autoConfirmDays + "天æªç¡®è®¤ï¼ç³»ç»èªå¨å®æ"); |
| | | orderLog.setObjType(Constants.ORDER_LOG_CANCEL); |
| | | orderLog.setTitle(Constants.OrderLogType.systemComplete.getTitle()); |
| | | orderLog.setLogInfo(Constants.OrderLogType.systemComplete.format("订åå·²éè¾¾è¶
è¿" + autoConfirmDays + "天æªç¡®è®¤ï¼ç³»ç»èªå¨å®æ")); |
| | | orderLog.setObjType(Constants.OrderLogType.systemComplete.getStatus()); |
| | | orderLog.setOrderStatus(Constants.OrderStatus.finished.getStatus()); |
| | | orderLog.setOptUserType(3); // 3=ç³»ç» |
| | | orderLog.setCreateTime(now); |
| | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.RevenueMapper; |
| | | import com.doumee.dao.business.WithdrawalOrdersMapper; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.ShopInfoMapper; |
| | | import com.doumee.dao.business.model.Revenue; |
| | | import com.doumee.dao.business.model.ShopInfo; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.WithdrawalOrders; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.dao.dto.RevenueQueryDTO; |
| | | import com.doumee.dao.vo.RevenueStatisticsVO; |
| | | import com.doumee.dao.vo.RevenueSummaryVO; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.sql.Driver; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | |
| | | |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | |
| | | @Autowired |
| | | private DriverInfoMapper driverInfoMapper; |
| | | |
| | | @Override |
| | | public Integer create(Revenue revenue) { |
| | |
| | | |
| | | @Override |
| | | public RevenueStatisticsVO getDriverRevenueStatistics(Integer memberId) { |
| | | Member member = memberMapper.selectById(memberId); |
| | | if (member == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "ç¨æ·ä¸åå¨"); |
| | | DriverInfo driverInfo = driverInfoMapper.selectById(memberId); |
| | | if (driverInfo == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "叿ºä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | return buildRevenueStatistics(memberId, Constants.ONE, member.getAmount()); |
| | | return buildRevenueStatistics(memberId, Constants.ONE, driverInfo.getBalance()); |
| | | } |
| | | |
| | | /** |
| | |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.biz.system.AreasBiz; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.core.utils.aliyun.AliSmsService; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.MultifileMapper; |
| | | import com.doumee.dao.business.OrdersMapper; |
| | |
| | | import com.doumee.dao.vo.ShopWebDetailVO; |
| | | import com.doumee.service.business.AreasService; |
| | | import com.doumee.service.business.ShopInfoService; |
| | | import com.doumee.dao.business.SmsrecordMapper; |
| | | import com.doumee.dao.business.model.Smsrecord; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.commons.lang3.RandomStringUtils; |
| | |
| | | * @author rk |
| | | * @date 2026/04/08 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class ShopInfoServiceImpl implements ShopInfoService { |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private AreasService areasService; |
| | | |
| | | @Autowired |
| | | private SmsrecordMapper smsrecordMapper; |
| | | @Override |
| | | public Integer create(ShopInfo shopInfo) { |
| | | shopInfoMapper.insert(shopInfo); |
| | |
| | | } |
| | | if (pageWrap.getModel().getAreaId() != null) { |
| | | queryWrapper.lambda().eq(ShopInfo::getAreaId, pageWrap.getModel().getAreaId()); |
| | | } |
| | | if (pageWrap.getModel().getAddress() != null) { |
| | | queryWrapper.lambda().like(ShopInfo::getAddress, pageWrap.getModel().getAddress()); |
| | | } |
| | | if (pageWrap.getModel().getAuditStatus() != null) { |
| | | queryWrapper.lambda().eq(ShopInfo::getAuditStatus, pageWrap.getModel().getAuditStatus()); |
| | |
| | | existing.setAuditTime(null); |
| | | existing.setAuditUserId(null); |
| | | existing.setAuditStatus(Constants.ZERO); |
| | | // è¯»åæ¼ééé¢ |
| | | setDepositAmountFromPricingRule(existing); |
| | | shopInfoMapper.updateById(existing); |
| | | shopId = existing.getId(); |
| | | } else { |
| | |
| | | shopInfo.setCreateTime(now); |
| | | shopInfo.setUpdateTime(now); |
| | | shopInfo.setRegionMemberId(member.getId()); |
| | | // è¯»åæ¼ééé¢ |
| | | setDepositAmountFromPricingRule(shopInfo); |
| | | shopInfoMapper.insert(shopInfo); |
| | | shopId = shopInfo.getId(); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | // 3. ä»PricingRuleè¯»åæ¼ééé¢ |
| | | PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda() |
| | | .eq(PricingRule::getDeleted, Constants.ZERO) |
| | | .eq(PricingRule::getType, Constants.THREE) |
| | | .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType())) |
| | | .last("limit 1")); |
| | | if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) { |
| | | shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB())); |
| | | } |
| | | // 3. ä»PricingRuleè¯»åæ¼ééé¢ï¼å®¡æ¹æ¶æ´æ°ï¼ |
| | | setDepositAmountFromPricingRule(shopInfo); |
| | | } |
| | | shopInfoMapper.updateById(shopInfo); |
| | | |
| | | // çä¿¡éç¥ |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | // å®¡æ ¸éè¿ â éç¥ç¼´çº³æ¼é |
| | | String depositMoney = shopInfo.getDepositAmount() != null |
| | | ? String.valueOf(shopInfo.getDepositAmount() / 100.0) : "0"; |
| | | sendSmsNotify(shopInfo.getTelephone(), |
| | | Constants.SmsNotify.SHOP_AUTH_APPROVED_DEPOSIT, |
| | | "storeName", shopInfo.getName(), |
| | | "money", depositMoney); |
| | | } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) { |
| | | // å®¡æ ¸é©³å |
| | | sendSmsNotify(shopInfo.getTelephone(), |
| | | Constants.SmsNotify.SHOP_AUTH_REJECTED, |
| | | "storeName", shopInfo.getName(), |
| | | "reason", auditDTO.getAuditRemark() != null ? auditDTO.getAuditRemark() : ""); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | } |
| | | |
| | | // é¨åºå¤´åï¼ä¼å
ä½¿ç¨ coverImgï¼ä¸ºç©ºååé¨å¤´ç
§ç¬¬ä¸å¼ |
| | | if (StringUtils.isNotBlank(shopInfo.getCoverImg())) { |
| | | vo.setShopAvatar(imgPrefix + shopInfo.getCoverImg()); |
| | | } else if (!CollectionUtils.isEmpty(vo.getStoreFrontImgUrls())) { |
| | | vo.setShopAvatar(vo.getStoreFrontImgUrls().get(0)); |
| | | } |
| | | |
| | | return vo; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public ShopInfoMaintainDTO getShopMaintainInfo(Integer memberId) { |
| | | ShopInfo shop = shopInfoMapper.selectById(memberId); |
| | | public ShopInfoMaintainDTO getShopMaintainInfo(Integer shopId) { |
| | | ShopInfo shop = shopInfoMapper.selectById(shopId); |
| | | if (Objects.isNull(shop) || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) { |
| | | return null; |
| | | } |
| | |
| | | dto.setDeliveryArea(shop.getDeliveryArea()); |
| | | dto.setShopHours(shop.getShopHours()); |
| | | dto.setBusinessType(shop.getBusinessType()); |
| | | // 头åå
¨è·¯å¾ |
| | | if (StringUtils.isNotBlank(shop.getCoverImg())) { |
| | | dto.setCoverImgUrl(getShopPrefix() + shop.getCoverImg()); |
| | | } |
| | | return dto; |
| | | } |
| | | |
| | |
| | | return errors; |
| | | } |
| | | |
| | | /** |
| | | * ä»PricingRuleè¯»åæ¼ééé¢å¹¶èµå¼å°é¨åºè®°å½ |
| | | */ |
| | | private void setDepositAmountFromPricingRule(ShopInfo shopInfo) { |
| | | if (shopInfo.getCompanyType() == null) { |
| | | return; |
| | | } |
| | | PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda() |
| | | .eq(PricingRule::getDeleted, Constants.ZERO) |
| | | .eq(PricingRule::getType, Constants.THREE) |
| | | .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType())) |
| | | .last("limit 1")); |
| | | if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) { |
| | | shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB())); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åéçä¿¡éç¥ï¼å¤±è´¥ä¸å½±å主ä¸å¡ï¼ |
| | | */ |
| | | 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 smsRecord = new Smsrecord(); |
| | | smsRecord.setPhone(phone); |
| | | smsRecord.setContent(content); |
| | | smsRecord.setType(Constants.ONE); |
| | | smsRecord.setStatus(result ? Constants.ONE : Constants.ZERO); |
| | | smsRecord.setCreateTime(new Date()); |
| | | smsRecord.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(smsRecord); |
| | | } catch (Exception e) { |
| | | log.error("çä¿¡åéå¼å¸¸: phone={}, template={}, error={}", phone, smsNotify.name(), e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void changePassword(Integer shopId, String newPassword, String token) { |
| | | if (StringUtils.isBlank(newPassword)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å¯ç ä¸è½ä¸ºç©º"); |
| | | } |
| | | // æ ¡éªå¯ç å¿
须忶å
å«åæ¯åæ°å |
| | | boolean hasLetter = newPassword.chars().anyMatch(Character::isLetter); |
| | | boolean hasDigit = newPassword.chars().anyMatch(Character::isDigit); |
| | | if (!hasLetter || !hasDigit) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å¯ç å¿
须忶å
å«åæ¯åæ°å"); |
| | | } |
| | | // æ¥è¯¢é¨åº |
| | | ShopInfo shopInfo = shopInfoMapper.selectById(shopId); |
| | | if (shopInfo == null || Constants.equalsInteger(shopInfo.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | // éæ°çæsaltï¼å 坿°å¯ç å¹¶æ´æ° |
| | | String salt = RandomStringUtils.randomAlphabetic(6); |
| | | shopInfo.setPassword(Utils.Secure.encryptPassword(newPassword, salt)); |
| | | shopInfo.setSalt(salt); |
| | | shopInfoMapper.updateById(shopInfo); |
| | | // æ¸
é¤tokenï¼å¼ºå¶éæ°ç»å½ |
| | | if (StringUtils.isNotBlank(token)) { |
| | | redisTemplate.delete(token); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | if (pageWrap.getModel().getCreateEndTime() != null) { |
| | | queryWrapper.le(WithdrawalOrders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime())); |
| | | } |
| | | // é¨åºç«¯ï¼æé¨åºåç§°æèç³»äººæ¨¡ç³æç´¢ |
| | | if (StringUtils.isNotBlank(pageWrap.getModel().getShopName())) { |
| | | queryWrapper.and(i -> i.like(ShopInfo::getName, pageWrap.getModel().getShopName()) |
| | | .or().like(ShopInfo::getLinkName, pageWrap.getModel().getShopName())); |
| | | } |
| | | // 叿ºç«¯ï¼æå¸æºå§åæ¨¡ç³æç´¢ |
| | | if (StringUtils.isNotBlank(pageWrap.getModel().getMemberName())) { |
| | | queryWrapper.like(DriverInfo::getName, pageWrap.getModel().getMemberName()); |
| | | } |
| | | for (PageWrap.SortData sortData : pageWrap.getSorts()) { |
| | | if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { |
| | | queryWrapper.orderByDesc(sortData.getProperty()); |
| | |
| | | |
| | | |
| | | des_pwd: 123456SDFKDJF |
| | | |
| | | jpush: |
| | | appKey: |
| | | masterSecret: |
| | | apnsProduction: false |
| | | |
| | | knife4j: |
| | | enable: true |
| | | basic: |
| | |
| | | spring: |
| | | # æ°æ®æºé
ç½® |
| | | datasource: |
| | | url: jdbc:mysql://192.168.0.211:3306/gtzxinglijicun?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai |
| | | username: root |
| | | password: Doumee@168 |
| | | url: jdbc:mysql://rm-bp1qxtf4wy100fur3yo.mysql.rds.aliyuncs.com:3306/gtzxinglijicun?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai |
| | | username: gtzxinglijicun |
| | | password: gtzxljc@2026 |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | type: com.alibaba.druid.pool.DruidDataSource |
| | | redis: |
| | |
| | | pay: |
| | | appId: wxb1b59320e803dc6c |
| | | appSecret: eb93785c7bca3f0ff0364b0e26bfeb59 |
| | | mchId: 1229817002 #åæ·å· |
| | | mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM #åæ·ç§é¥ |
| | | apiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB #apiV3Key |
| | | serialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 #åæ·è¯ä¹¦åºåå· |
| | | notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify |
| | | refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify |
| | | v3NotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayV3Notify |
| | | v3RefundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxRefundV3Notify |
| | | keyPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.p12 |
| | | privateCertPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.pem |
| | | privateKeyPath: D:\DouMee\1229817002_20220310_cert\apiclient_key.pem |
| | | pubKeyPath: D:\DouMee\1229817002_20220310_cert\pub_key.pem #åæ·æ¯ä»å
¬é¥ |
| | | mchId: 1629568742 #åæ·å· |
| | | apiV3Key: NJTLJSTZYXZRGScaiwubuzichanbu666 #apiV3Key |
| | | serialNumer: 25D19D18217F4588841E5CD1AA0D1533DE8AF84A #åæ·è¯ä¹¦åºåå· |
| | | privateKeyPath: pay/pro/wx/apiclient_key.pem |
| | | v3NotifyUrl: https://llfc.lmpro.cn/nyx_web/web/api/wxPayV3Notify |
| | | v3RefundNotifyUrl: https://llfc.lmpro.cn/nyx_web/web/api/wxRefundV3Notify |
| | | |
| | | typeId: jinkuai |
| | | |
| | | alipay: |
| | | pay: |
| | | appId: 2021006146626440 |
| | | 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/pro/appCertPublicKey_2021006146626440.crt |
| | | alipayPublicCertPath: pro/dev/alipayCertPublicKey_RSA2.crt |
| | | rootCertPath: foo/pro/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: blob |
| | | |
| | | qiwei: |
| | | serviceurl: https://wecom-qyapi.unilever-china.com/ |
| | | |
| | | |
| | | type: ftp |
| | | |
| | | # è
¾è®¯å°å¾apikey |
| | | tencent_key: WE3BZ-HN6WS-ONDOH-62QCV-MNL6F-5NFNE |
| | | tencent_key: |
| | | |
| | | # é«å¾·å°å¾apikey |
| | | geocode_map_key: |
| | | geocode_map_key: 9a6c1f0eff2e5aa91989ca9d4c21e262 |
| | | |
| | | qiwei: |
| | | serviceurl: https://qyapi.weixin.qq.com |
| | | |
| | | |
| | | aes: |
| | | encrypt: |
| | | open: true # æ¯å¦å¼å¯å å¯ true or false |
| | | showLog: true # æ¯å¦æå°å è§£å¯log true or false |
| | | publicKey: mN4Yn8Or8r7SH1w3 # AESå¯é¥ |
| | | privateKey: # RSAç§é¥ |
| | | time: 600000 |
| | |
| | | package com.doumee.api.web; |
| | | |
| | | import com.doumee.config.jwt.JwtTokenUtil; |
| | | import com.doumee.core.annotation.LoginDriverRequired; |
| | | 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; |
| | |
| | | } |
| | | |
| | | |
| | | @LoginRequired |
| | | @LoginShopRequired |
| | | @ApiOperation(value = "é¨åºéåºç»å½", notes = "å°ç¨åºç«¯") |
| | | @GetMapping("/logOutShop") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse logOutShop() { |
| | | String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY); |
| | | String token = this.getRequest().getHeader(JwtTokenUtil.SHOP_HEADER_KEY); |
| | | memberService.logOut(token,getShopId(), Constants.TWO); |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | |
| | | |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºéåºç»å½", notes = "å°ç¨åºç«¯") |
| | | @GetMapping("/logOutDriver") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse logOutDriver() { |
| | | String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY); |
| | | memberService.logOut(token,getDriverId(), Constants.ONE); |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | @LoginRequired |
| | | @ApiOperation(value = "ç¨æ·æ³¨é", notes = "å°ç¨åºç«¯") |
| | | @GetMapping("/logOff") |
| | |
| | | package com.doumee.api.web; |
| | | |
| | | import com.doumee.core.annotation.LoginDriverRequired; |
| | | import com.doumee.core.annotation.LoginRequired; |
| | | import com.doumee.core.annotation.LoginShopRequired; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | |
| | | return ApiResponse.success("æ¥è¯¢æå", noticeService.findPage(pageWrap)); |
| | | } |
| | | |
| | | @LoginRequired |
| | | @LoginShopRequired |
| | | @ApiOperation(value = "é¨åºæ è®°å
¨é¨å·²è¯»", notes = "æ è®°å½åç¨æ·æææªè¯»éç¥ä¸ºå·²è¯»") |
| | | @PostMapping("/shopReadAllNotice") |
| | | @ApiImplicitParams({ |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºéç¥æ¶æ¯å页", notes = "æªè¯»ä¼å
ï¼æ¶é´ååº") |
| | | @PostMapping("/driverNoticePage") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<PageData<Notice>> driverNoticePage(@RequestBody PageWrap<Notice> pageWrap) { |
| | | if (pageWrap.getModel() == null) { |
| | | pageWrap.setModel(new Notice()); |
| | | } |
| | | pageWrap.getModel().setUserId(this.getDriverId()); |
| | | pageWrap.getModel().setUserType(Constants.ONE); |
| | | return ApiResponse.success("æ¥è¯¢æå", noticeService.findPage(pageWrap)); |
| | | } |
| | | |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºæ è®°å
¨é¨å·²è¯»", notes = "æ è®°å½åç¨æ·æææªè¯»éç¥ä¸ºå·²è¯»") |
| | | @PostMapping("/driverReadAllNotice") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse driverReadAllNotice() { |
| | | noticeService.readAllNotice(Constants.ONE, this.getDriverId()); |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import com.doumee.core.annotation.LoginDriverRequired; |
| | | import com.doumee.core.annotation.LoginRequired; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | | import com.doumee.config.jwt.JwtTokenUtil; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | |
| | | import com.doumee.dao.dto.DriverGrabOrderDTO; |
| | | import com.doumee.dao.dto.DriverLoginRequest; |
| | | import com.doumee.dao.dto.DriverDeliverDTO; |
| | | import com.doumee.dao.dto.DriverOrderPageDTO; |
| | | import com.doumee.dao.dto.DriverPickupDTO; |
| | | import com.doumee.dao.dto.DriverRegisterRequest; |
| | | import com.doumee.dao.dto.DriverVerifyRequest; |
| | | import com.doumee.dao.vo.AccountResponse; |
| | | import com.doumee.dao.vo.DriverActiveOrderCountVO; |
| | | import com.doumee.dao.vo.DriverCancelLimitVO; |
| | | import com.doumee.dao.vo.DriverCenterVO; |
| | | import com.doumee.dao.vo.DriverGrabOrderVO; |
| | | import com.doumee.dao.vo.DriverOrderDetailVO; |
| | |
| | | * @author rk |
| | | * @date 2026/04/08 |
| | | */ |
| | | @Api(tags = "叿ºéªè¯ç ç»å½") |
| | | @Api(tags = "叿ºä¸å¡æ¥å£") |
| | | @Trace(exclude = true) |
| | | @RestController |
| | | @RequestMapping("/web/driverInfo") |
| | |
| | | |
| | | @LoginDriverRequired |
| | | @Trace |
| | | @ApiOperation(value = "叿ºç´¯è®¡ç»è®¡", notes = "累计佣éãå¾
ç»ç®ä½£éãè®¢åæ»æ°ãé±å
ä½é¢") |
| | | @GetMapping("/stats") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<com.doumee.dao.vo.DriverStatsVO> stats() { |
| | | return ApiResponse.success("æä½æå", driverInfoService.getDriverStats(this.getDriverId())); |
| | | } |
| | | |
| | | @LoginDriverRequired |
| | | @Trace |
| | | @ApiOperation(value = "叿ºæ¢å大å
", notes = "å页æ¥è¯¢å¯æ¢çå¼å°å¯å订å") |
| | | @PostMapping("/grabOrderHall") |
| | | @ApiImplicitParams({ |
| | |
| | | @LoginDriverRequired |
| | | @Trace |
| | | @ApiOperation(value = "叿ºæ¢å", notes = "对已å¯å(status=2)çå¼å°å¯å订ååèµ·æ¢å") |
| | | @PostMapping("/grabOrder") |
| | | @GetMapping("/grabOrder") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "orderId", value = "订å主é®", required = true) |
| | |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | |
| | | @LoginDriverRequired |
| | | @Trace |
| | | @ApiOperation(value = "叿ºä¿®æ¹å¯ç ", notes = "æ°å¯ç å¿
须忶å
å«åæ¯åæ°åï¼ä¿®æ¹æååééæ°ç»å½") |
| | | @GetMapping("/changePassword") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse changePassword(@RequestParam String newPassword) { |
| | | String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY); |
| | | driverInfoService.changePassword(this.getDriverId(), newPassword, token); |
| | | return ApiResponse.success("å¯ç ä¿®æ¹æåï¼è¯·éæ°ç»å½"); |
| | | } |
| | | |
| | | @LoginDriverRequired |
| | | @Trace |
| | | @ApiOperation(value = "è¿è¡ä¸è®¢åæ°é", notes = "è¿åå·²æ¢ååæ´¾éä¸çè®¢åæ°é") |
| | | @GetMapping("/activeOrderCount") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<DriverActiveOrderCountVO> activeOrderCount() { |
| | | return ApiResponse.success("æä½æå", driverInfoService.getActiveOrderCount(this.getDriverId())); |
| | | } |
| | | |
| | | @LoginDriverRequired |
| | | @Trace |
| | | @ApiOperation(value = "叿ºè®¢åå页", notes = "æ¥è¯¢å¸æºçå
¨é¨/å¾
åä»¶/é
éä¸/å·²å®æè®¢å") |
| | | @PostMapping("/orderPage") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<PageData<DriverGrabOrderVO>> orderPage(@RequestBody PageWrap<DriverOrderPageDTO> pageWrap) { |
| | | return ApiResponse.success("æä½æå", driverInfoService.driverOrderPage(this.getDriverId(), pageWrap)); |
| | | } |
| | | |
| | | @LoginDriverRequired |
| | | @Trace |
| | | @ApiOperation(value = "仿¥å¯åæ¶æ¬¡æ°", notes = "è¿å叿ºä»æ¥åæ¶æ¬¡æ°ä¸éãå·²åæ¶æ¬¡æ°ãå©ä½å¯åæ¶æ¬¡æ°") |
| | | @GetMapping("/cancelLimit") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<DriverCancelLimitVO> cancelLimit() { |
| | | return ApiResponse.success("æä½æå", driverInfoService.getTodayCancelLimit(this.getDriverId())); |
| | | } |
| | | |
| | | } |
| | |
| | | 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; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | |
| | | import com.doumee.dao.dto.CommentOrderDTO; |
| | | import com.doumee.dao.dto.ConfirmArriveDTO; |
| | | import com.doumee.dao.dto.CreateOrderDTO; |
| | | import com.doumee.dao.dto.DriverVerifyDTO; |
| | | import com.doumee.dao.dto.ShopVerifyDTO; |
| | | import com.doumee.dao.dto.StoreOutDTO; |
| | | import com.doumee.dao.dto.MyOrderDTO; |
| | |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation(value = "é¨åºæ ¸éæ¶ä»¶", notes = "é¨åºéè¿æ ¸éç 确认æ¶ä»¶/åä»¶") |
| | | @ApiOperation(value = "é¨åºæ ¸é", notes = "é¨åºéè¿è®¢å主é®ç¡®è®¤å¯å/åä»¶") |
| | | @PostMapping("/shopVerify") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "é¨åºtokenå¼", required = true) |
| | | }) |
| | | public ApiResponse shopVerify(@RequestBody @Validated ShopVerifyDTO dto) { |
| | | ordersService.shopVerifyOrder(dto.getVerifyCode(), getShopId(), dto.getImages(), dto.getRemark()); |
| | | return ApiResponse.success("æ ¸éæå"); |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation(value = "æ ¸é叿ºç ", notes = "å¼å°å¯å䏿åä»¶é¨åºç订åï¼éè¿å¸æºæ ¸éç 确认å°åº") |
| | | @PostMapping("/driverVerify") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse driverVerify(@RequestBody @Validated DriverVerifyDTO dto) { |
| | | ordersService.driverVerifyOrder(dto.getVerifyCode(), dto.getImages(), dto.getRemark(), getShopId()); |
| | | ordersService.verifyOrderByShopId(dto.getOrderId(), getShopId(), dto.getImages(), dto.getRemark()); |
| | | return ApiResponse.success("æ ¸éæå"); |
| | | } |
| | | |
| | |
| | | }) |
| | | public ApiResponse<MyOrderDetailVO> shopDetail(@RequestParam(required = false) Integer orderId, |
| | | @RequestParam(required = false) String verifyCode) { |
| | | return ApiResponse.success("æ¥è¯¢æå", ordersService.findShopOrderDetail(orderId, verifyCode)); |
| | | MyOrderDetailVO myOrderDetailVO = ordersService.findShopOrderDetail(orderId, verifyCode); |
| | | myOrderDetailVO.setMemberVerifyCode(null); |
| | | return ApiResponse.success("æ¥è¯¢æå", myOrderDetailVO); |
| | | } |
| | | |
| | | @LoginShopRequired |
| | |
| | | import com.wechat.pay.java.service.payments.model.Transaction; |
| | | import com.wechat.pay.java.service.refund.model.RefundNotification; |
| | | import com.wechat.pay.java.service.refund.model.Status; |
| | | import io.swagger.annotations.Api; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | * @Author : Rk |
| | | * @create 2023/3/24 16:57 |
| | | */ |
| | | @Api(tags = "æ¯ä»åè°ä¸å¡æ¥å£") |
| | | @Slf4j |
| | | @RestController |
| | | @CrossOrigin |
| | |
| | | package com.doumee.api.web; |
| | | |
| | | import com.doumee.core.annotation.LoginDriverRequired; |
| | | import com.doumee.core.annotation.LoginRequired; |
| | | import com.doumee.core.annotation.LoginShopRequired; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | |
| | | @Autowired |
| | | private RevenueService revenueService; |
| | | |
| | | @LoginRequired |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºæµæ°´å页", notes = "å°ç¨åºç«¯") |
| | | @PostMapping("/driverPage") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<PageData<Revenue>> driverPage(@RequestBody @Validated PageWrap<RevenueQueryDTO> pageWrap) { |
| | | return ApiResponse.success("æ¥è¯¢æå", revenueService.findDriverRevenuePage(pageWrap, getMemberId())); |
| | | return ApiResponse.success("æ¥è¯¢æå", revenueService.findDriverRevenuePage(pageWrap, getDriverId())); |
| | | } |
| | | |
| | | @LoginRequired |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºæµæ°´æ¶æ¯ç»è®¡", notes = "æ ¹æ®æ¥è¯¢æ¡ä»¶ç»è®¡æ¶å
¥ä¸æ¯åº") |
| | | @PostMapping("/driverSummary") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<RevenueSummaryVO> driverSummary(@RequestBody RevenueQueryDTO queryDTO) { |
| | | return ApiResponse.success("æ¥è¯¢æå", revenueService.getDriverRevenueSummary(queryDTO, getMemberId())); |
| | | return ApiResponse.success("æ¥è¯¢æå", revenueService.getDriverRevenueSummary(queryDTO, getDriverId())); |
| | | } |
| | | |
| | | @LoginShopRequired |
| | |
| | | |
| | | import com.doumee.core.annotation.LoginRequired; |
| | | import com.doumee.core.annotation.LoginShopRequired; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | | import com.doumee.config.jwt.JwtTokenUtil; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | |
| | | * @author rk |
| | | * @date 2026/04/10 |
| | | */ |
| | | @Api(tags = "é¨åºå
¥é©»") |
| | | @Api(tags = "é¨åºä¸å¡æ¥å£") |
| | | @RestController |
| | | @RequestMapping("/web/shopInfo") |
| | | public class ShopInfoApi extends ApiController { |
| | |
| | | return ApiResponse.success(shopInfoService.getMyShop(this.getMemberId())); |
| | | } |
| | | |
| | | |
| | | @ApiOperation("éè¿é¨åºå页å表") |
| | | @PostMapping("/nearby") |
| | | public ApiResponse<PageData<ShopNearbyVO>> nearby(@RequestBody @Validated PageWrap<ShopNearbyDTO> pageWrap) { |
| | |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation("é¨åºç«¯æ¥è¯¢é¨åºè¯¦æ
") |
| | | @GetMapping("/shopDetail") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "é¨åºtokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<ShopDetailVO> shopDetail() { |
| | | return ApiResponse.success("æ¥è¯¢æå", shopInfoService.getShopDetail(getShopId())); |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation("é¨åºéå®ç»è®¡") |
| | | @GetMapping("/salesStats") |
| | | @ApiImplicitParams({ |
| | |
| | | @ApiOperation("ç»´æ¤é¨åºä¿¡æ¯ï¼æ¯ä»æ¼éåï¼") |
| | | @PostMapping("/maintain") |
| | | public ApiResponse maintain(@RequestBody ShopInfoMaintainDTO dto) { |
| | | shopInfoService.maintainShopInfo(this.getMemberId(), dto); |
| | | shopInfoService.maintainShopInfo(this.getShopId(), dto); |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | |
| | |
| | | @ApiOperation("æ¥è¯¢é¨åºç»´æ¤ä¿¡æ¯") |
| | | @PostMapping("/maintainInfo") |
| | | public ApiResponse<ShopInfoMaintainDTO> maintainInfo() { |
| | | return ApiResponse.success(shopInfoService.getShopMaintainInfo(this.getMemberId())); |
| | | return ApiResponse.success(shopInfoService.getShopMaintainInfo(this.getShopId())); |
| | | } |
| | | |
| | | @LoginRequired |
| | |
| | | return ApiResponse.success("æä½æå", ordersService.payShopDeposit(getMemberId())); |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @Trace |
| | | @ApiOperation(value = "é¨åºä¿®æ¹å¯ç ", notes = "æ°å¯ç å¿
须忶å
å«åæ¯åæ°åï¼ä¿®æ¹æååééæ°ç»å½") |
| | | @PostMapping("/changePassword") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "é¨åºtokenå¼", required = true), |
| | | }) |
| | | public ApiResponse changePassword(@RequestParam String newPassword) { |
| | | String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY); |
| | | shopInfoService.changePassword(this.getShopId(), newPassword, token); |
| | | return ApiResponse.success("å¯ç ä¿®æ¹æåï¼è¯·éæ°ç»å½"); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.doumee.api.web; |
| | | |
| | | import com.doumee.core.annotation.LoginDriverRequired; |
| | | import com.doumee.core.annotation.LoginRequired; |
| | | import com.doumee.core.annotation.LoginShopRequired; |
| | | import com.doumee.core.model.ApiResponse; |
| | |
| | | @Autowired |
| | | private RevenueService revenueService; |
| | | |
| | | @LoginRequired |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºæç°ç³è¯·", notes = "å°ç¨åºç«¯") |
| | | @PostMapping("/driverApply") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse driverApply(@RequestBody @Validated WithdrawalDTO dto) { |
| | | withdrawalOrdersService.applyDriverWithdrawal(dto, getMemberId()); |
| | | withdrawalOrdersService.applyDriverWithdrawal(dto, getDriverId()); |
| | | return ApiResponse.success("æç°ç³è¯·å·²æäº¤"); |
| | | } |
| | | |
| | |
| | | return ApiResponse.success("æ¥è¯¢æå", revenueService.getShopRevenueStatistics(getShopId())); |
| | | } |
| | | |
| | | @LoginRequired |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºæ¶çç»è®¡", notes = "å½åç»å½å¸æºçæ¶ç/æç°ç»è®¡") |
| | | @GetMapping("/driverStatistics") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<RevenueStatisticsVO> driverStatistics() { |
| | | return ApiResponse.success("æ¥è¯¢æå", revenueService.getDriverRevenueStatistics(getMemberId())); |
| | | return ApiResponse.success("æ¥è¯¢æå", revenueService.getDriverRevenueStatistics(getDriverId())); |
| | | } |
| | | |
| | | @LoginRequired |
| | | @ApiOperation(value = "æç°è¯¦æ
", notes = "æ ¹æ®æç°ä¸»é®æ¥è¯¢è¯¦æ
ï¼å«å®¡æ¹äººä¿¡æ¯ï¼") |
| | | @GetMapping("/detail/{id}") |
| | | @LoginShopRequired |
| | | @ApiOperation(value = "é¨åºæç°è¯¦æ
", notes = "æ ¹æ®æç°ä¸»é®æ¥è¯¢è¯¦æ
ï¼å«å®¡æ¹äººä¿¡æ¯ï¼") |
| | | @GetMapping("/shopDetail/{id}") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "id", value = "æç°è®°å½ä¸»é®", required = true) |
| | | }) |
| | | public ApiResponse<WithdrawalOrders> detail(@PathVariable Integer id) { |
| | | public ApiResponse<WithdrawalOrders> shopDetail(@PathVariable Integer id) { |
| | | return ApiResponse.success("æ¥è¯¢æå", withdrawalOrdersService.findById(id)); |
| | | } |
| | | |
| | | |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºæç°è¯¦æ
", notes = "æ ¹æ®æç°ä¸»é®æ¥è¯¢è¯¦æ
ï¼å«å®¡æ¹äººä¿¡æ¯ï¼") |
| | | @GetMapping("/driverDetail/{id}") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "id", value = "æç°è®°å½ä¸»é®", required = true) |
| | | }) |
| | | public ApiResponse<WithdrawalOrders> driverDetail(@PathVariable Integer id) { |
| | | return ApiResponse.success("æ¥è¯¢æå", withdrawalOrdersService.findById(id)); |
| | | } |
| | | |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: dev |
| | | active: pro |
| | | # JSONè¿åé
ç½® |
| | | jackson: |
| | | # é»è®¤æ¶åº |
| | |
| | | <view class="nr-status"> |
| | | <text>{{info.statusName|| ''}}</text> |
| | | <view class="nr-status-type1" v-if="info.type === 0">å°±å°å¯å</view> |
| | | <view class="nr-status-type" v-else>ååå¯é</view> |
| | | <view class="nr-status-type" v-if="info.type === 1">ååå¯é</view> |
| | | <view class="nr-status-type1" v-if="info.type === 1 && info.isUrgent === 0">æ éè¾¾</view> |
| | | <view class="nr-status-type1" v-if="info.type === 1 && info.isUrgent === 1">æéè¾¾</view> |
| | | </view> |
| | | <view class="nr-desc" v-if="info.statusDesc">{{info.statusDesc || ''}}</view> |
| | | <view class="item" style="padding: 10rpx;"> |
| | | <view class="item" style="padding: 10rpx;" v-if="info.type ===1 && info.status===4"> |
| | | <map name="mapAddr"></map> |
| | | </view> |
| | | <view class="item"> |
| | |
| | | </view> |
| | | <text>{{info.takeUser || ''}} {{info.takePhone || ''}}</text> |
| | | </view> |
| | | <view class="addr-item"> |
| | | <view class="addr-item" v-if="info.type === 1"> |
| | | <view class="ji bg1">æ¶</view> |
| | | <view class="addr-item-top"> |
| | | <text>{{info.takeShopName || info.takeLocation || ''}}</text> |
| | |
| | | <text>{{info.takeUser || ''}} {{info.takePhone || ''}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="item-qrcode"> |
| | | <image src="/static/image/btn_upload@2x.png" mode="widthFix"></image> |
| | | <view class="item-qrcode" v-if=" (info.type ===0 && info.status >=1 &&info.status <7) || (info.type ===1 && (info.status ===1 || (info.takeShopId && info.status ===5)))"> |
| | | <!-- <image src="/static/image/btn_upload@2x.png" mode="widthFix"></image> --> |
| | | <view style="width: 360rpx; height: 360rpx;"> |
| | | <canvas canvas-id="qrcodeCanvas" id="qrcodeCanvas" style="width: 180px; height: 180px;"></canvas> |
| | | <!-- <image :src="qrcodeImage" mode="widthFix"></image> --> |
| | | </view> |
| | | <text>{{info.memberVerifyCode || ''}}</text> |
| | | <text>åä»¶ç </text> |
| | | <text @tap="copyCode(info.memberVerifyCode||'')">æ ¸éç </text> |
| | | </view> |
| | | <view class="item-x"></view> |
| | | <view class="item-list"> |
| | |
| | | </view> |
| | | <view class="item-list-row"> |
| | | <view class="item-form-label">ç©ååç§°</view> |
| | | <view class="item-form-val">{{info.typeName || ''}}</view> |
| | | <view class="item-form-val">{{info.goodTypeName || ''}}</view> |
| | | </view> |
| | | <view class="item-list-row"> |
| | | <view class="item-form-label">ç©åç
§ç</view> |
| | | <view class="item-form-list" v-if="info.orderImages && info.orderImages.length"> |
| | | <view class="item-form-list-row" v-for="(item,index) in info.orderImages" key="item"> |
| | | <image :src="item" mode="widthFix" @click="previewImage(info.orderImages,index)"></image> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="item" v-if="info.refundInfo"> |
| | | <view class="tuikuan"> |
| | | <view class="tuikuan-top"> |
| | | <text>鿬¾éé¢</text> |
| | | <text>Â¥{{((info.refundAmount || 0)/100).toFixed(2)}}</text> |
| | | <text>Â¥{{((info.refundInfo.refundAmount || 0)/100).toFixed(2)}}</text> |
| | | </view> |
| | | <view class="tuikuan-bottom"> |
| | | <text v-if="info.refundStatus === 0">鿬¾ä¸</text> |
| | | <text v-if="info.refundStatus === 1">å·²éåæ¨çæ¯ä»è´¦æ·</text> |
| | | <text v-if="info.refundStatus === 2">鿬¾å¤±è´¥</text> |
| | | <text>{{info.refundTime || ''}}</text> |
| | | <text v-if="info.refundInfo.status === 0">鿬¾ä¸</text> |
| | | <text v-if="info.refundInfo.status === 1">å·²éåæ¨çæ¯ä»è´¦æ·</text> |
| | | <text v-if="info.refundInfo.status === 2">鿬¾å¤±è´¥</text> |
| | | <text v-if="info.refundInfo.status === 1">{{info.refundInfo.refundTime || ''}}</text> |
| | | <text v-if="info.refundInfo.status !== 1">{{info.refundInfo.createTime || ''}}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="item" v-if="info.commentStatus === 1"> |
| | | <view class="comment"> |
| | | <view class="comment-top"> |
| | | <text>客æ·å·²è¯ä»·ï¼</text> |
| | | </view> |
| | | <view class="comment-score"> |
| | | <view class="score-item" v-if="info.depositScore">å¯ä»¶é¨åº: <text style="color:#ffc533;font-size: 38rpx;margin-right: 10rpx;">â
</text>{{info.depositScore || 1}} </view> |
| | | <view class="score-item" v-if="info.driverScore">é
é叿º: <text style="color:#ffc533;font-size: 38rpx;margin-right: 10rpx;">â
</text>{{info.driverScore || 1}} </view> |
| | | <view class="score-item" v-if="info.takeScore">æ¶ä»¶é¨åº: <text style="color:#ffc533;font-size: 38rpx;margin-right: 10rpx;">â
</text>{{info.takeScore || 1}} </view> |
| | | </view> |
| | | <view class="comment-row" v-if="info.commentImages && info.commentImages.length" > |
| | | <view class="comment-image" v-for="(item,index) in info.commentImages" key="item"> |
| | | <image :src="item" mode="widthFix" @click="previewImage(info.commentImages,index)"></image> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="item" v-if="info.refundInfo"> |
| | | <view class="tuikuan"> |
| | | <view class="tuikuan-top"> |
| | | <text>鿬¾éé¢</text> |
| | | <text>Â¥{{((info.refundInfo.refundAmount || 0)/100).toFixed(2)}}</text> |
| | | </view> |
| | | <view class="tuikuan-bottom"> |
| | | <text v-if="info.refundInfo.status === 0">鿬¾ä¸</text> |
| | | <text v-if="info.refundInfo.status === 1">å·²éåæ¨çæ¯ä»è´¦æ·</text> |
| | | <text v-if="info.refundInfo.status === 2">鿬¾å¤±è´¥</text> |
| | | <text v-if="info.refundInfo.status === 1">{{info.refundInfo.refundTime || ''}}</text> |
| | | <text v-if="info.refundInfo.status !== 1">{{info.refundInfo.createTime || ''}}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="item" v-if="info.detailList"> |
| | | <view class="xl"> |
| | | <view v-for="goods in info.detailList " :key="goods.luggageName" class="xl-item"> |
| | |
| | | <view class="item-infos-item-left">订åç¼å·ï¼</view> |
| | | <view class="item-infos-item-right"> |
| | | <text>{{info.code ||''}}</text> |
| | | <image src="/static/icon/ic_cppy@2x.png" mode="widthFix"></image> |
| | | <image src="/static/icon/ic_cppy@2x.png" mode="widthFix" @tap="copyCode(info.code||'')"></image> |
| | | </view> |
| | | </view> |
| | | <view class="item-infos-item"> |
| | |
| | | </view> |
| | | </view> |
| | | <view class="item-infos-item" v-if="info.outTradeNo"> |
| | | <view class="item-infos-item-left">交æå·ï¼</view> |
| | | <view class="item-infos-item-left">交æåå·ï¼</view> |
| | | <view class="item-infos-item-right"> |
| | | <text>{{info.outTradeNo || ''}}</text> |
| | | </view> |
| | |
| | | <text>{{info.refundTime || ''}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="item-infos-item" v-if="info.refundAmount"> |
| | | <view class="item-infos-item" v-if="info.refundInfo"> |
| | | <view class="item-infos-item-left">鿬¾éé¢ï¼</view> |
| | | <view class="item-infos-item-right"> |
| | | <text>Â¥{{((info.refundAmount || 0)/100).toFixed(2)}}</text> |
| | | <text>Â¥{{((info.refundInfo.refundAmount || 0)/100).toFixed(2)}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="item-infos-item" v-if="info.refundRemark"> |
| | | <view class="item-infos-item-left">鿬¾åå ï¼</view> |
| | | <view class="item-infos-item-right"> |
| | | <text>{{info.refundRemark || ''}}</text> |
| | | <text>{{info.refundInfo.refundRemark || ''}}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view style="width: 100%; height: calc(210rpx + env(safe-area-inset-bottom));"></view> |
| | | </view> |
| | | <view class="tips" v-if="info.overdue"> |
| | | <view class="tips" v-if="info.overdueStatus !==0"> |
| | | <image src="/static/icon/ic_waring@2x.png" mode="widthFix"></image> |
| | | <text>å·²è¶
è¿åä»¶æ¶é´ï¼è¶
æ¶è´¹ç¨ï¼Â¥{{((info.overdueFee || 0)/100).toFixed(2)}}å
</text> |
| | | <text v-if="info.overdueStatus ===1">å·²è¶
è¿åä»¶æ¶é´ï¼å·²äº§çè¶
æ¶è´¹ç¨ï¼Â¥{{((info.overdueFee || 0)/100).toFixed(2)}}å
</text> |
| | | <text v-if="info.overdueStatus ===2">å·²è¶
è¿åä»¶æ¶é´ï¼éè¦æ¯ä»è¶
æ¶è´¹ç¨ï¼Â¥{{((info.overdueFee || 0)/100).toFixed(2)}}å
</text> |
| | | <text v-if="info.overdueStatus ===3">è¶
è¿åä»¶æ¶é´ï¼å·²æ¯ä»è¶
æ¶è´¹ç¨ï¼Â¥{{((info.overdueFee || 0)/100).toFixed(2)}}å
</text> |
| | | </view> |
| | | <view cclass="footer" v-if="info.type===0"> |
| | | <view class="footer" v-if="info.type===0"> |
| | | <view class="footer-btns"> |
| | | <view class="btn kong" @click="contactPhone(info,0)" v-if="info.status ===1 || info.status==2 || info.status===98">èç³»é¨åº</view> |
| | | <view class="btn kong" v-if="info.status ===0 || info.status ===1" @click="cancelOrder(info)">åæ¶è®¢å</view> |
| | | <view class="btn kong" @click="deleteOrder(info)" v-if="info.status ===7 || info.status===96 || info.status == 99">å é¤è®¢å</view> |
| | | <view class="btn you" @click="payOrder(info)" v-if="info.status ===0">ç«å³æ¯ä»</view> |
| | | <view class="btn you" v-if="info.status >=1 &&info.status <7 " @click="openQrcode(info)" >æ ¸éç </view> |
| | | <view class="btn you" @click="evaluateOrder(info)" v-if="info.status ===7 && !info.commentStatus ">è¯ä»·è®¢å</view> |
| | | <!-- <view class="btn you" v-if="info.status >=1 &&info.status <7 " @click="openQrcode(info)" >æ ¸éç </view> |
| | | --> <view class="btn you" @click="evaluateOrder(info)" v-if="info.status ===7 && !info.commentStatus ">è¯ä»·è®¢å</view> |
| | | <view class="btn you" @click="payOrderFee(info)" v-if="info.status ===5 && info.overdueStatus===2 ">ç«å³æ¯ä»</view> |
| | | </view> |
| | | </view> |
| | | <view class="footer" v-else> |
| | | <view class="footer" v-if="info.type===1"> |
| | | <view class="footer-btns"> |
| | | <view class="btn kong" @click="contactPhone(info,0)" v-if="info.status ===1 || info.status ==2">èç³»é¨åº</view> |
| | | <view class="btn kong" @click="contactPhone(info,2)" v-if="info.status ===3 || info.status ===4 ">èç³»éªæ</view> |
| | |
| | | <view class="btn you" @click="payOrder(info)" v-if="info.status ===0">ç«å³æ¯ä»</view> |
| | | <view class="btn kong" @click="deleteOrder(info)" v-if="info.status ===7 || info.status===96 || info.status == 99">å é¤è®¢å</view> |
| | | <view class="btn you" @click="cancelOrder(info)" v-if="info.status ===1">ç³è¯·é款</view> |
| | | <view class="btn you" v-if="info.status ===1 || (info.takeShopId && info.status ===5)" @click="openQrcode(info)" >æ ¸éç </view> |
| | | <view class="btn you" @click="doneOrder(info)" v-if="!info.takeShopId && info.status ===5">确认æ¶è´§</view> |
| | | <!-- <view class="btn you" v-if="info.status ===1 || (info.takeShopId && info.status ===5)" @click="openQrcode(info)" >æ ¸éç </view> |
| | | --> <view class="btn you" @click="doneOrder(info)" v-if="!info.takeShopId && info.status ===5">确认æ¶è´§</view> |
| | | <view class="btn you" @click="evaluateOrder(info)" v-if="info.status ===7 && !info.commentStatus ">è¯ä»·è®¢å</view> |
| | | <view class="btn you" @click="payOrderFee(info)" v-if="info.status ===5 && info.overdueStatus ===2">ç«å³æ¯ä»</view> |
| | | </view> |
| | | </view> |
| | | <u-popup :show="showPhone" round="15" mode="bottom" :safeAreaInsetBottom="true" @close="contactPhone()" :closeable="true" :closeOnClickOverlay="true"> |
| | | <view class="phone"> |
| | | <view class="phone-head"> |
| | | <view></view> |
| | | <text>è系客æ·</text> |
| | | <text>{{linkItem.title}}</text> |
| | | </view> |
| | | <view class="phone-item" > |
| | | <view> |
| | | <image src="/static/icon/ic_call@2x.png" mode="widthFix" @click="contactPhoneDo()" ></image> |
| | | <text>{{linkinfo.linkname||''}} </text> |
| | | <text style="margin-left: 10px;"> {{linkinfo.linkphone||''}}</text> |
| | | <view @click="contactPhoneDo()" > |
| | | <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image> |
| | | <text>{{linkItem.linkname||''}} </text> |
| | | <text style="margin-left: 10px;"> {{linkItem.linkphone||''}}</text> |
| | | </view> |
| | | </view> |
| | | <view style="width: 100%; height: 30rpx;"></view> |
| | |
| | | </view> |
| | | </view> |
| | | </u-popup> |
| | | <u-popup :show="showQrcode" round="15" @close="openQrcode()" :safeAreaInsetBottom="false" mode="bottom" :closeable="true" :closeOnClickOverlay="false"> |
| | | <!-- <u-popup :show="showQrcode" round="15" @close="openQrcode()" :safeAreaInsetBottom="false" mode="bottom" :closeable="true" :closeOnClickOverlay="false"> |
| | | <view class="tc" style="height: 700rpx;width: 100%; "> |
| | | <view class="tc-contemt" style="text-align: center;"> |
| | | <view class="tc-contemt-title" style="text-align: center;">æ ¸éç </view> |
| | | <view class="qrcode-box"> |
| | | <canvas canvas-id="qrcodeCanvas" id="qrcodeCanvas" style="width: 100px; height: 100px;"></canvas> |
| | | <canvas canvas-id="qrcodeCanvas1" id="qrcodeCanvas1" style="width: 100px; height: 100px;"></canvas> |
| | | <image class="qrcode-image" :src="qrcodeImage" mode="widthFix"></image> |
| | | </view> |
| | | <text class="pickup-code">{{ currentOrder.memberVerifyCode||'' }}</text> |
| | | <text class="pickup-tip" @tap="copyCode">ç¹å»å¤å¶èªæç </text> |
| | | <text class="pickup-code">{{ info.memberVerifyCode||'' }}</text> |
| | | <text class="pickup-tip" @tap="copyCode(info.memberVerifyCode||'')">ç¹å»å¤å¶èªæç </text> |
| | | </view> |
| | | </view> |
| | | </u-popup> |
| | | </u-popup> --> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapState } from 'vuex' |
| | | import drawQrcode from 'weapp-qrcode' |
| | | |
| | | export default { |
| | | computed: { |
| | |
| | | showDelete:false, |
| | | showQrcode:false, |
| | | showPay:false, |
| | | showPhone:false |
| | | showPhone:false, |
| | | linkItem:{title:'',linkname:'',linkphone:''}, |
| | | qrcodeImage:null |
| | | } |
| | | }, |
| | | onShow() { |
| | |
| | | this.showPay=false |
| | | this.showPhone=false |
| | | this.getUserDetail() |
| | | this.linkItem={title:'',linkname:'',linkphone:''} |
| | | }, |
| | | onLoad(options) { |
| | | this.id = options.id |
| | |
| | | uni.showToast({ title: 'æ¯ä»å¤±è´¥', icon: 'none' }) |
| | | }) |
| | | }, |
| | | payOrderFee(){ |
| | | var that = this; |
| | | uni.showLoading({ title: 'åèµ·æ¯ä»ä¸...', mask: true }) |
| | | this.$u.api.payOverdueFee({ |
| | | orderId: this.id |
| | | }).then(res => { |
| | | uni.hideLoading() |
| | | if (res.code === 200 && res.data) { |
| | | let paymentData = res.data.response |
| | | uni.requestPayment({ |
| | | provider: 'wxpay', |
| | | timeStamp: paymentData.timeStamp || '', |
| | | nonceStr: paymentData.nonceStr || '', |
| | | package: paymentData.package || '', |
| | | signType: paymentData.signType || 'MD5', |
| | | paySign: paymentData.paySign || '', |
| | | success: (res) => { |
| | | that.getUserDetail() |
| | | }, |
| | | fail: (err) => { |
| | | if (err.errMsg.includes('cancel')) { |
| | | uni.showToast({ title: '已忶æ¯ä»', icon: 'none' }) |
| | | } else { |
| | | uni.showToast({ title: 'æ¯ä»å¤±è´¥', icon: 'none' }) |
| | | } |
| | | } |
| | | }) |
| | | } else { |
| | | uni.showToast({ title: res.msg || 'æ¯ä»å¤±è´¥', icon: 'none' }) |
| | | } |
| | | }).catch(err => { |
| | | uni.hideLoading() |
| | | uni.showToast({ title: 'æ¯ä»å¤±è´¥', icon: 'none' }) |
| | | }) |
| | | }, |
| | | doneOrder(item){ |
| | | this.showDone = !this.showDone |
| | | }, |
| | |
| | | that.getUserDetail() |
| | | } |
| | | }, |
| | | contactPhone(){ |
| | | contactPhone(item,type){ |
| | | this.showPhone = !this.showPhone |
| | | this.linkItem = {title:'èç³»éªæ',linkname:'',linkphone:''} |
| | | if(type == 0){ |
| | | this.linkItem = {title:'èç³»é¨åº',linkname:this.info.depositShopName,linkphone:this.info.depositShopPhone} |
| | | }else if(type ==2){ |
| | | this.linkItem = {title:'èç³»éªæ',linkname:this.info.driverName,linkphone:this.info.driverPhone} |
| | | }else if(type ==1){ |
| | | this.linkItem = {title:'èç³»é¨åº',linkname:this.info.takeShopName,linkphone:this.info.takeShopPhone} |
| | | } |
| | | console.log("==================================",this.showPhone) |
| | | }, |
| | | contactPhoneDo(){ |
| | | if(this.info.linkphone !=null && this.info.linkphone!=''){ |
| | | if(this.linkItem.linkphone !=null && this.linkItem.linkphone!=''){ |
| | | uni.makePhoneCall({ |
| | | phoneNumber: this.info.linkphone |
| | | phoneNumber: this.linkItem.linkphone |
| | | }) |
| | | } |
| | | }, |
| | |
| | | if (res.code === 200 ) { |
| | | this.showCancel = false |
| | | uni.$emit('updateOrder',{info:this.info,delete:0}) |
| | | that.getUserDetail() |
| | | } |
| | | }, |
| | | async deleteOrderDo(){ |
| | |
| | | this.goBack() |
| | | } |
| | | }, |
| | | copyCode() { |
| | | if (!this.currentOrder || !this.info.memberVerifyCode) { |
| | | copyCode(txt) { |
| | | if (!txt) { |
| | | return |
| | | } |
| | | uni.setClipboardData({ |
| | | data: this.info.memberVerifyCode, |
| | | data: txt, |
| | | success: () => { |
| | | uni.showToast({ |
| | | title: 'å·²å¤å¶èªæç ', |
| | | title: 'å·²å¤å¶å°ç²è´´æ¿', |
| | | icon: 'none' |
| | | }) |
| | | } |
| | |
| | | if(!this.showQrcode){ |
| | | this.showQrcode =true |
| | | drawQrcode({ |
| | | canvasId: 'qrcodeCanvas', |
| | | canvasId: 'qrcodeCanvas1', |
| | | text: this.info.memberVerifyCode, |
| | | width: 100, |
| | | height: 100, |
| | |
| | | this.showQrcode = false |
| | | } |
| | | }, |
| | | async showQrcodeImg(){ |
| | | if((this.info.type ===0 && this.info.status >=1 &&this.info.status <7) |
| | | || (this.info.type ===1 && (this.info.status ===1 || (this.info.takeShopId && this.info.status ===5)))){ |
| | | if(this.qrcodeImage){ |
| | | return |
| | | } |
| | | this.qrcodeImage=null |
| | | var that =this |
| | | drawQrcode({ |
| | | canvasId: 'qrcodeCanvas', |
| | | text: this.info.memberVerifyCode, |
| | | width: 180, |
| | | height: 180, |
| | | correctLevel: 2 |
| | | }) |
| | | setTimeout(() => { |
| | | uni.canvasToTempFilePath({ |
| | | canvasId: 'qrcodeCanvas', |
| | | success: (res) => { |
| | | that.qrcodeImage = res.tempFilePath |
| | | } |
| | | }, this) |
| | | }, 100) |
| | | } |
| | | |
| | | }, |
| | | evaluateOrder(){ |
| | | uni.navigateTo({ |
| | | url:"/pages/evaluate/evaluate?id="+this.info.id |
| | |
| | | if (res.code === 200) { |
| | | this.info = res.data |
| | | uni.$emit('updateOrder',{info:this.info,delete:0}) |
| | | this.showQrcodeImg() |
| | | } |
| | | } |
| | | } |
| | |
| | | box-sizing: border-box; |
| | | background: #FFE9E9; |
| | | position: fixed; |
| | | bottom: calc(100rpx + env(safe-area-inset-bottom)); |
| | | bottom: calc(30rpx + env(safe-area-inset-bottom)); |
| | | left: 0; |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | margin-right: 16rpx; |
| | | } |
| | | .nr-status-type { |
| | | width: 164rpx; |
| | | width: 154rpx; |
| | | height: 38rpx; |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | color: #FA8010; |
| | | } |
| | | .nr-status-type1 { |
| | | width: 188rpx; |
| | | width: 158rpx; |
| | | height: 38rpx; |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | } |
| | | } |
| | | } |
| | | .comment{ |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | .comment-top { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | text { |
| | | &:nth-child(1) { |
| | | font-weight: 600; |
| | | font-size: 30rpx; |
| | | color: #222222; |
| | | } |
| | | &:nth-child(2) { |
| | | font-weight: 500; |
| | | font-size: 36rpx; |
| | | color: #FE2C2E; |
| | | &:before { |
| | | content: "ï¿¥"; |
| | | font-weight: 500; |
| | | font-size: 24rpx; |
| | | color: #FE2C2E; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .comment-score{ |
| | | // font-weight: 600; |
| | | font-size: 28rpx; |
| | | color: #333333; |
| | | margin: 10rpx 0; |
| | | display: flex; |
| | | width: 100%; |
| | | .score-item{ |
| | | flex:1; |
| | | margin: 20rpx 0; |
| | | } |
| | | } |
| | | .comment-row{ |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | .comment-image { |
| | | margin: 10rpx; |
| | | width: 100rpx; |
| | | height: 100rpx; |
| | | border-radius: 8rpx; |
| | | border:1px solid #f2f2f2; |
| | | overflow: hidden; |
| | | image { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | .tuikuan { |
| | | width: 100%; |
| | | display: flex; |
| | |
| | | }) |
| | | try { |
| | | const uploadResults = await that.uploadFiles(tempFilePaths, maxCount) |
| | | const addrs = uploadResults.map(item => item.imgaddr) |
| | | const fullPaths = uploadResults.map(item => item.url || item.path || item) |
| | | that.photoList = [...that.photoList, ...fullPaths.map(url => ({ url }))] |
| | | that.form.images = [...that.form.images, ...fullPaths] |
| | | that.form.images = [...that.form.images, ...addrs] |
| | | uni.hideLoading() |
| | | uni.showToast({ |
| | | title: 'ä¸ä¼ æå', |
| | |
| | | |
| | | <view class="card-footer"> |
| | | <view class="footer-actions" v-if="item.type===0"> |
| | | <view class="footer-btn contact-btn" @click="contactPhone(item,0)" v-if="item.status ===1 || item.status==2 || item.status===98">èç³»é¨åº</view> |
| | | <view class="footer-btn contact-btn" @click="contactPhone(item,0)" v-if="item.status ===1 ||item.status ===5 || item.status==2 || item.status===98">èç³»é¨åº</view> |
| | | <view class="footer-btn contact-btn" v-if="item.status ===0 || item.status ===1" @click="cancelOrder(item)">åæ¶è®¢å</view> |
| | | <view class="footer-btn contact-btn" @click="deleteOrder(item)" v-if="item.status ===7 || item.status===96 || item.status == 99">å é¤è®¢å</view> |
| | | <view class="footer-btn primary-btn" @click="payOrder(item)" v-if="item.status ===0">ç«å³æ¯ä»</view> |
| | |
| | | <view class="phone"> |
| | | <view class="phone-head"> |
| | | <view></view> |
| | | <text>è系客æ·</text> |
| | | <text>{{linkItem.title}}</text> |
| | | </view> |
| | | <!-- <view class="phone-item"> |
| | | <view> |
| | |
| | | <view class="line" v-if="serverPhone && serverPhone.length"></view> |
| | | </view> --> |
| | | <view class="phone-item" > |
| | | <view> |
| | | <image src="/static/icon/ic_call@2x.png" mode="widthFix" @click="contactPhoneDo()" ></image> |
| | | <text>{{linkItem.linkname||''}} </text> |
| | | <text style="margin-left: 10px;"> {{linkItem.linkphone||''}}</text> |
| | | <view @click="contactPhoneDo()"> |
| | | <image src="/static/icon/ic_call@2x.png" mode="widthFix" ></image> |
| | | <text >{{linkItem.linkname||''}} </text> |
| | | <text style="margin-left: 10px;"> {{linkItem.linkphone||''}}</text> |
| | | </view> |
| | | </view> |
| | | <view style="width: 100%; height: 30rpx;"></view> |
| | |
| | | qrcodeImage:null, |
| | | isLoadingMore: false, |
| | | currentOrder:null, |
| | | contanctType:0, |
| | | linkItem:{title:'',linkname:'',linkphone:''}, |
| | | filterTabs: [ |
| | | { label: 'å
¨é¨' ,value: -1}, |
| | | { label: 'å¾
æ¯ä»',value: 0 }, |
| | |
| | | onLoad(options) { |
| | | console.log(options ) |
| | | this.activeTab = -1 |
| | | if (options.status) { |
| | | if (options.status != null && options.status != undefined) { |
| | | this.activeTab = Number(options.status) |
| | | } |
| | | this.getFirstPageData() |
| | | var that =this |
| | | uni.$on('updateOrder',function(data){ |
| | | console.log('çå¬å°äºä»¶æ¥èª update ï¼æºå¸¦åæ° msg 为ï¼' ,data); |
| | |
| | | this.showDelete=false |
| | | this.showQrcode=false |
| | | this.showPay=false |
| | | this.contanctType =0 |
| | | this.showPhone=false |
| | | this.loading=false |
| | | this.currentOrder=null |
| | | this.linkItem={title:'',linkname:'',linkphone:''} |
| | | var orderStatus = uni.getStorageSync("orderStatus"); |
| | | console.log(orderStatus,"==================") |
| | | if (orderStatus != null &&orderStatus != undefined) { |
| | | this.activeTab = Number(orderStatus) |
| | | } |
| | | uni.clearStorageSync("orderStatus") |
| | | // this.getFirstPageData() |
| | | }, |
| | | onReachBottom(){ |
| | | this.getDataList(); |
| | |
| | | that.showDone() |
| | | } |
| | | }, |
| | | contactPhone(item){ |
| | | contactPhone(item,type){ |
| | | this.showPhone = !this.showPhone |
| | | this.linkItem = item ||{} |
| | | this.linkItem = {title:'',linkname:'',linkphone:''} |
| | | console.log("==================================",this.showPhone) |
| | | if(!item){ |
| | | return |
| | | } |
| | | if(type == 0){ |
| | | this.linkItem = {title:'èç³»é¨åº',linkname:item.depositShopName,linkphone:item.depositShopPhone} |
| | | }else if(type ==2){ |
| | | this.linkItem = {title:'èç³»éªæ',linkname:item.driverName,linkphone:item.driverPhone} |
| | | }else if(type ==1){ |
| | | this.linkItem = {title:'èç³»é¨åº',linkname:item.takeShopName,linkphone:item.takeShopPhone} |
| | | } |
| | | }, |
| | | contactPhoneDo(){ |
| | | if(this.linkItem.linkphone !=null && this.linkItem.linkphone!=''){ |
| | |
| | | display: block; |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-align: center; |
| | | text-overflow: ellipsis; |
| | | max-width: 100%; |
| | | } |
| | |
| | | }) |
| | | try { |
| | | const uploadResults = await this.uploadFiles(tempFilePaths, maxCount) |
| | | const addrs = uploadResults.map(item => item.imgaddr) |
| | | const fullPaths = uploadResults.map(item => item.url || item.path || item) |
| | | this.uploadedImages = [...this.uploadedImages, ...fullPaths.map(url => ({ url }))] |
| | | this.form.goodsImages = [...this.form.goodsImages, ...fullPaths] |
| | | this.form.goodsImages = [...this.form.goodsImages, ...addrs] |
| | | uni.hideLoading() |
| | | uni.showToast({ |
| | | title: 'ä¸ä¼ æå', |
| | |
| | | <view class="order-card section-card"> |
| | | <view class="section-head"> |
| | | <text class="section-title">æç订å</text> |
| | | <view class="more-wrap" @click="toAllOrders"> |
| | | <view class="more-wrap" @click="toOrderDetail(-1)"> |
| | | <text class="more-text">å
¨é¨è®¢å</text> |
| | | <u-icon name="arrow-right" size="13" color="#999999"></u-icon> |
| | | </view> |
| | | </view> |
| | | <view class="order-grid"> |
| | | <view v-for="(item, index) in orderMenus" :key="index" class="order-item" @click="toOrderDetail(item.label)"> |
| | | <view v-for="(item, index) in orderMenus" :key="index" class="order-item" @click="toOrderDetail(item.status)"> |
| | | <image class="order-icon" :src="item.url" mode="widthFix"></image> |
| | | <view v-if="item.badge" class="order-badge">{{ item.badge }}</view> |
| | | <text class="order-label">{{ item.label }}</text> |
| | |
| | | agreeChecked: true, |
| | | userName: '', |
| | | orderMenus: [ |
| | | { label: 'å¾
æ¯ä»', url: '/static/icon/mine_ic_daifukuan@2x.png', badge: 0 }, |
| | | { label: 'å¾
æ¶è´§', url: '/static/icon/mine_ic_daishouhuo@2x.png', badge: 0 }, |
| | | { label: '鿬¾/å®å', url: '/static/icon/mine_ic_tuikuan@2x.png', badge: 0 } |
| | | { label: 'å¾
æ¯ä»', url: '/static/icon/mine_ic_daifukuan@2x.png', badge: 0,status:0 }, |
| | | { label: 'å¾
æ¶è´§', url: '/static/icon/mine_ic_daishouhuo@2x.png', badge: 0,status:3 }, |
| | | { label: '鿬¾/å®å', url: '/static/icon/mine_ic_tuikuan@2x.png', badge: 0 ,status:5} |
| | | ], |
| | | menuList: [ |
| | | { label: 'é¨åºå
¥é©»' }, |
| | |
| | | this.showAuthLogin = true |
| | | }, |
| | | toAllOrders() { |
| | | uni.navigateTo({ |
| | | url: '/pages/orders/orders' |
| | | uni.switchTab({ |
| | | url: '/pages/itinerary/itinerary' |
| | | }) |
| | | }, |
| | | handleMenuClick(item) { |
| | |
| | | } |
| | | }, |
| | | toOrderDetail(label) { |
| | | uni.navigateTo({ |
| | | url: '/pages/orders/orders?status=' + label |
| | | uni.setStorageSync("orderStatus",label) |
| | | uni.switchTab({ |
| | | url: '/pages/itinerary/itinerary?status=' + label |
| | | }) |
| | | }, |
| | | toSetting() { |
| | |
| | | </view> |
| | | |
| | | <view class="pickup-card"> |
| | | <text class="pickup-title">èªæç </text> |
| | | <text class="pickup-title">æ ¸éç </text> |
| | | <view class="qrcode-box"> |
| | | <canvas canvas-id="qrcodeCanvas" id="qrcodeCanvas" style="width: 100px; height: 100px;"></canvas> |
| | | <image class="qrcode-image" :src="qrcodeImage" mode="widthFix"></image> |
| | | </view> |
| | | <text class="pickup-code">{{ orderDetail.memberVerifyCode }}</text> |
| | | <text class="pickup-tip" @tap="copyCode">ç¹å»å¤å¶èªæç </text> |
| | | <text class="pickup-tip" @tap="copyCode">ç¹å»å¤å¶æ ¸éç </text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | }) |
| | | }, |
| | | viewOrder() { |
| | | uni.redirectTo({ |
| | | url: '/pages/itinerary/itinerary?orderId=' + this.orderId |
| | | uni.navigateTo({ |
| | | url:'/pages/delivery-order-detail/delivery-order-detail?userType=0&id='+this.orderId |
| | | }) |
| | | }, |
| | | copyCode() { |
| | |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | let confirmReceipt = (data = {}) => vm.$u.http.post('web/order/confirmReceipt/'+data.orderId, data); // ä¼å确认æ¶è´§ |
| | | let continuePayOrder = (data = {}) => vm.$u.http.post('web/order/continuePay/'+data.orderId, data); //ç»§ç»åèµ·æ¯ä» |
| | | let orderComment = (data = {}) => vm.$u.http.post('web/order/comment', data); //订åè¯ä»· |
| | | let payOverdueFee = (data = {}) => vm.$u.http.post('web/order/payOverdueFee/'+data.orderId, data); //ç»§ç»åèµ·æ¯ä» |
| | | |
| | | vm.$u.api = { |
| | | payOverdueFee, |
| | | orderComment, |
| | | confirmReceipt, |
| | | cancelOrder, |