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 java.util.Set; 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.JsonUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.yeshi.fanli.dao.mybatis.user.UserGoodsStorageMapper; import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord.ShareSourceTypeEnum; import com.yeshi.fanli.entity.bus.user.UserGoodsStorage; import com.yeshi.fanli.entity.goods.CommonGoods; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.exception.goods.CommonGoodsException; import com.yeshi.fanli.exception.share.UserShareGoodsRecordException; import com.yeshi.fanli.exception.taobao.TaoKeApiException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.exception.user.UserGoodsStorageException; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.goods.CommonGoodsService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.user.UserGoodsStorageService; import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.factory.CommonGoodsFactory; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; @Service public class UserGoodsStorageServiceImpl implements UserGoodsStorageService { @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private RedisManager redisManager; @Resource private ConfigService configService; @Resource private CommonGoodsService commonGoodsService; @Resource private HongBaoManageService manageService; @Resource private UserGoodsStorageMapper userGoodsStorageMapper; @Resource private UserShareGoodsRecordService userShareGoodsRecordService; @Resource private HongBaoManageService hongBaoManageService; @Override public int deleteByPrimaryKey(Long id) { return userGoodsStorageMapper.deleteByPrimaryKey(id); } @Override public int insert(UserGoodsStorage record) { return userGoodsStorageMapper.insert(record); } @Override public int insertSelective(UserGoodsStorage record) { return userGoodsStorageMapper.insertSelective(record); } @Override public UserGoodsStorage selectByPrimaryKey(Long id) { return userGoodsStorageMapper.selectByPrimaryKey(id); } @Override public int updateByPrimaryKeySelective(UserGoodsStorage record) { return userGoodsStorageMapper.updateByPrimaryKeySelective(record); } @Override public int updateByPrimaryKey(UserGoodsStorage record) { return userGoodsStorageMapper.updateByPrimaryKey(record); } /** * 根据主键批量删除 * * @param list * @return */ @Override public int deleteBatchByPrimaryKey(List list) { return userGoodsStorageMapper.deleteBatchByPrimaryKey(list); } /** * 根据主键 、uid 批量删除 * @param list * @return */ @Override public int deleteBatchByUidAndPrimaryKey(Long uid, List list) { return userGoodsStorageMapper.deleteBatchByUidAndPrimaryKey(uid, list); } @Override public List listQueryByUid(long start, int count, Long uid) { return userGoodsStorageMapper.listQueryByUid(start, count, uid); } @Override public UserGoodsStorage getByUidAndAuctionId(Long uid, Long auctionId) { return userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId); } @Override public long countQueryByUid(Long uid) { return userGoodsStorageMapper.countQueryByUid(uid); } @Override public void updateShareState(Long shareId) { userGoodsStorageMapper.updateShareState(shareId); } @Override public void save(Long uid, Set auctionIds) throws UserGoodsStorageException { if (uid == null) { throw new UserGoodsStorageException(1, "用户尚未登录"); } if (auctionIds == null || auctionIds.size() == 0) { throw new UserGoodsStorageException(1, "商品ID为空"); } for (Long auctionId : auctionIds) { TaoBaoGoodsBrief goodsBrief = null; try { // 获取商品详情 goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId); } catch (TaobaoGoodsDownException e) { // 更新简版 下架状态 CommonGoods commonGoods = new CommonGoods(); commonGoods.setGoodsId(auctionId); commonGoods.setGoodsType(CommonGoods.GOODS_TYPE_TB); commonGoods.setState(CommonGoods.STATE_OFFLINE); throw new UserGoodsStorageException(1, "该商品已下架"); } // 转换简版商品信息 CommonGoods commonGoods = CommonGoodsFactory.create(goodsBrief); try { commonGoodsService.addOrUpdateCommonGoods(commonGoods); } catch (CommonGoodsException e) { e.printStackTrace(); throw new UserGoodsStorageException(1, "商品信息更新失败"); } Long cid = commonGoods.getId(); UserGoodsStorage goodsStorage = userGoodsStorageMapper.getByUidAndCid(uid, cid); if (goodsStorage != null) { // 初始话状态 goodsStorage.setState(UserGoodsStorage.STATE_NORMAL); goodsStorage.setUpdateTime(new Date()); userGoodsStorageMapper.updateByPrimaryKeySelective(goodsStorage); } else { goodsStorage = new UserGoodsStorage(); goodsStorage.setUid(uid);; goodsStorage.setState(UserGoodsStorage.STATE_NORMAL); goodsStorage.setCommonGoods(commonGoods); goodsStorage.setCreateTime(new Date()); goodsStorage.setUpdateTime(new Date()); userGoodsStorageMapper.insertSelective(goodsStorage); } } } @Override public JSONArray getMyStorage(int page, int pageSize, Long uid) throws UserGoodsStorageException { JSONArray array = new JSONArray(); List listStorage = listQueryByUid(page , pageSize, uid); if (listStorage == null || listStorage.size() == 0) { return array; } List listGid = new ArrayList(); for (UserGoodsStorage userGoodsStorage : listStorage) { CommonGoods commonGoods = userGoodsStorage.getCommonGoods(); if (commonGoods == null) { continue; } listGid.add(commonGoods.getGoodsId()); } // API网络接口验证是否在售 List listTaoKeGoods = null; try { listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid); } catch (TaoKeApiException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } BigDecimal rate = manageService.getFanLiRate(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); for (UserGoodsStorage userGoodsStorage : listStorage) { CommonGoods commonGoods = userGoodsStorage.getCommonGoods(); if (commonGoods == null) { continue; } if (listTaoKeGoods != null && listTaoKeGoods.size() > 0 ) { int state = 1; // 默认停售 Long goodsId = commonGoods.getGoodsId(); for (TaoBaoGoodsBrief taoKeGoods: listTaoKeGoods) { Long auctionId = taoKeGoods.getAuctionId(); if (goodsId == auctionId || goodsId.equals(auctionId)) { state = 0; // 在售 break; } } commonGoods.setState(state); } TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods); // 判断是否已分享 Integer storageState = userGoodsStorage.getState(); if (storageState != null && storageState == UserGoodsStorage.STATE_SHARED) { Integer goodsState = goodsBrief.getState(); if (goodsState != null && goodsState != 1) { goodsBrief.setState(2); // 已分享状态 优先显示已下架 } } String json = gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, rate.toString(), null)); JSONObject dataObject = new JSONObject(); dataObject.put("storageId", userGoodsStorage.getId()); dataObject.put("goods", json); array.add(dataObject); } return array; } @Override public boolean isExistStorage(Long uid, Long auctionId) { boolean state = false; if (uid != null && auctionId != null) { UserGoodsStorage userGoodsStorage = userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId); if (userGoodsStorage != null) { state = true; } } return state; } @Override public JSONObject shareGoods(Long uid, List listStorageID) throws UserGoodsStorageException, UserShareGoodsRecordException { List listStorage = userGoodsStorageMapper.listQueryByIds(listStorageID); if (listStorage == null || listStorage.size() == 0) { throw new UserGoodsStorageException(1, "选品库商品不存在"); } List listResult = new ArrayList(); // 还原顺序 用于制图 for (Long sid: listStorageID) { for (UserGoodsStorage torage: listStorage) { Long id = torage.getId(); if (sid == id || sid.equals(id)) { listResult.add(torage); break; } } } BigDecimal totalMoney = new BigDecimal(0.00); List listGoodsBrief = new ArrayList(); String rateStr = hongBaoManageService.get("hongbao_goods_proportion"); for (UserGoodsStorage userGoodsStorage: listResult) { CommonGoods commonGoods = userGoodsStorage.getCommonGoods(); TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods); listGoodsBrief.add(goodsBrief); BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(goodsBrief, new BigDecimal(rateStr)); totalMoney = MoneyBigDecimalUtil.add(totalMoney, money); } String revenue = listGoodsBrief.size() + "个商品预估分享奖金:¥"+totalMoney; Map map = userShareGoodsRecordService.save(uid, ShareSourceTypeEnum.storage, null, listGoodsBrief); JSONObject data = new JSONObject(); data.put("revenue", revenue); data.put("shareId", map.get("shareId")); data.put("shareImg", map.get("loadResult")); data.put("notifyDesc", configService.get("goods_share_multiple_notify")); return data; } }