Commit 49f2590e authored by shiyu's avatar shiyu

分佣明细

parent b073e936
...@@ -40,6 +40,11 @@ public interface CommConsts { ...@@ -40,6 +40,11 @@ public interface CommConsts {
public static final Long SYSTEM_ACCOUNT = 8888888888L; public static final Long SYSTEM_ACCOUNT = 8888888888L;
/**
* 默认展示的卖家,逍遥的id
*/
public static final Long SYSTEM_SELLER = 291997L;
/** /**
* 系统默认用户头像URL * 系统默认用户头像URL
*/ */
......
package com.wwdz.ch.wx.entity;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
@Data
public class CollectorNoticeMsg implements Entity {
private String openId;
private String templetId;
/**
* 分销订单号
*/
private String distributionOrderId;
/**
* 介绍人
*/
private String introducerName;
/**
* 创建时间
*/
private Date createTime;
/**
* 消息内容
*/
private String content;
}
...@@ -190,4 +190,5 @@ public class DistributionOrderDetailVo implements Entity { ...@@ -190,4 +190,5 @@ public class DistributionOrderDetailVo implements Entity {
private String typeName; private String typeName;
} }
...@@ -28,6 +28,7 @@ import com.wwdz.ch.wx.entity.SignedNoticeMsg; ...@@ -28,6 +28,7 @@ import com.wwdz.ch.wx.entity.SignedNoticeMsg;
import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo; import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo;
import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo; import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo;
import com.wwdz.ch.wx.service.distribution.DistributionOrderService; import com.wwdz.ch.wx.service.distribution.DistributionOrderService;
import com.wwdz.ch.wx.service.distribution.DistributorProfitService;
import com.wwdz.ch.wx.service.distribution.SendMsgService; import com.wwdz.ch.wx.service.distribution.SendMsgService;
import com.xxdxxs.utils.DateUtils; import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.EntityMapper; import com.xxdxxs.utils.EntityMapper;
...@@ -107,6 +108,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -107,6 +108,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Autowired @Autowired
FollowFansRecordDao followFansRecordDao; FollowFansRecordDao followFansRecordDao;
@Autowired
DistributorProfitService distributorProfitService;
@Transactional @Transactional
@Override @Override
public Result createDistributionOrder(DistributionOrderRequestDto dto) { public Result createDistributionOrder(DistributionOrderRequestDto dto) {
...@@ -373,6 +377,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -373,6 +377,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Override @Override
@Transactional
public Result createCollectionOrder(DistributionOrderRequestDto dto) { public Result createCollectionOrder(DistributionOrderRequestDto dto) {
try { try {
Long itemId = dto.getItemId(); Long itemId = dto.getItemId();
...@@ -416,8 +421,13 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -416,8 +421,13 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
followFansRecordRequestDto.setFollowerId(supplierItem.getCreatorId()); followFansRecordRequestDto.setFollowerId(supplierItem.getCreatorId());
followFansRecordRequestDto.setFansId(dto.getBuyerId()); followFansRecordRequestDto.setFansId(dto.getBuyerId());
FollowFansRecord followFansRecord = followFansRecordDao.findOne(followFansRecordRequestDto); FollowFansRecord followFansRecord = followFansRecordDao.findOne(followFansRecordRequestDto);
//把介绍人作为该订单的分享链接字段的值 long introducerId;
long introducerId = followFansRecord.getIntroducerId(); if (followFansRecord == null) {
introducerId = CommConsts.SYSTEM_SELLER;
} else {
//把介绍人作为该订单的分享链接字段的值
introducerId = followFansRecord.getIntroducerId();
}
DistributionOrder distributionOrder = new DistributionOrder(); DistributionOrder distributionOrder = new DistributionOrder();
distributionOrder.setItemId(itemId); distributionOrder.setItemId(itemId);
distributionOrder.setItemNum(dto.getItemNum()); distributionOrder.setItemNum(dto.getItemNum());
...@@ -448,7 +458,8 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -448,7 +458,8 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
//介绍人分佣,自己推荐获得的订单无需计算介绍佣金 //介绍人分佣,自己推荐获得的订单无需计算介绍佣金
double introduceCost = 0; double introduceCost = 0;
if (supplierItem.getCreatorId() != introducerId) { if (supplierItem.getCreatorId() != introducerId) {
introduceCost = distributionOrder.getAmount().doubleValue() * 0.03; double rebate = distributorProfitService.getIntroduceRebate(followFansRecordRequestDto);
introduceCost = distributionOrder.getAmount().doubleValue() * rebate;
} }
distributorProfit.setDistributionOrderId(distributionOrderId); distributorProfit.setDistributionOrderId(distributionOrderId);
distributorProfit.setDistributorId(distributionOrder.getSellerId()); distributorProfit.setDistributorId(distributionOrder.getSellerId());
......
package com.wwdz.ch.wx.impl.distribution;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.db.dao.FollowFansRecordDao;
import com.wwdz.ch.db.dao.distribution.DistributorProfitDao;
import com.wwdz.ch.db.domain.FollowFansRecord;
import com.wwdz.ch.db.dto.request.FollowFansRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.wwdz.ch.wx.service.distribution.DistributorProfitService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
public class DistributorProfitServiceImpl implements DistributorProfitService {
private static final Logger logger = LoggerFactory.getLogger(DistributorProfitServiceImpl.class);
@Autowired
DistributorProfitDao distributorProfitDao;
@Autowired
FollowFansRecordDao followFansRecordDao;
@Override
public Double getIntroduceRebate(FollowFansRecordRequestDto dto) {
double rebate = 0;
try {
FollowFansRecord followFansRecord = followFansRecordDao.findOne(dto);
if (followFansRecord == null) {
return rebate;
}
Date createTime = followFansRecord.getCreateTime();
Date now = new Date();
int year = 0;
for (int i = 1; i <= 3; i++) {
Calendar cal = Calendar.getInstance();
cal.setTime(createTime);
cal.add(Calendar.YEAR, i);
Date newDate = cal.getTime();
if (newDate.after(now)) {
year = i;
break;
}
}
if (year == 1) {
rebate = 0.03;
} else if (year == 2){
rebate = 0.03;
} else if (year == 3) {
rebate = 0.01;
}
return rebate;
} catch (Exception e) {
logger.error("获取介绍人当前的佣金比例 error : {}", e);
}
return rebate;
}
@Override
public Result getExpectAmount(SupplierItemRequestDto supplierItemRequestDto) {
try {
Long itemPrice = PriceUtil.convertPriceFromStr(supplierItemRequestDto.getDistributionPrice());
long channelServiceCost = PriceUtil.convertPriceFromStr(PriceUtil.convertDoubleToString(itemPrice.doubleValue() * 0.05));
long introduceCost = PriceUtil.convertPriceFromStr(PriceUtil.convertDoubleToString(itemPrice.doubleValue() * 0.03));
long profit = itemPrice - channelServiceCost - introduceCost;
Map<String, String> map = new HashMap<>();
map.put("channelServiceCost", PriceUtil.convertPriceFenToYuan(channelServiceCost));
map.put("introduceCost", PriceUtil.convertPriceFenToYuan(introduceCost));
map.put("profit", PriceUtil.convertPriceFenToYuan(profit));
return Result.success(map);
} catch (Exception e) {
logger.error("获取预计分佣金额 error : {}", e);
}
return Result.failed();
}
}
...@@ -543,6 +543,11 @@ public class SendMsgServiceImpl implements SendMsgService { ...@@ -543,6 +543,11 @@ public class SendMsgServiceImpl implements SendMsgService {
return Result.failed(); return Result.failed();
} }
@Override
public Result noticeToFollowerMsg(AuctionOfferNoticeMsg auctionOfferNoticeMsg) {
return null;
}
@Override @Override
public String getOpenIdByUserId(long userId) { public String getOpenIdByUserId(long userId) {
//先查询寄售单用户信息 //先查询寄售单用户信息
......
...@@ -11,7 +11,6 @@ import com.wwdz.ch.core.type.Result; ...@@ -11,7 +11,6 @@ import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.CacheUtil; import com.wwdz.ch.core.util.CacheUtil;
import com.wwdz.ch.core.util.MediaUtil; import com.wwdz.ch.core.util.MediaUtil;
import com.wwdz.ch.core.util.PriceUtil; import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.core.util.StringUtil;
import com.wwdz.ch.db.dao.CollectionBookSortDao; import com.wwdz.ch.db.dao.CollectionBookSortDao;
import com.wwdz.ch.db.dao.FollowFansRecordDao; import com.wwdz.ch.db.dao.FollowFansRecordDao;
import com.wwdz.ch.db.dao.SwitchDao; import com.wwdz.ch.db.dao.SwitchDao;
...@@ -60,8 +59,6 @@ public class SupplierItemServiceImpl implements SupplierItemService { ...@@ -60,8 +59,6 @@ public class SupplierItemServiceImpl implements SupplierItemService {
private static final Logger logger = LoggerFactory.getLogger(SupplierItemServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(SupplierItemServiceImpl.class);
private final static Long SYSTEM_ACCOUNT = 8888888888L;
@Autowired @Autowired
SupplierItemDao supplierItemDao; SupplierItemDao supplierItemDao;
...@@ -188,7 +185,7 @@ public class SupplierItemServiceImpl implements SupplierItemService { ...@@ -188,7 +185,7 @@ public class SupplierItemServiceImpl implements SupplierItemService {
if (StringUtils.isEmpty(shareRecordId) && dto.getId() == null) { if (StringUtils.isEmpty(shareRecordId) && dto.getId() == null) {
return Result.failed("商品信息为空"); return Result.failed("商品信息为空");
} else if (StringUtils.hasLength(shareRecordId)) { } else if (StringUtils.hasLength(shareRecordId)) {
if (!shareRecordId.contains(SYSTEM_ACCOUNT.toString())) { if (!shareRecordId.contains(CommConsts.SYSTEM_ACCOUNT.toString())) {
distributorShareRecord = distributorShareRecordDao.findById(shareRecordId); distributorShareRecord = distributorShareRecordDao.findById(shareRecordId);
if (distributorShareRecord == null || !distributorShareRecord.getEnabled()) { if (distributorShareRecord == null || !distributorShareRecord.getEnabled()) {
return Result.failed("该商品已下架"); return Result.failed("该商品已下架");
...@@ -575,9 +572,9 @@ public class SupplierItemServiceImpl implements SupplierItemService { ...@@ -575,9 +572,9 @@ public class SupplierItemServiceImpl implements SupplierItemService {
supplierItem.setVideos(getVideosImage(dto.getVideos())); supplierItem.setVideos(getVideosImage(dto.getVideos()));
} }
supplierItem.setSort(1); supplierItem.setSort(1);
supplierItem.setBuyLimitNum(1); supplierItem.setBuyLimitNum(-1);
supplierItem.setStock(1); supplierItem.setStock(dto.getStock());
supplierItem.setIsOnSale(true); supplierItem.setIsOnSale(dto.getIsOnSale());
Date now = new Date(); Date now = new Date();
supplierItem.setCreateTime(now); supplierItem.setCreateTime(now);
supplierItem.setUpdateTime(now); supplierItem.setUpdateTime(now);
......
package com.wwdz.ch.wx.service.distribution;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.FollowFansRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
public interface DistributorProfitService {
/**
* 获取介绍人当前的佣金比例
* @param dto
* @return
*/
Double getIntroduceRebate(FollowFansRecordRequestDto dto);
/**
* 获取预计分佣金额
* @param dto
* @return
*/
Result getExpectAmount(SupplierItemRequestDto supplierItemRequestDto);
}
...@@ -60,7 +60,7 @@ public interface SendMsgService { ...@@ -60,7 +60,7 @@ public interface SendMsgService {
* @param auctionOfferNoticeMsg * @param auctionOfferNoticeMsg
* @return * @return
*/ */
Result auctionEndMsg( AuctionOfferNoticeMsg auctionOfferNoticeMsg); Result auctionEndMsg(AuctionOfferNoticeMsg auctionOfferNoticeMsg);
/** /**
...@@ -68,8 +68,15 @@ public interface SendMsgService { ...@@ -68,8 +68,15 @@ public interface SendMsgService {
* @param auctionOfferNoticeMsg * @param auctionOfferNoticeMsg
* @return * @return
*/ */
Result offerNoticeToDistributorMsg( AuctionOfferNoticeMsg auctionOfferNoticeMsg); Result offerNoticeToDistributorMsg(AuctionOfferNoticeMsg auctionOfferNoticeMsg);
/**
* 通知被关注人
* @param auctionOfferNoticeMsg
* @return
*/
Result noticeToFollowerMsg(AuctionOfferNoticeMsg auctionOfferNoticeMsg);
String getOpenIdByUserId(long userId); String getOpenIdByUserId(long userId);
} }
...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; ...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.wwdz.ch.core.consts.ResultCode; import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.FollowFansRecordRequestDto; import com.wwdz.ch.db.dto.request.FollowFansRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.wx.entity.request.QueryPriceRequestDto; import com.wwdz.ch.wx.entity.request.QueryPriceRequestDto;
import com.wwdz.ch.wx.service.FollowFansRecordService; import com.wwdz.ch.wx.service.FollowFansRecordService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -98,15 +99,25 @@ public class FollowFansRecordController { ...@@ -98,15 +99,25 @@ public class FollowFansRecordController {
} }
@ApiOperation(value = "查询我推荐的列表明细") @ApiOperation(value = "查询分佣明细")
@PostMapping("/findRecommendDetail") @PostMapping("/introduceAmountDetail")
public Result findRecommendDetail(@RequestBody FollowFansRecordRequestDto dto) { public Result introduceAmountDetail(@RequestBody FollowFansRecordRequestDto dto) {
logger.info("查询我推荐的列表明细,请求参数:{}", JSON.toJSONString(dto)); logger.info("查询分佣明细,请求参数:{}", JSON.toJSONString(dto));
if (dto.getSearchTargetId() == null) { if (dto.getFollowerId() == null || dto.getIntroducerId() == null) {
return Result.failed(ResultCode.PARAM_ERROR); return Result.failed(ResultCode.PARAM_ERROR);
} }
return followFansRecordService.findRecommendDetail(dto); return followFansRecordService.introduceAmountDetail(dto);
} }
@ApiOperation(value = "查询分佣订单明细")
@PostMapping("/introduceOrderDetail")
public Result introduceOrderDetail(@RequestBody DistributionOrderRequestDto dto) {
logger.info("查询分佣订单明细,请求参数:{}", JSON.toJSONString(dto));
if (StringUtils.isEmpty(dto.getDistributionOrderId())) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return followFansRecordService.introduceOrderDetail(dto);
}
} }
...@@ -5,6 +5,7 @@ import com.wwdz.ch.core.consts.ResultCode; ...@@ -5,6 +5,7 @@ import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto; import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.wwdz.ch.wx.entity.request.MessageRequestDto; import com.wwdz.ch.wx.entity.request.MessageRequestDto;
import com.wwdz.ch.wx.service.distribution.DistributorProfitService;
import com.wwdz.ch.wx.service.distribution.SupplierItemService; import com.wwdz.ch.wx.service.distribution.SupplierItemService;
import com.xxdxxs.service.FormHandler; import com.xxdxxs.service.FormHandler;
import com.xxdxxs.utils.StringUtils; import com.xxdxxs.utils.StringUtils;
...@@ -27,6 +28,9 @@ public class SupplierItemController { ...@@ -27,6 +28,9 @@ public class SupplierItemController {
@Autowired @Autowired
SupplierItemService supplierItemService; SupplierItemService supplierItemService;
@Autowired
DistributorProfitService distributorProfitService;
@ApiOperation(value = "查询供货商品列表") @ApiOperation(value = "查询供货商品列表")
@PostMapping("/findList") @PostMapping("/findList")
...@@ -138,4 +142,12 @@ public class SupplierItemController { ...@@ -138,4 +142,12 @@ public class SupplierItemController {
logger.info("查询主页列表,请求参数:{}", JSON.toJSONString(dto)); logger.info("查询主页列表,请求参数:{}", JSON.toJSONString(dto));
return supplierItemService.findHomePage(dto); return supplierItemService.findHomePage(dto);
} }
@ApiOperation(value = "获取商品预计分佣金额")
@PostMapping("/getExpectAmount")
public Result getExpectAmount(@RequestBody SupplierItemRequestDto dto) {
logger.info("获取商品预计分佣金额,请求参数:{}", JSON.toJSONString(dto));
return distributorProfitService.getExpectAmount(dto);
}
} }
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