Commit c2efc288 authored by shiyu's avatar shiyu

计算介绍佣金

parent 00dd1533
...@@ -6,9 +6,11 @@ import com.wwdz.ch.core.consts.CommConsts; ...@@ -6,9 +6,11 @@ import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IdUtils; import com.wwdz.ch.core.util.IdUtils;
import com.wwdz.ch.db.dao.distribution.DistributorProfitDao; import com.wwdz.ch.db.dao.distribution.DistributorProfitDao;
import com.wwdz.ch.db.dao.distribution.UserAccountDetailDao;
import com.wwdz.ch.db.dao.distribution.UserBillDao; import com.wwdz.ch.db.dao.distribution.UserBillDao;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributorProfit; import com.wwdz.ch.db.domain.distribution.DistributorProfit;
import com.wwdz.ch.db.domain.distribution.UserAccountDetail;
import com.wwdz.ch.db.domain.distribution.UserBill; import com.wwdz.ch.db.domain.distribution.UserBill;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
...@@ -40,6 +42,9 @@ public class SysUserBillServiceImpl implements SysUserBillService { ...@@ -40,6 +42,9 @@ public class SysUserBillServiceImpl implements SysUserBillService {
@Autowired @Autowired
DistributorProfitDao distributorProfitDao; DistributorProfitDao distributorProfitDao;
@Autowired
UserAccountDetailDao userAccountDetailDao;
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
@Override @Override
public Result finishCalculate(DistributionOrder distributionOrder){ public Result finishCalculate(DistributionOrder distributionOrder){
...@@ -86,6 +91,12 @@ public class SysUserBillServiceImpl implements SysUserBillService { ...@@ -86,6 +91,12 @@ public class SysUserBillServiceImpl implements SysUserBillService {
updateBill.setTotalEntryAmount(updateBill.getOrderEntryAmount() + userBill.getIntroduceEntryAmount()); updateBill.setTotalEntryAmount(updateBill.getOrderEntryAmount() + userBill.getIntroduceEntryAmount());
} }
userBillDao.updateByPrimaryKey(updateBill); userBillDao.updateByPrimaryKey(updateBill);
//计算介绍人的佣金(介绍人非卖家自己和平台)
if (!distributionOrder.getShareRecordId().equals(distributionOrder.getSellerId().toString())
&& distributionOrder.getSellerId().longValue() != CommConsts.SYSTEM_ACCOUNT) {
calculateIntroduceAmount(distributionOrder.getDistributionOrderId(), accountPeriod);
}
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("************ 订单完成后计算订单账单ERROR: {}", e); logger.error("************ 订单完成后计算订单账单ERROR: {}", e);
...@@ -98,4 +109,35 @@ public class SysUserBillServiceImpl implements SysUserBillService { ...@@ -98,4 +109,35 @@ public class SysUserBillServiceImpl implements SysUserBillService {
} }
return Result.failed(); return Result.failed();
} }
/**
* 计算介绍佣金
*/
private void calculateIntroduceAmount(String distributionOrderId, String accountPeriod) {
UserAccountDetail userAccountDetail = userAccountDetailDao.find(distributionOrderId, BillEnum.AccountDetailTypeEnum.INTRODUCE.getCode());
if (userAccountDetail == null) {
logger.error("********** 交易id:{}, 查询不到佣金记录 **********", distributionOrderId);
return;
}
long userId = userAccountDetail.getUserId();
long amount = userAccountDetail.getAmount();
//查询介绍人是否有账单
UserBill userBill = userBillDao.findOne(accountPeriod, userId, BillEnum.BillStateEnum.NOT_PAID.getCode());
if (userBill == null) {
logger.error("********* 订单完成,介绍人: {}, 尚未创建 {} 账单 *********", userId, accountPeriod);
}
UserBill updateBill = new UserBill();
long newTotalWaitEntryAmount = userBill.getTotalWaitEntryAmount() - amount;
long newIntroduceWaitEntryAmount = userBill.getIntroduceWaitEntryAmount() - amount;
long newIntroduceEntryAmount = userBill.getIntroduceWaitEntryAmount() + amount;
long newTotalEntryAmount = userBill.getTotalEntryAmount() + amount;
updateBill.setId(userBill.getId());
updateBill.setTotalWaitEntryAmount(newTotalWaitEntryAmount);
updateBill.setIntroduceWaitEntryAmount(newIntroduceWaitEntryAmount);
updateBill.setTotalEntryAmount(newTotalEntryAmount);
updateBill.setIntroduceEntryAmount(newIntroduceEntryAmount);
userBillDao.updateByPrimaryKey(updateBill);
}
} }
...@@ -15,6 +15,14 @@ public interface UserAccountDetailDao { ...@@ -15,6 +15,14 @@ public interface UserAccountDetailDao {
List<UserAccountDetail> findList(UserAccountDetailRequestDto dto); List<UserAccountDetail> findList(UserAccountDetailRequestDto dto);
/**
* 根据交易id和收支类型查询账单明细
* @param transactionId
* @param type
* @return
*/
UserAccountDetail find(String transactionId, int type);
/** /**
* 按照筛选条件汇总账户金额 * 按照筛选条件汇总账户金额
* @param dto * @param dto
......
...@@ -66,6 +66,15 @@ public class UserAccountDetailDaoImpl implements UserAccountDetailDao { ...@@ -66,6 +66,15 @@ public class UserAccountDetailDaoImpl implements UserAccountDetailDao {
} }
@Override
public UserAccountDetail find(String transactionId, int type) {
UserAccountDetailExample example = new UserAccountDetailExample();
UserAccountDetailExample.Criteria criteria = example.createCriteria();
criteria.andTransactionIdEqualTo(transactionId);
criteria.andTypeEqualTo(type);
return userAccountDetailMapper.selectOneByExample(example);
}
@Override @Override
public long summaryAmount(UserAccountDetailRequestDto dto) { public long summaryAmount(UserAccountDetailRequestDto dto) {
UserAccountDetailExample example = new UserAccountDetailExample(); UserAccountDetailExample example = new UserAccountDetailExample();
......
...@@ -5,9 +5,11 @@ import com.wwdz.ch.core.consts.CommConsts; ...@@ -5,9 +5,11 @@ import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IdUtils; import com.wwdz.ch.core.util.IdUtils;
import com.wwdz.ch.db.dao.distribution.DistributorProfitDao; import com.wwdz.ch.db.dao.distribution.DistributorProfitDao;
import com.wwdz.ch.db.dao.distribution.UserAccountDetailDao;
import com.wwdz.ch.db.dao.distribution.UserBillDao; import com.wwdz.ch.db.dao.distribution.UserBillDao;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributorProfit; import com.wwdz.ch.db.domain.distribution.DistributorProfit;
import com.wwdz.ch.db.domain.distribution.UserAccountDetail;
import com.wwdz.ch.db.domain.distribution.UserBill; import com.wwdz.ch.db.domain.distribution.UserBill;
import com.wwdz.ch.wx.service.distribution.UserBillService; import com.wwdz.ch.wx.service.distribution.UserBillService;
import org.redisson.api.RLock; import org.redisson.api.RLock;
...@@ -40,6 +42,9 @@ public class UserBillServiceImpl implements UserBillService { ...@@ -40,6 +42,9 @@ public class UserBillServiceImpl implements UserBillService {
@Autowired @Autowired
DistributorProfitDao distributorProfitDao; DistributorProfitDao distributorProfitDao;
@Autowired
UserAccountDetailDao userAccountDetailDao;
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
@Override @Override
public Result payCalculate(DistributionOrder distributionOrder, DistributorProfit distributorProfit) { public Result payCalculate(DistributionOrder distributionOrder, DistributorProfit distributorProfit) {
...@@ -93,13 +98,18 @@ public class UserBillServiceImpl implements UserBillService { ...@@ -93,13 +98,18 @@ public class UserBillServiceImpl implements UserBillService {
updateBill.setId(userBill.getId()); updateBill.setId(userBill.getId());
updateBill.setTotalWaitEntryAmount(newTotalWaitEntryAmount); updateBill.setTotalWaitEntryAmount(newTotalWaitEntryAmount);
updateBill.setOrderWaitEntryAmount(newOrderWaitEntryAmount); updateBill.setOrderWaitEntryAmount(newOrderWaitEntryAmount);
if (distributionOrder.getShareRecordId().equals(distributionOrder.getSellerId())) { if (distributionOrder.getShareRecordId().equals(distributionOrder.getSellerId().toString())) {
//表示介绍人是卖家自己 //表示介绍人是卖家自己
long newIntroduceWaitEntryAmount = userBill.getIntroduceWaitEntryAmount() + introduceCost; long newIntroduceWaitEntryAmount = userBill.getIntroduceWaitEntryAmount() + introduceCost;
updateBill.setIntroduceWaitEntryAmount(newIntroduceWaitEntryAmount); updateBill.setIntroduceWaitEntryAmount(newIntroduceWaitEntryAmount);
} }
userBillDao.updateByPrimaryKey(updateBill); userBillDao.updateByPrimaryKey(updateBill);
} }
//计算介绍人的佣金(介绍人非卖家自己和平台)
if (!distributionOrder.getShareRecordId().equals(distributionOrder.getSellerId().toString())
&& distributionOrder.getSellerId().longValue() != CommConsts.SYSTEM_ACCOUNT) {
calculateIntroduceAmount(distributionOrder.getDistributionOrderId(), accountPeriod);
}
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("************ 计算订单账单ERROR: {}", e); logger.error("************ 计算订单账单ERROR: {}", e);
...@@ -113,8 +123,43 @@ public class UserBillServiceImpl implements UserBillService { ...@@ -113,8 +123,43 @@ public class UserBillServiceImpl implements UserBillService {
return Result.failed(); return Result.failed();
} }
/**
private void calculate() { * 计算介绍佣金
*/
private void calculateIntroduceAmount(String distributionOrderId, String accountPeriod) {
UserAccountDetail userAccountDetail = userAccountDetailDao.find(distributionOrderId, BillEnum.AccountDetailTypeEnum.INTRODUCE.getCode());
if (userAccountDetail == null) {
logger.error("********** 交易id:{}, 查询不到佣金记录 **********", distributionOrderId);
return;
}
long userId = userAccountDetail.getUserId();
long amount = userAccountDetail.getAmount();
//查询介绍人是否有账单
UserBill userBill = userBillDao.findOne(accountPeriod, userId, BillEnum.BillStateEnum.NOT_PAID.getCode());
if (userBill == null) {
UserBill newBill = new UserBill();
String billId = IdUtils.getOrderNumber(CommConsts.USER_BILL_PREFIX);
newBill.setBillId(billId);
newBill.setAccountPeriod(accountPeriod);
newBill.setUserId(userId);
newBill.setTotalWaitEntryAmount(0L);
newBill.setTotalEntryAmount(0L);
newBill.setOrderWaitEntryAmount(0L);
newBill.setOrderEntryAmount(0L);
newBill.setIntroduceWaitEntryAmount(amount);
newBill.setIntroduceEntryAmount(0L);
newBill.setCreateTime(new Date());
newBill.setUpdateTime(new Date());
newBill.setState(BillEnum.BillStateEnum.NOT_PAID.getCode());
userBillDao.insert(newBill);
} else {
UserBill updateBill = new UserBill();
long newTotalWaitEntryAmount = userBill.getTotalWaitEntryAmount() + amount;
long newIntroduceWaitEntryAmount = userBill.getIntroduceWaitEntryAmount() + amount;
updateBill.setId(userBill.getId());
updateBill.setTotalWaitEntryAmount(newTotalWaitEntryAmount);
updateBill.setIntroduceWaitEntryAmount(newIntroduceWaitEntryAmount);
userBillDao.updateByPrimaryKey(updateBill);
}
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment