//校验订单是否存在
Example goodsOrderExample =new Example(GoodsOrder.class);
goodsOrderExample.createCriteria().andEqualTo("id", orderId)
.andEqualTo("orderStatus", GoodsOrderStatusEnum.waitDelivery.getCode())
.andEqualTo("deleteFlag", DeleteFlagEnum.NotDeleted.getCode());
GoodsOrder goodsOrder =goodsOrderMapper.selectOneByExample(goodsOrderExample);
AssertUtil.notNull(goodsOrder, ExceptionEnum.GoodsOrderNoExists);
logsService.addLogs(adminId,ip,"处理"+goodsOrder.getOrderNo()+"订单发货",goodsOrder.getUserId());
GoodsOrderDelivery goodsOrderDelivery =new GoodsOrderDelivery();
OrderDeliveryBo orderAddress =goodsOrderMapper.getGoodsOrderInfo(orderId);
String address = orderAddress.getProvince()+","+orderAddress.getCity()+","+orderAddress.getArea();
//更新发货信息(物流即时查询,订阅)
String expressCode = deliveryParam.getExpressCode();
String expressName = deliveryParam.getExpressName();
String expressNo = deliveryParam.getExpressNo();
goodsOrderDelivery.setExpressName(expressName);
goodsOrderDelivery.setExpressNo(expressNo);
goodsOrderDelivery.setExpressCode(expressCode);
goodsOrderDelivery.setUserId(goodsOrder.getUserId());
goodsOrderDelivery.setOrderId(orderId);
goodsOrderDelivery.setAddress(address);
goodsOrderDelivery.setAreas( orderAddress.getProvince()+orderAddress.getCity()+orderAddress.getArea()+orderAddress.getAddress());
goodsOrderDelivery.setConsignee(orderAddress.getConsignee());
goodsOrderDelivery.setPhone(orderAddress.getPhone());
String logisticsInfo = ExpressUtil.realtime(expressCode, expressNo);
Map<String, Object> logisticsInfoMap = JsonUtil.getInstance().toJsonObj(logisticsInfo, Map.class);
//物流状态
int status =0;
Object statusObj = logisticsInfoMap.get("State");
if (statusObj !=null) {
status = Integer.parseInt(String.valueOf(statusObj));
}
List<ExpressDetailDto> expressDetailList = com.google.common.collect.Lists.newArrayList();
//物流轨迹
Object trace = logisticsInfoMap.get("Traces");
if (trace !=null) {
System.out.println(trace);
System.out.println(JsonUtil.getInstance().toJsonString(trace));
List<LogisticsTraceBo> data =(List<LogisticsTraceBo>) JsonUtil.getInstance().toJsonObjList(JsonUtil.getInstance().toJsonString(trace), LogisticsTraceBo.class);
data.forEach(obj ->{
ExpressDetailDto expressDetailDto =new ExpressDetailDto();
expressDetailDto.setMsg(obj.getAcceptStation());
expressDetailDto.setTime(obj.getAcceptTime());
expressDetailList.add(expressDetailDto);
});
}
ExpressDto expressDto =new ExpressDto();
expressDto.setTraces(expressDetailList);
expressDto.setStatus(status);
goodsOrderDelivery.setLogisticsInfo(JsonUtil.getInstance().toJsonString(expressDto));
goodsOrderDelivery.setDeliveryTime(new Date());
goodsOrderDelivery.setCreateTime(new Date());
goodsOrderDeliveryMapper.insertSelective(goodsOrderDelivery);
//更新订单状态为已发货
GoodsOrder order =new GoodsOrder();
order.setOrderStatus(GoodsOrderStatusEnum.waitReceipt.getCode());
Example orderExample =new Example(GoodsOrder.class);
orderExample.createCriteria().andEqualTo("orderStatus",GoodsOrderStatusEnum.waitDelivery.getCode())
.andEqualTo("id",orderId)
.andEqualTo("deleteFlag", DeleteFlagEnum.NotDeleted.getCode());
goodsOrderMapper.updateByExampleSelective(order,orderExample);
/**
物流信息
**/
package com.qcdl.web.controller;
import com.qcdl.service.GoodsOrderService;
import com.qcdl.web.config.annotation.ResponseAdvice;
import com.qcdl.web.config.enums.ResponseAdviceEnum;
import com.qcdl.web.wechat.RequestUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* @author qcdl
* @date 2019/7/1
*/
@Api(value ="物流相关接口", tags ={"物流相关接口"}, hidden =true, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ApiIgnore
@RestController
@RequestMapping(value ="/express", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Slf4j
public class ExpressController{
@Resource
private GoodsOrderServicegoodsOrderService;
@ApiOperation(value ="物流跟踪通知", notes ="订单物流跟踪通知", hidden =true)
@PostMapping(value ="/notify")
@ResponseAdvice(ResponseAdviceEnum.NOT_REQUIRED)
public Map<String, Object> expressNotify(HttpServletRequest request) {
Map<String, String> logisticsData = RequestUtil.parseRequestParam(request);
return goodsOrderService.updateGoodsDelivery(logisticsData);
}
}
@SuppressWarnings("unchecked")
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> updateGoodsDelivery(Map<String, String> logisticsData) {
String requestData = logisticsData.get("RequestData");
Map<String, Object> data = JsonUtil.getInstance().toJsonObj(requestData, Map.class);
//推送是否有物流轨迹
int count = Integer.parseInt(String.valueOf(data.get("Count")));
Map<String, Object> result = Maps.newHashMap();
result.put("EBusinessID", ExpressUtil.MCH);
result.put("UpdateTime", DateUtils.getCurrentTimeString());
result.put("Success", false);
if (count !=0) {
List<LogisticsInfoBo> logisticsInfoBoList =(List<LogisticsInfoBo>) JsonUtil.getInstance()
.toJsonObjList(JsonUtil.getInstance().toJsonString(data.get("Data")), LogisticsInfoBo.class);
LogisticsInfoBo logisticsInfo = logisticsInfoBoList.get(0);
if (logisticsInfo !=null) {
List<ExpressDetailDto> expressDetailList = Lists.newArrayList();
logisticsInfo.getTraces().forEach(obj ->{
ExpressDetailDto expressDetailDto =new ExpressDetailDto();
expressDetailDto.setMsg(obj.getAcceptStation());
expressDetailDto.setTime(obj.getAcceptTime());
expressDetailList.add(expressDetailDto);
});
String expressCode = logisticsInfo.getExpressCode();
String expressNo = logisticsInfo.getExpressNo();
Integer status = logisticsInfo.getStatus();
ExpressDto expressDto =new ExpressDto();
expressDto.setTraces(expressDetailList);
expressDto.setStatus(status);
GoodsOrderDelivery goodsOrderDelivery =new GoodsOrderDelivery();
goodsOrderDelivery.setLogisticsInfo(JsonUtil.getInstance().toJsonString(expressDto));
Example example =new Example(GoodsOrderDelivery.class);
example.createCriteria().andEqualTo("expressCode", expressCode)
.andEqualTo("expressNo", expressNo);
goodsOrderDeliveryMapper.updateByExampleSelective(goodsOrderDelivery, example);
result.put("Success", true);
}
}
return result;
}
网友评论