| | |
| | | package com.yeshi.fanli.service.manger.order;
|
| | |
|
| | | import java.math.BigDecimal;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Date;
|
| | | import java.util.HashMap;
|
| | | import java.util.Iterator;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.stereotype.Component;
|
| | | import org.springframework.transaction.annotation.Transactional;
|
| | |
|
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsDebt;
|
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsRecord;
|
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrder;
|
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap;
|
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceUser;
|
| | | import com.yeshi.fanli.exception.ParamsException;
|
| | | import com.yeshi.fanli.exception.money.TeamDividentsDebtException;
|
| | | import com.yeshi.fanli.exception.money.TeamEincomeRecordException;
|
| | | import com.yeshi.fanli.exception.money.UserMoneyDetailException;
|
| | | import com.yeshi.fanli.exception.order.dividents.TeamDividentsRecordException;
|
| | | import com.yeshi.fanli.service.inter.money.TeamDividentsDebtService;
|
| | | import com.yeshi.fanli.service.inter.money.UserMoneyService;
|
| | | import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsRecordService;
|
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService;
|
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderUserMapService;
|
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceUserService;
|
| | | import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
|
| | | import com.yeshi.fanli.service.inter.user.vip.TeamUserLevelStatisticService;
|
| | | import com.yeshi.fanli.service.manger.money.TeamEincomeManager;
|
| | | import org.yeshi.utils.TimeUtil;
|
| | |
|
| | | /**
|
| | | * 团队分红管理
|
| | | * @author Administrator
|
| | | *
|
| | | */
|
| | | @Component
|
| | | public class TeamDividentsManager {
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsSourceManager teamDividentsSourceManager;
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsSourceOrderService teamDividentsSourceOrderService;
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService;
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsSourceUserService teamDividentsSourceUserService;
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsRecordService teamDividentsRecordService;
|
| | |
|
| | | @Resource
|
| | | private ThreeSaleSerivce threeSaleSerivce;
|
| | |
|
| | | @Resource
|
| | | private TeamUserLevelStatisticService teamUserLevelStatisticService;
|
| | |
|
| | | @Resource
|
| | | private TeamDividentsDebtService teamDividentsDebtService;
|
| | |
|
| | | @Resource
|
| | | private UserMoneyService userMoneyService;
|
| | |
|
| | | @Resource
|
| | | private HongBaoManageService hongBaoManageService;
|
| | |
|
| | | @Resource
|
| | | private TeamEincomeManager teamEincomeManager;
|
| | |
|
| | | /**
|
| | | * 开始分红
|
| | | * @Title: startDividents
|
| | | * @Description: |
| | | * @param sourceUid -源用户
|
| | | * void 返回类型
|
| | | * @throws
|
| | | */
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void startDividents(Long sourceUid) throws ParamsException {
|
| | | String day = TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd");
|
| | | Date preSendTime = new Date(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd"));
|
| | | startDividents(sourceUid, preSendTime);
|
| | | }
|
| | |
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void startDividents(Long sourceUid, Date preSendTime) throws ParamsException {
|
| | | String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd");
|
| | | // 查询出可用于分红的用户的总金额
|
| | | long count = teamDividentsSourceOrderUserMapService.countCanSend(sourceUid, preSendTime);
|
| | | int pageSize = 1000;
|
| | | int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
|
| | | List<TeamDividentsSourceOrderUserMap> totalList = new ArrayList<>();
|
| | | for (int p = 0; p < page; p++) {
|
| | | List<TeamDividentsSourceOrderUserMap> list = teamDividentsSourceOrderUserMapService.listCanSend(sourceUid,
|
| | | preSendTime, p + 1, pageSize);
|
| | | if (list != null && list.size() > 0)
|
| | | totalList.addAll(list);
|
| | | }
|
| | |
|
| | | Map<String, BigDecimal> moneyMap = new HashMap<>();
|
| | |
|
| | | for (TeamDividentsSourceOrderUserMap order : totalList) {
|
| | | TeamDividentsSourceOrderUserMap map = teamDividentsSourceOrderUserMapService
|
| | | .selectByPrimaryKeyForUpdate(order.getId());
|
| | | if (map != null && map.getState() == TeamDividentsSourceOrderUserMap.STATE_JS) {
|
| | | String key = map.getTargetUid() + "#" + map.getType();
|
| | | // 计算分红对应的资金
|
| | | if (moneyMap.get(key) == null)
|
| | | moneyMap.put(key, new BigDecimal(0));
|
| | | moneyMap.put(key, moneyMap.get(key).add(map.getMoney()));
|
| | | teamDividentsSourceOrderUserMapService.send(map.getId());
|
| | | }
|
| | | }
|
| | |
|
| | | for (Iterator<String> its = moneyMap.keySet().iterator(); its.hasNext();) {
|
| | | String key = its.next();
|
| | | Long uid = Long.parseLong(key.split("#")[0]);
|
| | | Integer type = Integer.parseInt(key.split("#")[1]);
|
| | | BigDecimal dividents = moneyMap.get(key).setScale(2, BigDecimal.ROUND_DOWN);
|
| | | // 将资金分配到参与分红的用户
|
| | | TeamDividentsSourceUser teamDividentsSourceUser = new TeamDividentsSourceUser();
|
| | | teamDividentsSourceUser.setDay(day);
|
| | | teamDividentsSourceUser.setMoney(dividents);
|
| | | teamDividentsSourceUser.setSourceUid(sourceUid);
|
| | | teamDividentsSourceUser.setTargetUid(uid);
|
| | | teamDividentsSourceUser.setType(type);
|
| | | teamDividentsSourceUserService.addTeamDividentsSourceUser(teamDividentsSourceUser);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 分红计算是否完成
|
| | | * @Title: isSourceUserComupteFinish
|
| | | * @Description: |
| | | * @return |
| | | * boolean 返回类型
|
| | | * @throws
|
| | | */
|
| | | public boolean isSourceUserComupteFinish(String day) {
|
| | | Date preSendTime = new Date(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd"));
|
| | | long count = teamDividentsSourceOrderUserMapService.countCanSend(null, preSendTime);
|
| | | return count == 0;
|
| | | }
|
| | |
|
| | | private void addToTeamEincome(Long uid, Date preSendTime, int type) throws TeamDividentsRecordException,
|
| | | TeamDividentsDebtException, UserMoneyDetailException, ParamsException, TeamEincomeRecordException {
|
| | | String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd");
|
| | | BigDecimal money = teamDividentsSourceUserService.sumMoneyByUidAndDay(uid, day, type);
|
| | | // 查询需要扣除的资金
|
| | | List<TeamDividentsDebt> list = teamDividentsDebtService.listNeedRepayDebt(uid, preSendTime, 1, 1000);
|
| | | for (TeamDividentsDebt debt : list) {
|
| | | if (money.subtract(debt.getLeftMoney()).compareTo(new BigDecimal(0)) >= 0) {// 还有钱还
|
| | | money = money.subtract(debt.getLeftMoney());
|
| | | teamDividentsDebtService.repayDebt(debt.getId(), debt.getLeftMoney());
|
| | | } else if (money.compareTo(new BigDecimal(0)) > 0) {
|
| | | teamDividentsDebtService.repayDebt(debt.getId(), money);
|
| | | money = new BigDecimal(0);
|
| | | } else// 没有钱还了
|
| | | break;
|
| | | }
|
| | |
|
| | | // 统计资金
|
| | | TeamDividentsRecord record = new TeamDividentsRecord();
|
| | | record.setDay(day);
|
| | | record.setMoney(money);
|
| | | record.setState(TeamDividentsRecord.STATE_VALID);
|
| | | record.setUid(uid);
|
| | | record.setType(type);
|
| | | teamDividentsRecordService.addTeamDividentsRecord(record);
|
| | |
|
| | | // 有分红才显示资金明细
|
| | | if (money.compareTo(new BigDecimal(0)) > 0) {
|
| | | teamEincomeManager.addTeamDividents(uid, preSendTime, money, type);
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | /**
|
| | | * @throws TeamDividentsDebtException |
| | | * 添加分红记录
|
| | | * @Title: addDividentsRecord
|
| | | * @Description: |
| | | * @param uid -用户ID
|
| | | * @param money -分红金额
|
| | | * @param day -分红日期
|
| | | * void 返回类型
|
| | | * @throws
|
| | | */
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void addToTeamEincome(Long uid, Date preSendTime) throws TeamDividentsRecordException,
|
| | | TeamDividentsDebtException, UserMoneyDetailException, ParamsException, TeamEincomeRecordException {
|
| | | addToTeamEincome(uid, preSendTime, TeamDividentsSourceOrderUserMap.TYPE_MORE_THAN_2);
|
| | | addToTeamEincome(uid, preSendTime, TeamDividentsSourceOrderUserMap.TYPE_TEAM_DIVIDENTS);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @throws TeamDividentsDebtException |
| | | * 订单维权
|
| | | * @Title: weiQuan
|
| | | * @Description: |
| | | * @param orderNo
|
| | | * @param tradeId
|
| | | * @param sourceType |
| | | * void 返回类型
|
| | | * @throws
|
| | | */
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void weiQuan(String orderNo, int sourceType) throws TeamDividentsDebtException {
|
| | | // 查询订单是否已经分红
|
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType);
|
| | | if (order == null)
|
| | | return;
|
| | |
|
| | | List<TeamDividentsSourceOrderUserMap> mapList = teamDividentsSourceOrderUserMapService
|
| | | .listBySourceOrderId(order.getId());
|
| | | if (mapList == null || mapList.size() == 0)
|
| | | return;
|
| | |
|
| | | int state = mapList.get(0).getState();
|
| | |
|
| | | if (state == TeamDividentsSourceOrderUserMap.STATE_SX)
|
| | | return;
|
| | |
|
| | | if (state == TeamDividentsSourceOrderUserMap.STATE_YILINGQU) {// 已经发送,需要参与分红的人分摊
|
| | |
|
| | | // 按UID封装统计资金
|
| | | Map<Long, TeamDividentsSourceOrderUserMap> orderUserMap = new HashMap<>();
|
| | | for (TeamDividentsSourceOrderUserMap map : mapList) {
|
| | | if (orderUserMap.get(map.getTargetUid()) == null)
|
| | | orderUserMap.put(map.getTargetUid(), map);
|
| | | else {
|
| | | TeamDividentsSourceOrderUserMap oldMap = orderUserMap.get(map.getTargetUid());
|
| | | oldMap.setMoney(map.getMoney().add(oldMap.getMoney()));
|
| | | orderUserMap.put(map.getTargetUid(), oldMap);
|
| | | }
|
| | | }
|
| | |
|
| | | for (Iterator<Long> its = orderUserMap.keySet().iterator(); its.hasNext();) {
|
| | | Long uid = its.next();
|
| | | TeamDividentsSourceOrderUserMap map = orderUserMap.get(uid);
|
| | |
|
| | | String day = TimeUtil.getGernalTime(map.getPreSendTime().getTime(), "yyyy-MM-dd");
|
| | | // 查询本次总共的返利
|
| | | TeamDividentsSourceUser sourceUser = teamDividentsSourceUserService
|
| | | .selectBySourceUidAndDayAndUid(map.getSourceUid(), map.getTargetUid(), day);
|
| | | if (sourceUser != null) {
|
| | | // 不能出现倒欠一分的情况
|
| | | BigDecimal debtMoney = map.getMoney().setScale(2, BigDecimal.ROUND_UP);
|
| | | if (debtMoney.compareTo(sourceUser.getMoney()) > 0)
|
| | | debtMoney = sourceUser.getMoney();
|
| | |
|
| | | // 需要偿还的资金
|
| | | TeamDividentsDebt debt = new TeamDividentsDebt();
|
| | | debt.setLeftMoney(debtMoney);
|
| | | debt.setOriginMoney(debtMoney);
|
| | | debt.setOrderNo(orderNo);
|
| | | debt.setSourceType(sourceType);
|
| | | debt.setUid(map.getTargetUid());
|
| | | // 加入待偿还记录
|
| | | teamDividentsDebtService.addDebt(debt);
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | } else if (order.getState() == TeamDividentsSourceOrderUserMap.STATE_JS
|
| | | || order.getState() == TeamDividentsSourceOrderUserMap.STATE_FK) {
|
| | | teamDividentsSourceManager.invalidByOrder(orderNo, sourceType, "订单维权");
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.service.manger.order; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsDebt; |
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsRecord; |
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrder; |
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap; |
| | | import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceUser; |
| | | import com.yeshi.fanli.exception.ParamsException; |
| | | import com.yeshi.fanli.exception.money.TeamDividentsDebtException; |
| | | import com.yeshi.fanli.exception.money.TeamEincomeRecordException; |
| | | import com.yeshi.fanli.exception.money.UserMoneyDetailException; |
| | | import com.yeshi.fanli.exception.order.dividents.TeamDividentsRecordException; |
| | | import com.yeshi.fanli.service.inter.money.TeamDividentsDebtService; |
| | | import com.yeshi.fanli.service.inter.money.UserMoneyService; |
| | | import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; |
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsRecordService; |
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService; |
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderUserMapService; |
| | | import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceUserService; |
| | | import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; |
| | | import com.yeshi.fanli.service.inter.user.vip.TeamUserLevelStatisticService; |
| | | import com.yeshi.fanli.service.manger.money.TeamEincomeManager; |
| | | import org.yeshi.utils.TimeUtil; |
| | | |
| | | /** |
| | | * 团队分红管理 |
| | | * @author Administrator |
| | | * |
| | | */ |
| | | @Component |
| | | public class TeamDividentsManager { |
| | | |
| | | @Resource |
| | | private TeamDividentsSourceManager teamDividentsSourceManager; |
| | | |
| | | @Resource |
| | | private TeamDividentsSourceOrderService teamDividentsSourceOrderService; |
| | | |
| | | @Resource |
| | | private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService; |
| | | |
| | | @Resource |
| | | private TeamDividentsSourceUserService teamDividentsSourceUserService; |
| | | |
| | | @Resource |
| | | private TeamDividentsRecordService teamDividentsRecordService; |
| | | |
| | | @Resource |
| | | private ThreeSaleSerivce threeSaleSerivce; |
| | | |
| | | @Resource |
| | | private TeamUserLevelStatisticService teamUserLevelStatisticService; |
| | | |
| | | @Resource |
| | | private TeamDividentsDebtService teamDividentsDebtService; |
| | | |
| | | @Resource |
| | | private UserMoneyService userMoneyService; |
| | | |
| | | @Resource |
| | | private HongBaoManageService hongBaoManageService; |
| | | |
| | | @Resource |
| | | private TeamEincomeManager teamEincomeManager; |
| | | |
| | | /** |
| | | * 开始分红 |
| | | * @Title: startDividents |
| | | * @Description: |
| | | * @param sourceUid -源用户 |
| | | * void 返回类型 |
| | | * @throws |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void startDividents(Long sourceUid) throws ParamsException { |
| | | String day = TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"); |
| | | Date preSendTime = new Date(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd")); |
| | | startDividents(sourceUid, preSendTime); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void startDividents(Long sourceUid, Date preSendTime) throws ParamsException { |
| | | String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd"); |
| | | // 查询出可用于分红的用户的总金额 |
| | | long count = teamDividentsSourceOrderUserMapService.countCanSend(sourceUid, preSendTime); |
| | | int pageSize = 1000; |
| | | int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1); |
| | | List<TeamDividentsSourceOrderUserMap> totalList = new ArrayList<>(); |
| | | for (int p = 0; p < page; p++) { |
| | | List<TeamDividentsSourceOrderUserMap> list = teamDividentsSourceOrderUserMapService.listCanSend(sourceUid, |
| | | preSendTime, p + 1, pageSize); |
| | | if (list != null && list.size() > 0) |
| | | totalList.addAll(list); |
| | | } |
| | | |
| | | Map<String, BigDecimal> moneyMap = new HashMap<>(); |
| | | |
| | | for (TeamDividentsSourceOrderUserMap order : totalList) { |
| | | TeamDividentsSourceOrderUserMap map = teamDividentsSourceOrderUserMapService |
| | | .selectByPrimaryKeyForUpdate(order.getId()); |
| | | if (map != null && map.getState() == TeamDividentsSourceOrderUserMap.STATE_JS) { |
| | | String key = map.getTargetUid() + "#" + map.getType(); |
| | | // 计算分红对应的资金 |
| | | if (moneyMap.get(key) == null) |
| | | moneyMap.put(key, new BigDecimal(0)); |
| | | moneyMap.put(key, moneyMap.get(key).add(map.getMoney())); |
| | | teamDividentsSourceOrderUserMapService.send(map.getId()); |
| | | } |
| | | } |
| | | |
| | | for (Iterator<String> its = moneyMap.keySet().iterator(); its.hasNext();) { |
| | | String key = its.next(); |
| | | Long uid = Long.parseLong(key.split("#")[0]); |
| | | Integer type = Integer.parseInt(key.split("#")[1]); |
| | | BigDecimal dividents = moneyMap.get(key).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // 将资金分配到参与分红的用户 |
| | | TeamDividentsSourceUser teamDividentsSourceUser = new TeamDividentsSourceUser(); |
| | | teamDividentsSourceUser.setDay(day); |
| | | teamDividentsSourceUser.setMoney(dividents); |
| | | teamDividentsSourceUser.setSourceUid(sourceUid); |
| | | teamDividentsSourceUser.setTargetUid(uid); |
| | | teamDividentsSourceUser.setType(type); |
| | | teamDividentsSourceUserService.addTeamDividentsSourceUser(teamDividentsSourceUser); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 分红计算是否完成 |
| | | * @Title: isSourceUserComupteFinish |
| | | * @Description: |
| | | * @return |
| | | * boolean 返回类型 |
| | | * @throws |
| | | */ |
| | | public boolean isSourceUserComupteFinish(String day) { |
| | | Date preSendTime = new Date(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd")); |
| | | long count = teamDividentsSourceOrderUserMapService.countCanSend(null, preSendTime); |
| | | return count == 0; |
| | | } |
| | | |
| | | private void addToTeamEincome(Long uid, Date preSendTime, int type) throws TeamDividentsRecordException, |
| | | TeamDividentsDebtException, UserMoneyDetailException, ParamsException, TeamEincomeRecordException { |
| | | String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd"); |
| | | BigDecimal money = teamDividentsSourceUserService.sumMoneyByUidAndDay(uid, day, type); |
| | | // 查询需要扣除的资金 |
| | | List<TeamDividentsDebt> list = teamDividentsDebtService.listNeedRepayDebt(uid, preSendTime, 1, 1000); |
| | | for (TeamDividentsDebt debt : list) { |
| | | if (money.subtract(debt.getLeftMoney()).compareTo(new BigDecimal(0)) >= 0) {// 还有钱还 |
| | | money = money.subtract(debt.getLeftMoney()); |
| | | teamDividentsDebtService.repayDebt(debt.getId(), debt.getLeftMoney()); |
| | | } else if (money.compareTo(new BigDecimal(0)) > 0) { |
| | | teamDividentsDebtService.repayDebt(debt.getId(), money); |
| | | money = new BigDecimal(0); |
| | | } else// 没有钱还了 |
| | | break; |
| | | } |
| | | |
| | | // 统计资金 |
| | | TeamDividentsRecord record = new TeamDividentsRecord(); |
| | | record.setDay(day); |
| | | record.setMoney(money); |
| | | record.setState(TeamDividentsRecord.STATE_VALID); |
| | | record.setUid(uid); |
| | | record.setType(type); |
| | | teamDividentsRecordService.addTeamDividentsRecord(record); |
| | | |
| | | // 有分红才显示资金明细 |
| | | if (money.compareTo(new BigDecimal(0)) > 0) { |
| | | teamEincomeManager.addTeamDividents(uid, preSendTime, money, type); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * @throws TeamDividentsDebtException |
| | | * 添加分红记录 |
| | | * @Title: addDividentsRecord |
| | | * @Description: |
| | | * @param uid -用户ID |
| | | * @param money -分红金额 |
| | | * @param day -分红日期 |
| | | * void 返回类型 |
| | | * @throws |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addToTeamEincome(Long uid, Date preSendTime) throws TeamDividentsRecordException, |
| | | TeamDividentsDebtException, UserMoneyDetailException, ParamsException, TeamEincomeRecordException { |
| | | addToTeamEincome(uid, preSendTime, TeamDividentsSourceOrderUserMap.TYPE_MORE_THAN_2); |
| | | addToTeamEincome(uid, preSendTime, TeamDividentsSourceOrderUserMap.TYPE_TEAM_DIVIDENTS); |
| | | } |
| | | |
| | | /** |
| | | * @throws TeamDividentsDebtException |
| | | * 订单维权 |
| | | * @Title: weiQuan |
| | | * @Description: |
| | | * @param orderNo |
| | | * @param tradeId |
| | | * @param sourceType |
| | | * void 返回类型 |
| | | * @throws |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void weiQuan(String orderNo, int sourceType) throws TeamDividentsDebtException { |
| | | // 查询订单是否已经分红 |
| | | TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType); |
| | | if (order == null) |
| | | return; |
| | | |
| | | List<TeamDividentsSourceOrderUserMap> mapList = teamDividentsSourceOrderUserMapService |
| | | .listBySourceOrderId(order.getId()); |
| | | if (mapList == null || mapList.size() == 0) |
| | | return; |
| | | |
| | | int state = mapList.get(0).getState(); |
| | | |
| | | if (state == TeamDividentsSourceOrderUserMap.STATE_SX) |
| | | return; |
| | | |
| | | if (state == TeamDividentsSourceOrderUserMap.STATE_YILINGQU) {// 已经发送,需要参与分红的人分摊 |
| | | |
| | | // 按UID封装统计资金 |
| | | Map<Long, TeamDividentsSourceOrderUserMap> orderUserMap = new HashMap<>(); |
| | | for (TeamDividentsSourceOrderUserMap map : mapList) { |
| | | if (orderUserMap.get(map.getTargetUid()) == null) |
| | | orderUserMap.put(map.getTargetUid(), map); |
| | | else { |
| | | TeamDividentsSourceOrderUserMap oldMap = orderUserMap.get(map.getTargetUid()); |
| | | oldMap.setMoney(map.getMoney().add(oldMap.getMoney())); |
| | | orderUserMap.put(map.getTargetUid(), oldMap); |
| | | } |
| | | } |
| | | |
| | | for (Iterator<Long> its = orderUserMap.keySet().iterator(); its.hasNext();) { |
| | | Long uid = its.next(); |
| | | TeamDividentsSourceOrderUserMap map = orderUserMap.get(uid); |
| | | |
| | | String day = TimeUtil.getGernalTime(map.getPreSendTime().getTime(), "yyyy-MM-dd"); |
| | | // 查询本次总共的返利 |
| | | TeamDividentsSourceUser sourceUser = teamDividentsSourceUserService |
| | | .selectBySourceUidAndDayAndUid(map.getSourceUid(), map.getTargetUid(), day); |
| | | if (sourceUser != null) { |
| | | // 不能出现倒欠一分的情况 |
| | | BigDecimal debtMoney = map.getMoney().setScale(2, BigDecimal.ROUND_UP); |
| | | if (debtMoney.compareTo(sourceUser.getMoney()) > 0) |
| | | debtMoney = sourceUser.getMoney(); |
| | | |
| | | // 需要偿还的资金 |
| | | TeamDividentsDebt debt = new TeamDividentsDebt(); |
| | | debt.setLeftMoney(debtMoney); |
| | | debt.setOriginMoney(debtMoney); |
| | | debt.setOrderNo(orderNo); |
| | | debt.setSourceType(sourceType); |
| | | debt.setUid(map.getTargetUid()); |
| | | // 加入待偿还记录 |
| | | teamDividentsDebtService.addDebt(debt); |
| | | } |
| | | |
| | | } |
| | | |
| | | } else if (order.getState() == TeamDividentsSourceOrderUserMap.STATE_JS |
| | | || order.getState() == TeamDividentsSourceOrderUserMap.STATE_FK) { |
| | | teamDividentsSourceManager.invalidByOrder(orderNo, sourceType, "订单维权"); |
| | | } |
| | | } |
| | | |
| | | } |