说明:由于Java开源生鲜电商平台是属于自建物流系统,也就是买家下的单,需要公司派物流团队进行派送。

           业务需求中买家的下单时间控制在:12:00-03:00之间。这段时间可以进行下单。

1.业务分析:

物流团队需要知道以下东西。

1. 配送师傅需要知道去那个菜市场去哪个卖家那里拿到那个买家的货,由于买家买的菜是全品类,但是卖家卖的菜是单品,所以需要进行袋子组装。

2. 配送师傅需要确认按照买家分组,知道那些菜是否组装了,那些菜没有进行组装。

3. 对于已经送完的买家需要物流APP操作已经送完,方便整个系统的运营与管理。

2. 业务架构:

1. 根据业务的分析,我们得出以下几个数据库表的设计

2. 物流人员的管理表,其中由于物流的经理是可以看到所有的区域以及所有的物流的情况。

3. 需要根据GPS定位知道目前配送师傅的具体地址。

4. 配送师傅知道今天要去那几家取货,而且取多少,需要一目了然。

最新表结构如下:

3. 配送人员基础信息表:

CREATE TABLE `delivery` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',`delivery_phone` varchar(16) DEFAULT NULL COMMENT '手机号码,作为账号登陆',`delivery_password` varchar(64) DEFAULT NULL COMMENT '密码',`delivery_name` varchar(16) DEFAULT NULL COMMENT '配送人员姓名',`delivery_sex` int(11) DEFAULT NULL COMMENT '性别,1为男,2为女',`delivery_idcard` varchar(18) DEFAULT NULL COMMENT '身份证号码',`delivery_age` int(11) DEFAULT NULL COMMENT '配送人员年龄',`delivery_type` int(11) DEFAULT NULL COMMENT '配送人员类型:1为自营,2为加盟',`area_id` bigint(20) DEFAULT NULL COMMENT '所属区域',`sequence` int(11) DEFAULT NULL COMMENT '排序使用.从小到大排序',`status` int(11) DEFAULT NULL COMMENT '1为可用,-1为不可用',`remark` varchar(256) DEFAULT NULL COMMENT '备注信息',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`last_update_time` datetime DEFAULT NULL COMMENT '最后更新时间',`permission_type` tinyint(4) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COMMENT='配送人员基本信息';

补充说明:增加了一个permission_type来确定当前用户账号的权限。相关的表结构的注释写的比较清楚。

4. 配送师傅配送区域信息表

CREATE TABLE `delivery_area` (`da_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`da_area_id` bigint(20) DEFAULT NULL COMMENT '区域ID',`da_address` varchar(255) DEFAULT NULL COMMENT '地址',`da_status` tinyint(4) DEFAULT NULL COMMENT '状态 1在用 -1停用',`da_user_id` bigint(20) DEFAULT NULL COMMENT '创建人',`da_create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`da_id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COMMENT='配送区域';

说明:不可能全城所有的物流都是一个师傅配送吧,每个师傅需要看到属于自己配送的买家,仅此而已,我们按照区域维度进行划分。

5. 我们需要知道配送师傅目前的GPS地理位置,那么需要建立一个数据进行存储

CREATE TABLE `delivery_coordinate` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',`delivery_id` bigint(20) DEFAULT NULL COMMENT '配送人员ID',`lng` varchar(60) DEFAULT NULL COMMENT '经度',`lat` varchar(60) DEFAULT NULL COMMENT '维度',`address` varchar(255) DEFAULT NULL COMMENT '地址',`create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=152063 DEFAULT CHARSET=utf8 COMMENT='配送司机坐标';

备注说明:平均每隔30秒,进行系统的主动上报,最终会形成一个配送师傅的坐标。

6. 配送人员管理区域信息表

CREATE TABLE `delivery_da` (`dda_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`dda_delivery_id` bigint(20) DEFAULT NULL COMMENT '配送人员ID',`dda_da_id` bigint(20) DEFAULT NULL COMMENT '配送区域ID',`dda_user_id` bigint(20) DEFAULT NULL COMMENT '创建人',`dda_create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`dda_id`)
) ENGINE=InnoDB AUTO_INCREMENT=465 DEFAULT CHARSET=utf8 COMMENT='配送人员管理区域';

说明:一个区域可能买家比较多,所以需要进行多维度进行划分,更加细致的进行配送人员的管理。

7.对于有些特殊的情况,比如车在路上坏了,那么需要进行人工分配物流

CREATE TABLE `delivery_task` (`task_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`delivery_id` bigint(20) DEFAULT NULL COMMENT '配送人员ID',`order_id` bigint(20) DEFAULT NULL COMMENT '订单ID',`order_item_id` bigint(20) DEFAULT NULL COMMENT '订单明细ID',`sys_user_id` bigint(20) DEFAULT NULL COMMENT '分配人员ID',`create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

最终形成了完整的业务逻辑闭环

相关的业务核心代码如下:

/*** 配送端订单*/
@RestController
@RequestMapping("/delivery")
public class OrderV1Controller extends BaseController {private static final Logger logger = LoggerFactory.getLogger(OrderV1Controller.class);@Autowiredprivate OrderV1Service orderV1Service;@Autowiredprivate DeliveryCoordinateService deliveryCoordinateService;@Autowiredprivate DeliveryService deliveryService;@Autowiredprivate AreaService areaService;/*** 统计配送人员订单数*/@RequestMapping(value = "/order/index", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult index(HttpServletRequest request, HttpServletResponse response,Model model,Long deliveryId) {try {//全部DeliveryVo all = deliveryService.getDeliveryVo(0,deliveryId,null);//已送DeliveryVo send = deliveryService.getDeliveryVo(1,deliveryId,2);//未送DeliveryVo noSend = deliveryService.getDeliveryVo(1,deliveryId,1);int sendCount = send.getOrderNum();BigDecimal totalAmt = all.getTotalAmt() == null ? BigDecimal.ZERO :all.getTotalAmt();int allCount = all.getOrderNum();int noSendCount = noSend.getOrderNum();model.addAttribute("noSendCount",noSendCount);model.addAttribute("sendCount",sendCount);model.addAttribute("allCount",allCount);model.addAttribute("totalAmt",totalAmt);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", model);} catch (Exception ex) {logger.error("[OrderV1Controller][index] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 取货订单列表(按卖家查询) */@RequestMapping(value = "/order/pickUplistBySeller", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult pickUplistBySeller(HttpServletRequest request, HttpServletResponse response,Long sellerId,Long deliveryId,Short deliveryType,Short deliveryStatus,Short payStatus) {try {//查询订单明细List<PickUpItemVo> orderItemList = orderV1Service.getPickUpItemList(null,sellerId,deliveryId,deliveryType,deliveryStatus,payStatus);//返回取货列表List<PickUpListVo> pickUpList = new ArrayList<PickUpListVo>(); //返回结果List<BuyerVo> buyerList = new ArrayList<BuyerVo>();//分组判断Map<Long,BuyerVo> buyerMap = new HashMap<Long,BuyerVo>();//分组判断Map<Long,List<BuyerVo>> pickUpMap = new TreeMap<Long,List<BuyerVo>>(new Comparator<Long>(){public int compare(Long obj1, Long obj2) {// 降序排序return obj2.compareTo(obj1);}});//卖家订单总金额Map<Long,BigDecimal> buyer_amt = new HashMap<Long,BigDecimal>();//备货完成统计Map<Long,Integer> a = new HashMap<Long,Integer>();//缺货统计Map<Long,Integer> b = new HashMap<Long,Integer>();//订单明细数量Map<Long,Integer> c = new HashMap<Long,Integer>();if (null != orderItemList){for(PickUpItemVo oiv : orderItemList){Long orderId = oiv.getOrderId();//配送状态int stockStatus = 0;//订单明细配送状态int status = oiv.getSellerStatus();//备货完成统计int aa = a.get(orderId) == null ? 0 :a.get(orderId);//缺货统计int bb = b.get(orderId) == null ? 0 :b.get(orderId);//订单明细数量int cc = c.get(orderId) == null ? 0 :c.get(orderId);BigDecimal buyer_totalAmt = buyer_amt.get(orderId) == null ? BigDecimal.ZERO :buyer_amt.get(orderId);if(buyerMap.containsKey(orderId)){if(status == 1){aa += status;}if(status == 2){bb += status;}cc++;a.put(orderId, aa);b.put(orderId, bb);c.put(orderId, cc);//备货完成if(aa == cc){stockStatus = 1;}//部分备货if(aa>0 && aa!=cc){stockStatus = 2;}//缺货if(aa == 0 && bb>0){stockStatus = 3;}buyer_totalAmt = oiv.getGoodsAmount().add(buyer_totalAmt);buyer_amt.put(orderId, buyer_totalAmt);//跟买卖家总金额buyerMap.get(orderId).setTotalAmt(buyer_totalAmt);buyerMap.get(orderId).setStockStatus(stockStatus);}else{c.put(orderId, 1);if(status == 1){a.put(orderId, 1);stockStatus = 1;}if(status == 2){b.put(orderId, 2);stockStatus = 3;}//创建买家信息BuyerVo bv = new BuyerVo();bv.setOrderId(oiv.getOrderId());bv.setOrderNumber(oiv.getOrderNumber());bv.setBuyerId(oiv.getBuyerId());bv.setBuyerName(oiv.getBuyerName());bv.setBuyerMobile(oiv.getBuyerMobile());bv.setBuyerAddress(oiv.getBuyerAddress());bv.setDeliveryStatus(oiv.getDeliveryStatus());bv.setDeliveryTime(oiv.getBestTime());bv.setTotalAmt(oiv.getGoodsAmount());bv.setSellerStatus(oiv.getSellerStatus());bv.setPayStatus(oiv.getPayStatus());bv.setDeliveryAreaId(oiv.getDeliveryAreaId());bv.setDaAddress(oiv.getDaAddress());bv.setStockStatus(stockStatus);bv.setTheAmt(oiv.getTheAmt());bv.setThePerson(oiv.getThePerson());bv.setSaleId(oiv.getSaleId());bv.setSaleName(oiv.getSaleName());bv.setSalePhone(oiv.getSalePhone());buyer_totalAmt = bv.getTotalAmt();buyer_amt.put(orderId, buyer_totalAmt);buyerMap.put(orderId, bv);buyerList.add(bv);}}List<BuyerVo> bvList = null;for(BuyerVo bv:buyerList){Long areaId = 0L;if(bv.getDeliveryAreaId()!=null){areaId = bv.getDeliveryAreaId();}if(pickUpMap.containsKey(areaId)){pickUpMap.get(areaId).add(bv);}else{PickUpListVo pv = new PickUpListVo();pv.setDeliveryAreaId(areaId);pv.setDaAddress(bv.getDaAddress());bvList = new ArrayList<BuyerVo>();bvList.add(bv);pickUpMap.put(areaId, bvList);pv.setBuyerList(bvList);pickUpList.add(pv);}}}return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", pickUpList);} catch (Exception ex) {logger.error("[OrderV1Controller][pickUplistBySeller] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 送达列表  deliveryStatus=1未送达 2已送达*/@RequestMapping(value = "/order/sellerListByBuyer", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult sellerListByBuyer(HttpServletRequest request, HttpServletResponse response,Long deliveryId,Long orderId,Short deliveryStatus) {try {//查询订单明细List<PickUpItemVo> orderItemList = orderV1Service.getPickUpItemList(orderId,null,deliveryId,(short)1,deliveryStatus,(short)0);//返回结果List<SellerVo> sellerListList = new ArrayList<SellerVo>();//按买家分组Map<Long,SellerVo> sellerMap = new TreeMap<Long,SellerVo>(new Comparator<Long>(){public int compare(Long obj1, Long obj2) {// 降序排序return obj2.compareTo(obj1);}});//备货完成统计Map<Long,Integer> a = new HashMap<Long,Integer>();//缺货统计Map<Long,Integer> b = new HashMap<Long,Integer>();//订单明细数量Map<Long,Integer> c = new HashMap<Long,Integer>();//卖家订单总金额Map<Long,BigDecimal> seller_amt = new HashMap<Long,BigDecimal>();if (null != orderItemList){for(PickUpItemVo oiv : orderItemList){Long sellerId = oiv.getSellerId();//配送状态int stockStatus = 0;//订单明细配送状态int status = oiv.getSellerStatus();//备货完成统计int aa = a.get(sellerId) == null ? 0 :a.get(sellerId);//缺货统计int bb = b.get(sellerId) == null ? 0 :b.get(sellerId);//订单明细数量int cc = c.get(sellerId) == null ? 0 :c.get(sellerId);BigDecimal seller_totalAmt = seller_amt.get(sellerId) == null ? BigDecimal.ZERO :seller_amt.get(sellerId);if(sellerMap.containsKey(sellerId)){if(status == 1){aa += status;}if(status == 2){bb += status;}cc++;a.put(sellerId, aa);b.put(sellerId, bb);c.put(sellerId, cc);//备货完成if(aa == cc){stockStatus = 1;}//部分备货if(aa>0 && aa!=cc){stockStatus = 2;}//缺货if(aa == 0 && bb>0){stockStatus = 3;}seller_totalAmt = oiv.getGoodsAmount().add(seller_totalAmt);seller_amt.put(sellerId, seller_totalAmt);//将买家信息加入到买家列表中sellerMap.get(sellerId).setTotalAmt(seller_totalAmt);sellerMap.get(sellerId).setStockStatus(stockStatus);}else{c.put(sellerId, 1);if(status == 1){a.put(orderId, 1);stockStatus = 1;}if(status == 2){b.put(orderId, 2);stockStatus = 3;}//创建卖家信息SellerVo seller = new SellerVo();seller.setOrderId(oiv.getOrderId());seller.setOrderNumber(oiv.getOrderNumber());seller.setSellerId(oiv.getSellerId());seller.setSellerName(oiv.getSellerName());seller.setSellerAccount(oiv.getSellerAccount());seller.setSellerLogo(oiv.getSellerLogo());seller.setSellerRemark(oiv.getSellerRemark());seller.setTrueName(oiv.getTrueName());seller.setSellerAddress(oiv.getSellerAddress());seller.setDeliveryStatus(oiv.getDeliveryStatus());seller.setTotalAmt(oiv.getGoodsAmount());seller.setSellerStatus(oiv.getSellerStatus());seller.setPayStatus(oiv.getPayStatus());seller.setStockStatus(stockStatus);seller_totalAmt = seller.getTotalAmt();seller_amt.put(sellerId, seller_totalAmt);//放入卖家信息到MapsellerMap.put(sellerId, seller);sellerListList.add(seller);}}}return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", sellerListList);} catch (Exception ex) {logger.error("[OrderV1Controller][sellerListByBuyer] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 订单商品列表* type=1 按卖家(传sellerId) 2按买家(传buyerId) 3按明细(传orderId和sellerId)*/@RequestMapping(value = "/order/v1/goodslist", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult goodsList(HttpServletRequest request, HttpServletResponse response,Short type,Short deliveryType,Long orderId,Long sellerId,Long buyerId,Long deliveryId) {try {List<OrderGoodsVo> goodsList = orderV1Service.getOrderGoodsList(type,deliveryType,orderId,sellerId, buyerId,deliveryId);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", goodsList);} catch (Exception ex) {logger.error("[OrderV1Controller][goodsList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 更新取货状态 */@RequestMapping(value = "/order/v1/updatePickUpStatus", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult updatePickUpStatus(HttpServletRequest request, HttpServletResponse response,Long orderId,Long sellerId) {try {int result = orderV1Service.updatePickUpStatus(orderId, sellerId);if(result > 0){return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");}else{return new JsonResult(JsonResultCode.FAILURE, "更新信息失败", "");}} catch (Exception ex) {logger.error("[OrderV1Controller][updatePickUpStatus] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 根据订单明细更新取货状态*/@RequestMapping(value = "/order/v1/updatePickUpStatusByItemId", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult updatePickUpStatusByItemId(HttpServletRequest request, HttpServletResponse response,Long itemId) {try {int result = orderV1Service.updatePickUpStatusByItemId(itemId);if(result > 0){return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");}else{return new JsonResult(JsonResultCode.FAILURE, "更新信息失败", "");}} catch (Exception ex) {logger.error("[OrderV1Controller][updatePickUpStatusByItemId] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 更新送达状态*/@RequestMapping(value = "/order/v1/updateDeliveryStatus", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult updateDeliveryStatus(HttpServletRequest request, HttpServletResponse response,Long orderId,Long sellerId,Long deliveryId,String size,String onlyId) {try {logger.info("[配送人员][手机型号:"+size+"][手机唯一标识:"+onlyId+"][时间:"+DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss")+"]");Date now = new Date();//当前日期String currentDate = DateUtil.dateToString(now, DateUtil.FMT_DATE);String beginTime = currentDate+" 07:00:00";int a = DateUtil.compareDate(now, DateUtil.stringToDate(beginTime, DateUtil.FMT_DATETIME));if(a<0){logger.info("[手机型号:"+size+"][手机唯一标识:"+onlyId+"][时间:"+DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss")+"]");return new JsonResult(JsonResultCode.FAILURE, "7点钟之后才能点击已送达!", "");}else{int result = orderV1Service.updateDeliveryStatus(orderId, sellerId,deliveryId);if(result > 0){return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");}else{return new JsonResult(JsonResultCode.FAILURE, "更新信息失败", "");}}} catch (Exception ex) {logger.error("[OrderV1Controller][updateDeliveryStatus] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 线下收款确认*/@RequestMapping(value = "/order/v1/updatePayStatus", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult updatePayStatus(HttpServletRequest request, HttpServletResponse response,Long deliveryId,Long brId,String skReamk,BigDecimal ssAmt) {try {int result = orderV1Service.updatePayStatus(deliveryId,brId, skReamk,ssAmt);if(result > 0){return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");}else{return new JsonResult(JsonResultCode.FAILURE, "更新信息失败", "");}} catch (Exception ex) {logger.error("[OrderV1Controller][updatePayStatus] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 取货商家列表*/@RequestMapping(value = "/order/getPickUpSellerList", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getPickUpSellerList(HttpServletRequest request, HttpServletResponse response,Long deliveryId) {try {List<SellerInfoVo> list = orderV1Service.getPickUpSellerList(deliveryId, (short)1);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", list);} catch (Exception ex) {logger.error("[OrderV1Controller][getPickUpSellerList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 按买家显示商品 取货界面全部商品*/@RequestMapping(value = "/order/v1/getBuyerGoodsList", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getBuyerGoodsList(HttpServletRequest request, HttpServletResponse response,Long sellerId,Long deliveryId,Integer type,Long categoryId,Long areaId) {try {List<BuyerGoodsVo> goodsList = orderV1Service.getBuyerGoodsList(sellerId, deliveryId,type,categoryId,areaId);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", goodsList);} catch (Exception ex) {logger.error("[OrderV1Controller][getBuyerGoodsList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 获取卖家区域*/@RequestMapping(value = "/order/v1/getSellerRegions", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getSellerRegions(HttpServletRequest request, HttpServletResponse response,String regionIds) {try {if(StringUtils.isBlank(regionIds)){return new JsonResult(JsonResultCode.FAILURE, "区域id为空", "");}List<Area> areaList = areaService.getAreas(regionIds);return new JsonResult(JsonResultCode.SUCCESS, "查询区域信息成功", areaList);} catch (Exception ex) {logger.error("[OrderV1Controller][getSellerRegions] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 备货清单*/@RequestMapping(value = "/order/v1/getStockList", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getStockList(HttpServletRequest request, HttpServletResponse response,Long sellerId,Long deliveryId,String categoryCode) {try {List<StockVo> stockList = orderV1Service.getStockList(sellerId, deliveryId,categoryCode);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", stockList);} catch (Exception ex) {logger.error("[OrderV1Controller][getStockList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 备货详情*/@RequestMapping(value = "/order/v1/getStockInfoList", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getStockInfoList(HttpServletRequest request, HttpServletResponse response,Long sellerId,Long formatId,Long deliveryId,Long goodsId,Long methodId,String formatIds) {try {List<StockInfoVo> stockInfoList = orderV1Service.getStockInfoList(sellerId, formatId, deliveryId,goodsId, methodId,formatIds);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", stockInfoList);} catch (Exception ex) {logger.error("[OrderV1Controller][getStockInfoList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 买家地址详情*/@RequestMapping(value = "/order/getBuyerAddress", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getBuyerAddress(HttpServletRequest request, HttpServletResponse response,Long buyerId) {try {BuyerAddressVo bav = orderV1Service.getBuyerAddress(buyerId);if(null == bav){bav = new BuyerAddressVo();}if(null != bav.getBuyerImages() && !"".equals(bav.getBuyerImages())){String[] list = bav.getBuyerImages().split(",");bav.setPicList(Arrays.asList(list));}return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", bav);} catch (Exception ex) {logger.error("[OrderV1Controller][getBuyerAddress] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 新增配送人员坐标*/@RequestMapping(value = "/order/v1/insertDeliveryCoordinate", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult insertDeliveryCoordinate(HttpServletRequest request, HttpServletResponse response,@RequestBody DeliveryCoordinate deliveryCoordinate) {try {int result = deliveryCoordinateService.insertDeliveryCoordinate(deliveryCoordinate);if(result > 0){return new JsonResult(JsonResultCode.SUCCESS, "添加信息成功", "");}else{return new JsonResult(JsonResultCode.FAILURE, "添加信息失败", "");}} catch (Exception ex) {logger.error("[OrderV1Controller][insertDeliveryCoordinate] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 更新送达状态为未送达*/@RequestMapping(value = "/order/v1/updateDeliveryStatusToIng", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult updateDeliveryStatusToIng(HttpServletRequest request, HttpServletResponse response,Long orderId,Long deliveryId,String size,String onlyId) {try {logger.info("[配送人员:"+deliveryId+"][手机型号:"+size+"][手机唯一标识:"+onlyId+"][时间:"+DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss")+"]");int result = orderV1Service.updateDeliveryStatusToIng(orderId);if(result > 0){return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");}else{return new JsonResult(JsonResultCode.FAILURE, "更新信息失败", "");}} catch (Exception ex) {logger.error("[OrderV1Controller][updateDeliveryStatusToIng] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 按分类取货*/@RequestMapping(value = "/order/v1/getStockListByCategory", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getStockListByCategory(HttpServletRequest request, HttpServletResponse response,Long deliveryId,Integer type) {try {List<CategoryVo> cvList = orderV1Service.getStockListByCategory(deliveryId,type);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", cvList);} catch (Exception ex) {logger.error("[OrderV1Controller][getStockList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 线下收款列表*/@RequestMapping(value = "/order/getReceiptList", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getReceiptList(HttpServletRequest request, HttpServletResponse response,Short type,Long deliveryId) {try {List<ReceiptListVo> list = orderV1Service.getReceiptList(type, deliveryId);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", list);} catch (Exception ex) {logger.error("[OrderV1Controller][getReceiptList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 线下收款订单*/@RequestMapping(value = "/order/getReceiptOrderList", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getReceiptOrderList(HttpServletRequest request, HttpServletResponse response,String orderDate,Long buyerId) {try {List<OrderVo> list = orderV1Service.getReceiptOrderList(orderDate, buyerId);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", list);} catch (Exception ex) {logger.error("[OrderV1Controller][getReceiptOrderList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}/*** 线下收款订单商品*/@RequestMapping(value = "/order/getOrderGoodsList", method = { RequestMethod.GET, RequestMethod.POST })public JsonResult getOrderGoodsList(HttpServletRequest request, HttpServletResponse response,Long orderId) {try {List<OrderGoodsVo> list = orderV1Service.getLineOrderGoodsList(orderId);return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", list);} catch (Exception ex) {logger.error("[OrderV1Controller][getOrderGoodsList] exception :", ex);return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");}}}

电商平台-物流配送的设计与架构相关推荐

  1. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载

    Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android ...

  2. Java生鲜电商平台-团购模块设计与架构

    Java生鲜电商平台-团购模块设计与架构 说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的餐饮点还是小的餐饮 ...

  3. Java生鲜电商平台-异常模块的设计与架构

    Java生鲜电商平台-异常模块的设计与架构 说明:任何一个软件系统都会出现各式各样的异常与错误,我们需要根据异常的情况进行捕获与分析,改善自己的代码,让其更加的稳定的,快速的运行,那么作为一个 B2B ...

  4. 电商平台-团购模块设计与架构

    说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的餐饮点还是小的餐饮店,优惠与折扣永远是说福他们进入平台的最好 ...

  5. java 团购开发_Java生鲜电商平台-团购模块设计与架构

    Java生鲜电商平台-团购模块设计与架构 说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的餐饮点还是小的餐饮 ...

  6. 电商平台-售后模块的设计与架构

    说明:任何一个的电商平台都有售后服务系统,那么对于我们这个生鲜的电商平台,售后系统需要思考以下几个维度. 1. 买家的需求维度 说明:买家在平台上没找到自己想要的东西,我们需要提供给他一个入口,告诉我 ...

  7. 电商平台-异常模块的设计与架构

    说明:任何一个软件系统都会出现各式各样的异常与错误,我们需要根据异常的情况进行捕获与分析,改善自己的代码,让其更加的稳定的,快速的运行,那么作为一个 B2B的Java开源生鲜电商平台,我们的异常需要思 ...

  8. java电商商品搜索_Java生鲜电商平台-搜索模块的设计与架构

    说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面.目前也是快速的检索商品. 对于移动端的APP买家用户而言,要求的速度在3秒内完成.支持模糊查询,由于业务实战表面,整个搜索频率不到1 ...

  9. 电商平台-搜索模块的设计与架构

    说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面.目前也是快速的检索商品. 对于移动端的APP买家用户而言,要求的速度在3秒内完成.支持模糊查询,由于业务实战表面,整个搜索频率不到1 ...

最新文章

  1. 编译安装MySQL5.6失败的相关问题解决方案
  2. Ucloud 文件上传
  3. [bzoj2882]工艺_后缀数组
  4. 删除排序数组中的重复数字 II
  5. Python元类(type()和metaclass)
  6. 计算机程序设计社团,学生社团管理系统
  7. Java Greedy Snake, need to be updated
  8. 同济大学 线性代数 第六版 pdf_线性代数同济大学第六版第一章课后习题答案
  9. 计算机格式化的作用,怎样把电脑格式化 电脑格式化方法【图文】
  10. 前端如何实现文件下载(七种方法)
  11. 财经365股票行情:A股出现“捡便宜”机会
  12. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
  13. turnserver 搭建
  14. java列表末尾添加元素_在迭代它时将元素添加到Java LinkedList的末尾
  15. 架构设计文档模板之1:备选方案模板
  16. [项目管理]-- 项目开发流程(基本流程)
  17. mysql left join含义_left join是什么意思
  18. 跨越原理优缺点_jsonp的原理,应用场景,优缺点
  19. 在Dreamweaver中运行JSP页面
  20. 【ONE·Linux || 基本工具介绍 】

热门文章

  1. Tkinter模块GUI界面化编程实战(五)——大鱼吃小鱼游戏(含超详解及完整源码、完整程序免费下载链接)
  2. 详解微信小程序支付流程
  3. 间歇的转载(双剑的内涵)
  4. 【漫漫转码路】Python Day 04
  5. PXIe背板 全混合8槽 4 Link架构 系统带宽14GB/s 单槽4GB/s
  6. OpenBMC开发笔记系列——(六)如何通过ast2600的datasheet查看GPIO寄存器地址
  7. 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》导读
  8. 基于微信小程序的评选投票系统软件的设计与实现毕业论文
  9. 我们其实不怕犯错-写在春节返京的飞机上
  10. R语言(三)——多重共线性情况(岭回归、[适应性]lasso回归、偏最小二乘回归)