去除无效业务类

This commit is contained in:
Chopper 2021-11-04 10:19:52 +08:00
parent 6770f058d5
commit 14ce522539
18 changed files with 0 additions and 1296 deletions

View File

@ -1,67 +0,0 @@
package cn.lili.modules.system.entity.dos;
import cn.lili.mybatis.BaseEntity;
import cn.lili.modules.system.entity.vo.InstantDeliveryVO;
import com.baomidou.mybatisplus.annotation.TableName;
import com.google.gson.Gson;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 即时配送
*
* @author pikachu
* @since 2020/12/01 15:58
*/
@Data
@TableName("li_instant_delivery")
@ApiModel(value = "即时配送")
@AllArgsConstructor
@NoArgsConstructor
public class InstantDelivery extends BaseEntity {
/**
* 即时配送名称
*/
@ApiModelProperty(value = "即时配送名称")
private String deliveryName;
/**
* 是否开启即时配送,1开启0未开启
*/
@ApiModelProperty(value = "是否开启即时配送,1开启0未开启")
private Integer deliveryOpen;
/**
* 即时配送配置
*/
@ApiModelProperty(value = "即时配送配置")
private String deliveryConfig;
/**
* 即时配送bean
*/
@ApiModelProperty(value = "即时配送bean")
private String deliveryBean;
@ApiModelProperty(value = "封面图片")
private String images;
/**
* 根据vo参数构建do
*
* @param instantDeliveryVO
*/
public InstantDelivery(InstantDeliveryVO instantDeliveryVO) {
this.setDeliveryName(instantDeliveryVO.getDeliveryName());
this.setDeliveryOpen(instantDeliveryVO.getDeliveryOpen());
this.setDeliveryBean(instantDeliveryVO.getDeliveryBean());
Gson gson = new Gson();
this.setDeliveryConfig(gson.toJson(instantDeliveryVO.getConfigItems()));
}
}

View File

@ -1,99 +0,0 @@
package cn.lili.modules.system.entity.dos;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.system.entity.plugin.logistics.dada.enums.DadaOrderStatusEnum;
import cn.lili.modules.system.entity.plugin.logistics.dada.vo.DdOrderBackVO;
import cn.lili.mybatis.BaseIdEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 即时配送日志
*
* @author pikachu
* @since 2020/12/01 15:58
*/
@Data
@TableName("li_instant_delivery_log")
@ApiModel(value = "即时配送日志")
@AllArgsConstructor
@NoArgsConstructor
public class InstantDeliveryLog extends BaseIdEntity {
@CreatedDate
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间", hidden = true)
private Date createTime;
/**
* 即时配送订单号
*/
@ApiModelProperty(value = "即时配送订单号")
private String deliveryOrderSn;
/**
* 商城订单号
*/
@ApiModelProperty(value = "商城订单号")
private String orderSn;
/**
* 即时配送订单状态
*
* @see DadaOrderStatusEnum
*/
@ApiModelProperty(value = "即时配送订单状态")
private String deliveryOrderStatus;
/**
* 配送员ID
*/
@ApiModelProperty(value = "即时配送骑手编号")
private String distributorNumber;
/**
* 配送员姓名接单以后会存储
*/
@ApiModelProperty(value = "配送员姓名,接单以后会存储")
private String distributorName;
/**
* 配送员手机号接单以后存储
*/
@ApiModelProperty(value = "配送员手机号,接单以后存储")
private String distributorMobile;
/**
* 订单取消原因,其他状态下默认值为空字符串
*/
@ApiModelProperty(value = "订单取消原因,其他状态下默认值为空字符串")
private String cancelReason;
public InstantDeliveryLog(DdOrderBackVO ddOrderBackVO) {
this.setCancelReason(ddOrderBackVO.getCancelReason());
this.setOrderSn(ddOrderBackVO.getOrderId());
this.setDeliveryOrderSn(ddOrderBackVO.getClientId());
if (!StringUtils.isEmpty(ddOrderBackVO.getDmMobile())) {
this.setDistributorMobile(ddOrderBackVO.getDmMobile());
}
if (!StringUtils.isEmpty(ddOrderBackVO.getDmName())) {
this.setDistributorName(ddOrderBackVO.getDmName());
}
if (ddOrderBackVO.getDmId() != null) {
this.setDistributorNumber(ddOrderBackVO.getDmId().toString());
}
this.setDeliveryOrderStatus(DadaOrderStatusEnum.getText(100));
}
}

View File

@ -1,63 +0,0 @@
package cn.lili.modules.system.entity.enums;
import lombok.Getter;
import lombok.Setter;
/**
* 即时配送url接口地址
*
* @author pikachu
* @since 2020/9/11 17:03
*/
public enum InstantDeliveryUrl {
/**
* 订单推送
*/
DD_ADD_ORDER("/api/order/addOrder"),
/**
* 订单重发
*/
DD_RE_ADD_ORDER("/api/order/reAddOrder"),
/**
* 订单妥投异常后商家确认收货
*/
DD_CONFIRM_ORDER("/api/order/confirm/goods"),
/**
* 店铺添加
*/
DD_ADD_SHOP("/api/store/add"),
/**
* 店铺修改
*/
DD_UPDATE_SHOP("/api/store/update"),
/**
* 订单详细信息
*/
DD_QUERY_ORDER("/api/order/status/query"),
/**
* 订单取消
*/
DD_CANDLE_ORDER("/api/order/formalCancel"),
/**
* 城市code获取
*/
DD_CITY_CODE("/api/cityCode/list");
/**
* 类型
*/
@Getter
@Setter
private final String url;
InstantDeliveryUrl(String url) {
this.url = url;
}
}

View File

@ -1,40 +0,0 @@
package cn.lili.modules.system.entity.plugin;
import lombok.Data;
import lombok.ToString;
import java.util.List;
/**
* 插件配置类
*
* @author pikachu
* @version v4.0
* @since 2020/12/01 15:58
*/
@Data
@ToString
public class ConfigItem {
/**
* 配置文件name值
*/
private String name;
/**
* 配置文件name映射文本值
*/
private String text;
/**
* 配置文件显示在浏览器时input的type属性
*/
private String type;
/**
* 配置的值
*/
private Object value;
/**
* 如果是select 是需要将可选项传递到前台
*/
private List<RadioOption> options;
}

View File

@ -1,28 +0,0 @@
package cn.lili.modules.system.entity.plugin;
import lombok.Data;
import lombok.ToString;
/**
* 单选配置类
*
* @author pikachu
* @version v4.0
* @Description:单选配置类
* @since 2020/12/01 15:58
*/
@Data
@ToString
public class RadioOption {
/**
* 选项
*/
private String label;
/**
* 选项值
*/
private Object value;
}

View File

@ -1,119 +0,0 @@
package cn.lili.modules.system.entity.plugin.logistics;
import cn.lili.modules.member.entity.dos.MemberAddress;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.store.entity.vos.StoreDetailVO;
import cn.lili.modules.system.entity.plugin.ConfigItem;
import cn.lili.modules.system.entity.vo.InstantDeliveryResultVO;
import java.util.List;
import java.util.Map;
/**
* 即时配送插件方法
*
* @author pikachu
* @version v1.0
* @since 2020/12/01 15:58
*/
public interface InstantDeliveryPlugin {
/**
* 获取即时配送的插件ID
*
* @return
*/
String getPluginId();
/**
* 获取即时配送的插件名称
*
* @return 插件名称
*/
String getPluginName();
/**
* 即时配送是否开启
*
* @return 0 不开启 1 开启
*/
Integer getOpen();
/**
* 获取取消原因id
*
* @return
*/
Integer cancelReasonId();
/**
* 配置各个即时配送的参数
*
* @return 在页面加载的即时配送参数
*/
List<ConfigItem> getDefaultConfigItem();
/**
* 同城配送新建店铺
*
* @param storeDetailVO 店铺信息
* @param config 配送参数
* @return
*/
InstantDeliveryResultVO addStore(StoreDetailVO storeDetailVO, Map config);
/**
* 同城配送新建店铺
*
* @param storeDetailVO 店铺信息
* @param config 配送参数
* @return
*/
InstantDeliveryResultVO editStore(StoreDetailVO storeDetailVO, Map config);
/**
* 查询订单详细
*
* @param orderSn 传递到达达的订单sn目前使用的是商城订单sn传递的所有只需要传递商城sn就可以
* @param config 配置参数
* @return
*/
InstantDeliveryResultVO getOrderDetail(String orderSn, Map config);
/**
* 妥投异常之物品返回完成
*
* @param orderSn 传递到达达的订单sn目前使用的是商城订单sn传递的所有只需要传递商城sn就可以
* @param config 配置参数
* @return
*/
InstantDeliveryResultVO orderConfirm(String orderSn, Map config);
/**
* 妥投异常之物品返回完成
*
* @param orderSn 传递到达达的订单sn目前使用的是商城订单sn传递的所有只需要传递商城sn就可以
* @param cancelReason 取消原因
* @param config 配置参数
* @return
*/
InstantDeliveryResultVO orderCandle(String orderSn, String cancelReason, Map config);
/**
* 发送同城配送订单
*
* @param order 订单
* @param memberAddress 会员地址
* @param type 类型
* @param config 配置
* @param storeDetailVO 店铺详情VO
* @return 配送订单返回
*/
InstantDeliveryResultVO sendReOrder(Order order, StoreDetailVO storeDetailVO, MemberAddress memberAddress, Integer type, Map config);
/**
* 即时配送回调
*
* @param object 因为不同配送的返回对象不同所以需要obj 去传递参数在不同的插件中转换
*/
void callBack(Object object);
}

View File

@ -1,346 +0,0 @@
package cn.lili.modules.system.entity.plugin.logistics.dada;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.lili.common.utils.DateUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.member.entity.dos.MemberAddress;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.store.entity.enums.StoreStatusEnum;
import cn.lili.modules.store.entity.vos.StoreDetailVO;
import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.modules.system.entity.dos.InstantDeliveryLog;
import cn.lili.modules.system.entity.enums.InstantDeliveryUrl;
import cn.lili.modules.system.entity.plugin.ConfigItem;
import cn.lili.modules.system.entity.plugin.logistics.InstantDeliveryPlugin;
import cn.lili.modules.system.entity.plugin.logistics.dada.vo.DdOrderBackVO;
import cn.lili.modules.system.entity.vo.CityResult;
import cn.lili.modules.system.entity.vo.InstantDeliveryResultVO;
import cn.lili.modules.system.service.InstantDeliveryLogService;
import cn.lili.modules.system.utils.HttpUtils;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 达达同城配送
*
* @author pikachu
* @version v4.0
* @since 2020/12/01 15:58
*/
@Slf4j
@Component("ddPlugin")
public class DadaPlugin implements InstantDeliveryPlugin {
@Autowired
private StoreDetailService storeDetailService;
@Autowired
private InstantDeliveryLogService instantDeliveryLogService;
@Override
public String getPluginId() {
return "ddPlugin";
}
@Override
public String getPluginName() {
return "达达";
}
@Override
public Integer getOpen() {
return 0;
}
@Override
public List<ConfigItem> getDefaultConfigItem() {
List<ConfigItem> list = new ArrayList();
ConfigItem url = new ConfigItem();
url.setType("text");
url.setName("url");
url.setText("调用地址");
ConfigItem appKey = new ConfigItem();
appKey.setType("text");
appKey.setName("app_key");
appKey.setText("app_key");
ConfigItem appSecret = new ConfigItem();
appSecret.setType("text");
appSecret.setName("app_secret");
appSecret.setText("app_secret");
ConfigItem merchantsId = new ConfigItem();
merchantsId.setType("text");
merchantsId.setName("merchants_id");
merchantsId.setText("商户Id");
list.add(url);
list.add(appKey);
list.add(appSecret);
list.add(merchantsId);
return list;
}
@Override
public InstantDeliveryResultVO addStore(StoreDetailVO storeDetailVO, Map config) {
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();
//业务类型(食品小吃-1,饮料-2,鲜花-3,文印票务-8,便利店-9,水果生鲜-13,同城电商-19, 医药-20,蛋糕-21,酒品-24,小商品市场-25,服装-26,汽修零配-27,数码-28,小龙虾-29,火锅-51,其他-5)
jsonObject.set("business", 19);
//门店地址
jsonObject.set("station_address", storeDetailVO.getCompanyAddress());
//联系人姓名
jsonObject.set("contact_name", storeDetailVO.getLinkName());
//联系人电话
jsonObject.set("phone", storeDetailVO.getLinkPhone());
//达达商家app账号
jsonObject.set("username", storeDetailVO.getLinkPhone());
//达达商家app密码
jsonObject.set("password", "a" + storeDetailVO.getLinkPhone());
jsonArray.add(jsonObject);
//发送请求的url
String url = StringUtils.toString(config.get("url"));
Map<String, String> requestJson = getConfig(config, jsonArray.toString());
String result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_ADD_SHOP.getUrl(), requestJson);
//组织返回参数
InstantDeliveryResultVO instantDeliveryResultVO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
Map<String, List> map = (Map<String, List>) instantDeliveryResultVO.getResult();
List<Map<String, Object>> successList = map.get("successList");
if (successList.size() > 0) {
for (Map<String, Object> obj : successList) {
//如果成功调用店铺修改 将门店编码写入数据库
UpdateWrapper updateWrapper = new UpdateWrapper();
updateWrapper.in("id", storeDetailVO.getStoreId());
updateWrapper.set("dd_code", obj.get("originStoreId").toString());
storeDetailService.update(updateWrapper);
}
}
List<Map<String, Object>> errorList = map.get("failedList");
if (errorList != null && errorList.size() > 0) {
for (Map<String, Object> obj : errorList) {
throw new RuntimeException(obj.get("msg").toString());
}
}
return instantDeliveryResultVO;
}
@Override
public InstantDeliveryResultVO editStore(StoreDetailVO storeDetailVO, Map config) {
//如果达达code没有则不进行修改
if (StringUtils.isEmpty(storeDetailVO.getDdCode())) {
return null;
}
JSONObject jsonObject = new JSONObject();
//门店编号
jsonObject.set("origin_store_id", storeDetailVO.getDdCode());
//门店名称
// jsonObject.put("station_name", storeDetailVO.getStoreName());
//业务类型(食品小吃-1,饮料-2,鲜花-3,文印票务-8,便利店-9,水果生鲜-13,同城电商-19, 医药-20,蛋糕-21,酒品-24,小商品市场-25,服装-26,汽修零配-27,数码-28,小龙虾-29,火锅-51,其他-5)
jsonObject.set("business", 19);
//城市名称(,上海)
// jsonObject.put("city_name", storeDetailVO.getCompanyCity());
//区域名称(,浦东新区)
// jsonObject.put("area_name", storeDetailVO.getCompanyCounty());
//门店地址
jsonObject.set("station_address", storeDetailVO.getCompanyAddress());
// //门店经度
// jsonObject.put("lng", storeDetailVO.getStoreLongitude());
// //门店纬度
// jsonObject.put("lat", storeDetailVO.getStoreLatitude());
//联系人姓名
jsonObject.set("contact_name", storeDetailVO.getLinkName());
//联系人电话
jsonObject.set("phone", storeDetailVO.getLinkPhone());
if (storeDetailVO.getStoreDisable().equals(StoreStatusEnum.OPEN.value())) {
jsonObject.set("status", 1);
} else {
jsonObject.set("status", 0);
}
//发送请求的url
String url = StringUtils.toString(config.get("url"));
Map<String, String> requestJson = getConfig(config, jsonObject.toString());
String result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_UPDATE_SHOP.getUrl(), requestJson);
//组织返回参数
InstantDeliveryResultVO instantDeliveryResultVO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
if ("fail".equals(instantDeliveryResultVO.getStatus())) {
log.error("达达店铺信息修改失败",instantDeliveryResultVO.getMsg());
}
return instantDeliveryResultVO;
}
@Override
public InstantDeliveryResultVO getOrderDetail(String orderSn, Map config) {
JSONObject jsonObject = new JSONObject();
jsonObject.set("order_id", orderSn);
//发送请求的url
String url = StringUtils.toString(config.get("url"));
Map<String, String> requestJson = getConfig(config, jsonObject.toString());
String result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_QUERY_ORDER.getUrl(), requestJson);
//组织返回参数
InstantDeliveryResultVO instantDeliveryResultVO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
return instantDeliveryResultVO;
}
@Override
public InstantDeliveryResultVO orderConfirm(String orderSn, Map config) {
JSONObject jsonObject = new JSONObject();
jsonObject.set("order_id", orderSn);
//发送请求的url
String url = StringUtils.toString(config.get("url"));
Map<String, String> requstJson = getConfig(config, jsonObject.toString());
String result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_CONFIRM_ORDER.getUrl(), requstJson);
//组织返回参数
InstantDeliveryResultVO instantDeliveryResultVO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
return instantDeliveryResultVO;
}
@Override
public InstantDeliveryResultVO orderCandle(String orderSn, String cancelReason, Map config) {
JSONObject jsonObject = new JSONObject();
jsonObject.set("order_id", orderSn);
jsonObject.set("cancel_reason_id", this.cancelReasonId());
jsonObject.set("cancel_reason", cancelReason);
//发送请求的url
String url = StringUtils.toString(config.get("url"));
Map<String, String> requstJson = getConfig(config, jsonObject.toString());
String result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_CANDLE_ORDER.getUrl(), requstJson);
//组织返回参数
InstantDeliveryResultVO instantDeliveryResultVO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
return instantDeliveryResultVO;
}
@Override
public InstantDeliveryResultVO sendReOrder(Order order, StoreDetailVO storeDetailVO, MemberAddress memberAddress, Integer type, Map config) {
JSONObject jsonObject = new JSONObject();
//门店编号门店创建后可在门店列表和单页查看
jsonObject.set("store_no", storeDetailVO.getDdCode());
//第三方订单ID
jsonObject.set("origin_id", order.getSn());
//订单所在城市的code http://newopen.imdada.cn/#/development/file/cityList?_k=l76a7s
String city = memberAddress.getConsigneeAddressPath().substring(memberAddress.getConsigneeAddressPath().indexOf(",") + 1, memberAddress.getConsigneeAddressPath().indexOf(",", memberAddress.getConsigneeAddressPath().indexOf(",") + 1));
jsonObject.set("city_code", this.getCityCode(city, config));
//订单金额
jsonObject.set("cargo_price", order.getFlowPrice());
//是否需要垫付 1: 0: (垫付订单金额非运费)
jsonObject.set("is_prepay", 0);
//收货人姓名
jsonObject.set("receiver_name", memberAddress.getName());
//收货人地址
jsonObject.set("receiver_address", memberAddress.getDetail());
//收货人地址纬度高德坐标系若是其他地图经纬度需要转化成高德地图经纬度
jsonObject.set("receiver_lat", memberAddress.getLat());
//收货人地址经度高德坐标系若是其他地图经纬度需要转化成高德地图经纬度
jsonObject.set("receiver_lng", memberAddress.getLat());
//回调URL
//jsonObject.put("callback", domainHelper.getCallback() + "/trade/delivery/order/call-back");
//收货人手机号手机号和座机号必填一项
jsonObject.set("receiver_phone", memberAddress.getMobile());
//是否使用保价费0不使用保价1使用保价 同时请确保填写了订单金额cargo_price
jsonObject.set("is_use_insurance", 0);
//订单重量单位Kg
jsonObject.set("cargo_weight", order.getWeight());
Map<String, String> requstJson = getConfig(config, jsonObject.toString());
//发送请求的url
String url = StringUtils.toString(config.get("url"));
String result = null;
if (type == 0) {
result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_ADD_ORDER.getUrl(), requstJson);
} else {
result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_RE_ADD_ORDER.getUrl(), requstJson);
}
InstantDeliveryResultVO instantDeliveryResultVO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
if ("fail".equals(instantDeliveryResultVO.getStatus())) {
log.error("达达订单发送失败,订单号为",order.getSn() + "," + instantDeliveryResultVO.getMsg());
//如果发送失败择等待一秒重新发送如果失败择记录日志
try {
Thread.sleep(1000);
} catch (Exception e) {
log.error("达达订单发布失败",e);
}
result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_RE_ADD_ORDER.getUrl(), requstJson);
InstantDeliveryResultVO instantDeliveryResResultVO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
if ("fail".equals(instantDeliveryResResultVO.getStatus())) {
log.error("达达订单重试发送失败,订单号为" + order.getSn() + "," + instantDeliveryResultVO.getMsg());
}
}
return instantDeliveryResultVO;
}
@Override
public Integer cancelReasonId() {
return 4;
}
/**
* 达达配送统一参数整合
*
* @param config
* @param json
* @return
*/
private Map<String, String> getConfig(Map config, String json) {
//组织参数
String appKey = StringUtils.toString(config.get("app_key"));
String appSecret = StringUtils.toString(config.get("app_secret"));
String merchantsId = StringUtils.toString(config.get("merchants_id"));
//签名发送请求
String mysing = appSecret + "app_key" + appKey + "body" + json + "formatjsonsource_id" + merchantsId + "timestamp" + DateUtil.getDateline() + "v1.0" + appSecret;
String signature = StringUtils.md5(mysing).toUpperCase();
Map<String, String> requstJson = new HashMap<>(8);
requstJson.put("source_id", merchantsId);
requstJson.put("app_key", appKey);
requstJson.put("format", "json");
requstJson.put("timestamp", StringUtils.toString(DateUtil.getDateline()));
requstJson.put("signature", signature);
requstJson.put("body", json);
requstJson.put("v", "1.0");
return requstJson;
}
/**
* 获取城市code
*
* @param cityName 城市名称
* @return 城市编码
*/
private String getCityCode(String cityName, Map config) {
//获取参数
String url = StringUtils.toString(config.get("url"));
JSONObject jsonObject = new JSONObject();
Map<String, String> requstJson = getConfig(config, jsonObject.toString());
//获取所有城市编码
String result = HttpUtils.doPostWithJson(url + InstantDeliveryUrl.DD_CITY_CODE.getUrl(), requstJson);
InstantDeliveryResultVO resultDO = JSONUtil.toBean(result, InstantDeliveryResultVO.class);
//对数据进行格式化
List<CityResult> list = JSONUtil.toList(JSONUtil.parseArray(resultDO.getResult()), CityResult.class);
for (CityResult cityResult : list) {
if (cityName.contains(cityResult.getCityName())) {
return cityResult.getCityCode();
}
}
//如果找不到默认哈尔滨
return "0451";
}
@Override
public void callBack(Object object) {
//强制将obj转换成达达对应的参数对象
DdOrderBackVO ddOrderBackVO = (DdOrderBackVO) object;
//数据类型转换
InstantDeliveryLog instantDeliveryLog = new InstantDeliveryLog(ddOrderBackVO);
//保存数据
instantDeliveryLogService.save(instantDeliveryLog);
}
}

View File

@ -1,68 +0,0 @@
package cn.lili.modules.system.entity.plugin.logistics.dada.enums;
import lombok.Getter;
import lombok.Setter;
/**
* 达达配送订单状态
*
* @author pikachu
*/
public enum DadaOrderStatusEnum {
//待接单
WAIT_RECEIVING(1, "待接单"),
//待取货
WAIT_PICK_UP(2, "待取货"),
//配送中
DELIVERY_IN_PROGRESS(3, "配送中"),
//已完成
COMPLETED(4, "已完成"),
//已取消
CANCELLED(5, "已取消"),
//派单中
DISTRIBUTION_LEAFLETS(8, "派单中"),
//妥投异常之物品返回中
ABNORMAL_BACK(9, "妥投异常之物品返回中"),
//妥投异常之物品返回完成
ABNORMAL_COMPLETED(10, "妥投异常之物品返回完成"),
//骑士到店
TO_IN_STORE(100, "骑士到店");
/**
* 状态
*/
@Setter
@Getter
private Integer status;
/**
* 状态文本
*/
@Setter
@Getter
private String text;
DadaOrderStatusEnum(Integer status, String text) {
this.status = status;
this.text = text;
}
/**
* 获取配送模版
* @param status 状态
* @return 配送模板
*/
public static String getText(Integer status) {
//如果空则直接返回
if (status == null) {
return null;
}
//对状态枚举值进行处理
for (DadaOrderStatusEnum dadaOrderStatusEnum : DadaOrderStatusEnum.values()) {
if (status.equals(dadaOrderStatusEnum.getStatus())) {
return dadaOrderStatusEnum.getText();
}
}
return WAIT_RECEIVING.getText();
}
}

View File

@ -1,50 +0,0 @@
package cn.lili.modules.system.entity.plugin.logistics.dada.vo;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
/**
* @author 86133
* @description: pikachu
* @since 2020/9/1215:35
*/
@ApiModel(description = "达达订单回调参数")
@Data
@ToString
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class DdOrderBackVO {
@ApiModelProperty(value = "达达运单号", required = false)
private String clientId;
@ApiModelProperty(value = "交易编号", required = true)
private String orderId;
@ApiModelProperty(value = "订单状态 待接单1,待取货2,配送中3,已完成4,已取消5, 指派单=8,妥投异常之物品返回中=9, 妥投异常之物品返回完成=10, 骑士到店=100,创建达达运单失败=1000", required = true)
private Integer orderStatus;
@ApiModelProperty(value = "订单取消原因,其他状态下默认值为空字符串", required = true)
private String cancelReason;
@ApiModelProperty(value = "订单取消原因来源(1:达达配送员取消2:商家主动取消3:系统或客服取消0:默认值)", required = true)
private Integer cancelFrom;
@ApiModelProperty(value = "更新时间", required = true)
private Long updateTime;
@ApiModelProperty(value = "加密串", required = true)
private String signature;
@ApiModelProperty(value = "达达配送员id接单以后会传", required = false)
private Integer dmId;
@ApiModelProperty(value = "配送员姓名,接单以后会传", required = false)
private String dmName;
@ApiModelProperty(value = "配送员手机号,接单以后会传", required = false)
private String dmMobile;
}

View File

@ -1,24 +0,0 @@
package cn.lili.modules.system.entity.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 达达返回值
*
* @author Chopper
* @since 2020/9/12 14:05
*/
@ApiModel
@Data
public class InstantDeliveryResultVO {
@ApiModelProperty(value = "响应状态成功为success失败为fail", required = false)
private String status;
@ApiModelProperty(value = "响应返回码, 0 成功 其他失败", required = false)
private Integer code;
@ApiModelProperty(value = "响应描述", required = false)
private String msg;
@ApiModelProperty(value = "响应结果", required = false)
private Object result;
}

View File

@ -1,64 +0,0 @@
package cn.lili.modules.system.entity.vo;
import cn.lili.modules.system.entity.dos.InstantDelivery;
import cn.lili.modules.system.entity.plugin.ConfigItem;
import cn.lili.modules.system.entity.plugin.logistics.InstantDeliveryPlugin;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 即时配送VO
*
* @author pikachu
* @since 2020/12/01 15:58
*/
@Data
@ApiModel(value = "即时配送VO")
@AllArgsConstructor
@NoArgsConstructor
public class InstantDeliveryVO extends InstantDelivery {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "即时配送配置项", required = true)
private List<ConfigItem> configItems;
/**
* 构建新的vo参数
*
* @param instantDelivery
*/
public InstantDeliveryVO(InstantDelivery instantDelivery) {
this.setCreateTime(instantDelivery.getCreateTime());
this.setDeleteFlag(instantDelivery.getDeleteFlag());
this.setId(instantDelivery.getId());
this.setDeliveryName(instantDelivery.getDeliveryName());
this.setDeliveryOpen(instantDelivery.getDeliveryOpen());
this.setDeliveryBean(instantDelivery.getDeliveryBean());
this.setImages(instantDelivery.getImages());
Gson gson = new Gson();
this.setConfigItems(gson.fromJson(instantDelivery.getDeliveryConfig(), new TypeToken<List<ConfigItem>>() {
}.getType()));
}
/**
* 根据插件构建默认参数
*
* @param instantDeliveryPlugin
*/
public InstantDeliveryVO(InstantDeliveryPlugin instantDeliveryPlugin) {
this.setId("0");
this.setDeliveryName(instantDeliveryPlugin.getPluginName());
this.setDeliveryOpen(instantDeliveryPlugin.getOpen());
this.setDeliveryBean(instantDeliveryPlugin.getPluginId());
this.setConfigItems(instantDeliveryPlugin.getDefaultConfigItem());
}
}

View File

@ -1,14 +0,0 @@
package cn.lili.modules.system.mapper;
import cn.lili.modules.system.entity.dos.InstantDeliveryLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 即时配送日志数据处理层
*
* @author pikachu
* @since 2020/11/17 8:01 下午
*/
public interface InstantDeliveryLogMapper extends BaseMapper<InstantDeliveryLog> {
}

View File

@ -1,14 +0,0 @@
package cn.lili.modules.system.mapper;
import cn.lili.modules.system.entity.dos.InstantDelivery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 即时配送数据处理层
*
* @author pikachu
* @since 2020/11/17 8:01 下午
*/
public interface InstantDeliveryMapper extends BaseMapper<InstantDelivery> {
}

View File

@ -1,15 +0,0 @@
package cn.lili.modules.system.service;
import cn.lili.modules.system.entity.dos.InstantDeliveryLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* 即时配送日志业务层
*
* @author Chopper
* @since 2020/11/17 8:02 下午
*/
public interface InstantDeliveryLogService extends IService<InstantDeliveryLog> {
}

View File

@ -1,50 +0,0 @@
package cn.lili.modules.system.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.system.entity.dos.InstantDelivery;
import cn.lili.modules.system.entity.vo.InstantDeliveryVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* 即时配送业务层
*
* @author Chopper
* @since 2020/11/17 8:02 下午
*/
public interface InstantDeliveryService extends IService<InstantDelivery> {
/**
* 获取即时配送方案
*
* @param page 数据库即时配送方案
* @param pageVO 分页数据
* @return
*/
IPage<InstantDeliveryVO> getInstantDeliveryPage(IPage<InstantDelivery> page, PageVO pageVO);
/**
* 根据beanId查询即时配送方案
*
* @param bean beanId
* @return
*/
InstantDeliveryVO getInstantDeliveryConfig(String bean);
/**
* 开启某一个即时配送方案
*
* @param bean bean
* @return
*/
void openInstantDelivery(String bean);
/**
* 修改即时配送方案
*
* @param instantDeliveryVO 即时配送方案
* @return
*/
InstantDeliveryVO edit(InstantDeliveryVO instantDeliveryVO);
}

View File

@ -1,21 +0,0 @@
package cn.lili.modules.system.serviceimpl;
import cn.lili.modules.system.entity.dos.InstantDeliveryLog;
import cn.lili.modules.system.mapper.InstantDeliveryLogMapper;
import cn.lili.modules.system.service.InstantDeliveryLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 即时配送业务层实现
*
* @author Chopper
* @since 2020/11/17 8:02 下午
*/
@Service
public class InstantDeliveryLogServiceImpl extends ServiceImpl<InstantDeliveryLogMapper, InstantDeliveryLog> implements InstantDeliveryLogService {
}

View File

@ -1,124 +0,0 @@
package cn.lili.modules.system.serviceimpl;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.system.entity.dos.InstantDelivery;
import cn.lili.modules.system.entity.plugin.logistics.InstantDeliveryPlugin;
import cn.lili.modules.system.entity.vo.InstantDeliveryVO;
import cn.lili.modules.system.mapper.InstantDeliveryMapper;
import cn.lili.modules.system.service.InstantDeliveryService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.gson.Gson;
import org.elasticsearch.ResourceNotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 即时配送业务层实现
*
* @author pikachu
* @since 2020/11/17 8:02 下午
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class InstantDeliveryServiceImpl extends ServiceImpl<InstantDeliveryMapper, InstantDelivery> implements InstantDeliveryService {
@Autowired
private List<InstantDeliveryPlugin> instantDeliveryPlugins;
@Override
public IPage<InstantDeliveryVO> getInstantDeliveryPage(IPage<InstantDelivery> page, PageVO pageVO) {
//获取插件和数据库中所有的就是配送方案
List<InstantDeliveryVO> resultList = this.getInstantDeliveryVOList(page);
//循环数据对未入库的数据进行入库操作
for (InstantDeliveryVO instantDeliveryVO : resultList) {
//根据id是否为0校验 如果为0则不在数据中进行入库操作
if (("0").equals(instantDeliveryVO.getId())) {
//入库
InstantDelivery instantDelivery = new InstantDelivery(instantDeliveryVO);
this.baseMapper.insert(instantDelivery);
}
}
IPage<InstantDeliveryVO> iPage = new Page<>(pageVO.getPageNumber(), pageVO.getPageSize(), resultList.size());
iPage.setRecords(PageUtil.listToPage(pageVO, resultList));
return iPage;
}
/**
* 获取即时配送的方案
*
* @return 即时配送
*/
private List<InstantDeliveryVO> getInstantDeliveryVOList(IPage<InstantDelivery> page) {
//用来构建新的即时配送数据
List<InstantDeliveryVO> resultList = new ArrayList<>();
//获取即时配送数据
List<InstantDelivery> list = page.getRecords();
Map<String, InstantDelivery> map = new HashMap<>(16);
for (InstantDelivery instantDelivery : list) {
map.put(instantDelivery.getDeliveryBean(), instantDelivery);
}
//循环检查是否有新的即时配送方式识别插入数据库
for (InstantDeliveryPlugin plugin : instantDeliveryPlugins) {
InstantDelivery instantDelivery = map.get(plugin.getPluginId());
InstantDeliveryVO result;
//如果不为空则构建vo参数否则的话根据插件属性构建vo参数
if (instantDelivery != null) {
result = new InstantDeliveryVO(instantDelivery);
} else {
result = new InstantDeliveryVO(plugin);
}
resultList.add(result);
}
return resultList;
}
@Override
public InstantDeliveryVO getInstantDeliveryConfig(String bean) {
//根据bean获取即时配送方案
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("delivery_bean", bean);
InstantDelivery instantDelivery = this.baseMapper.selectOne(queryWrapper);
if (instantDelivery == null) {
throw new ResourceNotFoundException("该即时配送方案不存在");
}
return new InstantDeliveryVO(instantDelivery);
}
@Override
public void openInstantDelivery(String bean) {
//关闭所有配送方案
UpdateWrapper<InstantDelivery> updateWrapper = new UpdateWrapper();
updateWrapper.set("delivery_open", 0);
this.update(updateWrapper);
//开启当前配送方案
updateWrapper = new UpdateWrapper();
updateWrapper.eq("delivery_bean", bean);
updateWrapper.set("delivery_open", 1);
this.update(updateWrapper);
}
@Override
public InstantDeliveryVO edit(InstantDeliveryVO instantDeliveryVO) {
//校验此方案是否存在
this.getInstantDeliveryConfig(instantDeliveryVO.getDeliveryBean());
//修改即时配送方案
Gson gson = new Gson();
UpdateWrapper<InstantDelivery> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("delivery_config", gson.toJson(instantDeliveryVO.getConfigItems()));
updateWrapper.eq("delivery_bean", instantDeliveryVO.getDeliveryBean());
this.update(updateWrapper);
return instantDeliveryVO;
}
}

View File

@ -1,90 +0,0 @@
package cn.lili.controller.setting;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.system.entity.dos.InstantDelivery;
import cn.lili.modules.system.entity.plugin.ConfigItem;
import cn.lili.modules.system.entity.vo.InstantDeliveryVO;
import cn.lili.modules.system.service.InstantDeliveryService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 管理端,即时配送接口
*
* @author pikachu
* @since 2020/11/17 7:56 下午
*/
@RestController
@Api(tags = "管理端,即时配送接口")
@RequestMapping("/manager/instant-delivery")
public class InstantDeliveryManagerController {
@Autowired
private InstantDeliveryService instantDeliveryService;
@GetMapping(value = "/getByPage")
@ApiOperation(value = "分页获取")
public ResultMessage<IPage<InstantDeliveryVO>> getByPage(PageVO page) {
//查询数据
IPage<InstantDelivery> data = instantDeliveryService.page(PageUtil.initPage(page));
//组织数据结构
IPage<InstantDeliveryVO> newData = instantDeliveryService.getInstantDeliveryPage(data, page);
//返回数据
return ResultUtil.data(newData);
}
@ApiOperation(value = "修改即时配送方案参数", response = InstantDeliveryVO.class)
@PutMapping(value = "/{bean}/config")
@ApiImplicitParams({
@ApiImplicitParam(name = "bean", value = "即时配送bean", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "config", value = "即时配送参数", required = true, dataType = "String", paramType = "body")
})
public ResultMessage<InstantDeliveryVO> edit(@PathVariable String bean, @RequestBody List<ConfigItem> config) {
InstantDeliveryVO instantDeliveryVO = new InstantDeliveryVO();
instantDeliveryVO.setDeliveryBean(bean);
instantDeliveryVO.setConfigItems(config);
return ResultUtil.data(this.instantDeliveryService.edit(instantDeliveryVO));
}
@ApiOperation(value = "获取即时配送的配置", response = InstantDeliveryVO.class)
@GetMapping("/{bean}")
@ApiImplicitParam(name = "bean", value = "即时配送bean id", required = true, dataType = "String", paramType = "path")
public ResultMessage<InstantDeliveryVO> getInstantDeliverySetting(@PathVariable String bean) {
return ResultUtil.data(this.instantDeliveryService.getInstantDeliveryConfig(bean));
}
@ApiOperation(value = "开启即时配送方案", response = String.class)
@PutMapping("/{bean}/open")
@ApiImplicitParam(name = "bean", value = "bean", required = true, dataType = "String", paramType = "path")
public ResultMessage<String> open(@PathVariable String bean) {
this.instantDeliveryService.openInstantDelivery(bean);
return ResultUtil.success();
}
@ApiOperation(value = "修改封面图片", response = String.class)
@PutMapping("/{bean}/image")
@ApiImplicitParams({
@ApiImplicitParam(name = "bean", value = "即时配送bean", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "images", value = "封面图片", required = true, dataType = "String", paramType = "query")
})
public ResultMessage<Boolean> open(@PathVariable String bean, String images) {
InstantDelivery instantDelivery = this.instantDeliveryService.getOne(new QueryWrapper<InstantDelivery>().eq("delivery_bean", bean));
if (instantDelivery != null) {
instantDelivery.setImages(images);
return ResultUtil.data(instantDeliveryService.updateById(instantDelivery));
}
return ResultUtil.data(false);
}
}