Bläddra i källkod

新增对接顺丰查询路由接口,以及新增门店是否显示字段逻辑

hyq 6 år sedan
förälder
incheckning
6ff5ddd5d0
55 ändrade filer med 2596 tillägg och 117 borttagningar
  1. 120 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchExpressController.java
  2. 16 0
      kmall-admin/src/main/java/com/kmall/admin/dao/ThirdMerchExpressDao.java
  3. 9 0
      kmall-admin/src/main/java/com/kmall/admin/entity/StoreEntity.java
  4. 215 0
      kmall-admin/src/main/java/com/kmall/admin/entity/ThirdMerchExpressEntity.java
  5. 72 0
      kmall-admin/src/main/java/com/kmall/admin/service/ThirdMerchExpressService.java
  6. 57 14
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  7. 73 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ThirdMerchExpressServiceImpl.java
  8. 7 3
      kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml
  9. 151 0
      kmall-admin/src/main/resources/mybatis/mapper/ThirdMerchExpressDao.xml
  10. 10 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/store.html
  11. 67 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/thirdmerchexpress.html
  12. 33 18
      kmall-admin/src/main/webapp/js/shop/store.js
  13. 163 0
      kmall-admin/src/main/webapp/js/shop/thirdmerchexpress.js
  14. 5 4
      kmall-api/src/main/java/com/kmall/api/api/ApiCatalogController.java
  15. 100 27
      kmall-api/src/main/java/com/kmall/api/api/ApiOrderController.java
  16. 22 0
      kmall-api/src/main/java/com/kmall/api/dao/ApiThirdMerchExpressMapper.java
  17. 10 0
      kmall-api/src/main/java/com/kmall/api/entity/FootprintVo.java
  18. 8 8
      kmall-api/src/main/java/com/kmall/api/entity/OrderVo.java
  19. 9 0
      kmall-api/src/main/java/com/kmall/api/entity/StoreVo.java
  20. 215 0
      kmall-api/src/main/java/com/kmall/api/entity/ThirdMerchExpressVo.java
  21. 21 0
      kmall-api/src/main/java/com/kmall/api/service/ApiThirdMerchExpressService.java
  22. 2 1
      kmall-api/src/main/resources/mybatis/mapper/ApiFootprintMapper.xml
  23. 5 4
      kmall-api/src/main/resources/mybatis/mapper/ApiStoreMapper.xml
  24. 97 0
      kmall-api/src/main/resources/mybatis/mapper/ApiThirdMerchExpressMapper.xml
  25. 1 1
      kmall-api/src/main/resources/mybatis/mapper/ApiThirdMerchantBizMapper.xml
  26. 1 0
      kmall-framework/src/test/resources/applicationContext-test.xml
  27. 0 1
      kmall-manager/pom.xml
  28. 106 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/Base64.java
  29. 63 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/ResultCodeEnum.java
  30. 32 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/SecurityUtil.java
  31. 26 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/ServiceException.java
  32. 128 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/XmlUtil.java
  33. 27 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/BodyEntity.java
  34. 63 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/RouteEntity.java
  35. 35 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/RouteResponseEntity.java
  36. 29 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/SfOrderServiceResponseError.java
  37. 55 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/SfRouteServiceResponseEntity.java
  38. 14 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFDevProperties.java
  39. 14 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFProdProperties.java
  40. 42 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFProperties.java
  41. 41 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFPropertiesBuilder.java
  42. 39 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFPropertiesConfiguration.java
  43. 154 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFUtil.java
  44. 26 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/request/Body.java
  45. 53 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/request/Request.java
  46. 46 0
      kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/request/RouteRequest.java
  47. 24 0
      kmall-manager/src/main/resources/conf/express-sf.properties
  48. 31 0
      kmall-manager/src/main/resources/spring/spring-express-sf.xml
  49. 1 0
      kmall-manager/src/main/resources/spring/spring-manager-context.xml
  50. 1 0
      kmall-manager/src/main/resources/spring/spring-manager-main.xml
  51. 27 9
      wx-mall/pages/goods/goods.js
  52. 2 4
      wx-mall/pages/hotGoods/hotGoods.js
  53. 24 22
      wx-mall/pages/ucenter/addressAdd/addressAdd.js
  54. 1 1
      wx-mall/pages/ucenter/footprint/footprint.js
  55. 3 0
      切换环境需要修改的.md

+ 120 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchExpressController.java

@@ -0,0 +1,120 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.ThirdMerchExpressEntity;
+import com.kmall.admin.service.ThirdMerchExpressService;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.utils.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 第三方商户快递账号表Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-03 16:52:21
+ */
+@Controller
+@RequestMapping("thirdmerchexpress")
+public class ThirdMerchExpressController {
+    @Autowired
+    private ThirdMerchExpressService thirdMerchExpressService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("thirdmerchexpress:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ThirdMerchExpressEntity> thirdMerchExpressList = thirdMerchExpressService.queryList(query);
+        int total = thirdMerchExpressService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(thirdMerchExpressList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("thirdmerchexpress:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        ThirdMerchExpressEntity thirdMerchExpress = thirdMerchExpressService.queryObject(id);
+
+        return R.ok().put("thirdMerchExpress", thirdMerchExpress);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("thirdmerchexpress:save")
+    @ResponseBody
+    public R save(@RequestBody ThirdMerchExpressEntity thirdMerchExpress) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchExpress);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("expressAccount", "商户快递账号");
+        builder.put("expressPwd", "商户快递密码");
+        builder.put("expressCusId", "商户快递月结账号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        thirdMerchExpressService.save(thirdMerchExpress);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("thirdmerchexpress:update")
+    @ResponseBody
+    public R update(@RequestBody ThirdMerchExpressEntity thirdMerchExpress) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchExpress);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("expressAccount", "商户快递账号");
+        builder.put("expressPwd", "商户快递密码");
+        builder.put("expressCusId", "商户快递月结账号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        thirdMerchExpressService.update(thirdMerchExpress);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("thirdmerchexpress:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        thirdMerchExpressService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<ThirdMerchExpressEntity> list = thirdMerchExpressService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 16 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/ThirdMerchExpressDao.java

@@ -0,0 +1,16 @@
+package com.kmall.admin.dao;
+
+
+import com.kmall.admin.entity.ThirdMerchExpressEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * 第三方商户快递账号表Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-03 16:52:21
+ */
+public interface ThirdMerchExpressDao extends BaseDao<ThirdMerchExpressEntity> {
+    ThirdMerchExpressEntity getThirdMerchExpressByThirdCode(String thirdPartyMerchCode);
+}

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/StoreEntity.java

@@ -77,6 +77,15 @@ public class StoreEntity implements Serializable {
     private String thirdPartyMerchCode;
     private String thirdPartyMerchCode;
     private String thirdPartyMerchName;
     private String thirdPartyMerchName;
     private String exprAgreementType;
     private String exprAgreementType;
+    private String isValid;
+
+    public String getIsValid() {
+        return isValid;
+    }
+
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
 
 
     public String getExprAgreementType() {
     public String getExprAgreementType() {
         return exprAgreementType;
         return exprAgreementType;

+ 215 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/ThirdMerchExpressEntity.java

@@ -0,0 +1,215 @@
+package com.kmall.admin.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 第三方商户快递账号表实体
+ * 表名 third_merch_express
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-03 16:52:21
+ */
+public class ThirdMerchExpressEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Integer id;
+    /**
+     * 商户快递账号
+     */
+    private String expressAccount;
+    /**
+     * 商户快递密码
+     */
+    private String expressPwd;
+    /**
+     * 商户快递月结账号
+     */
+    private String expressCusId;
+    /**
+     * 第三方商户代码
+     */
+    private String thirdPartyMerchCode;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    private String thirdPartyMerchName;
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName;
+    }
+
+    /**
+     * 设置:主键
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:主键
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:商户快递账号
+     */
+    public void setExpressAccount(String expressAccount) {
+        this.expressAccount = expressAccount;
+    }
+
+    /**
+     * 获取:商户快递账号
+     */
+    public String getExpressAccount() {
+        return expressAccount;
+    }
+    /**
+     * 设置:商户快递密码
+     */
+    public void setExpressPwd(String expressPwd) {
+        this.expressPwd = expressPwd;
+    }
+
+    /**
+     * 获取:商户快递密码
+     */
+    public String getExpressPwd() {
+        return expressPwd;
+    }
+    /**
+     * 设置:商户快递月结账号
+     */
+    public void setExpressCusId(String expressCusId) {
+        this.expressCusId = expressCusId;
+    }
+
+    /**
+     * 获取:商户快递月结账号
+     */
+    public String getExpressCusId() {
+        return expressCusId;
+    }
+    /**
+     * 设置:第三方商户代码
+     */
+    public void setThirdPartyMerchCode(String thirdPartyMerchCode) {
+        this.thirdPartyMerchCode = thirdPartyMerchCode;
+    }
+
+    /**
+     * 获取:第三方商户代码
+     */
+    public String getThirdPartyMerchCode() {
+        return thirdPartyMerchCode;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getRemark() {
+        return remark;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 72 - 0
kmall-admin/src/main/java/com/kmall/admin/service/ThirdMerchExpressService.java

@@ -0,0 +1,72 @@
+package com.kmall.admin.service;
+
+import com.kmall.admin.entity.ThirdMerchExpressEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 第三方商户快递账号表Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-03 16:52:21
+ */
+public interface ThirdMerchExpressService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param id 主键
+     * @return 实体
+     */
+    ThirdMerchExpressEntity queryObject(Integer id);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<ThirdMerchExpressEntity> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param thirdMerchExpress 实体
+     * @return 保存条数
+     */
+    int save(ThirdMerchExpressEntity thirdMerchExpress);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param thirdMerchExpress 实体
+     * @return 更新条数
+     */
+    int update(ThirdMerchExpressEntity thirdMerchExpress);
+
+    /**
+     * 根据主键删除
+     *
+     * @param id
+     * @return 删除条数
+     */
+    int delete(Integer id);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param ids
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] ids);
+}

+ 57 - 14
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -5,6 +5,11 @@ import com.google.common.collect.Maps;
 import com.kmall.admin.dao.*;
 import com.kmall.admin.dao.*;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
+import com.kmall.manager.manager.express.sf.properties.SFPropertiesBuilder;
+import com.kmall.manager.manager.express.sf.properties.SFUtil;
+import com.kmall.manager.manager.express.sf.entity.SfRouteServiceResponseEntity;
+import com.kmall.manager.manager.express.sf.entity.RouteEntity;
+import com.kmall.manager.manager.express.sf.entity.RouteResponseEntity;
 import com.kmall.manager.manager.print.ticket.TicketPrintUtil;
 import com.kmall.manager.manager.print.ticket.TicketPrintUtil;
 import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
 import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
 import com.kmall.admin.service.OrderService;
 import com.kmall.admin.service.OrderService;
@@ -59,6 +64,8 @@ public class OrderServiceImpl implements OrderService {
     private MngChangeDao mngChangeDao;
     private MngChangeDao mngChangeDao;
     @Autowired
     @Autowired
     private StoreMngChangeDao storeMngChangeDao;
     private StoreMngChangeDao storeMngChangeDao;
+    @Autowired
+    private ThirdMerchExpressDao thirdMerchExpressDao;
 
 
     @Override
     @Override
     public OrderEntity queryObject(Long id) {
     public OrderEntity queryObject(Long id) {
@@ -600,24 +607,60 @@ public class OrderServiceImpl implements OrderService {
             if (StringUtils.isNotEmpty(orderEntity.getShippingCode()) &&
             if (StringUtils.isNotEmpty(orderEntity.getShippingCode()) &&
                 StringUtils.isNotEmpty(orderEntity.getShippingNo()) &&
                 StringUtils.isNotEmpty(orderEntity.getShippingNo()) &&
                 orderProcessRecordEntity.getShipmentStartTime() != null) {
                 orderProcessRecordEntity.getShipmentStartTime() != null) {
-                JSONObject traces =
-                        KdniaoUtil.getOrderTracesByJson(orderEntity.getShippingCode(), orderEntity.getShippingNo());
-                List<Map> mapList = (List<Map>) traces.get("Traces");
-                if (mapList != null && mapList.size() > 0) {
-                    for (Map map : mapList) {
+                if(orderEntity.getShippingCode().equalsIgnoreCase("SF")){
+                    StoreEntity storeEntity = storeDao.queryObject(orderEntity.getStoreId());
+                    if(storeEntity == null){
+                        throw new RRException("查询顺丰订单异常,订单的门店信息不存在");
+                    }
+                    ThirdMerchExpressEntity thirdMerchExpressEntity = thirdMerchExpressDao.getThirdMerchExpressByThirdCode(storeEntity.getThirdPartyMerchCode());
+                    if(thirdMerchExpressEntity == null){
+                        throw new RRException("查询顺丰订单异常,缺失商户快递账号信息");
+                    }
+                    SfRouteServiceResponseEntity entity = SFUtil.routeService(orderEntity.getShippingNo(), thirdMerchExpressEntity.getExpressAccount(),
+                            thirdMerchExpressEntity.getExpressPwd(), SFPropertiesBuilder.instance().getUrl());
+//                    SfRouteServiceResponseEntity entity = SFUtil.routeService("254355029325", thirdMerchExpressEntity.getExpressAccount(),
+//                    thirdMerchExpressEntity.getExpressPwd(), SFPropertiesBuilder.instance().getUrl());//444072971585
+                    if(entity.getHead().equalsIgnoreCase("OK")){
+                        if(entity.getBody() != null && entity.getBody().getRouteResponse() != null){
+                            RouteResponseEntity routeResponseEntity =  entity.getBody().getRouteResponse().get(0);
+                            if(routeResponseEntity != null){
+                                List<RouteEntity> entityList = routeResponseEntity.getRouteResponse();
+                                for (RouteEntity route : entityList) {
+                                    WuliuEntity wuliuEntity = new WuliuEntity();
+                                    wuliuEntity.setAcceptTime(route.getAccept_time());
+                                    wuliuEntity.setAcceptStation(route.getAccept_address() + route.getRemark());
+                                    wuliuEntityList.add(wuliuEntity);
+                                }
+                            }
+                        }else{
+                            WuliuEntity wuliuEntity = new WuliuEntity();
+                            wuliuEntity.setAcceptStation("暂无物流轨迹");
+                            wuliuEntityList.add(wuliuEntity);
+                        }
+                    }else{
+                        throw new RRException("查询顺丰订单异常,"+entity.getErrors());
+                    }
+
+                }else{
+                    JSONObject traces =
+                            KdniaoUtil.getOrderTracesByJson(orderEntity.getShippingCode(), orderEntity.getShippingNo());
+                    List<Map> mapList = (List<Map>) traces.get("Traces");
+                    if (mapList != null && mapList.size() > 0) {
+                        for (Map map : mapList) {
+                            WuliuEntity wuliuEntity = new WuliuEntity();
+                            wuliuEntity.setAcceptTime(map.get("AcceptTime").toString());
+                            wuliuEntity.setAcceptStation(map.get("AcceptStation").toString());
+                            wuliuEntityList.add(wuliuEntity);
+                        }
+                    }
+                    String state = traces.get("State") + "";
+                    if (Dict.logisticsStatus.item_0.getItem().equals(state) && traces.getBoolean("Success")) {
+                        String reason = traces.get("Reason") + "";
                         WuliuEntity wuliuEntity = new WuliuEntity();
                         WuliuEntity wuliuEntity = new WuliuEntity();
-                        wuliuEntity.setAcceptTime(map.get("AcceptTime").toString());
-                        wuliuEntity.setAcceptStation(map.get("AcceptStation").toString());
+                        wuliuEntity.setAcceptStation(reason);
                         wuliuEntityList.add(wuliuEntity);
                         wuliuEntityList.add(wuliuEntity);
                     }
                     }
                 }
                 }
-                String state = traces.get("State") + "";
-                if (Dict.logisticsStatus.item_0.getItem().equals(state) && traces.getBoolean("Success")) {
-                    String reason = traces.get("Reason") + "";
-                    WuliuEntity wuliuEntity = new WuliuEntity();
-                    wuliuEntity.setAcceptStation(reason);
-                    wuliuEntityList.add(wuliuEntity);
-                }
             }
             }
             if (Dict.isSend.item_1.getItem().equalsIgnoreCase(orderProcessRecordEntity.getIsCustomsSend()) &&
             if (Dict.isSend.item_1.getItem().equalsIgnoreCase(orderProcessRecordEntity.getIsCustomsSend()) &&
                 orderProcessRecordEntity.getShipmentStartTime() != null) {
                 orderProcessRecordEntity.getShipmentStartTime() != null) {

+ 73 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/ThirdMerchExpressServiceImpl.java

@@ -0,0 +1,73 @@
+package com.kmall.admin.service.impl;
+
+import com.kmall.admin.dao.ThirdMerchExpressDao;
+import com.kmall.admin.entity.ThirdMerchExpressEntity;
+import com.kmall.admin.service.ThirdMerchExpressService;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.utils.RRException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 第三方商户快递账号表Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-03 16:52:21
+ */
+@Service("thirdMerchExpressService")
+public class ThirdMerchExpressServiceImpl implements ThirdMerchExpressService {
+    @Autowired
+    private ThirdMerchExpressDao thirdMerchExpressDao;
+
+    @Override
+    public ThirdMerchExpressEntity queryObject(Integer id) {
+        return thirdMerchExpressDao.queryObject(id);
+    }
+
+    @Override
+    public List<ThirdMerchExpressEntity> queryList(Map<String, Object> map) {
+        return thirdMerchExpressDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return thirdMerchExpressDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(ThirdMerchExpressEntity thirdMerchExpress) {
+        ThirdMerchExpressEntity thirdMerchExpressEntity = thirdMerchExpressDao.getThirdMerchExpressByThirdCode(thirdMerchExpress.getThirdPartyMerchCode());
+        if(thirdMerchExpressEntity != null){
+            throw new RRException("第三方商户编号为【"+thirdMerchExpressEntity.getThirdPartyMerchCode()+"】的第三方商户快递信息已存在");
+        }
+        thirdMerchExpress.setCreateTime(new Date());
+        thirdMerchExpress.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        return thirdMerchExpressDao.save(thirdMerchExpress);
+    }
+
+    @Override
+    public int update(ThirdMerchExpressEntity thirdMerchExpress) {
+        ThirdMerchExpressEntity thirdMerchExpressEntity = thirdMerchExpressDao.getThirdMerchExpressByThirdCode(thirdMerchExpress.getThirdPartyMerchCode());
+        if (thirdMerchExpressEntity != null && !thirdMerchExpressEntity.getId().equals(thirdMerchExpress.getId())) {
+            throw new RRException("第三方商户编号为【"+thirdMerchExpressEntity.getThirdPartyMerchCode()+"】的第三方商户快递信息已存在");
+        }
+        thirdMerchExpress.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        thirdMerchExpress.setModTime(new Date());
+        return thirdMerchExpressDao.update(thirdMerchExpress);
+    }
+
+    @Override
+    public int delete(Integer id) {
+        return thirdMerchExpressDao.delete(id);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]ids) {
+        return thirdMerchExpressDao.deleteBatch(ids);
+    }
+}

+ 7 - 3
kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml

@@ -26,6 +26,7 @@
 		<result property="thirdPartyMerchCode" column="third_party_merch_code"/>
 		<result property="thirdPartyMerchCode" column="third_party_merch_code"/>
 		<result property="thirdPartyMerchName" column="third_party_merch_name"/>
 		<result property="thirdPartyMerchName" column="third_party_merch_name"/>
 		<result property="exprAgreementType" column="expr_agreement_type"/>
 		<result property="exprAgreementType" column="expr_agreement_type"/>
+		<result property="isValid" column="is_valid"/>
     </resultMap>
     </resultMap>
 
 
 	<select id="queryObject" resultType="com.kmall.admin.entity.StoreEntity">
 	<select id="queryObject" resultType="com.kmall.admin.entity.StoreEntity">
@@ -43,7 +44,7 @@
 			`longitude`,
 			`longitude`,
 			`cover_radius`,expr_agreement_type,
 			`cover_radius`,expr_agreement_type,
 			`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
 			`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
-		moder_sn, mod_time, tstm
+		moder_sn, mod_time, tstm,is_valid
 		from mall_store
 		from mall_store
 		where id = #{id}
 		where id = #{id}
 	</select>
 	</select>
@@ -63,7 +64,7 @@
 		`longitude`,
 		`longitude`,
 		`cover_radius`,expr_agreement_type,
 		`cover_radius`,expr_agreement_type,
 		`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
 		`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
-    moder_sn, mod_time, tstm
+    moder_sn, mod_time, tstm,is_valid
 		from mall_store
 		from mall_store
 		where store_name = #{storeName}
 		where store_name = #{storeName}
 	</select>
 	</select>
@@ -83,7 +84,7 @@
     		`longitude`,
     		`longitude`,
     		`cover_radius`,
     		`cover_radius`,
     		`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,expr_agreement_type,
     		`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,expr_agreement_type,
-		moder_sn, mod_time, tstm
+		moder_sn, mod_time, tstm,is_valid
 		from mall_store
 		from mall_store
 		WHERE 1=1
 		WHERE 1=1
 		<if test="merchSn != null and merchSn.trim() != ''">
 		<if test="merchSn != null and merchSn.trim() != ''">
@@ -147,6 +148,7 @@
 			`latitude`,
 			`latitude`,
 			`longitude`,
 			`longitude`,
 			`cover_radius`,
 			`cover_radius`,
+			is_valid,
 			`remark`,
 			`remark`,
 			third_party_merch_code,
 			third_party_merch_code,
 			third_party_merch_name,
 			third_party_merch_name,
@@ -168,6 +170,7 @@
 			#{latitude},
 			#{latitude},
 			#{longitude},
 			#{longitude},
 			#{coverRadius},
 			#{coverRadius},
+			#{isValid}
 			#{remark},
 			#{remark},
 			#{thirdPartyMerchCode},
 			#{thirdPartyMerchCode},
 			#{thirdPartyMerchName},
 			#{thirdPartyMerchName},
@@ -193,6 +196,7 @@
 			<if test="latitude != null">`latitude` = #{latitude}, </if>
 			<if test="latitude != null">`latitude` = #{latitude}, </if>
 			<if test="longitude != null">`longitude` = #{longitude}, </if>
 			<if test="longitude != null">`longitude` = #{longitude}, </if>
 			<if test="coverRadius != null">`cover_radius` = #{coverRadius}, </if>
 			<if test="coverRadius != null">`cover_radius` = #{coverRadius}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
 			<if test="remark != null">`remark` = #{remark},</if>
 			<if test="remark != null">`remark` = #{remark},</if>
 			<if test="createrSn != null" >creater_sn = #{createrSn},</if>
 			<if test="createrSn != null" >creater_sn = #{createrSn},</if>
 			<if test="createTime != null" >create_time = #{createTime},</if>
 			<if test="createTime != null" >create_time = #{createTime},</if>

+ 151 - 0
kmall-admin/src/main/resources/mybatis/mapper/ThirdMerchExpressDao.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.ThirdMerchExpressDao">
+
+    <resultMap type="com.kmall.admin.entity.ThirdMerchExpressEntity" id="thirdMerchExpressMap">
+        <result property="id" column="id"/>
+        <result property="expressAccount" column="express_account"/>
+        <result property="expressPwd" column="express_pwd"/>
+        <result property="expressCusId" column="express_cus_id"/>
+        <result property="thirdPartyMerchCode" column="third_party_merch_code"/>
+        <result property="remark" column="remark"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="thirdPartyMerchName" column="thirdPartyMerchName"/>
+
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.ThirdMerchExpressEntity">
+		select
+			`id`,
+			`express_account`,
+			`express_pwd`,
+			`express_cus_id`,
+			`third_party_merch_code`,
+			`remark`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from third_merch_express
+		where id = #{id}
+	</select>
+
+	<select id="getThirdMerchExpressByThirdCode" resultType="com.kmall.admin.entity.ThirdMerchExpressEntity">
+		select
+		e.`id`,
+		e.`express_account`,
+		e.`express_pwd`,
+		e.`express_cus_id`,
+		e.`third_party_merch_code`,
+		e.`remark`,
+		e.`creater_sn`,
+		e.`create_time`,
+		e.`moder_sn`,
+		e.`mod_time`,
+		e.`tstm`,
+		b.third_party_merch_name thirdPartyMerchName
+		from third_merch_express e left join third_merchant_biz b on e.third_party_merch_code = b.third_party_merch_code
+		where e.third_party_merch_code = #{thirdPartyMerchCode}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.ThirdMerchExpressEntity">
+		select
+		e.`id`,
+		e.`express_account`,
+		e.`express_pwd`,
+		e.`express_cus_id`,
+		e.`third_party_merch_code`,
+		e.`remark`,
+		e.`creater_sn`,
+		e.`create_time`,
+		e.`moder_sn`,
+		e.`mod_time`,
+		e.`tstm`,
+		b.third_party_merch_name thirdPartyMerchName
+		from third_merch_express e left join third_merchant_biz b on e.third_party_merch_code = b.third_party_merch_code
+		WHERE 1=1
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+			AND e.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*)
+		from third_merch_express e left join third_merchant_biz b on e.third_party_merch_code = b.third_party_merch_code
+		WHERE 1=1
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+			AND e.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+	</select>
+	 
+	<insert id="save" parameterType="com.kmall.admin.entity.ThirdMerchExpressEntity" useGeneratedKeys="true" keyProperty="id">
+		insert into third_merch_express(
+			`express_account`,
+			`express_pwd`,
+			`express_cus_id`,
+			`third_party_merch_code`,
+			`remark`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{expressAccount},
+			#{expressPwd},
+			#{expressCusId},
+			#{thirdPartyMerchCode},
+			#{remark},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.ThirdMerchExpressEntity">
+		update third_merch_express 
+		<set>
+			<if test="expressAccount != null">`express_account` = #{expressAccount}, </if>
+			<if test="expressPwd != null">`express_pwd` = #{expressPwd}, </if>
+			<if test="expressCusId != null">`express_cus_id` = #{expressCusId}, </if>
+			<if test="thirdPartyMerchCode != null">`third_party_merch_code` = #{thirdPartyMerchCode}, </if>
+			<if test="remark != null">`remark` = #{remark}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where id = #{id}
+	</update>
+	
+	<delete id="delete">
+		delete from third_merch_express where id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from third_merch_express where id in 
+		<foreach item="id" collection="array" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+</mapper>

+ 10 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/store.html

@@ -89,6 +89,16 @@
             <Form-item label="备注" prop="remark">
             <Form-item label="备注" prop="remark">
                 <i-input type="textarea" v-model="store.remark" placeholder="备注"/>
                 <i-input type="textarea" v-model="store.remark" placeholder="备注"/>
             </Form-item>
             </Form-item>
+            <Form-item label="是否显示" prop="isValid">
+                <Radio-group v-model="store.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
             <Form-item>
             <Form-item>
                 <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
                 <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
                 <i-button type="warning" @click="reload" style="margin-left: 8px"/>
                 <i-button type="warning" @click="reload" style="margin-left: 8px"/>

+ 67 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/thirdmerchexpress.html

@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>第三方商户快递账号表</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-select v-model="q.thirdPartyMerchCode" placeholder="第三方商户编号" label-in-value>
+                        <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdPartyMerchCode" :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                    </i-select>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("thirdmerchexpress:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("thirdmerchexpress:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("thirdmerchexpress:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="thirdMerchExpress" :rules="ruleValidate" :label-width="120">
+            <Form-item label="商户快递账号" prop="expressAccount">
+                <i-input v-model="thirdMerchExpress.expressAccount" placeholder="商户快递账号"/>
+            </Form-item>
+            <Form-item label="商户快递密码" prop="expressPwd">
+                <i-input v-model="thirdMerchExpress.expressPwd" placeholder="商户快递密码"/>
+            </Form-item>
+            <Form-item label="商户快递月结账号" prop="expressCusId">
+                <i-input v-model="thirdMerchExpress.expressCusId" placeholder="商户快递月结账号"/>
+            </Form-item>
+            <Form-item label="第三方商户代码" prop="thirdPartyMerchCode">
+                <i-select v-model="thirdMerchExpress.thirdPartyMerchCode" placeholder="第三方商户代码" label-in-value>
+                    <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdPartyMerchCode" :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="备注" prop="remark">
+                <i-input v-model="thirdMerchExpress.remark" placeholder="备注"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/shop/thirdmerchexpress.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 33 - 18
kmall-admin/src/main/webapp/js/shop/store.js

@@ -5,23 +5,38 @@ $(function () {
         colModel: [
         colModel: [
             {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
             {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
             {label: '商户编号', name: 'merchSn', index: 'merch_sn', width: 80},
             {label: '商户编号', name: 'merchSn', index: 'merch_sn', width: 80},
-            {label: '商户名称', name: 'merchName', index: 'merch_name', width: 60},
-            {label: '第三方商户编号', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 60},
-            {label: '第三方商户名称', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 60},
-            {label: '门店名称', name: 'storeName', index: 'store_name', width: 80},
-            {label: '门店编号', name: 'storeNumber', index: 'store_number', width: 80},
-            {label: '门店地址', name: 'storeAddress', index: 'store_address', width: 80},
-            {label: '省份', name: 'provinceName', index: 'province_name', width: 80},
-            {label: '城市', name: 'cityName', index: 'city_name', width: 80},
-            {label: '区', name: 'countyName', index: 'county_name', width: 80},
-            {label: '纬度', name: 'latitude', index: 'latitude', width: 80},
-            {label: '经度', name: 'longitude', index: 'longitude', width: 80},
-            {label: '配送半径(km)', name: 'coverRadius', index: 'cover_radius', width: 80},
-            {label: '备注', name: 'remark', index: 'remark', width: 80},
+            {label: '商户名称', name: 'merchName', index: 'merch_name', width: 60, align: 'center'},
+            {label: '第三方商户编号', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 60, align: 'center'},
+            {label: '第三方商户名称', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 60, align: 'center'},
+            {label: '门店名称', name: 'storeName', index: 'store_name', width: 80, align: 'center'},
+            {label: '门店编号', name: 'storeNumber', index: 'store_number', width: 80, align: 'center'},
+            {label: '门店地址', name: 'storeAddress', index: 'store_address', width: 80, align: 'center'},
+            {label: '省份', name: 'provinceName', index: 'province_name', width: 60, align: 'center'},
+            {label: '城市', name: 'cityName', index: 'city_name', width: 60, align: 'center'},
+            {label: '区', name: 'countyName', index: 'county_name', width: 60, align: 'center'},
+            {label: '纬度', name: 'latitude', index: 'latitude', width: 80, align: 'center'},
+            {label: '经度', name: 'longitude', index: 'longitude', width: 80, align: 'center'},
+            // {label: '配送半径(km)', name: 'coverRadius', index: 'cover_radius', width: 60, align: 'center'},
+            {label: '备注', name: 'remark', index: 'remark', width: 40, align: 'center'},
+
+            {label: '是否显示', name: 'isValid', index: 'is_valid', width: 60, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '显示';
+                    } else if (value == '1') {
+                        return '禁用';
+                    }
+                    return '';
+                }},
             {
             {
-                label: '操作', width: 60, align: 'center', sortable: false, formatter: function (value, col, row) {
-                    let htmlStr = "<button class='btn btn-outline btn-primary' " +
-                        "onclick='vm.qrcodeCanvas(" + row.id + ")'><i class='fa fa-qrcode'></i>二维码</button>";
+                label: '操作', width: 150, align: 'center', sortable: false, formatter: function (value, col, row) {
+                    let htmlStr = "-";
+                    if (row.isValid == 0) {
+                        htmlStr = "<button class='btn btn-outline btn-primary' " +
+                            "onclick='vm.qrcodeCanvas(" + row.id + ")'><i class='fa fa-qrcode'></i>二维码</button>";
+                    }else{
+                        htmlStr = "<span style='color: red;font-weight: bolder'>门店禁用则没有生成二维码权限</span>";
+                    }
                     return htmlStr;
                     return htmlStr;
                 }
                 }
             }],
             }],
@@ -56,7 +71,7 @@ let vm = new Vue({
     data: {
     data: {
         showList: true,
         showList: true,
         title: null,
         title: null,
-        store: {},
+        store: {isValid: ''},
         ruleValidate: {
         ruleValidate: {
             storeName: [
             storeName: [
                 {required: true, message: '门店名称不能为空', trigger: 'blur'}
                 {required: true, message: '门店名称不能为空', trigger: 'blur'}
@@ -85,7 +100,7 @@ let vm = new Vue({
         add: function () {
         add: function () {
             vm.showList = false;
             vm.showList = false;
             vm.title = "新增";
             vm.title = "新增";
-            vm.store = {exprAgreementType:'00'};
+            vm.store = {isValid: 0,exprAgreementType:'00'};
             vm.merchList = [];
             vm.merchList = [];
             vm.getMerchList();
             vm.getMerchList();
         },
         },

+ 163 - 0
kmall-admin/src/main/webapp/js/shop/thirdmerchexpress.js

@@ -0,0 +1,163 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../thirdmerchexpress/list',
+        datatype: "json",
+        colModel: [
+			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+			{label: '商户快递账号', name: 'expressAccount', index: 'express_account', width: 80},
+			{label: '商户快递密码', name: 'expressPwd', index: 'express_pwd', width: 80},
+			{label: '商户快递月结账号', name: 'expressCusId', index: 'express_cus_id', width: 80},
+			{label: '第三方商户代码', name: 'thirdPartyMerchName', index: 'third_party_merch_code', width: 80},
+			{label: '备注', name: 'remark', index: 'remark', width: 80},
+			{label: '创建人编号', name: 'createrSn', index: 'creater_sn', width: 80},
+			{label: '创建时间', name: 'createTime', index: 'create_time', width: 80, formatter: function (value) {
+                return transDate(value,'yyyy-MM-dd hh:mm:ss');
+            }},
+			{label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 80},
+			{label: '修改时间', name: 'modTime', index: 'mod_time', width: 80, formatter: function (value) {
+                return transDate(value,'yyyy-MM-dd hh:mm:ss');
+            }}],
+		viewrecords: true,
+        height: 385,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        rownumbers: true,
+        rownumWidth: 25,
+        autowidth: true,
+        multiselect: true,
+        pager: "#jqGridPager",
+        jsonReader: {
+            root: "page.list",
+            page: "page.currPage",
+            total: "page.totalPage",
+            records: "page.totalCount"
+        },
+        prmNames: {
+            page: "page",
+            rows: "limit",
+            order: "order"
+        },
+        gridComplete: function () {
+            $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "hidden"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		thirdMerchExpress: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+            thirdPartyMerchCode: ''
+		},
+        thirdMerchantBizList: []
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.getThirdMerchantBizList();
+			vm.thirdMerchExpress = {};
+		},
+		update: function (event) {
+            let id = getSelectedRow();
+			if (id == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getInfo(id)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.thirdMerchExpress.id == null ? "../thirdmerchexpress/save" : "../thirdmerchexpress/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.thirdMerchExpress),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let ids = getSelectedRows();
+			if (ids == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../thirdmerchexpress/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(ids),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(id){
+			$.get("../thirdmerchexpress/info/"+id, function (r) {
+                vm.thirdMerchExpress = r.thirdMerchExpress;
+            });
+		},
+        getThirdMerchantBizList: function() {
+            $.get("../thirdmerchantbiz/queryAll", function (r) {
+                vm.thirdMerchantBizList = r.list;
+            });
+        },
+        reloadSearch: function() {
+            vm.q = {
+                thirdPartyMerchCode: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'thirdPartyMerchCode': vm.q.thirdPartyMerchCode},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	},
+    mounted() {
+        $.get("../thirdmerchantbiz/queryAll", function (r) {
+            vm.thirdMerchantBizList = r.list;
+        });
+    }
+});

+ 5 - 4
kmall-api/src/main/java/com/kmall/api/api/ApiCatalogController.java

@@ -67,10 +67,11 @@ public class ApiCatalogController extends ApiBaseAction {
         resultObj.put("categoryList", data);
         resultObj.put("categoryList", data);
         resultObj.put("currentCategory", currentCategory);
         resultObj.put("currentCategory", currentCategory);
         Map brandMap = Maps.newHashMap();
         Map brandMap = Maps.newHashMap();
-        brandMap.put("categoryId", currentCategory.getId());
-        List<BrandVo> brandVoList = brandService.queryList(brandMap);
-
-        resultObj.put("brandList", brandVoList);
+        if(currentCategory != null){
+            brandMap.put("categoryId", currentCategory.getId());
+            List<BrandVo> brandVoList = brandService.queryList(brandMap);
+            resultObj.put("brandList", brandVoList);
+        }
         return toResponsSuccess(resultObj);
         return toResponsSuccess(resultObj);
     }
     }
 
 

+ 100 - 27
kmall-api/src/main/java/com/kmall/api/api/ApiOrderController.java

@@ -5,6 +5,12 @@ import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Maps;
 import com.kmall.api.annotation.IgnoreAuth;
 import com.kmall.api.annotation.IgnoreAuth;
 import com.kmall.api.annotation.LoginUser;
 import com.kmall.api.annotation.LoginUser;
+import com.kmall.common.utils.RRException;
+import com.kmall.manager.manager.express.sf.entity.RouteEntity;
+import com.kmall.manager.manager.express.sf.entity.RouteResponseEntity;
+import com.kmall.manager.manager.express.sf.entity.SfRouteServiceResponseEntity;
+import com.kmall.manager.manager.express.sf.properties.SFPropertiesBuilder;
+import com.kmall.manager.manager.express.sf.properties.SFUtil;
 import com.kmall.manager.manager.print.ticket.PrintTicketPropertiesBuilder;
 import com.kmall.manager.manager.print.ticket.PrintTicketPropertiesBuilder;
 import com.kmall.manager.manager.wechat.WechatUtil;
 import com.kmall.manager.manager.wechat.WechatUtil;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.constant.Dict;
@@ -50,6 +56,9 @@ public class ApiOrderController extends ApiBaseAction {
     private ApiOrderRefundService apiOrderRefundService;
     private ApiOrderRefundService apiOrderRefundService;
     @Autowired
     @Autowired
     private ApiStoreService apiStoreService;
     private ApiStoreService apiStoreService;
+    @Autowired
+    private ApiThirdMerchExpressService apiThirdMerchExpressService;
+
 
 
     /**
     /**
      */
      */
@@ -150,17 +159,48 @@ public class ApiOrderController extends ApiBaseAction {
                 mapList.add(map);
                 mapList.add(map);
             }else{
             }else{
                 if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no()) &&entity.getShipmentStartTime()!=null) {
                 if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no()) &&entity.getShipmentStartTime()!=null) {
-                    JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
-                    if (Traces != null) {
-                        mapList = (List<Map>) Traces.get("Traces");
-                        String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
-                        if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
-                            Map noDataMap = Maps.newHashMap();
-                            noDataMap.put("AcceptTime", "");
-                            noDataMap.put("AcceptStation", Traces.get("Reason"));
-                            mapList.add(noDataMap);
+                    if(orderInfo.getShipping_code().equalsIgnoreCase("SF")){
+                        StoreVo storeVo = apiStoreService.queryObject(orderInfo.getStore_id());
+                        if(storeVo == null){
+                            return toResponsObject(400, "查询顺丰订单异常,订单的门店信息不存在", null);
+                        }
+                        ThirdMerchExpressVo thirdMerchExpressVo = apiThirdMerchExpressService.getThirdMerchExpressByThirdCode(storeVo.getThirdPartyMerchCode());
+                        if(thirdMerchExpressVo == null){
+                            return toResponsObject(400, "查询顺丰订单异常,缺失商户快递账号信息", null);
+                        }
+                        SfRouteServiceResponseEntity sfRouteServiceResponseEntity = SFUtil.routeService(orderInfo.getShipping_no(),
+                                thirdMerchExpressVo.getExpressAccount(), thirdMerchExpressVo.getExpressPwd(),
+                                SFPropertiesBuilder.instance().getUrl());
+                        if(sfRouteServiceResponseEntity.getHead().equalsIgnoreCase("OK")){
+                            if(sfRouteServiceResponseEntity.getBody() != null && sfRouteServiceResponseEntity.getBody().getRouteResponse() != null){
+                                RouteResponseEntity routeResponseEntity =  sfRouteServiceResponseEntity.getBody().getRouteResponse().get(0);
+                                if(routeResponseEntity != null){
+                                    List<RouteEntity> entityList = routeResponseEntity.getRouteResponse();
+                                    for (RouteEntity route : entityList) {
+                                        Map noDataMap = Maps.newHashMap();
+                                        noDataMap.put("AcceptTime", route.getAccept_time());
+                                        noDataMap.put("AcceptStation", route.getAccept_address() + route.getRemark());
+                                        mapList.add(noDataMap);
+                                    }
+                                }
+                            }
+                        }else{
+                            return toResponsObject(400, "查询顺丰订单异常,"+sfRouteServiceResponseEntity.getErrors(), null);
+                        }
+                    }else{
+                        JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
+                        if (Traces != null) {
+                            mapList = (List<Map>) Traces.get("Traces");
+                            String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
+                            if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
+                                Map noDataMap = Maps.newHashMap();
+                                noDataMap.put("AcceptTime", "");
+                                noDataMap.put("AcceptStation", Traces.get("Reason"));
+                                mapList.add(noDataMap);
+                            }
                         }
                         }
                     }
                     }
+
                 }
                 }
             }
             }
             if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend()) && entity.getShipmentStartTime() != null) {
             if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend()) && entity.getShipmentStartTime() != null) {
@@ -336,26 +376,59 @@ public class ApiOrderController extends ApiBaseAction {
                 wuliuList.add(vo);
                 wuliuList.add(vo);
             }else {
             }else {
                 if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no()) && entity.getShipmentStartTime() != null) {
                 if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no()) && entity.getShipmentStartTime() != null) {
-                    // 快递
-                    JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
-                    List<Map> mapList = (List<Map>) Traces.get("Traces");
-                    if(mapList!=null&&mapList.size()>0) {
-                        for (int i = 0; i < mapList.size(); i++) {
-                            WuliuVo vo = new WuliuVo();
-                            vo.setAcceptTime((String) mapList.get(i).get("AcceptTime"));
-                            vo.setAcceptStation((String) mapList.get(i).get("AcceptStation"));
-                            wuliuList.add(vo);
+                    if(orderInfo.getShipping_code().equalsIgnoreCase("SF")){
+                        StoreVo storeVo = apiStoreService.queryObject(orderInfo.getStore_id());
+                        if(storeVo == null){
+                            return toResponsObject(400, "查询顺丰订单异常,订单的门店信息不存在", null);
                         }
                         }
+                        ThirdMerchExpressVo thirdMerchExpressVo = apiThirdMerchExpressService.getThirdMerchExpressByThirdCode(storeVo.getThirdPartyMerchCode());
+                        if(thirdMerchExpressVo == null){
+                            return toResponsObject(400, "查询顺丰订单异常,缺失商户快递账号信息", null);
+                        }
+                        SfRouteServiceResponseEntity sfRouteServiceResponseEntity = SFUtil.routeService(orderInfo.getShipping_no(),
+                                thirdMerchExpressVo.getExpressAccount(), thirdMerchExpressVo.getExpressPwd(),
+                                SFPropertiesBuilder.instance().getUrl());
+//                        SfRouteServiceResponseEntity sfRouteServiceResponseEntity = SFUtil.routeService("444072971585",
+//                                SFPropertiesBuilder.instance().getAccount(), SFPropertiesBuilder.instance().getPassword(),
+//                                SFPropertiesBuilder.instance().getUrl());
+                        if(sfRouteServiceResponseEntity.getHead().equalsIgnoreCase("OK")){
+                            if(sfRouteServiceResponseEntity.getBody() != null && sfRouteServiceResponseEntity.getBody().getRouteResponse() != null){
+                                RouteResponseEntity routeResponseEntity =  sfRouteServiceResponseEntity.getBody().getRouteResponse().get(0);
+                                if(routeResponseEntity != null){
+                                    List<RouteEntity> entityList = routeResponseEntity.getRouteResponse();
+                                    for (RouteEntity route : entityList) {
+                                        WuliuVo vo = new WuliuVo();
+                                        vo.setAcceptTime(route.getAccept_time());
+                                        vo.setAcceptStation(route.getAccept_address() + route.getRemark());
+                                        wuliuList.add(vo);
+                                    }
+                                }
+                            }
+                        }else{
+                            return toResponsObject(400, "查询顺丰订单异常,"+sfRouteServiceResponseEntity.getErrors(), null);
+                        }
+                    }else{
+                        // 快递
+                        JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
+                        List<Map> mapList = (List<Map>) Traces.get("Traces");
+                        if(mapList!=null&&mapList.size()>0) {
+                            for (int i = 0; i < mapList.size(); i++) {
+                                WuliuVo vo = new WuliuVo();
+                                vo.setAcceptTime((String) mapList.get(i).get("AcceptTime"));
+                                vo.setAcceptStation((String) mapList.get(i).get("AcceptStation"));
+                                wuliuList.add(vo);
+                            }
+                        }
+                        String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
+                        String Reason = (String) Traces.get("Reason");
+                        if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
+                            WuliuVo wuliuVo = new WuliuVo();
+                            wuliuVo.setAcceptStation(Reason);
+                            wuliuList.add(wuliuVo);
+                        }
+                        map.put("State", Traces.get("State")); //物流状态:2-在途中,3-签收,4-问题件
+                        map.put("Reason", Traces.get("Reason"));
                     }
                     }
-                    String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
-                    String Reason = (String) Traces.get("Reason");
-                    if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
-                        WuliuVo wuliuVo = new WuliuVo();
-                        wuliuVo.setAcceptStation(Reason);
-                        wuliuList.add(wuliuVo);
-                    }
-                    map.put("State", Traces.get("State")); //物流状态:2-在途中,3-签收,4-问题件
-                    map.put("Reason", Traces.get("Reason"));
                 }
                 }
             }
             }
             if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend()) && entity.getShipmentStartTime() != null) {
             if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend()) && entity.getShipmentStartTime() != null) {

+ 22 - 0
kmall-api/src/main/java/com/kmall/api/dao/ApiThirdMerchExpressMapper.java

@@ -0,0 +1,22 @@
+package com.kmall.api.dao;
+
+
+import com.kmall.api.entity.StoreVo;
+import com.kmall.api.entity.ThirdMerchExpressVo;
+import com.kmall.manager.dao.BaseDao;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-12-07 17:53:15
+ */
+@Service
+public interface ApiThirdMerchExpressMapper extends BaseDao<ThirdMerchExpressVo> {
+    ThirdMerchExpressVo getThirdMerchExpressByThirdCode(String thirdPartyMerchCode);
+}

+ 10 - 0
kmall-api/src/main/java/com/kmall/api/entity/FootprintVo.java

@@ -36,6 +36,16 @@ public class FootprintVo implements Serializable {
     private String nickname;
     private String nickname;
     private String avatar;
     private String avatar;
 
 
+    private String storeId;
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
     public Long getId() {
     public Long getId() {
         return id;
         return id;
     }
     }

+ 8 - 8
kmall-api/src/main/java/com/kmall/api/entity/OrderVo.java

@@ -198,7 +198,7 @@ public class OrderVo implements Serializable {
     private String isOnfflineOrder;
     private String isOnfflineOrder;
 
 
     private String merchName;
     private String merchName;
-    private Long storeId;
+//    private Long storeId;
 
 
     public Integer getCashFee() {
     public Integer getCashFee() {
         return cashFee;
         return cashFee;
@@ -248,13 +248,13 @@ public class OrderVo implements Serializable {
         this.merchName = merchName;
         this.merchName = merchName;
     }
     }
 
 
-    public Long getStoreId() {
-        return storeId;
-    }
-
-    public void setStoreId(Long storeId) {
-        this.storeId = storeId;
-    }
+//    public Long getStoreId() {
+//        return storeId;
+//    }
+//
+//    public void setStoreId(Long storeId) {
+//        this.storeId = storeId;
+//    }
 
 
     public String getIsOnfflineOrder() {
     public String getIsOnfflineOrder() {
         return isOnfflineOrder;
         return isOnfflineOrder;

+ 9 - 0
kmall-api/src/main/java/com/kmall/api/entity/StoreVo.java

@@ -70,6 +70,15 @@ public class StoreVo implements Serializable {
 
 
     private String thirdPartyMerchCode;
     private String thirdPartyMerchCode;
     private String thirdPartyMerchName;
     private String thirdPartyMerchName;
+    private String isValid;
+
+    public String getIsValid() {
+        return isValid;
+    }
+
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
 
 
     public String getThirdPartyMerchCode() {
     public String getThirdPartyMerchCode() {
         return thirdPartyMerchCode;
         return thirdPartyMerchCode;

+ 215 - 0
kmall-api/src/main/java/com/kmall/api/entity/ThirdMerchExpressVo.java

@@ -0,0 +1,215 @@
+package com.kmall.api.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 第三方商户快递账号表实体
+ * 表名 third_merch_express
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-03 16:52:21
+ */
+public class ThirdMerchExpressVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Integer id;
+    /**
+     * 商户快递账号
+     */
+    private String expressAccount;
+    /**
+     * 商户快递密码
+     */
+    private String expressPwd;
+    /**
+     * 商户快递月结账号
+     */
+    private String expressCusId;
+    /**
+     * 第三方商户代码
+     */
+    private String thirdPartyMerchCode;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    private String thirdPartyMerchName;
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName;
+    }
+
+    /**
+     * 设置:主键
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:主键
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:商户快递账号
+     */
+    public void setExpressAccount(String expressAccount) {
+        this.expressAccount = expressAccount;
+    }
+
+    /**
+     * 获取:商户快递账号
+     */
+    public String getExpressAccount() {
+        return expressAccount;
+    }
+    /**
+     * 设置:商户快递密码
+     */
+    public void setExpressPwd(String expressPwd) {
+        this.expressPwd = expressPwd;
+    }
+
+    /**
+     * 获取:商户快递密码
+     */
+    public String getExpressPwd() {
+        return expressPwd;
+    }
+    /**
+     * 设置:商户快递月结账号
+     */
+    public void setExpressCusId(String expressCusId) {
+        this.expressCusId = expressCusId;
+    }
+
+    /**
+     * 获取:商户快递月结账号
+     */
+    public String getExpressCusId() {
+        return expressCusId;
+    }
+    /**
+     * 设置:第三方商户代码
+     */
+    public void setThirdPartyMerchCode(String thirdPartyMerchCode) {
+        this.thirdPartyMerchCode = thirdPartyMerchCode;
+    }
+
+    /**
+     * 获取:第三方商户代码
+     */
+    public String getThirdPartyMerchCode() {
+        return thirdPartyMerchCode;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getRemark() {
+        return remark;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 21 - 0
kmall-api/src/main/java/com/kmall/api/service/ApiThirdMerchExpressService.java

@@ -0,0 +1,21 @@
+package com.kmall.api.service;
+
+import com.kmall.api.dao.ApiThirdMerchExpressMapper;
+import com.kmall.api.entity.ThirdMerchExpressVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-04-03 17:39
+ */
+@Service
+public class ApiThirdMerchExpressService {
+    @Autowired
+    private ApiThirdMerchExpressMapper apiThirdMerchExpressMapper;
+
+    public ThirdMerchExpressVo getThirdMerchExpressByThirdCode(String thirdPartyMerchCode) {
+        return apiThirdMerchExpressMapper.getThirdMerchExpressByThirdCode(thirdPartyMerchCode);
+    }
+}

+ 2 - 1
kmall-api/src/main/resources/mybatis/mapper/ApiFootprintMapper.xml

@@ -16,6 +16,7 @@
         <result property="referrer" column="referrer"/>
         <result property="referrer" column="referrer"/>
         <result property="nickname" column="nickname"/>
         <result property="nickname" column="nickname"/>
         <result property="avatar" column="avatar"/>
         <result property="avatar" column="avatar"/>
+        <result property="storeId" column="storeId"/>
     </resultMap>
     </resultMap>
 
 
     <select id="queryObject" resultMap="footprintMap">
     <select id="queryObject" resultMap="footprintMap">
@@ -25,7 +26,7 @@
     <select id="queryList" resultMap="footprintMap">
     <select id="queryList" resultMap="footprintMap">
         select f.id,f.user_id,f.goods_id,f.add_time add_time,f.referrer,
         select f.id,f.user_id,f.goods_id,f.add_time add_time,f.referrer,
         g.name as name, g.list_pic_url as list_pic_url, g.goods_brief as goods_brief, psr.retail_price as
         g.name as name, g.list_pic_url as list_pic_url, g.goods_brief as goods_brief, psr.retail_price as
-        retail_price
+        retail_price,psr.store_id storeId
         from mall_footprint f
         from mall_footprint f
         <if test="maxFoot == true">
         <if test="maxFoot == true">
             left join mall_footprint max on f.goods_id = max.goods_id and f.user_id = max.user_id
             left join mall_footprint max on f.goods_id = max.goods_id and f.user_id = max.user_id

+ 5 - 4
kmall-api/src/main/resources/mybatis/mapper/ApiStoreMapper.xml

@@ -26,6 +26,7 @@
 
 
         <result property="thirdPartyMerchCode" column="third_party_merch_code"/>
         <result property="thirdPartyMerchCode" column="third_party_merch_code"/>
         <result property="thirdPartyMerchName" column="third_party_merch_name"/>
         <result property="thirdPartyMerchName" column="third_party_merch_name"/>
+        <result property="isValid" column="is_valid"/>
     </resultMap>
     </resultMap>
 
 
     <select id="queryObject" resultType="com.kmall.api.entity.StoreVo">
     <select id="queryObject" resultType="com.kmall.api.entity.StoreVo">
@@ -43,7 +44,7 @@
 			`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
 			`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
     moder_sn, mod_time, tstm
     moder_sn, mod_time, tstm
 		from mall_store
 		from mall_store
-		where id = #{id}
+		where id = #{id} and is_valid = 0
 	</select>
 	</select>
 
 
     <select id="queryList" resultType="com.kmall.api.entity.StoreVo">
     <select id="queryList" resultType="com.kmall.api.entity.StoreVo">
@@ -61,7 +62,7 @@
         `remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
         `remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
         moder_sn, mod_time, tstm
         moder_sn, mod_time, tstm
         from mall_store
         from mall_store
-        WHERE 1=1
+        WHERE 1=1  and is_valid = 0
         <if test="province_name != null and province_name.trim() != ''">
         <if test="province_name != null and province_name.trim() != ''">
             AND province_name = #{province_name}
             AND province_name = #{province_name}
         </if>
         </if>
@@ -91,7 +92,7 @@
 
 
     <select id="queryTotal" resultType="int">
     <select id="queryTotal" resultType="int">
         select count(*) from mall_store
         select count(*) from mall_store
-        WHERE 1=1
+        WHERE 1=1  and is_valid = 0
         <if test="name != null and name.trim() != ''">
         <if test="name != null and name.trim() != ''">
             AND name LIKE concat('%',#{name},'%')
             AND name LIKE concat('%',#{name},'%')
         </if>
         </if>
@@ -165,7 +166,7 @@
         mod_time,
         mod_time,
         tstm,third_party_merch_code,third_party_merch_name
         tstm,third_party_merch_code,third_party_merch_name
         from mall_store a
         from mall_store a
-        WHERE 1=1
+        WHERE 1=1  and is_valid = 0
         <if test="province_name != null and province_name.trim() != ''">
         <if test="province_name != null and province_name.trim() != ''">
             AND province_name = #{province_name}
             AND province_name = #{province_name}
         </if>
         </if>

+ 97 - 0
kmall-api/src/main/resources/mybatis/mapper/ApiThirdMerchExpressMapper.xml

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.api.dao.ApiThirdMerchExpressMapper">
+
+    <resultMap type="com.kmall.api.entity.ThirdMerchExpressVo" id="thirdMerchExpressMap">
+        <result property="id" column="id"/>
+        <result property="expressAccount" column="express_account"/>
+        <result property="expressPwd" column="express_pwd"/>
+        <result property="expressCusId" column="express_cus_id"/>
+        <result property="thirdPartyMerchCode" column="third_party_merch_code"/>
+        <result property="remark" column="remark"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="thirdPartyMerchName" column="thirdPartyMerchName"/>
+
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.api.entity.ThirdMerchExpressVo">
+		select
+			`id`,
+			`express_account`,
+			`express_pwd`,
+			`express_cus_id`,
+			`third_party_merch_code`,
+			`remark`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from third_merch_express
+		where id = #{id}
+	</select>
+
+	<select id="getThirdMerchExpressByThirdCode" resultType="com.kmall.api.entity.ThirdMerchExpressVo">
+		select
+		e.`id`,
+		e.`express_account`,
+		e.`express_pwd`,
+		e.`express_cus_id`,
+		e.`third_party_merch_code`,
+		e.`remark`,
+		e.`creater_sn`,
+		e.`create_time`,
+		e.`moder_sn`,
+		e.`mod_time`,
+		e.`tstm`,
+		b.third_party_merch_name thirdPartyMerchName
+		from third_merch_express e left join third_merchant_biz b on e.third_party_merch_code = b.third_party_merch_code
+		where e.third_party_merch_code = #{thirdPartyMerchCode}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.api.entity.ThirdMerchExpressVo">
+		select
+		e.`id`,
+		e.`express_account`,
+		e.`express_pwd`,
+		e.`express_cus_id`,
+		e.`third_party_merch_code`,
+		e.`remark`,
+		e.`creater_sn`,
+		e.`create_time`,
+		e.`moder_sn`,
+		e.`mod_time`,
+		e.`tstm`,
+		b.third_party_merch_name thirdPartyMerchName
+		from third_merch_express e left join third_merchant_biz b on e.third_party_merch_code = b.third_party_merch_code
+		WHERE 1=1
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+			AND e.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*)
+		from third_merch_express e left join third_merchant_biz b on e.third_party_merch_code = b.third_party_merch_code
+		WHERE 1=1
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+			AND e.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+	</select>
+</mapper>

+ 1 - 1
kmall-api/src/main/resources/mybatis/mapper/ApiThirdMerchantBizMapper.xml

@@ -87,7 +87,7 @@
 		b.is_store_user_share,
 		b.is_store_user_share,
 		b.is_map_show
 		b.is_map_show
 		from third_merchant_biz b inner join mall_store s on s.third_party_merch_code=b.third_party_merch_code
 		from third_merchant_biz b inner join mall_store s on s.third_party_merch_code=b.third_party_merch_code
-		where s.id = #{storeId}
+		where s.id = #{storeId} and s.is_valid = 0
 	</select>
 	</select>
 
 
 	<select id="queryList" resultType="com.kmall.api.entity.ThirdMerchantBizVo">
 	<select id="queryList" resultType="com.kmall.api.entity.ThirdMerchantBizVo">

+ 1 - 0
kmall-framework/src/test/resources/applicationContext-test.xml

@@ -33,6 +33,7 @@
                 <value>classpath:conf/print-ticket.properties</value>
                 <value>classpath:conf/print-ticket.properties</value>
                 <value>classpath:conf/common.properties</value>
                 <value>classpath:conf/common.properties</value>
                 <value>classpath:conf/fastdfs.properties</value>
                 <value>classpath:conf/fastdfs.properties</value>
+                <value>classpath:conf/express-sf.properties</value>
             </list>
             </list>
         </property>
         </property>
         <property name="fileEncoding" value="UTF-8"/>
         <property name="fileEncoding" value="UTF-8"/>

+ 0 - 1
kmall-manager/pom.xml

@@ -19,7 +19,6 @@
             <artifactId>kmall-common</artifactId>
             <artifactId>kmall-common</artifactId>
             <version>${kmall-version}</version>
             <version>${kmall-version}</version>
         </dependency>
         </dependency>
-
     </dependencies>
     </dependencies>
 
 
 
 

+ 106 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/Base64.java

@@ -0,0 +1,106 @@
+package com.kmall.manager.manager.express.sf;
+
+import java.io.UnsupportedEncodingException;
+
+/**
+* 说明:base64
+* @author  赵增丰
+* @version  1.0
+* 2014-9-28 下午3:25:50
+*/ 
+public class Base64 {
+	//private static final Logger LOGGER = LoggerFactory.getLogger(Base64.class);
+
+	private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D',
+			'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
+			'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
+			'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
+			'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+			'4', '5', '6', '7', '8', '9', '+', '/' };
+
+	private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59,
+			60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+			10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
+			-1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+			38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
+			-1, -1 };
+
+	public static String encode(byte[] data) {
+		if(data == null){
+			return "";
+		}
+		StringBuffer sb = new StringBuffer();
+		int len = data.length;
+		int i = 0;
+		int b1, b2, b3;
+		while (i < len) {
+			b1 = data[i++] & 0xff;
+			if (i == len) {
+				sb.append(base64EncodeChars[b1 >>> 2]);
+				sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
+				sb.append("==");
+				break;
+			}
+			b2 = data[i++] & 0xff;
+			if (i == len) {
+				sb.append(base64EncodeChars[b1 >>> 2]);
+				sb.append(base64EncodeChars[((b1 & 0x03) << 4)
+						| ((b2 & 0xf0) >>> 4)]);
+				sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
+				sb.append("=");
+				break;
+			}
+			b3 = data[i++] & 0xff;
+			sb.append(base64EncodeChars[b1 >>> 2]);
+			sb.append(base64EncodeChars[((b1 & 0x03) << 4)
+					| ((b2 & 0xf0) >>> 4)]);
+			sb.append(base64EncodeChars[((b2 & 0x0f) << 2)
+					| ((b3 & 0xc0) >>> 6)]);
+			sb.append(base64EncodeChars[b3 & 0x3f]);
+		}
+		return sb.toString();
+	}
+
+   public static byte[] decode(String str) throws UnsupportedEncodingException {
+        StringBuffer sb = new StringBuffer();
+        byte[] data = str.getBytes("US-ASCII");
+        int len = data.length;
+        int i = 0;
+        int b1, b2, b3, b4;
+        while (i < len) {
+           
+            do {
+                b1 = base64DecodeChars[data[i++]];
+            } while (i < len && b1 == -1);
+            if (b1 == -1) break;
+           
+            do {
+                b2 = base64DecodeChars
+                        [data[i++]];
+            } while (i < len && b2 == -1);
+            if (b2 == -1) break;
+            sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
+           
+            do {
+                b3 = data[i++];
+                if (b3 == 61) return sb.toString().getBytes("iso8859-1");
+                b3 = base64DecodeChars[b3];
+            } while (i < len && b3 == -1);
+            if (b3 == -1) break;
+            sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
+           
+            do {
+                b4 = data[i++];
+                if (b4 == 61) return sb.toString().getBytes("iso8859-1");
+                b4 = base64DecodeChars[b4];
+            } while (i < len && b4 == -1);
+            if (b4 == -1) break;
+            sb.append((char) (((b3 & 0x03) << 6) | b4));
+        }
+        return sb.toString().getBytes("iso8859-1");
+    }
+
+}

+ 63 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/ResultCodeEnum.java

@@ -0,0 +1,63 @@
+package com.kmall.manager.manager.express.sf;
+
+public enum ResultCodeEnum {
+    /**
+     * 成功
+     */
+    SUCCESS("0", "成功"),
+    /**
+     * 失败
+     */
+    FAILURE("1", "system.ex.msg.prefix"),
+    //快递信息校验
+    INFOCHECK("120001", "快递信息校验"),
+    //对象转xml异常
+    OBJECTTRANSFERXML("120004", "对象转xml异常"),
+    //xml转对象异常
+    XMLTRANSFEROBJECT("120005", "xml转对象异常"),
+    //httpClient post err
+    HTTPCLIENTPOSTERR("120006", "请求api地址失败"),
+    //快递标识错误
+    FLAGERROR("120007", "快递标识错误"),
+    //快递响应数据为空
+    RESPONSEBODYISEMPTY("120008", "快递响应数据为空"),
+    //顺丰Fail to request OrderSearchService
+    ORDERSEARCHFAIL("120009", "Fail to request OrderSearchService"),
+    //在 sf 中没有对应的 exprType
+    SFNOEXPRTYPE("120010", "在 sf 中没有对应的 exprType"),
+    //在 sf 中没有对应的 exprType
+    YUNDANOEXPRTYPE("120011", "在 yunda 中没有对应的 exprType");
+
+
+    /**
+     * 状态码
+     */
+    private String code;
+
+    /**
+     * 信息
+     */
+    private String msg;
+
+    private ResultCodeEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+}

+ 32 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/SecurityUtil.java

@@ -0,0 +1,32 @@
+package com.kmall.manager.manager.express.sf;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+
+public class SecurityUtil {
+	private static final Logger LOGGER = LoggerFactory.getLogger(SecurityUtil.class);
+
+	private static MessageDigest messagedigest;
+
+	static {
+		try {
+			messagedigest = MessageDigest.getInstance("MD5");
+		} catch (NoSuchAlgorithmException e) {
+			if (LOGGER.isErrorEnabled()) {
+				LOGGER.error("Fail to create MD5 instance: ", e);
+			}
+		}
+	}
+	
+	public static byte[] md5Digest(byte[] data){
+		return messagedigest.digest(data);
+	}
+	
+	
+	
+	
+}

+ 26 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/ServiceException.java

@@ -0,0 +1,26 @@
+package com.kmall.manager.manager.express.sf;
+
+/**
+ * Service工程异常父类
+ * 
+ * @ClassName: ServiceException
+ * @author yechao
+ * @date 2017年3月28日 下午5:25:32
+ * @Description: TODO
+ */
+public class ServiceException extends RuntimeException {
+
+	private static final long serialVersionUID = 2332608236621015980L;
+
+	public ServiceException(Throwable cause) {
+		super(cause);
+	}
+
+	public ServiceException(String message) {
+		super("#{" + message + "}");
+	}
+
+	public ServiceException(String message, Throwable cause) {
+		super(message, cause);
+	}
+}

+ 128 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/XmlUtil.java

@@ -0,0 +1,128 @@
+package com.kmall.manager.manager.express.sf;
+
+import com.kmall.manager.manager.express.sf.entity.SfRouteServiceResponseEntity;
+import org.apache.log4j.Logger;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.io.*;
+
+public class XmlUtil {
+    private static final Logger logger = Logger.getLogger(XmlUtil.class);
+
+    /**
+     * xml 转对象
+     *
+     * @param xml
+     * @param c
+     * @return
+     */
+    public static <T> Object toObject(String xml, Class<T> c) throws Exception {
+        Object xmlObject = null;
+        Reader reader = null;
+        JAXBContext context = JAXBContext.newInstance(c);
+        // XML 转为对象的接口
+        Unmarshaller unmarshaller = context.createUnmarshaller();
+
+        reader = new StringReader(xml);
+        xmlObject = unmarshaller.unmarshal(reader);
+
+        if (null != reader) {
+            reader.close();
+        }
+
+        return xmlObject;
+    }
+
+    /**
+     * 对象转xml
+     *
+     * @param
+     * @param object
+     * @return
+     */
+    public static <T> String toXml(T object) throws RuntimeException {
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        try {
+            JAXBContext context = JAXBContext.newInstance(object.getClass());
+            Marshaller m = context.createMarshaller();
+            m.marshal(object, output);
+            return output.toString();
+        } catch (JAXBException e) {
+            logger.error("对象转xml 异常:" + e.getMessage());
+            throw new RuntimeException("对象转xml 异常:" + e.getMessage());
+        } finally {
+            try {
+                output.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * @author zengjun
+     * @version 1.0
+     * 2017-10-12 14:27
+     * @desc encoding为gbk
+     */
+    public static String toXML(Object obj, boolean format) throws Exception {
+        try {
+            JAXBContext context = JAXBContext.newInstance(obj.getClass());
+            Marshaller marshaller = context.createMarshaller();
+
+            //编码格式
+            marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
+
+            // 是否格式化生成的xml串
+            if (format) {
+                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+            } else {
+                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
+            }
+
+            // 是否省略xm头声明信息
+            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);
+
+            StringWriter writer = new StringWriter();
+            marshaller.marshal(obj, writer);
+            return writer.toString();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * @author zengjun
+     * @version 1.0
+     * 2017-10-12 14:27
+     * @desc 没有头部
+     */
+    public static String toXmlNotHead(Object obj) throws Exception {
+        try {
+            JAXBContext context = JAXBContext.newInstance(obj.getClass());
+            Marshaller marshaller = context.createMarshaller();
+            //编码格式
+            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
+            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
+            // 是否省略xm头声明信息
+            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
+            StringWriter writer = new StringWriter();
+            marshaller.marshal(obj, writer);
+            return writer.toString();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    public static void main(String args[]) throws Exception{
+        String xml="<?xml version='1.0' encoding='UTF-8'?><Response service=\"RouteService\"><Head>OK</Head><Body><RouteResponse mailno=\"444072971585\"><Route remark=\"顺丰速运 已收取快件\" accept_time=\"2019-04-01 10:10:40\" accept_address=\"深圳市\" opcode=\"50\"/></RouteResponse></Body></Response>";
+//         Map<String, Object> map = com.kmall.common.utils.XmlUtil.xmlStrToMap(xml);
+        System.out.println(xml);
+
+        SfRouteServiceResponseEntity entity2 = (SfRouteServiceResponseEntity)toObject(xml, SfRouteServiceResponseEntity.class);
+        System.out.println(entity2.toString());
+        System.out.println(entity2.getBody());
+    }
+}

+ 27 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/BodyEntity.java

@@ -0,0 +1,27 @@
+package com.kmall.manager.manager.express.sf.entity;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-04-02 14:39
+ */
+@XmlRootElement(name = "Body")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class BodyEntity {
+    @XmlElement(name = "RouteResponse")
+    private List<RouteResponseEntity> routeResponse;
+
+    public List<RouteResponseEntity> getRouteResponse() {
+        return routeResponse;
+    }
+
+    public void setRouteResponse(List<RouteResponseEntity> routeResponse) {
+        this.routeResponse = routeResponse;
+    }
+}

+ 63 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/RouteEntity.java

@@ -0,0 +1,63 @@
+package com.kmall.manager.manager.express.sf.entity;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-04-02 14:12
+ */
+@XmlRootElement(name = "Route")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class RouteEntity {
+    @XmlAttribute(name = "accept_time")
+    private String accept_time;
+    @XmlAttribute(name = "accept_address")
+    private String accept_address;
+    @XmlAttribute(name = "remark")
+    private String remark;
+    @XmlAttribute(name = "opcode")
+    private String opcode;
+    public String getAccept_time() {
+        return accept_time;
+    }
+
+    public void setAccept_time(String accept_time) {
+        this.accept_time = accept_time;
+    }
+
+    public String getAccept_address() {
+        return accept_address;
+    }
+
+    public void setAccept_address(String accept_address) {
+        this.accept_address = accept_address;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getOpcode() {
+        return opcode;
+    }
+
+    public void setOpcode(String opcode) {
+        this.opcode = opcode;
+    }
+
+    @Override
+    public String toString() {
+        return "SfOrderServiceResponseBody [accept_time=" + accept_time + ", accept_address=" + accept_address + ", remark="
+                + remark + ", opcode=" + opcode + "]";
+    }
+
+
+}

+ 35 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/RouteResponseEntity.java

@@ -0,0 +1,35 @@
+package com.kmall.manager.manager.express.sf.entity;
+
+import javax.xml.bind.annotation.*;
+import java.util.List;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-04-02 14:13
+ */
+
+@XmlRootElement(name = "RouteResponse")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class RouteResponseEntity {
+    @XmlElement(name = "Route")
+    private List<RouteEntity> routeResponse;
+    @XmlAttribute(name = "mailno")
+    private String mailno;
+
+    public String getMailno() {
+        return mailno;
+    }
+
+    public void setMailno(String mailno) {
+        this.mailno = mailno;
+    }
+
+    public List<RouteEntity> getRouteResponse() {
+        return routeResponse;
+    }
+
+    public void setRouteResponse(List<RouteEntity> routeResponse) {
+        this.routeResponse = routeResponse;
+    }
+}

+ 29 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/SfOrderServiceResponseError.java

@@ -0,0 +1,29 @@
+package com.kmall.manager.manager.express.sf.entity;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-04-02 14:18
+ */
+@XmlRootElement(name = "ERROR")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class SfOrderServiceResponseError {
+    private String code;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    @Override
+    public String toString() {
+        return "SfOrderServiceResponseError [code=" + code + "]";
+    }
+}

+ 55 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/entity/SfRouteServiceResponseEntity.java

@@ -0,0 +1,55 @@
+package com.kmall.manager.manager.express.sf.entity;
+
+import javax.xml.bind.annotation.*;
+
+@XmlRootElement(name = "Response")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class SfRouteServiceResponseEntity {
+	@XmlAttribute(name = "service")
+	private String service;
+	@XmlElement(name = "Head")
+	private String head;
+	@XmlElement(name = "ERROR")
+	private String errors;
+	@XmlElement(name = "Body")
+	private BodyEntity body;
+
+	public String getErrors() {
+		return errors;
+	}
+
+	public void setErrors(String errors) {
+		this.errors = errors;
+	}
+
+	public String getService() {
+		return service;
+	}
+
+	public void setService(String service) {
+		this.service = service;
+	}
+
+	public String getHead() {
+		return head;
+	}
+
+	public void setHead(String head) {
+		this.head = head;
+	}
+
+	public BodyEntity getBody() {
+		return body;
+	}
+
+	public void setBody(BodyEntity body) {
+		this.body = body;
+	}
+
+	@Override
+	public String toString() {
+		return "SfRouteServiceResponseEntity [service=" + service + ",head=" + head + ", body=" + body + ", error="
+				+ errors + "]";
+	}
+
+}

+ 14 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFDevProperties.java

@@ -0,0 +1,14 @@
+package com.kmall.manager.manager.express.sf.properties;
+
+import com.kmall.manager.manager.express.kdn.KdnProperties;
+
+import java.io.Serializable;
+
+/**
+ * @author Scott Chen
+ * @since 1.0
+ * 2018-09-27
+ */
+public class SFDevProperties extends SFProperties implements Serializable {
+
+}

+ 14 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFProdProperties.java

@@ -0,0 +1,14 @@
+package com.kmall.manager.manager.express.sf.properties;
+
+import com.kmall.manager.manager.express.kdn.KdnProperties;
+
+import java.io.Serializable;
+
+/**
+ * @author Scott Chen
+ * @since 1.0
+ * 2018-09-27
+ */
+public class SFProdProperties extends SFProperties implements Serializable {
+
+}

+ 42 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFProperties.java

@@ -0,0 +1,42 @@
+package com.kmall.manager.manager.express.sf.properties;
+
+import java.io.Serializable;
+
+/**
+ * @author Scott Chen
+ * @since 1.0
+ * 2018-09-27
+ */
+public class SFProperties implements Serializable {
+
+    private static final long serialVersionUID = 5276364910227986389L;
+
+    private String account;
+    private String password;
+    private String url;
+
+    public String getAccount() {
+        return account;
+    }
+
+    public void setAccount(String account) {
+        this.account = account;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+}

+ 41 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFPropertiesBuilder.java

@@ -0,0 +1,41 @@
+package com.kmall.manager.manager.express.sf.properties;
+
+import com.kmall.manager.manager.express.kdn.KdnProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @author Scott Chen
+ * @since 1.0
+ * 2018-09-27
+ */
+@Component
+public class SFPropertiesBuilder {
+    private static final Logger logger = LoggerFactory.getLogger(SFPropertiesBuilder.class);
+
+    @Autowired
+    @Qualifier("sfProperties")
+    private SFProperties sfProperties;
+
+    private static SFProperties sfProp;
+
+    /**
+     * Bean 向静态变量赋值
+     */
+    @PostConstruct
+    private void init(){
+        logger.info("KdnProperties初始化开始......");
+        sfProp = sfProperties;
+    }
+
+    public static SFProperties instance(){
+        logger.info("KdnProperties实例返回");
+        return sfProp;
+    }
+
+}

+ 39 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFPropertiesConfiguration.java

@@ -0,0 +1,39 @@
+package com.kmall.manager.manager.express.sf.properties;
+
+import com.kmall.manager.manager.express.kdn.KdnDevProperties;
+import com.kmall.manager.manager.express.kdn.KdnProdProperties;
+import com.kmall.manager.manager.express.kdn.KdnProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Scott Chen
+ * @since 1.0
+ * 2018-09-27
+ */
+@Component
+public class SFPropertiesConfiguration {
+    private static final String PROD = "prod";
+    private static final String DEV = "dev";
+
+    @Value("${express.sf.env}")
+    private String evn = PROD;
+
+    @Autowired
+    private SFProdProperties sfProdProperties;
+
+    @Autowired
+    private SFDevProperties sfDevProperties;
+
+    @Bean
+    public SFProperties sfProperties(){
+        if (evn.equalsIgnoreCase(PROD)) {
+            return sfProdProperties;
+        }else {
+            return sfDevProperties;
+        }
+    }
+
+}

+ 154 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/properties/SFUtil.java

@@ -0,0 +1,154 @@
+package com.kmall.manager.manager.express.sf.properties;
+
+import com.google.common.base.Strings;
+import com.kmall.manager.manager.express.sf.*;
+import com.kmall.manager.manager.express.sf.entity.RouteEntity;
+import com.kmall.manager.manager.express.sf.entity.RouteResponseEntity;
+import com.kmall.manager.manager.express.sf.entity.SfRouteServiceResponseEntity;
+import com.kmall.manager.manager.express.sf.request.Body;
+import com.kmall.manager.manager.express.sf.request.Request;
+import com.kmall.manager.manager.express.sf.request.RouteRequest;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-03-29 17:03
+ */
+public class SFUtil {
+    private static Log logger = LogFactory.getLog(SFUtil.class);
+    /**
+     * 顺丰查询路由接口
+     *
+     * @param code
+     * @param url
+     * @return
+     * @throws
+     */
+    public final static SfRouteServiceResponseEntity routeService(String code, String account, String password, String url){
+        RouteRequest routeRequest = new RouteRequest();
+        routeRequest.setTracking_type(1);
+        routeRequest.setTracking_number(code);
+        routeRequest.setMethod_type(1);
+        Body body = new Body();
+        body.setRouteRequest(routeRequest);
+        Request request = new Request();
+        request.setBody(body);
+        request.setLang("zh-CN");
+        request.setHead(account);
+        request.setService("RouteService");
+        String searchServiceXml = "";
+        try {
+            searchServiceXml = XmlUtil.toXmlNotHead(request);
+        } catch (Exception e) {
+            logger.info("=====xml解析错误===========");
+        }
+
+        final byte[] searchServiceDigest = SecurityUtil.md5Digest((searchServiceXml
+                + password).getBytes(StandardCharsets.UTF_8));
+        final String searchServiceVerifyCode = Base64.encode(searchServiceDigest);
+        final Map<String, String> searchForm = new HashMap<>();
+        searchForm.put("xml", searchServiceXml);
+        searchForm.put("verifyCode", searchServiceVerifyCode);
+        if (logger.isDebugEnabled()) {
+            logger.debug(
+                    "routeService xml=" + searchServiceXml + ", \r\nverifyCode=" + searchServiceVerifyCode);
+        }
+        try {
+            String response = sendSSLPostToWx(url,searchForm);
+            if (Strings.isNullOrEmpty(response)) {
+                if (logger.isErrorEnabled()) {
+                    logger.error(ResultCodeEnum.ORDERSEARCHFAIL.getCode()+"请求顺丰 RouteService接口失败. searchXml = " + searchServiceXml
+                            + "; verifyCode = " + searchServiceVerifyCode);
+                }
+            }
+            if (logger.isDebugEnabled()) {
+                logger.debug("call routeService response=" + response);
+            }
+            SfRouteServiceResponseEntity entity = (SfRouteServiceResponseEntity)XmlUtil.toObject(response, SfRouteServiceResponseEntity.class);
+//            System.out.println(entity.toString());
+            return entity;
+        } catch (final Exception e) {
+            if (logger.isErrorEnabled()) {
+                logger.error(ResultCodeEnum.ORDERSEARCHFAIL.getCode()+"请求顺丰 RouteService接口失败. searchXml = " + searchServiceXml
+                        + "; verifyCode = " + searchServiceVerifyCode, e);
+            }
+            return null;
+        }
+
+    }
+
+    /**
+     * 请求微信https
+     **/
+    public static String sendSSLPostToWx(String url, Map<String, String> form) {
+        HttpPost httpPost = new HttpPost(url);
+        List<NameValuePair> formParams = new ArrayList<NameValuePair>();
+        for (Map.Entry<String, String> entry : form.entrySet()) {
+            formParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
+        }
+        UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formParams, Charset.forName("UTF-8"));
+        httpPost.setEntity(urlEncodedFormEntity);
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+
+        CloseableHttpResponse response = null;
+        try {
+            response = httpClient.execute(httpPost);
+            HttpEntity entity = response.getEntity();
+            String xmlStr = EntityUtils.toString(entity, "UTF-8");
+            return xmlStr;
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            return null;
+        } finally {
+            try {
+                if (response != null) {
+                    response.close();
+                }
+            } catch (IOException e) {
+                logger.error(e.getMessage(), e);
+            }
+        }
+    }
+
+    public static void main(String[] args){
+//        List<RouteEntity> entity = SFUtil.routeService("802051116469","7557258112",
+//                "7XwQlB4WSsNqPWeactE6XpFa7f0cKBtx","http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService");
+        SfRouteServiceResponseEntity entity = SFUtil.routeService("444072971585","SZQHDS",
+                "uJKzw7yjMvCYTeLk","http://218.17.248.244:11080/bsp-oisp/sfexpressService");
+        if(entity.getHead().equalsIgnoreCase("OK")){
+            if(entity.getBody() != null){
+                RouteResponseEntity routeResponseEntity =  entity.getBody().getRouteResponse().get(0);
+                if(routeResponseEntity != null){
+                    List<RouteEntity> entityList = routeResponseEntity.getRouteResponse();
+                    for (RouteEntity route : entityList) {
+                        System.out.println(route.getAccept_time());
+                        System.out.println(route.getRemark());
+                        System.out.println(route.getAccept_address());
+                    }
+                }
+            }
+        }else{
+
+        }
+    }
+
+}

+ 26 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/request/Body.java

@@ -0,0 +1,26 @@
+package com.kmall.manager.manager.express.sf.request;
+
+import com.kmall.manager.manager.express.sf.request.RouteRequest;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2017-10-21 16:40
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Body {
+    @XmlElement(name = "RouteRequest")
+    private RouteRequest routeRequest;
+
+    public RouteRequest getRouteRequest() {
+        return routeRequest;
+    }
+
+    public void setRouteRequest(RouteRequest routeRequest) {
+        this.routeRequest = routeRequest;
+    }
+}

+ 53 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/request/Request.java

@@ -0,0 +1,53 @@
+package com.kmall.manager.manager.express.sf.request;
+
+import javax.xml.bind.annotation.*;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2017-10-21 16:42
+ */
+@XmlRootElement(name="Request")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Request {
+    @XmlAttribute(name = "service")
+    private String service;
+    @XmlAttribute(name = "lang")
+    private String lang;
+    @XmlElement(name = "Head")
+    private String Head;
+    @XmlElement(name = "Body")
+    private com.kmall.manager.manager.express.sf.request.Body Body;
+
+    public void setService(String service) {
+        this.service = service;
+    }
+
+    public String getService() {
+        return this.service;
+    }
+
+    public void setLang(String lang) {
+        this.lang = lang;
+    }
+
+    public String getLang() {
+        return this.lang;
+    }
+
+    public void setHead(String Head) {
+        this.Head = Head;
+    }
+
+    public String getHead() {
+        return this.Head;
+    }
+
+    public void setBody(Body Body) {
+        this.Body = Body;
+    }
+
+    public Body getBody() {
+        return this.Body;
+    }
+}

+ 46 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/express/sf/request/RouteRequest.java

@@ -0,0 +1,46 @@
+package com.kmall.manager.manager.express.sf.request;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-03-29 16:54
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+public class RouteRequest {
+    @XmlAttribute(name = "tracking_type")
+    private Integer tracking_type;//1则运单号,2则客户订单号 3 逆向单
+
+    @XmlAttribute(name = "tracking_number")
+    private String tracking_number;//运单号/客户订单号
+
+    @XmlAttribute(name = "method_type")
+    private Integer method_type;
+
+    public Integer getMethod_type() {
+        return method_type;
+    }
+
+    public void setMethod_type(Integer method_type) {
+        this.method_type = method_type;
+    }
+
+    public Integer getTracking_type() {
+        return tracking_type;
+    }
+
+    public void setTracking_type(Integer tracking_type) {
+        this.tracking_type = tracking_type;
+    }
+
+    public String getTracking_number() {
+        return tracking_number;
+    }
+
+    public void setTracking_number(String tracking_number) {
+        this.tracking_number = tracking_number;
+    }
+}

+ 24 - 0
kmall-manager/src/main/resources/conf/express-sf.properties

@@ -0,0 +1,24 @@
+########## \u5FEB\u9012-sf\u914D\u7F6E ##########
+
+# [dev, prod]
+express.sf.env=prod
+
+#========== \u5F00\u53D1\u73AF\u5883 ==========
+#\u8D26\u53F7
+sf.dev.account=BSPdevelop
+#\u5BC6\u7801
+sf.dev.password=j8DzkIFgmlomPt0aLuwU
+#\u8BF7\u6C42url
+sf.dev.url=http://bsp-ois.sit.sf-express.com:9080/bsp-ois/sfexpressService
+
+
+
+#========== \u751F\u4EA7\u73AF\u5883 ==========
+#\u8D26\u53F7
+sf.prod.account=7557258112
+#\u5BC6\u7801
+sf.prod.password=7XwQlB4WSsNqPWeactE6XpFa7f0cKBtx
+#\u8BF7\u6C42url
+sf.prod.url=http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService
+
+

+ 31 - 0
kmall-manager/src/main/resources/spring/spring-express-sf.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:mvc="http://www.springframework.org/schema/mvc"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans 
+        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context-4.2.xsd
+     	http://www.springframework.org/schema/aop
+     	http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
+		http://www.springframework.org/schema/mvc
+     	http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
+
+
+    <bean id="sfProdProperties" class="com.kmall.manager.manager.express.sf.properties.SFProdProperties">
+        <property name="account" value="${sf.prod.account}"/>
+        <property name="password" value="${sf.prod.password}"/>
+        <property name="url" value="${sf.prod.url}"/>
+    </bean>
+
+    <bean id="sfDevProperties" class="com.kmall.manager.manager.express.sf.properties.SFDevProperties">
+        <property name="account" value="${sf.dev.account}"/>
+        <property name="password" value="${sf.dev.password}"/>
+        <property name="url" value="${sf.dev.url}"/>
+    </bean>
+
+
+</beans>

+ 1 - 0
kmall-manager/src/main/resources/spring/spring-manager-context.xml

@@ -32,6 +32,7 @@
                 <value>classpath:conf/print-ticket.properties</value>
                 <value>classpath:conf/print-ticket.properties</value>
                 <value>classpath:conf/oms-merch.properties</value>
                 <value>classpath:conf/oms-merch.properties</value>
                 <value>classpath:conf/common.properties</value>
                 <value>classpath:conf/common.properties</value>
+                <value>classpath:conf/express-sf.properties</value>
             </list>
             </list>
         </property>
         </property>
         <property name="fileEncoding" value="UTF-8"/>
         <property name="fileEncoding" value="UTF-8"/>

+ 1 - 0
kmall-manager/src/main/resources/spring/spring-manager-main.xml

@@ -26,5 +26,6 @@
     <import resource="classpath:spring/spring-print-ticket.xml"/>
     <import resource="classpath:spring/spring-print-ticket.xml"/>
     <import resource="classpath:spring/spring-oms-merch.xml"/>
     <import resource="classpath:spring/spring-oms-merch.xml"/>
     <import resource="classpath:spring/spring-common.xml"/>
     <import resource="classpath:spring/spring-common.xml"/>
+    <import resource="classpath:spring/spring-express-sf.xml"/>
 
 
 </beans>
 </beans>

+ 27 - 9
wx-mall/pages/goods/goods.js

@@ -140,7 +140,6 @@ Page({
           gallery: res.data
           gallery: res.data
         })
         })
       }
       }
-      ;
     });
     });
   },
   },
 
 
@@ -186,15 +185,34 @@ Page({
   },
   },
   onLoad: function (options) {
   onLoad: function (options) {
     // 页面初始化 options为页面跳转所带来的参数
     // 页面初始化 options为页面跳转所带来的参数
-    this.setData({
-      id: parseInt(options.id),
-      storeId: options.storeId
-      // id: 1181000
-    });
+    if (options.scene) {
+      var scene = decodeURIComponent(options.scene);
+      console.log("scene is ", scene);
+      var scanArray = scene.split('&');
+      var id = scanArray[0];
+      var storeId = scanArray[1];
+      var code = scanArray[2];
+      console.log("id is ", id);
+      console.log("storeId is ", storeId);
+      console.log("code is ", code);
+      this.setData({
+        id: id,
+        storeId: storeId
+      });
+      if (storeId) {
+        wx.setStorageSync('storeId', storeId);
+        wx.setStorageSync('isShare', 'true');
+      }
+    }else{
+      this.setData({
+        id: parseInt(options.id),
+        storeId: options.storeId
+      });
 
 
-    if(options.storeId){
-      wx.setStorageSync('storeId', options.storeId);
-      wx.setStorageSync('isShare', 'true');
+      if (options.storeId) {
+        wx.setStorageSync('storeId', options.storeId);
+        wx.setStorageSync('isShare', 'true');
+      }
     }
     }
     console.log('分享的storeId1:' + wx.getStorageSync('storeId'))
     console.log('分享的storeId1:' + wx.getStorageSync('storeId'))
     var that = this;
     var that = this;

+ 2 - 4
wx-mall/pages/hotGoods/hotGoods.js

@@ -26,8 +26,7 @@ Page({
     number: 1,
     number: 1,
     retailPrice: '',
     retailPrice: '',
     stockNum: 0,
     stockNum: 0,
-    cartNumber: 0,
-    totalPages: 0
+    cartNumber: 0
   },
   },
   toggleNav() {
   toggleNav() {
     this.setData({
     this.setData({
@@ -59,8 +58,7 @@ Page({
           let goodsList = that.data.goodsList.concat(res.data.goodsList);
           let goodsList = that.data.goodsList.concat(res.data.goodsList);
           that.setData({
           that.setData({
             goodsList: goodsList,
             goodsList: goodsList,
-            filterCategory: res.data.filterCategory,
-            totalPages: 0
+            filterCategory: res.data.filterCategory
           });
           });
           wx.hideLoading();
           wx.hideLoading();
           if(that.data.categoryId>0){
           if(that.data.categoryId>0){

+ 24 - 22
wx-mall/pages/ucenter/addressAdd/addressAdd.js

@@ -360,28 +360,30 @@ Page({
               console.log(rs);
               console.log(rs);
               let address = that.data.address;
               let address = that.data.address;
               let selectRegionList = that.data.selectRegionList;
               let selectRegionList = that.data.selectRegionList;
-              selectRegionList[0].id = rs.result.address_component.province;
-              selectRegionList[0].name = rs.result.address_component.province;
-              selectRegionList[0].parent_id = 1;
-
-              selectRegionList[1].id = rs.result.address_component.city;
-              selectRegionList[1].name = rs.result.address_component.city;
-              selectRegionList[1].parent_id = rs.result.address_component.province;
-
-              selectRegionList[2].id = rs.result.address_component.district;
-              selectRegionList[2].name = rs.result.address_component.district;
-              selectRegionList[2].parent_id = rs.result.address_component.city;
-
-              address.provinceName = rs.result.address_component.province;
-              address.cityName = rs.result.address_component.city;
-              address.countyName = rs.result.address_component.district;
-
-              address.full_region = address.provinceName + address.cityName + address.countyName;
-              that.setData({
-                address: address,
-                selectRegionList: selectRegionList
-              });
-              that.getRegionList(1);
+              if (rs.result){
+                selectRegionList[0].id = rs.result.address_component.province;
+                selectRegionList[0].name = rs.result.address_component.province;
+                selectRegionList[0].parent_id = 1;
+
+                selectRegionList[1].id = rs.result.address_component.city;
+                selectRegionList[1].name = rs.result.address_component.city;
+                selectRegionList[1].parent_id = rs.result.address_component.province;
+
+                selectRegionList[2].id = rs.result.address_component.district;
+                selectRegionList[2].name = rs.result.address_component.district;
+                selectRegionList[2].parent_id = rs.result.address_component.city;
+
+                address.provinceName = rs.result.address_component.province;
+                address.cityName = rs.result.address_component.city;
+                address.countyName = rs.result.address_component.district;
+
+                address.full_region = address.provinceName + address.cityName + address.countyName;
+                that.setData({
+                  address: address,
+                  selectRegionList: selectRegionList
+                });
+                that.getRegionList(1);
+              }
             },
             },
             fail: function (rs) {
             fail: function (rs) {
               console.log(rs);
               console.log(rs);

+ 1 - 1
wx-mall/pages/ucenter/footprint/footprint.js

@@ -48,7 +48,7 @@ Page({
       });
       });
     } else {
     } else {
       wx.navigateTo({
       wx.navigateTo({
-        url: '/pages/goods/goods?id=' + footprint.goods_id,
+        url: '/pages/goods/goods?id=' + footprint.goods_id + '&&storeId=' + footprint.storeId,
       });
       });
     }
     }
     
     

+ 3 - 0
切换环境需要修改的.md

@@ -12,6 +12,9 @@
 4. 快递鸟配置
 4. 快递鸟配置
     文件目录:resources\conf\express-kdn.properties
     文件目录:resources\conf\express-kdn.properties
         修改env为prod
         修改env为prod
+41. sf快递配置
+    文件目录:resources\conf\express-sf.properties
+        
 5. 云片短信配置
 5. 云片短信配置
     文件目录:resources\conf\common.properties
     文件目录:resources\conf\common.properties