浏览代码

Merge branch 'master' of http://git.iamberry.com/hexiugang/iamberry-common-parent

# Conflicts:
#	watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java
liujiankang 5 年之前
父节点
当前提交
5418eb37aa
共有 22 个文件被更改,包括 496 次插入93 次删除
  1. 4 3
      watero-common-tool/src/main/java/com/iamberry/wechat/tools/HttpClient431Util.java
  2. 17 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/order/OrderStatisticsInfo.java
  3. 277 39
      watero-rst-web/src/main/java/com/iamberry/rst/utils/KuaiDi100.java
  4. 4 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java
  5. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java
  6. 4 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java
  7. 18 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml
  8. 18 2
      watero-rst-service/src/main/java/com/iamberry/rst/service/fm/ComplaintSignclosedInfoServiceImpl.java
  9. 1 1
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminCustomerController.java
  10. 3 3
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/dm/DmDealerController.java
  11. 1 1
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/kuaidi/LogisticsController.java
  12. 1 16
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/MQTask.java
  13. 1 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java
  14. 3 2
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java
  15. 1 7
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/scm/AdminScmOrderController.java
  16. 107 5
      watero-rst-web/src/main/java/com/iamberry/rst/utils/OrderUtils.java
  17. 1 0
      watero-rst-web/src/main/java/com/iamberry/rst/utils/SeleOrdeCompUtil.java
  18. 6 6
      watero-rst-web/src/main/resources/dev-jdbc.properties
  19. 0 1
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/logistics/view_logistics.ftl
  20. 2 2
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/dm_order_statistics.ftl
  21. 18 1
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/dayDeliveryNum_list.ftl
  22. 4 4
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_detail.ftl

+ 4 - 3
watero-common-tool/src/main/java/com/iamberry/wechat/tools/HttpClient431Util.java

@@ -1,8 +1,7 @@
 package com.iamberry.wechat.tools;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
+import java.net.HttpURLConnection;
 import java.net.URL;
 import java.security.KeyManagementException;
 import java.security.KeyStore;
@@ -748,4 +747,6 @@ public class HttpClient431Util {
 //        String value = content.val();
     }
 
+
+
 }

+ 17 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/OrderStatisticsInfo.java

@@ -11,6 +11,7 @@ public class OrderStatisticsInfo implements Serializable {
     private List<OrderStatisticsInfo> playSingleList;//打单数量
     private List<OrderStatisticsInfo> outboundList;//出库数量
     private List<CargoInfo> cargoList;//拉货数量
+    private List<OrderStatisticsInfo> logisticsList;//物流数量
     private List<OrderStatisticsInfo> distributionInvalidList;//通知配货后作废
     private List<OrderStatisticsInfo> playSingleInvalidList;//打单后作废
     private List<OrderStatisticsInfo> outboundInvalidNumList;//出库后作废
@@ -20,6 +21,7 @@ public class OrderStatisticsInfo implements Serializable {
     private Integer selectType;//1通知批货时间,2下单时间
     private Integer invalidType;//作废类型 1通知配货后作废 2打单后作废 3出库后作废
     private Integer warehouseId;//发货出库id
+    private String logisticsName;//快递名称
 
     public Date getOrderDate() {
         return orderDate;
@@ -124,4 +126,19 @@ public class OrderStatisticsInfo implements Serializable {
     public void setWarehouseId(Integer warehouseId) {
         this.warehouseId = warehouseId;
     }
+
+    public List<OrderStatisticsInfo> getLogisticsList() {
+        return logisticsList;
+    }
+
+    public void setLogisticsList(List<OrderStatisticsInfo> logisticsList) {
+        this.logisticsList = logisticsList;
+    }
+    public String getLogisticsName() {
+        return logisticsName;
+    }
+
+    public void setLogisticsName(String logisticsName) {
+        this.logisticsName = logisticsName;
+    }
 }

+ 277 - 39
watero-rst-web/src/main/java/com/iamberry/rst/utils/KuaiDi100.java

@@ -1,6 +1,8 @@
-package com.iamberry.rst.utils;
+package com.iamberry.rst.core.tools;
 
+import com.alibaba.fastjson.JSON;
 import com.iamberry.wechat.tools.HttpClient431Util;
+import com.iamberry.wechat.tools.NameUtils;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 import org.jsoup.Jsoup;
@@ -9,13 +11,13 @@ import org.jsoup.nodes.Element;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
-
+import org.apache.commons.codec.binary.Base64;
 import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
+import java.net.*;
+import java.security.MessageDigest;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * Created by Administrator on 2017/8/15.
@@ -29,22 +31,13 @@ public class KuaiDi100 {
 
     private static String key = "29833628d495d7a5";//授权密匙key    百度的
   /*private static String key = "06d6c2ea1bdb4ee9";//授权密匙key  自己的*/
-                    /*<option value="sto">申通快递</option>
-					<option value="yto">圆通快递</option>
-					<option value="sf">顺丰快递</option>
-					<option value="ems">邮政EMS</option>
-					<option value="zto">中通快递</option>
-					<option value="zjs">宅急送</option>
-					<option value="yunda">韵达快递</option>
-					<option value="cces">cces快递</option>
-					<option value="pick">上门提货</option>
-					<option value="htky">汇通快递</option>
-					<option value="ttkdex">天天快递</option>
-					<option value="stars">星晨急便</option>
-					<option value="jd">京东快递</option>
-					<option value="01">其他</option>
-					<option value="02">上门送货</option>*/
 
+    //快递鸟 电商ID
+    private static final String EBusinessID="1343593";
+    //电商加密私钥,快递鸟提供
+    private static final String AppKey="3597c368-9dc0-40b5-9cf2-86d9cb90e38a";
+    // 正式环境地址:
+    private static final String ReqURL= "http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
   public String logisticsConversions(String code){
       if(code == null || code.equals("")){
           return null;
@@ -140,10 +133,7 @@ public class KuaiDi100 {
      *	邮政国际包裹	youzhengguoji
      *	EMS国际快递	emsguoji
      */
-    public static void main(String[] agrs){
-        KuaiDi100 kuaidi = new KuaiDi100();
-        System.out.println(kuaidi.selectCourierCompany2("yuantong","yt9053971537384"));
-    }
+
     /**
      * 查询快递信息
      * @param com 快递公司代码
@@ -452,24 +442,92 @@ public class KuaiDi100 {
     public JSONObject selectCourierCompany2(String code,String num) {
         num = num.toLowerCase();
         JSONObject json = null;
-        try {
-            Map<String, String> params = new HashMap<String, String>();
-            String cookie = "BAIDUID=E157C876272626E1F7F498C10A6A3F00:FG=1";
-            String url = "https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?cb=cb&appid=4001&nu="+num+"&com="+code;
-            // 发送请求
-            String html = HttpClient431Util.doGet2(params, url,cookie);
-            String content = html.substring(7, html.length());
-            content = content.substring(0, content.length()-1);
-            json = JSONObject.fromObject(content);
-            /*String s = json.getString("status");*/
-        } catch (Exception e) {
-            e.printStackTrace();
-            LOGGER.info("=========快递单号:"+code+";处理报错");
+        if(code.toLowerCase().equals("sf") || code.toLowerCase().equals("shunfeng")){
+            KuaiDi100 kuaidi = new KuaiDi100();
+            String result = null;
+            try {
+                result = kuaidi.selectCourierSF("SF", num);
+                if(result != null){
+                    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    JSONObject jn = JSONObject.fromObject(result);
+                    String state = jn.getString("State");
+                    JSONArray context = jn.getJSONArray("Traces");
+                    Map<String,Object> msg = new HashMap<>();
+                    Map<String,Map<String,Object>> data = new HashMap<>();
+                    Map<String,Object> info = new HashMap<>();
+                    List<HashMap> list = new ArrayList<>();
+                    for(int i=context.size()-1;i > 0;i--){
+                        JSONObject job = context.getJSONObject(i);
+                        HashMap<String,String> map = new HashMap<>();
+
+                        map.put("time",String.valueOf((sf.parse(job.getString("AcceptTime")).getTime()) /1000));
+                        map.put("desc",job.getString("AcceptStation"));
+                        list.add(map);
+                    }
+                    info.put("state",state);
+                    info.put("context",JSONArray.fromObject(list));
+                    data.put("info",info);
+                    msg.put("status","0");
+                    msg.put("data",JSONObject.fromObject(data));
+                    json = JSONObject.fromObject(msg);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }else{
+            try {
+                Map<String, String> params = new HashMap<String, String>();
+                String cookie = "BAIDUID=E157C876272626E1F7F498C10A6A3F00:FG=1";
+                String url = "https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?cb=cb&appid=4001&nu="+num+"&com="+code;
+                // 发送请求
+                String html = HttpClient431Util.doGet2(params, url,cookie);
+                String content = html.substring(7, html.length());
+                content = content.substring(0, content.length()-1);
+                json = JSONObject.fromObject(content);
+            } catch (Exception e) {
+                e.printStackTrace();
+                LOGGER.info("=========快递单号:"+code+";处理报错");
+            }
         }
+
+
         return json;
     }
 
     /**
+     * 百度快递查询签收时间
+     * 根据物流单号查询快递信息 state 0在途,1揽收,2疑难,3签收,4退签,5派件,6退回
+     * @param code
+     * @return
+     */
+    public Date selectCourierSignTime(String code, String num){
+        JSONObject json = null;
+        for(int i = 0; i < 3; i++){
+            json = selectCourierCompany2(code,num);
+            if(json.getString("status").equals("0")){
+                break;
+            }
+        }
+            if(json.getString("status").equals("0")){
+                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                JSONObject data = JSONObject.fromObject(json.getString("data"));
+                JSONObject info = JSONObject.fromObject(data.getString("info"));
+                JSONArray context = info.getJSONArray("context");
+                String state = info.getString("state");
+                Date time = null;
+                if(state.equals("3")){
+                    try {
+                        time = sf.parse(sf.format(new Date(Long.parseLong(JSONObject.fromObject(context.get(0)).getString("time")) * 1000)));
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                    }
+                }
+                return time;
+            }
+        return null;
+    }
+
+    /**
      * 写入文件
      * @param path
      * @param s
@@ -495,5 +553,185 @@ public class KuaiDi100 {
         }
     }
 
+    /**
+     * MD5加密
+     * @param str 内容
+     * @param charset 编码方式
+     * @throws Exception
+     */
+    @SuppressWarnings("unused")
+    private static String MD5(String str, String charset) throws Exception {
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        md.update(str.getBytes(charset));
+        byte[] result = md.digest();
+        StringBuilder sb = new StringBuilder(32);
+        for (byte aResult : result) {
+            int val = aResult & 0xff;
+            if (val <= 0xf) {
+                sb.append("0");
+            }
+            sb.append(Integer.toHexString(val));
+        }
+        return sb.toString().toLowerCase();
+    }
 
+    /**
+     * base64编码
+     * @param str 内容
+     * @param charset 编码方式
+     * @throws UnsupportedEncodingException
+     */
+    private static String base64(String str, String charset) throws UnsupportedEncodingException {
+        return Base64.encodeBase64String(str.getBytes(charset));
+    }
+
+    @SuppressWarnings("unused")
+    private static String urlEncoder(String str, String charset) throws UnsupportedEncodingException{
+        return URLEncoder.encode(str, charset);
+    }
+
+    /**
+     * 电商Sign签名生成
+     * @param content 内容
+     * @param keyValue Appkey
+     * @param charset 编码方式
+     * @throws UnsupportedEncodingException ,Exception
+     * @return DataSign签名
+     */
+    /*@SuppressWarnings("unused")*/
+    private static String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception {
+        if (keyValue != null)
+        {
+            return base64(MD5(content + keyValue, charset), charset);
+        }
+        return base64(MD5(content, charset), charset);
+    }
+    /**
+     * (快递鸟dema)向指定 URL 发送POST方法的请求
+     * @param url 发送请求的 URL
+     * @param params 请求的参数集合
+     * @return 远程资源的响应结果
+     */
+    private String sendPost(String url, Map<String, String> params) {
+        OutputStreamWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try {
+            URL realUrl = new URL(url);
+            HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
+            // 发送POST请求必须设置如下两行
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            // POST方法
+            conn.setRequestMethod("POST");
+            // 设置通用的请求属性
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent",
+                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+            conn.connect();
+            // 获取URLConnection对象对应的输出流
+            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
+            // 发送请求参数
+            if (params != null) {
+                StringBuilder param = new StringBuilder();
+                for (Map.Entry<String, String> entry : params.entrySet()) {
+                    if(param.length()>0){
+                        param.append("&");
+                    }
+                    param.append(entry.getKey());
+                    param.append("=");
+                    param.append(entry.getValue());
+                    //System.out.println(entry.getKey()+":"+entry.getValue());
+                }
+                //System.out.println("param:"+param.toString());
+                out.write(param.toString());
+            }
+            // flush输出流的缓冲
+            out.flush();
+            // 定义BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //使用finally块来关闭输出流、输入流
+        finally{
+            try{
+                if(out!=null){
+                    out.close();
+                }
+                if(in!=null){
+                    in.close();
+                }
+            }
+            catch(IOException ex){
+                ex.printStackTrace();
+            }
+        }
+        return result.toString();
+    }
+    /**
+     * 快递鸟查询顺风物流信息
+     * 根据物流单号查询快递信息
+     * @param
+     * @return
+     */
+    public String selectCourierSF(String expCode, String expNo) throws Exception{
+        String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + "','LogisticCode':'" + expNo + "'}";
+
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
+        params.put("EBusinessID", EBusinessID);
+        params.put("RequestType", "1002");
+        String dataSign=encrypt(requestData, AppKey, "UTF-8");
+        params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
+        params.put("DataType", "2");
+
+        String result=HttpClient431Util.doPost(params,ReqURL);
+
+        //根据公司业务处理返回的信息......
+
+        return result;
+    }
+
+    public static void main(String[] agrs){
+        KuaiDi100 kuaidi = new KuaiDi100();
+        /*System.out.println(kuaidi.selectCourierCompany2("yuantong","yt9053971537384"));*/
+        /*System.out.println(kuaidi.selectCourierSignTime("yuantong","yt9053971537384"));*/
+        /*System.out.println(kuaidi.selectCourierSF("106494280800","SF","291003792023"));*/
+        try {
+            String result = kuaidi.selectCourierSF("SF", "288904538945");
+            System.out.print(result);
+            if(result != null){
+                JSONObject jn = JSONObject.fromObject(result);
+                String state = jn.getString("State");
+                JSONArray context = jn.getJSONArray("Traces");
+                Map<String,String> msg = new HashMap<>();
+                Map<String,Map<String,String>> data = new HashMap<>();
+                Map<String,String> info = new HashMap<>();
+                List<HashMap> list = new ArrayList<>();
+                for(int i=context.size()-1;i > 0;i--){
+                    JSONObject job = context.getJSONObject(i);
+                    HashMap<String,String> map = new HashMap<>();
+                    map.put("time",job.getString("AcceptTime"));
+                    map.put("desc",job.getString("AcceptStation"));
+                    list.add(map);
+                    System.out.println(JSON.toJSONString(list)) ;
+                }
+                info.put("state",state);
+                info.put("context",JSON.toJSONString(list));
+                data.put("info",info);
+                msg.put("status","0");
+                msg.put("data",JSON.toJSONString(data));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 4 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java

@@ -532,4 +532,8 @@ public interface SalesOrderService {
      *作废数量,根据下单时间查询
      */
     List<OrderStatisticsInfo> listSendInvalidNum(OrderStatisticsInfo orderStatisticsInfo);
+    /**
+     *通知配货数量查询各物流发货数量
+     */
+    List<OrderStatisticsInfo> listDeliveryLogisticsNum(OrderStatisticsInfo orderStatisticsInfo);
 }

+ 5 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -1835,6 +1835,11 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         return salesOrderMapper.listSendInvalidNum(orderStatisticsInfo);
     }
 
+    @Override
+    public List<OrderStatisticsInfo> listDeliveryLogisticsNum(OrderStatisticsInfo orderStatisticsInfo) {
+        return salesOrderMapper.listDeliveryLogisticsNum(orderStatisticsInfo);
+    }
+
     /***
      * 计算金额
      * @param salesOrder

+ 4 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java

@@ -462,4 +462,8 @@ public interface SalesOrderMapper {
      *作废数量,根据下单时间查询
      */
     List<SalesOrder> listSalesOrderbyCustomerId(Integer customerId);
+    /**
+     *通知配货数量查询各物流发货数量
+     */
+    List<OrderStatisticsInfo> listDeliveryLogisticsNum(OrderStatisticsInfo orderStatisticsInfo);
 }

+ 18 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml

@@ -2065,6 +2065,24 @@
         </where>
         GROUP BY DATE_FORMAT( sales_deliver_time, "%Y-%m-%d" )
     </select>
+
+    <!--查询个快递发货总数-->
+    <select id="listDeliveryLogisticsNum" parameterType="OrderStatisticsInfo" resultType="OrderStatisticsInfo">
+        SELECT li.logistics_name logisticsName,count(1) distributionNum from tb_rst_logistics_info li
+        LEFT JOIN tb_rst_sales_order_info oi on li.logistics_rst_code = oi.sales_post_firm
+        <where>
+            sales_status != 3
+            and sales_warehouse_id = #{warehouseId}
+            <if test="selectType != null and selectType != '' and selectType == 1 ">
+                AND sales_distribution_time &gt; #{startDate} AND sales_distribution_time &lt; #{endDate}
+            </if>
+            <if test="selectType != null and selectType != '' and selectType == 2 ">
+                AND sales_send_time &gt; #{startDate} AND sales_send_time &lt; #{endDate}
+            </if>
+        </where>
+        GROUP BY li.logistics_rst_code
+    </select>
+
     <!--作废数量,根据通知配货时间查询-->
     <select id="listDistributionInvalidNum" parameterType="OrderStatisticsInfo" resultType="OrderStatisticsInfo">
         SELECT sales_distribution_time AS orderDate,count(1) AS distributionNum from tb_rst_sales_order_info

+ 18 - 2
watero-rst-service/src/main/java/com/iamberry/rst/service/fm/ComplaintSignclosedInfoServiceImpl.java

@@ -11,8 +11,11 @@ import com.iamberry.rst.core.order.ProductColor;
 import com.iamberry.rst.core.page.PageRequest;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.sys.Admin;
+import com.iamberry.rst.core.tools.KuaiDi100;
+import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.cm.InventoryService;
 import com.iamberry.rst.faces.fm.ComplaintSignclosedInfoService;
+import com.iamberry.rst.faces.order.LogisticsInfoService;
 import com.iamberry.rst.faces.sms.SmsService;
 import com.iamberry.rst.service.cm.mapper.*;
 import com.iamberry.rst.service.fm.mapper.*;
@@ -23,6 +26,7 @@ import com.iamberry.rst.util.ProduceNoUtil;
 import com.iamberry.rst.util.SmsConfig;
 import com.iamberry.wechat.tools.NameUtils;
 import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -63,7 +67,10 @@ public class ComplaintSignclosedInfoServiceImpl implements ComplaintSignclosedIn
 
     @Autowired
     private SalesOrderMapper salesOrderMapper;
-
+    @Autowired
+    private KuaiDi100 kuaidi100;
+    @Autowired
+    private LogisticsInfoService logisticsInfoService;
     @Override
     @Transactional
     public Integer insert(ComplaintSignclosedInfo record,
@@ -641,12 +648,21 @@ public class ComplaintSignclosedInfoServiceImpl implements ComplaintSignclosedIn
 
             //同步客诉寄回状态和物流信息
             ComplaintSignclosedInfo signclosedInfo = complaintSignclosedInfoMapper.getSignclosedById(record.getSignclosedId());
+            //调快递查询接口获取签收时间
+            LogisticsInfo log = new LogisticsInfo();
+            log.setLogisticsRstCode(signclosedInfo.getSignclosedLogistics());
+            List<LogisticsInfo> listlog = logisticsInfoService.getLogisticsInfoList(log);
+            Date signTime = kuaidi100.selectCourierSignTime(listlog.get(0).getLogisticsOnehundredCode(),signclosedInfo.getSignclosedLogisticsNumber());
             SendbackInfo sendbackInfo = new SendbackInfo();
             sendbackInfo.setSendbackId(signclosedInfo.getSendbackId());
             sendbackInfo.setSendbackStatus(3);
             sendbackInfo.setSendbackLogisticsCompany(signclosedInfo.getSignclosedLogistics());
             sendbackInfo.setSendbackLogisticsNo(signclosedInfo.getSignclosedLogisticsNumber());
-            sendbackInfo.setSendbackSignTime(signclosedInfo.getSignclosedDate());
+            if (signTime != null) {
+                sendbackInfo.setSendbackSignTime(signTime);
+            }else{
+                sendbackInfo.setSendbackSignTime(new Date());
+            }
             if(record.getSendbackIsUse() != null){
                 sendbackInfo.setSendbackIsUse(record.getSendbackIsUse());
             }

+ 1 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminCustomerController.java

@@ -11,6 +11,7 @@ import com.iamberry.rst.core.order.ProductColor;
 import com.iamberry.rst.core.order.ProductType;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.sys.Admin;
+import com.iamberry.rst.core.tools.KuaiDi100;
 import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.address.AddressService;
 import com.iamberry.rst.faces.cm.*;
@@ -39,7 +40,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;

+ 3 - 3
watero-rst-web/src/main/java/com/iamberry/rst/controllers/dm/DmDealerController.java

@@ -795,7 +795,7 @@ public class DmDealerController {
         titles.add("商品颜色");
         titles.add("商品数量");
         titles.add("商品小结");
-        titles.add("成本小结");
+        /*titles.add("成本小结");*/
 
         titles.add("打单状态");
         titles.add("打单日期");
@@ -845,13 +845,13 @@ public class DmDealerController {
                     row.add(itemTotal);
                 }
 
-                if(salesOrder.getItemCostTotal() == null){
+                /*if(salesOrder.getItemCostTotal() == null){
                     row.add(0);
                 }else{
                     Double itemCostTotal = Double.valueOf(salesOrder.getItemCostTotal());
                     itemCostTotal = itemCostTotal/100;
                     row.add(itemCostTotal);
-                }
+                }*/
 
                 String salesShoppingStatus = "";
                 if(salesOrder.getSalesShippingStatus() == null){

+ 1 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/kuaidi/LogisticsController.java

@@ -2,7 +2,7 @@ package com.iamberry.rst.controllers.kuaidi;
 
 import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.order.LogisticsInfoService;
-import com.iamberry.rst.utils.KuaiDi100;
+import com.iamberry.rst.core.tools.KuaiDi100;
 import com.iamberry.rst.utils.ResultMsg;
 import com.iamberry.wechat.tools.NameUtils;
 import com.iamberry.wechat.tools.ResultInfo;

+ 1 - 16
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/MQTask.java

@@ -1,38 +1,26 @@
 package com.iamberry.rst.controllers.mq;
 
 import com.iamberry.rst.controllers.sys.SysController;
-import com.iamberry.rst.core.address.City;
-import com.iamberry.rst.core.address.District;
-import com.iamberry.rst.core.address.Province;
 import com.iamberry.rst.core.cm.*;
 import com.iamberry.rst.core.fm.ComplaintDetectInfo;
-import com.iamberry.rst.core.order.EfastOrder;
-import com.iamberry.rst.core.order.ProductColor;
 import com.iamberry.rst.core.order.ProductType;
 import com.iamberry.rst.core.sms.OrderMessage;
 import com.iamberry.rst.core.sms.SmsMessage;
 import com.iamberry.rst.core.sys.Admin;
-import com.iamberry.rst.core.sys.Relu;
-import com.iamberry.rst.core.sys.SysConfig;
 import com.iamberry.rst.faces.address.AddressService;
 import com.iamberry.rst.faces.cm.*;
 import com.iamberry.rst.faces.fm.ComplaintDetectInfoService;
 import com.iamberry.rst.faces.order.EfastOrderService;
-import com.iamberry.rst.faces.product.ProductService;
 import com.iamberry.rst.faces.sms.MessageService;
 import com.iamberry.rst.faces.sms.SmsService;
 import com.iamberry.rst.faces.sys.SysConfigService;
 import com.iamberry.rst.faces.sys.SysService;
-import com.iamberry.rst.service.cm.mapper.CustomerInfoMapper;
-import com.iamberry.rst.service.sms.mapper.MessageMapper;
 import com.iamberry.rst.util.SmsConfig;
 import com.iamberry.rst.utils.EfastUtil;
-import com.iamberry.rst.utils.KuaiDi100;
-import com.iamberry.wechat.tools.DateTimeUtil;
+import com.iamberry.rst.core.tools.KuaiDi100;
 import com.iamberry.wechat.tools.ResponseJson;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
-import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
@@ -44,11 +32,8 @@ import org.springframework.stereotype.Component;
 import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 
 import static com.iamberry.rst.util.SmsConfig.*;
-import static com.iamberry.rst.utils.KuaiDi100.replace;
 
 
 @Component(value="mqTask")

+ 1 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java

@@ -10,6 +10,7 @@ import com.iamberry.rst.core.dm.DealerProductStore;
 import com.iamberry.rst.core.order.*;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.sys.Admin;
+import com.iamberry.rst.core.tools.KuaiDi100;
 import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.cm.CompanyInfoService;
 import com.iamberry.rst.faces.cm.SalesOrderService;

+ 3 - 2
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -1247,6 +1247,7 @@ public class AwaitSendController {
      * @param
      * @return
      */
+    @ResponseBody
     @RequestMapping("/dayDeliveryNum")
     @RequiresPermissions("salesOrder:dayDeliveryNum:deliver")
     public ModelAndView  dayDeliveryNum(HttpServletRequest request) throws ParseException {
@@ -1318,9 +1319,9 @@ public class AwaitSendController {
                 info1.setEndDate(DatetimeUtil.getDayEnd(info.getOrderDate()));
                 info.setPlaySingleList(salesOrderService.listPlaySingleNum(info1));
                 //查询打单数量
-                info1.setStartDate(DatetimeUtil.getDayBegin(info.getOrderDate()));
-                info1.setEndDate(DatetimeUtil.getDayEnd(info.getOrderDate()));
                 info.setOutboundList(salesOrderService.listOutboundNum(info1));
+                //查询各物流数量
+                info.setLogisticsList(salesOrderService.listDeliveryLogisticsNum(info1));
 
                 if(orderStatisticsInfo.getSelectType() == 1){
                     info1.setInvalidType(1);

+ 1 - 7
watero-rst-web/src/main/java/com/iamberry/rst/controllers/scm/AdminScmOrderController.java

@@ -1,11 +1,6 @@
 package com.iamberry.rst.controllers.scm;
 
 import com.alibaba.fastjson.JSONObject;
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.EncodeHintType;
-import com.google.zxing.MultiFormatWriter;
-import com.google.zxing.WriterException;
-import com.google.zxing.common.BitMatrix;
 import com.iamberry.rst.core.cm.StoreShip;
 import com.iamberry.rst.core.order.EOrderRequestData;
 import com.iamberry.rst.core.order.ProductColor;
@@ -14,6 +9,7 @@ import com.iamberry.rst.core.scm.ScmOrderInfo;
 import com.iamberry.rst.core.scm.ScmOrderItem;
 import com.iamberry.rst.core.sys.Admin;
 import com.iamberry.rst.core.tools.LogisticsInfo;
+import com.iamberry.rst.utils.OrderUtils;
 import com.iamberry.rst.faces.cm.StoreShipService;
 import com.iamberry.rst.faces.order.LogisticsInfoService;
 import com.iamberry.rst.faces.product.ProductService;
@@ -37,9 +33,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 import org.springframework.web.servlet.ModelAndView;
 
-import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletRequest;
-import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;

+ 107 - 5
watero-rst-web/src/main/java/com/iamberry/rst/utils/OrderUtils.java

@@ -7,14 +7,12 @@ import com.iamberry.wechat.tools.NameUtils;
 import com.sun.org.apache.xml.internal.security.utils.Base64;
 
 
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.net.URLEncoder;
 import java.security.MessageDigest;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -108,4 +106,108 @@ public class OrderUtils {
         }
         return base64(MD5(content, charset), charset);
     }
+    /**
+     * (快递鸟dema)向指定 URL 发送POST方法的请求
+     * @param url 发送请求的 URL
+     * @param params 请求的参数集合
+     * @return 远程资源的响应结果
+     */
+    private String sendPost(String url, Map<String, String> params) {
+        OutputStreamWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try {
+            URL realUrl = new URL(url);
+            HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
+            // 发送POST请求必须设置如下两行
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            // POST方法
+            conn.setRequestMethod("POST");
+            // 设置通用的请求属性
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent",
+                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+            conn.connect();
+            // 获取URLConnection对象对应的输出流
+            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
+            // 发送请求参数
+            if (params != null) {
+                StringBuilder param = new StringBuilder();
+                for (Map.Entry<String, String> entry : params.entrySet()) {
+                    if(param.length()>0){
+                        param.append("&");
+                    }
+                    param.append(entry.getKey());
+                    param.append("=");
+                    param.append(entry.getValue());
+                    //System.out.println(entry.getKey()+":"+entry.getValue());
+                }
+                //System.out.println("param:"+param.toString());
+                out.write(param.toString());
+            }
+            // flush输出流的缓冲
+            out.flush();
+            // 定义BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //使用finally块来关闭输出流、输入流
+        finally{
+            try{
+                if(out!=null){
+                    out.close();
+                }
+                if(in!=null){
+                    in.close();
+                }
+            }
+            catch(IOException ex){
+                ex.printStackTrace();
+            }
+        }
+        return result.toString();
+    }
+    /**
+     * 快递鸟查询顺风物流信息
+     * 根据物流单号查询快递信息
+     * @param
+     * @return
+     */
+    public String selectCourierSF(String expCode, String expNo) throws Exception{
+        String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + "','LogisticCode':'" + expNo + "'}";
+
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
+        params.put("EBusinessID", EBusinessID);
+        params.put("RequestType", "1002");
+        String dataSign=encrypt(requestData, AppKey, "UTF-8");
+        params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
+        params.put("DataType", "2");
+
+        String result=sendPost(ReqURL, params);
+
+        //根据公司业务处理返回的信息......
+
+        return result;
+    }
+    //DEMO
+    public static void main(String[] args) {
+        OrderUtils thiss = new OrderUtils();
+        try {
+            String result = thiss.selectCourierSF("SF", "291003792023");
+            System.out.print(result);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 1 - 0
watero-rst-web/src/main/java/com/iamberry/rst/utils/SeleOrdeCompUtil.java

@@ -2,6 +2,7 @@ package com.iamberry.rst.utils;
 
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.page.PagedResult;
+import com.iamberry.rst.core.tools.KuaiDi100;
 import com.iamberry.rst.faces.cm.SalesOrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;

+ 6 - 6
watero-rst-web/src/main/resources/dev-jdbc.properties

@@ -1,13 +1,13 @@
 jdbc.driver=com.mysql.jdbc.Driver
 ##### \uFFFD\uFFFD\u02BD\uFFFD\uFFFD\uFFFD\uFFFD ####
-#jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
-#jdbc.username=watero_rst
-#jdbc.password=watero_RST
+jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
+jdbc.username=watero_rst
+jdbc.password=watero_RST
 ##### \uFFFD\uFFFD\u02BD\uFFFD\uFFFD\uFFFD\uFFFD end #####
 
-jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst_test_2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
-jdbc.username=rst_test
-jdbc.password=RST_test
+#jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst_test_2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
+#jdbc.username=rst_test
+#jdbc.password=RST_test
 
 #pool settings
 jdbc.pool.init=1

+ 0 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/cm/logistics/view_logistics.ftl

@@ -241,7 +241,6 @@
                     $("#billName").text(name);
                     $("#billCode").text(billCode);
                     if(dt.data.status=="0"){
-                    var renewal_data = [];
                     renewal_data = dt.data.data.info.context;
                     var table = document.body.querySelector('.my-tab-view-pull');
                     mui(renewal_data).each(function(index) {

+ 2 - 2
watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/dm_order_statistics.ftl

@@ -164,7 +164,7 @@
                 <th width="65">是否认领</th>
                 <th width="75">姓名/电话</th>
                 <th width="50">产品</th>
-                <th width="65">成本汇总</th>
+                <#--<th width="65"> 成本汇总</th>-->
                 <th width="65">销售金额</th>
                 <th width="65">发货状态</th>
                 <th width="65">发货时间</th>
@@ -204,7 +204,7 @@
                         </#if>
                     </td>
 
-                    <td>${((order.costTotal/100)?string("0.##"))!''}</td>
+                    <#--<td>${((order.costTotal/100)?string("0.##"))!''}</td>-->
                     <td>${((order.salesPayMoney/100)?string("0.##"))!''}</td>
 
                     <td>

+ 18 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/dayDeliveryNum_list.ftl

@@ -82,6 +82,7 @@
                     <th width="50">通知配货后作废</th>
                     <th width="50">打单后作废</th>
                     <th width="50">出库后作废</th>
+                    <th width="50">物流数量</th>
                     <th width="50">快递拉货</th>
                 </tr>
                 </thead>
@@ -168,6 +169,22 @@
               </#if>
             </td>
             <td class="text-c" width="100">
+              <#if info.logisticsList?? && (info.logisticsList?size > 0)>
+                    <table class="table table-border table-bordered table-bg table-hover table-sort">
+                        <tbody>
+
+                        <#list info.logisticsList as logisti>
+                        <tr>
+                            <td class="text-c" width="120">${logisti.logisticsName!''}</td>
+                            <td class="text-c" width="100">${logisti.distributionNum!''}</td>
+                        </tr>
+                        </#list>
+
+                    </tbody>
+                 </table>
+              </#if>
+            </td>
+            <td class="text-c" width="100">
               <#if info.cargoList?? && (info.cargoList?size > 0)>
                     <table class="table table-border table-bordered table-bg table-hover table-sort">
                         <tbody>
@@ -186,7 +203,7 @@
         </tr>
         </#list>
         <#else>
-            <tr><td colspan="8" class="td-manage text-c" >暂时没有打单信息!</td></tr>
+            <tr><td colspan="9" class="td-manage text-c" >暂时没有打单信息!</td></tr>
         </#if>
          </tbody>
         </table>

+ 4 - 4
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_detail.ftl

@@ -154,8 +154,8 @@
                         <th>产品市场价(¥)</th>
                         <th>产品折扣价(¥)</th>
                         <th>小结(¥)</th>
-                        <th>成本(¥)</th>
-                        <th>成本小结(¥)</th>
+                        <#--<th>成本(¥)</th>
+                        <th>成本小结(¥)</th>-->
                         <th>未退货数量</th>
                         <th>已退货数量</th>
                         <th>产品总数</th>
@@ -169,8 +169,8 @@
                                 <td>${((item.itemProductPrice/100)?string("0.##"))!''}</td>
                                 <td>${((item.itemProductDiscount/100)?string("0.##"))!''}</td>
                                 <td>${((item.itemTotal/100)?string("0.##"))!''}</td>
-                                <td>${((item.itemCost/100)?string("0.##"))!''}</td>
-                                <td>${((item.itemCostTotal/100)?string("0.##"))!''}</td>
+                                <#--<td>${((item.itemCost/100)?string("0.##"))!''}</td>
+                                <td>${((item.itemCostTotal/100)?string("0.##"))!''}</td>-->
                                 <td>${item.itemNum-item.itemReturnNum}</td>
                                 <td>${item.itemReturnNum}</td>
                                 <td>${item.itemNum}</td>