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.Set;
|
|
import javax.annotation.Resource;
|
|
import com.yeshi.fanli.entity.SystemEnum;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.util.*;
|
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.MoneyBigDecimalUtil;
|
import org.yeshi.utils.entity.FileUploadResult;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.yeshi.fanli.dao.mybatis.user.UserGoodsStorageMapper;
|
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
|
import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO;
|
import com.yeshi.fanli.entity.bus.user.UserGoodsStorage;
|
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
|
import com.yeshi.fanli.entity.goods.CommonGoods;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.goods.facade.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.order.config.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
|
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
|
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
|
import com.yeshi.fanli.util.jd.JDApiUtil;
|
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
|
import net.sf.json.JSONArray;
|
import net.sf.json.JSONObject;
|
|
@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;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@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<Long> list) {
|
return userGoodsStorageMapper.deleteBatchByPrimaryKey(list);
|
}
|
|
/**
|
* 根据主键 、uid 批量删除
|
*
|
* @param list
|
* @return
|
*/
|
@Override
|
public int deleteBatchByUidAndPrimaryKey(Long uid, List<Long> list) {
|
return userGoodsStorageMapper.deleteBatchByUidAndPrimaryKey(uid, list);
|
}
|
|
@Override
|
public List<UserGoodsStorage> listQueryByUid(long start, int count, Long uid, Integer source) {
|
return userGoodsStorageMapper.listQueryByUid(start, count, uid, source);
|
}
|
|
@Override
|
public UserGoodsStorage getByUidAndAuctionId(Long uid, String auctionId, Integer goodsType) {
|
return userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId, goodsType);
|
}
|
|
@Override
|
public long countQueryByUid(Long uid, Integer source) {
|
return userGoodsStorageMapper.countQueryByUid(uid, source);
|
}
|
|
@Override
|
public void save(Long uid, Set<String> auctionIds, Integer goodsType) throws UserGoodsStorageException {
|
|
if (uid == null) {
|
throw new UserGoodsStorageException(1, "用户尚未登录");
|
}
|
|
if (auctionIds == null || auctionIds.size() == 0) {
|
throw new UserGoodsStorageException(1, "商品ID为空");
|
}
|
|
for (String auctionId : auctionIds) {
|
CommonGoods commonGoods = null;
|
if (goodsType == null) {
|
goodsType = Constant.SOURCE_TYPE_TAOBAO;
|
}
|
|
if (goodsType == Constant.SOURCE_TYPE_JD) {
|
// 京东
|
JDGoods jdGoods = JDApiUtil.queryGoodsDetail(auctionId);
|
if (jdGoods == null) {
|
jdGoods = JDApiUtil.getGoodsDetail( auctionId);
|
}
|
if (jdGoods == null) {
|
throw new UserGoodsStorageException(1, auctionId + "商品已下架");
|
}
|
commonGoods = CommonGoodsFactory.create(jdGoods);
|
|
} else if (goodsType == Constant.SOURCE_TYPE_PDD) {
|
// 拼多多
|
PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(auctionId);
|
if (pddGoods == null) {
|
throw new UserGoodsStorageException(1, auctionId + "商品已下架");
|
}
|
commonGoods = CommonGoodsFactory.create(pddGoods);
|
} else {
|
// 淘宝
|
try {
|
// 获取商品详情
|
TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
|
commonGoods = CommonGoodsFactory.create(goodsBrief);
|
} catch (TaobaoGoodsDownException e) {
|
throw new UserGoodsStorageException(1, auctionId + "商品已下架");
|
}
|
}
|
|
if (commonGoods != null) {
|
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
|
@Transactional(rollbackFor = Exception.class)
|
public void addCommonGoods(Long uid, Set<Long> ids) throws UserGoodsStorageException {
|
|
if (uid == null) {
|
throw new UserGoodsStorageException(1, "用户尚未登录");
|
}
|
|
if (ids == null || ids.size() == 0) {
|
throw new UserGoodsStorageException(1, "商品ID为空");
|
}
|
|
for (Long id : ids) {
|
CommonGoods commonGoods = commonGoodsService.selectByPrimaryKey(id);
|
if (commonGoods != null) {
|
UserGoodsStorage goodsStorage = userGoodsStorageMapper.getByUidAndCid(uid, id);
|
|
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, Integer source) throws UserGoodsStorageException {
|
|
JSONArray array = new JSONArray();
|
|
List<UserGoodsStorage> listStorage = listQueryByUid(page, pageSize, uid, source);
|
if (listStorage == null || listStorage.size() == 0) {
|
return array;
|
}
|
|
if (source == null) {
|
source = Constant.SOURCE_TYPE_TAOBAO;
|
}
|
|
List<TaoBaoGoodsBrief> listTaoKeGoods = null;
|
if (source == Constant.SOURCE_TYPE_TAOBAO) {
|
List<String> listGid = new ArrayList<>();
|
for (UserGoodsStorage userGoodsStorage : listStorage) {
|
CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
|
if (commonGoods == null) {
|
continue;
|
}
|
listGid.add(commonGoods.getGoodsId());
|
}
|
|
// API网络接口验证是否在售
|
try {
|
listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
|
} catch (TaoKeApiException e) {
|
e.printStackTrace();
|
} catch (TaobaoGoodsDownException e) {
|
e.printStackTrace();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
SystemEnum system = userInfoService.getUserSystem(uid);
|
BigDecimal rate = manageService.getFanLiRate(UserLevelEnum.daRen, system);
|
Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
|
.excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
|
|
for (UserGoodsStorage userGoodsStorage : listStorage) {
|
CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
|
if (commonGoods == null) {
|
continue;
|
}
|
|
int state = 0;
|
Integer goodsType = commonGoods.getGoodsType();
|
|
if (listTaoKeGoods != null && listTaoKeGoods.size() > 0 && goodsType != null
|
&& goodsType == Constant.SOURCE_TYPE_TAOBAO) {
|
state = 1; // 默认停售
|
String goodsId = commonGoods.getGoodsId();
|
for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
|
String 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, String auctionId, Integer goodType) {
|
boolean state = false;
|
if (uid != null && auctionId != null) {
|
UserGoodsStorage userGoodsStorage = userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId, goodType);
|
if (userGoodsStorage != null) {
|
state = true;
|
}
|
}
|
return state;
|
}
|
|
@Override
|
public JSONObject shareGoods(Long uid, List<Long> listStorageID)
|
throws UserGoodsStorageException, UserShareGoodsRecordException {
|
List<UserGoodsStorage> listStorage = userGoodsStorageMapper.listQueryByIds(listStorageID);
|
if (listStorage == null || listStorage.size() == 0) {
|
throw new UserGoodsStorageException(1, "选品库商品不存在");
|
}
|
|
List<UserGoodsStorage> listResult = new ArrayList<UserGoodsStorage>();
|
// 还原顺序 用于制图
|
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<TaoBaoGoodsBrief> listGoodsBrief = new ArrayList<TaoBaoGoodsBrief>();
|
|
SystemEnum system = userInfoService.getUserSystem(uid);
|
|
BigDecimal rate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,system);
|
for (UserGoodsStorage userGoodsStorage : listResult) {
|
CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
|
TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(commonGoods);
|
listGoodsBrief.add(goodsBrief);
|
|
BigDecimal money = TaoBaoUtil.getGoodsHongBaoMoney(goodsBrief, rate, true);
|
totalMoney = MoneyBigDecimalUtil.add(totalMoney, money);
|
}
|
|
ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorage(uid, listGoodsBrief,
|
listStorageID);
|
FileUploadResult uploadResult = new FileUploadResult();
|
uploadResult.setUrl(shareRecord.getSharePictureUrl());
|
|
UserInfo user = userInfoService.selectByPKey(uid);
|
|
JSONObject data = new JSONObject();
|
data.put("revenue", listGoodsBrief.size() + "个商品预估分享奖金:¥" + totalMoney);
|
data.put("shareId", shareRecord.getRedisKey());
|
data.put("shareImg", uploadResult);
|
data.put("notifyDesc", configService.getValue(ConfigKeyEnum.goodsShareMultipleNotify.getKey(), user.getSystem()));
|
return data;
|
}
|
|
@Override
|
public JSONObject createShareV2(Long uid, List<Long> listStorageID, boolean needDrawPicture)
|
throws UserGoodsStorageException, UserShareGoodsRecordException {
|
List<UserGoodsStorage> listStorage = userGoodsStorageMapper.listQueryByIds(listStorageID);
|
if (listStorage == null || listStorage.size() == 0) {
|
throw new UserGoodsStorageException(1, "选品库商品不存在");
|
}
|
|
List<UserGoodsStorage> listResult = new ArrayList<UserGoodsStorage>();
|
// 还原顺序 用于制图
|
for (Long sid : listStorageID) {
|
for (UserGoodsStorage torage : listStorage) {
|
Long id = torage.getId();
|
if (sid == id || sid.equals(id)) {
|
listResult.add(torage);
|
break;
|
}
|
}
|
}
|
|
SystemEnum system = userInfoService.getUserSystem(uid);
|
|
BigDecimal totalMoney = new BigDecimal(0.00);
|
List<CommonGoods> listCommonGoods = new ArrayList<CommonGoods>();
|
|
Integer goodsType = null;
|
BigDecimal rate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,system);
|
for (UserGoodsStorage userGoodsStorage : listResult) {
|
CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
|
BigDecimal money = CommonGoodsUtil.getCommission(commonGoods, rate);
|
totalMoney = MoneyBigDecimalUtil.add(totalMoney, money);
|
listCommonGoods.add(commonGoods);
|
|
if (goodsType == null) {
|
goodsType = commonGoods.getGoodsType();
|
}
|
}
|
|
ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsStorageV2(uid, listCommonGoods,
|
listStorageID, needDrawPicture);
|
FileUploadResult uploadResult = new FileUploadResult();
|
uploadResult.setUrl(shareRecord.getSharePictureUrl());
|
|
JSONObject data = new JSONObject();
|
data.put("revenue", listCommonGoods.size() + "个商品预估分享奖金:¥" + totalMoney);
|
data.put("shareId", shareRecord.getRedisKey());
|
data.put("shareImg", uploadResult);
|
|
|
// 提示语不同
|
if (goodsType == Constant.SOURCE_TYPE_JD) {
|
// 京东
|
data.put("notifyDesc", configService.getValue(ConfigKeyEnum.goodsShareNotifyJD.getKey(), system));
|
} else if (goodsType == Constant.SOURCE_TYPE_PDD) {
|
// 拼多多
|
data.put("notifyDesc", configService.getValue(ConfigKeyEnum.goodsShareNotifyPDD.getKey(), system));
|
} else {
|
data.put("notifyDesc", configService.getValue(ConfigKeyEnum.goodsShareMultipleNotify.getKey(), system));
|
}
|
return data;
|
}
|
|
}
|