| | |
| | | package com.yeshi.fanli.service.impl.user;
|
| | |
|
| | | import java.math.BigDecimal;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import net.sf.json.JSONArray;
|
| | | import net.sf.json.JSONObject;
|
| | |
|
| | | import org.springframework.core.task.TaskExecutor;
|
| | | import org.springframework.stereotype.Service;
|
| | | import org.yeshi.utils.DateUtil;
|
| | | import org.yeshi.utils.JsonUtil;
|
| | | import org.yeshi.utils.taobao.TbImgUtil;
|
| | |
|
| | | import com.google.gson.Gson;
|
| | | import com.google.gson.GsonBuilder;
|
| | | import com.yeshi.fanli.dao.mybatis.share.UserShareGoodsGroupMapper;
|
| | | import com.yeshi.fanli.dto.HongBao;
|
| | | import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
|
| | | import com.yeshi.fanli.entity.goods.CommonGoods;
|
| | | import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
| | | import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord.ShareSourceTypeEnum;
|
| | | import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
|
| | | import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
| | | import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
|
| | | import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
|
| | | import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
| | | import com.yeshi.fanli.service.inter.user.UserShareGoodsGroupService;
|
| | | import com.yeshi.fanli.util.Constant;
|
| | | import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
| | | import com.yeshi.fanli.util.RedisManager;
|
| | | import com.yeshi.fanli.util.StringUtil;
|
| | | import com.yeshi.fanli.util.factory.CommonGoodsFactory;
|
| | | import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
| | |
|
| | | @Service
|
| | | public class UserShareGoodsGroupServiceImpl implements UserShareGoodsGroupService {
|
| | |
|
| | | @Resource(name = "taskExecutor")
|
| | | private TaskExecutor executor;
|
| | | |
| | | @Resource
|
| | | private HongBaoManageService hongBaoManageService;
|
| | | |
| | | @Resource
|
| | | private RedisManager redisManager;
|
| | |
|
| | | @Resource
|
| | | private CommonGoodsService commonGoodsService;
|
| | |
| | |
|
| | | @Override
|
| | | public UserShareGoodsGroup getSingleGoods(Long cid, Long uid) {
|
| | | return userShareGoodsGroupMapper.getSingleGoods(cid, uid);
|
| | | return userShareGoodsGroupMapper.getSingleGoods(ShareSourceTypeEnum.goodsDetail,cid, uid );
|
| | | }
|
| | |
|
| | | @Override
|
| | |
| | | }
|
| | |
|
| | | @Override
|
| | | public UserShareGoodsGroup getNewestRecord(Long uid, Long auctionId) {
|
| | | return userShareGoodsGroupMapper.getNewestRecord(uid, auctionId);
|
| | | public UserShareGoodsGroup getNewestRecord(Long uid, Long auctionId, Integer goodsType) {
|
| | | return userShareGoodsGroupMapper.getNewestRecord(uid, auctionId, goodsType);
|
| | | }
|
| | |
|
| | | |
| | | /**
|
| | | * 更新浏览记录数据
|
| | | * @param uid
|
| | | * @param auctionId
|
| | | */
|
| | | @Override
|
| | | public void updateBrowseRecord (Long uid, Long auctionId, int count) throws UserShareGoodsRecordException{
|
| | | if (uid == null) {
|
| | | throw new UserShareGoodsRecordException(1, "用户ID不能为空");
|
| | | }
|
| | | |
| | | if (auctionId == null) {
|
| | | throw new UserShareGoodsRecordException(1, "商品ID不能为空");
|
| | | }
|
| | | |
| | | UserShareGoodsGroup newestRecord = getNewestRecord(uid, auctionId);
|
| | | |
| | | if (newestRecord != null) {
|
| | | // 注意: 修改记录数据、但不可修改更新设置
|
| | | UserShareGoodsGroup shareGoodsGroup = new UserShareGoodsGroup(newestRecord.getId());
|
| | | |
| | | shareGoodsGroup.setTotalBrowse(newestRecord.getTotalBrowse() + count);
|
| | | |
| | | Date browseTime = newestRecord.getBrowseTime();
|
| | | if (DateUtil.isSameDay(browseTime, new Date())) {
|
| | | shareGoodsGroup.setTodayBrowse(newestRecord.getTodayBrowse() + count);
|
| | | } else {
|
| | | shareGoodsGroup.setTodayBrowse(count);
|
| | | shareGoodsGroup.setBrowseTime(new Date());
|
| | | }
|
| | | |
| | | updateByPrimaryKeySelective(shareGoodsGroup);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 更新订单记录数据
|
| | |
| | | * @param auctionId
|
| | | */
|
| | | @Override
|
| | | public void updateOrderRecord (Long uid, TaoBaoGoodsBrief taoBaoGoodsBrief, int count) |
| | | throws UserShareGoodsRecordException{
|
| | | public void updateOrderRecord (HongBao hongBao, int goodsType) throws UserShareGoodsRecordException{
|
| | |
|
| | | if (hongBao == null) {
|
| | | throw new UserShareGoodsRecordException(1, "hongBao不能为空");
|
| | | }
|
| | | |
| | | if (hongBao.getUserInfo() == null) {
|
| | | throw new UserShareGoodsRecordException(1, "用户信息不能为空");
|
| | | }
|
| | | |
| | | Long uid = hongBao.getUserInfo().getId();
|
| | | if (uid == null) {
|
| | | throw new UserShareGoodsRecordException(1, "用户ID不能为空");
|
| | | }
|
| | |
|
| | | if (taoBaoGoodsBrief == null) {
|
| | | throw new UserShareGoodsRecordException(1, "商品不能为空");
|
| | | if (hongBao.getAuctionId() == null) {
|
| | | throw new UserShareGoodsRecordException(1, "商品ID不能为空");
|
| | | }
|
| | |
|
| | | UserShareGoodsGroup newestRecord = getNewestRecord(uid, taoBaoGoodsBrief.getAuctionId());
|
| | | UserShareGoodsGroup newestRecord = getNewestRecord(uid, hongBao.getAuctionId(), goodsType);
|
| | |
|
| | | if (newestRecord != null) {
|
| | | // 注意: 修改记录数据、但不可修改更新设置
|
| | | // 更新订单数量
|
| | | UserShareGoodsGroup shareGoodsGroup = new UserShareGoodsGroup(newestRecord.getId());
|
| | | shareGoodsGroup.setTotalOrder(newestRecord.getTotalOrder() + count);
|
| | | Integer totalOrder = newestRecord.getTotalOrder();
|
| | |
|
| | | // 单个商品预计金额
|
| | | String rateStr = hongBaoManageService.get("hongbao_goods_proportion");
|
| | | BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(taoBaoGoodsBrief, new BigDecimal(rateStr));
|
| | | if (totalOrder == null) {
|
| | | totalOrder = 0;
|
| | | }
|
| | | shareGoodsGroup.setTotalOrder(totalOrder + 1);
|
| | |
|
| | | // 更新预计收益
|
| | | BigDecimal resultMoney = MoneyBigDecimalUtil.mul(new BigDecimal(shareGoodsGroup.getTotalOrder()), money);
|
| | | BigDecimal totalMoney = newestRecord.getTotalMoney();
|
| | | if (totalMoney == null) {
|
| | | totalMoney = new BigDecimal(0);
|
| | | }
|
| | | BigDecimal resultMoney = MoneyBigDecimalUtil.add(totalMoney, hongBao.getMoney());
|
| | | shareGoodsGroup.setTotalMoney(resultMoney);
|
| | |
|
| | | updateByPrimaryKeySelective(shareGoodsGroup);
|
| | | }
|
| | | }
|
| | |
|
| | | |
| | | /**
|
| | | * 更新订单记录数据
|
| | | * @param uid
|
| | | * @param auctionId
|
| | | */
|
| | | @Override
|
| | | public JSONObject getGoodsGroup(Long recordId) throws UserShareGoodsRecordException {
|
| | | public void updateBrowseRecord (Long uid, Long auctionId, int count) |
| | | throws UserShareGoodsRecordException{
|
| | |
|
| | | List<CommonGoods> listUpadteCommonGoods = new ArrayList<CommonGoods>();
|
| | |
|
| | | JSONArray array = new JSONArray();
|
| | |
|
| | | List<UserShareGoodsGroup> list = listByRecordId(recordId);
|
| | | if (list != null && list.size() > 0) {
|
| | |
|
| | | Date nowDate = new Date();
|
| | | long nh = 1000 * 60 * 60;
|
| | | long nd = 1000 * 24 * 60 * 60;
|
| | |
|
| | | Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
|
| | | .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
|
| | |
|
| | | Map<String, String> map = hongBaoManageService.convertMap();
|
| | | String proportion = map.get("hongbao_goods_proportion");
|
| | | String fcRate = map.get("hongbao_fc_ratio");
|
| | |
|
| | | for (UserShareGoodsGroup userShareGoodsGroup : list) {
|
| | | CommonGoods commonGoods = userShareGoodsGroup.getCommonGoods();
|
| | | if (commonGoods == null) {
|
| | | continue;
|
| | | }
|
| | |
|
| | | TaoBaoGoodsBrief goodsBrief = null;
|
| | | JSONObject dataObject = new JSONObject();
|
| | |
|
| | | // 更新一个小时之内的商品不再更新
|
| | | Integer goodsState = commonGoods.getState();
|
| | | // 状态未下架时进行更新
|
| | | if (goodsState != null && (goodsState != 1 || !goodsState.equals(1))) {
|
| | | Date updateTime = commonGoods.getUpdateTime();
|
| | | if (updateTime != null) {
|
| | | long diff = nowDate.getTime() - updateTime.getTime();
|
| | | // 计算差多少小时
|
| | | long hour = diff % nd / nh;
|
| | | if (hour > 1) {
|
| | | try {
|
| | | if (commonGoods.getGoodsType() == CommonGoods.GOODS_TYPE_TB) {
|
| | | goodsBrief = redisManager.getTaoBaoGoodsBrief(commonGoods.getGoodsId());
|
| | | goodsBrief.setState(0);
|
| | | goodsState = 0;
|
| | | }
|
| | | } catch (TaobaoGoodsDownException e) {
|
| | | // 已下架
|
| | | goodsState = 1;
|
| | | commonGoods.setState(1);
|
| | | e.printStackTrace();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | if (goodsBrief == null) {
|
| | | goodsBrief = TaoBaoUtil.convert(commonGoods);
|
| | | } else {
|
| | | CommonGoods upadeteCommonGoods = CommonGoodsFactory.create(goodsBrief);
|
| | | upadeteCommonGoods.setState(goodsState);
|
| | | listUpadteCommonGoods.add(upadeteCommonGoods);
|
| | | }
|
| | |
|
| | | // 改变图片尺寸
|
| | | String pictUrl = commonGoods.getPicture();
|
| | | if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) {
|
| | | commonGoods.setPicture(TbImgUtil.getTBSize320Img(pictUrl));
|
| | | }
|
| | |
|
| | | String json = gson
|
| | | .toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion, fcRate));
|
| | |
|
| | | dataObject.put("groupId", userShareGoodsGroup.getId());
|
| | | dataObject.put("goods", json);
|
| | | array.add(dataObject);
|
| | | if (uid == null) {
|
| | | throw new UserShareGoodsRecordException(1, "用户ID不能为空");
|
| | | }
|
| | | |
| | | if (auctionId == null) {
|
| | | throw new UserShareGoodsRecordException(1, "商品Id不能为空");
|
| | | }
|
| | | |
| | | UserShareGoodsGroup group = getNewestRecord(uid, auctionId, Constant.SOURCE_TYPE_TAOBAO);
|
| | | |
| | | if (group != null) {
|
| | | UserShareGoodsGroup shareGoodsGroup = new UserShareGoodsGroup(group.getId());
|
| | | // 累计浏览
|
| | | Integer totalBrowse = group.getTotalBrowse();
|
| | | if (totalBrowse == null) {
|
| | | totalBrowse = 0;
|
| | | }
|
| | |
|
| | | shareGoodsGroup.setTotalBrowse(totalBrowse + count);
|
| | | |
| | | // 今日浏览
|
| | | Date date = new Date();
|
| | | Date browseTime = group.getBrowseTime();
|
| | | if (DateUtil.isSameDay(browseTime, date)) {
|
| | | shareGoodsGroup.setTodayBrowse(group.getTodayBrowse() + count);
|
| | | } else {
|
| | | shareGoodsGroup.setTodayBrowse(count);
|
| | | }
|
| | | shareGoodsGroup.setBrowseTime(date);
|
| | | |
| | | userShareGoodsGroupMapper.updateByPrimaryKeySelective(shareGoodsGroup);
|
| | | }
|
| | | |
| | | JSONObject data = new JSONObject();
|
| | | data.put("count", list.size());
|
| | | data.put("result_list", array);
|
| | |
|
| | | if (listUpadteCommonGoods.size() > 0) {
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | try {
|
| | | // 更新简版信息
|
| | | commonGoodsService.updateBatchCommonGoods(listUpadteCommonGoods);
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | |
| | | return data;
|
| | | }
|
| | |
|
| | | |
| | | |
| | | |
| | | @Override
|
| | | public void updateBrowseNum(Long uid, Long id, int goodsType) throws UserShareGoodsRecordException{
|
| | | |
| | | if (uid == null) {
|
| | | throw new UserShareGoodsRecordException(1, "用户ID不能为空");
|
| | | }
|
| | | |
| | | if (id == null) {
|
| | | throw new UserShareGoodsRecordException(1, "商品Id不能为空");
|
| | | }
|
| | | |
| | | UserShareGoodsGroup group = getNewestRecord(uid, id, goodsType);
|
| | | if (group != null) {
|
| | | UserShareGoodsGroup shareGoodsGroup = new UserShareGoodsGroup(group.getId());
|
| | | // 累计浏览
|
| | | Integer totalBrowse = group.getTotalBrowse();
|
| | | if (totalBrowse == null) {
|
| | | totalBrowse = 0;
|
| | | }
|
| | | shareGoodsGroup.setTotalBrowse(totalBrowse + 1);
|
| | | |
| | | // 今日浏览
|
| | | Date date = new Date();
|
| | | Date browseTime = group.getBrowseTime();
|
| | | if (DateUtil.isSameDay(browseTime, date)) {
|
| | | shareGoodsGroup.setTodayBrowse(group.getTodayBrowse() + 1);
|
| | | } else {
|
| | | shareGoodsGroup.setTodayBrowse(1);
|
| | | }
|
| | | shareGoodsGroup.setBrowseTime(date);
|
| | | userShareGoodsGroupMapper.updateByPrimaryKeySelective(shareGoodsGroup);
|
| | | }
|
| | | }
|
| | | }
|