package cn.lili.modules.logistics.plugin.kuaidi100; import cn.lili.modules.logistics.LogisticsPlugin; import cn.lili.modules.logistics.entity.dto.LabelOrderDTO; import cn.lili.modules.logistics.entity.enums.LogisticsEnum; import cn.lili.modules.logistics.plugin.kuaidi100.utils.Kuaidi100SignUtils; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.store.entity.dos.StoreLogistics; import cn.lili.modules.store.entity.dto.StoreDeliverGoodsAddressDTO; import cn.lili.modules.system.entity.dos.Logistics; import cn.lili.modules.system.entity.dto.LogisticsSetting; import cn.lili.modules.system.entity.vo.Traces; import com.google.gson.Gson; import com.kuaidi100.sdk.api.LabelV2; import com.kuaidi100.sdk.api.QueryTrack; import com.kuaidi100.sdk.api.QueryTrackMap; import com.kuaidi100.sdk.contant.ApiInfoConstant; import com.kuaidi100.sdk.contant.PrintType; import com.kuaidi100.sdk.core.IBaseClient; import com.kuaidi100.sdk.pojo.HttpResult; import com.kuaidi100.sdk.request.ManInfo; import com.kuaidi100.sdk.request.PrintReq; import com.kuaidi100.sdk.request.QueryTrackParam; import com.kuaidi100.sdk.request.QueryTrackReq; import com.kuaidi100.sdk.request.labelV2.OrderReq; import com.kuaidi100.sdk.response.QueryTrackData; import com.kuaidi100.sdk.response.QueryTrackMapResp; import com.kuaidi100.sdk.response.QueryTrackResp; import com.kuaidi100.sdk.response.samecity.OrderResp; import com.kuaidi100.sdk.utils.SignUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 快递100插件 * * @author Bulbasaur */ @Slf4j public class Kuaidi100Plugin implements LogisticsPlugin { @Autowired private LogisticsSetting logisticsSetting; public Kuaidi100Plugin(LogisticsSetting logisticsSetting) { this.logisticsSetting = logisticsSetting; } @Override public LogisticsEnum pluginName() { return LogisticsEnum.KUAIDI100; } @Override public Traces pollQuery(Logistics logistics, String expNo, String phone) { try { QueryTrackReq queryTrackReq = new QueryTrackReq(); QueryTrackParam queryTrackParam = new QueryTrackParam(); queryTrackParam.setCom(logistics.getCode()); queryTrackParam.setNum(expNo); queryTrackParam.setPhone(phone); String param = new Gson().toJson(queryTrackParam); queryTrackReq.setParam(param); queryTrackReq.setCustomer(logisticsSetting.getKuaidi100Customer()); queryTrackReq.setSign(Kuaidi100SignUtils.querySign(param, logisticsSetting.getKuaidi100Key(), logisticsSetting.getKuaidi100Customer())); IBaseClient baseClient = new QueryTrack(); HttpResult httpResult = baseClient.execute(queryTrackReq); QueryTrackResp queryTrackResp = new Gson().fromJson(httpResult.getBody(), QueryTrackResp.class); log.info(String.valueOf(queryTrackResp.getData())); List traces = new ArrayList<>(); for (QueryTrackData queryTrackData : queryTrackResp.getData()) { Map map = new HashMap(); map.put("AcceptTime", queryTrackData.getTime()); map.put("AcceptStation", queryTrackData.getContext()); map.put("Remark", null); traces.add(map); } return new Traces(logistics.getName(), expNo, traces); } catch (Exception e) { e.printStackTrace(); } return null; } @Override public Traces pollMapTrack(Logistics logistics, String expNo, String phone, String from, String to) { try { QueryTrackReq queryTrackReq = new QueryTrackReq(); QueryTrackParam queryTrackParam = new QueryTrackParam(); queryTrackParam.setCom(logistics.getCode()); queryTrackParam.setNum(expNo); queryTrackParam.setPhone(phone); queryTrackParam.setFrom(from); queryTrackParam.setTo(to); queryTrackParam.setResultv2("5"); String param = new Gson().toJson(queryTrackParam); queryTrackReq.setParam(param); queryTrackReq.setCustomer(logisticsSetting.getKuaidi100Customer()); queryTrackReq.setSign(SignUtils.querySign(param, logisticsSetting.getKuaidi100Key(), logisticsSetting.getKuaidi100Customer())); IBaseClient baseClient = new QueryTrackMap(); HttpResult result = baseClient.execute(queryTrackReq); QueryTrackMapResp queryTrackMapResp = new Gson().fromJson(result.getBody(), QueryTrackMapResp.class); System.out.println(queryTrackMapResp); } catch (Exception e) { e.printStackTrace(); } return null; } @Override public Map labelOrder(LabelOrderDTO labelOrderDTO) { try { //订单 Order order = labelOrderDTO.getOrder(); //订单货物 List orderItems = labelOrderDTO.getOrderItems(); //获取对应物流 Logistics logistics = labelOrderDTO.getLogistics(); //收件人地址 String[] consigneeAddress = order.getConsigneeAddressPath().split(","); //获取店家信息 StoreDeliverGoodsAddressDTO storeDeliverGoodsAddressDTO = labelOrderDTO.getStoreDeliverGoodsAddressDTO(); //发件人地址 String[] consignorAddress = storeDeliverGoodsAddressDTO.getSalesConsignorAddressPath().split(","); //店铺-物流公司设置 StoreLogistics storeLogistics = labelOrderDTO.getStoreLogistics(); ManInfo recManInfo = new ManInfo(); recManInfo.setName(order.getConsigneeName()); recManInfo.setMobile(order.getConsigneeMobile()); recManInfo.setPrintAddr(consigneeAddress[0] + consigneeAddress[1] + consigneeAddress[2] + consigneeAddress[3] + order.getConsigneeDetail()); ManInfo sendManInfo = new ManInfo(); sendManInfo.setName(storeDeliverGoodsAddressDTO.getSalesConsignorName()); sendManInfo.setMobile(storeDeliverGoodsAddressDTO.getSalesConsignorMobile()); sendManInfo.setPrintAddr(consignorAddress[0] + consignorAddress[1] + consignorAddress[2] + consignorAddress[3] + storeDeliverGoodsAddressDTO.getSalesConsignorDetail()); OrderReq orderReq = new OrderReq(); orderReq.setKuaidicom(logistics.getCode()); orderReq.setCount(1); // orderReq.setSiid(siid); //orderReq.setTempId("60f6c17c7c223700131d8bc3"); orderReq.setSendMan(sendManInfo); orderReq.setRecMan(recManInfo); orderReq.setPrintType(PrintType.CLOUD); String param = new Gson().toJson(orderReq); String t = System.currentTimeMillis() + ""; PrintReq printReq = new PrintReq(); printReq.setT(t); printReq.setKey(logisticsSetting.getKuaidi100Key()); printReq.setSign(SignUtils.printSign(param, t, logisticsSetting.getKuaidi100Key(), logisticsSetting.getKuaidi100Customer())); printReq.setMethod(ApiInfoConstant.ORDER); printReq.setParam(param); IBaseClient baseClient = new LabelV2(); HttpResult result = baseClient.execute(printReq); System.out.println(result.getBody()); QueryTrackMapResp queryTrackMapResp = new Gson().fromJson(result.getBody(), QueryTrackMapResp.class); OrderResp orderResp = new Gson().fromJson(result.getBody(), OrderResp.class); } catch (Exception e) { e.printStackTrace(); } return null; } @Override public String createOrder(OrderDetailVO orderDetailVO) { return null; } }