package com.yeshi.fanli.service.impl.order;
|
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.apache.commons.beanutils.PropertyUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
|
import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper;
|
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper;
|
import com.yeshi.fanli.entity.bus.user.HongBao;
|
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.order.CommonOrder;
|
import com.yeshi.fanli.entity.order.CommonOrderGoods;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
|
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
|
import com.yeshi.fanli.exception.order.CommonOrderException;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.service.inter.order.CommonOrderService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
import com.yeshi.fanli.util.factory.CommonOrderGoodsFactory;
|
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
import com.yeshi.fanli.vo.order.CommonOrderGoodsVO;
|
import com.yeshi.fanli.vo.order.CommonOrderVO;
|
|
@Service
|
public class CommonOrderServiceImpl implements CommonOrderService {
|
|
@Resource
|
private CommonOrderMapper commonOrderMapper;
|
|
@Resource
|
private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper;
|
|
@Resource
|
private CommonOrderGoodsMapper commonOrderGoodsMapper;
|
|
@Override
|
public int insert(CommonOrder record) {
|
return commonOrderMapper.insert(record);
|
}
|
|
@Override
|
public int insertSelective(CommonOrder record) {
|
return commonOrderMapper.insertSelective(record);
|
}
|
|
@Override
|
public int updateByPrimaryKeySelective(CommonOrder record) {
|
return commonOrderMapper.updateByPrimaryKeySelective(record);
|
}
|
|
@Override
|
public int updateByPrimaryKey(CommonOrder record) {
|
return commonOrderMapper.updateByPrimaryKey(record);
|
}
|
|
@Override
|
public int deleteByPrimaryKey(Long id) {
|
return commonOrderMapper.deleteByPrimaryKey(id);
|
}
|
|
@Override
|
public CommonOrder selectByPrimaryKey(Long id) {
|
return commonOrderMapper.selectByPrimaryKey(id);
|
}
|
|
@Override
|
public List<CommonOrderVO> listGroupOrderNoByUid(long start, int count, Long uid, Integer state, Integer type,
|
Integer orderState, String orderNo, String startTime, String endTime, Integer dateType)
|
throws CommonOrderException {
|
return commonOrderMapper.listGroupOrderNoByUid(start, count, uid, state, type, orderState, orderNo, startTime,
|
endTime, dateType);
|
}
|
|
@Override
|
public long countGroupOrderNoByUid(Long uid, Integer state, Integer type, Integer orderState, String orderNo,
|
String startTime, String endTime, Integer dateType) throws CommonOrderException {
|
return commonOrderMapper.countGroupOrderNoByUid(uid, state, type, orderState, orderNo, startTime, endTime,
|
dateType);
|
}
|
|
@Override
|
public List<CommonOrderVO> getOrderByUid(Integer page, Long uid, Integer state, Integer type, Integer orderState,
|
String orderNo, String startTime, String endTime, Integer dateType) throws CommonOrderException {
|
|
int pageSize = Constant.PAGE_SIZE;
|
|
List<CommonOrderVO> listOrder = listGroupOrderNoByUid((page - 1) * pageSize, pageSize, uid, state, type,
|
orderState, orderNo, startTime, endTime, dateType);
|
|
// 订单信息为空
|
if (listOrder == null || listOrder.size() == 0) {
|
listOrder = new ArrayList<CommonOrderVO>();
|
return listOrder;
|
}
|
|
// 商品信息
|
List<CommonOrderVO> listGoods = commonOrderMapper.listByOrderNoAndType(listOrder);
|
// 订单商品为空
|
if (listGoods == null || listGoods.size() == 0) {
|
return listOrder;
|
}
|
|
// 数据加工重新组织
|
listDataFactory(listOrder, listGoods);
|
|
return listOrder;
|
}
|
|
@Override
|
public Map<String, BigDecimal> countOrderByHongBaoType(Long uid, Integer day) {
|
return commonOrderMapper.countOrderByHongBaoType(uid, day);
|
}
|
|
@Override
|
public long countOrder(Long uid, Integer type, Integer day) {
|
return commonOrderMapper.countBonusOrder(uid, type, day);
|
}
|
|
@Override
|
public BigDecimal countOrderMoney(Long uid, Integer type, Integer day) {
|
return commonOrderMapper.countBonusOrderMoney(uid, type, day);
|
}
|
|
@Override
|
public Map<String, BigDecimal> countByUidAndOrderState(Long uid, Integer type, String startTime, String endTime,
|
Integer day) {
|
return commonOrderMapper.countByUidAndOrderState(uid, type, startTime, endTime, day);
|
}
|
|
public void listDataFactory(List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods) {
|
|
/* 组合商品信息 */
|
for (CommonOrderVO commonOrder : listGoods) {
|
|
CommonOrderGoods goods = commonOrder.getCommonOrderGoods();
|
if (goods == null) {
|
continue;
|
}
|
|
String orderNo1 = commonOrder.getOrderNo();
|
Integer sourceType = commonOrder.getSourceType();
|
|
for (CommonOrderVO order : listOrder) {
|
String orderNo2 = order.getOrderNo();
|
Integer sourceType2 = order.getSourceType();
|
|
// 来源、订单号相同
|
if (sourceType.equals(sourceType2) && orderNo1.equals(orderNo2)) {
|
// 加入商品信息
|
List<CommonOrderGoodsVO> listOrderGoods = order.getListOrderGoods();
|
|
CommonOrderGoodsVO commonGoodsVO = new CommonOrderGoodsVO();
|
try {
|
PropertyUtils.copyProperties(commonGoodsVO, goods);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
Integer hongBaoType = order.getHongBaoType();
|
// 邀请订单信息保护
|
if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType
|
|| HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType
|
|| HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) {
|
Map<String, String> titleMap = new HashMap<String, String>();
|
titleMap.put("content", "为保障用户隐私,商品信息已隐藏!");
|
titleMap.put("fontColor", "#888888");
|
titleMap.put("bottomColor", "#E9E9E9");
|
commonGoodsVO.setTitle(null);
|
commonGoodsVO.setGoodsTitle(titleMap);
|
}
|
|
commonGoodsVO.setActualCount(commonOrder.getTotalCount() + "件");
|
String settlement = commonOrder.getTotalSettlement().setScale(2, BigDecimal.ROUND_DOWN).toString();
|
commonGoodsVO.setActualPay("实付款:¥" + settlement);
|
|
listOrderGoods.add(commonGoodsVO);
|
|
Integer orderType = commonOrder.getOrderType();
|
if (orderType == null) {
|
String shopType = commonGoodsVO.getShopType();
|
if (CommonOrderGoodsVO.TYPE_TAOBAO.equalsIgnoreCase(shopType)) {
|
commonOrder.setOrderType(1);
|
} else if (CommonOrderGoodsVO.TYPE_TMALL.equalsIgnoreCase(shopType)) {
|
commonOrder.setOrderType(2);
|
}
|
}
|
|
break;
|
}
|
}
|
}
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
|
SimpleDateFormat formatday = new SimpleDateFormat("yyyy.MM.dd");
|
|
for (CommonOrderVO order : listOrder) {
|
Date createTime = order.getCreateTime();
|
if (createTime != null) {
|
order.setObtainTime(createTime.getTime());
|
}
|
|
Date thirdCreateTime = order.getThirdCreateTime();
|
if (thirdCreateTime != null) {
|
order.setDownTime("下单时间:" + format.format(thirdCreateTime));
|
}
|
|
Date settleTime = order.getSettleTime();
|
if (settleTime != null) {
|
order.setReceiveTime("收货时间:" + format.format(settleTime));
|
}
|
|
/* 订单状态 转换处理 */
|
String orderStateContent = "";
|
Map<String, String> orderStateMap = new HashMap<String, String>();
|
|
Integer hongBaoState = order.getHongBaoState();
|
|
Integer orderState = order.getState();
|
if (CommonOrder.STATE_FK == orderState) {
|
orderStateContent = "已付款";
|
} else if (CommonOrder.STATE_JS == orderState) {
|
orderStateContent = "已收货";
|
} else if (CommonOrder.STATE_SX == orderState) {
|
orderStateContent = "未付款/已退款";
|
} else if (CommonOrder.STATE_WQ == orderState) {
|
orderStateContent = "已维权";
|
|
/* 订单维权 判断是否全部维权 */
|
List<TaoBaoWeiQuanOrder> listWQ =
|
taoBaoWeiQuanOrderMapper.selectListByOrderIdAndState(order.getOrderNo(), "维权成功");
|
|
boolean isPart = false;// 默认失效
|
|
if (listWQ != null && listWQ.size() > 0) {
|
BigDecimal fanTotalMoney = new BigDecimal(0);
|
for (TaoBaoWeiQuanOrder weiQuanOrder : listWQ) {
|
BigDecimal fanMoney = weiQuanOrder.getFanMoney();
|
if (fanMoney != null) {
|
fanTotalMoney = MoneyBigDecimalUtil.add(fanTotalMoney, fanMoney);
|
}
|
}
|
|
if (fanTotalMoney.compareTo(order.getHongBao()) < 0) {
|
isPart = true;
|
}
|
}
|
|
if (isPart) {
|
hongBaoState = HongBaoV2.STATE_BUFENSHIXIAO; // 部分失效
|
} else {
|
hongBaoState = HongBaoV2.STATE_SHIXIAO; // 全部失效
|
}
|
}
|
orderStateMap.put("content", orderStateContent);
|
orderStateMap.put("fontColor", "#666666");
|
order.setOrderState(orderStateMap);
|
|
String hongbaoInfo = "";
|
/* 订单返利类型 转换 */
|
Integer hongBaoType = order.getHongBaoType();
|
if (HongBaoV2.TYPE_ZIGOU == hongBaoType || 2 == hongBaoType) {
|
// 自购
|
hongbaoInfo = "返利";
|
order.setOrderOrigin("1");
|
order.setHongBaoTypePic(CommonOrder.TYPE_FANLI);
|
} else if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType) {
|
// 分享
|
hongbaoInfo = "奖金";
|
order.setOrderOrigin("2");
|
order.setHongBaoTypePic(CommonOrder.TYPE_SHARE);
|
} else if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType
|
|| HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType
|
|| HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) {
|
// 邀请
|
hongbaoInfo = "奖金";
|
order.setOrderOrigin("3");
|
order.setHongBaoTypePic(CommonOrder.TYPE_INVITE);
|
}
|
|
String hongBaoDate = null;
|
String hongBaoState_Str = "";
|
String hongbaoInfoFontColor = "#E5005C";
|
|
/* 红包状态 转换 */
|
String stateContent = "";
|
String stateFontColor = "#E5005C";
|
Integer orderHongBaoState = null;
|
|
if (HongBaoV2.STATE_KELINGQU == hongBaoState || HongBaoV2.STATE_BUKELINGQU == hongBaoState) {
|
orderHongBaoState = 1;
|
stateContent = "未到账";
|
hongBaoState_Str = "预估";
|
|
Date preAccountTime = order.getPreAccountTime();
|
if (preAccountTime != null) {
|
hongBaoDate = "预计到账时间:" + formatday.format(preAccountTime);
|
}
|
|
} else if (HongBaoV2.STATE_YILINGQU == hongBaoState) {
|
orderHongBaoState = 3;
|
stateContent = "已到账";
|
|
Date accountTime = order.getAccountTime();
|
if (accountTime != null) {
|
hongBaoDate = "到账时间:" + formatday.format(accountTime);
|
}
|
|
} else if (HongBaoV2.STATE_BUFENSHIXIAO == hongBaoState) {
|
stateContent = "部分失效";
|
orderHongBaoState = 3;
|
Date accountTime = order.getAccountTime();
|
if (accountTime != null) {
|
hongBaoDate = "到账时间:" + formatday.format(accountTime);
|
}
|
|
} else if (HongBaoV2.STATE_SHIXIAO == hongBaoState) {
|
orderHongBaoState = 4;
|
stateContent = "已失效";
|
hongbaoInfoFontColor = "#888888";
|
}
|
order.setHongBaoState(orderHongBaoState);
|
order.setHongBaoDate(hongBaoDate);
|
|
Map<String, String> stateMap = new HashMap<String, String>();
|
stateMap.put("content", stateContent);
|
stateMap.put("fontColor", stateFontColor);
|
order.setAccountState(stateMap);
|
|
hongbaoInfo = hongBaoState_Str + hongbaoInfo;
|
|
BigDecimal hongBao = order.getHongBao();
|
if (hongBao == null) {
|
hongBao = new BigDecimal(0);
|
}
|
Map<String, String> hongBaoMap = new HashMap<String, String>();
|
hongBaoMap.put("content", hongbaoInfo + " ¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString());
|
hongBaoMap.put("fontColor", hongbaoInfoFontColor);
|
order.setHongBaoInfo(hongBaoMap);
|
}
|
}
|
|
@Override
|
public List<CommonOrder> listBySourceTypeAndOrderId(int sourceType, String orderId) {
|
|
return null;
|
}
|
|
@Transactional
|
@Override
|
public CommonOrder addTaoBaoOrder(TaoBaoOrder taoBaoOrder, Long uid) throws CommonOrderException {
|
CommonOrder commonOrder = commonOrderMapper.selectByOrderNoAndOrderTypeAndOrderBy(taoBaoOrder.getOrderId(),
|
Constant.SOURCE_TYPE_TAOBAO, taoBaoOrder.getOrderBy());
|
if (commonOrder == null)// 新增
|
{
|
commonOrder = TaoBaoOrderUtil.convert(taoBaoOrder);
|
CommonOrderGoods goods = new CommonOrderGoods();
|
goods.setGoodsId(taoBaoOrder.getAuctionId() + "");
|
goods.setGoodsType(Constant.SOURCE_TYPE_TAOBAO);
|
// 商品是否已经插入
|
List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper
|
.listByGoodsIdAndGoodsType(goods.getGoodsId(), goods.getGoodsType());
|
if (commonGoodsList.size() <= 0)// 不存在就插入商品
|
{
|
TaoBaoGoodsBrief taoBaoGoods = null;
|
try {
|
taoBaoGoods = TaoKeApiUtil.getSimpleGoodsInfo(taoBaoOrder.getAuctionId());
|
} catch (TaobaoGoodsDownException e) {
|
e.printStackTrace();
|
}
|
if (taoBaoGoods != null) {
|
goods = CommonOrderGoodsFactory.create(taoBaoGoods);
|
}
|
goods.setCreateTime(new Date());
|
goods.setUpdateTime(new Date());
|
commonOrderGoodsMapper.insertSelective(goods);
|
} else
|
goods.setId(commonGoodsList.get(commonGoodsList.size() - 1).getId());
|
commonOrder.setCommonOrderGoods(goods);
|
commonOrder.setUserInfo(new UserInfo(uid));
|
commonOrder.setCreateTime(new Date());
|
commonOrderMapper.insertSelective(commonOrder);
|
|
|
return commonOrder;
|
} else {// 修改
|
// 已经结算或者已经失效的订单不处理
|
if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_SX)
|
return commonOrder;
|
CommonOrder newCommonOrder = TaoBaoOrderUtil.convert(taoBaoOrder);
|
CommonOrder updateCommonOrder = new CommonOrder(commonOrder.getId());
|
updateCommonOrder.seteIncome(newCommonOrder.geteIncome());
|
updateCommonOrder.setEstimate(newCommonOrder.getEstimate());
|
updateCommonOrder.setPayment(newCommonOrder.getPayment());
|
updateCommonOrder.setSettlement(newCommonOrder.getSettlement());
|
updateCommonOrder.setSettleTime(newCommonOrder.getSettleTime());
|
updateCommonOrder.setState(newCommonOrder.getState());
|
updateCommonOrder.setUpdateTime(new Date());
|
commonOrderMapper.updateByPrimaryKeySelective(updateCommonOrder);
|
return commonOrderMapper.selectByPrimaryKey(updateCommonOrder.getId());
|
}
|
}
|
|
@Override
|
public Map<String, Object> countMoneyGroupOrderNoByUid(Long uid, Integer type, String orderNo, String startTime,
|
String endTime, Integer day) {
|
return commonOrderMapper.countMoneyGroupOrderNoByUid(uid, type, orderNo, startTime, endTime, day);
|
}
|
}
|