fanli/src/main/java/com/yeshi/fanli/controller/TestController.java
@@ -200,48 +200,6 @@ out.close(); } @RequestMapping(value = "insetDynamicInfo") public void insetDynamicInfo(PrintWriter out) { String content= "emoji六一儿童节来了\r\n" + "老少儿童们到快活起来吧:用童真憧憬人生\r\n" + "emoji用童趣装点人生emoji\r\n" + "用童话描绘人生emoji\r\n" + "用童心度过人生 emoji \r\n" + "--------------------- \r\n今天 : 6月1日 ️ 星期四\r\n" + "天气 : 晴转多云 15-24℃\r\n" + "各位亲爱的你 早安~\r\n" + "购物省钱返利券App:【邀请链接】\r\n" + "我的邀请码:【邀请码】" ; dynamicInfoService.insertInviteMaterial(content, null, null, null); String content2= "emoji六一儿童节来了\r\n" + "老少儿童们到快活起来吧:用童真憧憬人生\r\n" + "emoji用童趣装点人生emoji\r\n" + "用童话描绘人生emoji\r\n" + "用童心度过人生 emoji \r\n" + "--------------------- \r\n今天 : 6月1日 ️ 星期四\r\n" + "天气 : 晴转多云 15-24℃\r\n" + "各位亲爱的你 早安~\r\n" + "购物省钱返利券App:【邀请链接】\r\n" + "我的邀请码:【邀请码】" ; dynamicInfoService.insertInviteMaterial(content2, "http://ec-1255749512.file.myqcloud.com/img/invite/53420a05de1644bd947fa23800ab0131.jpeg", null, null); } @RequestMapping(value = "insertShop") public void insertShop(PrintWriter out) { try { dynamicInfoService.insertShopInfo(); dynamicInfoService.insertTimeHotSale(); dynamicInfoService.insertTimeRecommend(); } catch (Exception e) { e.printStackTrace(); } } /** * 清除缓存 @@ -286,7 +244,7 @@ "购物省钱返利券App:【邀请链接】\r\n" + "我的邀请码:【邀请码】" ; dynamicInfoService.insertInviteMaterial(content, null); dynamicInfoService.insertInviteMaterial(content, null, null, null); String content2= "emoji六一儿童节来了\r\n" + @@ -300,7 +258,7 @@ "购物省钱返利券App:【邀请链接】\r\n" + "我的邀请码:【邀请码】" ; dynamicInfoService.insertInviteMaterial(content2, "http://ec-1255749512.file.myqcloud.com/img/invite/53420a05de1644bd947fa23800ab0131.jpeg"); dynamicInfoService.insertInviteMaterial(content2, "http://ec-1255749512.file.myqcloud.com/img/invite/53420a05de1644bd947fa23800ab0131.jpeg", null, null); } fanli/src/main/java/com/yeshi/fanli/controller/client/ShareController.java
@@ -9,6 +9,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -70,6 +71,9 @@ @Controller(value = "ShareController1") @RequestMapping("api/v1/share") public class ShareController { @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private ShareGoodsService shareGoodsService; @@ -219,36 +223,40 @@ // 添加分享记录 BigDecimal rate = hongBaoManageService.getShareRate(); BigDecimal shareMoney = TaoBaoUtil.getShareGoodsHongBaoInfo(taoBaoLink.getGoods(), rate); data.put("shareMoney", "¥" + shareMoney.toString()); data.put("shareId", userShareGoodsRecordService.saveSingleShareRecord(uid, auctionId)); out.print(JsonUtil.loadTrueResult(data)); // 异步操作 com.yeshi.fanli.util.ThreadUtil.run(new Runnable() { @Override public void run() { //异步操作 添加分享记录 UserShareGoodsHistory history = new UserShareGoodsHistory(); history.setUser(new UserInfo(uid)); history.setHongbao(shareMoney); history.setCreateTime(new Date()); history.setGoodsType(UserShareGoodsHistory.TYPE_TAOBAO); history.setTkCode(taoBaoLink.getTaoToken()); history.setLink(taoBaoLink.getClickUrl()); history.setQuanLink(taoBaoLink.getCouponLink()); history.setCreateTime(new Date()); history.setGoodsId(taoBaoLink.getGoods().getAuctionId()); history.setGoodsType(UserShareGoodsHistory.TYPE_TAOBAO); history.setHongbao(TaoBaoUtil.getShareGoodsHongBaoInfo(taoBaoLink.getGoods(), rate)); history.setPostPicture(taoBaoLink.getGoods().getPictUrl()); List<String> imgList = taoBaoLink.getGoods().getImgList(); if (imgList == null) { imgList = new ArrayList<>(); } history.setPictures(JsonUtil.getGson().toJson(imgList)); history.setUser(new UserInfo(uid)); history.setPostPicture(taoBaoLink.getGoods().getPictUrl()); data.put("shareMoney", "¥" + history.getHongbao().toString()); out.print(JsonUtil.loadTrueResult(data)); // 异步操作 com.yeshi.fanli.util.ThreadUtil.run(new Runnable() { @Override public void run() { shareGoodsService.addShareGoodsHistory(history); } }); return; } catch (UserShareGoodsRecordException e) { out.print(JsonUtil.loadFalseResult(e.getMsg())); e.printStackTrace(); } catch (ShareGoodsException e) { try { monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, e.getCode(), 0, "分享出错")); @@ -619,7 +627,6 @@ /** * 查询顶部分类 * @param acceptData @@ -647,29 +654,44 @@ return; } JSONObject data = new JSONObject(); JSONObject data = new JSONObject(); // 分类id long cid = dynamicInfo.getClassId(); if (cid == 1) { // 热销单品 // 文字内容 data.put("title", JsonUtil.getApiCommonGson().toJson(dynamicInfo.getTitle())); String title =""; List<ClientTextStyleVO> listTitle = dynamicInfo.getTitle(); if (listTitle != null && listTitle.size() > 0) { for (ClientTextStyleVO textStyleVO : listTitle) { title += textStyleVO.getContent(); } } data.put("title", title); data.put("content", "我在返利券发现了一个很好的商品,快来看看~"); // 分享奖金 ClientTextStyleVO desc = dynamicInfo.getDesc(); String content = desc.getContent(); int index = content.indexOf("¥"); data.put("shareMoney", new BigDecimal(content.substring(index + 1, content.length()))); // 分享链接 String url = String.format("http://%s/share_mushGoods.html?uid=%s&shareId=%s&source=%s", configService.getH5Host(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY), id, "dynamic"); // 商品分享链接 List<GoodsPicture> imgs2 = dynamicInfo.getImgs(); GoodsPicture goodsPicture = imgs2.get(0); Long auctionId = goodsPicture.getGoods().getAuctionId(); String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(), Constant.systemCommonConfig.getShareGoodsPagePath(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY), auctionId + ""); String shortLink = HttpUtil.getShortLink(url); if (!StringUtil.isNullOrEmpty(shortLink)) { url = shortLink; } data.put("clickUrl", url); // 分享文字图标 // 分享提示图片 String imgs = configService.get("goods_share_notify_imgs"); JSONArray array = JSONArray.fromObject(imgs); int p = (int) (array.size() * Math.random()); @@ -677,66 +699,73 @@ data.put("notifyPicture", array.optString(p)); } UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService.getByUid(uid); String relationId = null; if (extraInfo != null && extraInfo.getRelationId() != null && extraInfo.getRelationValid() != null && extraInfo.getRelationValid() == true) { relationId = extraInfo.getRelationId(); } TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(uid, 42472466270L, relationId); TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(uid, auctionId, relationId); data.put("pictUrl", TbImgUtil.getTBSizeImg(goodsPicture.getUrl(), 500)); // 淘宝口令 data.put("token", taoBaoLink.getTaoToken()); // 商品图片链接 data.put("shareLink", TbImgUtil.getTBSizeImg(taoBaoLink.getGoods().getPictUrl(), 500)); // 帮助链接 data.put("helpLink","https://img.alicdn.com/imgextra/i1/2200656425615/O1CN01dst9HQ1rLiPN7xmhD_!!0-item_pic.jpg"); data.put("helpLink","http://apph5.yeshitv.com/apppage/all_help_content.html?id=148&from=singlemessage&isappinstalled=0"); // 分享提醒 data.put("notifyDesc", configService.get("goods_share_notify")); // 分享记录id data.put("shareId", userShareGoodsRecordService.saveSingleShareRecord(uid, auctionId)); } else if (cid == 2) { // 推荐好货 String picUrl = null; List<TaoBaoGoodsBrief> listGoods = new ArrayList<TaoBaoGoodsBrief>(); List<GoodsPicture> listImgs = dynamicInfo.getImgs(); for (GoodsPicture goodsPicture: listImgs) { TaoBaoGoodsBriefExtra goods = goodsPicture.getGoods(); listGoods.add(goods); } String title = ""; List<ClientTextStyleVO> listTitle = dynamicInfo.getTitle(); for (ClientTextStyleVO textStyleVO: listTitle) { title = title + textStyleVO.getContent(); if (picUrl == null) { picUrl = goodsPicture.getUrl(); } if (title.length() > 250) { title = title.substring(0, 250); } // 文字内容 data.put("title", JsonUtil.getApiCommonGson().toJson(dynamicInfo.getTitle())); String title =""; List<ClientTextStyleVO> listTitle = dynamicInfo.getTitle(); if (listTitle != null && listTitle.size() > 0) { for (ClientTextStyleVO textStyleVO : listTitle) { title += textStyleVO.getContent(); } } data.put("title", title); data.put("content", "我在返利券发现了一个很好的商品,快来看看~"); // 分享奖金 ClientTextStyleVO desc = dynamicInfo.getDesc(); String content = desc.getContent(); int index = content.indexOf("¥"); data.put("shareMoney", new BigDecimal(content.substring(index + 1, content.length()))); // 分享文字图标 // 分享链接 ShareInfoDTO shareInfo = userShareGoodsRecordService.saveShareRecord(uid, ShareSourceTypeEnum.activity, title, listGoods); data.put("shareId", shareInfo.getShareId()); data.put("clickUrl", shareInfo.getCodeUrl()); data.put("pictUrl", TbImgUtil.getTBSizeImg(picUrl, 500)); // 帮助链接 data.put("helpLink","http://apph5.yeshitv.com/apppage/all_help_content.html?id=148&from=singlemessage&isappinstalled=0"); // 分享提醒 data.put("notifyDesc", configService.get("goods_share_notify")); // 分享提醒语 String notifyImgs = configService.get("goods_share_notify_imgs"); JSONArray array = JSONArray.fromObject(notifyImgs); int p = (int) (array.size() * Math.random()); if (p < array.size()) { data.put("notifyPicture", array.optString(p)); } ShareInfoDTO shareInfo = userShareGoodsRecordService.saveShareRecord(uid, ShareSourceTypeEnum.activity, title, listGoods); data.put("shareId", shareInfo.getShareId()); data.put("clickUrl", shareInfo.getCodeUrl()); // 商品图片链接 data.put("shareLink", shareInfo.getShareUrl()); // 帮助链接 data.put("helpLink","https://img.alicdn.com/imgextra/i1/2200656425615/O1CN01dst9HQ1rLiPN7xmhD_!!0-item_pic.jpg"); // 分享提醒 data.put("notifyDesc", configService.get("goods_share_notify")); } else if (cid == 4) { // 邀请分享 @@ -751,18 +780,31 @@ Integer showType = dynamicInfo.getShowType(); if (showType == 0) { // 无图分享 String shortLink = UserUtil.getInviteShortLink(uid); String title =""; List<ClientTextStyleVO> listTitle = dynamicInfo.getTitle(); if (listTitle != null && listTitle.size() > 0) { for (ClientTextStyleVO textStyleVO: listTitle) { String content = textStyleVO.getContent(); content = content.replace("邀请码", inviteCode); content = content.replace("邀请链接", shortLink); textStyleVO .setContent(content); title += textStyleVO.getContent(); } data.put("title", listTitle); } title = title.replace("【邀请码】", inviteCode); title = title.replace("【邀请链接】", UserUtil.getInviteShortLink(uid)); data.put("title", title); } else { // 有图分享 // 1、邀请规则 // 邀请链接 String shortLink = HttpUtil.getShortLink("http://" + Constant.wxGZConfig.getLoginHost() + "/" + Constant.systemCommonConfig.getProjectName() + "/client/threeShareNew?uid=" + uid); data.put("inviteLink", shortLink); data.put("inviteCode", inviteCode); // 邀请图片 List<GoodsPicture> imgs = dynamicInfo.getImgs(); String imgLink = spreadUserImgService.getInviteImg(uid, imgs.get(0).getUrl(), inviteCode); data.put("imgLink", imgLink); // 邀请规则 BusinessSystem system = new BusinessSystem(); system.setCreatetime(java.lang.System.currentTimeMillis()); system.setPlatform(1); @@ -772,22 +814,24 @@ String valueN = values.getValue(); String valueBr = valueN.replace("\n", "<br><br>"); data.put("inviteRules", valueBr); // 邀请链接 String shortLink = HttpUtil.getShortLink("http://" + Constant.wxGZConfig.getLoginHost() + "/" + Constant.systemCommonConfig.getProjectName() + "/client/threeShareNew?uid=" + uid); data.put("inviteLink", shortLink); // 邀请图片 List<GoodsPicture> imgs = dynamicInfo.getImgs(); String imgLink = spreadUserImgService.getUserSpreadImg(uid, imgs.get(0).getUrl()); data.put("imgLink", imgLink); } } out.print(JsonUtil.loadTrueResult(data)); // 更新分享次数 executor.execute(new Runnable() { @Override public void run() { Integer shareCount = dynamicInfo.getShareCount(); dynamicInfo.setShareCount(shareCount + 1); dynamicInfoService.updateShareCount(dynamicInfo); } }); } catch (Exception e) { out.print(JsonUtil.loadFalseResult("分享记录失败")); e.printStackTrace(); } } } fanli/src/main/java/com/yeshi/fanli/dao/dynamic/DynamicInfoDao.java
New file @@ -0,0 +1,207 @@ package com.yeshi.fanli.dao.dynamic; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; import com.yeshi.fanli.entity.dynamic.DynamicInfo; @Repository public class DynamicInfoDao { @Resource private MongoTemplate mongoTemplate; /** * 新增 * @param record */ public void insert(DynamicInfo record) { if (record == null) { return; } mongoTemplate.insert(record); } /** * 更新分享次数 * @param record */ public void updateShareCount(DynamicInfo record) { if (record == null) { return; } // 查询数据是存在 Query query = new Query(); query.addCriteria(Criteria.where("id").is(record.getId())); // 更新分享次数 Update update = Update.update("shareCount", record.getShareCount()); mongoTemplate.updateMulti(query, update, DynamicInfo.class); } /** * 更新分享次数 * @param record */ public void updateGoodInfo(DynamicInfo record) { if (record == null) { return; } // 查询数据是存在 Query query = new Query(); query.addCriteria(Criteria.where("id").is(record.getId())); // 更新分享次数 Update update = Update.update("imgs", record.getImgs()).set("desc", record.getDesc()); mongoTemplate.updateMulti(query, update, DynamicInfo.class); } /** * 根据id查询数据 * @param id * @return */ public DynamicInfo getById(String id) { Query query = new Query(); query.addCriteria(Criteria.where("id").is(id)); DynamicInfo info = mongoTemplate.findOne(query, DynamicInfo.class); return info; } /** * 根据id查询数据 * @param id * @return */ public DynamicInfo getByActivityId(Long activityId) { Query query = new Query(); query.addCriteria(Criteria.where("activityId").is(activityId)); DynamicInfo info = mongoTemplate.findOne(query, DynamicInfo.class); return info; } /** * 删除 * * @param id * @return */ public void deleteById(String id) { DynamicInfo info = getById(id); if (info == null ) { return; } mongoTemplate.remove(info); } /** * 删除根据时间 * * @param id * @return */ public void removeByDate(Date createTime) { Query query = new Query(); query.addCriteria(Criteria.where("createTime").lt(createTime)); query.addCriteria( new Criteria().andOperator( Criteria.where("createTime").lt(createTime), Criteria.where("classId").ne(4L) ) ); mongoTemplate.remove(query); } /** * 查询 * @param clazz * @return */ public List<DynamicInfo> query(Long cid, Long subId) { Query query = new Query(); if (subId == null) { query.addCriteria(Criteria.where("classId").is(cid)); } else { query.addCriteria( new Criteria().andOperator( Criteria.where("classId").is(cid), Criteria.where("subclassId").is(subId) ) ); } List<DynamicInfo> list = mongoTemplate.find(query, DynamicInfo.class); return list; } /** * 查询所有数据 * @param clazz * @return */ public List<DynamicInfo> query(int start, int count, Long cid, Long subId) { Query query = new Query(); if (subId == null) { query.addCriteria(Criteria.where("classId").is(cid)); } else { query.addCriteria( new Criteria().andOperator( Criteria.where("classId").is(cid), Criteria.where("subclassId").is(subId) ) ); } //分页 query.skip(start).limit(count); //排序 query.with(new Sort(Sort.Direction.DESC,"createTime")); List<DynamicInfo> list = mongoTemplate.find(query, DynamicInfo.class); return list; } public long count(Long cid, Long subId) { Query query = new Query(); if (subId == null) { query.addCriteria(Criteria.where("classId").is(cid)); } else { query.addCriteria( new Criteria().andOperator( Criteria.where("classId").is(cid), Criteria.where("subclassId").is(subId) ) ); } return mongoTemplate.count(query, DynamicInfo.class); } /** * 查询所有数据 * @param clazz * @return */ public List<DynamicInfo> queryAll() { return (List<DynamicInfo>) mongoTemplate.findAll(DynamicInfo.class); } } fanli/src/main/java/com/yeshi/fanli/dto/share/ShareInfoDTO.java
New file @@ -0,0 +1,40 @@ package com.yeshi.fanli.dto.share; public class ShareInfoDTO { // 分享记录id private Long shareId; // 分享链接 private String shareUrl; // 分享二维码 private String codeUrl; // md5 private String md5; public Long getShareId() { return shareId; } public void setShareId(Long shareId) { this.shareId = shareId; } public String getShareUrl() { return shareUrl; } public void setShareUrl(String shareUrl) { this.shareUrl = shareUrl; } public String getCodeUrl() { return codeUrl; } public void setCodeUrl(String codeUrl) { this.codeUrl = codeUrl; } public String getMd5() { return md5; } public void setMd5(String md5) { this.md5 = md5; } } fanli/src/main/java/com/yeshi/fanli/dto/taobao/TaoBaoShopDTO.java
New file @@ -0,0 +1,70 @@ package com.yeshi.fanli.dto.taobao; import java.util.List; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; public class TaoBaoShopDTO { private Long sellerId;// 卖家ID private Integer userType;// 用户类型 0-淘宝 1-天猫 private String shopName;// 店铺名称 private String shopIcon;// 店铺图标 private String shopLink; // 店铺链接 private String brandId; // 大淘客品牌Id private String brandDes; // 大淘客品牌描述 private List<TaoBaoGoodsBrief> listGoods; public Long getSellerId() { return sellerId; } public void setSellerId(Long sellerId) { this.sellerId = sellerId; } public Integer getUserType() { return userType; } public void setUserType(Integer userType) { this.userType = userType; } public String getShopName() { return shopName; } public void setShopName(String shopName) { this.shopName = shopName; } public String getShopIcon() { return shopIcon; } public void setShopIcon(String shopIcon) { this.shopIcon = shopIcon; } public String getShopLink() { return shopLink; } public void setShopLink(String shopLink) { this.shopLink = shopLink; } public String getBrandId() { return brandId; } public void setBrandId(String brandId) { this.brandId = brandId; } public List<TaoBaoGoodsBrief> getListGoods() { return listGoods; } public void setListGoods(List<TaoBaoGoodsBrief> listGoods) { this.listGoods = listGoods; } public String getBrandDes() { return brandDes; } public void setBrandDes(String brandDes) { this.brandDes = brandDes; } } fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoBaoGoodsBriefExtra.java
@@ -34,6 +34,8 @@ @Expose private int salesType;//销量类型:1-月销量 2-2小时销量 3-今日销量 @Expose private boolean coupon; // 是否有券 public int getMoneyType() { @@ -124,4 +126,12 @@ this.collected = collected; } public boolean isCoupon() { return coupon; } public void setCoupon(boolean coupon) { this.coupon = coupon; } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java
@@ -247,8 +247,13 @@ @Override public int countUserSpreadImg(Long uid) { return (int) (spreadUserImgMapper.imgUrlCount(uid)); } @Override public String getInviteImg(Long uid, String bgImg, String inviteCode) throws Exception { UserInfo user = userInfoDao.find(UserInfo.class, uid); return qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait(), inviteCode); } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserShareGoodsRecordServiceImpl.java
@@ -231,6 +231,35 @@ singleGoodsShare(userShareGoodsRecord, goodsBrief); } @Override public Long saveSingleShareRecord(Long uid, Long auctionId) throws UserShareGoodsRecordException { if (auctionId == null) { throw new UserShareGoodsRecordException(1, "分享商品不能为空"); } if (uid == null) { throw new UserShareGoodsRecordException(1, "用户ID不能为空"); } TaoBaoGoodsBrief goodsBrief = null; try { goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId); } catch (TaobaoGoodsDownException e) { throw new UserShareGoodsRecordException(1, "商品已下架"); } UserShareGoodsRecord userShareGoodsRecord = new UserShareGoodsRecord(); userShareGoodsRecord.setUid(uid); userShareGoodsRecord.setSource(ShareSourceTypeEnum.goodsDetail); userShareGoodsRecord.setShareState(0); // 单个商品分享 singleGoodsShare(userShareGoodsRecord, goodsBrief); return userShareGoodsRecord.getId(); } @Override public void save(Long uid, ShareSourceTypeEnum source, String title, TaoBaoGoodsBrief taoBaoGoodsBrief) throws UserShareGoodsRecordException { fanli/src/main/java/com/yeshi/fanli/service/inter/user/SpreadUserImgService.java
@@ -49,4 +49,7 @@ */ String getUserSpreadImg(Long uid, String bgImg, int erCodePostionX, int erCodePostionY, int erCodeSize); String getInviteImg(Long uid, String bgImg, String inviteCode) throws Exception; } fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserShareGoodsRecordService.java
@@ -136,4 +136,13 @@ public ShareInfoDTO saveShareRecord(Long uid, ShareSourceTypeEnum source, String title, List<TaoBaoGoodsBrief> listGoods) throws UserShareGoodsRecordException; /** * 保存单个商品分享记录 * @param uid * @param auctionId * @param type * @throws UserShareGoodsRecordException */ public Long saveSingleShareRecord(Long uid, Long auctionId) throws UserShareGoodsRecordException; } fanli/src/main/java/com/yeshi/fanli/vo/dynamic/DynamicClassVO.java
New file @@ -0,0 +1,40 @@ package com.yeshi.fanli.vo.dynamic; import java.util.List; import com.google.gson.annotations.Expose; import com.yeshi.fanli.entity.bus.clazz.GoodsClass; public class DynamicClassVO { @Expose private Long id; @Expose private String name; @Expose private List<GoodsClass> listSub; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<GoodsClass> getListSub() { return listSub; } public void setListSub(List<GoodsClass> listSub) { this.listSub = listSub; } }