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 org.yeshi.utils.taobao.TbImgUtil; 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.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.StringUtil; 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 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.listUserOrder(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.countUserOrder(uid, state, type, orderState, orderNo, startTime, endTime, dateType); } @Override public List 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 listOrder = listGroupOrderNoByUid((page - 1) * pageSize, pageSize, uid, state, type, orderState, orderNo, startTime, endTime, dateType); // 订单信息为空 if (listOrder == null || listOrder.size() == 0) { listOrder = new ArrayList(); return listOrder; } // 商品信息 List listGoods = commonOrderMapper.listOrderGoodsInfo(listOrder); // 订单商品为空 if (listGoods == null || listGoods.size() == 0) { return listOrder; } // 数据加工重新组织 listDataFactory(listOrder, listGoods, uid); return listOrder; } @Override public Map countHistoryOrder(Long uid, Integer day) { return commonOrderMapper.countHistoryOrder(uid, day); } @Override public long countBonusOrderNumber(Long uid, Integer type, Integer day, String startTime, String endTime) { return commonOrderMapper.countBonusOrderNumber(uid, type, day, startTime, endTime); } @Override public BigDecimal countBonusOrderMoney(Long uid, Integer type, Integer day, String startTime, String endTime) { return commonOrderMapper.countBonusOrderMoney(uid, type, day, startTime, endTime); } @Override public Map countBonusOrderMoneyAndNumber(Long uid, Integer type, Integer day, String startTime, String endTime) { return commonOrderMapper.countBonusOrderMoneyAndNumber(uid, type, day, startTime, endTime); } @Override public Map countByUidAndOrderState(Long uid, Integer type, String startTime, String endTime, Integer day) { return commonOrderMapper.countByUidAndOrderState(uid, type, startTime, endTime, day); } public void listDataFactory(List listOrder, List listGoods, Long uid) { /* 组合商品信息 */ 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 listOrderGoods = order.getListOrderGoods(); CommonOrderGoodsVO commonGoodsVO = new CommonOrderGoodsVO(); try { PropertyUtils.copyProperties(commonGoodsVO, goods); } catch (Exception e) { e.printStackTrace(); } String picture = commonGoodsVO.getPicture(); if (!StringUtil.isNullOrEmpty(picture) && !picture.contains("320x320")) { commonGoodsVO.setPicture(TbImgUtil.getTBSize320Img(picture)); } 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 titleMap = new HashMap(); titleMap.put("content", "为保障用户隐私,商品信息已隐藏!"); titleMap.put("fontColor", "#888888"); titleMap.put("bottomColor", "#E9E9E9"); commonGoodsVO.setTitle(null); commonGoodsVO.setGoodsTitle(titleMap); } // 购买数量 commonGoodsVO.setActualCount(commonOrder.getTotalCount() + "件"); BigDecimal totalSettlement = commonOrder.getTotalSettlement(); if (totalSettlement == null || totalSettlement.compareTo(new BigDecimal(0)) <= 0) { totalSettlement = commonOrder.getTotalPayment(); } // 实付款 commonGoodsVO.setActualPay("实付款:¥" + totalSettlement); 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 thirdCreateTime = order.getThirdCreateTime(); if (thirdCreateTime != null) { order.setDownTime("下单时间:" + format.format(thirdCreateTime)); order.setObtainTime(thirdCreateTime.getTime()); } Date settleTime = order.getSettleTime(); if (settleTime != null) { order.setReceiveTime("收货时间:" + format.format(settleTime)); } /* 订单状态 转换处理 */ String orderStateContent = ""; Map orderStateMap = new HashMap(); // 订单状态 Integer orderState = order.getState(); // 红包状态 Integer hongBaoState = order.getHongBaoState(); Integer stateWholeOrder = order.getStateWholeOrder(); if (CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO == stateWholeOrder) { // 整个订单部分失效:判断真实状态 订单、红包 CommonOrderVO buFenOrder = commonOrderMapper.getBuFenOrderState(uid, order.getOrderNo()); if (buFenOrder != null) { // 有效的订单状态 orderState = buFenOrder.getState(); // 有效的红包状态 hongBaoState = buFenOrder.getHongBaoState(); } } 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 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 stateMap = new HashMap(); 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 hongBaoMap = new HashMap(); hongBaoMap.put("content", hongbaoInfo + " ¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString()); hongBaoMap.put("fontColor", hongbaoInfoFontColor); order.setHongBaoInfo(hongBaoMap); } } @Override public List listBySourceTypeAndOrderId(int sourceType, String orderId) { return null; } @Transactional @Override public List addTaoBaoOrder(List taoBaoOrders, Long uid) throws CommonOrderException { List commonOrderList = new ArrayList<>(); // 判断所有的订单状态 int invalidCount = 0; for (TaoBaoOrder tb : taoBaoOrders) { if ("订单失效".equalsIgnoreCase(tb.getOrderState())) { invalidCount++; } } // 获取整体订单的状态 int wholeOrderState = 0; if (taoBaoOrders.size() == invalidCount) wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_SHIXIAO; else if (invalidCount == 0) wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_YOUXIAO; else wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO; for (TaoBaoOrder taoBaoOrder : taoBaoOrders) { 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 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()); commonOrder.setStateWholeOrder(wholeOrderState); commonOrderMapper.insertSelective(commonOrder); commonOrderList.add(commonOrder); continue; } else {// 修改 // 已经结算或者已经失效的订单不处理 if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_SX) { commonOrderList.add(commonOrder); continue; } 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.setStateWholeOrder(wholeOrderState); updateCommonOrder.setUpdateTime(new Date()); commonOrderMapper.updateByPrimaryKeySelective(updateCommonOrder); commonOrderList.add(commonOrderMapper.selectByPrimaryKey(updateCommonOrder.getId())); continue; } } return commonOrderList; } @Override public long countByUidAndOrderStateWithOrderBalanceTime(Long uid, int state, Date minDate, Date maxDate) { return commonOrderMapper.countByUidAndOrderStateWithOrderBalanceTime(uid, state, minDate, maxDate); } @Override public List listQueryByUid(long start, int count, Long uid, Integer state, Integer type, Integer orderState, String orderNo, String startTime, String endTime, Integer dateType) throws CommonOrderException { List list = commonOrderMapper.listQueryByUid(start, count, uid, state, type, orderState, orderNo, startTime, endTime, dateType); if (list == null) { list = new ArrayList(); } if (list.size() == 0) { return list; } SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); for (CommonOrderVO order : list) { // 下单时间 Date thirdCreateTime = order.getThirdCreateTime(); if (thirdCreateTime != null) { order.setDownTime(format.format(thirdCreateTime)); } // 收货时间 Date settleTime = order.getSettleTime(); if (settleTime != null) { order.setReceiveTime(format.format(settleTime)); } // 到账时间 Date accountTime = order.getAccountTime(); if (accountTime != null) { order.setHongBaoDate(format.format(accountTime)); } BigDecimal settlement = order.getSettlement(); if (settlement != null && settlement.compareTo(new BigDecimal(0)) > 0) { order.setPayment(settlement); // 实际付款金额 } /* 订单返利类型 转换 */ Integer hongBaoType = order.getHongBaoType(); if (HongBaoV2.TYPE_ZIGOU == hongBaoType || 2 == hongBaoType) { // 自购 order.setHongBaoType(1); } else if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType) { // 分享 order.setHongBaoType(2); } else if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType || HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) { // 邀请 order.setHongBaoType(3); } Integer hongBaoState = order.getHongBaoState(); if (HongBaoV2.STATE_KELINGQU == hongBaoState || HongBaoV2.STATE_BUKELINGQU == hongBaoState) { // 未到账 order.setHongBaoState(1); } else if (HongBaoV2.STATE_YILINGQU == hongBaoState) { // 已到账 order.setHongBaoState(2); } else if (HongBaoV2.STATE_SHIXIAO == hongBaoState) { // 已失效 order.setHongBaoState(3); } } return list; } @Override public long countQueryByUid(Long uid, Integer state, Integer type, Integer orderState, String orderNo, String startTime, String endTime, Integer dateType) throws CommonOrderException { return commonOrderMapper.countQueryByUid(uid, state, type, orderState, orderNo, startTime, endTime, dateType); } @Override public List listQuery(long start, int count, Integer keyType, String key, Integer state, Integer type, Integer orderState, String startTime, String endTime) throws CommonOrderException { List list = commonOrderMapper.listQuery(start, count,keyType, key, state, type, orderState, startTime, endTime); if (list == null) { list = new ArrayList(); } if (list.size() == 0) { return list; } SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); for (CommonOrderVO order : list) { // 下单时间 Date thirdCreateTime = order.getThirdCreateTime(); if (thirdCreateTime != null) { order.setDownTime(format.format(thirdCreateTime)); } // 收货时间 Date settleTime = order.getSettleTime(); if (settleTime != null) { order.setReceiveTime(format.format(settleTime)); } // 到账时间 Date accountTime = order.getAccountTime(); if (accountTime != null) { order.setHongBaoDate(format.format(accountTime)); } BigDecimal settlement = order.getSettlement(); if (settlement != null && settlement.compareTo(new BigDecimal(0)) > 0) { order.setPayment(settlement); // 实际付款金额 } /* 订单返利类型 转换 */ Integer hongBaoType = order.getHongBaoType(); if (HongBaoV2.TYPE_ZIGOU == hongBaoType || 2 == hongBaoType) { // 自购 order.setHongBaoType(1); } else if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType) { // 分享 order.setHongBaoType(2); } else if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType || HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) { // 邀请 order.setHongBaoType(3); } Integer hongBaoState = order.getHongBaoState(); if (HongBaoV2.STATE_KELINGQU == hongBaoState || HongBaoV2.STATE_BUKELINGQU == hongBaoState) { // 未到账 order.setHongBaoState(1); } else if (HongBaoV2.STATE_YILINGQU == hongBaoState) { // 已到账 order.setHongBaoState(2); } else if (HongBaoV2.STATE_SHIXIAO == hongBaoState) { // 已失效 order.setHongBaoState(3); } } return list; } @Override public long countQuery(Integer keyType, String key, Integer state, Integer type, Integer orderState, String startTime, String endTime) throws CommonOrderException { return commonOrderMapper.countQuery(keyType, key, state, type, orderState, startTime, endTime); } }