├── README.md ├── src └── main │ └── java │ └── cn │ └── iocoder │ └── doraemon │ ├── scrmgroup │ ├── users │ │ ├── package-info.java │ │ └── entity │ │ │ └── User.java │ ├── tags │ │ └── UserWeiXinFollowerTag.java │ ├── cards │ │ ├── entity │ │ │ ├── SCRMCardCustomer.java │ │ │ └── SCRMCard.java │ │ ├── SCRMCardCustomerAPI.java │ │ └── SCRMCardAPI.java │ ├── weixin │ │ ├── entity │ │ │ └── UserWeiXinFollower.java │ │ └── UserWeiXinAPI.java │ └── customer │ │ ├── entity │ │ └── ScrmCustomer.java │ │ └── ScrmCustomerAPI.java │ ├── umpgroup │ ├── package-info.java │ ├── coupon │ │ ├── entity │ │ │ ├── CouponFetchLog.java │ │ │ ├── CouponVerifyLog.java │ │ │ ├── Coupon.java │ │ │ └── CouponGroup.java │ │ ├── CouponGroupAPI.java │ │ ├── CouponCardAPI.java │ │ ├── CouponCodeAPI.java │ │ └── CouponConsumeAPI.java │ ├── present │ │ ├── package-info.java │ │ ├── PresentAPI.java │ │ └── entity │ │ │ ├── PresentGivingRecord.java │ │ │ └── Present.java │ ├── bale │ │ ├── package-info.java │ │ └── entity │ │ │ └── BaleActivity.java │ ├── limitdiscount │ │ ├── package-info.java │ │ └── entity │ │ │ └── LimitDiscountActivity.java │ ├── meetreduce │ │ ├── package-info.java │ │ └── entity │ │ │ └── MeetReduceActivity.java │ └── packagebuy │ │ ├── package-info.java │ │ └── entity │ │ └── PackageBuyActivity.java │ ├── itemgroup │ ├── snapshot │ │ ├── package-info.java │ │ └── entity │ │ │ ├── ItemContentSnapshot.java │ │ │ ├── ItemSkuSnapshot.java │ │ │ └── ItemSnapshot.java │ ├── item │ │ ├── entity │ │ │ ├── vo │ │ │ │ ├── AbstractItemTemplateElementVO.java │ │ │ │ ├── ItemTemplateStoreElementVO.java │ │ │ │ ├── ItemTemplateSearchElementVO.java │ │ │ │ ├── ItemTemplateNoticeElementVO.java │ │ │ │ ├── ItemTemplateWhiteElementVO.java │ │ │ │ ├── ItemTemplateComponentElementVO.java │ │ │ │ ├── ItemTemplateRichTextElementVO.java │ │ │ │ ├── ItemTemplateLineElementVO.java │ │ │ │ ├── ItemTemplateAudioElementVO.java │ │ │ │ ├── ItemTemplateGoodsTagListElementVO.java │ │ │ │ ├── ItemTemplateLinkElementVO.java │ │ │ │ ├── ItemTemplateTextNavElementVO.java │ │ │ │ ├── ItemTemplateImageNavElementVO.java │ │ │ │ ├── ItemTemplateGoodsElementVO.java │ │ │ │ ├── ItemTemplateGoodsTagsElementVO.java │ │ │ │ ├── ItemTemplateGoodsListElementVO.java │ │ │ │ ├── ItemTemplateImageAdElementVO.java │ │ │ │ ├── ItemTemplateShowCaseElementVO.java │ │ │ │ ├── ItemTemplateTitleElementVO.java │ │ │ │ └── ItemTemplateCubeElementVO.java │ │ │ ├── ItemHotel.java │ │ │ ├── ItemFenxiao.java │ │ │ ├── ItemSkuProperty.java │ │ │ ├── ItemPurchaseRight.java │ │ │ ├── ItemSkuPropertyKeyReference.java │ │ │ ├── ItemEtd.java │ │ │ ├── ItemSkuPropertyValueReference.java │ │ │ ├── ItemContent.java │ │ │ ├── ItemSku.java │ │ │ ├── ItemTemplate.java │ │ │ └── Item.java │ │ ├── ItemTemplateAPI.java │ │ ├── ItemSkuAPI.java │ │ └── ItemAPI.java │ └── category │ │ ├── ItemCategoryAPI.java │ │ ├── entity │ │ ├── ItemTagReference.java │ │ └── ItemTag.java │ │ └── ItemTagAPI.java │ ├── paygroup │ └── package-info.java │ ├── tradegroup │ ├── delivery │ │ ├── entity │ │ │ ├── Express.java │ │ │ ├── TradeDeliveryExpressOrder.java │ │ │ ├── TradeDeliverySetting.java │ │ │ ├── ExpressOrder.java │ │ │ ├── TradeDeliveryExpressTemplate.java │ │ │ ├── TradeDeliverySelfFetchAddress.java │ │ │ ├── TradeDeliveryLocalConfig.java │ │ │ └── youzan_express.json │ │ ├── TradeDeliveryLocalConfigAPI.java │ │ ├── TradeDeliverySettingAPI.java │ │ ├── ExpressAPI.java │ │ ├── TradeDeliveryExpressOrderAPI.java │ │ ├── TradeDeliveryExpressTemplateAPI.java │ │ └── TradeDeliveryOnlineAPI.java │ ├── trade │ │ ├── entity │ │ │ ├── TradeAdjustFee.java │ │ │ ├── TradeSelfFetch.java │ │ │ ├── TradeOrder.java │ │ │ └── Trade.java │ │ └── TradeAPI.java │ ├── code │ │ └── TradeCodeAPI.java │ ├── refund │ │ ├── entity │ │ │ ├── TradeRefundDelivery.java │ │ │ ├── TradeRefundMessage.java │ │ │ └── TradeRefund.java │ │ └── TradeRefundAPI.java │ └── cart │ │ ├── entity │ │ └── TradeCartItem.java │ │ └── TradeCartAPI.java │ ├── commongroup │ ├── entity │ │ └── CommonRegion.java │ └── CommonRegoinAPI.java │ └── shopgroup │ ├── shop │ ├── entity │ │ └── Shop.java │ └── ShopAPI.java │ └── address │ ├── entity │ └── ShopAddress.java │ └── ShopAddressAPI.java ├── .gitignore ├── pom.xml └── libs └── README.md /README.md: -------------------------------------------------------------------------------- 1 | # doraemon-entity 2 | 哆啦A梦 3 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/users/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.users; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 营销模块组 3 | */ 4 | package cn.iocoder.doraemon.umpgroup; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/snapshot/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 商品快照 3 | * 4 | * 每次商品添加或者修改发生变更时,记录商品快照。 5 | */ 6 | package cn.iocoder.doraemon.itemgroup.snapshot; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/paygroup/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 支付中心 3 | * 4 | * https://www.youzanyun.com/apilist/list/group_pay/union_pay 5 | */ 6 | package cn.iocoder.doraemon.paygroup; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/entity/CouponFetchLog.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon.entity; 2 | 3 | // TODO 6016 4 | public class CouponFetchLog { 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/present/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * https://help.youzan.com/qa#/menu/2190/detail/930?_k=ui5n0v 3 | */ 4 | package cn.iocoder.doraemon.umpgroup.present; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/bale/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 打包一口价 3 | * https://help.youzan.com/qa#/menu/2201/detail/1014?_k=8hrcbn 4 | */ 5 | package cn.iocoder.doraemon.umpgroup.bale; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/limitdiscount/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * https://help.youzan.com/qa#/menu/2189/detail/919?_k=dj3ksq 3 | */ 4 | package cn.iocoder.doraemon.umpgroup.limitdiscount; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/meetreduce/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 满减送 3 | * https://help.youzan.com/qa#/menu/2186/detail/325?_k=yodxoi 4 | */ 5 | package cn.iocoder.doraemon.umpgroup.meetreduce; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/packagebuy/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 优惠套餐 3 | * https://help.youzan.com/qa#/menu/2200/detail/1013?_k=0ugnpm 4 | */ 5 | package cn.iocoder.doraemon.umpgroup.packagebuy; -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/users/entity/User.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.users.entity; 2 | 3 | public class User { 4 | 5 | /** 6 | * 用户编号 7 | */ 8 | private Integer id; 9 | /** 10 | * 手机号 11 | */ 12 | private String mobile; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/AbstractItemTemplateElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板元素 VO 抽象类 5 | */ 6 | public abstract class AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 类型 10 | */ 11 | private String type; 12 | 13 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/tags/UserWeiXinFollowerTag.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.tags; 2 | 3 | // todo 芋艿,缺关联表 4 | public class UserWeiXinFollowerTag { 5 | 6 | /** 7 | * 标签ID 8 | */ 9 | private Integer id; 10 | /** 11 | * 标签名 12 | */ 13 | private String name; 14 | 15 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateStoreElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板进入店铺元素 VO 5 | */ 6 | public class ItemTemplateStoreElementVO extends AbstractItemTemplateElementVO { 7 | 8 | private static final String TYPE = "store"; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.ear 17 | *.zip 18 | *.tar.gz 19 | *.rar 20 | 21 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 22 | hs_err_pid* 23 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateSearchElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板搜索商品元素 VO 5 | */ 6 | public class ItemTemplateSearchElementVO { 7 | 8 | private static final String TYPE = "search"; 9 | 10 | /** 11 | * 背景色 12 | */ 13 | private String color; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateNoticeElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板通知元素 VO 5 | */ 6 | public class ItemTemplateNoticeElementVO extends AbstractItemTemplateElementVO { 7 | 8 | private static final String TYPE = "notice"; 9 | 10 | /** 11 | * 内容 12 | */ 13 | private String content; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateWhiteElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板辅助空白元素 VO 5 | */ 6 | public class ItemTemplateWhiteElementVO extends AbstractItemTemplateElementVO { 7 | 8 | private static final String TYPE = "while"; 9 | 10 | /** 11 | * 空白高度,单位:像素 12 | */ 13 | private Integer height; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemHotel.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | public class ItemHotel { 4 | 5 | /** 6 | * Item 编号 7 | * 8 | * {@link Item#id} 9 | */ 10 | private Integer id; 11 | /** 12 | * 客服电话区号 13 | */ 14 | private String serviceTelCode; 15 | /** 16 | * 客服电话 17 | */ 18 | private String serviceTel; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/Express.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery.entity; 2 | 3 | /** 4 | * 快递公司,例如圆通,申通等等。 5 | */ 6 | public class Express { 7 | 8 | /** 9 | * 编号 10 | */ 11 | private Integer id; 12 | /** 13 | * 名字 14 | */ 15 | private String name; 16 | /** 17 | * 是否展示 18 | * 19 | * 1-展示 20 | * 0-隐藏 21 | */ 22 | private Integer display; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemFenxiao.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | /** 4 | * Item 分销扩展信息 5 | */ 6 | public class ItemFenxiao { 7 | 8 | /** 9 | * Item 编号 10 | * 11 | * {@link Item#id} 12 | */ 13 | private Integer id; 14 | /** 15 | * 供货店铺Id 16 | */ 17 | private Integer supplierShopId; 18 | /** 19 | * 供货商品Id 20 | */ 21 | private Integer supplierItemId; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemSkuProperty.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Item SKU 规格属性 7 | */ 8 | public class ItemSkuProperty { 9 | 10 | /** 11 | * 属性编号 12 | */ 13 | private Integer id; 14 | /** 15 | * 属性文本 16 | */ 17 | private String name; 18 | /** 19 | * 添加时间 20 | */ 21 | private Date addTime; 22 | 23 | // todo 芋艿,默认类型 24 | 25 | } -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | cn.iocoder 8 | doraemon-entity 9 | pom 10 | 0.1024-SNAPSHOT 11 | 12 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateComponentElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板自定义模块元素 VO 5 | */ 6 | public class ItemTemplateComponentElementVO { 7 | 8 | private static final String TYPE = "component"; 9 | 10 | /** 11 | * 自定义组件编号 12 | */ 13 | private Integer id; 14 | /** 15 | * 标题 16 | */ 17 | private String title; 18 | /** 19 | * 链接 20 | */ 21 | private String link; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/trade/entity/TradeAdjustFee.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.trade.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 交易改价信息 7 | */ 8 | public class TradeAdjustFee { 9 | 10 | /** 11 | * 交易编号 {@link Trade#id} 12 | */ 13 | private Integer id; 14 | /** 15 | * 涨减价格 16 | */ 17 | private Integer payChange; 18 | /** 19 | * 运费调价差值 20 | */ 21 | private Integer postChange; 22 | /** 23 | * 更新时间 24 | */ 25 | private Date updateTime; 26 | 27 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateRichTextElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板富文本元素 VO 5 | */ 6 | public class ItemTemplateRichTextElementVO extends AbstractItemTemplateElementVO { 7 | 8 | private static final String TYPE = "rich_text"; 9 | 10 | /** 11 | * 是否全屏 12 | */ 13 | private Boolean fullscreen; 14 | /** 15 | * 富文本 16 | */ 17 | private String content; 18 | /** 19 | * 背景色 20 | */ 21 | private String color; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/category/ItemCategoryAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.category; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanItemcategoriesGetResult; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 商品类目 API 9 | */ 10 | public interface ItemCategoryAPI { 11 | 12 | /** 13 | * 获取商品类目列表 14 | * 15 | * https://www.youzanyun.com/apilist/detail/group_item/item_category/youzan.itemcategories.get 16 | * 17 | * @return 商品类目列表 18 | */ 19 | List list(); 20 | 21 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemPurchaseRight.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | /** 4 | * Item 购买权限拓展信息 5 | */ 6 | public class ItemPurchaseRight { 7 | 8 | /** 9 | * Item 编号 10 | * 11 | * {@link Item#id} 12 | */ 13 | private Integer id; 14 | /** 15 | * 允许购买的粉丝标签用,号分隔 16 | * 17 | * 数组,以逗号分隔 18 | */ 19 | private String umpTags; 20 | /** 21 | * 允许购买的粉丝等级,用逗号分隔 22 | */ 23 | private String umpLevels; 24 | /** 25 | * 每人限购多少件。0代表无限购,默认为0 26 | */ 27 | private Integer buyQuota; 28 | 29 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemSkuPropertyKeyReference.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Item SKU 规格名引用。用于和店铺关联,不同店铺有不同的规格名引用数据。 7 | */ 8 | public class ItemSkuPropertyKeyReference { 9 | 10 | /** 11 | * 编号 12 | */ 13 | private Integer id; 14 | /** 15 | * 店铺编号 16 | */ 17 | private Integer shopId; 18 | /** 19 | * 属性键编号 20 | * 21 | * {@link ItemSkuProperty#id} 22 | */ 23 | private Integer keyId; 24 | /** 25 | * 添加时间 26 | */ 27 | private Date addTime; 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateLineElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板辅助线元素 VO 5 | */ 6 | public class ItemTemplateLineElementVO extends AbstractItemTemplateElementVO { 7 | 8 | private static final String TYPE = "line"; 9 | 10 | /** 11 | * 背景色 12 | */ 13 | private String color; 14 | /** 15 | * 样式 16 | * 17 | * solid 实线 18 | * dashed 虚线 19 | * dotted 点线 20 | */ 21 | private String lineType; 22 | /** 23 | * 是否左右留白 24 | */ 25 | private Boolean hasPadding; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/commongroup/entity/CommonRegion.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.commongroup.entity; 2 | 3 | /** 4 | * 地区 5 | */ 6 | public class CommonRegion { 7 | 8 | /** 9 | * 地区编号 10 | */ 11 | private Integer id; 12 | /** 13 | * 名字 14 | */ 15 | private String name; 16 | /** 17 | * 级别 18 | * 19 | * 1-国家 20 | * 2-省份 21 | * 3-城市 22 | * 4-区县 23 | * 5-街道 24 | */ 25 | private Integer level; 26 | /** 27 | * 父地区编号 28 | */ 29 | private Integer parentId; 30 | /** 31 | * 拼音 32 | */ 33 | private String pinyin; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemEtd.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Item 预售扩展信息 7 | */ 8 | public class ItemEtd { 9 | 10 | /** 11 | * Item 编号 12 | * 13 | * {@link Item#id} 14 | */ 15 | private Integer id; 16 | /** 17 | * 发货类型 18 | * 19 | * 0 - xxx 时间开始发货 20 | * 1 - 付款 n 天后发货。 21 | */ 22 | private Integer etdType; 23 | /** 24 | * 预计发货开始时间, 字符串格式的时间,格式如:2018-01-01 25 | */ 26 | private Date etdStartDate; 27 | /** 28 | * 付款成功 后发货天数, 默认0 29 | */ 30 | private Integer etdDays; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/category/entity/ItemTagReference.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.category.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Item 分组引用。一个商品可以有多个商品分组。 7 | */ 8 | public class ItemTagReference { 9 | 10 | /** 11 | * 店铺编号 12 | */ 13 | private Integer shopId; 14 | /** 15 | * 商品编号 16 | */ 17 | private Integer itemId; 18 | /** 19 | * 商品分组编号 20 | */ 21 | private Integer tagId; 22 | /** 23 | * 状态 24 | * 25 | * 1-正常 26 | * 2-删除 27 | */ 28 | private Integer status; 29 | /** 30 | * 添加时间 31 | */ 32 | private Date addTime; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/ItemTemplateAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanItemTemplateListSearchResult; 4 | 5 | public interface ItemTemplateAPI { 6 | 7 | // 添加模板 8 | 9 | // 修改模板 10 | 11 | // 删除模板 12 | 13 | // 获得单条模板 14 | 15 | /** 16 | * 查询店铺下所有的详情模板列表 17 | * 18 | * https://open.youzan.com/api/oauthentry/youzan.item.template.list/3.0.0/search 19 | * 20 | * @param pageNo 页码 21 | * @param pageSize 每页大小 22 | * @return 商品详情模板( ItemDetailTempOpenModel )数组 23 | */ 24 | YouzanItemTemplateListSearchResult search(Integer pageNo, Integer pageSize); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/shopgroup/shop/entity/Shop.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.shopgroup.shop.entity; 2 | 3 | import java.util.Date; 4 | 5 | public class Shop { 6 | 7 | /** 8 | * 店铺编号 9 | */ 10 | private Integer id; 11 | /** 12 | * 店铺LOGO资源地址 13 | */ 14 | private String logo; 15 | /** 16 | * 店铺简介 17 | */ 18 | private String intro; 19 | /** 20 | * 创建时间 21 | */ 22 | private Date createTime; 23 | /** 24 | * 更新时间 25 | */ 26 | private Date updateTime; 27 | 28 | // todo https://www.youzan.com/v2/setting/store/index#index 29 | // todo 店铺状态 30 | // todo 主题信息认证 31 | // todo 店铺认证 32 | // todo 联系手机号 33 | // todo 联系人QQ 34 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/snapshot/entity/ItemContentSnapshot.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.snapshot.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 商品详情,对应 {@link cn.iocoder.doraemon.itemgroup.item.entity.ItemContent} 实体。 7 | */ 8 | public class ItemContentSnapshot { 9 | 10 | /** 11 | * 快照编号 {@link ItemSnapshot#id} 12 | */ 13 | private Integer id; 14 | /** 15 | * 商品编号 16 | * 17 | * {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#id} 18 | */ 19 | private Integer itemId; 20 | private String desc; 21 | private Integer templateId; 22 | private String data; 23 | /** 24 | * 快照时间 25 | */ 26 | private Date createTime; 27 | 28 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/commongroup/CommonRegoinAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.commongroup; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanRegionsGetResult; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 地区 API 9 | */ 10 | public interface CommonRegoinAPI { 11 | 12 | /** 13 | * 获取区域地名列表信息 14 | * 15 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.regions.get 16 | * 17 | * @param id 区域ID 18 | * @param parentId 区域父级ID 19 | * @param level 要获取的区域等级 20 | * @param fields 需要返回的区域地名对象字段 21 | * @return 区域地名列表信息 22 | */ 23 | List gets(Integer id, Integer parentId, Integer level, String[] fields); 24 | 25 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/cards/entity/SCRMCardCustomer.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.cards.entity; 2 | 3 | public class SCRMCardCustomer { 4 | 5 | /** 6 | * 用户会员卡编号 7 | */ 8 | private String id; 9 | /** 10 | * 会员卡标识 11 | */ 12 | private String cardAlias; 13 | /** 14 | * 粉丝类型 15 | * 16 | * 1:自有粉丝 17 | */ 18 | private Integer fansType; 19 | /** 20 | *【三选一】三方用户ID 21 | */ 22 | private String openUserId; 23 | /** 24 | * 【三选一】手机号 25 | */ 26 | private String mobile; 27 | /** 28 | * 【三选一】粉丝编号 29 | */ 30 | private Integer fansId; 31 | 32 | // todo 芋艿,有效期开始时间,有效期过期时间 33 | // todo 芋艿,授权时间 34 | // todo 芋艿,授权结束时间 35 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemSkuPropertyValueReference.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Item SKU 规格值引用。用于和店铺关联,不同店铺有不同的规格值引用数据。 7 | */ 8 | public class ItemSkuPropertyValueReference { 9 | 10 | /** 11 | * 编号 12 | */ 13 | private Integer id; 14 | /** 15 | * 店铺编号 16 | */ 17 | private Integer shopId; 18 | /** 19 | * 关联编号 20 | * 21 | * {@link ItemSkuPropertyKeyReference#id} 22 | */ 23 | private Integer referenceId; 24 | /** 25 | * 属性键编号 26 | * 27 | * {@link ItemSkuProperty#id} 28 | */ 29 | private Integer keyId; 30 | /** 31 | * 属性值编号 32 | * 33 | * {@link ItemSkuProperty#id} 34 | */ 35 | private Integer valueId; 36 | /** 37 | * 添加时间 38 | */ 39 | private Date addTime; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/TradeDeliveryLocalConfigAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsLocalGetResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsLocalSetParams; 5 | 6 | /** 7 | * 交易发货同城配送配置 API 8 | */ 9 | public interface TradeDeliveryLocalConfigAPI { 10 | 11 | /** 12 | * 读取商家同城配置的信息 13 | * 14 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.local.get 15 | * 16 | * @return 交易发货同城配送配置 17 | */ 18 | YouzanLogisticsLocalGetResult get(); 19 | 20 | /** 21 | * 设置商家同城配置的信息 22 | * 23 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.local.set 24 | * 25 | * @param params 更新的信息参数 26 | * @return 是否成功 27 | */ 28 | Boolean update(YouzanLogisticsLocalSetParams params); 29 | 30 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/code/TradeCodeAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.code; 2 | 3 | /** 4 | * 交易核销 API 5 | */ 6 | public interface TradeCodeAPI { 7 | 8 | /** 9 | * 用于核销到店自提订单 10 | * 11 | * https://www.youzanyun.com/apilist/detail/group_trade/trade_virtual/youzan.trade.selffetchcode.apply 12 | * 13 | * @param extraInfo 核销人(开发者根据自己业务规则传,一般为网点号或手机号) 14 | * @param code 消费者端的到店自提订单提货码 15 | * @return 是否成功 16 | */ 17 | Boolean applySelfFetch(String extraInfo, String code); 18 | 19 | // TODO 电子卡券整单核销 https://www.youzanyun.com/apilist/detail/group_trade/trade_virtual/youzan.trade.virtualticket.verifycode 20 | // TODO 电子卡券单个码券核销 https://www.youzanyun.com/apilist/detail/group_trade/trade_virtual/youzan.trade.virtualticket.verifyticket 21 | 22 | 23 | // TODO 使用购买虚拟商品获得的码 https://www.youzanyun.com/apilist/detail/group_trade/trade_virtual/youzan.trade.virtualcode.apply 24 | 25 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/TradeDeliveryExpressOrder.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 交易发货快递订单 7 | */ 8 | public class TradeDeliveryExpressOrder { 9 | 10 | /** 11 | * 交易编号 {@link cn.iocoder.doraemon.tradegroup.trade.entity.Trade#id} 12 | */ 13 | private String tid; 14 | /** 15 | * 交易明细编号 {@link cn.iocoder.doraemon.tradegroup.trade.entity.TradeOrder#id} 16 | */ 17 | private Long oid; 18 | /** 19 | * 快递单号 20 | */ 21 | private String nu; 22 | /** 23 | * 快递公司编号 24 | */ 25 | private Integer expressId; 26 | /** 27 | * 状态 28 | * 29 | * 1-正常 30 | * 2-删除 31 | */ 32 | private Integer status; 33 | /** 34 | * 发货时间 35 | */ 36 | private Date createTime; 37 | /** 38 | * 删除时间 39 | */ 40 | private Date deleteTime; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/TradeDeliverySetting.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 交易发货设置 7 | */ 8 | public class TradeDeliverySetting { 9 | 10 | /** 11 | * 店铺编号 {@link cn.iocoder.doraemon.shopgroup.shop.entity.Shop#id} 12 | */ 13 | private Integer id; 14 | /** 15 | * 更新时间 16 | */ 17 | private Date updateTime; 18 | /** 19 | * 是否开通快递发货功能 20 | */ 21 | private Boolean isExpress; 22 | /** 23 | * 计费方式 24 | * 25 | * 0-按商品累加运费 26 | * 1-组合运费(推荐使用) 27 | * 28 | * https://bbs.youzan.com/forum.php?mod=viewthread&tid=602557 29 | */ 30 | private Integer calcType; 31 | /** 32 | * 是否支持同城 33 | */ 34 | private Boolean isLocal; 35 | /** 36 | * 是否支持同城定时达 37 | */ 38 | private Boolean isLocalInTime; 39 | /** 40 | * 是否支持自提 41 | */ 42 | private Boolean isSelf; 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/TradeDeliverySettingAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsSettingGetResult; 4 | 5 | /** 6 | * 交易发货设置 API 7 | */ 8 | public interface TradeDeliverySettingAPI { 9 | 10 | /** 11 | * 获得交易发货设置 12 | * 13 | * https://open.youzan.com/api/oauthentry/youzan.logistics.setting/3.0.0/get 14 | * 15 | * @return 交易发货设置 16 | */ 17 | YouzanLogisticsSettingGetResult get(); 18 | 19 | /** 20 | * 设置开关配置 21 | * 22 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.setting.update 23 | * 24 | * @param shopId 店铺编号 25 | * @param isExpress 是否支持快递 26 | * @param calcType 计费类型 27 | * @param isLocal 是否支持同城 28 | * @param isSelf 是否支持自提 29 | * @return 是否成功 30 | */ 31 | Boolean update(Integer shopId, Boolean isExpress, Integer calcType, Boolean isLocal, Boolean isSelf); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/ExpressAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsExpressGetResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsGoodsexpressGetResult; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 快递 API 10 | */ 11 | public interface ExpressAPI { 12 | 13 | /** 14 | * 获取快递公司的列表 15 | * 16 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.express.get 17 | * 18 | * @return 所有物流公司地址 19 | */ 20 | List gets(); 21 | 22 | /** 23 | * 获取物流快递信息 24 | * 25 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.goodsexpress.get 26 | * 27 | * @param expressNo 物流单号 28 | * @param expressId 快递公司id 29 | * @return 物流快递信息 30 | */ 31 | YouzanLogisticsGoodsexpressGetResult getOrder(String expressNo, Integer expressId); 32 | 33 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateAudioElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板语音元素 VO 5 | */ 6 | public class ItemTemplateAudioElementVO extends AbstractItemTemplateElementVO { 7 | 8 | private static final String TYPE = "audio"; 9 | 10 | /** 11 | * 样式 12 | * 13 | * 0-模仿微信对话样式 14 | * 1-简易音乐播放器 15 | */ 16 | private Integer style; 17 | /** 18 | * 语音 19 | */ 20 | private String audio; 21 | /** 22 | * 气泡头像 23 | */ 24 | private String avatar; 25 | /** 26 | * 气泡位置 27 | * 28 | * 0-居左 29 | * 1-居右 30 | */ 31 | private Integer bubble; 32 | /** 33 | * 是否循环 34 | * 35 | * 0-否 36 | * 1-是 37 | */ 38 | private Integer loop; 39 | /** 40 | * 播放 41 | * 42 | * 0-暂停后再恢复播放时,从头开始 43 | * 1-暂停后再恢复播放时,从暂停位置开始 44 | */ 45 | private Integer reload; 46 | /** 47 | * 标题 48 | */ 49 | private String title; 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateGoodsTagListElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板商品分组元素 VO 的第一种 5 | */ 6 | public class ItemTemplateGoodsTagListElementVO { 7 | 8 | /** 9 | * 商品列表元素的选项 VO 10 | */ 11 | public static class GoodsTagElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "tag"; 14 | 15 | /** 16 | * 商品分组编号 17 | */ 18 | private Integer id; 19 | /** 20 | * 商品分组标题 21 | */ 22 | private String title; 23 | /** 24 | * 商品分组访问地址 25 | */ 26 | private String url; 27 | /** 28 | * 展示商品分组的商品数量 29 | */ 30 | private Integer goodsNumber; 31 | 32 | // 其他商品分组相关冗余字段 33 | } 34 | 35 | private static final String TYPE = "tag_list"; 36 | 37 | /** 38 | * 商品分组数组 39 | * 40 | * JSON 格式,数组,每个元素为 {@link GoodsTagElementVO} 41 | */ 42 | private String goods; 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemContent.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import cn.iocoder.doraemon.itemgroup.item.entity.vo.AbstractItemTemplateElementVO; 4 | 5 | /** 6 | * 商品详情 7 | */ 8 | public class ItemContent { 9 | 10 | /** 11 | * 配置元素 VO 12 | */ 13 | public static class ConfigElementVO extends AbstractItemTemplateElementVO { 14 | 15 | private static final String TYPE = "config"; 16 | 17 | /** 18 | * 商品描述 19 | */ 20 | private String content; 21 | 22 | } 23 | 24 | /** 25 | * Item 编号 26 | * 27 | * {@link Item#id} 28 | */ 29 | private Integer id; 30 | /** 31 | * 商品描述。 32 | * 33 | * 字数要大于5个字符,小于25000个字符 ,受违禁词控制 34 | */ 35 | private String desc; 36 | /** 37 | * 商品页模板编号 38 | */ 39 | private Integer templateId; 40 | /** 41 | * 模板元素数组 42 | * 43 | * JSON 格式,数组,每个元素为 {@link cn.iocoder.doraemon.itemgroup.item.entity.vo.AbstractItemTemplateElementVO} 的实现类字符串 44 | */ 45 | private String data; 46 | 47 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/present/PresentAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.present; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpPresentGiveResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpPresentsOngoingAllResult; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 赠品 API 10 | */ 11 | public interface PresentAPI { 12 | 13 | /** 14 | * 获取所有进行中的赠品列表 15 | * 16 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon_advanced/youzan.ump.presents.ongoing.all 17 | * 18 | * @param fields 需要返回的赠品对象字段。可选值:赠品结构体中所有字段均可返回;多个字段用“,”分隔。如果为空则返回所有 19 | * @return 赠品列表 20 | */ 21 | List ongoingList(String... fields); 22 | 23 | /** 24 | * 给用户赠送赠品 25 | * 26 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon_advanced/youzan.ump.present.give 27 | * 28 | * @param fansId 微信粉丝ID 29 | * @param buyerId 有赞手机注册用户ID 30 | * @param presentId 赠品编号 31 | * @return 赠送结果 32 | */ 33 | YouzanUmpPresentGiveResult give(Integer fansId, Integer buyerId, Integer presentId); 34 | 35 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateLinkElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板关联链接元素 VO 5 | */ 6 | public class ItemTemplateLinkElementVO extends AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 选项 VO 10 | */ 11 | public static class SelectionVO { 12 | 13 | /** 14 | * 类型 15 | * 16 | * source_selection :微页面分类 / 商品标签 17 | * link_selection :外链 18 | */ 19 | private String type; 20 | 21 | /** 22 | * 来源类型 23 | */ 24 | private String sourceType; 25 | /** 26 | * 来源编号 27 | */ 28 | private Integer sourceId; 29 | /** 30 | * 来源标题 31 | */ 32 | private String sourceTitle; 33 | /** 34 | * 来源链接 35 | */ 36 | private String sourceURL; 37 | /** 38 | * 展示来源记录数量,例如,展示商品数量 39 | */ 40 | private Integer number; 41 | } 42 | 43 | private static final String TYPE = "link"; 44 | 45 | /** 46 | * 选项元素数组 47 | * 48 | * JSON 格式,数组,每个元素为 {@link SelectionVO} 49 | */ 50 | private String subEntrys; 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/snapshot/entity/ItemSkuSnapshot.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.snapshot.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 商品 SKU 快照,对应 {@link cn.iocoder.doraemon.itemgroup.item.entity.ItemSku} 实体 7 | */ 8 | public class ItemSkuSnapshot { 9 | 10 | /** 11 | * 商品快照编号 {@link ItemSnapshot#id} 12 | */ 13 | private Integer snapshotId; 14 | private String uniqueCode; 15 | private Integer skuId; 16 | private Integer itemId; 17 | private Integer shopId; 18 | 19 | // private Integer status; // 无需状态,因为 sku 变更后,会产生新的 ItemSnapshot 20 | 21 | private String imageURL; 22 | private String properties; 23 | private Integer price; 24 | private String itemNo; 25 | /** 26 | * 库存数量 27 | * 28 | *【不影响 {@link ItemSnapshot#id}】的计算 29 | */ 30 | private Integer quantity; 31 | /** 32 | * 商品在付款减库存的状态下,该Sku上未付款的订单数量 33 | * 34 | * 【不影响 {@link ItemSnapshot#id}】的计算 35 | */ 36 | private Integer withHoldQuantity; 37 | /** 38 | * 销量 39 | * 40 | * 【不影响 {@link ItemSnapshot#id}】的计算 41 | */ 42 | private Integer soldNum; 43 | /** 44 | * 快照时间 45 | */ 46 | private Date createTime; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/weixin/entity/UserWeiXinFollower.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.weixin.entity; 2 | 3 | public class UserWeiXinFollower { 4 | 5 | /** 6 | * 粉丝编号 7 | */ 8 | private Integer id; 9 | /** 10 | * 微信粉丝用户的 openid 11 | */ 12 | private String openId; 13 | 14 | 15 | // todo 芋艿,微信粉丝用户ID https://www.youzanyun.com/apilist/structparam/response/CrmWeixinFans 16 | private Integer userId; 17 | 18 | /** 19 | * 微信粉丝用户的昵称 20 | */ 21 | private String nick; 22 | /** 23 | * 微信粉丝用户的头像Url 24 | */ 25 | private String avatar; 26 | /** 27 | * 性别。 28 | * 29 | * 可选值:m(男),f(女)。 30 | * 未知则为空 31 | */ 32 | private String sex; 33 | /** 34 | * 省份 35 | */ 36 | private String province; 37 | /** 38 | * 城市 39 | */ 40 | private String city; 41 | /** 42 | * 是否关注 43 | */ 44 | private Boolean isFollow; 45 | 46 | // todo 芋艿,当前积分 47 | private Integer points; 48 | 49 | // todo 芋艿,成交订单笔数 50 | private Integer tradedNum; 51 | 52 | // todo 芋艿,成交订单总额。单位:元 double => int 53 | private Double tradedMoney; 54 | 55 | // todo 芋艿,CrmUserTag[] 56 | 57 | // todo 芋艿,CrmFansLevel 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/customer/entity/ScrmCustomer.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.customer.entity; 2 | 3 | import cn.iocoder.doraemon.scrmgroup.users.entity.User; 4 | import com.youzan.open.sdk.gen.v3_1_0.model.YouzanScrmCustomerGetResult; 5 | 6 | import java.util.Date; 7 | 8 | public class ScrmCustomer { 9 | 10 | /** 11 | * 用户ID 12 | * {@link User} 13 | */ 14 | private Long userId; 15 | /** 16 | * 店铺编号 17 | */ 18 | private Integer kdtId; 19 | /** 20 | * 姓名 21 | */ 22 | private String name; 23 | /** 24 | * 手机号 25 | */ 26 | private String mobile; 27 | /** 28 | * 头像 29 | */ 30 | private String avatar; 31 | /** 32 | * 性别。 33 | * 34 | * 0:未知; 35 | * 1:男; 36 | * 2:女 37 | */ 38 | private Integer gender; 39 | /** 40 | * 生日 41 | */ 42 | private Date birthday; 43 | /** 44 | * 是否为会员 45 | */ 46 | private Boolean isMember; 47 | // TODO 芋艿,等待拆分 48 | /** 49 | * 联系地址 50 | */ 51 | private YouzanScrmCustomerGetResult.ContactAddress contactAddress; 52 | 53 | // TODO openid 54 | // TODO accountType 55 | // TODO 或者有个 account 表? 56 | 57 | // todo 芋艿,来源 58 | // TODO 59 | 60 | 61 | 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/TradeDeliveryExpressOrderAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsExpressbyordernoSearchResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsGoodsexpressGetResult; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 交易发货快递订单 API 10 | */ 11 | public interface TradeDeliveryExpressOrderAPI { 12 | 13 | /** 14 | * 通过交易号获取所有包裹信息 15 | * 16 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.expressbyorderno.search 17 | * 18 | * @param tid 交易号 19 | * @return 物流详情列表 20 | */ 21 | List search(String tid); 22 | 23 | /** 24 | * 通过交易明细(交易订单)编号获取包裹信息 25 | * 26 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.expressbyorderno.get 27 | * 28 | * 注意,这个 API 笔者做了调整。 29 | * 如果传递 tid ,那么和 {@link #search(String)} 又重复了 30 | * 并且,返回的只有单条包裹信息,但是一个交易下可以有多个包裹信息。 31 | * 因此,笔者觉得应该是根据交易明细(交易订单)编号查询。 32 | * 33 | * @param oid 交易明细(交易订单)编号 34 | * @return 物流详情 35 | */ 36 | YouzanLogisticsGoodsexpressGetResult get(String oid); 37 | 38 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/shopgroup/address/entity/ShopAddress.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.shopgroup.address.entity; 2 | 3 | import java.util.Date; 4 | 5 | public class ShopAddress { 6 | 7 | /** 8 | * 地址编号 9 | */ 10 | private Integer id; 11 | /** 12 | * 店铺编号 13 | */ 14 | private Integer shopId; 15 | /** 16 | * 手机 17 | */ 18 | private String mobile; 19 | /** 20 | * 联系人 21 | */ 22 | private String contactName; 23 | /** 24 | * 地区id 25 | */ 26 | private Integer regionId; 27 | /** 28 | * 详细地址 29 | */ 30 | private String address; 31 | /** 32 | * 是否退货地址 33 | */ 34 | private Boolean isReturn; 35 | /** 36 | * 是否默认退货地址 37 | */ 38 | private Boolean isReturnDefault; 39 | /** 40 | * 是否发票地址 41 | */ 42 | private Boolean isInvoice; 43 | /** 44 | * 是否默认发票地址 45 | */ 46 | private Boolean isInvoiceDefault; 47 | /** 48 | * 状态 49 | * 50 | * 1:正常 51 | * 2:删除 52 | */ 53 | private Integer status; 54 | /** 55 | * 创建时间 56 | */ 57 | private Date createTime; 58 | /** 59 | * 删除时间 60 | */ 61 | private Date deleteTime; 62 | /** 63 | * 更新时间 64 | */ 65 | private Date updateTime; 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/refund/entity/TradeRefundDelivery.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.refund.entity; 2 | 3 | /** 4 | * 交易退款维权的退货物流信息 5 | */ 6 | public class TradeRefundDelivery { 7 | 8 | /** 9 | * 退款编号 {@link TradeRefund#id} 10 | */ 11 | private String id; 12 | /** 13 | * 店铺编号 {@link cn.iocoder.doraemon.shopgroup.shop.entity.Shop#id} 14 | */ 15 | private Integer shopId; 16 | /** 17 | * 物流公司编号 {@link cn.iocoder.doraemon.tradegroup.delivery.entity.Express#id} 18 | */ 19 | private Integer expressId; 20 | /** 21 | * 物流运单编号 22 | */ 23 | private String nu; 24 | /** 25 | * 收件人(卖家)名 26 | */ 27 | private String receiverName; 28 | /** 29 | * 收件人(卖家)手机号 30 | */ 31 | private String receiverMobile; 32 | /** 33 | * 收件人(卖家)座机 34 | */ 35 | private String receiverTelephone; 36 | /** 37 | * 收件人(卖家)收获地区编号 38 | */ 39 | private Integer receiverRegionId; 40 | /** 41 | * 收件人(卖家)收获地址 42 | */ 43 | private String receiverAddress; 44 | /** 45 | * 发件人(买家)手机号 46 | */ 47 | private String senderMobile; 48 | /** 49 | * 发货备注 50 | */ 51 | private String desc; 52 | /** 53 | * 图片举证数组,以逗号分隔 54 | */ 55 | private String images; 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/ExpressOrder.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 快递订单 7 | */ 8 | public class ExpressOrder { 9 | 10 | /** 11 | * 事件 12 | */ 13 | public static class Event { 14 | 15 | /** 16 | * 时间 17 | */ 18 | private Date time; 19 | /** 20 | * 状态 21 | * 22 | * 与 {@link ExpressOrder#status} 一致 23 | */ 24 | private Integer status; 25 | /** 26 | * 上下文 27 | * 28 | * 例如,到达:上海静安区公司宝山服务部 由 已签收 签收 || 到达:浙江杭州余杭区良渚公司 已揽件 29 | */ 30 | private String context; 31 | 32 | } 33 | 34 | /** 35 | * 快递单号 36 | */ 37 | private String nu; 38 | /** 39 | * 快递公司编号 {@link Express#id} 40 | */ 41 | private Integer expressId; 42 | /** 43 | * 创建时间 44 | */ 45 | private Date createdTime; 46 | /** 47 | * 快递状态 48 | * 49 | * 0:在途,即货物处于运输过程中; 50 | * 1:揽件,货物已由快递公司揽收并且产生了第一条跟踪信息; 51 | * 2:疑难,货物寄送过程出了问题; 52 | * 3:签收,收件人已签收; 53 | * 4:退签,即货物由于用户拒签、超区等原因退回,而且发件人已经签收; 54 | * 5:派件,即快递正在进行同城派件; 55 | * 6:退回,货物正处于退回发件人的途中; 56 | */ 57 | private Integer status; 58 | /** 59 | * 过程事件数据 60 | * 61 | * 使用 JSON 将 {@link Event}数组 格式化成字符串 62 | */ 63 | private String data; 64 | 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/trade/entity/TradeSelfFetch.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.trade.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 交易上门自提信息 7 | */ 8 | public class TradeSelfFetch { 9 | 10 | /** 11 | * 交易编号 {@link Trade#id} 12 | */ 13 | private String id; 14 | /** 15 | * 店铺编号 {@link cn.iocoder.doraemon.shopgroup.shop.entity.Shop#id} 16 | */ 17 | private Integer shopId; 18 | /** 19 | * 自提人的手机 20 | */ 21 | private String fetcherMobile; 22 | /** 23 | * 自提人的名字 24 | */ 25 | private String fetcherName; 26 | /** 27 | * 自提开始时间 28 | * 29 | * 当为空时,任意时间都可自提。 30 | */ 31 | private Date fetchStartTime; 32 | /** 33 | * 自提结束时间 34 | * 35 | * 当为空时,任意时间都可自提。 36 | */ 37 | private Date fetchEndTime; 38 | /** 39 | * 自提提货码,例如 5508 8906 062 40 | */ 41 | private String fetchCode; 42 | /** 43 | * 上门自提点的编号 {@link cn.iocoder.doraemon.tradegroup.delivery.entity.TradeDeliverySelfFetchAddress#id} 44 | */ 45 | private Integer fetchAddressId; 46 | /** 47 | * 上门自提点的地区编号 48 | * 49 | * 冗余,避免删除 50 | */ 51 | private Integer fetchRegionId; 52 | /** 53 | * 上门自提点的地址 54 | * 55 | * 冗余,避免修改 56 | */ 57 | private String fetchAddress; 58 | /** 59 | * 上门自提点的联系电话 60 | * 61 | * 冗余,避免修改 62 | */ 63 | private String fetchPhone; 64 | 65 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/TradeDeliveryExpressTemplateAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanLogisticsTemplateSearchResult; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 交易发货快递运费模板 API 9 | */ 10 | public interface TradeDeliveryExpressTemplateAPI { 11 | 12 | /** 13 | * 获取店铺所有物流模板列表 14 | * 15 | * https://open.youzan.com/api/oauthentry/youzan.logistics.template/3.0.0/search 16 | * 17 | * @param pageNo 页码 18 | * @param pageSize 分页值,默认20 19 | * @return 店铺全部物流模板 20 | */ 21 | List search(Integer pageNo, Integer pageSize); 22 | 23 | /** 24 | * 创建物流模板 25 | * 26 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.template.create 27 | * 28 | * @param name 模板名称 29 | * @param payType 付费类型 30 | * @param valuationType 计算类型 31 | * @param valuationRules 运费规则 json格式,转换成 List 32 | */ 33 | void create(String name, Integer payType, Integer valuationType, String valuationRules); 34 | 35 | // update 接口,操作界面有,API 暂未提供。胖友自行 YY 。 36 | 37 | /** 38 | * 删除模板 39 | * 40 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.template.delete 41 | * 42 | * @param templateId 模板id 43 | * @return 是否成功 44 | */ 45 | Boolean delete(Integer templateId); 46 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/present/entity/PresentGivingRecord.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.present.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 赠品赠送记录 7 | */ 8 | public class PresentGivingRecord { 9 | 10 | /** 11 | * 记录编号,自增唯一 12 | */ 13 | private Integer id; 14 | /** 15 | * 店铺编号 16 | */ 17 | private Integer shopId; 18 | /** 19 | * 赠品编号 20 | */ 21 | private Integer presentId; 22 | /** 23 | * 赠品名 24 | */ 25 | private String presentName; 26 | /** 27 | * 商品编号 28 | */ 29 | private Integer itemId; 30 | /** 31 | * 商品标题 32 | */ 33 | private Integer itemTitle; 34 | /** 35 | * 活动编号 36 | */ 37 | private Integer activityId; 38 | /** 39 | * 活动类型 40 | * 41 | * 【下面枚举的值不一定正确,形式是这样的形式】 42 | * 1-满减/送活动 43 | * 2-刮刮卡活动 44 | */ 45 | private Integer activityType; 46 | /** 47 | * 交易编号 {@link cn.iocoder.doraemon.tradegroup.trade.entity.Trade#id} 48 | */ 49 | private Integer tid; 50 | /** 51 | * 买家编号 52 | */ 53 | private Integer buyerId; 54 | /** 55 | * 状态 56 | * 57 | * 1-待领取 58 | * 2-已领取 59 | * 3-已过期 60 | */ 61 | private Integer status; 62 | /** 63 | * 创建时间(赠送时间) 64 | */ 65 | private Date createTime; 66 | /** 67 | * 领取过期时间 68 | */ 69 | private Date expireTime; 70 | /** 71 | * 领取时间 72 | */ 73 | private Date receiveTime; 74 | 75 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemSku.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import java.util.Date; 4 | 5 | public class ItemSku { 6 | 7 | /** 8 | * 唯一编码,店铺Id 和 商品skuId 组合 9 | * 10 | * 分销场景下,skuId 多个店铺相同,uniqueCode 不同 11 | */ 12 | private String uniqueCode; 13 | /** 14 | * sku 编号 15 | * 16 | * 非唯一 17 | */ 18 | private Integer skuId; 19 | /** 20 | * 商品编号 21 | */ 22 | private Integer itemId; 23 | /** 24 | * 店铺编号 25 | */ 26 | private Integer shopId; 27 | /** 28 | * 状态 29 | * 30 | * 1-正常 31 | * 2-删除 32 | */ 33 | private Integer status; 34 | /** 35 | * 图片地址 36 | */ 37 | private String imageURL; 38 | /** 39 | * 商品规格 40 | * 41 | * 格式:kid[0]-vid[0],kid[1]-vid[1]...kid[n]-vid[n] 42 | * 例如:20000-3275069,1753146-3485013 43 | */ 44 | private String properties; 45 | /** 46 | * 价格,单位分 47 | */ 48 | private Integer price; 49 | /** 50 | * 商品货号(商家为商品设置的外部编号) 51 | */ 52 | private String itemNo; 53 | /** 54 | * 库存数量 55 | */ 56 | private Integer quantity; 57 | /** 58 | * 商品在付款减库存的状态下,该Sku上未付款的订单数量 59 | */ 60 | private Integer withHoldQuantity; 61 | /** 62 | * 销量 63 | */ 64 | private Integer soldNum; 65 | /** 66 | * 创建时间 67 | */ 68 | private Date createTime; 69 | /** 70 | * 更新时间 71 | */ 72 | private Date updateTime; 73 | 74 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateTextNavElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板文本导航元素 VO 5 | */ 6 | public class ItemTemplateTextNavElementVO extends AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 商品页面模板文本导航元素的选项 VO 10 | */ 11 | public static class SelectionElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "text_nav_selection"; 14 | 15 | // === 标题 === 16 | /** 17 | * 标题 18 | */ 19 | private String title; 20 | 21 | // === 链接 === 22 | /** 23 | * 链接类型 24 | */ 25 | private String linkType; 26 | /** 27 | * 链接地址 28 | */ 29 | private String linkURL; 30 | /** 31 | * 链接标题 32 | * 33 | * 例如链接类型为 goods ,对应商品标题 34 | */ 35 | private String linkTitle; 36 | /** 37 | * 链接编号 38 | * 39 | * 例如链接类型为 goods ,对应商品编号 40 | */ 41 | private String linkId; 42 | /** 43 | * 链接别名 44 | * 45 | * 例如链接类型为 goods ,对应商品别名 46 | */ 47 | private String alias; 48 | 49 | } 50 | 51 | private static final String TYPE = "text_nav"; 52 | 53 | /** 54 | * 展示方式 55 | * 56 | * 0-默认(目前就这一种) 57 | */ 58 | private Integer showMethod; 59 | /** 60 | * 选项元素数组 61 | * 62 | * JSON 格式,数组,每个元素为 {@link SelectionElementVO} 63 | */ 64 | private String subEntrys; 65 | 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/present/entity/Present.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.present.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 赠品 7 | */ 8 | public class Present { 9 | 10 | /** 11 | * 编号,自增唯一 12 | */ 13 | private Integer id; 14 | /** 15 | * 店铺编号 16 | */ 17 | private Integer shopId; 18 | /** 19 | * 名称 20 | */ 21 | private String name; 22 | /** 23 | * 创建时间 24 | */ 25 | private Date createTime; 26 | /** 27 | * 更新时间 28 | */ 29 | private Date updateTime; 30 | /** 31 | * 状态 32 | * 33 | * 1-未开始 34 | * 2-进行中 35 | * 3-已结束 36 | * 4-已删除 37 | */ 38 | private Integer status; 39 | /** 40 | * 结束类型 41 | * 42 | * 1-活动到期 43 | * 2-手动删除 44 | * 3-手动失效 45 | */ 46 | private Integer endType; 47 | /** 48 | * 活动到期时间 49 | */ 50 | private Date expireTime; 51 | /** 52 | * 设置为失效时间 53 | */ 54 | private Date invalidTime; 55 | /** 56 | * 删除时间 57 | */ 58 | private Date deleteTime; 59 | /** 60 | * 开始时间 61 | */ 62 | private Date startTime; 63 | /** 64 | * 结束时间 65 | */ 66 | private Date endTime; 67 | /** 68 | * 领取有效期,单位:天。 69 | */ 70 | private Integer expirationDays; 71 | /** 72 | * 领取限制 73 | */ 74 | private Integer limit; 75 | /** 76 | * 商品编号 77 | */ 78 | private Integer itemId; 79 | /** 80 | * 当前赠送数量 81 | */ 82 | private Integer givingNum; 83 | /** 84 | * 当前领取数量 85 | */ 86 | private Integer receiveNum; 87 | 88 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/refund/entity/TradeRefundMessage.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.refund.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 交易退款维权的协商记录 7 | */ 8 | public class TradeRefundMessage { 9 | 10 | /** 11 | * 明细 12 | */ 13 | public static class Detail { 14 | 15 | /** 16 | * 标题 17 | */ 18 | private String title; 19 | /** 20 | * 内容 21 | */ 22 | private String content; 23 | 24 | } 25 | 26 | /** 27 | * 记录编号,唯一。 28 | */ 29 | private Integer id; 30 | /** 31 | * 退款编号 {@link TradeRefund#id} 32 | */ 33 | private String refundId; 34 | /** 35 | * 店铺编号 {@link cn.iocoder.doraemon.shopgroup.shop.entity.Shop#id} 36 | */ 37 | private Integer shopId; 38 | /** 39 | * 发起角色 40 | * 41 | * 1 - 系统 42 | * 2 - 买家 43 | * 3 - 商家 44 | * 4 - 客服 45 | */ 46 | private Integer ownerRole; 47 | /** 48 | * 具体操作 49 | * 50 | * 例如: 51 | * 250 - 同意退款给买家,本次维权结束 52 | * 206 - 已退货,等待商家确认收货 53 | * 205 - 已同意退款申请,等待买家退货 54 | * 201 - 发起了退款申请,等待商家处理 55 | */ 56 | private Integer op; 57 | /** 58 | * 操作前状态 59 | */ 60 | private Integer beforeStatus; 61 | /** 62 | * 操作后状态 63 | */ 64 | private String afterStatus; 65 | /** 66 | * 明细数组字符串 67 | * 68 | * JSON 格式,数组,每个元素为 {@link Detail} 69 | */ 70 | private String details; 71 | /** 72 | * 图片地址数组字符串 73 | */ 74 | private String picURLs; 75 | /** 76 | * 创建时间 77 | */ 78 | private Date createTime; 79 | 80 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/bale/entity/BaleActivity.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.bale.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 打包一口价活动 7 | */ 8 | public class BaleActivity { 9 | 10 | /** 11 | * 编号,自增唯一 12 | */ 13 | private Integer id; 14 | /** 15 | * 店铺编号 16 | */ 17 | private Integer shopId; 18 | /** 19 | * 名称 20 | */ 21 | private String name; 22 | /** 23 | * 创建时间 24 | */ 25 | private Date createTime; 26 | /** 27 | * 更新时间 28 | */ 29 | private Date updateTime; 30 | /** 31 | * 状态 32 | * 33 | * 1-未开始 34 | * 2-进行中 35 | * 3-已结束 36 | * 4-已删除 37 | */ 38 | private Integer status; 39 | /** 40 | * 结束类型 41 | * 42 | * 1-活动到期 43 | * 2-手动删除 44 | * 3-手动失效 45 | */ 46 | private Integer endType; 47 | /** 48 | * 活动到期时间 49 | */ 50 | private Date expireTime; 51 | /** 52 | * 设置为失效时间 53 | */ 54 | private Date invalidTime; 55 | /** 56 | * 删除时间 57 | */ 58 | private Date deleteTime; 59 | /** 60 | * 开始时间 61 | */ 62 | private Date startTime; 63 | /** 64 | * 结束时间 65 | */ 66 | private Date endTime; 67 | /** 68 | * 打包价格,单位:分 69 | */ 70 | private Integer balePrice; 71 | /** 72 | * 任选件数 73 | */ 74 | private Integer baleNum; 75 | /** 76 | * 优惠是否叠加 77 | * 78 | * 可与优惠券、优惠码、满减、支付有礼、订单返现促销活动进行优惠叠加 79 | */ 80 | private Boolean isPreferentialOverlay; 81 | /** 82 | * 指定可用商品列表,使用逗号分隔商品编号 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#id} 83 | */ 84 | private String items; 85 | 86 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/entity/CouponVerifyLog.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 优惠券(码)核销记录 7 | */ 8 | public class CouponVerifyLog { 9 | 10 | /** 11 | * 记录编号,唯一自增 12 | */ 13 | private Integer id; 14 | /** 15 | * 店铺编号 16 | */ 17 | private Integer shopId; 18 | /** 19 | * 创建时间(验证时间) 20 | */ 21 | private Date createTime; 22 | /** 23 | * 类型 24 | * 25 | * 1-优惠劵 26 | * 2-优惠码 27 | */ 28 | private Integer type; 29 | /** 30 | * 优惠劵(码)分组编号,{@link CouponGroup#id} 31 | */ 32 | private Integer couponGroupId; 33 | /** 34 | * 标题 35 | */ 36 | private String title; 37 | /** 38 | * 使用说明 39 | */ 40 | private String descrption; 41 | /** 42 | * 优惠劵(码)编号,{@link Coupon#id} 43 | */ 44 | private Integer couponId; 45 | /** 46 | * 核销码 47 | */ 48 | private String verifyCode; 49 | /** 50 | * 验证方式 51 | * 52 | * 1-扫码 53 | * 2-手动输入 54 | */ 55 | private Integer verifyType; 56 | /** 57 | * 验证管理员编号 58 | */ 59 | private Integer adminId; 60 | /** 61 | * 是否设置满多少金额可用,单位:分 62 | * 63 | * 0-不限制 64 | * 大于0-多少金额可用 65 | */ 66 | private Integer condition; 67 | /** 68 | * 优惠类型 69 | * 70 | * 1-代金卷 71 | * 2-折扣卷 72 | */ 73 | private Integer preferentialType; 74 | /** 75 | * 折扣 76 | */ 77 | private Double discount; 78 | /** 79 | * 优惠金额,单位:分 80 | */ 81 | private Integer value; 82 | /** 83 | * 使用订单号 84 | */ 85 | private String usedInTid; 86 | 87 | } 88 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/CouponGroupAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon; 2 | 3 | import cn.iocoder.doraemon.umpgroup.coupon.entity.CouponGroup; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpCouponSearchResult; 5 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpCouponsUnfinishedSearchResult; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 优惠劵(码)组 API 11 | */ 12 | public interface CouponGroupAPI { 13 | 14 | /** 15 | * (分页查询)查询优惠券(码)组列表 16 | * 17 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupon.search 18 | * 19 | * @param groupType 类型 PROMOCARD 优惠券,PROMOCODE 优惠码 20 | * @param status 状态 FUTURE 未开始 ,END 已结束,ON 进行中 (默认查所有状态) 21 | * @param pageNo 第几页 22 | * @param pageSize 每页数量 23 | * @return 优惠券(码)组列表 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.CouponGroup} 24 | */ 25 | YouzanUmpCouponSearchResult search(String groupType, String status, Integer pageNo, Integer pageSize); 26 | 27 | /** 28 | * 获取所有未结束的优惠活动列表(包含未开始的、进行中的) 29 | * 30 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupons.unfinished.search 31 | * 32 | * @param fields 需要返回的优惠对象字段。可选值:优惠结构体中所有字段均可返回;多个字段用“,”分隔。如果为空则返回所有 33 | * @return 未结束的优惠券(码)组列表 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.CouponGroup} 34 | */ 35 | List unfinishedSearch(String... fields); 36 | 37 | /** 38 | * 获取优惠券(码)组详情 39 | * 40 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupon.detail.get 41 | * 42 | * @param id 优惠券(码)组编号 43 | * @return 优惠券(码)组 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.CouponGroup} 44 | */ 45 | List get(Integer id); 46 | 47 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/shopgroup/address/ShopAddressAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.shopgroup.address; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.*; 4 | 5 | public interface ShopAddressAPI { 6 | 7 | /** 8 | * 店铺地址库新建一个地址 9 | * 10 | * https://www.youzanyun.com/apilist/detail/group_shop/shop/youzan.shop.address.create 11 | * 12 | * @param params 参数 13 | * @return 响应 { 14 | * is_success: // 是否成功 15 | * id: // 新增的地址id 16 | * } 17 | */ 18 | YouzanShopAddressCreateResult create(YouzanShopAddressCreateParams params); 19 | 20 | /** 21 | * 店铺地址库更新一个地址 22 | * 23 | * https://www.youzanyun.com/apilist/detail/group_shop/shop/youzan.shop.address.update 24 | * 25 | * @param params 参数 26 | * @return 是否成功 27 | */ 28 | Boolean update(YouzanShopAddressUpdateParams params); 29 | 30 | /** 31 | * 店铺地址库删除一个地址 32 | * 33 | * https://open.youzan.com/api/oauthentry/youzan.shop.address/3.0.0/delete 34 | * 35 | * @param id 地址id 36 | * @return 是否成功 37 | */ 38 | Boolean delete(Integer id); 39 | 40 | /** 41 | * 店铺地址库获取所有地址 42 | * 43 | * https://www.youzanyun.com/apilist/detail/group_shop/shop/youzan.shop.address.list 44 | * 45 | * @param type 地址类型 46 | * return(退货地址) 47 | * invoice(发票地址) 48 | * @return 响应 { 49 | * total: // 地址总数 50 | * list: // 地址列表 51 | * } 52 | */ 53 | YouzanShopAddressListResult list(String type); 54 | 55 | /** 56 | * 店铺地址库获取一个地址 57 | * 58 | * https://www.youzanyun.com/apilist/detail/group_shop/shop/youzan.shop.address.get 59 | * 60 | * @param id 地址id 61 | * @return 地址明细 62 | */ 63 | YouzanShopAddressGetResult get(Integer id); 64 | 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/ItemSkuAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanItemQuantityUpdateResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanSkusCustomGetResult; 5 | 6 | import java.util.List; 7 | 8 | // TODO 芋艿,https://open.youzan.com/api/oauthentry/youzan.item.sku/3.0.0/get 不存在 9 | public interface ItemSkuAPI { 10 | 11 | /** 12 | * 跟据商家编码(商家为sku设置的外部编号)获取商品sku. 13 | * 14 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.skus.custom.get 15 | * 16 | * importance 注意,如果一个item_no对应多个sku会返回所有符合条件的sku 17 | * 18 | * @param itemId 商品Id 19 | * @param itemNo 商家编码(商家为Sku设置的外部编号) 20 | * @return 商品sku 数组 21 | */ 22 | List customGet(Integer itemId, String itemNo); 23 | 24 | /** 25 | * 更新SKU 26 | * 27 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.item.sku.update 28 | * 29 | * @param itemId sku id 30 | * @param skuId 商品数字编号 31 | * @param quantity sku库存数量 32 | * @param price sku销售价格,单位:分 33 | * @param itemNo 商家编码(商家为sku设置外部编号) 34 | * @return 是否成功; 成功:true 35 | */ 36 | Boolean update(Integer itemId, Integer skuId, Integer quantity, Integer price, String itemNo); 37 | 38 | /** 39 | * 支持全量或增量方式更新SKU库存 40 | * 41 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.item.quantity.update 42 | * 43 | * @param type 库存更新方式 44 | * 0 - 全量更新(默认) 45 | * 1 - 增量更新 46 | * @param itemId sku id 47 | * @param skuId 商品数字编号 48 | * @param quantity sku库存数量 49 | * @return 是否成功; 成功:true 50 | */ 51 | YouzanItemQuantityUpdateResult updateQuantity(Integer type, Integer itemId, Integer skuId, Integer quantity); 52 | 53 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/TradeDeliveryOnlineAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery; 2 | 3 | /** 4 | * 交易发货核心 API 5 | */ 6 | public interface TradeDeliveryOnlineAPI { 7 | 8 | /** 9 | * 运费计算 10 | * 11 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.fee.get 12 | * 13 | * @param tid 交易编号 14 | * @param itemParamList 交易商品列表,例如 [{"amount":1,"itemId":1,"itemType":0,"skuId":1,"supplyKdtId":0,"templateId":1,"unifiedPostage":1}] 15 | * @param provinceName 省份名 16 | * @param cityName 城市名 17 | * @param countyName 地区名 18 | * @return 运费。单位:分 19 | */ 20 | int getFee(String tid, String itemParamList, String provinceName, String cityName, String countyName); 21 | 22 | /** 23 | * 卖家确认发货 24 | * 确认发货的目的是让交易流程继续走下去,确认发货后交易状态会由【买家已付款】变为【卖家已发货】 25 | * 26 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.online.confirm 27 | * 28 | * @param tid 交易编号 29 | * @param outerTid 外部交易编号 30 | * @param oids 交易明细编号数组。如果需要拆单发货,使用该字段指定要发货的商品交易明细编号,多个明细编号用半角逗号“,”分隔; 不需要拆单发货,则该字段不传或值为空; 31 | * @param isNoExpress 发货是否无需物流。如果无需物流,不需要传递 nu / expressId 参数 32 | * @param nu 快递单号(具体一个物流公司的真实快递单号) 33 | * @param expressId 物流公司编号 34 | * @param issue 配送期次,周期购订单专用,例如:1,表示配送第1期 35 | * @return 是否成功 36 | */ 37 | Boolean confirm(String tid, String outerTid, String[] oids, Boolean isNoExpress, String nu, Integer expressId, Integer issue); 38 | 39 | /** 40 | * 卖家标记签收 41 | * 标记签收的目的是让交易流程继续走下去,标记签收后交易状态会由【卖家已发货】变为【买家已签收】,通常到店自提的订单需要卖家做标记签收操作 42 | * 43 | * https://www.youzanyun.com/apilist/detail/group_trade/logistics/youzan.logistics.online.marksign 44 | * 45 | * @param tid 交易编号 46 | * @return 是否成功 47 | */ 48 | Boolean markSign(String tid); 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateImageNavElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板图片导航元素 VO 5 | */ 6 | public class ItemTemplateImageNavElementVO { 7 | 8 | /** 9 | * 商品页面模板图片导航元素的选项 VO 10 | */ 11 | public static class SelectionElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "nav_selection"; 14 | 15 | // === 图片 === 16 | /** 17 | * 图片编号 18 | */ 19 | private Integer imageId; 20 | /** 21 | * 图片地址 22 | */ 23 | private String imageURL; 24 | /** 25 | * 图片缩略地址 26 | */ 27 | private String imageThumbURL; 28 | /** 29 | * 图片高度 30 | */ 31 | private Integer imageWidth; 32 | /** 33 | * 图片宽度 34 | */ 35 | private Integer imageHeight; 36 | 37 | // === 标题 === 38 | /** 39 | * 标题 40 | */ 41 | private String title; 42 | 43 | // === 链接 === 44 | /** 45 | * 链接类型 46 | */ 47 | private String linkType; 48 | /** 49 | * 链接地址 50 | */ 51 | private String linkURL; 52 | /** 53 | * 链接标题 54 | * 55 | * 例如链接类型为 goods ,对应商品标题 56 | */ 57 | private String linkTitle; 58 | /** 59 | * 链接编号 60 | * 61 | * 例如链接类型为 goods ,对应商品编号 62 | */ 63 | private String linkId; 64 | /** 65 | * 链接别名 66 | * 67 | * 例如链接类型为 goods ,对应商品别名 68 | */ 69 | private String alias; 70 | 71 | } 72 | 73 | private static final String TYPE = "nav"; 74 | 75 | /** 76 | * 选项元素数组 77 | * 78 | * JSON 格式,数组,每个元素为 {@link ItemTemplateTextNavElementVO.SelectionElementVO} 的实现类字符串 79 | */ 80 | private String subEntrys; 81 | 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateGoodsElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板商品元素 VO 5 | */ 6 | public class ItemTemplateGoodsElementVO extends AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 商品 10 | */ 11 | public static class Goods { 12 | 13 | /** 14 | * 商品编号 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#id} 15 | */ 16 | private Integer id; 17 | /** 18 | * 商品别名 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#alias} 19 | */ 20 | private String alias; 21 | 22 | // 其他商品相关冗余字段 23 | } 24 | 25 | private static final String TYPE = "goods"; 26 | 27 | /** 28 | * 列表样式 29 | * 30 | * 0-大图 31 | * 1-小图 32 | * 2-一大两小 33 | * 3-详细列表 34 | */ 35 | private Integer size; 36 | /** 37 | * 商品样式 38 | * 39 | * 0-卡片样式 40 | * 1-瀑布流 41 | * 2-极简样式 42 | * 3-促销 43 | */ 44 | private Integer sizeType; 45 | /** 46 | * 是否显示购买按钮 47 | * 48 | * 0-不显示 49 | * 1-显示 50 | */ 51 | private Integer buyBtn; 52 | /** 53 | * 显示购买按钮的样式 54 | * 55 | * 1-样式1 56 | * 2-样式2 57 | * 3-样式3 58 | * 4-样式4 59 | */ 60 | private Integer buyBtnType; 61 | /** 62 | * 是否显示商品标题 63 | * 64 | * 0-不显示 65 | * 1-显示 66 | */ 67 | private Integer title; 68 | /** 69 | * 是否显示商品简介 70 | * 71 | * 0-不显示 72 | * 1-显示 73 | */ 74 | private Integer showSubTitle; 75 | /** 76 | * 是否显示商品价格 77 | * 78 | * 0-不显示 79 | * 1-显示 80 | */ 81 | private Integer price; 82 | /** 83 | * 商品数组 84 | * 85 | * JSON 格式,数组,每个元素为 {@link Goods} 86 | */ 87 | private String goods; 88 | 89 | // private Integer showWishBtn; 0 暂时没找到对应的选项 90 | // 91 | // private Integer wishBtnType; 1 暂时没找到对应的选项 92 | 93 | 94 | } 95 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateGoodsTagsElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板商品分组元素 VO 的第二种 5 | */ 6 | public class ItemTemplateGoodsTagsElementVO extends AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 商品分组元素的选项 VO 10 | */ 11 | public static class GoodsTagElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "tag"; 14 | 15 | /** 16 | * 商品分组编号 17 | */ 18 | private Integer id; 19 | /** 20 | * 商品分组标题 21 | */ 22 | private String title; 23 | /** 24 | * 商品分组访问地址 25 | */ 26 | private String url; 27 | 28 | // 其他商品分组相关冗余字段 29 | } 30 | 31 | private static final String TYPE = "tags"; 32 | 33 | /** 34 | * 列表样式 35 | * 36 | * 0-大图 37 | * 1-小图 38 | * 2-一大两小 39 | * 3-详细列表 40 | */ 41 | private Integer size; 42 | /** 43 | * 商品样式 44 | * 45 | * 0-卡片样式 46 | * 1-瀑布流 47 | * 2-极简样式 48 | * 3-促销 49 | */ 50 | private Integer sizeType; 51 | /** 52 | * 是否显示购买按钮 53 | * 54 | * 0-不显示 55 | * 1-显示 56 | */ 57 | private Integer buyBtn; 58 | /** 59 | * 显示购买按钮的样式 60 | * 61 | * 1-样式1 62 | * 2-样式2 63 | * 3-样式3 64 | * 4-样式4 65 | */ 66 | private Integer buyBtnType; 67 | /** 68 | * 是否显示商品标题 69 | * 70 | * 0-不显示 71 | * 1-显示 72 | */ 73 | private Integer title; 74 | /** 75 | * 是否显示商品简介 76 | * 77 | * 0-不显示 78 | * 1-显示 79 | */ 80 | private Integer showSubTitle; 81 | /** 82 | * 是否显示商品价格 83 | * 84 | * 0-不显示 85 | * 1-显示 86 | */ 87 | private Integer price; 88 | /** 89 | * 商品分组数组 90 | * 91 | * JSON 格式,数组,每个元素为 {@link GoodsTagElementVO} 92 | */ 93 | private String goods; 94 | 95 | } 96 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/CouponCardAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon; 2 | 3 | import cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon; 4 | import cn.iocoder.doraemon.umpgroup.coupon.entity.CouponGroup; 5 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpPromocardAddResult; 6 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpPromocodeAddParams; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 优惠劵 API 12 | */ 13 | public interface CouponCardAPI { 14 | 15 | /** 16 | * 创建优惠劵。 17 | * 18 | * 生成 {@link CouponGroup} 和 {@link Coupon} 19 | * 20 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.promocard.add 21 | * 22 | * @param params 优惠劵参数 23 | * @return 优惠劵信息 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 24 | */ 25 | YouzanUmpPromocardAddResult.UmpPromotionCard add(YouzanUmpPromocodeAddParams params); 26 | 27 | /** 28 | * 查询买家优惠劵列表 29 | * 30 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.promocard.buyer.search 31 | * 32 | * @param fansType 粉丝类型(自有粉丝: fans_type = 1) 33 | * @param fansId 【三选一】粉丝ID,与 fans_type 同时出现,如果没有写0 mobile/fans_id/open_user_id 三选一传入 34 | * @param openUserId 【三选一】三方用户ID mobile/fans_id/open_user_id 三选一传入 35 | * @param mobile 【三选一】手机号,如果没有则写 0 mobile/fans_id/open_user_id 三选一传入 36 | * @param status 状态。VALID 有效(未使用) USED 已使用 INVALID 已失效 37 | * @return 优惠劵列表 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 38 | */ 39 | List searchByBuyer(Integer fansType, Integer fansId, String openUserId, String mobile, String status); 40 | 41 | /** 42 | * 获取优惠劵详情 43 | * 44 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.promocard.detail.get 45 | * 46 | * @param id 优惠劵编号 47 | * @return 优惠劵 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 48 | */ 49 | Coupon get(Integer id); 50 | 51 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/CouponCodeAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon; 2 | 3 | import cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon; 4 | import cn.iocoder.doraemon.umpgroup.coupon.entity.CouponGroup; 5 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpPromocodeAddParams; 6 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpPromocodeAddResult; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 优惠码 API 12 | */ 13 | public interface CouponCodeAPI { 14 | 15 | /** 16 | * 创建优惠码。 17 | * 18 | * 生成 {@link CouponGroup} 和 {@link Coupon} 19 | * 20 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.promocode.add 21 | * 22 | * @param params 优惠码参数 23 | * @return 优惠码信息 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 24 | */ 25 | YouzanUmpPromocodeAddResult.UmpPromotionCode add(YouzanUmpPromocodeAddParams params); 26 | 27 | /** 28 | * 查询买家优惠码列表 29 | * 30 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.promocode.buyer.search 31 | * 32 | * @param fansType 粉丝类型(自有粉丝: fans_type = 1) 33 | * @param fansId 【三选一】粉丝ID,与 fans_type 同时出现,如果没有写0 mobile/fans_id/open_user_id 三选一传入 34 | * @param openUserId 【三选一】三方用户ID mobile/fans_id/open_user_id 三选一传入 35 | * @param mobile 【三选一】手机号,如果没有则写 0 mobile/fans_id/open_user_id 三选一传入 36 | * @param status 状态。VALID 有效(未使用) USED 已使用 INVALID 已失效 37 | * @return 优惠码列表 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 38 | */ 39 | List searchByBuyer(Integer fansType, Integer fansId, String openUserId, String mobile, String status); 40 | 41 | /** 42 | * 获取优惠码详情 43 | * 44 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.promocode.detail.get 45 | * 46 | * @param id 优惠码编号 47 | * @return 优惠码 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 48 | */ 49 | Coupon get(Integer id); 50 | 51 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/shopgroup/shop/ShopAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.shopgroup.shop; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanShopBasicGetResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanShopGetResult; 5 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanShopStatusGetResult; 6 | 7 | public interface ShopAPI { 8 | 9 | /** 10 | * 创建店铺 11 | * 12 | * https://www.youzanyun.com/apilist/detail/group_shop/shop_advanced/youzan.shop.create 13 | * 14 | * @param name 店铺名字 15 | * @param logo 店铺LOGO资源地址 16 | * @param intro 店铺简介 17 | * @return 店铺编号 18 | */ 19 | Integer create(String name, String logo, String intro); 20 | 21 | /** 22 | * 更新店铺信息 23 | * 24 | * https://www.youzanyun.com/apilist/detail/group_shop/shop_advanced/youzan.shop.update 25 | * 26 | * @param id 店铺编号 27 | * @param name 店铺名字 28 | * @param logo 店铺LOGO资源地址 29 | * @param intro 店铺简介 30 | * @return 是否成功 31 | */ 32 | Boolean update(Integer id, String name, String logo, String intro); 33 | 34 | /** 35 | * 获取店铺基础信息 36 | * 37 | * https://open.youzan.com/api/oauthentry/youzan.shop/3.0.0/get 38 | * 39 | * @param id 店铺编号 40 | * @return 店铺基础信息 41 | */ 42 | YouzanShopGetResult get(Integer id); 43 | 44 | /** 45 | * 获取店铺基本信息 46 | * 47 | * https://www.youzanyun.com/apilist/detail/group_shop/shop/youzan.shop.basic.get 48 | * 49 | * @param id 店铺编号 50 | * @return 获取店铺基本信息。相比 {@link #get(Integer)} 接口,多了 physical_url 和 cert_type 返回值 51 | */ 52 | YouzanShopBasicGetResult getBasic(Integer id); 53 | 54 | /** 55 | * 获取店铺状态信息 56 | * 57 | * https://www.youzanyun.com/apilist/detail/group_shop/shop/youzan.shop.status.get 58 | * 59 | * @param id 店铺编号 60 | * @param fields 需要返回的店铺状态信息对象字段 61 | * @return 店铺状态信息 62 | */ 63 | YouzanShopStatusGetResult.AccountShopStatus getStatus(Integer id, String[] fields); 64 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/snapshot/entity/ItemSnapshot.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.snapshot.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 商品快照,对应 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item} 实体 7 | */ 8 | public class ItemSnapshot { 9 | 10 | /** 11 | * 快照编号 12 | */ 13 | private String id; 14 | /** 15 | * 商品编号 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#id} 16 | */ 17 | private Integer itemId; 18 | private String alias; 19 | /** 20 | * 是否当前商品正在使用的快照。 21 | */ 22 | private Boolean isNewest; 23 | /** 24 | * 快照时间 25 | */ 26 | private Date createTime; 27 | 28 | // ========== 基本信息 BEGIN ========== 29 | 30 | private String title; 31 | private String summary; 32 | private Integer cid; 33 | private String picURLs; 34 | private Integer itemType; 35 | private Integer goodsType; 36 | 37 | // ========== 基本信息 END ========== 38 | 39 | // ========== 价格库存 BEGIN ========== 40 | 41 | private Integer price; 42 | private Double itemWeight; 43 | private String itemNo; 44 | /** 45 | * 总库存 46 | * 47 | * 【不影响 {@link #id}】的计算 48 | */ 49 | private Integer quantity; 50 | /** 51 | * 总销量 52 | * 53 | * 【不影响 {@link #id}】的计算 54 | */ 55 | private Integer soldNum; 56 | private Integer hideStock; 57 | private Double originPrice; 58 | private Integer joinLevelDiscount; 59 | 60 | // ========== 价格库存 END ========== 61 | 62 | // ========== 运费信息 BEGIN ========== 63 | private Integer postType; 64 | private Integer postFee; 65 | private Integer deliveryTemplateId; 66 | // ========== 运费信息 END ========== 67 | 68 | // ========== 其他信息 BEGIN ========== 69 | 70 | private Boolean isListing; 71 | private Integer order; 72 | private Date autoListingTime; 73 | private Boolean isLock; 74 | private String messages; 75 | 76 | // ========== 其他信息 END ========== 77 | 78 | private Boolean etdStatus; 79 | private Boolean purchaseRightStatus; 80 | 81 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/packagebuy/entity/PackageBuyActivity.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.packagebuy.entity; 2 | 3 | import java.util.Date; 4 | import java.util.List; 5 | 6 | /** 7 | * 优惠套餐活动 8 | */ 9 | public class PackageBuyActivity { 10 | 11 | /** 12 | * 商品 VO 13 | */ 14 | public static class ItemVO { 15 | 16 | /** 17 | * 商品编号 18 | */ 19 | private Integer itemId; 20 | /** 21 | * 商品 SKU 编号数组 22 | */ 23 | private List skuIds; 24 | 25 | } 26 | 27 | /** 28 | * 编号,自增唯一 29 | */ 30 | private Integer id; 31 | /** 32 | * 店铺编号 33 | */ 34 | private Integer shopId; 35 | /** 36 | * 名称 37 | */ 38 | private String title; 39 | /** 40 | * 创建时间 41 | */ 42 | private Date createTime; 43 | /** 44 | * 更新时间 45 | */ 46 | private Date updateTime; 47 | /** 48 | * 状态 49 | * 50 | * 1-未开始 51 | * 2-进行中 52 | * 3-已结束 53 | * 4-已删除 54 | */ 55 | private Integer status; 56 | /** 57 | * 结束类型 58 | * 59 | * 1-活动到期 60 | * 2-手动删除 61 | */ 62 | private Integer endType; 63 | /** 64 | * 活动到期时间 65 | */ 66 | private Date expireTime; 67 | /** 68 | * 删除时间 69 | */ 70 | private Date deleteTime; 71 | /** 72 | * 开始时间 73 | */ 74 | private Date startTime; 75 | /** 76 | * 结束时间 77 | */ 78 | private Date endTime; 79 | /** 80 | * 套餐价格,单位:分 81 | */ 82 | private Integer price; 83 | /** 84 | * 商品原价最小值,单位:分 85 | */ 86 | private Integer originPriceMin; 87 | /** 88 | * 商品原价最大值,单位:分 89 | */ 90 | private Integer originPriceMax; 91 | /** 92 | * 商品数组 93 | * 94 | * JSON 格式,数组,每个元素为 {@link ItemVO} 95 | */ 96 | private String items; 97 | /** 98 | * 优惠价格展示 99 | * 100 | * false-买家浏览商品详情页时,不能看到套餐优惠价格 101 | * true-买家浏览商品详情页时,可以看到套餐优惠价格 102 | */ 103 | private Boolean isShowPreference; 104 | 105 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/category/ItemTagAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.category; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanItemcategoriesTagAddResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanItemcategoriesTaglistSearchResult; 5 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanItemcategoriesTagsGetResult; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 商品分组 API 11 | */ 12 | public interface ItemTagAPI { 13 | 14 | // 获得单条商品分组 15 | 16 | /** 17 | * 分页获取商品分组列表 18 | * 19 | * https://www.youzanyun.com/apilist/detail/group_item/item_category/youzan.itemcategories.taglist.search 20 | * 21 | * @param orderBy 排序方式。格式为column:asc/desc,column可选值:created 创建时间 22 | * @param pageNo 页码 23 | * @param pageSize 每页条数 24 | * @return 分组列表 25 | */ 26 | YouzanItemcategoriesTaglistSearchResult search(String orderBy, Integer pageNo, Integer pageSize); 27 | 28 | /** 29 | * 根据是否排序查询商品分组列表 30 | * 31 | * https://www.youzanyun.com/apilist/detail/group_item/item_category/youzan.itemcategories.tags.get 32 | * 33 | * @param isSort 是否排序 34 | * @return 分组列表信息 35 | */ 36 | List list(Boolean isSort); 37 | 38 | /** 39 | * 新增一个商品分组 40 | * 41 | * https://www.youzanyun.com/apilist/detail/group_item/item_category/youzan.itemcategories.tag.add 42 | * 43 | * @param name 商品分组的名称 44 | * @return 商品分组信息 45 | */ 46 | YouzanItemcategoriesTagAddResult add(String name); 47 | 48 | /** 49 | * 更新一个商品分组名 50 | * 51 | * https://www.youzanyun.com/apilist/detail/group_item/item_category/youzan.itemcategories.tag.update 52 | * 53 | * @param tagId 商品分组编号 54 | * @param name 商品分组的名称 55 | * @return 是否成功 56 | */ 57 | Boolean update(String tagId, String name); 58 | 59 | /** 60 | * 删除一个商品分组 61 | * 62 | * https://www.youzanyun.com/apilist/detail/group_item/item_category/youzan.itemcategories.tag.delete 63 | * 64 | * @param tagId 商品分组编号 65 | * @return 是否成功 66 | */ 67 | Boolean delete(String tagId); 68 | 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/cart/entity/TradeCartItem.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.cart.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 购物车的商品信息 7 | */ 8 | public class TradeCartItem { 9 | 10 | // ========= 基础字段 BEGIN ========= 11 | 12 | /** 13 | * 编号,唯一自增。 14 | */ 15 | private Integer id; 16 | /** 17 | * 店铺编号 18 | */ 19 | private Integer shopId; 20 | /** 21 | * 状态 22 | * 23 | * 1-正常 24 | * 2-主动删除 25 | * 3-下单删除 26 | */ 27 | private Integer status; 28 | /** 29 | * 商品放入购物车时间 30 | */ 31 | private Date createTime; 32 | /** 33 | * 商品在购物车中的更新时间 34 | */ 35 | private Date updateTime; 36 | /** 37 | * 商品在购物车中的删除时间 38 | */ 39 | private Date deleteTime; 40 | 41 | // ========= 基础字段 END ========= 42 | 43 | // ========= 买家信息 BEGIN ========= 44 | 45 | /** 46 | * 买家编号 47 | */ 48 | private Integer buyerId; 49 | /** 50 | * 会话 key 51 | */ 52 | private String nobody; 53 | 54 | // ========= 买家信息 END ========= 55 | 56 | // ========= 商品信息 BEGIN ========= 57 | 58 | /** 59 | * 商品编号 60 | */ 61 | private Integer itemId; 62 | /** 63 | * 商品 SKU 编号 64 | */ 65 | private Integer skuId; 66 | /** 67 | * 商品购买数量 68 | */ 69 | private Integer num; 70 | /** 71 | * 交易明细中买家留言的数据结构 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#messages} 72 | */ 73 | private String buyerMessages; 74 | 75 | // ========= 商品信息 END ========= 76 | 77 | // ========= 交易信息 BEGIN ========= 78 | 79 | /** 80 | * 订单编号 81 | */ 82 | private String tid; 83 | /** 84 | * 下单时间 85 | */ 86 | private Date buyTime; 87 | 88 | // ========= 交易信息 BEGIN ========= 89 | 90 | // ========= 优惠信息 BEGIN ========= 91 | 92 | /** 93 | * 商品营销活动编号 94 | */ 95 | private Integer activityId; 96 | /** 97 | * 商品营销活动类型 98 | */ 99 | private Integer activityType; 100 | 101 | // ========= 优惠信息 END ========= 102 | 103 | } 104 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateGoodsListElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板商品列表元素 VO 5 | */ 6 | public class ItemTemplateGoodsListElementVO extends AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 商品列表元素的选项 VO 10 | */ 11 | public static class GoodsTagElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "tag"; 14 | 15 | /** 16 | * 商品分组编号 17 | */ 18 | private Integer id; 19 | /** 20 | * 商品分组标题 21 | */ 22 | private String title; 23 | /** 24 | * 商品分组访问地址 25 | */ 26 | private String url; 27 | 28 | // 其他商品分组相关冗余字段 29 | } 30 | 31 | private static final String TYPE = "goods_list"; 32 | 33 | /** 34 | * 展示商品分组的商品数量 35 | */ 36 | private Integer goodsNumberType; 37 | /** 38 | * 列表样式 39 | * 40 | * 0-大图 41 | * 1-小图 42 | * 2-一大两小 43 | * 3-详细列表 44 | */ 45 | private Integer size; 46 | /** 47 | * 商品样式 48 | * 49 | * 0-卡片样式 50 | * 1-瀑布流 51 | * 2-极简样式 52 | * 3-促销 53 | */ 54 | private Integer sizeType; 55 | /** 56 | * 是否显示购买按钮 57 | * 58 | * 0-不显示 59 | * 1-显示 60 | */ 61 | private Integer buyBtn; 62 | /** 63 | * 显示购买按钮的样式 64 | * 65 | * 1-样式1 66 | * 2-样式2 67 | * 3-样式3 68 | * 4-样式4 69 | */ 70 | private Integer buyBtnType; 71 | /** 72 | * 是否显示商品标题 73 | * 74 | * 0-不显示 75 | * 1-显示 76 | */ 77 | private Integer title; 78 | /** 79 | * 是否显示商品简介 80 | * 81 | * 0-不显示 82 | * 1-显示 83 | */ 84 | private Integer showSubTitle; 85 | /** 86 | * 是否显示商品价格 87 | * 88 | * 0-不显示 89 | * 1-显示 90 | */ 91 | private Integer price; 92 | /** 93 | * 商品分组数组 94 | * 95 | * JSON 格式,数组,每个元素为 {@link GoodsTagElementVO} 96 | */ 97 | private String goods; 98 | 99 | // private Integer showWishBtn; 0 暂时没找到对应的选项 100 | // 101 | // private Integer wishBtnType; 1 暂时没找到对应的选项 102 | 103 | 104 | } 105 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/customer/ScrmCustomerAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.customer; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUserBasicGetResult; 4 | import com.youzan.open.sdk.gen.v3_1_0.model.YouzanScrmCustomerGetResult; 5 | 6 | public interface ScrmCustomerAPI { 7 | 8 | class Account { 9 | /** 10 | * 帐号ID 11 | */ 12 | private String accountId; 13 | /** 14 | * 帐号类型。目前支持以下选项(只支持传一种): 15 | * 16 | * FansID:自有粉丝ID 17 | * Mobile:手机号 18 | * YouZanAccount:有赞账号 19 | * 20 | * 本质上,Mobile = YouZanAccount 等价 21 | */ 22 | private String accountType; 23 | } 24 | 25 | /** 26 | * 获取用户详情 27 | * 28 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.scrm.customer.get 29 | * 30 | * @param account 用户帐号信息 31 | * @return 客户详情 32 | */ 33 | YouzanScrmCustomerGetResult get(Account account); 34 | 35 | /** 36 | * 获取用户简要信息 37 | * 38 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.user.basic.get 39 | * 40 | * TODO:参数,等待开发完成,提供 Demo 41 | * 42 | * @return 用户简要信息 43 | */ 44 | YouzanUserBasicGetResult get(); 45 | 46 | /** 47 | * 客户创建接口 48 | * 49 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.scrm.customer.create 50 | * 51 | * @param mobile 手机号 52 | * @param customerCreate 创建客户所需信息 JSON { 53 | * birthday: // 生日 54 | * gender: // 性别 55 | * name: // 姓名 56 | * contact_address: // 地址 JSON 结构 57 | * } 58 | * @return 用户帐号信息 59 | */ 60 | Account create(String mobile, String customerCreate); 61 | 62 | /** 63 | * 客户更新接口 64 | * 65 | * @param account 用户帐号信息 66 | * @param customerUpdate JSON { 67 | * birthday: // 生日 68 | * gender: // 性别 69 | * name: // 姓名 70 | * contact_address: // 地址 JSON 结构 71 | * } 72 | * @return 是否更新成功 73 | */ 74 | Boolean update(Account account, String customerUpdate); 75 | 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/ItemTemplate.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import cn.iocoder.doraemon.itemgroup.item.entity.vo.AbstractItemTemplateElementVO; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * 商品页面模板 9 | * 10 | * 如何使用商品页模版:https://help.youzan.com/qa#/menu/2111/detail/859?_k=w4e8zz 11 | */ 12 | public class ItemTemplate { 13 | 14 | /** 15 | * 配置元素 VO 16 | */ 17 | public static class ConfigElementVO extends AbstractItemTemplateElementVO { 18 | 19 | private static final String TYPE = "config"; 20 | 21 | /** 22 | * 标题 23 | */ 24 | private String title; 25 | /** 26 | * 模板样式 27 | * 28 | * 0-普通版 29 | * 1-普通简洁版 30 | */ 31 | private Integer templateStyle; 32 | 33 | } 34 | 35 | /** 36 | * 商品详情区元素 VO 37 | */ 38 | public static class GoodsTemplateSplitElementVO extends AbstractItemTemplateElementVO { 39 | 40 | private static final String TYPE = "goods_template_split"; 41 | 42 | } 43 | 44 | /** 45 | * 编号 —— 普通版(内置) 46 | */ 47 | private static final Integer ID_STYLE_1 = - 1; 48 | /** 49 | * 编号 —— 普通简洁版(内置) 50 | */ 51 | private static final Integer ID_SYTLE_2 = -2; 52 | 53 | /** 54 | * 模板编号 55 | */ 56 | private Integer id; 57 | /** 58 | * 别名 59 | * 60 | * 系统生成,作为唯一标识。例如,2fpa62tbmsl9h 61 | */ 62 | private String alias; 63 | /** 64 | * 店铺编号 65 | */ 66 | private Integer shopId; 67 | /** 68 | * 标题 69 | */ 70 | private String title; 71 | /** 72 | * 是否展示 73 | */ 74 | private Boolean isDisplay; 75 | /** 76 | * 状态 77 | * 78 | * 1-正常 79 | * 2-删除 80 | */ 81 | private Integer status; 82 | /** 83 | * 模板元素数组 84 | * 85 | * JSON 格式,数组,每个元素为 {@link cn.iocoder.doraemon.itemgroup.item.entity.vo.AbstractItemTemplateElementVO} 的实现类字符串 86 | */ 87 | private String data; 88 | /** 89 | * 添加时间 90 | */ 91 | private Date addTime; 92 | /** 93 | * 最后更新时间 94 | */ 95 | private Date updateTime; 96 | /** 97 | * 删除时间 98 | */ 99 | private Date deleteTime; 100 | 101 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/TradeDeliveryExpressTemplate.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery.entity; 2 | 3 | import java.util.Date; 4 | import java.util.List; 5 | 6 | /** 7 | * 交易发货快递运费模板 8 | */ 9 | public class TradeDeliveryExpressTemplate { 10 | 11 | /** 12 | * 运费规范 13 | */ 14 | public static class ValueRule { 15 | 16 | /** 17 | * 地区编号数组 18 | */ 19 | private List regions; 20 | /** 21 | * 首件数量,单位根据 {@link #valuationType} 22 | */ 23 | private Integer firstAmount; 24 | /** 25 | * 首件运费,单位:分 26 | */ 27 | private Integer firstFee; 28 | /** 29 | * 续件数量,单位根据 {@link #valuationType} 30 | */ 31 | private Integer additionalAmount; 32 | /** 33 | * 续件运费,单位:分 34 | */ 35 | private Integer additionalFee; 36 | 37 | } 38 | 39 | /** 40 | * 模板编号 41 | */ 42 | private Integer id; 43 | /** 44 | * 店铺编号 45 | */ 46 | private Integer shopId; 47 | /** 48 | * 模板名称 49 | */ 50 | private String name; 51 | /** 52 | * 状态 53 | * 54 | * 1-正常 55 | * 2-删除 56 | */ 57 | private Integer status; 58 | /** 59 | * 当前使用次数 60 | * 61 | * 当使用次数大于零,不能删除 62 | */ 63 | private Integer useCount; 64 | /** 65 | * 付费类型 66 | * 67 | * 1-买家付费 68 | * 2-卖家付费 69 | */ 70 | private Integer payType; 71 | /** 72 | * 是否包邮 73 | * 74 | * 0-否 75 | * 1-是 76 | * 2-部分 77 | */ 78 | private Integer freeType; 79 | /** 80 | * 复制于哪个模板的编号 81 | */ 82 | private Integer copyOfTemplateId; 83 | /** 84 | * 计算类型 85 | * 86 | * 1-按件 87 | * 2-按重量 88 | * 3-按体积 89 | */ 90 | private Integer valuationType; 91 | /** 92 | * 运费规则数组 93 | * 94 | * 使用 JSON 将 {@link ValueRule}数组 格式化成字符串 95 | */ 96 | private String valuationRules; 97 | /** 98 | * 创建时间 99 | */ 100 | private Date createTime; 101 | /** 102 | * 更新时间 103 | */ 104 | private Date updateTime; 105 | /** 106 | * 删除时间 107 | */ 108 | private Integer deleteTime; 109 | 110 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateImageAdElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板图片广告元素 VO 5 | */ 6 | public class ItemTemplateImageAdElementVO extends AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 商品页面模板图片广告元素的选项 VO 10 | */ 11 | public static class SelectionElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "image_ad_selection"; 14 | 15 | // === 图片 === 16 | /** 17 | * 图片编号 18 | */ 19 | private Integer imageId; 20 | /** 21 | * 图片地址 22 | */ 23 | private String imageURL; 24 | /** 25 | * 图片缩略地址 26 | */ 27 | private String imageThumbURL; 28 | /** 29 | * 图片高度 30 | */ 31 | private Integer imageWidth; 32 | /** 33 | * 图片宽度 34 | */ 35 | private Integer imageHeight; 36 | 37 | // === 标题 === 38 | /** 39 | * 标题 40 | */ 41 | private String title; 42 | 43 | // === 链接 === 44 | /** 45 | * 链接类型 46 | */ 47 | private String linkType; 48 | /** 49 | * 链接地址 50 | */ 51 | private String linkURL; 52 | /** 53 | * 链接标题 54 | * 55 | * 例如链接类型为 goods ,对应商品标题 56 | */ 57 | private String linkTitle; 58 | /** 59 | * 链接编号 60 | * 61 | * 例如链接类型为 goods ,对应商品编号 62 | */ 63 | private String linkId; 64 | /** 65 | * 链接别名 66 | * 67 | * 例如链接类型为 goods ,对应商品别名 68 | */ 69 | private String alias; 70 | 71 | } 72 | 73 | private static final String TYPE = "image_ad"; 74 | 75 | /** 76 | * 显示方式 77 | * 78 | * 0-折叠轮播 79 | * 1-分开显示 80 | */ 81 | private Integer showMethod; 82 | /** 83 | * 显示大小 84 | * 85 | * 0-大图 86 | * 1-小图 87 | */ 88 | private Integer size; 89 | /** 90 | * 元素高度 91 | */ 92 | private Integer height; 93 | /** 94 | * 选项元素数组 95 | * 96 | * JSON 格式,数组,每个元素为 {@link SelectionElementVO} 97 | */ 98 | private String subEntrys; 99 | 100 | } 101 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/cards/entity/SCRMCard.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.cards.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 会员卡 7 | */ 8 | public class SCRMCard { 9 | 10 | /** 11 | * 商家会员卡的唯一标识 12 | * 13 | * 例如,https://kdt.im/-28bKh 14 | */ 15 | private String alias; 16 | /** 17 | * 会员卡名,卡名不允许重复,最大字符:9 18 | */ 19 | private String name; 20 | /** 21 | * 会员卡状态 22 | * 23 | * 1:正常; 24 | * 2:已禁用; 25 | * 3:已删除 26 | */ 27 | private Integer status; 28 | /** 29 | * 发卡链接 30 | */ 31 | private String url; 32 | /** 33 | * 激活方式 34 | * 35 | * 0:不需要激活; 36 | * 1:仅需手机激活; 37 | * 2:手机+填写资料 38 | */ 39 | private Integer activateMode; 40 | /** 41 | * 卡的类型 42 | * 43 | * 1:无门槛卡, (默认值) 44 | * 2:规则卡; 45 | */ 46 | private Integer type; 47 | /** 48 | * 规则卡的等级,当card_type为2时必填 49 | */ 50 | private Integer level; 51 | /** 52 | * 卡背景颜色 53 | */ 54 | private String colorCode; 55 | /** 56 | * 使用须知 57 | */ 58 | private String description; 59 | 60 | // todo 芋艿,grant_condition 61 | // todo 芋艿,rights CardRight[] 62 | 63 | /** 64 | * 是否允许微信端分享 ,默认允许 65 | */ 66 | private Boolean isAllowShare; 67 | /** 68 | * 客服电话 69 | */ 70 | private String servicePhone; 71 | /** 72 | * 微信卡包的同步设置范围选择:0-3, 73 | * 74 | * 0:不同步; 75 | * 1:基于卡号核销; 76 | * 2:基于卡号和条形码核销; 77 | * 3:基于卡号和二维码核销 78 | */ 79 | private Integer syncWeixinMode; 80 | /** 81 | * 同步微信卡状态, 82 | * 83 | * 1:不同步; 84 | * 2:审核中; 85 | * 3:通过; 86 | * 4:失败 87 | */ 88 | private Integer syncWeixinStatus; 89 | /** 90 | * 生效方式类型, 91 | * 92 | * 1:从领取开始无期限; 93 | * 2:从固定时刻开始,到固定时刻结束; 94 | * 3:从领取开始,持续一段时长(termDays) 95 | */ 96 | private Integer termType; 97 | /** 98 | * 生效持续天数,term_type为3时必传 99 | */ 100 | private Integer termDays; 101 | /** 102 | * 生效开始时间 103 | */ 104 | private Date termStartTime; 105 | /*** 106 | * 生效结束时间 107 | */ 108 | private Date termEndTime; 109 | /** 110 | * 失效后,默认转变的会员卡,默认不转变 111 | */ 112 | // todo 芋艿,干啥的 113 | private String termToCardAlias; 114 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/entity/Coupon.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon.entity; 2 | 3 | import java.util.Date; 4 | 5 | public class Coupon { 6 | 7 | // ========== 基本信息 BEGIN ========== 8 | /** 9 | * 卡券ID 10 | */ 11 | private Integer id; 12 | /** 13 | * 店铺编号 14 | */ 15 | private Integer shopId; 16 | /** 17 | * 类型 18 | * 19 | * 1-优惠劵 20 | * 2-优惠码 21 | */ 22 | private Integer type; 23 | /** 24 | * 优惠劵(码)分组编号,{@link CouponGroup#id} 25 | */ 26 | private Integer couponGroupId; 27 | /** 28 | * 核销码 29 | */ 30 | private String verifyCode; 31 | /** 32 | * 创建时间 33 | */ 34 | private Date createTime; 35 | /** 36 | * 优惠码状态 37 | * 38 | * 1-生效中 39 | * 2-已失效 40 | * 3-已过期 41 | * 4-已删除 42 | * 5-已使用 43 | */ 44 | private Integer status; 45 | 46 | // ========== 基本信息 END ========== 47 | 48 | // ========== 领取情况 BEGIN ========== 49 | /** 50 | * 是否领取 51 | */ 52 | private Boolean isTake; 53 | /** 54 | * 领取用户编号 55 | */ 56 | private Integer userId; 57 | /** 58 | * 领取时间 59 | */ 60 | private Date takeTime; 61 | // ========== 领取情况 END ========== 62 | 63 | // ========== 使用规则 BEGIN ========== 64 | /** 65 | * 固定日期-生效开始时间 66 | */ 67 | private Date validStartTime; 68 | /** 69 | * 固定日期-生效结束时间 70 | */ 71 | private Date validEndTime; 72 | // ========== 使用规则 END ========== 73 | 74 | // ========== 使用效果 BEGIN ========== 75 | /** 76 | * 优惠类型 77 | * 78 | * 1-代金卷 79 | * 2-折扣卷 【优惠劵独有】 80 | */ 81 | private Integer preferentialType; 82 | /** 83 | * 折扣 84 | */ 85 | private Double discount; 86 | /** 87 | * 优惠金额,单位:分。 88 | */ 89 | private Integer value; 90 | // ========== 使用效果 END ========== 91 | 92 | // ========== 使用情况 BEGIN ========== 93 | /** 94 | * 是否使用 95 | */ 96 | private Boolean isUsed; 97 | /** 98 | * 使用订单号 99 | */ 100 | private String usedInTid; 101 | /** 102 | * 订单中优惠面值,单位:分 103 | */ 104 | private Integer usedValue; 105 | /** 106 | * 使用时间 107 | */ 108 | private Date usedTime; 109 | // ========== 使用情况 END ========== 110 | 111 | } 112 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateShowCaseElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板橱窗元素 VO 5 | */ 6 | public class ItemTemplateShowCaseElementVO { 7 | 8 | /** 9 | * 商品页面模板图片广告元素的选项 VO 10 | */ 11 | public static class SelectionElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "image_ad_selection"; 14 | 15 | // === 图片 === 16 | /** 17 | * 图片编号 18 | */ 19 | private Integer imageId; 20 | /** 21 | * 图片地址 22 | */ 23 | private String imageURL; 24 | /** 25 | * 图片缩略地址 26 | */ 27 | private String imageThumbURL; 28 | /** 29 | * 图片高度 30 | */ 31 | private Integer imageWidth; 32 | /** 33 | * 图片宽度 34 | */ 35 | private Integer imageHeight; 36 | 37 | // === 标题 === 38 | /** 39 | * 标题 40 | */ 41 | private String title; 42 | 43 | // === 链接 === 44 | /** 45 | * 链接类型 46 | */ 47 | private String linkType; 48 | /** 49 | * 链接地址 50 | */ 51 | private String linkURL; 52 | /** 53 | * 链接标题 54 | * 55 | * 例如链接类型为 goods ,对应商品标题 56 | */ 57 | private String linkTitle; 58 | /** 59 | * 链接编号 60 | * 61 | * 例如链接类型为 goods ,对应商品编号 62 | */ 63 | private String linkId; 64 | /** 65 | * 链接别名 66 | * 67 | * 例如链接类型为 goods ,对应商品别名 68 | */ 69 | private String alias; 70 | 71 | } 72 | 73 | private static final String TYPE = "showcase"; 74 | 75 | /** 76 | * 橱窗标题名 77 | */ 78 | private String title; 79 | /** 80 | * 显示方式 81 | * 82 | * 0-保留 83 | * 1-三列 84 | */ 85 | private Integer mode; 86 | /** 87 | * 图片间隙 88 | * 89 | * 0-保留 90 | * 1-消除 91 | */ 92 | private Integer withoutSpace; 93 | /** 94 | * 内容区标题 95 | */ 96 | private String bodyTitle; 97 | /** 98 | * 内容区说明 99 | */ 100 | private String bodyDesc; 101 | /** 102 | * 选项元素数组 103 | * 104 | * JSON 格式,数组,每个元素为 {@link SelectionElementVO} 105 | */ 106 | private String subEntrys; 107 | 108 | } 109 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/cards/SCRMCardCustomerAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.cards; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanScrmCustomerCardGrantResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanScrmCustomerInfoGetResult; 5 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanScrmCustomerSearchResult; 6 | 7 | public interface SCRMCardCustomerAPI { 8 | 9 | /** 10 | * 给用户发放会员卡 11 | * 12 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.customer.card.grant 13 | * 14 | * @param fansType 粉丝类型(自有粉丝: fans_type = 1) 15 | * @param fansId 【三选一】粉丝ID,与 fans_type 同时出现,如果没有写0 mobile/fans_id/open_user_id 三选一传入 16 | * @param openUserId 【三选一】三方用户ID mobile/fans_id/open_user_id 三选一传入 17 | * @param mobile 【三选一】手机号,如果没有则写 0 mobile/fans_id/open_user_id 三选一传入 18 | * @param cardAlias 商家会员卡的唯一标识 19 | * @return 结果 { 20 | * isSuccess: // 是否成功 21 | * cardNo : // 用户会员卡号 22 | * } 23 | */ 24 | YouzanScrmCustomerCardGrantResult grant(Integer fansType, Integer fansId, String openUserId, String mobile, String cardAlias); 25 | 26 | /** 27 | * 删除用户的会员卡 28 | * 29 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.customer.card.delete 30 | * 31 | * @param fansType 粉丝类型(自有粉丝: fans_type = 1) 32 | * @param fansId 【三选一】粉丝ID,与 fans_type 同时出现,如果没有写0 mobile/fans_id/open_user_id 三选一传入 33 | * @param openUserId 【三选一】三方用户ID mobile/fans_id/open_user_id 三选一传入 34 | * @param mobile 【三选一】手机号,如果没有则写 0 mobile/fans_id/open_user_id 三选一传入 35 | * @param cardNo 用户会员卡号,没有则写'',与card_alias任选其一,优先级高于card_alias 36 | * @param cardAlias 商家会员卡唯一标识,没有则写'',与card_no任选其一,优先级低于card_no 37 | * @return 是否成功 38 | */ 39 | Boolean delete(Integer fansType, Integer fansId, String openUserId, String mobile, String cardNo, String cardAlias); 40 | 41 | /** 42 | * 通过用户会员卡号获取会员信息 43 | * 44 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.customer.info.get 45 | * 46 | * @param id 用户会员卡卡号 47 | * @return 用户会员卡信息 48 | */ 49 | YouzanScrmCustomerInfoGetResult get(String id); 50 | 51 | /** 52 | * 会员卡对应的会员列表 53 | * 54 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.customer.search 55 | * 56 | * @param cardAlias 商家会员卡的唯一标识 57 | * @param page 每页默认20条,最大支持50页 58 | * @return 会员列表 59 | */ 60 | YouzanScrmCustomerSearchResult search(String cardAlias, Integer page); 61 | 62 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/cards/SCRMCardAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.cards; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.*; 4 | 5 | public interface SCRMCardAPI { 6 | 7 | /** 8 | * 创建会员卡 9 | * 10 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.create 11 | * 12 | * @param cardCreate 创建会员卡所需的会员卡信息 https://www.youzanyun.com/apilist/structparam/request/CardCreate 13 | * @return 会员卡信息 14 | */ 15 | YouzanScrmCardCreateResult create(YouzanScrmCardCreateParams cardCreate); 16 | 17 | /** 18 | * 更新会员卡 19 | * 20 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.update 21 | * 22 | * @param cardUpdate 编辑会员卡所需的会员卡信息 https://www.youzanyun.com/apilist/structparam/request/CardUpdate 23 | * @return 操作结果 24 | */ 25 | Boolean update(YouzanScrmCardUpdateParams cardUpdate); 26 | 27 | /** 28 | * 商家删除会员卡 29 | * 30 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.delete 31 | * 32 | * @param alias 商家会员卡的唯一标识 33 | * @return 是否成功 34 | */ 35 | Boolean delete(String alias); 36 | 37 | /** 38 | * 商家禁用会员卡 39 | * 40 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.disable 41 | * 42 | * @param alias 商家会员卡的唯一标识 43 | * @return 是否成功 44 | */ 45 | Boolean disable(String alias); 46 | 47 | /** 48 | * 商家启用会员卡 49 | * 50 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.enable 51 | * 52 | * @param alias 商家会员卡的唯一标识 53 | * @return 是否成功 54 | */ 55 | Boolean enable(String alias); 56 | 57 | /** 58 | * 获取会员卡链接 59 | * 60 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.url.get 61 | * 62 | * @param alias 商家会员卡的唯一标识 63 | * @return 会员卡发卡链接 64 | */ 65 | String getURL(String alias); 66 | 67 | /** 68 | * 通过卡id获取卡详情 69 | * 70 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.get 71 | * 72 | * @param alias 商家会员卡的唯一标识 73 | * @return 会员卡信息 74 | */ 75 | YouzanScrmCardGetResult get(String alias); 76 | 77 | /** 78 | * 获取商家会员卡列表 79 | * 80 | * https://www.youzanyun.com/apilist/detail/group_scrm/crm_advanced/youzan.scrm.card.list 81 | * 82 | * @param page 页码 83 | * @return 商家会员卡列表 84 | */ 85 | YouzanScrmCardListResult list(Integer page); 86 | 87 | // todo 芋艿,到底要不要完整名,字段 88 | } 89 | 90 | 91 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/CouponConsumeAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpCouponConsumeFetchlogsGetResult; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpCouponConsumeGetResult; 5 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpCouponConsumeVerifylogsGetResult; 6 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanUmpCouponTakeResult; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * 优惠劵(码)使用 API 12 | */ 13 | public interface CouponConsumeAPI { 14 | 15 | /** 16 | * 发放优惠券优惠码 17 | * 18 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupon.take 19 | * 20 | * @param fansType 粉丝类型(自有粉丝: fans_type = 1) 21 | * @param fansId 【三选一】粉丝ID,与 fans_type 同时出现,如果没有写0 mobile/fans_id/open_user_id 三选一传入 22 | * @param openUserId 【三选一】三方用户ID mobile/fans_id/open_user_id 三选一传入 23 | * @param mobile 【三选一】手机号,如果没有则写 0 mobile/fans_id/open_user_id 三选一传入 24 | * @param id 优惠券(码)组编号 25 | * @return 发放优惠劵结果 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 26 | */ 27 | YouzanUmpCouponTakeResult take(Integer fansType, Integer fansId, String openUserId, String mobile, Integer id); 28 | 29 | /** 30 | * 对优惠券/优惠码进行核销操作 31 | * 32 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupon.consume.verify 33 | * 34 | * @param code 买家端的优惠券/优惠码核销码 35 | * @return 是否成功 36 | */ 37 | Boolean verify(String code); 38 | 39 | /** 40 | * 根据核销码获取优惠券/优惠码 41 | * 42 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupon.consume.get 43 | * 44 | * @param code 买家端的优惠券/优惠码核销码 45 | * @return 核销结构 {@link cn.iocoder.doraemon.umpgroup.coupon.entity.Coupon} 46 | */ 47 | YouzanUmpCouponConsumeGetResult get(String code); 48 | 49 | /** 50 | * 获取优惠券/优惠码领取记录 51 | * 52 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupon.consume.fetchlogs.get 53 | * 54 | * @param groupId 优惠劵(码)分组编号 55 | * @param startTakeTime 领取时间(开始时间) 56 | * @param endTakeTime 领取时间(结束时间) 57 | * @param pageNo 页码 58 | * @param pageSize 每页数量 59 | * @return 领取记录分页 + 领取总数 60 | */ 61 | YouzanUmpCouponConsumeFetchlogsGetResult getFetchLogs(Integer groupId, Date startTakeTime, Date endTakeTime, 62 | Integer pageNo, Integer pageSize); 63 | 64 | /** 65 | * 获取优惠券/优惠码核销记录 66 | * 67 | * https://www.youzanyun.com/apilist/detail/group_ump/coupon/youzan.ump.coupon.consume.verifylogs.get 68 | * 69 | * @param type 类型(优惠劵/优惠码) 70 | * @param pageNo 页码 71 | * @param pageSize 每页数量 72 | * @return 验证记录分页 73 | */ 74 | YouzanUmpCouponConsumeVerifylogsGetResult getVerifyLogs(Integer type, Integer pageNo, Integer pageSize); 75 | 76 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/TradeDeliverySelfFetchAddress.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery.entity; 2 | 3 | import java.util.Date; 4 | import java.util.List; 5 | 6 | /** 7 | * 交易买家上门自提点 8 | */ 9 | public class TradeDeliverySelfFetchAddress { 10 | 11 | /** 12 | * 时间范围 13 | */ 14 | public static class DateRange { 15 | 16 | /** 17 | * 开始时间。 18 | * 19 | * 格式为 HHdd ,例如 0730 20 | */ 21 | private Integer openTime; 22 | /** 23 | * 结束时间。 24 | * 25 | * 格式为 HHdd ,例如 2300 26 | */ 27 | private Integer closeTime; 28 | /** 29 | * 周几集合 30 | * 31 | * x 为 周x ,例如,1 = 周一 。 32 | */ 33 | private List weekdays; 34 | 35 | } 36 | 37 | /** 38 | * 自提点编号 39 | */ 40 | private Integer id; 41 | /** 42 | * 店铺编号 {@link cn.iocoder.doraemon.shopgroup.shop.entity.Shop#id} 43 | */ 44 | private Integer shopId; 45 | /** 46 | * 自提点名 47 | */ 48 | private String name; 49 | /** 50 | * 商家推荐(描述) 51 | */ 52 | private String description; 53 | /** 54 | * 自提点照片数组,以逗号分隔。 55 | */ 56 | private String images; 57 | /** 58 | * 联系电话 - 区号 59 | */ 60 | private String phone1; 61 | /** 62 | * 联系电话 - 电话或手机 63 | */ 64 | private String phone2; 65 | /** 66 | * 状态 67 | * 68 | * 1-正常 69 | * 2-删除 70 | */ 71 | private Integer status; 72 | /** 73 | * 创建时间 74 | */ 75 | private Date createTime; 76 | /** 77 | * 更新时间 78 | */ 79 | private Date updateTime; 80 | /** 81 | * 删除时间 82 | */ 83 | private Date deleteTime; 84 | 85 | // ========== 地点相关 BEGIN ========== 86 | /** 87 | * 地点编号 {@link cn.iocoder.doraemon.commongroup.entity.CommonRegion#id} 88 | * 89 | * 最细维度 90 | */ 91 | private Integer regionId; 92 | /** 93 | * 地址 94 | */ 95 | private String address; 96 | /** 97 | * 经度 98 | */ 99 | private Double lng; 100 | /** 101 | * 纬度 102 | */ 103 | private Double lat; 104 | 105 | // ========== 地点相关 END ========== 106 | 107 | /** 108 | * 是否作为门店接待 109 | */ 110 | private Boolean isStore; 111 | /** 112 | * 接待时间集合 113 | * 114 | * 使用 JSON 将 {@link DateRange}数组 格式化成字符串 115 | */ 116 | private String businessHoursAdvanceds; 117 | /** 118 | * 是否需要买家选择自提时间 119 | * 120 | * true 勾选后,买家下单选择上门自提,必须选择自提时间,卖家需要按约定时间备货。 121 | * false 不勾选,将会提示买家尽快到店自提 122 | */ 123 | private Boolean isOptionalSelfFetchTime; 124 | /** 125 | * 自提时间集合 126 | * 127 | * 使用 JSON 将 {@link DateRange}数组 格式化成字符串 128 | */ 129 | private String offlineBusinessHours; 130 | 131 | } 132 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/refund/entity/TradeRefund.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.refund.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 交易退款维权 7 | */ 8 | public class TradeRefund { 9 | 10 | /** 11 | * 编号 12 | * 13 | * 唯一 14 | */ 15 | private String id; 16 | /** 17 | * 店铺编号 {@link cn.iocoder.doraemon.shopgroup.shop.entity.Shop#id} 18 | */ 19 | private Integer shopId; 20 | /** 21 | * 交易编号 {@link cn.iocoder.doraemon.tradegroup.trade.entity.Trade#id} 22 | */ 23 | private String tid; 24 | /** 25 | * 交易明细编号 {@link cn.iocoder.doraemon.tradegroup.trade.entity.TradeOrder#id} 26 | */ 27 | private String oid; 28 | /** 29 | * 商品编号 {@link cn.iocoder.doraemon.tradegroup.trade.entity.TradeOrder#itemId} 30 | */ 31 | private Integer itemId; 32 | /** 33 | * 退款状态 34 | * 35 | * 1 - WAIT_SELLER_AGREE - 买家已经申请退款,等待卖家同意 36 | * 2 - WAIT_BUYER_RETURN_GOODS - 卖家已经同意退款,等待买家退货 37 | * 3 - WAIT_SELLER_CONFIRM_GOODS - 买家已经退货,等待卖家确认收货 38 | * 4 - SELLER_REFUSE_BUYER - 卖家拒绝退款 39 | * 5 - SELLER_REFUSE_CONFIRM_GOODS - 卖家不同意,未收到货 40 | * 10 - CLOSED - 退款关闭 41 | * 20 - SUCCESS - 退款成功 42 | */ 43 | private Integer status; 44 | /** 45 | * 客满介入状态 46 | * 47 | * 1 - 客满未介入 48 | * 2 - 客满介入中 49 | */ 50 | private Integer csStatus; 51 | /** 52 | * 是否退货 53 | * 54 | * false - 仅退款 55 | * true - 退货退款 56 | */ 57 | private Boolean returnItem; 58 | /** 59 | * 买家退款申请说明 60 | */ 61 | private String desc; 62 | /** 63 | * 是否签收货物 64 | * 65 | * false - 否 66 | * true - 是 67 | */ 68 | private Boolean signed; 69 | /** 70 | * 仅退款-未收到货申请原因 71 | * 11(质量问题) 72 | * 12(拍错/多拍/不喜欢) 73 | * 3(商品描述不符) 74 | * 14(假货), 15(商家发错货) 75 | * 16(商品破损/少件) 76 | * 17(其他) 77 | * 仅退款-已收到货申 78 | * 51(多买/买错/不想要) 79 | * 52(快递无记录) 80 | * 53(少货/空包裹) 81 | * 54(未按约定时间发货) 82 | * 55(快递一直未送达) 83 | * 56(其他) 84 | * 退货退款-申请原因 85 | * 101(商品破损/少件) 86 | * 102(商家发错货) 87 | * 103(商品描述不符) 88 | * 104(拍错/多拍/不喜欢) 89 | * 105(质量问题) 90 | * 107(其他) 91 | */ 92 | private Integer reasonType; 93 | /** 94 | * 申请退款的金额,单位:分。 95 | */ 96 | private Integer refundFee; 97 | /** 98 | * 申请退款人的手机号码 99 | */ 100 | private String mobile; 101 | /** 102 | * 图片举证数组,以逗号分隔 103 | */ 104 | private String images; 105 | /** 106 | * 退款申请时间 107 | */ 108 | private Date createTime; 109 | /** 110 | * 退款申请修改时间 111 | */ 112 | private Date updateTime; 113 | /** 114 | * 乐观锁版本号 115 | * 116 | * 解决并发修改,防止数据不一致。 117 | */ 118 | private Long version; 119 | 120 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/limitdiscount/entity/LimitDiscountActivity.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.limitdiscount.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 限制折扣活动 7 | */ 8 | public class LimitDiscountActivity { 9 | 10 | /** 11 | * 商品 VO 12 | */ 13 | public static class ItemVO { 14 | 15 | /** 16 | * 商品编号 17 | */ 18 | private Integer itemId; 19 | /** 20 | * 打折方式 21 | * 22 | * 2-打折 23 | * 3-减价 24 | */ 25 | private Integer discountType; 26 | /** 27 | * 当【打折】时,折扣,百分比。例如:75 折为 75 。 28 | * 当【减价】时,价格,单位:分。例如:8 分为 8 。 29 | */ 30 | private Integer discountValue; 31 | 32 | } 33 | 34 | /** 35 | * 编号,自增唯一 36 | */ 37 | private Integer id; 38 | /** 39 | * 店铺编号 40 | */ 41 | private Integer shopId; 42 | /** 43 | * 名称 44 | */ 45 | private String name; 46 | /** 47 | * 描述,2 到 5 字。 48 | */ 49 | private String description; 50 | /** 51 | * 创建时间 52 | */ 53 | private Date createTime; 54 | /** 55 | * 更新时间 56 | */ 57 | private Date updateTime; 58 | /** 59 | * 状态 60 | * 61 | * 1-未开始 62 | * 2-进行中 63 | * 3-已结束 64 | * 4-已删除 65 | */ 66 | private Integer status; 67 | /** 68 | * 结束类型 69 | * 70 | * 1-活动到期 71 | * 2-手动删除 72 | * 3-手动失效 73 | */ 74 | private Integer endType; 75 | /** 76 | * 活动到期时间 77 | */ 78 | private Date expireTime; 79 | /** 80 | * 设置为失效时间 81 | */ 82 | private Date invalidTime; 83 | /** 84 | * 删除时间 85 | */ 86 | private Date deleteTime; 87 | /** 88 | * 开始时间 89 | */ 90 | private Date startTime; 91 | /** 92 | * 结束时间 93 | */ 94 | private Date endTime; 95 | /** 96 | * 周期类型 97 | * 98 | * 0-none,无 99 | * 1-daily,每天 100 | * 2-monthly,每月 101 | * 3-weekly,每周 102 | */ 103 | private Integer periodType; 104 | /** 105 | * 周期开始时间,例如:0000 106 | * 107 | * 适用:所有周期类型 108 | */ 109 | private Integer periodStartTime; 110 | /** 111 | * 周期结束时间,例如:2359 112 | * 113 | * 适用:所有周期类型 114 | */ 115 | private Integer periodStartEnd; 116 | /** 117 | * 周期每月几号 118 | * 119 | * 适用:每月 120 | */ 121 | private Integer periodMonthDay; 122 | /** 123 | * 每周几集合,通过字节位存储周几 124 | * 125 | * 适用:每周 126 | */ 127 | private Integer periodWeekdays; 128 | /** 129 | * 限购设置类型 130 | * 131 | * 0-不限购 132 | * 1-每人每种商品限购件数 133 | * 2-每人每种商品前件数享受折扣 134 | */ 135 | private Integer quotaType; 136 | /** 137 | * 限购数量,根据 {@link #quotaType} 限制。 138 | */ 139 | private Integer quota; 140 | /** 141 | * 抹零方式 142 | * 143 | * 1-不抹零 144 | * 2-抹去角和分 145 | * 3-抹去分 146 | */ 147 | private Integer earseType; 148 | /** 149 | * 商品数组 150 | * 151 | * JSON 格式,数组,每个元素为 {@link ItemVO} 152 | */ 153 | private String items; 154 | 155 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateTitleElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 商品页面模板标题元素 VO 7 | */ 8 | public class ItemTemplateTitleElementVO extends AbstractItemTemplateElementVO { 9 | 10 | /** 11 | * 商品页面模板标题元素的选项 VO 12 | */ 13 | public static class SelectionElementVO extends AbstractItemTemplateElementVO { 14 | 15 | private static final String TYPE = "title_nav_selection"; 16 | 17 | // === 标题 === 18 | /** 19 | * 标题 20 | */ 21 | private String title; 22 | 23 | // === 链接 === 24 | /** 25 | * 链接类型 26 | */ 27 | private String linkType; 28 | /** 29 | * 链接地址 30 | */ 31 | private String linkURL; 32 | /** 33 | * 链接标题 34 | * 35 | * 例如链接类型为 goods ,对应商品标题 36 | */ 37 | private String linkTitle; 38 | /** 39 | * 链接编号 40 | * 41 | * 例如链接类型为 goods ,对应商品编号 42 | */ 43 | private String linkId; 44 | /** 45 | * 链接别名 46 | * 47 | * 例如链接类型为 goods ,对应商品别名 48 | */ 49 | private String alias; 50 | 51 | } 52 | 53 | /** 54 | * wx 链接,当 {@link #wxTitleLinkType} 为其他链接类型时使用 55 | */ 56 | public static class WxLinkVO { 57 | 58 | // === 链接 === 59 | /** 60 | * 链接类型 61 | */ 62 | private String linkType; 63 | /** 64 | * 链接地址 65 | */ 66 | private String linkURL; 67 | /** 68 | * 链接标题 69 | * 70 | * 例如链接类型为 goods ,对应商品标题 71 | */ 72 | private String linkTitle; 73 | /** 74 | * 链接编号 75 | * 76 | * 例如链接类型为 goods ,对应商品编号 77 | */ 78 | private String linkId; 79 | 80 | } 81 | 82 | private static final String TYPE = "title"; 83 | 84 | /** 85 | * 标题模板 86 | * 87 | * 1-传统样式 88 | * 使用 {@link #subEntrys} 字段 89 | * 2-模仿微信图文页样式 90 | * 使用 "wx_" 前缀的字段们 91 | */ 92 | private Integer titleTemplate; 93 | /** 94 | * 标题名 95 | */ 96 | private String title; 97 | /** 98 | * 副标题 99 | */ 100 | private String subTitile; 101 | /** 102 | * 展示方式 103 | * 104 | * 0-居左显示 105 | * 1-居中显示 106 | * 2-居右显示 107 | */ 108 | private Integer showMethod; 109 | /** 110 | * 背景色 111 | */ 112 | private String color; 113 | /** 114 | * 选项元素数组 115 | * 116 | * JSON 格式,数组,每个元素为 {@link SelectionElementVO} 117 | */ 118 | private String subEntrys; 119 | /** 120 | * wx 作者 121 | */ 122 | private String wxTitleAuthor; 123 | /** 124 | * wx 日期 125 | */ 126 | private Date wxTitleDate; 127 | /** 128 | * wx 链接标题 129 | */ 130 | private String wxTitleLink; 131 | /** 132 | * wx 标题链接类型 133 | * 134 | * 0-引导关注 135 | * 1-其他链接 136 | */ 137 | private Integer wxTitleLinkType; 138 | /** 139 | * wx 链接 140 | */ 141 | private WxLinkVO wxLink; 142 | 143 | } 144 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/meetreduce/entity/MeetReduceActivity.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.meetreduce.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 满减送活动 7 | */ 8 | public class MeetReduceActivity { 9 | 10 | /** 11 | * 优惠 VO 12 | */ 13 | public static class PreferentialVO { 14 | 15 | /** 16 | * 满足金额,单位:分 17 | */ 18 | private Integer meet; 19 | /** 20 | * 是否减现金,和 {@link #isDiscountRequired} 互斥 21 | */ 22 | private Boolean isCashRequired; 23 | /** 24 | * 减现金,单位:分 25 | */ 26 | private Integer cash; 27 | /** 28 | * 是否打折,和 {@link #isCashRequired} 互斥 29 | */ 30 | private Boolean isDiscountRequired; 31 | /** 32 | * 折扣,百分比。例如:75 折为 75 。 33 | */ 34 | private Integer discount; 35 | /** 36 | * 是否包邮 37 | */ 38 | private Boolean isPostage; 39 | /** 40 | * 是否送积分 41 | */ 42 | private Boolean isScoreRequired; 43 | /** 44 | * 积分 45 | */ 46 | private Integer score; 47 | /** 48 | * 是否送优惠劵(码) 49 | */ 50 | private Boolean isCouponRequired; 51 | /** 52 | * 优惠劵(码)分组编号 53 | */ 54 | private Integer couponGroupId; 55 | /** 56 | * 优惠劵(码)数量 57 | */ 58 | private Integer couponNum; 59 | /** 60 | * 是否送赠品 61 | */ 62 | private Boolean isPresentRequired; 63 | /** 64 | * 赠品编号 65 | */ 66 | private Integer presentId; 67 | 68 | } 69 | 70 | /** 71 | * 编号,自增唯一 72 | */ 73 | private Integer id; 74 | /** 75 | * 店铺编号 76 | */ 77 | private Integer shopId; 78 | /** 79 | * 名称 80 | */ 81 | private String name; 82 | /** 83 | * 创建时间 84 | */ 85 | private Date createTime; 86 | /** 87 | * 更新时间 88 | */ 89 | private Date updateTime; 90 | /** 91 | * 状态 92 | * 93 | * 1-未开始 94 | * 2-进行中 95 | * 3-已结束 96 | * 4-已删除 97 | */ 98 | private Integer status; 99 | /** 100 | * 结束类型 101 | * 102 | * 1-活动到期 103 | * 2-手动删除 104 | * 3-手动失效 105 | */ 106 | private Integer endType; 107 | /** 108 | * 活动到期时间 109 | */ 110 | private Date expireTime; 111 | /** 112 | * 设置为失效时间 113 | */ 114 | private Date invalidTime; 115 | /** 116 | * 删除时间 117 | */ 118 | private Date deleteTime; 119 | /** 120 | * 开始时间 121 | */ 122 | private Date startTime; 123 | /** 124 | * 结束时间 125 | */ 126 | private Date endTime; 127 | /** 128 | * 优惠数组 129 | * 130 | * JSON 格式,数组,每个元素为 {@link PreferentialVO} 131 | */ 132 | private String preferentials; 133 | /** 134 | * 可用范围的类型 135 | * 136 | * 1-部分(ALL):全部商品可用 137 | * 2-全部(PART):部分商品可用,或指定商品可用 138 | */ 139 | private Integer rangeType; 140 | /** 141 | * 指定可用商品列表,使用逗号分隔商品编号 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#id} 142 | */ 143 | private String rangeValues; 144 | 145 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/cart/TradeCartAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.cart; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.YouzanTradeCartListResult; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 购物车 API 9 | */ 10 | public interface TradeCartAPI { 11 | 12 | /** 13 | * 添加商品至购物车 14 | * 15 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_cart/youzan.trade.cart.add 16 | * 17 | * @param buyerId 买家编号 18 | * @param nobody 会话 key 19 | * @param shopId 店铺编号 20 | * @param itemId 商品编号 21 | * @param skuId 商品 SKU 编号 22 | * @param num 商品数量 23 | * @param message 购买留言 24 | * @param activityId 商品营销活动编号 25 | * @param activityType 商品营销活动类型 26 | * @param activityAlias TODO 商品活动别名 27 | * @param bizTracePointExt TODO 扩展字段 28 | * @return 是否成功 29 | */ 30 | Boolean add(Integer buyerId, String nobody, Integer shopId, 31 | Integer itemId, Integer skuId, Integer num, String message, 32 | Integer activityId, Integer activityType, String activityAlias, 33 | String bizTracePointExt); 34 | 35 | /** 36 | * 购物车更新商品数量 37 | * 38 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_cart/youzan.trade.cart.update 39 | * 40 | * @param buyerId 买家编号 41 | * @param nobody 会话 key 42 | * @param shopId 店铺编号 43 | * @param itemId 商品编号 44 | * @param skuId 商品 SKU 编号 45 | * @param num 商品数量 46 | * @return 是否成功 47 | */ 48 | Boolean update(Integer buyerId, String nobody, Integer shopId, 49 | Integer itemId, Integer skuId, Integer num); 50 | 51 | /** 52 | * 购物车删除商品 53 | * 54 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_cart/youzan.trade.cart.delete 55 | * 56 | * @param buyerId 买家编号 57 | * @param nobody 会话 key 58 | * @param shopId 店铺编号 59 | * @param itemList 商品列表信息 [{ 60 | * itemId: // 商品编号 61 | * skuId: // 商品 SKU 编号 62 | * }] 63 | * @return 是否成功 64 | */ 65 | Boolean delete(Integer buyerId, String nobody, Integer shopId, String itemList); 66 | 67 | /** 68 | * 清空购物车 69 | * 70 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_cart/youzan.trade.cart.empty 71 | * 72 | * @param buyerId 买家编号 73 | * @param nobody 会话 key 74 | * @param shopId 店铺编号 75 | * @return 是否成功 76 | */ 77 | Boolean deleteAll(Integer buyerId, String nobody, Integer shopId); 78 | 79 | /** 80 | * 查询用户在购物车中的商品数量 81 | * 82 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_cart/youzan.trade.cart.count 83 | * 84 | * @param buyerId 买家编号 85 | * @param nobody 会话 key 86 | * @param shopId 店铺编号 87 | * @return 商品数量 88 | */ 89 | Integer count(Integer buyerId, String nobody, Integer shopId); 90 | 91 | /** 92 | * 显示买家购物车中的商品列表 93 | * 94 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_cart/youzan.trade.cart.list 95 | * 96 | * @param buyerId 买家编号 97 | * @param nobody 会话 key 98 | * @param shopId 店铺编号 99 | * @return 购物车中商品列表信息 100 | */ 101 | List list(Integer buyerId, String nobody, Integer shopId); 102 | 103 | } 104 | 105 | // TODO 芋艿,多网点的影响。 -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/trade/entity/TradeOrder.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.trade.entity; 2 | 3 | /** 4 | * 交易明细。 5 | * 6 | * 交易下的每种商品生成一条交易明细记录。 7 | */ 8 | public class TradeOrder { 9 | 10 | // ========= 基础字段 BEGIN ========= 11 | 12 | /** 13 | * 交易明细编号。 14 | */ 15 | private Long id; 16 | /** 17 | * 交易编号。{@link Trade#id} 18 | */ 19 | private String tid; 20 | /** 21 | * 店铺编号 22 | */ 23 | private Integer shopId; 24 | /** 25 | * 交易明细主状态 26 | * 27 | * {@link Trade#status} 一致 28 | */ 29 | private Integer status; 30 | 31 | // ========= 基础字段 END ========= 32 | 33 | // ========= 商品信息 BEGIN ========= 34 | 35 | /** 36 | * 商品编号 37 | */ 38 | private Integer itemId; 39 | /** 40 | * 商品标题 41 | */ 42 | private String title; 43 | /** 44 | * 商品主图片地址 45 | */ 46 | private String picPath; 47 | /** 48 | * 商品类型。 49 | * 50 | * 0:自营; 51 | * 10:分销商品; 52 | */ 53 | private Long goodsType; 54 | /** 55 | * 商品类型 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#itemType} 56 | */ 57 | private Integer itemType; 58 | /** 59 | * Sku 编号 60 | */ 61 | private Integer skuId; 62 | /** 63 | * SKU的值,即:商品的规格。如:机身颜色:黑色;手机套餐:官方标配 64 | */ 65 | private String skuPropertiesName; 66 | /** 67 | * 商品价格。单位:分 68 | */ 69 | private Integer price; 70 | /** 71 | * 商品购买数量 72 | */ 73 | private Integer num; 74 | /** 75 | * 交易明细中买家留言的数据结构 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#messages} 76 | */ 77 | private String buyerMessages; 78 | /** 79 | * 商品快照编号 {@link cn.iocoder.doraemon.itemgroup.snapshot.entity.ItemSnapshot#id} 80 | */ 81 | private String snapshotId; 82 | 83 | // ========= 商品信息 END ========= 84 | 85 | // ======= 物流信息 BEGIN ======= 86 | 87 | /** 88 | * 是否允许发货 89 | */ 90 | private Boolean allowSend; 91 | /** 92 | * 是否已经发货 93 | */ 94 | private Boolean isSend; 95 | 96 | // ======= 物流信息 END ======= 97 | 98 | // ========= 退款维权 BEGIN ========= 99 | 100 | /** 101 | * 商品退款状态 102 | * 103 | * 0 - 无退款 104 | * 1 - 部分退款 105 | * 11 - 全部退款 106 | */ 107 | private Integer refundStatus; 108 | /** 109 | * 退款id 110 | */ 111 | private String refundId; 112 | 113 | // ========= 退款维权 END ========= 114 | 115 | // ========= 价格信息 BEGIN ========= 116 | 117 | /** 118 | * 商品总价(商品价格乘以数量的总金额)。单位:分 119 | */ 120 | private Integer totalFee; 121 | /** 122 | * 交易明细内的优惠金额。单位:分 123 | */ 124 | private Integer discountFee; 125 | /** 126 | * 实付金额。单位:分 127 | */ 128 | private Integer payment; 129 | /** 130 | * 退款金额。单位:分 131 | */ 132 | private Float refundedFee; 133 | 134 | // ========= 价格信息 END ========= 135 | 136 | // ========= 优惠信息 BEGIN ========= 137 | 138 | /** 139 | * 是否赠品 140 | * 141 | * true 赠品商品 142 | * false 普通商品 143 | */ 144 | private Boolean isPresent; 145 | // /** 146 | // * 交易明细中的优惠信息的数据结构 147 | // */ 148 | // private YouzanTradeGetResult.TradeOrderPromotion[] orderPromotionDetails; 149 | 150 | // ========= 优惠信息 END ========= 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | // TODO 芋艿,等分销 159 | // @JsonProperty(value = "fenxiao_price") 160 | // /** 161 | // * 商品在分销商那边的出售价格。精确到2位小数;单位:元。如果是采购单才有值,否则值为 0 162 | // */ 163 | // private Float fenxiaoPrice; 164 | // /** 165 | // * 商品在分销商那边的实付金额。精确到2位小数;单位:元。如果是采购单才有值,否则值为 0 166 | // */ 167 | // private Float fenxiaoPayment; 168 | } 169 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/vo/ItemTemplateCubeElementVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity.vo; 2 | 3 | /** 4 | * 商品页面模板魔方元素 VO 5 | */ 6 | public class ItemTemplateCubeElementVO extends AbstractItemTemplateElementVO { 7 | 8 | /** 9 | * 商品页面模板魔方元素的选项 VO 10 | */ 11 | public static class SelectionElementVO extends AbstractItemTemplateElementVO { 12 | 13 | private static final String TYPE = "cube_selection"; 14 | 15 | // === 坐标 === 16 | /** 17 | * x 坐标 18 | */ 19 | private Integer x; 20 | /** 21 | * y 坐标 22 | */ 23 | private Integer y; 24 | /** 25 | * 宽 26 | */ 27 | private Integer width; 28 | /** 29 | * 高 30 | */ 31 | private Integer height; 32 | 33 | // === 图片 === 34 | /** 35 | * 图片编号 36 | */ 37 | private Integer imageId; 38 | /** 39 | * 图片地址 40 | */ 41 | private String imageURL; 42 | /** 43 | * 图片缩略地址 44 | */ 45 | private String imageThumbURL; 46 | /** 47 | * 图片高度 48 | */ 49 | private Integer imageWidth; 50 | /** 51 | * 图片宽度 52 | */ 53 | private Integer imageHeight; 54 | 55 | // === 标题 === 56 | /** 57 | * 标题 58 | */ 59 | private String title; 60 | 61 | // === 链接 === 62 | /** 63 | * 链接类型 64 | */ 65 | private String linkType; 66 | /** 67 | * 链接地址 68 | */ 69 | private String linkURL; 70 | /** 71 | * 链接标题 72 | * 73 | * 例如链接类型为 goods ,对应商品标题 74 | */ 75 | private String linkTitle; 76 | /** 77 | * 链接编号 78 | * 79 | * 例如链接类型为 goods ,对应商品编号 80 | */ 81 | private String linkId; 82 | /** 83 | * 链接别名 84 | * 85 | * 例如链接类型为 goods ,对应商品别名 86 | */ 87 | private String alias; 88 | 89 | } 90 | 91 | private static final String TYPE = "cube2"; 92 | 93 | /** 94 | * 魔方高度 95 | */ 96 | private Integer layoutHeight; 97 | /** 98 | * 魔方宽度 99 | */ 100 | private Integer layoutWidth; 101 | /** 102 | * 选项元素数组 103 | * 104 | * JSON 格式,数组,每个元素为 {@link SelectionElementVO} 105 | */ 106 | private String subEntrys; 107 | /** 108 | * 生成的魔方的 HTML 内容 109 | * 110 | * 例如: 111 | * 112 | * 113 | * 114 | * 115 | * 116 | * 117 | * 118 | * 119 | * 120 | * 121 | * 122 | * 123 | * 124 | * 125 | * 126 | * 127 | * 128 | * 129 | * 130 | */ 131 | private String tableContent; 132 | 133 | } 134 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/category/entity/ItemTag.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.category.entity; 2 | 3 | import cn.iocoder.doraemon.itemgroup.item.entity.vo.AbstractItemTemplateElementVO; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * Item 分组 9 | */ 10 | public class ItemTag { 11 | 12 | /** 13 | * 配置元素 VO 14 | */ 15 | public static class ConfigElementVO extends AbstractItemTemplateElementVO { 16 | 17 | private static final String TYPE = "config"; 18 | 19 | /** 20 | * 分组标题 21 | */ 22 | private String title; 23 | /** 24 | * 是否页面上显示商品分组名称 25 | * 26 | * 0-不显示 27 | * 1-显示 28 | */ 29 | private Integer showTagTitle; 30 | /** 31 | * 第一优先级 32 | * 33 | * 0-序号越大越靠前 34 | * 3-最热的排在前面 35 | */ 36 | private Integer firstPriority; 37 | /** 38 | * 第二优先级 39 | * 40 | * 1-创建时间越晚越靠前 41 | * 2-创建时间越早越靠前 42 | * 3-最热的排在前面 43 | */ 44 | private Integer secondPriority; 45 | /** 46 | * 富文本编辑器 47 | */ 48 | private String content; 49 | /** 50 | * 列表样式 51 | * 52 | * 0-大图 53 | * 1-小图 54 | * 2-一大两小 55 | * 3-详细列表 56 | */ 57 | private Integer size; 58 | /** 59 | * 商品样式 60 | * 61 | * 0-卡片样式 62 | * 1-瀑布流 63 | * 2-极简样式 64 | * 3-促销 65 | */ 66 | private Integer sizeType; 67 | /** 68 | * 是否显示购买按钮 69 | * 70 | * 0-不显示 71 | * 1-显示 72 | */ 73 | private Integer buyBtn; 74 | /** 75 | * 显示购买按钮的样式 76 | * 77 | * 1-样式1 78 | * 2-样式2 79 | * 3-样式3 80 | * 4-样式4 81 | */ 82 | private Integer buyBtnType; 83 | /** 84 | * 显示购物车图标 85 | * 86 | * 0-不显示 87 | * 1-显示 88 | */ 89 | private Integer cart; 90 | /** 91 | * 是否显示商品标题 92 | * 93 | * 0-不显示 94 | * 1-显示 95 | */ 96 | private Integer showTitle; 97 | /** 98 | * 是否显示商品简介 99 | * 100 | * 0-不显示 101 | * 1-显示 102 | */ 103 | private Integer showSubTitle; 104 | /** 105 | * 是否显示商品价格 106 | * 107 | * 0-不显示 108 | * 1-显示 109 | */ 110 | private Integer price; 111 | 112 | } 113 | 114 | /** 115 | * 编号,自增 116 | */ 117 | private Integer id; 118 | /** 119 | * 别名 120 | * 121 | * 系统生成,作为唯一标识。例如,2fpa62tbmsl9h 122 | */ 123 | private String alias; 124 | /** 125 | * 店铺编号 126 | */ 127 | private Integer shopId; 128 | /** 129 | * 名称 130 | */ 131 | private String title; 132 | /** 133 | * 状态 134 | * 1-正常 135 | * 2-删除 136 | */ 137 | private Integer status; 138 | /** 139 | * 默认类型 140 | * 141 | * 0-商家自定义 142 | * 1-其他 143 | * 2-最新商品 https://help.youzan.com/qa#/menu/2149/detail/1185?_k=825jlx 144 | * 3-最热商品 https://help.youzan.com/qa#/menu/2149/detail/1185?_k=825jlx 145 | * 4-列表中隐藏 146 | */ 147 | private Integer isDefault; 148 | /** 149 | * 商品数量 150 | */ 151 | private Integer itemCount; 152 | /** 153 | * 模板元素数组 154 | * 155 | * JSON 格式,数组,每个元素为 {@link cn.iocoder.doraemon.itemgroup.item.entity.vo.AbstractItemTemplateElementVO} 的实现类字符串 156 | */ 157 | private String data; 158 | /** 159 | * 创建时间 160 | */ 161 | private Date createTime; 162 | /** 163 | * 更新时间 164 | */ 165 | private Date updateTime; 166 | /** 167 | * 删除时间 168 | */ 169 | private Date deleteTime; 170 | 171 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/TradeDeliveryLocalConfig.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.delivery.entity; 2 | 3 | import java.util.Date; 4 | import java.util.List; 5 | 6 | /** 7 | * 交易发货同城配送配置 8 | */ 9 | public class TradeDeliveryLocalConfig { 10 | 11 | /** 12 | * 配送区域设置 13 | */ 14 | public static class AreaModel { 15 | 16 | /** 17 | * 半径区域,以某个坐标点为中心的圆。 18 | */ 19 | public static class CircleAreaModel { 20 | 21 | /** 22 | * 经度 23 | */ 24 | private Double lng; 25 | /** 26 | * 纬度 27 | */ 28 | private Double lat; 29 | /** 30 | * 半径 31 | */ 32 | private Integer scope; 33 | 34 | } 35 | 36 | /** 37 | * 形成自定义形状的坐标点。 38 | */ 39 | public static class PointModel { 40 | 41 | /** 42 | * 经度 43 | */ 44 | private Double lng; 45 | /** 46 | * 纬度 47 | */ 48 | private Double lat; 49 | 50 | } 51 | 52 | /** 53 | * 类型 54 | * 55 | * 1-半径园 {@link CircleAreaModel} 56 | * 2-自定义形状 {@link PointModel} 57 | * 3-简易版 58 | */ 59 | private Integer type; 60 | /** 61 | * 起步价。单位:分。 62 | * 63 | * 起送价:是优惠券/码和满减优惠抵扣前的商品金额,运费不计入起送价。 64 | */ 65 | private Integer startFee; 66 | /** 67 | * 配送价。单位:分。 68 | */ 69 | private Integer fixedFee; 70 | 71 | // ======== 类型【1】BEGIN ======== 72 | /** 73 | * 半径区域,以某个坐标点为中心。 74 | */ 75 | private CircleAreaModel circleAreaModel; 76 | // ======== 类型【1】END ======== 77 | 78 | // ======== 类型【2】BEGIN ======== 79 | /** 80 | * 构成自定义形状的坐标点集合。 81 | * 82 | * 实际该字段包在 polygon_area_model 里,此处笔者为了减少嵌套层级。胖友实际在用,建议还是套在 polygon_area_model 里。 83 | */ 84 | private List pointModels; 85 | // ======== 类型【1】END ======== 86 | 87 | // ======== 类型【3】BEGIN ======== 88 | /** 89 | * 配送范围介绍 90 | */ 91 | private String desc; 92 | /** 93 | * 配送范围图片 94 | */ 95 | private String attachPic; 96 | // ======== 类型【3】END ======== 97 | } 98 | 99 | /** 100 | * 时间范围 101 | */ 102 | public static class DateRange { 103 | 104 | /** 105 | * 开始时间。 106 | * 107 | * 格式为 HHdd ,例如 0730 108 | */ 109 | private Integer openTime; 110 | /** 111 | * 结束时间。 112 | * 113 | * 格式为 HHdd ,例如 2300 114 | */ 115 | private Integer closeTime; 116 | /** 117 | * 周期集合。 118 | * 119 | * 注意,通过位进行存储。 120 | */ 121 | private Integer weekdays; 122 | 123 | } 124 | 125 | /** 126 | * 店铺编号 {@link cn.iocoder.doraemon.shopgroup.shop.entity.Shop#id} 127 | */ 128 | private Integer id; 129 | /** 130 | * 创建时间 131 | */ 132 | private Date createTime; 133 | /** 134 | * 更新时间 135 | */ 136 | private Date updateTime; 137 | /** 138 | * 配送区域类型 139 | * 140 | * 1- 简易版。 141 | * 没有超区校校验,适合配送范围内地图信息不完善的地区,如新开发区、欠发达地区等。 142 | * 2- 不同区域不同配送费。 143 | */ 144 | private Integer editionType; 145 | /** 146 | * 配送区域设置数组 147 | * 148 | * 使用 JSON 将 {@link AreaModel}数组 格式化成字符串 149 | */ 150 | private String areaModels; 151 | /** 152 | * 是否开启定时达 153 | */ 154 | private Boolean isInTime; 155 | /** 156 | * 配送时间集合 157 | * 158 | * 使用 JSON 将 {@link DateRange}数组 格式化成字符串 159 | */ 160 | private String timeBuckets; 161 | /** 162 | * 时段细分类型 163 | * 164 | * 1-天 165 | * 2-上午下午晚上(12:00和18:00为分界点) 166 | * 3-小时 167 | * 4-半小时 168 | */ 169 | private Integer timeSpanType; 170 | /** 171 | * 最小可预约时间提前时间,单位:{@link #aheadMinType} 172 | */ 173 | private Integer aheadMin; 174 | /** 175 | * 最小可预约时间提前时间单位 176 | * 177 | * 0-无需提前 178 | * 1-天(为自然天,如:提前1天,则不管是凌晨1点还是晚上23点,都只能下明天以后的订单) 179 | * 2-小时 180 | * 3-分钟 181 | */ 182 | private Integer aheadMinType; 183 | /** 184 | * 最大可预约时间提前时间,单位:天。 185 | * 186 | * 其中,0 为仅限冬天。 187 | */ 188 | private Integer aheadMax; 189 | 190 | } 191 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/entity/Item.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 商品 7 | */ 8 | public class Item { 9 | 10 | /** 11 | * 编号 12 | */ 13 | private Integer id; 14 | /** 15 | * 别名 16 | * 17 | * 系统生成,作为唯一标识。例如,2fpa62tbmsl9h 18 | */ 19 | private String alias; 20 | /** 21 | * 店铺编号 22 | */ 23 | private Integer shopId; 24 | /** 25 | * 创建时间 26 | */ 27 | private Date createTime; 28 | /** 29 | * 更新时间 30 | */ 31 | private Date updateTime; 32 | /** 33 | * 状态 34 | * 35 | * 1-正常 36 | * 2-删除 37 | */ 38 | private Integer status; 39 | 40 | // ========== 基本信息 BEGIN ========== 41 | 42 | /** 43 | * 商品标题 44 | * 45 | * 不能超过100字,受违禁词控制 46 | */ 47 | private String title; 48 | /** 49 | * 副标题,分享链接时显示 50 | */ 51 | private String summary; 52 | /** 53 | * 商品分类的叶子类目编号 54 | * 55 | * 有赞——店铺主营类目和商品类目对应表:https://bbs.youzan.com/forum.php?mod=viewthread&tid=25252 56 | */ 57 | private Integer cid; 58 | /** 59 | * 商品主图地址 60 | * 61 | * 数组,以逗号分隔 62 | * 63 | * 建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张 64 | */ 65 | private String picURLs; 66 | /** 67 | * 商品类型 68 | * 69 | * 0:普通商品(物流发货) 70 | * 3:UMP降价拍 71 | * 5:外卖商品 72 | * 10:分销商品 73 | * 20:会员卡商品 74 | * 21:礼品卡商品 75 | * 22:团购券 76 | * 25:批发商品 77 | * 30:收银台商品 78 | * 31:知识付费商品 79 | * 35:酒店商品(无需物流) 80 | * 40:美业商品 81 | * 60:虚拟商品(无需物流) 82 | * 61:电子卡券(无需物流) 83 | */ 84 | private Integer itemType; 85 | /** 86 | * 商品类型 87 | * 88 | * 0:自营商品 89 | * 10:分销商品 90 | */ 91 | private Integer goodsType; 92 | 93 | // ========== 基本信息 END ========== 94 | 95 | // ========== 价格库存 BEGIN ========== 96 | 97 | /** 98 | * 价格,单位分 99 | */ 100 | private Integer price; 101 | /** 102 | * 商品重量,没有SKU时用 103 | */ 104 | private Double itemWeight; 105 | /** 106 | * 商品货号(商家为商品设置的外部编号) 107 | */ 108 | private String itemNo; 109 | /** 110 | * 总库存 111 | * 112 | * 基于 sku 的库存数量累加 113 | */ 114 | private Integer quantity; 115 | /** 116 | * 总销量 117 | */ 118 | private Integer soldNum; 119 | /** 120 | * 是否隐藏商品库存。在商品展示时不显示商品的库存。 121 | * 122 | * 0 - 显示库存(默认) 123 | * 1 - 不显示库存 124 | */ 125 | private Integer hideStock; 126 | /** 127 | * 商品划线价格,可以自定义。例如 促销价:888 128 | * 129 | * 商品没有优惠的情况下,划线价在商品详情会以划线形式显示。 130 | */ 131 | private Integer originPrice; 132 | /** 133 | * 是否参加会员折扣。 134 | * 135 | * 1 - 参加会员折扣(默认) 136 | * 0 - 不参加会员折扣 137 | */ 138 | private Integer joinLevelDiscount; 139 | 140 | // ========== 价格库存 END ========== 141 | 142 | // ========== 运费信息 BEGIN ========== 143 | /** 144 | * 运费类型 145 | * 146 | * 1-统一运费 147 | * 2-运费模板 148 | */ 149 | private Integer postType; 150 | /** 151 | * 运费,单位分 152 | */ 153 | private Integer postFee; 154 | /** 155 | * 运费模版id 156 | */ 157 | private Integer deliveryTemplateId; 158 | // ========== 运费信息 END ========== 159 | 160 | // ========== 其他信息 BEGIN ========== 161 | 162 | /** 163 | * 是否上架商品。 164 | * 165 | * true 为已上架 166 | * false 为已下架 167 | */ 168 | private Boolean isListing; 169 | /** 170 | * 排序字段 171 | */ 172 | private Integer order; 173 | /** 174 | * 开始出售时间。 175 | * 176 | * 没设置则为空 177 | */ 178 | private Date autoListingTime; 179 | /** 180 | * 商品是否锁定。TODO 芋艿,哪里使用 181 | * 182 | * true 为已锁定 183 | * false 为未锁定 184 | */ 185 | private Boolean isLock; 186 | /** 187 | * 留言表单数组配置 188 | * 189 | * JSON 字符串 [{ 190 | * name: // 表单名,String 191 | * required: // 是否必填,Integer,1-必填;0-选填 192 | * type: // 表单类型,String,枚举:文本格式/数字格式/邮件/日期/时间/身份证号/图片 193 | * multiple: // 是否多行,Integer,1-多行,0-单行 194 | * datetime:// 是否包含日期,用于 `type=时间` 195 | * }] 196 | */ 197 | private String messages; 198 | 199 | // ========== 其他信息 END ========== 200 | 201 | /** 202 | * 商品快照编号 {@link cn.iocoder.doraemon.itemgroup.snapshot.entity.ItemSnapshot#id} 203 | */ 204 | private String snapshotId; 205 | /** 206 | * 是否有预售 207 | */ 208 | private Boolean etdStatus; 209 | /** 210 | * 是否设置商品购买权限 211 | */ 212 | private Boolean purchaseRightStatus; 213 | 214 | 215 | 216 | // TODO 跳转到其他网站购买 217 | 218 | // TODO 芋艿,ItemVirtualOpenModel 219 | } 220 | // TODO points_price -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/trade/TradeAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.trade; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.*; 4 | 5 | /** 6 | * 交易 API 7 | */ 8 | public interface TradeAPI { 9 | 10 | // ======== 买家 BEGIN ======== 11 | 12 | /** 13 | * 下单入口,获得结算页链接 14 | * 15 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_bill/youzan.trade.bill.good.url.get 16 | * 17 | * @param params 单商品相关参数 18 | * @return 结算页链接 19 | */ 20 | YouzanTradeBillGoodUrlGetResult getBillItemURL(YouzanTradeBillGoodUrlGetParams params); 21 | 22 | /** 23 | * 多商品下单入口,获得结算页链接 24 | * 25 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_bill/youzan.trade.bill.goods.url.get 26 | * 27 | * @param params 多商品相关参数 28 | * @return 结算页链接 29 | */ 30 | YouzanTradeBillGoodsUrlGetResult getBillItemsURL(YouzanTradeBillGoodsUrlGetParams params); 31 | 32 | /** 33 | * 买家取消订单 34 | * 35 | * @param tid 交易编号 36 | * @return 是否成功 37 | */ 38 | Boolean updateClose(String tid); 39 | 40 | /** 41 | * 订单延长收货接口 42 | * 43 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_trade/youzan.trade.later.receive.update 44 | * 45 | * @param tid 交易编号 46 | * @return 是否成功 47 | */ 48 | Boolean updateReciveLater(String tid); 49 | 50 | /** 51 | * 买家确认收货接口 52 | * 53 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_trade/youzan.trade.confirm.receive.update 54 | * 55 | * @param tid 交易编号 56 | * @return 是否成功 57 | */ 58 | Boolean updateReciveConfirm(String tid); 59 | 60 | // ======== 卖家 BEGIN ======== 61 | 62 | /** 63 | * 订单标星接口 64 | * 65 | * https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trade.get 66 | * 67 | * @param tid 交易订单号 68 | * @param withChilds 是否需要获取子订单。例如送礼订单,会存在子订单。 69 | * @param subTradePageNo 指定获取子交易的第几页,不传则获取全部 70 | * @param subTradePageSize 指定获取子交易的第几页,不传则获取全部 71 | * @param fields 指到需要返回的交易对象字段,如tid,title,receiver_city等 72 | * @return 交易详情 73 | */ 74 | YouzanTradeGetResult get(String tid, Boolean withChilds, 75 | Integer subTradePageNo, Integer subTradePageSize, String[] fields); 76 | 77 | /** 78 | * 查询卖家已卖出的交易列表 79 | * 80 | * https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trades.sold.get 81 | * 82 | * @param params 筛选参数 83 | * @return 交易列表 84 | */ 85 | YouzanTradesSoldGetResult list(YouzanTradesSoldGetParams params); 86 | 87 | /** 88 | * 订单标星接口 89 | * 90 | * https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trade.star.update 91 | * 92 | * @param tid 交易编号 93 | * @param star 等级 1-5 94 | * @return 是否成功 95 | */ 96 | Boolean updateStar(String tid, Integer star); 97 | 98 | /** 99 | * 增加/修改订单备注 100 | * 101 | * https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trade.memo.update 102 | * 103 | * @param tid 交易编号 104 | * @param memo 订单备注 105 | * @param star 等级 1-5 106 | * @return 是否成功 107 | */ 108 | Boolean updateMemo(String tid, String memo, Integer star); 109 | 110 | /** 111 | * 【卖家使用】买家下单后未支付的情况下卖家关闭订单,在买家付款后该接口失效 112 | * 113 | * https://open.youzan.com/api/oauthentry/youzan.trade/3.0.0/close 114 | * 115 | * @param tid 交易编号 116 | * @param closeType 订单备注 117 | * @param closeReason 等级 1-5 118 | * @return 是否成功 119 | */ 120 | Boolean updateClose(String tid, Integer closeType, Integer closeReason); 121 | 122 | /** 123 | * 订单改价 124 | * 125 | * https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trade.price.update 126 | * 127 | * @param tid 交易编号 128 | * @param priceChange 价格增减(单位:分) 129 | * @param postFee 邮费价格(单位:分) 130 | * @param isAllowPreference 改价后允许是否允许买家再使用其他优惠。TODO 芋艿,目前暂未找到该参数的场景 131 | * @return 是否成功 132 | */ 133 | Boolean updatePrice(String tid, Integer priceChange, Integer postFee, Boolean isAllowPreference); 134 | 135 | /** 136 | * 根据第三方的ua和user_id获取交易订单列表 137 | * 138 | * https://open.youzan.com/api/oauthentry/youzan.trades.sold.outer/3.0.0/get 139 | * 140 | * @param params 筛选参数。三方用户 user_id 必填 141 | * @return 交易列表 142 | */ 143 | YouzanTradesSoldOuterGetResult listByOutUserId(YouzanTradesSoldOuterGetParams params); 144 | 145 | // TODO 芋艿,获取电子卡券信息 https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trade.virtualticket.get 146 | 147 | // TODO 芋艿,获取到店自提订单信息 https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trade.selffetchcode.get 148 | 149 | // TODO 芋艿,微信支付-自有订单标记退款 https://www.youzanyun.com/apilist/detail/group_trade/trade/youzan.trade.sign.item.close 150 | 151 | } 152 | -------------------------------------------------------------------------------- /libs/README.md: -------------------------------------------------------------------------------- 1 | ## 介绍 2 | + 有赞开放平台Java版本的SDK,v2.0.2 3 | 4 | ## 版本历史 5 | + 1.0.0-beta 第一个测试版 6 | + 1.0.1-beta 修复多个bug测试版 7 | + 2.0.0 全新版,更加完善的调用,不向前兼容老版本 8 | + 2.0.1 增加非模型化调用execute方法,兼容2.0.0版本 9 | + 2.0.2 增加获取token的操作,向下兼容2.0.x版本 10 | 11 | ## 设计思想 12 | + 所有的开放平台接口均实现了模型化(除非常久远的历史接口) 13 | + 所有的接口遵循API、Params和Result模式,即API、入参和出参,API上绑定params后交由client执行后返回result,例如:youzan.item.create 3.0.0这个API,API模型为YouzanItemCreate(放在了v3_0_0包下),入参为YouzanItemCreateParams,出参为YouzanItemCreateResult 14 | + 2.0.1版本后增加非模型化调用,但核心思想仍然是将用户参数转为模型调用 15 | 16 | ## 环境 17 | 18 | ``` 19 | jre(Java运行时环境) >= 6(强烈建议使用jre 7+) 20 | 三方库依赖: guava 19.0、apache http client 4.5.2等 21 | ``` 22 | 23 | ## 常见问题 24 | + 引用jar后出现"No Such Method"或"No Class Def Found Error"异常串,说明jar包冲突了,请自行google解决 25 | 26 | ## 使用 27 | ### 1. 解压缩zip文件,获得一个jar包和sources.jar文件 28 | + jar包是核心逻辑实现的包 29 | + sources是源码文件,可以引用到项目中查看该jar对应的源码 30 | 31 | ### 2. 引用包 32 | #### 2.1 方法1: 手动引用jar到项目(可以将sources.jar文件附带上,便于查看源码) 33 | #### 2.2 方法2: 本地mvn install到local仓库,并在pom中引用该依赖 34 | #### 2.3 方法3:将该jar发布到自己公司仓库,并在pom中依赖 35 | 36 | ## 如何使用?(参考demo.java) 37 | ### 调用kdt.item.add接口 38 | 39 | ``` 40 | YZClient client = new DefaultYZClient(new Token("$token")); 41 | 42 | YouzanItemCreateParams youzanItemCreateParams = new YouzanItemCreateParams(); 43 | youzanItemCreateParams.setTitle("XXX");//商品名 44 | youzanItemCreateParams.setPrice(258.0f); //价格 45 | youzanItemCreateParams.setPostFee(0.0f); //运费 46 | youzanItemCreateParams.setQuantity("58"); 47 | youzanItemCreateParams.setOuterId("119149"); 48 | youzanItemCreateParams.setSkuOuterIds("001,002,003,004,005,006"); 49 | youzanItemCreateParams.setSkuPrices("258.00,258.00,258.00,258.00,258.00,258.00"); 50 | youzanItemCreateParams.setSkuProperties("颜色:黑色;规格:L,颜色:黑色;规格:XL,颜色:黑色;规格:XXL,颜色:浅蓝色;规格:L,颜色:浅蓝色;规格:XL,颜色:浅蓝色;规格:XXL"); 51 | youzanItemCreateParams.setSkuQuantities("58,74,7,114,60,55"); 52 | youzanItemCreateParams.setHideQuantity(1L); 53 | youzanItemCreateParams.setBuyQuota(20L); 54 | youzanItemCreateParams.setCid(6000000L); 55 | youzanItemCreateParams.setIsVirtual(0L); 56 | youzanItemCreateParams.setOriginPrice(""); 57 | 58 | youzanItemCreateParams.setDesc("desc"); 59 | 60 | ByteWrapper[] byteWrappersAdd = new ByteWrapper[1]; 61 | ByteWrapper byteWrapper = new ByteWrapper("/Users/xx/Desktop/thumb_up_normal.png"); 62 | byteWrappersAdd[1] = byteWrapper; 63 | 64 | youzanItemCreateParams.setImages(byteWrappersAdd); 65 | 66 | YouzanItemCreate youzanItemCreate = new YouzanItemCreate(youzanItemCreateParams); 67 | YouzanItemCreateResult result = client.invoke(youzanItemCreate); 68 | 69 | assertTrue(result.getItem().getTitle().equals(youzanItemCreateParams.getTitle())); 70 | 71 | ``` 72 | 73 | ### 调用kdt.shop.basic.get接口 74 | 75 | ``` 76 | YZClient client = new DefaultYZClient(new Sign("$app_id", "$app_secret")); 77 | YouzanShopBasicGetParams youzanShopBasicGetParams = new YouzanShopBasicGetParams(); 78 | YouzanShopBasicGet youzanShopBasicGet = new YouzanShopBasicGet(youzanShopBasicGetParams); 79 | YouzanShopBasicGetResult youzanShopBasicGetResult = client.invoke(youzanShopBasicGet); 80 | assertEquals(youzanShopBasicGetResult.getName(), "我的店铺"); 81 | ``` 82 | 83 | ### 非模型化调用方式 84 | ``` 85 | Map params = Maps.newHashMap(); 86 | params.put("title", "测试添加商品201888"); 87 | params.put("price", 200); 88 | params.put("post_fee", 11); 89 | 90 | Multimap fileParams = ArrayListMultimap.create(); 91 | fileParams.put("images[]", new ByteWrapper("/Users/xx/Desktop/thumb_up_normal.png")); 92 | // youzan.item.create已经改版,目前不支持直接传图片,详情参考有赞云API文档进行调用,这里只是演示怎么传参 93 | String result = client.execute("youzan.item.create", "3.0.0", "POST", params, fileParams); 94 | // String result = client.execute("youzan.items.onsale.get", "3.0.0", "GET", null, null); 95 | 96 | System.out.println(result); 97 | ``` 98 | 99 | ### 获取工具型token 100 | ``` 101 | // 先获取到code 102 | AuthorizationCode authorizationCode = (AuthorizationCode) OAuthFactory.create(OAuthType.TOOL_TOKEN, new OAuthContext("clientId", "clientSecret", "redirectUrl", null, null)); 103 | authorizationCode.getCode(); 104 | 105 | // 再获取token 106 | OAuth oauth = OAuthFactory.create(OAuthType.TOOL_TOKEN, new OAuthContext("clientId", "clientSecret", "redirectUrl", null, "code")); 107 | System.out.println(JsonUtils.toJson(oauth.getToken())); 108 | ``` 109 | 110 | ### 根据refresh token获取token 111 | ``` 112 | OAuth oauth = OAuthFactory.create(OAuthType.TOOL_REFRESH_TOKEN, new OAuthContext("clientId", "clientSecret", "refreshToken")); 113 | System.out.println(JsonUtils.toJson(oauth.getToken())); 114 | ``` 115 | 116 | ### 获取自用型token 117 | ``` 118 | OAuth oauth = OAuthFactory.create(OAuthType.SELF, new OAuthContext("clientId", "clientSecret", 111L)); 119 | System.out.println(JsonUtils.toJson(oauth.getToken())); 120 | ``` 121 | 122 | ### 获取平台型token 123 | ``` 124 | OAuth oauth = OAuthFactory.create(OAuthType.PLATFORM, new OAuthContext("clientId", "clientSecret", 111L)); 125 | System.out.println(JsonUtils.toJson(oauth.getToken())); 126 | ``` -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/itemgroup/item/ItemAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.itemgroup.item; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.api.YouzanItemsCustomGet; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.*; 5 | 6 | 7 | public interface ItemAPI { 8 | 9 | /** 10 | * 新增商品 11 | * 12 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.item.create 13 | * 14 | * @param params 新增商品的信息 15 | * @return 创建成功后的商品详情 16 | */ 17 | YouzanItemCreateResult.ItemDetailOpenModel create(YouzanItemCreateParams params); 18 | 19 | /** 20 | * 更新商品 21 | * 22 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.item.update 23 | * 24 | * @param params 更新商品的信息 25 | * @return { 26 | * item_id: // 被更新的商品id 27 | * is_success: // 是否操作成功,成功为true 28 | * } 29 | */ 30 | YouzanItemUpdateResult update(YouzanItemUpdateParams params); 31 | 32 | /** 33 | * 批量上架商品 34 | * 35 | * https://open.youzan.com/api/oauthentry/youzan.items.update/3.0.0/listing 36 | * 37 | * @param itemIds 商品数字编号数组 38 | * @return 是否成功 39 | */ 40 | Boolean updateListing(Integer[] itemIds); 41 | 42 | /** 43 | * 批量下架商品 44 | * 45 | * https://open.youzan.com/api/oauthentry/youzan.items.update/3.0.0/listing 46 | * 47 | * @param itemIds 商品数字编号数组 48 | * @return 是否成功 49 | */ 50 | Boolean updatedeListing(Integer[] itemIds); 51 | 52 | /** 53 | * 上架商品 54 | * 55 | * https://open.youzan.com/api/oauthentry/youzan.item.update/3.0.0/listing 56 | * 57 | * @param itemId 商品数字编号 58 | * @return 是否成功 59 | */ 60 | Boolean updateListing(Integer itemId); 61 | 62 | /** 63 | * 下架商品 64 | * 65 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.item.update.delisting 66 | * 67 | * @param itemId 商品数字编号 68 | * @return 是否成功 69 | */ 70 | Boolean updateDelisting(Integer itemId); 71 | 72 | /** 73 | * 根据商品Id删除商品 74 | * 75 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.item.delete 76 | * 77 | * @param itemId 商品Id 78 | * @return { 79 | * item_id: // 被删除的商品id 80 | * is_success: // 是否操作成功,成功为true 81 | * } 82 | */ 83 | YouzanItemDeleteResult delete(Integer itemId); 84 | 85 | /** 86 | * 获取单个商品信息 87 | * 88 | * @param itemId 商品Id 89 | * @param alias 商品别名 90 | * @return 商品信息 91 | */ 92 | YouzanItemGetResult.ItemDetailOpenModel get(Integer itemId, String alias); 93 | 94 | /** 95 | * 根据商家编码查询商品 96 | * 97 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.items.custom.get 98 | * 99 | * @param itemNo 商家编码 100 | * @return { 101 | * items: // ItemListOpenModel[],搜索到的商品列表 102 | * count:// 商品总数量 103 | * } 104 | */ 105 | YouzanItemsCustomGet get(String itemNo); 106 | 107 | /** 108 | * 分页查询商品标准列表,主要是根据商品类型和商品编码 109 | * 110 | * @param itemType 商品类型 111 | * @param codes 商品编码列表,必传。TODO 芋艿,一直搜不出数据啊!! 112 | * @return { 113 | * count: // 查询到的商品标准数量 114 | * item_standards: // ItemStandardOpenModel[] 查询到的商品标准列表 115 | * } 116 | */ 117 | YouzanItemStandardSearchResult search(Integer itemType, String[] codes); 118 | 119 | /** 120 | * 获取仓库中的商品列表 121 | * 122 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.items.inventory.get 123 | * 124 | * @param updateTimeStart 商品起始更新时间,单位ms 125 | * @param updateTimeEnd 商品终止更新时间,单位ms 126 | * @param tagId 商品标签的ID 127 | * @param q 搜索字段。搜索商品的title 128 | * @param banner 129 | * @param orderBy 排序方式。格式为column:asc/desc,目前排序字段: 130 | * 1.创建时间:created_time, 131 | * 2.更新时间:update_time, 132 | * 3.价格:price, 133 | * 4.销量:sold_num 134 | * @param pageNo 页码 135 | * @param pageSize 每页条数,最大支持300 136 | * @return { 137 | * count: // 搜索到的商品数量 138 | * items: // ItemListOpenModel[] 搜索到的商品列表 139 | * } 140 | */ 141 | YouzanItemsInventoryGetResult inventoryGets(Long updateTimeStart, Long updateTimeEnd, Integer tagId, 142 | String q, String banner, String orderBy, 143 | Integer pageNo, Integer pageSize); 144 | 145 | /** 146 | * 获取出售中的商品列表 147 | * 148 | * https://www.youzanyun.com/apilist/detail/group_item/item/youzan.items.onsale.get 149 | * 150 | * @param updateTimeStart 商品起始更新时间,单位ms 151 | * @param updateTimeEnd 商品终止更新时间,单位ms 152 | * @param tagId 商品标签的ID 153 | * @param q 搜索字段。搜索商品的title 154 | * @param orderBy 排序方式。格式为column:asc/desc,目前排序字段: 155 | * 1.创建时间:created_time, 156 | * 2.更新时间:update_time, 157 | * 3.价格:price, 158 | * 4.销量:sold_num 159 | * @param pageNo 页码 160 | * @param pageSize 每页条数,最大支持300 161 | * @return { 162 | * count: // 搜索到的商品数量 163 | * items: // ItemListOpenModel[] 搜索到的商品列表 164 | * } 165 | */ 166 | YouzanItemsOnsaleGetResult onlineGets(Long updateTimeStart, Long updateTimeEnd, Integer tagId, 167 | String q, String orderBy, 168 | Integer pageNo, Integer pageSize); 169 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/scrmgroup/weixin/UserWeiXinAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.scrmgroup.weixin; 2 | 3 | import com.youzan.open.sdk.gen.v3_0_0.model.*; 4 | 5 | import java.util.Date; 6 | import java.util.List; 7 | 8 | public interface UserWeiXinAPI { 9 | 10 | /** 11 | * 使用手机号获取用户openId 12 | * 13 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.user.weixin.openid.get 14 | * 15 | * @param mobile 手机号 16 | * @param countryCode 手机号国际码 17 | * @return 用户 openId 18 | */ 19 | String openIdGet(String mobile, String countryCode); 20 | 21 | /** 22 | * 根据微信粉丝用户的 openid 或 fans_id 获取用户信息 23 | * 24 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.follower.get 25 | * 26 | * @param weixinOpenid 微信粉丝用户的openid 27 | * @param fansId 微信粉丝用户ID。 调用时,参数 weixin_openid 和 fans_id 选其一即可 28 | * @param fields 需要返回的微信粉丝对象字段,如nick,avatar等。 29 | * 可选值:CrmWeixinFans微信粉丝结构体中所有字段均可返回;多个字段用“,”分隔。 30 | * 如果为空则返回所有 31 | * @return 微信粉丝用户信息 32 | * // todo 芋艿,fans_id 和 user_id 的关系 33 | */ 34 | YouzanUsersWeixinFollowerGetResult.CrmWeixinFans followerGet(String weixinOpenid, Integer fansId, String[] fields); 35 | 36 | /** 37 | * 根据多个微信粉丝用户的 openid 或 user_id 获取用户信息 38 | * 39 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.follower.gets 40 | * 41 | * @param weixinOpenids 微信粉丝用户的openid,多个用逗号分隔 42 | * @param fansIds 微信粉丝用户ID,多个用逗号分隔。调用时,参数 weixin_openids 和 fans_ids 选其一即可 43 | * @param pageNo 页码 44 | * @param pageSize 每页条数,默认值:40,最大值:500 45 | * @param fields 需要返回的微信粉丝对象字段,如nick,avatar等。 46 | * 可选值:CrmWeixinFans微信粉丝结构体中所有字段均可返回;多个字段用“,”分隔。 47 | * 如果为空则返回所有 48 | * @return 微信粉丝用户信息列表 49 | */ 50 | List followerGets(String[] weixinOpenids, Integer[] fansIds, Integer pageNo, Integer pageSize, String[] fields); 51 | 52 | /** 53 | * 查询微信粉丝用户信息 54 | * 55 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.followers.info.search 56 | * 57 | * 与该接口相同:https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.followers.get 【即将废弃】 58 | * 59 | * @param startFollow 关注的起始时间。 60 | * 查询在该时间之后(包含该时间)关注的粉丝,不能为空。格式可为“20170101”或“2017-01-01 12:00:00" 61 | * @param endFollow 关注的结束时间。 62 | * 查询在该时间之前关注的粉丝,不能为空,查询时间间隔不能超过一天,格式同start_follow 63 | * @param onlyFollow 是否仅拉取关注的粉丝。 64 | * 1:仅拉取已关注的粉丝 65 | * 0:拉取已关注和已跑路粉丝 66 | * @param pageNo 页码 67 | * @param pageSize 每页条数,默认值:40,最大值:500 68 | * @param fields 需要返回的微信粉丝对象字段,如nick,avatar等。 69 | * 可选值:CrmWeixinFans微信粉丝结构体中所有字段均可返回;多个字段用“,”分隔。 70 | * 如果为空则返回所有 71 | * @return { 72 | * total_results: // 搜索到的微信粉丝用户总数 73 | * users: // 【CrmWeixinFans】 搜索到的微信粉丝用户列表 74 | * } 75 | */ 76 | YouzanUsersWeixinFollowersInfoSearchResult followerSearch(Date startFollow, Date endFollow, Integer onlyFollow, Integer pageNo, Integer pageSize, String[] fields); 77 | 78 | /** 79 | * 不受关注时间限制,按照粉丝编码正序查询 80 | * 81 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.followers.info.pull 82 | * 83 | * 与该接口相同:https://open.youzan.com/api/oauthentry/youzan.users.weixin.followers/3.0.0/pull 【即将废弃】 84 | * 85 | * @param afterFansId 用于拉取该粉丝编码之后的查询条件。 86 | * 第一次查询可传入0,之后每次查询可传入上次查询里返回的last_fans_id,直到返回结果里的has_next为false 87 | * @param pageSize 每页条数,默认值:40,最大值:500 88 | * @param fields 需要返回的微信粉丝对象字段,如nick,avatar等。 89 | * 可选值:CrmWeixinFans微信粉丝结构体中所有字段均可返回;多个字段用“,”分隔。 90 | * 如果为空则返回所有 91 | * @return { 92 | * users: // 搜索到的微信粉丝用户列表 93 | * has_next: // 是否有下一页数据 94 | * last_fans_id: // 当前列表中最后一个粉丝编码 95 | * } 96 | */ 97 | YouzanUsersWeixinFollowersInfoPullResult followerPull(Integer afterFansId, Integer pageSize, String[] fields); 98 | 99 | // todo 芋艿,标签相关,可能要调整下 100 | 101 | /** 102 | * 获取单个粉丝标签集合 103 | * 104 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.follower.tags.get 105 | * 106 | * @param weixinOpenid 微信粉丝用户的openid 107 | * @param fansId 微信粉丝用户ID。 调用时,参数 weixin_openid 和 fans_id 选其一即可 108 | * @return 该粉丝的标签集合 109 | */ 110 | List tagGet(String weixinOpenid, Integer fansId); 111 | 112 | /** 113 | * 根据微信粉丝用户的 openid 或 user_id 绑定对应的标签 114 | * 115 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.follower.tags.add 116 | * 117 | * @param weixinOpenid 微信粉丝用户的openid 118 | * @param fansId 微信粉丝用户ID。 调用时,参数 weixin_openid 和 fans_id 选其一即可 119 | * @param tags 标签名,多个标签名用“,”分隔 120 | * @param fields 需要返回的微信粉丝对象字段,如nick,avatar等。 121 | * 可选值:CrmWeixinFans微信粉丝结构体中所有字段均可返回;多个字段用“,”分隔。 122 | * 如果为空则返回所有 123 | * @return 微信粉丝用户信息 124 | * // todo 很奇怪!?为啥要返回 125 | */ 126 | YouzanUsersWeixinFollowerTagsAddResult.CrmWeixinFans tagAdd(String weixinOpenid, Integer fansId, String[] tags, String[] fields); 127 | 128 | /** 129 | * 根据微信粉丝用户的 openid 或 user_id 删除对应的标签 一次删除的标签数量不能大于20 130 | * 131 | * https://www.youzanyun.com/apilist/detail/group_scrm/user/youzan.users.weixin.follower.tags.delete 132 | * 133 | * @param weixinOpenid 微信粉丝用户的openid 134 | * @param fansId 微信粉丝用户ID。 调用时,参数 weixin_openid 和 fans_id 选其一即可 135 | * @param tags 标签名,多个标签名用“,”分隔 136 | * @return 删除是否成功 137 | */ 138 | Boolean tagDelete(String weixinOpenid, Integer fansId, String[] tags); 139 | } 140 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/umpgroup/coupon/entity/CouponGroup.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.umpgroup.coupon.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 优惠劵(码)组。当用户领取时,会生成 {@link Coupon} 优惠劵(码)。 7 | */ 8 | public class CouponGroup { 9 | 10 | // ========== 基本信息 BEGIN ========== 11 | /** 12 | * 编号,自增唯一。 13 | */ 14 | private Integer id; 15 | /** 16 | * 店铺编号 17 | */ 18 | private Integer shopId; 19 | /** 20 | * 别名 21 | * 22 | * 系统生成,作为唯一标识。例如,2fpa62tbmsl9h 23 | * 可以用于生成优惠券(码)领取链接,例如,https://wap.youzan.com/v2/showcase/coupon/fetch?alias=17xcvjbd8 24 | */ 25 | private String alias; 26 | /** 27 | * 标题 28 | */ 29 | private String title; 30 | /** 31 | * 使用说明 32 | */ 33 | private String description; 34 | /** 35 | * 类型 36 | * 37 | * 1-优惠劵 38 | * 2-优惠码 39 | */ 40 | private Integer type; 41 | /** 42 | * 创建时间 43 | */ 44 | private Date createTime; 45 | /** 46 | * 更新时间 47 | */ 48 | private Date updateTime; 49 | /** 50 | * 优惠码状态 51 | * 52 | * 1-生效中 53 | * 2-已失效 54 | * 3-已过期 55 | * 4-已删除 56 | * 57 | * 当优惠劵(码)有效时,可以手动操作,设置成无效。 58 | */ 59 | private Integer status; 60 | /** 61 | * 是否可分享领取链接 62 | */ 63 | private Boolean isShare; 64 | /** 65 | * 设置为失效时间 66 | */ 67 | private Date invalidTime; 68 | /** 69 | * 删除时间 70 | */ 71 | private Date deleteTime; 72 | 73 | // ========== 基本信息 END ========== 74 | 75 | // ========== 码信息 BEGIN ========== 76 | /** 77 | * 码类型 78 | * 79 | * 1-一卡一码(UNIQUE) 80 | * 2-通用码(GENERAL) 81 | * 82 | * 【优惠码独有】 83 | */ 84 | private Integer codeType; 85 | /** 86 | * 优惠码 87 | * 88 | * 【优惠码独有】 89 | */ 90 | private String code; 91 | // ========== 码信息 END ========== 92 | 93 | // ========== 领取规则 BEGIN ========== 94 | /** 95 | * 是否限制领用者的等级 96 | * 97 | * 0-不限制 98 | * 大于0-领用者必须是这个等级编号 99 | * 100 | * 【优惠劵独有】 101 | */ 102 | private Integer needUserLevel; 103 | /** 104 | * 每人限领个数 105 | * 106 | * 0-则表示不限制 107 | */ 108 | private Integer quota; 109 | /** 110 | * 剩余可用库存 111 | */ 112 | private Integer stock; 113 | /** 114 | * 总库存 115 | */ 116 | private Integer total; 117 | /** 118 | * 领取优惠券要给用户打上的标签的列表,使用逗号分隔标签编号 119 | */ 120 | private String markTags; 121 | // ========== 领取规则 END ========== 122 | 123 | // ========== 使用规则 BEGIN ========== 124 | /** 125 | * 是否仅原价购买商品时可用 126 | * 127 | * true-是 128 | * false-否 129 | */ 130 | private Boolean isForbidPreference; 131 | /** 132 | * 是否设置满多少金额可用,单位:分 133 | * 134 | * 0-不限制 135 | * 大于0-多少金额可用 136 | */ 137 | private Integer condition; 138 | /** 139 | * 可用范围的类型 140 | * 141 | * 1-部分(ALL):全部商品可用 142 | * 2-全部(PART):部分商品可用,或指定商品可用 143 | */ 144 | private Integer rangeType; 145 | /** 146 | * 指定可用商品列表,使用逗号分隔商品编号 {@link cn.iocoder.doraemon.itemgroup.item.entity.Item#id} 147 | */ 148 | private String rangeValues; 149 | /** 150 | * 生效日期类型 151 | * 152 | * 1-固定日期 153 | * 2-领取日期:领到券 {@link #fixedBeginTerm} 日开始 N 天内有效 154 | */ 155 | private Integer dateType; 156 | /** 157 | * 固定日期-生效开始时间 158 | */ 159 | private Date validStartTime; 160 | /** 161 | * 固定日期-生效结束时间 162 | */ 163 | private Date validEndTime; 164 | /** 165 | * 领取日期-开始天数 166 | * 167 | * 例如,0-当天;1-次天 168 | */ 169 | private Integer fixedBeginTerm; 170 | /** 171 | * 领取日期-结束天数 172 | */ 173 | private Integer fixedTerm; 174 | /** 175 | * 是否到期前4天发送提醒 176 | * 177 | * true-发送 178 | * false-不发送 179 | */ 180 | private Boolean expireNotice; 181 | // ========== 使用规则 END ========== 182 | 183 | // ========== 使用效果 BEGIN ========== 184 | /** 185 | * 优惠类型 186 | * 187 | * 1-代金卷 188 | * 2-折扣卷 【优惠劵独有】 189 | */ 190 | private Integer preferentialType; 191 | /** 192 | * 折扣。例如,80% 为 80。 193 | * 194 | *【优惠劵独有】 195 | */ 196 | private Integer discount; 197 | /** 198 | * 是否是随机优惠券 199 | * 200 | * true-随机 201 | * false-不随机 202 | * 203 | * 【优惠劵独有】 204 | */ 205 | private Boolean isRandom; 206 | /** 207 | * 优惠金额,单位:分 208 | * 209 | * 当 {@link #isRandom} 为 true 时,代表随机优惠金额的下限 210 | */ 211 | private Integer value; 212 | /** 213 | * 优惠金额上限 214 | * 215 | * 【优惠劵独有】 216 | */ 217 | private Integer valueRandomTo; 218 | // ========== 使用效果 END ========== 219 | 220 | // ========== 统计信息 BEGIN ========== 221 | /** 222 | * 领取优惠券的人数 223 | */ 224 | private Integer statFetchUserNum; 225 | /** 226 | * 领取优惠券的次数 227 | */ 228 | private Integer statFetchNum; 229 | /** 230 | * 使用优惠券的次数 231 | */ 232 | private Integer statUseNum; 233 | // ========== 统计信息 END ========== 234 | 235 | // ========== 微信卡卷 BEGIN ========== 236 | /** 237 | * 是否同步微信卡券 238 | * 239 | * true-是 240 | * false-否 241 | */ 242 | private Boolean isSyncWeixin; 243 | /** 244 | * 同步微信卡券,选择的卡券颜色的值。 245 | * 246 | * 例如,Color10 247 | */ 248 | private String weixinColor; 249 | /** 250 | * 同步微信卡券,选择的卡券颜色的RGB值 251 | * 252 | * 例如,#ffaaff 253 | */ 254 | private String weixinColorRGB; 255 | /** 256 | * 同步微信卡券,卡券的标题 257 | */ 258 | private String weixinTitle; 259 | /** 260 | * 同步微信卡券,卡券的副标题 261 | */ 262 | private String weixinSubTitle; 263 | /** 264 | * 同步微信卡券,卡券的客服电话 265 | */ 266 | private String servicePhone; 267 | /** 268 | * 同步微信卡券,设置是否可以转赠 269 | * 270 | * true-可以 271 | * false-不可以 272 | */ 273 | private Boolean canGiveFriend; 274 | // ========== 微信卡卷 END ========== 275 | 276 | } 277 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/refund/TradeRefundAPI.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.refund; 2 | 3 | import cn.iocoder.doraemon.tradegroup.refund.entity.TradeRefund; 4 | import com.youzan.open.sdk.gen.v3_0_0.model.*; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 退款维权 API 10 | */ 11 | public interface TradeRefundAPI { 12 | 13 | // ======== 退款(买家) BEGIN ======== 14 | 15 | /** 16 | * 退款申请条件信息获取 17 | * 18 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_refund/youzan.trade.refund.condition.get 19 | * 20 | * @param tid 交易编号 21 | * @param oid 交易明细编号 22 | * @return 退款条件信息 23 | */ 24 | YouzanTradeRefundConditionGetResult getCondition(String tid, Integer oid); 25 | 26 | /** 27 | * 买家申请退款 28 | * 29 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_refund/youzan.trade.refund.apply 30 | * 31 | * 注意:实际从有赞商城页面看到,还有两个字段: 32 | * 1. 选择退货是,有字段【是否收到货物】 33 | * 2. 图片举证数组 34 | * 35 | * @param tid 交易编号 36 | * @param oid 交易明细编号 37 | * @param refundFee 退款金额 38 | * @param returnItem 是否退货 false(仅退款) true(退货退款) 39 | * @param mobile 手机号 40 | * @param reason 退款原因,原因列表地址:https://www.youzanyun.com/docs/guide/faq/699 41 | * @param desc 退款说明,备注 42 | * @return 是否成功 43 | */ 44 | YouzanTradeRefundApplyResult apply(String tid, String oid, Integer refundFee, Boolean returnItem, String mobile, 45 | Integer reason, String desc); 46 | 47 | /** 48 | * 买家修改申请 49 | * 50 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_refund/youzan.trade.refund.modify 51 | * 52 | * @param refundId 退款ID 53 | * @param version 版本号,见 {@link TradeRefund#version} 54 | * @param refundFee 退款金额 55 | * @param returnItem 是否退货 false(仅退款) true(退货退款) 56 | * @param reason 退款原因,原因列表地址:https://www.youzanyun.com/docs/guide/faq/699 57 | * @param desc 退款说明,备注 58 | * @return 是否成功 59 | */ 60 | YouzanTradeRefundModifyResult modify(String refundId, Integer version, Integer refundFee, Boolean returnItem, 61 | Integer reason, String desc); 62 | 63 | /** 64 | * 买家撤销退款申请 65 | * 66 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_refund/youzan.trade.refund.close 67 | * 68 | * @param refundId 退款ID 69 | * @param version 版本号,见 {@link TradeRefund#version} 70 | * @return 是否成功 71 | */ 72 | Boolean close(String refundId, Integer version); 73 | 74 | /** 75 | * 买家申请客服介入 76 | * 77 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_refund/youzan.trade.refund.intervene 78 | * 79 | * @param refundId 退款ID 80 | * @param version 版本号,见 {@link TradeRefund#version} 81 | * @param remark 申请理由 82 | * @return 是否成功 83 | */ 84 | Boolean intervene(String refundId, Integer version, String remark); 85 | 86 | // ======== 退款(卖家) BEGIN ======== 87 | 88 | /** 89 | * 商家同意退款 90 | * 91 | * https://www.youzanyun.com/apilist/detail/group_trade/trade_advanced/youzan.trade.refund.agree 92 | * 93 | * @param refundId 退款ID 94 | * @param version 版本号,见 {@link TradeRefund#version} 95 | * @return 是否成功 96 | */ 97 | Boolean agress(String refundId, Integer version); 98 | 99 | /** 100 | * 商家拒绝退款 101 | * 102 | * https://www.youzanyun.com/apilist/detail/group_trade/trade_advanced/youzan.trade.refund.refuse 103 | * 104 | * @param refundId 退款ID 105 | * @param version 版本号,见 {@link TradeRefund#version} 106 | * @return 是否成功 107 | */ 108 | Boolean refuse(String refundId, Integer version); 109 | 110 | /** 111 | * 查看退款详情 112 | * 113 | * https://www.youzanyun.com/apilist/detail/group_trade/trade_advanced/youzan.trade.refund.get 114 | * 115 | * @param refundId efundId 退款ID 116 | * @return 退款详情 117 | */ 118 | YouzanTradeRefundGetResult get(String refundId); 119 | 120 | // ======== 退货(买家) BEGIN ======== 121 | 122 | /** 123 | * 上传退货物流信息 124 | * 125 | * https://www.youzanyun.com/apilist/detail/group_buyer/buyer_refund/youzan.trade.returngoods.fill 126 | * 127 | * @param refundId 退款ID 128 | * @param version 版本号,见 {@link TradeRefund#version} 129 | * @param expressId 物流公司编号 130 | * @param nu 物流运单号 131 | * @return 是否成功 132 | */ 133 | Boolean fillItem(String refundId, Integer version, Integer expressId, String nu); 134 | 135 | // ======== 退货(卖家) BEGIN ======== 136 | 137 | /** 138 | * 商家同意退货 139 | * 140 | * https://www.youzanyun.com/apilist/detail/group_trade/trade_advanced/youzan.trade.returngoods.agree 141 | * 142 | * @param refundId 退款编号 143 | * @param version 版本号,见 {@link TradeRefund#version} 144 | * @param name 收件人(卖家)名 145 | * @param mobile 收件人(卖家)手机号 146 | * @param tel 收件人(卖家)座机 147 | * @param regionId 收件人(卖家)收获地区编号 148 | * @param address 收件人(卖家)收获地址 149 | * @param remark 说明 150 | * @return 是否成功 151 | */ 152 | YouzanTradeRefundAgreeResult agree(String refundId, Integer version, String name, String mobile, String tel, 153 | Integer regionId, String address, String remark); 154 | 155 | /** 156 | * 商家拒绝退货 157 | * 158 | * https://www.youzanyun.com/apilist/detail/group_trade/trade_advanced/youzan.trade.returngoods.refuse 159 | * 160 | * @param refundId 退款编号 161 | * @param version 版本号,见 {@link TradeRefund#version} 162 | * @param remark 说明 163 | * @return 是否成功 164 | */ 165 | YouzanTradeRefundRefuseResult refuse(String refundId, Integer version, String remark); 166 | 167 | // ======== 消息(卖家) BEGIN ======== 168 | 169 | /** 170 | * 查看退款操作信息数组 171 | * 172 | * https://www.youzanyun.com/apilist/detail/group_trade/trade_advanced/youzan.trade.refund.messages.get 173 | * 174 | * @param refundId 退款编号 175 | * @return 退款操作信息数组 176 | */ 177 | List messageGets(String refundId); 178 | 179 | } -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/trade/entity/Trade.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.doraemon.tradegroup.trade.entity; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 交易 7 | */ 8 | public class Trade { 9 | 10 | // ========= 基础字段 BEGIN ========= 11 | 12 | /** 13 | * 交易编号 14 | * 15 | * 唯一,例如:E20180125232933007700006 16 | */ 17 | private String id; 18 | /** 19 | * 店铺编号 20 | */ 21 | private Integer shopId; 22 | /** 23 | * 交易类型 24 | * 25 | * 0:FIXED (一口价) 26 | * 1:GIFT (送礼) // TODO 子订单 27 | * 2:BULK_PURCHASE(来自分销商的采购) 28 | * 3:PRESENT (赠品领取) 29 | * 4:GROUP (拼团订单) 30 | * 5:PIFA (批发订单) 31 | * 6:COD (货到付款) 32 | * 7:PEER (代付) 33 | * 8:QRCODE(扫码商家二维码直接支付的交易) 34 | * 9:QRCODE_3RD(线下收银台二维码交易) 35 | */ 36 | private Integer type; 37 | /** 38 | * 交易主状态。 39 | * 40 | * TODO 芋艿:TRADE_NO_CREATE_PAY (没有创建支付交易) 41 | * 3:WAIT_BUYER_PAY (等待买家付款) 42 | * TODO 芋艿:WAIT_PAY_RETURN (等待支付确认) 43 | * TODO 芋艿:WAIT_GROUP(等待成团,即:买家已付款,等待成团) 44 | * 5:WAIT_SELLER_SEND_GOODS (等待卖家发货,即:买家已付款) 45 | * 6:WAIT_BUYER_CONFIRM_GOODS (等待买家确认收货,即:卖家已发货) 46 | * 100:TRADE_BUYER_SIGNED (买家已签收,即:交易已完成) 47 | * 99:TRADE_CLOSED (付款以后用户退款成功或者付款超时或商家取消,即:交易已关闭) 48 | */ 49 | private Integer status; 50 | /** 51 | * 交易创建时间 52 | */ 53 | private Date createTime; 54 | /** 55 | * 交易更新时间。 56 | * 57 | * 当交易的:状态改变、备注更改、星标更改 等情况下都会刷新更新时间 58 | */ 59 | private Date updateTime; 60 | /** 61 | * 关闭类型 62 | * 63 | * 1-超时未支付 64 | * 2-退款关闭 65 | * 4-买家取消 66 | * 15-已通过货到付款交易 67 | * ... 可能还有其他关闭原因 68 | */ 69 | private Integer closeType; 70 | /** 71 | * 关闭时间 72 | */ 73 | private Date closeTime; 74 | 75 | // ========= 基础字段 END ========= 76 | 77 | // ========= 买家信息 BEGIN ========= 78 | /** 79 | * 买家用户编号 80 | */ 81 | private Integer buyerId; 82 | // @JsonProperty(value = "fans_info") 83 | // /** 84 | // * 用户信息 85 | // */ 86 | // private YouzanTradeGetResult.FansInfo fansInfo; 87 | // /** 88 | // * 三方APP用户id 89 | // */ 90 | // private String outerUserId; 91 | /** 92 | * 买家购买附言 93 | */ 94 | private String buyerMessage; 95 | 96 | // ========= 买家信息 END ========= 97 | 98 | // ========= 收货人 && 物流信息 BEGIN ========= 99 | /** 100 | * 收货人的地址编号 101 | * 102 | * 当无需物流时,该字段为零 103 | */ 104 | private Integer receiverAddressId; 105 | /** 106 | * 收货人的姓名 107 | */ 108 | private String receiverName; 109 | /** 110 | * 收货人的地区编号 111 | */ 112 | private Integer receiverPlace; 113 | /** 114 | * 收货人的详细地址 115 | */ 116 | private String receiverAddress; 117 | /** 118 | * 收货人的邮编 119 | */ 120 | private String receiverZip; 121 | /** 122 | * 创建交易时的物流方式。 123 | * 124 | * 取值范围: 125 | * 1:express(快递) 126 | * 2:fetch(到店自提) 127 | * 3:local(同城配送) 128 | */ 129 | private Integer shippingType; 130 | /** 131 | * 卖家发货时间 132 | */ 133 | private Date consignTime; 134 | /** 135 | * 买家签收时间 136 | */ 137 | private Date signTime; 138 | /** 139 | * 收货地址的纬度 140 | */ 141 | private Double receiverLat; 142 | /** 143 | * 收货地址的经度 144 | */ 145 | private Double receiverLng; 146 | /** 147 | * 同城送订单送达开始时间 148 | */ 149 | private Date deliveryStartTime; 150 | /** 151 | * 同城送订单送达结束时间 152 | */ 153 | private Date deliveryEndTime; 154 | 155 | // ========= 收货人信息 END ========= 156 | 157 | // ========= 卖家信息 BEGIN ========= 158 | /** 159 | * 卖家对该交易的备注 160 | */ 161 | private String tradeMemo; 162 | /** 163 | * 卖家备注星标。 164 | * 165 | * 取值范围 1、2、3、4、5; 166 | * 如果为0,表示没有备注星标 167 | */ 168 | private Integer sellerFlag; 169 | // ========= 卖家信息 END ========= 170 | 171 | // ========= 商品信息 BEGIN ========= 172 | /** 173 | * 商品购买数量。 174 | * 175 | * 当一个 trade 对应多个 order 的时候,值为所有商品购买数量之和 176 | */ 177 | private Integer num; 178 | /** 179 | * 商品购买种类 180 | * 181 | * 当一个 trade 对应多个 order 的时候,值为 order 的数量 182 | */ 183 | private Integer kind; 184 | /** 185 | * 商品数字编号。 186 | * 187 | * 当一个trade对应多个order的时候,值为第一个交易明细中的商品的编号 188 | */ 189 | private Integer itemId; 190 | /** 191 | * 商品价格,单位:分。 192 | * 193 | * 当一个trade对应多个order的时候,值为第一个交易明细中的商品的价格 194 | */ 195 | private Integer price; 196 | /** 197 | * 商品主图片地址。 198 | * 199 | * 当一个trade对应多个order的时候,值为第一个交易明细中的商品的图片地址 200 | */ 201 | private String picPath; 202 | /** 203 | * 交易标题。 204 | * 205 | * 以首个商品标题作为此标题的值 206 | */ 207 | private String title; 208 | // ========= 商品信息 END ========= 209 | 210 | // ========= 退款维权 BEGIN ========= 211 | /** 212 | * 交易维权状态。 213 | * 214 | * 0 无维权, 215 | * 1 顾客发起维权, 216 | * 2 顾客拒绝商家的处理结果, 217 | * 3 顾客接受商家的处理结果, 218 | * 9 商家正在处理; 219 | * 220 | * 101 维权处理中, 221 | * 110 维权结束; 222 | * 223 | * 备注:1到10的状态码是微信维权状态码,100以上的状态码是有赞维权状态码 224 | */ 225 | private Integer feedback; 226 | /** 227 | * 处于交易维权状态的订单数 228 | */ 229 | private Integer feedbackNum; 230 | /** 231 | * 退款状态。 232 | * 233 | * 0 - NO_REFUND(无退款) 234 | * 1 - PARTIAL_REFUNDING(部分退款中) 235 | * 2 - PARTIAL_REFUNDED(已部分退款) 236 | * 3 - PARTIAL_REFUND_FAILED(部分退款失败) 237 | * 11 - FULL_REFUNDING(全额退款中) 238 | * 12 - FULL_REFUNDED(已全额退款) 239 | * 13 - FULL_REFUND_FAILED(全额退款失败) 240 | */ 241 | private Integer refundStatus; 242 | // ========= 退款维权 END ========= 243 | 244 | // ========= 支付信息 BEGIN ========= 245 | /** 246 | * 买家付款时间 247 | */ 248 | private Date payTime; 249 | /** 250 | * 支付类型。 251 | * 252 | * 取值范围: 253 | * 1-WEIXIN (微信自有支付) 254 | * 2-WEIXIN_DAIXIAO (微信代销支付) 255 | * 3-ALIPAY (支付宝支付) 256 | * 4-BANKCARDPAY (银行卡支付) 257 | * 5-PEERPAY (代付) 258 | * 6-CODPAY (货到付款) 259 | * 7-BAIDUPAY (百度钱包支付) 260 | * 8-PRESENTTAKE (直接领取赠品) 261 | * 9-COUPONPAY(优惠券/码全额抵扣) 262 | * 10-BULKPURCHASE(来自分销商的采购) 263 | * 11-MERGEDPAY (合并付货款) 264 | * 12-ECARD(有赞E卡支付) 265 | * 13-PREPAIDCARD (储值卡支付) 266 | * 14-MARKPAY (标记支付) 267 | * 15-OFCASH (现金支付) 268 | */ 269 | private Integer payType; 270 | /** 271 | * 外部交易编号。 272 | * 273 | * 比如,如果支付方式是微信支付,就是财付通的交易单号 274 | */ 275 | private String outerTid; 276 | /** 277 | * 支付流水号(支付单号) 278 | */ 279 | private String transactionTid; 280 | // ========= 支付信息 END ========= 281 | 282 | // ========= 优惠信息 BEGIN ========= 283 | 284 | // @JsonProperty(value = "coupon_details") 285 | // /** 286 | // * 订单中使用到的卡券的数据结构 287 | // */ 288 | // private YouzanTradeGetResult.UmpTradeCoupon[] couponDetails; 289 | // @JsonProperty(value = "promotion_details") 290 | // /** 291 | // * 订单中使用到的优惠活动的数据结构 292 | // */ 293 | // private YouzanTradeGetResult.TradePromotion[] promotionDetails; 294 | 295 | // ========= 优惠信息 END ========= 296 | 297 | // ========= 价格信息 BEGIN ========= 298 | /** 299 | * 商品总价(商品价格乘以数量的总金额)。单位:分 300 | */ 301 | private Integer totalFee; 302 | /** 303 | * 运费。单位:分 304 | */ 305 | private Integer postFee; 306 | /** 307 | * 交易优惠金额(不包含交易明细中的优惠金额)。单位:分 308 | * 309 | * 【不包括】例如,购买的商品参加限制折扣活动 https://help.youzan.com/qa#/menu/2189/detail/919?_k=00rukd 310 | * 【包括】】另外,购买的商品使用优惠劵 https://help.youzan.com/qa#/menu/2185/detail/915?_k=lih1k9 311 | */ 312 | private Integer discountFee; 313 | /** 314 | * 实付金额。单位:分 315 | */ 316 | private Integer payment; 317 | /** 318 | * 交易完成后退款的金额。单位:分 319 | */ 320 | private Integer refundedFee; 321 | // ========= 价格信息 END ========= 322 | 323 | 324 | // /** 325 | // * 到店自提详情 326 | // */ 327 | // private YouzanTradeGetResult.TradeFetch fetchDetail; 328 | 329 | 330 | // /** 331 | // * 发票抬头 332 | // */ 333 | // private String invoiceTitle; 334 | 335 | 336 | 337 | 338 | // /** 339 | // * 交易明细数据结构 340 | // */ 341 | // private YouzanTradeGetResult.TradeOrderV2[] orders; 342 | // @JsonProperty(value = "fetch_detail") 343 | 344 | 345 | 346 | // @JsonProperty(value = "hotel_info") 347 | // /** 348 | // * 酒店入住信息 349 | // */ 350 | // private YouzanTradeGetResult.HotelInfo hotelInfo; 351 | 352 | 353 | // @JsonProperty(value = "sub_trades") 354 | // /** 355 | // * 交易数据结构 356 | // */ 357 | // private YouzanTradeGetResult.TradeDetailV2[] subTrades; 358 | // @JsonProperty(value = "relation_type") 359 | // /** TODO 芋艿,等分销 360 | // * 分销/采购单:source:采购单;fenxiao:分销单 空串则为非分销/采购单 361 | // */ 362 | // private String relationType; 363 | // @JsonProperty(value = "relations") 364 | // /** 365 | // * relation_type返回source时,为分销订单号列表
366 | // 返回fenxiao时,为供应商订单号列表
367 | // 返回空时,列表返回空 368 | // */ 369 | // private String[] relations; 370 | // @JsonProperty(value = "out_trade_no") 371 | // /** 372 | // * 代付订单外部交易号列表,非代付订单类型返回空 373 | // */ 374 | // private String[] outTradeNo; 375 | // @JsonProperty(value = "profit") 376 | // /** 377 | // * 利润(分销订单特有)。格式:5.20;单位:元;精确到:分 378 | // */ 379 | // private Float profit; 380 | // @JsonProperty(value = "handled") 381 | // /** 382 | // * 结算状态(分销订单特有)。1:已结算,0:未结算 383 | // */ 384 | // private Long handled; 385 | // @JsonProperty(value = "outer_user_id") 386 | 387 | 388 | // @JsonProperty(value = "shop_id") 389 | // /** 390 | // * 多门店订单的门店id 非多门店订单则默认为0 391 | // */ 392 | // private Long shopId; 393 | // @JsonProperty(value = "offline_id") 394 | // /** 395 | // * 表示线下网点id,包含自提点和门店 396 | // */ 397 | // private Long offlineId; 398 | // @JsonProperty(value = "points_price") 399 | // /** 400 | // * 积分兑换订单,数值代表消耗的积分 非积分兑换订单默认为0 401 | // */ 402 | // private Long pointsPrice; 403 | // @JsonProperty(value = "tuan_no") 404 | // /** 405 | // * 拼团订单对应的团编号 406 | // */ 407 | // private String tuanNo; 408 | // @JsonProperty(value = "is_tuan_head") 409 | // /** 410 | // * 是否为团长订单 1 团长订单 0 非拼团订单 或 非团长订单 411 | // */ 412 | // private Long isTuanHead; 413 | // @JsonProperty(value = "qr_id") 414 | // /** 415 | // * 收银台订单的二维码id号 416 | // */ 417 | // private Long qrId; 418 | 419 | 420 | 421 | // @JsonProperty(value = "id_card_number") 422 | // /** 423 | // * 海淘订单身份证信息 424 | // */ 425 | // private String idCardNumber; 426 | // @JsonProperty(value = "period_order_detail") 427 | // /** 428 | // * 周期购信息 429 | // */ 430 | // private YouzanTradeGetResult.TradePeriodBuy periodOrderDetail; 431 | 432 | 433 | 434 | // @JsonProperty(value = "box_price") 435 | 436 | // /** 437 | // * 餐盒费 438 | // */ 439 | // private Float boxPrice; 440 | // @JsonProperty(value = "invoice_title") 441 | 442 | } 443 | -------------------------------------------------------------------------------- /src/main/java/cn/iocoder/doraemon/tradegroup/delivery/entity/youzan_express.json: -------------------------------------------------------------------------------- 1 | { 2 | "response": { 3 | "allExpress": [ 4 | { 5 | "display": 1, 6 | "name": "申通快递", 7 | "id": 1 8 | }, 9 | { 10 | "display": 1, 11 | "name": "圆通速递", 12 | "id": 2 13 | }, 14 | { 15 | "display": 1, 16 | "name": "中通快递", 17 | "id": 3 18 | }, 19 | { 20 | "display": 1, 21 | "name": "韵达快递", 22 | "id": 4 23 | }, 24 | { 25 | "display": 1, 26 | "name": "天天快递", 27 | "id": 5 28 | }, 29 | { 30 | "display": 1, 31 | "name": "百世快递", 32 | "id": 6 33 | }, 34 | { 35 | "display": 1, 36 | "name": "顺丰速运", 37 | "id": 7 38 | }, 39 | { 40 | "display": 1, 41 | "name": "邮政快递包裹", 42 | "id": 8 43 | }, 44 | { 45 | "display": 0, 46 | "name": "EMS经济快递", 47 | "id": 10 48 | }, 49 | { 50 | "display": 1, 51 | "name": "EMS", 52 | "id": 11 53 | }, 54 | { 55 | "display": 0, 56 | "name": "邮政平邮", 57 | "id": 12 58 | }, 59 | { 60 | "display": 0, 61 | "name": "德邦快递", 62 | "id": 13 63 | }, 64 | { 65 | "display": 1, 66 | "name": "联昊通", 67 | "id": 16 68 | }, 69 | { 70 | "display": 1, 71 | "name": "全峰快递", 72 | "id": 17 73 | }, 74 | { 75 | "display": 1, 76 | "name": "全一快递", 77 | "id": 18 78 | }, 79 | { 80 | "display": 1, 81 | "name": "城市100", 82 | "id": 19 83 | }, 84 | { 85 | "display": 1, 86 | "name": "汇强快递", 87 | "id": 20 88 | }, 89 | { 90 | "display": 1, 91 | "name": "广东EMS", 92 | "id": 21 93 | }, 94 | { 95 | "display": 1, 96 | "name": "速尔", 97 | "id": 22 98 | }, 99 | { 100 | "display": 1, 101 | "name": "飞康达速运", 102 | "id": 23 103 | }, 104 | { 105 | "display": 1, 106 | "name": "宅急送", 107 | "id": 25 108 | }, 109 | { 110 | "display": 1, 111 | "name": "联邦快递", 112 | "id": 27 113 | }, 114 | { 115 | "display": 1, 116 | "name": "德邦物流", 117 | "id": 28 118 | }, 119 | { 120 | "display": 1, 121 | "name": "中铁快运", 122 | "id": 30 123 | }, 124 | { 125 | "display": 1, 126 | "name": "信丰物流", 127 | "id": 31 128 | }, 129 | { 130 | "display": 1, 131 | "name": "龙邦速递", 132 | "id": 32 133 | }, 134 | { 135 | "display": 1, 136 | "name": "天地华宇", 137 | "id": 33 138 | }, 139 | { 140 | "display": 1, 141 | "name": "快捷速递", 142 | "id": 34 143 | }, 144 | { 145 | "display": 1, 146 | "name": "新邦物流", 147 | "id": 36 148 | }, 149 | { 150 | "display": 1, 151 | "name": "能达速递", 152 | "id": 37 153 | }, 154 | { 155 | "display": 1, 156 | "name": "优速快递", 157 | "id": 38 158 | }, 159 | { 160 | "display": 1, 161 | "name": "国通快递", 162 | "id": 40 163 | }, 164 | { 165 | "display": 1, 166 | "name": "其他", 167 | "id": 41 168 | }, 169 | { 170 | "display": 0, 171 | "name": "顺丰快递", 172 | "id": 42 173 | }, 174 | { 175 | "display": 1, 176 | "name": "AAE", 177 | "id": 43 178 | }, 179 | { 180 | "display": 1, 181 | "name": "安信达", 182 | "id": 44 183 | }, 184 | { 185 | "display": 1, 186 | "name": "百福东方", 187 | "id": 45 188 | }, 189 | { 190 | "display": 1, 191 | "name": "BHT", 192 | "id": 46 193 | }, 194 | { 195 | "display": 1, 196 | "name": "邦送物流", 197 | "id": 47 198 | }, 199 | { 200 | "display": 1, 201 | "name": "传喜物流", 202 | "id": 48 203 | }, 204 | { 205 | "display": 1, 206 | "name": "大田物流", 207 | "id": 49 208 | }, 209 | { 210 | "display": 1, 211 | "name": "D速快递", 212 | "id": 50 213 | }, 214 | { 215 | "display": 1, 216 | "name": "递四方", 217 | "id": 51 218 | }, 219 | { 220 | "display": 0, 221 | "name": "飞康达物流", 222 | "id": 52 223 | }, 224 | { 225 | "display": 1, 226 | "name": "飞快达", 227 | "id": 53 228 | }, 229 | { 230 | "display": 1, 231 | "name": "如风达", 232 | "id": 54 233 | }, 234 | { 235 | "display": 1, 236 | "name": "风行天下", 237 | "id": 55 238 | }, 239 | { 240 | "display": 1, 241 | "name": "飞豹快递", 242 | "id": 56 243 | }, 244 | { 245 | "display": 1, 246 | "name": "港中能达", 247 | "id": 57 248 | }, 249 | { 250 | "display": 1, 251 | "name": "广东邮政", 252 | "id": 58 253 | }, 254 | { 255 | "display": 1, 256 | "name": "共速达", 257 | "id": 59 258 | }, 259 | { 260 | "display": 1, 261 | "name": "汇通快运", 262 | "id": 60 263 | }, 264 | { 265 | "display": 0, 266 | "name": "华宇物流", 267 | "id": 61 268 | }, 269 | { 270 | "display": 1, 271 | "name": "恒路物流", 272 | "id": 62 273 | }, 274 | { 275 | "display": 1, 276 | "name": "华夏龙", 277 | "id": 63 278 | }, 279 | { 280 | "display": 1, 281 | "name": "海航天天", 282 | "id": 64 283 | }, 284 | { 285 | "display": 1, 286 | "name": "海盟速递", 287 | "id": 65 288 | }, 289 | { 290 | "display": 1, 291 | "name": "华企快运", 292 | "id": 66 293 | }, 294 | { 295 | "display": 1, 296 | "name": "山东海红", 297 | "id": 67 298 | }, 299 | { 300 | "display": 1, 301 | "name": "佳吉物流", 302 | "id": 68 303 | }, 304 | { 305 | "display": 1, 306 | "name": "佳怡物流", 307 | "id": 69 308 | }, 309 | { 310 | "display": 1, 311 | "name": "加运美", 312 | "id": 70 313 | }, 314 | { 315 | "display": 1, 316 | "name": "京广速递", 317 | "id": 71 318 | }, 319 | { 320 | "display": 1, 321 | "name": "急先达", 322 | "id": 72 323 | }, 324 | { 325 | "display": 1, 326 | "name": "晋越快递", 327 | "id": 73 328 | }, 329 | { 330 | "display": 1, 331 | "name": "捷特快递", 332 | "id": 74 333 | }, 334 | { 335 | "display": 1, 336 | "name": "金大物流", 337 | "id": 75 338 | }, 339 | { 340 | "display": 1, 341 | "name": "嘉里大通", 342 | "id": 76 343 | }, 344 | { 345 | "display": 1, 346 | "name": "康力物流", 347 | "id": 77 348 | }, 349 | { 350 | "display": 1, 351 | "name": "跨越物流", 352 | "id": 78 353 | }, 354 | { 355 | "display": 1, 356 | "name": "龙邦物流", 357 | "id": 79 358 | }, 359 | { 360 | "display": 1, 361 | "name": "蓝镖快递", 362 | "id": 80 363 | }, 364 | { 365 | "display": 1, 366 | "name": "隆浪快递", 367 | "id": 81 368 | }, 369 | { 370 | "display": 1, 371 | "name": "门对门", 372 | "id": 82 373 | }, 374 | { 375 | "display": 1, 376 | "name": "明亮物流", 377 | "id": 83 378 | }, 379 | { 380 | "display": 1, 381 | "name": "全晨快递", 382 | "id": 84 383 | }, 384 | { 385 | "display": 1, 386 | "name": "全际通", 387 | "id": 85 388 | }, 389 | { 390 | "display": 1, 391 | "name": "全日通", 392 | "id": 86 393 | }, 394 | { 395 | "display": 0, 396 | "name": "如风达快递", 397 | "id": 87 398 | }, 399 | { 400 | "display": 1, 401 | "name": "三态速递", 402 | "id": 88 403 | }, 404 | { 405 | "display": 1, 406 | "name": "盛辉物流", 407 | "id": 89 408 | }, 409 | { 410 | "display": 0, 411 | "name": "速尔物流", 412 | "id": 90 413 | }, 414 | { 415 | "display": 1, 416 | "name": "盛丰物流", 417 | "id": 91 418 | }, 419 | { 420 | "display": 1, 421 | "name": "上大物流", 422 | "id": 92 423 | }, 424 | { 425 | "display": 1, 426 | "name": "赛澳递", 427 | "id": 94 428 | }, 429 | { 430 | "display": 1, 431 | "name": "圣安物流", 432 | "id": 95 433 | }, 434 | { 435 | "display": 1, 436 | "name": "穗佳物流", 437 | "id": 96 438 | }, 439 | { 440 | "display": 1, 441 | "name": "优速物流", 442 | "id": 97 443 | }, 444 | { 445 | "display": 1, 446 | "name": "万家物流", 447 | "id": 98 448 | }, 449 | { 450 | "display": 1, 451 | "name": "万象物流", 452 | "id": 99 453 | }, 454 | { 455 | "display": 1, 456 | "name": "新蛋奥硕物流", 457 | "id": 100 458 | }, 459 | { 460 | "display": 1, 461 | "name": "香港邮政", 462 | "id": 101 463 | }, 464 | { 465 | "display": 1, 466 | "name": "运通快递", 467 | "id": 102 468 | }, 469 | { 470 | "display": 1, 471 | "name": "远成物流", 472 | "id": 103 473 | }, 474 | { 475 | "display": 1, 476 | "name": "亚风速递", 477 | "id": 104 478 | }, 479 | { 480 | "display": 1, 481 | "name": "一邦速递", 482 | "id": 105 483 | }, 484 | { 485 | "display": 1, 486 | "name": "源伟丰快递", 487 | "id": 106 488 | }, 489 | { 490 | "display": 1, 491 | "name": "元智捷诚", 492 | "id": 107 493 | }, 494 | { 495 | "display": 1, 496 | "name": "越丰物流", 497 | "id": 108 498 | }, 499 | { 500 | "display": 1, 501 | "name": "源安达", 502 | "id": 109 503 | }, 504 | { 505 | "display": 1, 506 | "name": "原飞航", 507 | "id": 110 508 | }, 509 | { 510 | "display": 1, 511 | "name": "忠信达快递", 512 | "id": 111 513 | }, 514 | { 515 | "display": 1, 516 | "name": "芝麻开门", 517 | "id": 112 518 | }, 519 | { 520 | "display": 1, 521 | "name": "银捷速递", 522 | "id": 113 523 | }, 524 | { 525 | "display": 1, 526 | "name": "中邮物流", 527 | "id": 114 528 | }, 529 | { 530 | "display": 1, 531 | "name": "中速快件", 532 | "id": 115 533 | }, 534 | { 535 | "display": 1, 536 | "name": "中天万运", 537 | "id": 116 538 | }, 539 | { 540 | "display": 1, 541 | "name": "河北建华", 542 | "id": 117 543 | }, 544 | { 545 | "display": 1, 546 | "name": "乐捷递", 547 | "id": 118 548 | }, 549 | { 550 | "display": 1, 551 | "name": "立即送", 552 | "id": 119 553 | }, 554 | { 555 | "display": 1, 556 | "name": "通和天下", 557 | "id": 120 558 | }, 559 | { 560 | "display": 1, 561 | "name": "微特派", 562 | "id": 121 563 | }, 564 | { 565 | "display": 1, 566 | "name": "一统飞鸿", 567 | "id": 122 568 | }, 569 | { 570 | "display": 1, 571 | "name": "郑州建华", 572 | "id": 123 573 | }, 574 | { 575 | "display": 1, 576 | "name": "山西红马甲", 577 | "id": 125 578 | }, 579 | { 580 | "display": 1, 581 | "name": "陕西黄马甲", 582 | "id": 126 583 | }, 584 | { 585 | "display": 1, 586 | "name": "快速递", 587 | "id": 127 588 | }, 589 | { 590 | "display": 1, 591 | "name": "安能物流", 592 | "id": 128 593 | }, 594 | { 595 | "display": 1, 596 | "name": "新顺丰", 597 | "id": 129 598 | }, 599 | { 600 | "display": 1, 601 | "name": "钱报速运", 602 | "id": 130 603 | }, 604 | { 605 | "display": 1, 606 | "name": "日日顺", 607 | "id": 131 608 | }, 609 | { 610 | "display": 1, 611 | "name": "神盾快运", 612 | "id": 132 613 | }, 614 | { 615 | "display": 1, 616 | "name": "京华亿家", 617 | "id": 133 618 | }, 619 | { 620 | "display": 1, 621 | "name": "南方传媒物流", 622 | "id": 134 623 | }, 624 | { 625 | "display": 1, 626 | "name": "成都商报物流", 627 | "id": 135 628 | }, 629 | { 630 | "display": 1, 631 | "name": "冻到家物流", 632 | "id": 136 633 | }, 634 | { 635 | "display": 1, 636 | "name": "亚马逊物流", 637 | "id": 137 638 | }, 639 | { 640 | "display": 1, 641 | "name": "京东快递", 642 | "id": 138 643 | }, 644 | { 645 | "display": 1, 646 | "name": "e邮宝", 647 | "id": 139 648 | }, 649 | { 650 | "display": 1, 651 | "name": "思迈", 652 | "id": 140 653 | }, 654 | { 655 | "display": 1, 656 | "name": "UPS", 657 | "id": 141 658 | }, 659 | { 660 | "display": 1, 661 | "name": "南京100", 662 | "id": 142 663 | }, 664 | { 665 | "display": 1, 666 | "name": "民航快递", 667 | "id": 143 668 | }, 669 | { 670 | "display": 1, 671 | "name": "贝海国际速递", 672 | "id": 144 673 | }, 674 | { 675 | "display": 1, 676 | "name": "CJ物流", 677 | "id": 145 678 | }, 679 | { 680 | "display": 1, 681 | "name": "央广购物", 682 | "id": 146 683 | }, 684 | { 685 | "display": 1, 686 | "name": "易时联国际速递", 687 | "id": 147 688 | }, 689 | { 690 | "display": 1, 691 | "name": "风先生", 692 | "id": 148 693 | }, 694 | { 695 | "display": 1, 696 | "name": "耀启物流", 697 | "id": 149 698 | }, 699 | { 700 | "display": 1, 701 | "name": "内蒙EMS", 702 | "id": 150 703 | }, 704 | { 705 | "display": 1, 706 | "name": "小红帽", 707 | "id": 151 708 | }, 709 | { 710 | "display": 1, 711 | "name": "PCA", 712 | "id": 152 713 | }, 714 | { 715 | "display": 1, 716 | "name": "诚义物流", 717 | "id": 153 718 | }, 719 | { 720 | "display": 1, 721 | "name": "秦远国际物流", 722 | "id": 154 723 | }, 724 | { 725 | "display": 1, 726 | "name": "万家康快递", 727 | "id": 155 728 | }, 729 | { 730 | "display": 1, 731 | "name": "澳邮中国快运", 732 | "id": 156 733 | }, 734 | { 735 | "display": 1, 736 | "name": "一号线国际速递", 737 | "id": 157 738 | }, 739 | { 740 | "display": 1, 741 | "name": "EWE国际物流", 742 | "id": 158 743 | }, 744 | { 745 | "display": 1, 746 | "name": "爱送配送", 747 | "id": 159 748 | }, 749 | { 750 | "display": 1, 751 | "name": "POSTNZ", 752 | "id": 160 753 | }, 754 | { 755 | "display": 1, 756 | "name": "FASTGO", 757 | "id": 161 758 | }, 759 | { 760 | "display": 1, 761 | "name": "天越物流", 762 | "id": 162 763 | }, 764 | { 765 | "display": 1, 766 | "name": "德中物流", 767 | "id": 163 768 | }, 769 | { 770 | "display": 1, 771 | "name": "行必达", 772 | "id": 164 773 | }, 774 | { 775 | "display": 1, 776 | "name": "EFS快递", 777 | "id": 165 778 | }, 779 | { 780 | "display": 1, 781 | "name": "中邮速递", 782 | "id": 166 783 | }, 784 | { 785 | "display": 1, 786 | "name": "一号仓", 787 | "id": 167 788 | }, 789 | { 790 | "display": 1, 791 | "name": "速通达跨境物流", 792 | "id": 168 793 | }, 794 | { 795 | "display": 1, 796 | "name": "五亨国际", 797 | "id": 170 798 | }, 799 | { 800 | "display": 1, 801 | "name": "迅物流", 802 | "id": 171 803 | }, 804 | { 805 | "display": 1, 806 | "name": "中环国际_澳洲", 807 | "id": 172 808 | }, 809 | { 810 | "display": 1, 811 | "name": "美仓快递", 812 | "id": 173 813 | }, 814 | { 815 | "display": 1, 816 | "name": "澳通速递", 817 | "id": 174 818 | }, 819 | { 820 | "display": 1, 821 | "name": "济南猎豹速递", 822 | "id": 175 823 | }, 824 | { 825 | "display": 1, 826 | "name": "澳运速递", 827 | "id": 176 828 | }, 829 | { 830 | "display": 1, 831 | "name": "优达生鲜", 832 | "id": 177 833 | }, 834 | { 835 | "display": 1, 836 | "name": "P2UEXPRESS", 837 | "id": 178 838 | }, 839 | { 840 | "display": 1, 841 | "name": "黑猫宅急便", 842 | "id": 179 843 | }, 844 | { 845 | "display": 1, 846 | "name": "快客快运", 847 | "id": 180 848 | }, 849 | { 850 | "display": 1, 851 | "name": "当当物流", 852 | "id": 181 853 | }, 854 | { 855 | "display": 1, 856 | "name": "百世快运", 857 | "id": 182 858 | }, 859 | { 860 | "display": 1, 861 | "name": "艾瑞斯远", 862 | "id": 183 863 | }, 864 | { 865 | "display": 1, 866 | "name": "PCAExpress", 867 | "id": 184 868 | }, 869 | { 870 | "display": 1, 871 | "name": "斑马物联网", 872 | "id": 186 873 | }, 874 | { 875 | "display": 1, 876 | "name": "泛捷国际速运", 877 | "id": 187 878 | }, 879 | { 880 | "display": 1, 881 | "name": "黄马甲快递", 882 | "id": 188 883 | }, 884 | { 885 | "display": 1, 886 | "name": "蓝天快递", 887 | "id": 189 888 | }, 889 | { 890 | "display": 1, 891 | "name": "银河物流", 892 | "id": 190 893 | }, 894 | { 895 | "display": 1, 896 | "name": "海龟国际速运", 897 | "id": 191 898 | }, 899 | { 900 | "display": 1, 901 | "name": "申通国际", 902 | "id": 192 903 | }, 904 | { 905 | "display": 1, 906 | "name": "安鲜达", 907 | "id": 193 908 | }, 909 | { 910 | "display": 1, 911 | "name": "闪送", 912 | "id": 194 913 | }, 914 | { 915 | "display": 1, 916 | "name": "我的物流", 917 | "id": 195 918 | }, 919 | { 920 | "display": 1, 921 | "name": "黑狗快递", 922 | "id": 196 923 | }, 924 | { 925 | "display": 1, 926 | "name": "富腾达快递", 927 | "id": 197 928 | }, 929 | { 930 | "display": 1, 931 | "name": "程光快递", 932 | "id": 198 933 | }, 934 | { 935 | "display": 1, 936 | "name": "吉祥邮", 937 | "id": 199 938 | }, 939 | { 940 | "display": 1, 941 | "name": "天时海淘转运", 942 | "id": 200 943 | }, 944 | { 945 | "display": 1, 946 | "name": "澳大利亚AOL快递", 947 | "id": 201 948 | }, 949 | { 950 | "display": 1, 951 | "name": "亿翔快递", 952 | "id": 202 953 | }, 954 | { 955 | "display": 1, 956 | "name": "中澳国际物流", 957 | "id": 203 958 | }, 959 | { 960 | "display": 1, 961 | "name": "全速快递", 962 | "id": 204 963 | }, 964 | { 965 | "display": 1, 966 | "name": "极客快递", 967 | "id": 205 968 | }, 969 | { 970 | "display": 1, 971 | "name": "金岸物流", 972 | "id": 206 973 | }, 974 | { 975 | "display": 1, 976 | "name": "中联速运", 977 | "id": 207 978 | }, 979 | { 980 | "display": 1, 981 | "name": "e邮客", 982 | "id": 208 983 | }, 984 | { 985 | "display": 1, 986 | "name": "天马迅达", 987 | "id": 209 988 | }, 989 | { 990 | "display": 1, 991 | "name": "DHL", 992 | "id": 220 993 | }, 994 | { 995 | "display": 1, 996 | "name": "中铁物流", 997 | "id": 221 998 | }, 999 | { 1000 | "display": 1, 1001 | "name": "美淘优递", 1002 | "id": 222 1003 | }, 1004 | { 1005 | "display": 1, 1006 | "name": "澳速物流", 1007 | "id": 223 1008 | }, 1009 | { 1010 | "display": 1, 1011 | "name": "转运中国", 1012 | "id": 224 1013 | }, 1014 | { 1015 | "display": 1, 1016 | "name": "安能快递", 1017 | "id": 225 1018 | }, 1019 | { 1020 | "display": 1, 1021 | "name": "华美国际快递", 1022 | "id": 226 1023 | }, 1024 | { 1025 | "display": 1, 1026 | "name": "佳慧尔快递", 1027 | "id": 227 1028 | }, 1029 | { 1030 | "display": 1, 1031 | "name": "西邮寄", 1032 | "id": 228 1033 | }, 1034 | { 1035 | "display": 1, 1036 | "name": "九曳供应链", 1037 | "id": 229 1038 | }, 1039 | { 1040 | "display": 1, 1041 | "name": "速必达希杰物流", 1042 | "id": 230 1043 | }, 1044 | { 1045 | "display": 1, 1046 | "name": "盛辉物流", 1047 | "id": 231 1048 | }, 1049 | { 1050 | "display": 1, 1051 | "name": "虎跃快运", 1052 | "id": 232 1053 | }, 1054 | { 1055 | "display": 1, 1056 | "name": "品骏快递", 1057 | "id": 233 1058 | }, 1059 | { 1060 | "display": 1, 1061 | "name": "狂派速递", 1062 | "id": 234 1063 | }, 1064 | { 1065 | "display": 1, 1066 | "name": "永利八达通", 1067 | "id": 235 1068 | }, 1069 | { 1070 | "display": 1, 1071 | "name": "特急送", 1072 | "id": 236 1073 | }, 1074 | { 1075 | "display": 1, 1076 | "name": "捷安达国际速递", 1077 | "id": 237 1078 | }, 1079 | { 1080 | "display": 1, 1081 | "name": "C&C全球快递", 1082 | "id": 238 1083 | }, 1084 | { 1085 | "display": 1, 1086 | "name": "全时达快递", 1087 | "id": 239 1088 | }, 1089 | { 1090 | "display": 1, 1091 | "name": "香港萬威", 1092 | "id": 240 1093 | }, 1094 | { 1095 | "display": 1, 1096 | "name": "小蜜蜂邮包", 1097 | "id": 241 1098 | }, 1099 | { 1100 | "display": 1, 1101 | "name": "长江国际速递", 1102 | "id": 242 1103 | }, 1104 | { 1105 | "display": 1, 1106 | "name": "环球速运", 1107 | "id": 243 1108 | }, 1109 | { 1110 | "display": 1, 1111 | "name": "笨鸟国际", 1112 | "id": 244 1113 | }, 1114 | { 1115 | "display": 1, 1116 | "name": "澳洲极地快递", 1117 | "id": 245 1118 | }, 1119 | { 1120 | "display": 1, 1121 | "name": "汇通天下", 1122 | "id": 246 1123 | }, 1124 | { 1125 | "display": 1, 1126 | "name": "晟邦物流", 1127 | "id": 247 1128 | }, 1129 | { 1130 | "display": 1, 1131 | "name": "速购速递", 1132 | "id": 248 1133 | }, 1134 | { 1135 | "display": 1, 1136 | "name": "易客满", 1137 | "id": 249 1138 | }, 1139 | { 1140 | "display": 1, 1141 | "name": "中通快运", 1142 | "id": 250 1143 | }, 1144 | { 1145 | "display": 1, 1146 | "name": "方舟国际速递", 1147 | "id": 251 1148 | }, 1149 | { 1150 | "display": 1, 1151 | "name": "新西兰邮政", 1152 | "id": 252 1153 | }, 1154 | { 1155 | "display": 1, 1156 | "name": "壹米滴答", 1157 | "id": 253 1158 | }, 1159 | { 1160 | "display": 1, 1161 | "name": "金社裕农物流", 1162 | "id": 254 1163 | }, 1164 | { 1165 | "display": 1, 1166 | "name": "安世通", 1167 | "id": 255 1168 | } 1169 | ] 1170 | } 1171 | } 1172 | --------------------------------------------------------------------------------