| | |
| | | package com.yeshi.fanli.service.manger.order;
|
| | |
|
| | | import java.math.BigDecimal;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import com.yeshi.fanli.entity.SystemEnum;
|
| | | import com.yeshi.fanli.service.inter.user.UserInfoService;
|
| | | import org.springframework.stereotype.Component;
|
| | | import org.springframework.transaction.annotation.Transactional;
|
| | |
|
| | | import com.yeshi.fanli.dto.order.UserTeamLevel;
|
| | | import com.yeshi.fanli.dto.order.UserTeamRate;
|
| | | import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
|
| | | import com.yeshi.fanli.entity.order.CommonOrder;
|
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrder;
|
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap;
|
| | | import com.yeshi.fanli.exception.ParamsException;
|
| | | import com.yeshi.fanli.exception.order.dividents.TeamDividentsSourceOrderException;
|
| | | import com.yeshi.fanli.service.inter.order.CommonOrderService;
|
| | | import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
|
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService;
|
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderUserMapService;
|
| | | import com.yeshi.fanli.util.Constant;
|
| | | import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
| | | import com.yeshi.fanli.util.factory.order.dividents.TeamDividentsSourceOrderFactory;
|
| | | import com.yeshi.fanli.util.factory.order.dividents.TeamDividentsSourceOrderUserMapFactory;
|
| | | import com.yeshi.fanli.util.order.CommonOrderUtil;
|
| | | import com.yeshi.fanli.util.user.UserLevelUtil;
|
| | |
|
| | | /**
|
| | | * 团队分红来源管理
|
| | | *
|
| | | * @author Administrator
|
| | | */
|
| | | @Component
|
| | | public class TeamDividentsSourceManager {
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsSourceOrderService teamDividentsSourceOrderService;
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService;
|
| | |
|
| | | @Resource
|
| | | private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
|
| | |
|
| | | @Resource
|
| | | private CommonOrderService commonOrderService;
|
| | |
|
| | | @Resource
|
| | | private UserInfoService userInfoService;
|
| | |
|
| | | /**
|
| | | * @param commonOrderList
|
| | | * @param bossList void 返回类型
|
| | | * @throws ParamsException 添加分红源
|
| | | * @throws
|
| | | * @Title: addSource
|
| | | * @Description:
|
| | | */
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void addSource(List<CommonOrder> commonOrderList, List<UserTeamLevel> bossList)
|
| | | throws TeamDividentsSourceOrderException, ParamsException {
|
| | | if (commonOrderList.get(0).getThirdCreateTime().getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME)
|
| | | return;
|
| | |
|
| | | Date placeOrderTime = commonOrderList.get(0).getThirdCreateTime();
|
| | |
|
| | | UserLevelEnum level = UserLevelUtil.getByOrderRank(commonOrderList.get(0).getUrank());
|
| | | if (level == null)
|
| | | level = UserLevelEnum.daRen;
|
| | | TeamDividentsSourceOrder order = TeamDividentsSourceOrderFactory.create(commonOrderList);
|
| | | if (order == null)
|
| | | return;
|
| | | try {
|
| | | order = teamDividentsSourceOrderService.addTeamDividentsSourceOrder(order);
|
| | | } catch (ParamsException e) {
|
| | | throw new TeamDividentsSourceOrderException(101, "参数不完整");
|
| | | }
|
| | |
|
| | | if (order == null || order.getId() == null) {
|
| | | throw new TeamDividentsSourceOrderException(2, "添加源订单失败");
|
| | | }
|
| | |
|
| | | // 获取源订单分配的分红用户ID数量
|
| | | long count = teamDividentsSourceOrderUserMapService.countBySourceOrderId(order.getId());
|
| | | if (count > 0)// 已存在
|
| | | return;
|
| | |
|
| | | SystemEnum system = userInfoService.getUserSystem(order.getUid());
|
| | |
|
| | | // 计算团队分红比例
|
| | | List<UserTeamRate> rateList = orderHongBaoMoneyComputeService.getTeamDividentsRates(level, bossList,
|
| | | placeOrderTime, system);
|
| | | if (rateList != null)
|
| | | for (UserTeamRate rate : rateList) {
|
| | | BigDecimal money = MoneyBigDecimalUtil.div(rate.getRate().multiply(order.getMoney()),
|
| | | new BigDecimal(100), 4);
|
| | |
|
| | | TeamDividentsSourceOrderUserMap map = TeamDividentsSourceOrderUserMapFactory.create(order,
|
| | | rate.getUid(), rate.getRate(), money, TeamDividentsSourceOrderUserMap.TYPE_TEAM_DIVIDENTS);
|
| | | try {
|
| | | teamDividentsSourceOrderUserMapService.addDividentsSourceOrderUserMap(map);
|
| | | } catch (ParamsException e) {
|
| | | throw new TeamDividentsSourceOrderException(201, "参数不完整");
|
| | | }
|
| | | }
|
| | | // 计算二级外分红比例
|
| | | rateList = orderHongBaoMoneyComputeService.getTeamRewardMoreThan2LevelRates(level, bossList, placeOrderTime, system);
|
| | | if (rateList != null)
|
| | | for (UserTeamRate rate : rateList) {
|
| | | BigDecimal money = MoneyBigDecimalUtil.div(rate.getRate().multiply(order.getMoney()),
|
| | | new BigDecimal(100), 4);
|
| | |
|
| | | TeamDividentsSourceOrderUserMap map = TeamDividentsSourceOrderUserMapFactory.create(order,
|
| | | rate.getUid(), rate.getRate(), money, TeamDividentsSourceOrderUserMap.TYPE_MORE_THAN_2);
|
| | | try {
|
| | | teamDividentsSourceOrderUserMapService.addDividentsSourceOrderUserMap(map);
|
| | | } catch (ParamsException e) {
|
| | | throw new TeamDividentsSourceOrderException(301, "参数不完整");
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 订单失效
|
| | | *
|
| | | * @throws
|
| | | * @Title: invalidBySourceOrderId
|
| | | * @Description: void 返回类型
|
| | | */
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void invalidByOrder(String orderNo, int sourceType, String beiZhu) {
|
| | | teamDividentsSourceOrderService.invalidOrder(orderNo, sourceType, beiZhu);
|
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType);
|
| | | if (order != null) {
|
| | | teamDividentsSourceOrderUserMapService.invalidBySourceOrderId(order.getId());
|
| | | }
|
| | | }
|
| | |
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void invalidBySourceUid(Long sourceUid, String beiZhu) {
|
| | | // teamDividentsSourceOrderService.invalidOrderByUid(sourceUid, beiZhu);
|
| | | teamDividentsSourceOrderUserMapService.invalidOrderBySourceUid(sourceUid, beiZhu);
|
| | | }
|
| | |
|
| | | /**
|
| | | * 订单结算
|
| | | *
|
| | | * @throws
|
| | | * @Title: orderSettle
|
| | | * @Description: void 返回类型
|
| | | */
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void orderSettle(String orderNo, int sourceType) {
|
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType);
|
| | | if (order != null) {
|
| | | List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(sourceType, orderNo);
|
| | | if (commonOrderList == null)
|
| | | return;
|
| | |
|
| | | TeamDividentsSourceOrder newOrder = TeamDividentsSourceOrderFactory.create(commonOrderList);
|
| | |
|
| | | if (newOrder == null || newOrder.getPreSendTime() == null)
|
| | | return;
|
| | |
|
| | | BigDecimal money = CommonOrderUtil.computeIncome(commonOrderList);
|
| | | teamDividentsSourceOrderService.orderSettle(orderNo, sourceType, newOrder.getPreSendTime(), money);
|
| | | teamDividentsSourceOrderUserMapService.orderSettle(order.getId(), newOrder.getPreSendTime(), money);
|
| | | }
|
| | | }
|
| | |
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void updateOrderMoney(String orderNo, int sourceType) {
|
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType);
|
| | | if (order != null) {
|
| | | List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(sourceType, orderNo);
|
| | | if (commonOrderList == null)
|
| | | return;
|
| | |
|
| | | Integer state = CommonOrderUtil.getState(commonOrderList);
|
| | | BigDecimal money = null;
|
| | | switch (state) {
|
| | | case CommonOrder.STATE_FK:
|
| | | money = CommonOrderUtil.computeEstimate(commonOrderList);
|
| | | teamDividentsSourceOrderService.updateMoney(orderNo, sourceType, money);
|
| | | teamDividentsSourceOrderUserMapService.updateMoney(order.getId(), money);
|
| | | break;
|
| | | case CommonOrder.STATE_WQ:
|
| | | case CommonOrder.STATE_JS:
|
| | | TeamDividentsSourceOrder newOrder = TeamDividentsSourceOrderFactory.create(commonOrderList);
|
| | |
|
| | | if (newOrder == null || newOrder.getPreSendTime() == null)
|
| | | return;
|
| | |
|
| | | money = CommonOrderUtil.computeIncome(commonOrderList);
|
| | | teamDividentsSourceOrderService.orderSettle(orderNo, sourceType, newOrder.getPreSendTime(), money);
|
| | | teamDividentsSourceOrderUserMapService.orderSettle(order.getId(), newOrder.getPreSendTime(), money);
|
| | | break;
|
| | | case CommonOrder.STATE_SX:
|
| | | invalidByOrder(orderNo, sourceType, "订单失效");
|
| | | break;
|
| | | }
|
| | |
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.service.manger.order; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import com.yeshi.fanli.entity.SystemEnum; |
| | | import com.yeshi.fanli.service.inter.user.UserInfoService; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import com.yeshi.fanli.dto.order.UserTeamLevel; |
| | | import com.yeshi.fanli.dto.order.UserTeamRate; |
| | | import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; |
| | | import com.yeshi.fanli.entity.order.CommonOrder; |
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrder; |
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap; |
| | | import com.yeshi.fanli.exception.ParamsException; |
| | | import com.yeshi.fanli.exception.order.dividents.TeamDividentsSourceOrderException; |
| | | import com.yeshi.fanli.service.inter.order.CommonOrderService; |
| | | import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService; |
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService; |
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderUserMapService; |
| | | import com.yeshi.fanli.util.Constant; |
| | | import org.yeshi.utils.MoneyBigDecimalUtil; |
| | | import com.yeshi.fanli.util.factory.order.dividents.TeamDividentsSourceOrderFactory; |
| | | import com.yeshi.fanli.util.factory.order.dividents.TeamDividentsSourceOrderUserMapFactory; |
| | | import com.yeshi.fanli.util.order.CommonOrderUtil; |
| | | import com.yeshi.fanli.util.user.UserLevelUtil; |
| | | |
| | | /** |
| | | * 团队分红来源管理 |
| | | * |
| | | * @author Administrator |
| | | */ |
| | | @Component |
| | | public class TeamDividentsSourceManager { |
| | | |
| | | @Resource |
| | | private TeamDividentsSourceOrderService teamDividentsSourceOrderService; |
| | | |
| | | @Resource |
| | | private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService; |
| | | |
| | | @Resource |
| | | private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService; |
| | | |
| | | @Resource |
| | | private CommonOrderService commonOrderService; |
| | | |
| | | @Resource |
| | | private UserInfoService userInfoService; |
| | | |
| | | /** |
| | | * @param commonOrderList |
| | | * @param bossList void 返回类型 |
| | | * @throws ParamsException 添加分红源 |
| | | * @throws |
| | | * @Title: addSource |
| | | * @Description: |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addSource(List<CommonOrder> commonOrderList, List<UserTeamLevel> bossList) |
| | | throws TeamDividentsSourceOrderException, ParamsException { |
| | | if (commonOrderList.get(0).getThirdCreateTime().getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME) |
| | | return; |
| | | |
| | | Date placeOrderTime = commonOrderList.get(0).getThirdCreateTime(); |
| | | |
| | | UserLevelEnum level = UserLevelUtil.getByOrderRank(commonOrderList.get(0).getUrank()); |
| | | if (level == null) |
| | | level = UserLevelEnum.daRen; |
| | | TeamDividentsSourceOrder order = TeamDividentsSourceOrderFactory.create(commonOrderList); |
| | | if (order == null) |
| | | return; |
| | | try { |
| | | order = teamDividentsSourceOrderService.addTeamDividentsSourceOrder(order); |
| | | } catch (ParamsException e) { |
| | | throw new TeamDividentsSourceOrderException(101, "参数不完整"); |
| | | } |
| | | |
| | | if (order == null || order.getId() == null) { |
| | | throw new TeamDividentsSourceOrderException(2, "添加源订单失败"); |
| | | } |
| | | |
| | | // 获取源订单分配的分红用户ID数量 |
| | | long count = teamDividentsSourceOrderUserMapService.countBySourceOrderId(order.getId()); |
| | | if (count > 0)// 已存在 |
| | | return; |
| | | |
| | | SystemEnum system = userInfoService.getUserSystem(order.getUid()); |
| | | |
| | | // 计算团队分红比例 |
| | | List<UserTeamRate> rateList = orderHongBaoMoneyComputeService.getTeamDividentsRates(level, bossList, |
| | | placeOrderTime, system); |
| | | if (rateList != null) |
| | | for (UserTeamRate rate : rateList) { |
| | | BigDecimal money = MoneyBigDecimalUtil.div(rate.getRate().multiply(order.getMoney()), |
| | | new BigDecimal(100), 4); |
| | | |
| | | TeamDividentsSourceOrderUserMap map = TeamDividentsSourceOrderUserMapFactory.create(order, |
| | | rate.getUid(), rate.getRate(), money, TeamDividentsSourceOrderUserMap.TYPE_TEAM_DIVIDENTS); |
| | | try { |
| | | teamDividentsSourceOrderUserMapService.addDividentsSourceOrderUserMap(map); |
| | | } catch (ParamsException e) { |
| | | throw new TeamDividentsSourceOrderException(201, "参数不完整"); |
| | | } |
| | | } |
| | | // 计算二级外分红比例 |
| | | rateList = orderHongBaoMoneyComputeService.getTeamRewardMoreThan2LevelRates(level, bossList, placeOrderTime, system); |
| | | if (rateList != null) |
| | | for (UserTeamRate rate : rateList) { |
| | | BigDecimal money = MoneyBigDecimalUtil.div(rate.getRate().multiply(order.getMoney()), |
| | | new BigDecimal(100), 4); |
| | | |
| | | TeamDividentsSourceOrderUserMap map = TeamDividentsSourceOrderUserMapFactory.create(order, |
| | | rate.getUid(), rate.getRate(), money, TeamDividentsSourceOrderUserMap.TYPE_MORE_THAN_2); |
| | | try { |
| | | teamDividentsSourceOrderUserMapService.addDividentsSourceOrderUserMap(map); |
| | | } catch (ParamsException e) { |
| | | throw new TeamDividentsSourceOrderException(301, "参数不完整"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 订单失效 |
| | | * |
| | | * @throws |
| | | * @Title: invalidBySourceOrderId |
| | | * @Description: void 返回类型 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void invalidByOrder(String orderNo, int sourceType, String beiZhu) { |
| | | teamDividentsSourceOrderService.invalidOrder(orderNo, sourceType, beiZhu); |
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType); |
| | | if (order != null) { |
| | | teamDividentsSourceOrderUserMapService.invalidBySourceOrderId(order.getId()); |
| | | } |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void invalidBySourceUid(Long sourceUid, String beiZhu) { |
| | | // teamDividentsSourceOrderService.invalidOrderByUid(sourceUid, beiZhu); |
| | | teamDividentsSourceOrderUserMapService.invalidOrderBySourceUid(sourceUid, beiZhu); |
| | | } |
| | | |
| | | /** |
| | | * 订单结算 |
| | | * |
| | | * @throws |
| | | * @Title: orderSettle |
| | | * @Description: void 返回类型 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void orderSettle(String orderNo, int sourceType) { |
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType); |
| | | if (order != null) { |
| | | List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(sourceType, orderNo); |
| | | if (commonOrderList == null) |
| | | return; |
| | | |
| | | TeamDividentsSourceOrder newOrder = TeamDividentsSourceOrderFactory.create(commonOrderList); |
| | | |
| | | if (newOrder == null || newOrder.getPreSendTime() == null) |
| | | return; |
| | | |
| | | BigDecimal money = CommonOrderUtil.computeIncome(commonOrderList); |
| | | teamDividentsSourceOrderService.orderSettle(orderNo, sourceType, newOrder.getPreSendTime(), money); |
| | | teamDividentsSourceOrderUserMapService.orderSettle(order.getId(), newOrder.getPreSendTime(), money); |
| | | } |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateOrderMoney(String orderNo, int sourceType) { |
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType); |
| | | if (order != null) { |
| | | List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(sourceType, orderNo); |
| | | if (commonOrderList == null) |
| | | return; |
| | | |
| | | Integer state = CommonOrderUtil.getState(commonOrderList); |
| | | BigDecimal money = null; |
| | | switch (state) { |
| | | case CommonOrder.STATE_FK: |
| | | money = CommonOrderUtil.computeEstimate(commonOrderList); |
| | | teamDividentsSourceOrderService.updateMoney(orderNo, sourceType, money); |
| | | teamDividentsSourceOrderUserMapService.updateMoney(order.getId(), money); |
| | | break; |
| | | case CommonOrder.STATE_WQ: |
| | | case CommonOrder.STATE_JS: |
| | | TeamDividentsSourceOrder newOrder = TeamDividentsSourceOrderFactory.create(commonOrderList); |
| | | |
| | | if (newOrder == null || newOrder.getPreSendTime() == null) |
| | | return; |
| | | |
| | | money = CommonOrderUtil.computeIncome(commonOrderList); |
| | | teamDividentsSourceOrderService.orderSettle(orderNo, sourceType, newOrder.getPreSendTime(), money); |
| | | teamDividentsSourceOrderUserMapService.orderSettle(order.getId(), newOrder.getPreSendTime(), money); |
| | | break; |
| | | case CommonOrder.STATE_SX: |
| | | invalidByOrder(orderNo, sourceType, "订单失效"); |
| | | break; |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | } |