ソースを参照

配送费计算/代码整理

licailing 5 年 前
コミット
82f6d77cc8
66 ファイル変更729 行追加570 行削除
  1. 530 0
      src/main/java/com/izouma/dingdong/config/ksher_pay_sdk.java
  2. 0 1
      src/main/java/com/izouma/dingdong/domain/BankCard.java
  3. 0 8
      src/main/java/com/izouma/dingdong/domain/Coupon.java
  4. 0 2
      src/main/java/com/izouma/dingdong/domain/WithdrawApply.java
  5. 0 1
      src/main/java/com/izouma/dingdong/domain/backstage/Banner.java
  6. 0 1
      src/main/java/com/izouma/dingdong/domain/backstage/ChatWords.java
  7. 0 3
      src/main/java/com/izouma/dingdong/domain/backstage/MerchantNature.java
  8. 2 0
      src/main/java/com/izouma/dingdong/domain/backstage/Priority.java
  9. 0 1
      src/main/java/com/izouma/dingdong/domain/backstage/Promote.java
  10. 0 1
      src/main/java/com/izouma/dingdong/domain/backstage/Tag.java
  11. 0 1
      src/main/java/com/izouma/dingdong/domain/merchant/Goods.java
  12. 0 1
      src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java
  13. 1 1
      src/main/java/com/izouma/dingdong/domain/rider/DeliveryFee.java
  14. 0 1
      src/main/java/com/izouma/dingdong/domain/rider/Rider.java
  15. 0 1
      src/main/java/com/izouma/dingdong/domain/user/Address.java
  16. 0 3
      src/main/java/com/izouma/dingdong/domain/user/ShoppingCart.java
  17. 0 35
      src/main/java/com/izouma/dingdong/dto/CategoryDTO.java
  18. 0 46
      src/main/java/com/izouma/dingdong/dto/MerchantClassificationDTO.java
  19. 0 1
      src/main/java/com/izouma/dingdong/dto/MerchantDTO.java
  20. 0 87
      src/main/java/com/izouma/dingdong/dto/OrderDTO.java
  21. 0 21
      src/main/java/com/izouma/dingdong/dto/OrderGoodsSpecDTO.java
  22. 0 3
      src/main/java/com/izouma/dingdong/dto/RiderDistanceDTO.java
  23. 0 19
      src/main/java/com/izouma/dingdong/enums/MerchantSort.java
  24. 0 1
      src/main/java/com/izouma/dingdong/repo/ChatRepo.java
  25. 0 1
      src/main/java/com/izouma/dingdong/repo/MoneyRecordRepo.java
  26. 3 0
      src/main/java/com/izouma/dingdong/repo/OrderInfoRepo.java
  27. 0 4
      src/main/java/com/izouma/dingdong/repo/backstage/CategoryRepo.java
  28. 0 4
      src/main/java/com/izouma/dingdong/repo/backstage/ChatWordsRepo.java
  29. 1 2
      src/main/java/com/izouma/dingdong/repo/backstage/PriorityRepo.java
  30. 0 1
      src/main/java/com/izouma/dingdong/repo/merchant/AutomaticResponseRepo.java
  31. 2 2
      src/main/java/com/izouma/dingdong/repo/rider/DeliveryFeeRepo.java
  32. 0 2
      src/main/java/com/izouma/dingdong/service/AppraisalService.java
  33. 0 1
      src/main/java/com/izouma/dingdong/service/BankCardService.java
  34. 0 1
      src/main/java/com/izouma/dingdong/service/MoneyRecordService.java
  35. 15 27
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  36. 0 2
      src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java
  37. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/BannerService.java
  38. 0 2
      src/main/java/com/izouma/dingdong/service/backstage/BlackListService.java
  39. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/CategoryService.java
  40. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/ChatWordsService.java
  41. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/ComplaintService.java
  42. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/CooperateApplyService.java
  43. 0 79
      src/main/java/com/izouma/dingdong/service/backstage/DeliveryFeeService.java
  44. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/EmailService.java
  45. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/MerchantNatureService.java
  46. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/PriorityService.java
  47. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/PromoteService.java
  48. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/TagService.java
  49. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/TimeTagService.java
  50. 0 1
      src/main/java/com/izouma/dingdong/service/backstage/VoiceService.java
  51. 0 1
      src/main/java/com/izouma/dingdong/service/merchant/AutomaticResponseService.java
  52. 1 5
      src/main/java/com/izouma/dingdong/service/merchant/FullReductionService.java
  53. 1 1
      src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java
  54. 0 1
      src/main/java/com/izouma/dingdong/service/merchant/GoodsSpecificationService.java
  55. 3 7
      src/main/java/com/izouma/dingdong/service/merchant/MerchantClassificationService.java
  56. 0 5
      src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java
  57. 0 1
      src/main/java/com/izouma/dingdong/service/merchant/SalesService.java
  58. 120 0
      src/main/java/com/izouma/dingdong/service/rider/DeliveryFeeService.java
  59. 4 2
      src/main/java/com/izouma/dingdong/service/rider/RiderService.java
  60. 0 1
      src/main/java/com/izouma/dingdong/service/user/AddressService.java
  61. 0 1
      src/main/java/com/izouma/dingdong/service/user/FeedbackService.java
  62. 0 1
      src/main/java/com/izouma/dingdong/service/user/MyCollectionService.java
  63. 27 148
      src/main/java/com/izouma/dingdong/service/user/ShoppingCartService.java
  64. 4 4
      src/main/java/com/izouma/dingdong/web/rider/DeliveryFeeController.java
  65. 10 8
      src/main/java/com/izouma/dingdong/web/user/ShoppingCartController.java
  66. 5 5
      src/test/java/com/izouma/dingdong/service/ShoppingCartServiceTest.java

+ 530 - 0
src/main/java/com/izouma/dingdong/config/ksher_pay_sdk.java

@@ -0,0 +1,530 @@
+package com.izouma.dingdong.config;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.http.NameValuePair;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+
+import java.security.Signature;
+import java.security.KeyFactory;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.*;
+
+/***
+ * ksher 生存的RSA私钥是pkcs1格式,即-----BEGIN RSA PRIVATE KEY----- 开头的。java需要pkcs8格式的,
+ * 是以-----BEGIN PRIVATE KEY-----开通的,以下命令可以装有openssl环境的linux机器上转化pcks1到pcks8格式。
+ * 需要pkcs8格式的可以调用命令行转换:
+ * openssl pkcs8 -topk8 -inform PEM -in private.key -outform pem -nocrypt -out pkcs8.pem
+ * 1、PKCS1私钥生成
+ * openssl genrsa -out private.pem 1024
+ * 2、PKCS1私钥转换为PKCS8(该格式一般Java调用)
+ * openssl pkcs8 -topk8 -inform PEM -in private.pem -outform pem -nocrypt -out pkcs8.pem
+ */
+public class ksher_pay_sdk {
+
+    private String appid;
+    private String privateKey;
+    private String PayDomain = "https://api.mch.ksher.net/KsherPay";
+    private String GateDomain = "https://gateway.ksher.com/api";
+    //定义加密方式
+    private final String KEY_RSA = "RSA";
+    //定义签名算法
+    private final String KEY_RSA_SIGNATURE = "MD5withRSA";
+    private final java.text.SimpleDateFormat timeStampFormat = new java.text.SimpleDateFormat("yyyyMMddHHmmss");
+    private final String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL7955OCuN4I8eYNL/mixZWIXIgCvIVEivlxqdpiHPcOLdQ2RPSx/pORpsUu/E9wz0mYS2PY7hNc2mBgBOQT+wUCAwEAAQ==";
+
+    public ksher_pay_sdk(String appid, String privateKey) {
+        this.appid = appid;
+        this.privateKey = privateKey;
+    }
+
+    /**
+     * sign byte to hex
+     * @param bytes
+     * @return
+     */
+    public String bytesToHex(byte[] bytes) {
+        StringBuilder buf = new StringBuilder(bytes.length * 2);
+        for (byte b : bytes) { // 使用String的format方法进行转换
+            buf.append(String.format("%02x", new Integer(b & 0xff)));
+        }
+        return buf.toString();
+    }
+
+    /**
+     * hex string to byte
+     * @param sign
+     * @return
+     */
+    public byte[] unHexVerify(String sign) {
+        int length = sign.length();
+        byte[] result = new byte[length / 2];
+        for (int i = 0; i < length; i += 2)
+            result[i / 2] = (byte) ((Character.digit(sign.charAt(i), 16) << 4) + Character.digit(sign.charAt(i + 1), 16));
+        return result;
+    }
+
+    /**
+     * 请求参数排序
+     * @param params
+     * @return
+     */
+    public byte[] getParamsSort(Map params)
+    {
+        TreeMap<String, String> sortParas = new TreeMap<String, String>();
+        sortParas.putAll(params);
+        Iterator<String> it = sortParas.keySet().iterator();
+        StringBuilder encryptedStr = new StringBuilder();
+        while (it.hasNext()) {
+            String key = it.next();
+            encryptedStr.append(key).append("=").append(params.get(key));
+        }
+        return encryptedStr.toString().getBytes();
+    }
+
+    /**
+     * 签名
+     * @param params
+     * @return
+     */
+    public String KsherSign(Map params) throws Exception {
+        //将私钥加密数据字符串转换为字节数组
+        byte[] data = getParamsSort(params);
+        // 解密由base64编码的私钥
+        byte[] privateKeyBytes = Base64.decodeBase64(this.privateKey.getBytes());
+        // 构造PKCS8EncodedKeySpec对象
+        PKCS8EncodedKeySpec pkcs = new PKCS8EncodedKeySpec(privateKeyBytes);
+        // 指定的加密算法
+        KeyFactory factory = KeyFactory.getInstance(KEY_RSA);
+        // 取私钥对象
+        PrivateKey key = factory.generatePrivate(pkcs);
+        // 用私钥对信息生成数字签名
+        Signature signature = Signature.getInstance(KEY_RSA_SIGNATURE);
+        signature.initSign(key);
+        signature.update(data);
+        byte[] sign_byte = signature.sign();
+        //String sing_str = new String(Base64.encodeBase64(signature.sign()));
+        return bytesToHex(sign_byte);
+    }
+    /**
+     * 校验数字签名
+     * @param data
+     * @param sign
+     * @return 校验成功返回true,失败返回false
+     */
+    public boolean KsherVerify(Map data, String sign) throws Exception {
+        boolean flag = false;
+        //将私钥加密数据字符串转换为字节数组
+        byte[] dataByte = getParamsSort(data);
+        // 解密由base64编码的公钥
+        byte[] publicKeyBytes = Base64.decodeBase64(publicKey.getBytes());
+        // 构造X509EncodedKeySpec对象
+        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
+        // 指定的加密算法
+        KeyFactory factory = KeyFactory.getInstance(KEY_RSA);
+        // 取公钥对象
+        PublicKey key = factory.generatePublic(keySpec);
+        // 用公钥验证数字签名
+        Signature signature = Signature.getInstance(KEY_RSA_SIGNATURE);
+        signature.initVerify(key);
+        signature.update(dataByte);
+        return signature.verify(unHexVerify(sign));
+    }
+
+    /**
+     * post请求(用于key-value格式的参数)
+     *
+     * @param url
+     * @param params
+     * @return
+     */
+    public String KsherPost(String url, Map params) throws Exception {
+        HttpClient client = new DefaultHttpClient();
+        HttpPost post = new HttpPost(PayDomain + url);
+        //设置公共参数
+        params.put("appid", this.appid);
+        params.put("nonce_str", RandomStringUtils.randomAlphanumeric(4));
+        params.put("time_stamp", timeStampFormat.format(new Date()));
+
+        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
+        for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
+            String name = (String) iter.next();
+            String value = String.valueOf(params.get(name));
+            urlParameters.add(new BasicNameValuePair(name, value));
+        }
+        String sign = KsherSign(params);
+        urlParameters.add(new BasicNameValuePair("sign", sign));
+        post.setEntity(new UrlEncodedFormEntity(urlParameters));
+        HttpResponse response = client.execute(post);
+        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+        StringBuffer result = new StringBuffer();
+        String line = "";
+        while ((line = rd.readLine()) != null) {
+            result.append(line);
+        }
+        rd.close();
+        System.out.println(result.toString());
+
+        JSONObject json = JSONObject.parseObject(result.toString());
+        boolean isVerify = KsherVerify(json.getJSONObject("data"), json.getString("sign"));
+        if(isVerify){
+            return result.toString();
+        }else{
+            throw new Exception("verify signature failed");
+        }
+    }
+
+    /**
+     * 商户扫用户(B扫C)
+     * @param mchOrderNo 商户订单号
+     * @param feeType 支付币种 'THB'泰铢 'CNY'人民币
+     * @param authCode 支付条码
+     * @param channel 支付通道 wechat aplipay
+     * @param operatorId 操作员编号 可选
+     * @param totalFee 支付金额
+     * @return
+     */
+    public String QuickPay(String mchOrderNo, String feeType, String authCode, String channel, String operatorId, Integer totalFee) {
+        try {
+            Map<String, String> paras = new HashMap<String, String>();
+            paras.put("mch_order_no", mchOrderNo);
+            paras.put("total_fee", totalFee.toString());
+            paras.put("fee_type", feeType);
+            paras.put("auth_code", authCode);
+            paras.put("channel", channel);
+            paras.put("operator_id", operatorId);
+            return KsherPost(PayDomain + "/quick_pay", paras);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return ex.getMessage();
+        }
+    }
+
+    /**
+     * C扫B支付
+     * 必传参数
+     * 	mch_order_no
+     * 	total_fee
+     * 	fee_type
+     * 	channel
+     * 选传参数
+     * 	redirect_url
+     * 	notify_url
+     * 	paypage_title
+     * 	operator_id
+     * @return
+     */
+    public String JsApiPay(String mchOrderNo,String feeType,String channel,Integer totalFee){
+        try {
+            Map<String, String> paras = new HashMap<String, String>();
+            paras.put("mch_order_no", mchOrderNo);
+            paras.put("total_fee", totalFee.toString());
+            paras.put("fee_type", feeType);
+            paras.put("channel", channel);
+            return KsherPost(PayDomain + "/jsapi_pay", paras);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return ex.getMessage();
+        }
+    }
+    /**
+    动态码支付
+    :param kwargs:
+    必传参数
+        mch_order_no
+        total_fee
+        fee_type
+        channel
+    选传参数
+        redirect_url
+        notify_url
+        paypage_title
+        product
+        attach
+        operator_id
+        device_id
+        img_type
+    :return:
+    **/
+    public String NativePay(String mchOrderNo, String feeType, String channel,Integer totalFee) throws Exception {
+        Map<String, String> paras = new HashMap<>();
+        paras.put("mch_order_no", mchOrderNo);
+        paras.put("total_fee", totalFee.toString());
+        paras.put("fee_type", feeType);
+        paras.put("channel", channel);
+        return KsherPost(PayDomain + "/native_pay", paras);
+    }
+    /**
+    小程序支付
+    :param kwargs:
+    必传参数
+        mch_order_no
+        total_fee
+        fee_type
+        channel
+        sub_openid
+        channel_sub_appid
+    选传参数
+        redirect_url
+        notify_url
+        paypage_title
+        product
+        operator_id
+    :return:
+    **/
+    public String MiniproPay(String mchOrderNo, String feeType, String channel, String subOpenid, String channelSubAppId, Integer totalFee) throws Exception{
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mchOrderNo);
+        paras.put("total_fee", totalFee.toString());
+        paras.put("fee_type", feeType);
+        paras.put("channel", channel);
+        paras.put("sub_openid", subOpenid);
+        paras.put("channel_sub_appid", channelSubAppId);
+        return KsherPost(PayDomain + "/mini_program_pay", paras);
+    }
+    /**
+    app支付
+    :param kwargs:
+    必传参数
+        mch_order_no
+        total_fee
+        fee_type
+        channel
+        sub_openid
+        channel_sub_appid
+    选传参数
+        redirect_url
+        notify_url
+        paypage_title
+        product
+        attach
+        operator_id
+        refer_url 仅当channel为alipay时需要
+    :return:
+    **/
+    public String AppPay(String mchOrderNo,String feeType,String channel,String subOpenid,String channelSubAppId, Integer totalFee) throws Exception {
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mchOrderNo);
+        paras.put("total_fee", totalFee.toString());
+        paras.put("fee_type", feeType);
+        paras.put("channel", channel);
+        paras.put("sub_openid", subOpenid);
+        paras.put("channel_sub_appid", channelSubAppId);
+        return KsherPost(PayDomain + "/app_pay", paras);
+    }
+    /**
+    H5支付,仅支持channel=alipay
+    :param kwargs:
+    必传参数
+        mch_order_no
+        total_fee
+        fee_type
+        channel
+    选传参数
+        redirect_url
+        notify_url
+        paypage_title
+        product
+        attach
+        operator_id
+        device_id
+        refer_url
+    :return:
+    **/
+    public String WapPay(String mchOrderNo,String feeType,String channel, Integer totalFee) throws Exception {
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mchOrderNo);
+        paras.put("total_fee", totalFee.toString());
+        paras.put("fee_type", feeType);
+        paras.put("channel", channel);
+        return KsherPost(PayDomain + "/wap_pay", paras);
+    }
+    /**
+    PC网站支付,仅支持channel=alipay
+    :param kwargs:
+    必传参数
+        mch_order_no
+        total_fee
+        fee_type
+        channel
+    选传参数
+        redirect_url
+        notify_url
+        paypage_title
+        product
+        attach
+        operator_id
+        device_id
+        refer_url
+    :return:
+    **/
+    public String WepPay(String mchOrderNo,String feeType,String channel,Integer totalFee)throws Exception{
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mchOrderNo);
+        paras.put("total_fee", totalFee.toString());
+        paras.put("fee_type", feeType);
+        paras.put("channel", channel);
+        return KsherPost(PayDomain + "/wap_pay", paras);
+    }
+    /**
+    订单查询
+    :param kwargs:
+    必传参数
+        mch_order_no、ksher_order_no、channel_order_no三选一
+    :return:
+    **/
+    public String OrderQuery(String mchOrderNo) throws Exception{
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mchOrderNo);
+        return KsherPost(PayDomain + "/order_query", paras);
+    }
+    /**
+    订单关闭
+    :param kwargs:
+    必传参数
+        mch_order_no、ksher_order_no、channel_order_no三选一
+    选传参数
+        operator_id
+    :return:
+    **/
+    public String OrderClose(String mchOrderNo) throws Exception {
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mchOrderNo);
+        return KsherPost(PayDomain + "/order_close", paras);
+    }
+    /**
+    订单撤销
+    :param kwargs:
+    必传参数
+        mch_order_no、ksher_order_no、channel_order_no三选一
+    选传参数
+        operator_id
+    :return:
+    **/
+    public String OrderReverse(String mchOrderNo) throws Exception{
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mchOrderNo);
+        return KsherPost(PayDomain + "/order_reverse", paras);
+    }
+    /**
+    订单退款
+    :param kwargs:
+    必传参数
+        total_fee
+        fee_type
+        refund_fee
+        mch_refund_no
+        mch_order_no、ksher_order_no、channel_order_no三选一
+    选传参数
+        operator_id
+    :return:
+    **/
+    public String OrderRefund(String mchRefundNo,String feeType,String mchOrderNo,Integer refundFee,Integer totalFee) throws Exception {
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_refund_no", mchRefundNo);
+        paras.put("fee_type", feeType);
+        paras.put("mchOrderNo", mchOrderNo);
+        paras.put("refund_fee", refundFee.toString());
+        paras.put("total_fee", totalFee.toString());
+        return KsherPost(PayDomain + "/order_refund", paras);
+    }
+    /**
+    退款查询
+    :param kwargs:
+        必传参数
+            mch_refund_no、ksher_refund_no、channel_refund_no三选一
+            mch_order_no、ksher_order_no、channel_order_no三选一
+    **/
+    public String RefundQuery(String mchRefundNo, String mchOrderNo) throws Exception{
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_refund_no", mchRefundNo);
+        paras.put("mchOrderNo", mchOrderNo);
+        return KsherPost(PayDomain + "/refund_query", paras);
+    }
+    /**
+    汇率查询
+    :param kwargs:
+        必传参数
+        channel
+        fee_type
+        date
+    :return:
+    **/
+    public String RateQuery(String channel, String feeType,String  date) throws Exception{
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("channel", channel);
+        paras.put("fee_type", feeType);
+        paras.put("date", date);
+        return KsherPost(PayDomain + "/rate_query", paras);
+    }
+
+    /**
+    聚合支付商户查询订单支付状态
+    :param kwargs:
+	    必传参数
+		mch_order_no
+    :return:
+    **/
+    public String GatewayOrderQuery(String mch_order_no) throws Exception{
+        Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mch_order_no);
+        return KsherPost(GateDomain + "gateway_order_query", paras);
+    }
+
+    /**
+    聚合支付商户通过API提交数据
+    :param kwargs:
+	    必传参数
+		mch_order_no: 商户订单号 str
+		total_fee: 金额(分) int
+		fee_type: 货币种类 str
+		channel_list: 支付通道 str
+		mch_code: 商户订单code str
+		mch_redirect_url: 商户通知url str
+		mch_redirect_url_fail: 失败回调网址 str
+		product_name: 商品描述 str
+		refer_url: 商家refer str
+		device: 设备名称(PC or H5) str
+	    选传参数
+		color: 横幅颜色 str
+		background: 横幅背景图片 str
+		payment_color: 支付按钮颜色 str
+		ksher_explain: 最下方文案 str
+		hide_explain: 是否显示最下方文案(1显示 0不显示) int
+		expire_time: 订单过期时间(min) int
+		hide_exp_time: 是否显示过期时间(1显示 0不显示) int
+		logo: 横幅logo str
+		lang: 语言(en,cn,th) str
+		shop_name: logo旁文案 str
+		attach: 商户附加信息 str
+    :return:
+	{'pay_content': 'https://gateway.ksher.com/mindex?order_uuid=订单uuid'}
+	**/
+	public String GatewayPay(String mch_order_no, String fee_type, String channel_list, String mch_code, String mch_redirect_url,
+	String mch_redirect_url_fail, String product_name, String refer_url, String device, Integer total_fee) throws Exception{
+	    Map<String, String> paras = new HashMap<String, String>();
+        paras.put("mch_order_no", mch_order_no);
+        paras.put("fee_type", fee_type);
+        paras.put("channel_list", channel_list);
+        paras.put("mch_code", mch_code);
+        paras.put("mch_redirect_url", mch_redirect_url);
+        paras.put("mch_redirect_url_fail", mch_redirect_url_fail);
+        paras.put("product_name", product_name);
+        paras.put("refer_url", refer_url);
+        paras.put("device", device);
+        paras.put("total_fee", total_fee.toString());
+        return KsherPost(GateDomain + "gateway_pay", paras);
+	}
+}

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/BankCard.java

@@ -3,7 +3,6 @@ package com.izouma.dingdong.domain;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
-import org.hibernate.annotations.Where;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;

+ 0 - 8
src/main/java/com/izouma/dingdong/domain/Coupon.java

@@ -1,10 +1,5 @@
 package com.izouma.dingdong.domain;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.izouma.dingdong.converter.LongArrayConverter;
-import com.izouma.dingdong.domain.BaseEntity;
-import com.izouma.dingdong.domain.User;
-import com.izouma.dingdong.domain.backstage.Category;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
@@ -13,9 +8,6 @@ import javax.persistence.*;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.HashSet;
-import java.util.Set;
 
 @EqualsAndHashCode(callSuper = true)
 @Data

+ 0 - 2
src/main/java/com/izouma/dingdong/domain/WithdrawApply.java

@@ -1,8 +1,6 @@
 package com.izouma.dingdong.domain;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
-import com.izouma.dingdong.annotations.Searchable;
-import com.izouma.dingdong.enums.PayMethod;
 import com.izouma.dingdong.enums.WithdrawStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/backstage/Banner.java

@@ -13,7 +13,6 @@ import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/backstage/ChatWords.java

@@ -11,7 +11,6 @@ import lombok.NoArgsConstructor;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.validation.constraints.Size;
-import java.io.Serializable;
 
 @Builder
 @Data

+ 0 - 3
src/main/java/com/izouma/dingdong/domain/backstage/MerchantNature.java

@@ -5,14 +5,11 @@ import com.izouma.dingdong.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
 import org.hibernate.annotations.Where;
 
 import javax.persistence.*;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
-import java.util.List;
 
 @EqualsAndHashCode(callSuper = true)
 @Data

+ 2 - 0
src/main/java/com/izouma/dingdong/domain/backstage/Priority.java

@@ -2,6 +2,7 @@ package com.izouma.dingdong.domain.backstage;
 
 
 import com.izouma.dingdong.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -16,6 +17,7 @@ import javax.persistence.Entity;
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
+@ApiModel(value = "优先级的配置")
 public class Priority extends BaseEntity {
 
     //0-商户 1-商品

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/backstage/Promote.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.domain.backstage;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import io.swagger.annotations.ApiModel;

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/backstage/Tag.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.domain.backstage;
 
-import com.izouma.dingdong.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/merchant/Goods.java

@@ -1,7 +1,6 @@
 package com.izouma.dingdong.domain.merchant;
 
 import com.izouma.dingdong.annotations.Searchable;
-import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.enums.ApplyStatus;
 import io.swagger.annotations.ApiModel;

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java

@@ -5,7 +5,6 @@ import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.MerchantNature;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;

+ 1 - 1
src/main/java/com/izouma/dingdong/domain/backstage/DeliveryFee.java → src/main/java/com/izouma/dingdong/domain/rider/DeliveryFee.java

@@ -1,4 +1,4 @@
-package com.izouma.dingdong.domain.backstage;
+package com.izouma.dingdong.domain.rider;
 
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.enums.DeliveryType;

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/rider/Rider.java

@@ -11,7 +11,6 @@ import lombok.NoArgsConstructor;
 import org.hibernate.annotations.Where;
 
 import javax.persistence.*;
-import java.math.BigDecimal;
 
 @Data
 @Entity

+ 0 - 1
src/main/java/com/izouma/dingdong/domain/user/Address.java

@@ -9,7 +9,6 @@ import lombok.*;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import java.io.Serializable;
-import java.math.BigDecimal;
 
 @EqualsAndHashCode(callSuper = true)
 @Data

+ 0 - 3
src/main/java/com/izouma/dingdong/domain/user/ShoppingCart.java

@@ -1,10 +1,7 @@
 package com.izouma.dingdong.domain.user;
 
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
-import com.izouma.dingdong.domain.User;
-import com.izouma.dingdong.domain.merchant.Merchant;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;

+ 0 - 35
src/main/java/com/izouma/dingdong/dto/CategoryDTO.java

@@ -1,35 +0,0 @@
-package com.izouma.dingdong.dto;
-
-import com.izouma.dingdong.domain.merchant.Merchant;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@ApiModel(value = "分类信息")
-public class CategoryDTO {
-
-    @ApiModelProperty(value = "分类ID")
-    private Long id;
-
-    @ApiModelProperty(value = "分类名称")
-    private String name;
-
-    @ApiModelProperty(value = "父级ID")
-    private Long parentId;
-
-    @ApiModelProperty(value = "下级")
-    private List<CategoryDTO> children;
-
-    @ApiModelProperty(value = "用户")
-    private List<Merchant> merchants;
-
-}

+ 0 - 46
src/main/java/com/izouma/dingdong/dto/MerchantClassificationDTO.java

@@ -1,46 +0,0 @@
-package com.izouma.dingdong.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.Column;
-import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.util.Set;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@ApiModel(value = "商家自定义分类")
-public class MerchantClassificationDTO implements Serializable {
-
-    private Long id;
-
-    @ApiModelProperty(value = "名称", name = "name")
-    @Column(length = 50)
-    @Size(max = 50)
-    private String name;
-
-    @ApiModelProperty(value = "排序", name = "sort")
-    private Integer sort;
-
-    @ApiModelProperty(value = "商户ID", name = "merchantId")
-    private Long merchantId;
-
-
-    @ApiModelProperty(value = "商品列表", name = "goodsList")
-    private String goodsIds;
-
-
-    @ApiModelProperty(value = "是否开启", name = "isOpen")
-    private Boolean isOpen;
-
-    @ApiModelProperty(value = "是否显示", name = "isShow")
-    private Boolean isShow;
-
-}

+ 0 - 1
src/main/java/com/izouma/dingdong/dto/MerchantDTO.java

@@ -1,7 +1,6 @@
 package com.izouma.dingdong.dto;
 
 import com.izouma.dingdong.annotations.Searchable;
-import com.izouma.dingdong.domain.Verified;
 import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.MerchantNature;
 import com.izouma.dingdong.domain.merchant.FullReduction;

+ 0 - 87
src/main/java/com/izouma/dingdong/dto/OrderDTO.java

@@ -1,87 +0,0 @@
-package com.izouma.dingdong.dto;
-
-import com.izouma.dingdong.domain.OrderGoodsSpec;
-import com.izouma.dingdong.domain.User;
-import com.izouma.dingdong.enums.MerchantStatus;
-import com.izouma.dingdong.enums.OrderStatus;
-import com.izouma.dingdong.enums.PayMethod;
-import com.izouma.dingdong.enums.RiderStatus;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.Column;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@ApiModel(value = "")
-public class OrderDTO {
-
-    private String avatar;
-
-    private String nickname;
-
-    @ApiModelProperty(value = "用户地址", name = "address")
-    private String address;
-
-    private String merchantName;
-
-    private String logo;
-
-    private MerchantStatus merchantStatus;
-
-    private String riderName;
-
-    private RiderStatus riderStatus;
-
-    @ApiModelProperty(value = "配送费", name = "deliveryAmount")
-    private BigDecimal deliveryAmount;
-
-    @ApiModelProperty(value = "实付金额", name = "realAmount")
-    private BigDecimal realAmount;
-
-    @ApiModelProperty(value = "支付方式", name = "payMethod")
-    private PayMethod payMethod;
-
-    @Column(nullable = false)
-    @ApiModelProperty(value = "取消订单", name = "cancel")
-    private Boolean cancel = false;
-
-    @ApiModelProperty(value = "下单时间", name = "orderTime")
-    private LocalDateTime orderTime;
-
-    @Column(nullable = false)
-    @ApiModelProperty(value = "已评价", name = "rated")
-    private Boolean rated = false;
-
-    @ApiModelProperty(value = "订单状态", name = "orderStatus")
-    private OrderStatus status;
-
-    @ApiModelProperty(value = "满减", name = "fullReduction")
-    private BigDecimal fullReduction;
-
-    @ApiModelProperty(value = "首单", name = "firstBuy")
-    private BigDecimal firstBuy;
-
-    @ApiModelProperty(value = "红包", name = "redBag")
-    private BigDecimal redBag;
-
-    @ApiModelProperty(value = "新用户", name = "newUser")
-    private BigDecimal newUser;
-
-    @ApiModelProperty(value = "商品及规格")
-    private List<OrderGoodsSpec> orderGoodsSpecs;
-
-
-    private User user;
-
-
-}

+ 0 - 21
src/main/java/com/izouma/dingdong/dto/OrderGoodsSpecDTO.java

@@ -1,21 +0,0 @@
-package com.izouma.dingdong.dto;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-public class OrderGoodsSpecDTO {
-    //新增到购物车时可为空
-    private Long id;
-
-    private Long goodsId;
-
-    private String goodsSpecificationIds;
-
-    private Integer num;
-}

+ 0 - 3
src/main/java/com/izouma/dingdong/dto/RiderDistanceDTO.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.dto;
 
-import com.izouma.dingdong.domain.merchant.GoodsSpecification;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -8,8 +7,6 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.math.BigDecimal;
-import java.util.List;
 
 @Data
 @AllArgsConstructor

+ 0 - 19
src/main/java/com/izouma/dingdong/enums/MerchantSort.java

@@ -1,19 +0,0 @@
-package com.izouma.dingdong.enums;
-
-public enum MerchantSort {
-    //好评优先
-
-    //起送费最低
-
-    //配送最快
-
-    //配送费最低
-
-    //人均最低
-
-    //人均最高
-
-    //距离
-
-    //销量
-}

+ 0 - 1
src/main/java/com/izouma/dingdong/repo/ChatRepo.java

@@ -3,7 +3,6 @@ package com.izouma.dingdong.repo;
 import com.izouma.dingdong.domain.Chat;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
 
 import java.util.List;
 

+ 0 - 1
src/main/java/com/izouma/dingdong/repo/MoneyRecordRepo.java

@@ -7,7 +7,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
-import org.springframework.lang.Nullable;
 
 import javax.transaction.Transactional;
 import java.util.List;

+ 3 - 0
src/main/java/com/izouma/dingdong/repo/OrderInfoRepo.java

@@ -49,4 +49,7 @@ public interface OrderInfoRepo extends JpaRepository<OrderInfo, Long>, JpaSpecif
 
     //骑手未接单的订单
     List<OrderInfo> findAllByStatusAndMerchantStatus(OrderStatus status, MerchantStatus merchantStatus);
+
+    //按商家和时间内的订单泪飙
+    List<OrderInfo> findAllByMerchantIdAndOrderTimeAfter(Long merchantId, LocalDateTime dateTime);
 }

+ 0 - 4
src/main/java/com/izouma/dingdong/repo/backstage/CategoryRepo.java

@@ -3,10 +3,6 @@ package com.izouma.dingdong.repo.backstage;
 import com.izouma.dingdong.domain.backstage.Category;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-
-import javax.transaction.Transactional;
 import java.util.List;
 
 public interface CategoryRepo extends JpaRepository<Category, Long>, JpaSpecificationExecutor<Category> {

+ 0 - 4
src/main/java/com/izouma/dingdong/repo/backstage/ChatWordsRepo.java

@@ -3,10 +3,6 @@ package com.izouma.dingdong.repo.backstage;
 import com.izouma.dingdong.domain.backstage.ChatWords;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-
-import javax.transaction.Transactional;
 
 public interface ChatWordsRepo extends JpaRepository<ChatWords, Long>, JpaSpecificationExecutor<ChatWords> {
 }

+ 1 - 2
src/main/java/com/izouma/dingdong/repo/backstage/PriorityRepo.java

@@ -7,7 +7,6 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
-import java.util.List;
 
 public interface PriorityRepo extends JpaRepository<Priority, Long>, JpaSpecificationExecutor<Priority> {
     @Query("update Priority t set t.enabled = false where t.id = ?1")
@@ -15,7 +14,7 @@ public interface PriorityRepo extends JpaRepository<Priority, Long>, JpaSpecific
     @Transactional
     void deleteById(Long id);
 
-    List<Priority> findAllByTypeOrderByLevel(Integer type);
+//    List<Priority> findAllByTypeOrderByLevel(Integer type);
 
     Priority findByTypeAndLevel(Integer type, Integer level);
 

+ 0 - 1
src/main/java/com/izouma/dingdong/repo/merchant/AutomaticResponseRepo.java

@@ -7,7 +7,6 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
-import java.util.List;
 
 public interface AutomaticResponseRepo extends JpaRepository<AutomaticResponse, Long>, JpaSpecificationExecutor<AutomaticResponse> {
 

+ 2 - 2
src/main/java/com/izouma/dingdong/repo/backstage/DeliveryFeeRepo.java → src/main/java/com/izouma/dingdong/repo/rider/DeliveryFeeRepo.java

@@ -1,6 +1,6 @@
-package com.izouma.dingdong.repo.backstage;
+package com.izouma.dingdong.repo.rider;
 
-import com.izouma.dingdong.domain.backstage.DeliveryFee;
+import com.izouma.dingdong.domain.rider.DeliveryFee;
 import com.izouma.dingdong.enums.DeliveryType;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

+ 0 - 2
src/main/java/com/izouma/dingdong/service/AppraisalService.java

@@ -17,14 +17,12 @@ import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.OrderInfoRepo;
 
 import com.izouma.dingdong.service.merchant.SalesService;
-import com.izouma.dingdong.utils.SecurityUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 

+ 0 - 1
src/main/java/com/izouma/dingdong/service/BankCardService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service;
 
-import com.izouma.dingdong.domain.BankCard;
 import com.izouma.dingdong.repo.BankCardRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/MoneyRecordService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service;
 
-import com.izouma.dingdong.domain.MoneyRecord;
 import com.izouma.dingdong.repo.MoneyRecordRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 15 - 27
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -2,7 +2,6 @@ package com.izouma.dingdong.service;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.rider.Rider;
@@ -11,7 +10,6 @@ import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.domain.user.Address;
 import com.izouma.dingdong.domain.user.UserCoupon;
-import com.izouma.dingdong.dto.OrderDTO;
 import com.izouma.dingdong.dto.UserOrderDTO;
 import com.izouma.dingdong.enums.*;
 import com.izouma.dingdong.exception.BusinessException;
@@ -25,16 +23,13 @@ import com.izouma.dingdong.repo.user.AddressRepo;
 import com.izouma.dingdong.repo.user.UserCouponRepo;
 import com.izouma.dingdong.service.merchant.GoodsService;
 import com.izouma.dingdong.service.merchant.MerchantService;
-import com.izouma.dingdong.service.merchant.MerchantSettingsService;
 import com.izouma.dingdong.service.merchant.SalesService;
-import com.izouma.dingdong.service.rider.RiderService;
-import com.izouma.dingdong.service.user.ShoppingCartService;
+import com.izouma.dingdong.service.rider.DeliveryFeeService;
+import com.izouma.dingdong.utils.MapUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.time.DayOfWeek;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.List;
@@ -58,6 +53,7 @@ public class OrderInfoService {
     private UserCouponRepo          userCouponRepo;
     private OrderRefundApplyService orderRefundApplyService;
     private RiderRepo               riderRepo;
+    private DeliveryFeeService      deliveryFeeService;
 
     /*
     用户下单
@@ -70,6 +66,7 @@ public class OrderInfoService {
         //商家
         MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(cart.getMerchantId())
                 .orElseThrow(new BusinessException("无商家"));
+        Merchant merchant = merchantRepo.findById(cart.getMerchantId()).orElseThrow(new BusinessException("无商家"));
 
         LocalTime startTime = merchantSettings.getStartTime();
         LocalTime endTime = merchantSettings.getEndTime();
@@ -110,9 +107,20 @@ public class OrderInfoService {
 
         //用户地址
         Address address = addressRepo.findById(userOrderDTO.getAddressId()).orElseThrow(new BusinessException("地址不存在"));
+        //判断与商家的距离
+        Double distance = MapUtils.distance(address.getLongitude(), address.getLatitude(), merchant.getLongitude(), merchant
+                .getLatitude());
+        if (distance > 3000) {
+            throw new BusinessException("超出配送距离");
+        }
+
         //orderInfo.setUserAddress(address.getAddressName());
         orderInfo.setUserAddress(address.getAddressInfo());
 
+        //重算配送费
+        BigDecimal deliveryFee = deliveryFeeService.deliveryFee(merchant.getId(), cart.getOrderGoodsSpecs(), address.getLongitude(), address.getLatitude());
+        orderInfo.setDeliveryAmount(deliveryFee);
+
         // 使用优惠券(满减优惠券)
         if (ObjectUtil.isNotNull(userOrderDTO.getUserCouponId())) {
             //Coupon coupon = couponRepo.findById(userOrderDTO.getCouponId()).orElseThrow(new BusinessException("优惠券不存在"));
@@ -272,24 +280,6 @@ public class OrderInfoService {
     }
 
 
-    public OrderDTO toDTO(OrderInfo orderInfo) {
-        OrderDTO dto = new OrderDTO();
-        BeanUtil.copyProperties(orderInfo, dto);
-        User user = userRepo.findById(orderInfo.getUserId()).orElseThrow(new BusinessException("无用户"));
-        dto.setNickname(user.getNickname());
-        dto.setAvatar(user.getAvatar());
-
-        Merchant merchant = merchantRepo.findById(orderInfo.getMerchantId()).orElseThrow(new BusinessException("无商家"));
-        //MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(orderInfo.getMerchantId()).orElseThrow(new BusinessException("无商家"));
-        dto.setMerchantName(merchant.getShowName());
-        dto.setLogo(merchant.getLogo());
-
-        List<OrderGoodsSpec> specs = orderGoodsSpecRepo.findAllByOrderInfoId(orderInfo.getId());
-        dto.setOrderGoodsSpecs(specs);
-
-        return dto;
-    }
-
     /*
     用户取消订单
      */
@@ -340,8 +330,6 @@ public class OrderInfoService {
     用户取消 取消订单
      */
 /*    public void cancelCancelOrder(Long orderId) {
-
-
     }*/
 
 

+ 0 - 2
src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java

@@ -43,8 +43,6 @@ public class OrderRefundApplyService {
     @Autowired
     private RiderService            riderService;
     @Autowired
-    private RiderRepo               riderRepo;
-    @Autowired
     private SysConfigRepo           sysConfigRepo;
 
     private OrderStatus status;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/BannerService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.Banner;
 import com.izouma.dingdong.repo.backstage.BannerRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 2
src/main/java/com/izouma/dingdong/service/backstage/BlackListService.java

@@ -4,14 +4,12 @@ import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.backstage.BlackList;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.rider.Rider;
-import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.backstage.BlackListRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.rider.RiderRepo;
 import lombok.AllArgsConstructor;
-import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/CategoryService.java

@@ -4,7 +4,6 @@ package com.izouma.dingdong.service.backstage;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.backstage.Category;
-import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.dto.MerchantDTO;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/ChatWordsService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.ChatWords;
 import com.izouma.dingdong.repo.backstage.ChatWordsRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/ComplaintService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.Complaint;
 import com.izouma.dingdong.repo.backstage.ComplaintRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/CooperateApplyService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.CooperateApply;
 import com.izouma.dingdong.repo.backstage.CooperateApplyRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 79
src/main/java/com/izouma/dingdong/service/backstage/DeliveryFeeService.java

@@ -1,79 +0,0 @@
-package com.izouma.dingdong.service.backstage;
-
-import com.izouma.dingdong.domain.OrderGoodsSpec;
-import com.izouma.dingdong.domain.OrderInfo;
-import com.izouma.dingdong.domain.backstage.DeliveryFee;
-import com.izouma.dingdong.domain.merchant.Merchant;
-import com.izouma.dingdong.domain.user.Address;
-import com.izouma.dingdong.enums.DeliveryType;
-import com.izouma.dingdong.exception.BusinessException;
-import com.izouma.dingdong.repo.OrderInfoRepo;
-import com.izouma.dingdong.repo.backstage.DeliveryFeeRepo;
-import com.izouma.dingdong.repo.merchant.MerchantRepo;
-import com.izouma.dingdong.repo.user.AddressRepo;
-import com.izouma.dingdong.utils.MapUtils;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-@Service
-@AllArgsConstructor
-public class DeliveryFeeService {
-
-    private DeliveryFeeRepo deliveryFeeRepo;
-    private OrderInfoRepo   orderInfoRepo;
-    private AddressRepo     addressRepo;
-    private MerchantRepo    merchantRepo;
-
-    public void riderAll(Long riderId, OrderInfo orderInfo, Long addressId) {
-
-        List<OrderInfo> infos = orderInfoRepo.findAllByRiderId(riderId);
-
-        BigDecimal amount;
-
-        //算距离
-        Address address = addressRepo.findById(addressId).orElseThrow(new BusinessException("无地址"));
-        Merchant merchant = merchantRepo.findById(orderInfo.getMerchantId()).orElseThrow(new BusinessException("无商户"));
-        Double distance = MapUtils.distance(address.getLongitude(), address.getLatitude(), merchant.getLongitude(), merchant
-                .getLatitude());
-
-        //基础距离费用
-        DeliveryFee baseFee = deliveryFeeRepo.findAllByType(DeliveryType.BASE_FEE).get(0);
-        //基础距离
-        Double baseRule = new Double(baseFee.getRule());
-        //费用
-        amount = new BigDecimal(baseFee.getValue());
-        if (distance > baseRule) {
-            //超出距离费用
-            DeliveryFee excessCost = deliveryFeeRepo.findAllByType(DeliveryType.EXCESS_COST).get(0);
-            //超出距离规格
-            Double excessRule = new Double(excessCost.getRule());
-            //超出费用值
-            BigDecimal excessFee = new BigDecimal(excessCost.getValue());
-            //超出距离规格的几倍 向上取整
-            double rule = (distance - baseRule) / excessRule;
-            double ceil = Math.ceil(rule);
-            //加上超出的费用
-            amount = amount.add(excessFee.multiply(new BigDecimal(ceil)));
-        }
-
-        //配送系数
-        //骑手的商品数量
-        Integer num = 0;
-        List<OrderGoodsSpec> orderGoodsSpecs = orderInfo.getOrderGoodsSpecs();
-        for (OrderGoodsSpec o : orderGoodsSpecs) {
-            num = o.getNum() + num;
-        }
-        for (OrderInfo i : infos) {
-            List<OrderGoodsSpec> specs = i.getOrderGoodsSpecs();
-            for (OrderGoodsSpec o : specs) {
-                num = o.getNum() + num;
-            }
-        }
-
-
-    }
-
-}

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/EmailService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.Email;
 import com.izouma.dingdong.repo.backstage.EmailRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/MerchantNatureService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.MerchantNature;
 import com.izouma.dingdong.repo.backstage.MerchantNatureRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/PriorityService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.Priority;
 import com.izouma.dingdong.repo.backstage.PriorityRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/PromoteService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.Promote;
 import com.izouma.dingdong.repo.backstage.PromoteRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/TagService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.Tag;
 import com.izouma.dingdong.repo.backstage.TagRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/TimeTagService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.TimeTag;
 import com.izouma.dingdong.repo.backstage.TimeTagRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/backstage/VoiceService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.domain.backstage.Voice;
 import com.izouma.dingdong.repo.backstage.VoiceRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/merchant/AutomaticResponseService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.merchant;
 
-import com.izouma.dingdong.domain.merchant.AutomaticResponse;
 import com.izouma.dingdong.repo.merchant.AutomaticResponseRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 1 - 5
src/main/java/com/izouma/dingdong/service/merchant/FullReductionService.java

@@ -1,13 +1,9 @@
 package com.izouma.dingdong.service.merchant;
 
-import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.merchant.FullReduction;
-import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.dto.FullReductionDTO;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.merchant.FullReductionRepo;
-import com.izouma.dingdong.repo.merchant.MerchantRepo;
-import com.izouma.dingdong.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -19,7 +15,7 @@ public class FullReductionService {
 
     private FullReductionRepo fullReductionRepo;
 
-    private MerchantRepo merchantRepo;
+//    private MerchantRepo merchantRepo;
 
     private MerchantService merchantService;
 

+ 1 - 1
src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java

@@ -46,7 +46,7 @@ public class GoodsService {
     private ShoppingCartService           shoppingCartService;
     private OrderGoodsSpecRepo            orderGoodsSpecRepo;
     private ShoppingCartRepo              shoppingCartRepo;
-    private SalesRepo                     salesRepo;
+//    private SalesRepo                     salesRepo;
 
     /**
      * 添加修改商品

+ 0 - 1
src/main/java/com/izouma/dingdong/service/merchant/GoodsSpecificationService.java

@@ -2,7 +2,6 @@ package com.izouma.dingdong.service.merchant;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.merchant.GoodsSpecification;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;

+ 3 - 7
src/main/java/com/izouma/dingdong/service/merchant/MerchantClassificationService.java

@@ -2,21 +2,17 @@ package com.izouma.dingdong.service.merchant;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.converter.LongArrayConverter;
-import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
 import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;
 import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
-import java.util.Set;
 
 @Service
 @AllArgsConstructor
@@ -70,9 +66,9 @@ public class MerchantClassificationService {
         List<Long> goodsIds = converter.convertToEntityAttribute(merchantClassification.getGoodsIds());
 
         List<Goods> goods = CollUtil.newArrayList();
-        goodsIds.forEach(s -> {
-            goods.add(goodsRepo.findById(s).orElse(null));
-        });
+        goodsIds.forEach(s ->
+                goods.add(goodsRepo.findById(s).orElse(null))
+        );
         return goods;
     }
 

+ 0 - 5
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -29,17 +29,12 @@ import com.izouma.dingdong.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Service;
 
 import javax.persistence.criteria.Predicate;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.util.*;
 import java.util.stream.Collectors;
 

+ 0 - 1
src/main/java/com/izouma/dingdong/service/merchant/SalesService.java

@@ -7,7 +7,6 @@ import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.Sales;
 import com.izouma.dingdong.exception.BusinessException;
-import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
 import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;

+ 120 - 0
src/main/java/com/izouma/dingdong/service/rider/DeliveryFeeService.java

@@ -0,0 +1,120 @@
+package com.izouma.dingdong.service.rider;
+
+import com.izouma.dingdong.domain.OrderGoodsSpec;
+import com.izouma.dingdong.domain.rider.DeliveryFee;
+import com.izouma.dingdong.domain.merchant.Merchant;
+import com.izouma.dingdong.enums.DeliveryType;
+import com.izouma.dingdong.exception.BusinessException;
+import com.izouma.dingdong.repo.OrderInfoRepo;
+import com.izouma.dingdong.repo.rider.DeliveryFeeRepo;
+import com.izouma.dingdong.repo.merchant.MerchantRepo;
+import com.izouma.dingdong.utils.MapUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class DeliveryFeeService {
+
+    private DeliveryFeeRepo deliveryFeeRepo;
+    private OrderInfoRepo   orderInfoRepo;
+    private MerchantRepo    merchantRepo;
+
+    //配送费用
+    public BigDecimal deliveryFee(Long merchantId, List<OrderGoodsSpec> orderGoodsSpecs, Double longitude, Double latitude) {
+
+        //基础费用
+        BigDecimal amount;
+        //算距离
+        //Address address = addressRepo.findById(orderInfo.getAddressId()).orElseThrow(new BusinessException("无地址"));
+        Merchant merchant = merchantRepo.findById(merchantId).orElseThrow(new BusinessException("无商户"));
+        Double distance = MapUtils.distance(longitude, latitude, merchant.getLongitude(), merchant
+                .getLatitude());
+        //基础距离费用的配置
+        DeliveryFee baseFee = deliveryFeeRepo.findAllByType(DeliveryType.BASE_FEE).get(0);
+        //基础距离的配置值
+        Double baseRule = new Double(baseFee.getRule());
+        //费用
+        amount = new BigDecimal(baseFee.getValue());
+        if (distance > baseRule) {
+            //超出距离费用的配置
+            DeliveryFee excessCost = deliveryFeeRepo.findAllByType(DeliveryType.EXCESS_COST).get(0);
+            //超出距离规格的配置值
+            Double excessRule = new Double(excessCost.getRule());
+            //超出费用值
+            BigDecimal excessFee = new BigDecimal(excessCost.getValue());
+            //超出距离规格的几倍 向上取整
+            double rule = (distance - baseRule) / excessRule;
+            double ceil = Math.ceil(rule);
+            //加上超出的费用
+            amount = amount.add(excessFee.multiply(new BigDecimal(ceil)));
+        }
+
+        //配送系数
+        //骑手的商品数量
+        Double num = 0.0;
+        //List<OrderGoodsSpec> orderGoodsSpecs = cart.getOrderGoodsSpecs();
+        for (OrderGoodsSpec o : orderGoodsSpecs) {
+            num = o.getNum() + num;
+        }
+        //配送系数的配置
+        DeliveryFee distributionFactor = deliveryFeeRepo.findAllByType(DeliveryType.NUMBER_OF_DELIVERY).get(0);
+        //配送系数的配置值
+        Integer factorRule = new Integer(distributionFactor.getRule());
+        //配送系数
+        //商品数是配送系数的几倍 每超出几件+1 向下取整
+        double factor = Math.floor(num / factorRule) + 1;
+
+        //当前日期时间
+        LocalDateTime now = LocalDateTime.now();
+        //繁忙系数
+        //获取繁忙时间配置
+        DeliveryFee minutes = deliveryFeeRepo.findAllByType(DeliveryType.BUSY_MINUTES).get(0);
+        //繁忙时间配置值
+        long timeRule = Long.parseLong(minutes.getRule());
+        //当前时间内商家的订单列表
+        int merchantOrders = orderInfoRepo.findAllByMerchantIdAndOrderTimeAfter(merchantId, now
+                .plusMinutes(timeRule)).size();
+        //繁忙系数配置列表
+        List<DeliveryFee> merchantCoefficient = deliveryFeeRepo.findAllByType(DeliveryType.BUSYNESS_FACTOR);
+        //从大到小排序
+        merchantCoefficient.sort((a, b) -> b.getValue().compareTo(a.getValue()));
+        //繁忙系数
+        Integer mc = 1;
+        for (DeliveryFee m : merchantCoefficient) {
+            if (merchantOrders > Integer.parseInt(m.getRule())) {
+                mc = m.getValue();
+                break;
+            }
+        }
+
+        //时段系数
+        //当前时间
+        LocalTime nowTime = now.toLocalTime();
+        //时间系数
+        Integer time = 1;
+        //时段系数的配置列表
+        List<DeliveryFee> timeCoefficient = deliveryFeeRepo.findAllByType(DeliveryType.TIME_COEFFICIENT);
+        for (DeliveryFee t : timeCoefficient) {
+            //时间段
+            String rule = t.getRule();
+            String[] arr = rule.split("-");
+            LocalTime startTime = LocalTime.parse(arr[0]);
+            LocalTime endTime = LocalTime.parse(arr[1]);
+            if (!nowTime.isBefore(startTime) && !nowTime.isAfter(endTime)) {
+                time = t.getValue();
+                break;
+            }
+        }
+
+        //配送费用=基础配送费用*配送费件数系数*时段系数*繁忙系数
+        return amount.multiply(new BigDecimal(factor)).multiply(new BigDecimal(mc)).multiply(new BigDecimal(time));
+
+    }
+
+}

+ 4 - 2
src/main/java/com/izouma/dingdong/service/rider/RiderService.java

@@ -37,7 +37,7 @@ public class RiderService {
     private OrderRefundApplyService orderRefundApplyService;
     private SalesService            salesService;
     private AddressRepo             addressRepo;
-    private OrderInfoService        orderInfoService;
+//    private OrderInfoService        orderInfoService;
 
     /*
     骑手签到
@@ -66,6 +66,7 @@ public class RiderService {
                 .fromUserId(fromUserId)
                 .userId(riderUser.getId())
                 .time(LocalDateTime.now())
+                .remark(remark)
                 .enabled(true)
                 .build());
 
@@ -97,6 +98,7 @@ public class RiderService {
             //设置订单状态
             orderInfo.setRiderId(riderId);
             orderInfo.setRiderStatus(RiderStatus.RECEIVED);
+//            orderInfo.setRiderOrderTime(LocalDateTime.now());
             orderInfoRepo.save(orderInfo);
         }
     }
@@ -120,7 +122,7 @@ public class RiderService {
 
         //无骑手,取消订单
         if (CollUtil.isEmpty(map)) {
-            orderInfoService.cancel(orderId, RefundReason.UNABLE_TO_DELIVER, null, null);
+//            orderInfoService.cancel(orderId, RefundReason.UNABLE_TO_DELIVER, null, null);
             return;
         }
 

+ 0 - 1
src/main/java/com/izouma/dingdong/service/user/AddressService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.user;
 
-import com.izouma.dingdong.domain.user.Address;
 import com.izouma.dingdong.repo.user.AddressRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/user/FeedbackService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.user;
 
-import com.izouma.dingdong.domain.user.Feedback;
 import com.izouma.dingdong.repo.user.FeedbackRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 0 - 1
src/main/java/com/izouma/dingdong/service/user/MyCollectionService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.user;
 
-import com.izouma.dingdong.domain.user.MyCollection;
 import com.izouma.dingdong.repo.user.MyCollectionRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;

+ 27 - 148
src/main/java/com/izouma/dingdong/service/user/ShoppingCartService.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.OrderInfo;
+import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.user.ShoppingCart;
 import com.izouma.dingdong.domain.merchant.FullReduction;
 import com.izouma.dingdong.domain.merchant.Goods;
@@ -12,165 +13,34 @@ import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.OrderInfoRepo;
+import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.user.ShoppingCartRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.merchant.FullReductionRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
-import com.izouma.dingdong.service.OrderGoodsSpecService;
-import com.izouma.dingdong.service.merchant.GoodsService;
+import com.izouma.dingdong.service.rider.DeliveryFeeService;
+import com.izouma.dingdong.utils.MapUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import javax.persistence.Column;
 import java.math.BigDecimal;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 @Service
 @AllArgsConstructor
 public class ShoppingCartService {
 
-    private ShoppingCartRepo      shoppingCartRepo;
-    private GoodsRepo             goodsRepo;
-    private UserRepo              userRepo;
-    private OrderInfoRepo         orderInfoRepo;
-    private MerchantSettingsRepo  merchantSettingsRepo;
-    private FullReductionRepo     fullReductionRepo;
-    private OrderGoodsSpecRepo    orderGoodsSpecRepo;
-    private OrderGoodsSpecService orderGoodsSpecService;
-
-    /*
-    创建购物车
-     */
-    public ShoppingCart save(Long userId, OrderGoodsSpec orderGoodsSpec) {
-        Goods goods = goodsRepo.findById(orderGoodsSpec.getGoodsId()).orElseThrow(new BusinessException("无商品"));
-
-        //查看商品库存是否足够
-        //Goods goods = goodsService.buy(orderGoodsSpec.getGoodsId(), orderGoodsSpec.getNum());
-
-        //按商家创建购物车
-        Long merchantId = goods.getMerchantId();
-
-        //商家信息
-        MerchantSettings merchant = merchantSettingsRepo.findByMerchantId(merchantId)
-                .orElseThrow(new BusinessException("无商户"));
-
-        //查找是不是第一次购买
-        userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
-
-        //购物车中是否已有
-        ShoppingCart shoppingCart = shoppingCartRepo.findByUserIdAndMerchantId(userId, merchantId);
-
-        //加规格
-        List<OrderGoodsSpec> specs = CollUtil.newArrayList();
-        specs.add(orderGoodsSpec);
-
-        //减的金额
-        BigDecimal sub = orderGoodsSpec.getGoodsPrice()
-                .subtract(orderGoodsSpec.getGoodsRealPrice())
-                .multiply(BigDecimal.valueOf(orderGoodsSpec.getNum()));
-
-        //包装费
-        BigDecimal packingPrice = BigDecimal.ZERO;
-
-        if (ObjectUtil.isNotNull(goods.getPackingPrice())) {
-            packingPrice = goods.getPackingPrice().multiply(BigDecimal.valueOf(orderGoodsSpec.getNum()));
-        }
-
-        if (ObjectUtil.isNull(shoppingCart)) {
-            shoppingCart = ShoppingCart.builder()
-                    .merchantId(goods.getMerchantId())
-                    .userId(userId)
-                    .goodsTotal(orderGoodsSpec.getGoodsPrice().multiply(BigDecimal.valueOf(orderGoodsSpec.getNum())))
-                    .reducedAmount(sub)
-                    .orderGoodsSpecs(specs)
-                    .packingPrice(packingPrice)
-                    .fullReduction(BigDecimal.ZERO)
-                    .firstBuy(merchant.getFirstOrder())
-                    .enabled(true)
-                    .build();
-            shoppingCart.setId(-1L);
-        } else {
-            //商品总价(原价)
-            shoppingCart.setGoodsTotal(shoppingCart.getGoodsTotal()
-                    .add(orderGoodsSpec.getGoodsPrice().multiply(BigDecimal.valueOf(orderGoodsSpec.getNum()))));
-            //折扣的差价
-            shoppingCart.setReducedAmount(shoppingCart.getReducedAmount().add(sub));
-            specs.addAll(shoppingCart.getOrderGoodsSpecs());
-            shoppingCart.setOrderGoodsSpecs(specs);
-            //包装费
-            shoppingCart.setPackingPrice(shoppingCart.getPackingPrice().add(packingPrice));
-        }
-
-        //查找是不是第一次购买
-        List<OrderInfo> userOrders = orderInfoRepo.findAllByUserId(userId);
-        List<OrderInfo> userOrdersMerchant = orderInfoRepo.findAllByUserIdAndMerchantId(userId, merchantId);
-        //是新用户也是首单
-        if (CollUtil.isEmpty(userOrders)) {
-//            shoppingCart.setNewUser(merchant.getNewUser());
-            shoppingCart.setFirstBuy(merchant.getFirstOrder());
-        } else {
-            //首单
-            if (CollUtil.isEmpty(userOrdersMerchant)) {
-                //shoppingCart.setNewUser(BigDecimal.ZERO);
-                shoppingCart.setFirstBuy(merchant.getFirstOrder());
-            } else {
-                //非首单设置为0
-                //shoppingCart.setNewUser(BigDecimal.ZERO);
-                shoppingCart.setFirstBuy(BigDecimal.ZERO);
-            }
-        }
-
-
-        //获取配送费
-        shoppingCart.setDeliveryAmount(BigDecimal.TEN);
-
-
-        boolean flag = true;
-        //满减
-        if (!goods.getIsFullReduction()) {
-            flag = false;
-        }
-        if (flag) {
-            //参与满减
-            List<FullReduction> fullReductions = fullReductionRepo.findAllByMerchantId(merchantId);
-            fullReductions.sort(Comparator.comparing(FullReduction::getFullAmount));
-            for (FullReduction f : fullReductions) {
-                if (f.getFullAmount().compareTo(shoppingCart.getGoodsTotal()) <= 0) {
-                    shoppingCart.setFullReduction(f.getMinusAmount());
-                    //不是折扣是满减,就置为减去的金额
-                    shoppingCart.setReducedAmount(f.getMinusAmount());
-                }
-            }
-        }
-
-        //商品总价+配送费+包装费
-        BigDecimal total = shoppingCart.getGoodsTotal()
-                .add(shoppingCart.getDeliveryAmount())
-                .add(shoppingCart.getPackingPrice());
-
-        //需要减去的金额=首单+新用户+折扣/满减
-        BigDecimal sub2 = shoppingCart.getReducedAmount();
-        if (ObjectUtil.isNotNull(shoppingCart.getFirstBuy())) {
-            sub2 = sub2.add(shoppingCart.getFirstBuy());
-        }
-
-        //总价-首单-新用户-满减
-        BigDecimal real = total.subtract(sub2);
-
-        shoppingCart.setRealAmount(real);
-        shoppingCart.setReducedAmount(sub2);
-
-        ShoppingCart cart = shoppingCartRepo.save(shoppingCart);
-
-        this.changeOrderSpec(cart, orderGoodsSpec);
-
-        return cart;
-    }
-
+    private ShoppingCartRepo     shoppingCartRepo;
+    private GoodsRepo            goodsRepo;
+    private UserRepo             userRepo;
+    private OrderInfoRepo        orderInfoRepo;
+    private MerchantSettingsRepo merchantSettingsRepo;
+    private FullReductionRepo    fullReductionRepo;
+    private OrderGoodsSpecRepo   orderGoodsSpecRepo;
+    private DeliveryFeeService   deliveryFeeService;
+    private MerchantRepo         merchantRepo;
 
     //改订单规格
     public void changeOrderSpec(ShoppingCart cart, OrderGoodsSpec orderGoodsSpec) {
@@ -281,7 +151,7 @@ public class ShoppingCartService {
 //        }
 
         //获取配送费
-        cart.setDeliveryAmount(BigDecimal.TEN);
+        //cart.setDeliveryAmount(BigDecimal.TEN);
 
         //需要减去的金额=首单+折扣/满减
         BigDecimal sub2 = cart.getReducedAmount();
@@ -298,14 +168,19 @@ public class ShoppingCartService {
     }
 
     //加规格
-    public ShoppingCart add(Long userId, OrderGoodsSpec orderGoodsSpec) {
+    public ShoppingCart add(Long userId, OrderGoodsSpec orderGoodsSpec, Double longitude, Double latitude) {
         //按商家创建购物车
         Long merchantId = goodsRepo.findById(orderGoodsSpec.getGoodsId())
                 .orElseThrow(new BusinessException("无商品"))
                 .getMerchantId();
 
         //商家信息
-        //MerchantSettings merchant = merchantSettingsRepo.findByMerchantId(merchantId).orElseThrow(new BusinessException("无商户"));
+        Merchant merchant = merchantRepo.findById(merchantId).orElseThrow(new BusinessException("无商户"));
+        //判断是否配送距离内
+        Double distance = MapUtils.distance(longitude, latitude, merchant.getLongitude(), merchant.getLatitude());
+        if (distance > 3000) {
+            throw new BusinessException("超出配送范围");
+        }
 
         //查找是不是第一次购买
         userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
@@ -335,6 +210,10 @@ public class ShoppingCartService {
             shoppingCart.setOrderGoodsSpecs(specs);
         }
 
+        //配送费计算
+        BigDecimal deliveryFee = deliveryFeeService.deliveryFee(merchantId, specs, longitude, latitude);
+        shoppingCart.setDeliveryAmount(deliveryFee);
+
         ShoppingCart save = shoppingCartRepo.save(shoppingCart);
 
         this.changeOrderSpec(save, orderGoodsSpec);
@@ -355,7 +234,7 @@ public class ShoppingCartService {
     /*
     再来一单
      */
-    public ShoppingCart again(Long orderId) {
+    public ShoppingCart again(Long orderId, Double longitude, Double latitude) {
         OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
         List<OrderGoodsSpec> orderGoodsSpecs = orderInfo.getOrderGoodsSpecs();
         Long userId = orderInfo.getUserId();
@@ -368,7 +247,7 @@ public class ShoppingCartService {
             spec.setShoppingCartId(null);
             spec.setId(null);
             orderGoodsSpecRepo.save(spec);
-            cart = this.add(userId, spec);
+            cart = this.add(userId, spec, longitude, latitude);
         }
         return cart;
     }

+ 4 - 4
src/main/java/com/izouma/dingdong/web/backstage/DeliveryFeeController.java → src/main/java/com/izouma/dingdong/web/rider/DeliveryFeeController.java

@@ -1,11 +1,11 @@
-package com.izouma.dingdong.web.backstage;
+package com.izouma.dingdong.web.rider;
 
 import com.izouma.dingdong.web.BaseController;
-import com.izouma.dingdong.domain.backstage.DeliveryFee;
-import com.izouma.dingdong.service.backstage.DeliveryFeeService;
+import com.izouma.dingdong.domain.rider.DeliveryFee;
+import com.izouma.dingdong.service.rider.DeliveryFeeService;
 import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.exception.BusinessException;
-import com.izouma.dingdong.repo.backstage.DeliveryFeeRepo;
+import com.izouma.dingdong.repo.rider.DeliveryFeeRepo;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 

+ 10 - 8
src/main/java/com/izouma/dingdong/web/user/ShoppingCartController.java

@@ -33,10 +33,10 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class ShoppingCartController extends BaseController {
 
-    private ShoppingCartService shoppingCartService;
-    private ShoppingCartRepo shoppingCartRepo;
+    private ShoppingCartService   shoppingCartService;
+    private ShoppingCartRepo      shoppingCartRepo;
     private OrderGoodsSpecService orderGoodsSpecService;
-    private OrderGoodsSpecRepo orderGoodsSpecRepo;
+    private OrderGoodsSpecRepo    orderGoodsSpecRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -83,10 +83,11 @@ public class ShoppingCartController extends BaseController {
      */
     @PostMapping("/cart")
     @ApiOperation("选择规格后就加入购物车")
-    public ShoppingCart cart(Long goodsId, String goodsSpecificationIds, Integer num) {
+    public ShoppingCart cart(Long goodsId, String goodsSpecificationIds, Integer num, Double longitude, Double latitude) {
         //无规格时,goodsSpecifications可不填
         OrderGoodsSpec orderGoodsSpec = orderGoodsSpecService.add(goodsId, goodsSpecificationIds, num);
-        return shoppingCartService.add(SecurityUtils.getAuthenticatedUser().getId(), orderGoodsSpec);
+        return shoppingCartService.add(SecurityUtils.getAuthenticatedUser()
+                .getId(), orderGoodsSpec, longitude, latitude);
     }
 
     @GetMapping("/delGoods")
@@ -104,7 +105,8 @@ public class ShoppingCartController extends BaseController {
 
     @GetMapping("/my/merchant")
     public List<OrderGoodsSpec> myMerchant(Long merchantId) {
-        ShoppingCart cart = shoppingCartRepo.findByUserIdAndMerchantId(SecurityUtils.getAuthenticatedUser().getId(), merchantId);
+        ShoppingCart cart = shoppingCartRepo.findByUserIdAndMerchantId(SecurityUtils.getAuthenticatedUser()
+                .getId(), merchantId);
         if (ObjectUtil.isEmpty(cart)) {
             return null;
         }
@@ -128,8 +130,8 @@ public class ShoppingCartController extends BaseController {
 
     @GetMapping("/again")
     @ApiOperation("再来一单")
-    public ShoppingCart again(Long orderId) {
-        return shoppingCartService.again(orderId);
+    public ShoppingCart again(Long orderId, Double longitude, Double latitude) {
+        return shoppingCartService.again(orderId, longitude, latitude);
     }
 
     @GetMapping("/changeNum")

+ 5 - 5
src/test/java/com/izouma/dingdong/service/ShoppingCartServiceTest.java

@@ -21,9 +21,9 @@ import java.util.List;
 public class ShoppingCartServiceTest {
 
     @Autowired
-    private ShoppingCartService shoppingCartService;
+    private ShoppingCartService   shoppingCartService;
     @Autowired
-    private ShoppingCartRepo shoppingCartRepo;
+    private ShoppingCartRepo      shoppingCartRepo;
     @Autowired
     private OrderGoodsSpecService orderGoodsSpecService;
 
@@ -34,7 +34,7 @@ public class ShoppingCartServiceTest {
 
         // OrderGoodsSpec add = orderGoodsSpecRepo.findById(1318L).orElse(null);
 
-        System.out.println(shoppingCartService.save(83L, add));
+        //System.out.println(shoppingCartService.save(83L, add));
     }
 
     @Test
@@ -45,7 +45,7 @@ public class ShoppingCartServiceTest {
     @Test
     public void testSub() {
         OrderGoodsSpec add = orderGoodsSpecService.add(1636L, null, 1);
-        System.out.println(shoppingCartService.add(82L, add));
+        System.out.println(shoppingCartService.add(82L, add, 1.0, 1.0));
         //System.out.println(shoppingCartService.sub(1500L, 83L));
     }
 
@@ -58,7 +58,7 @@ public class ShoppingCartServiceTest {
 
     @Test
     public void testAgain() {
-        System.out.println(shoppingCartService.again(1729L));
+        System.out.println(shoppingCartService.again(1729L,1.0,1.0));
     }
 
     @Test