记得上下班打卡 | git大法好,push需谨慎

Commit b23c513d authored by GaoHu's avatar GaoHu

修改提成计算逻辑

parent 46bf3567
...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
...@@ -50,6 +51,9 @@ public class UserData implements Serializable, Cloneable { ...@@ -50,6 +51,9 @@ public class UserData implements Serializable, Cloneable {
@ApiModelProperty(value = "打款状态", example = "") @ApiModelProperty(value = "打款状态", example = "")
private Integer priceStatus; private Integer priceStatus;
@ApiModelProperty(value = "总佣金")
private BigDecimal totalCommission;
private static final UserData obj = new UserData(); private static final UserData obj = new UserData();
......
...@@ -372,6 +372,12 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -372,6 +372,12 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
List<ShowBaseVoDto> showBaseVoList = smileAgentMapper.selectMapByPerId(performancesId); List<ShowBaseVoDto> showBaseVoList = smileAgentMapper.selectMapByPerId(performancesId);
//根据代理id进行分组 //根据代理id进行分组
Map<String, List<ShowBaseVoDto>> stringListMap = showBaseVoList.stream().collect(Collectors.groupingBy(ShowBaseVoDto::getAgentId)); Map<String, List<ShowBaseVoDto>> stringListMap = showBaseVoList.stream().collect(Collectors.groupingBy(ShowBaseVoDto::getAgentId));
//所有提成佣金
List<Map<String,Object>> agentIdCommissionList = smileAgentMapper.getUserOrgByPerIdAndUidAndAgentMaster(performancesId);
Map<String,BigDecimal> agentIdMasterMap = new HashMap<>();
agentIdCommissionList.forEach(map->{
agentIdMasterMap.put((String) map.get("uid"),(BigDecimal) map.get("totalPrice"));
});
//遍历分组 //遍历分组
for (Map.Entry<String, List<ShowBaseVoDto>> showMap : stringListMap.entrySet()) { for (Map.Entry<String, List<ShowBaseVoDto>> showMap : stringListMap.entrySet()) {
UserData userData = UserData.getNew(); UserData userData = UserData.getNew();
...@@ -381,6 +387,10 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -381,6 +387,10 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
ShowBaseVoDto baseVoDto = showBaseVoDtoList.get(0); ShowBaseVoDto baseVoDto = showBaseVoDtoList.get(0);
//根据票提id分组 list数量小于等于票提数量 //根据票提id分组 list数量小于等于票提数量
Map<String, List<ShowBaseVoDto>> tidMapByUid = showBaseVoDtoList.stream().collect(Collectors.groupingBy(ShowBaseVoDto::getTid)); Map<String, List<ShowBaseVoDto>> tidMapByUid = showBaseVoDtoList.stream().collect(Collectors.groupingBy(ShowBaseVoDto::getTid));
//总佣金
BigDecimal totalCommission = BigDecimal.ZERO;
//对票提进行遍历(总代没有售出而普代有售出) //对票提进行遍历(总代没有售出而普代有售出)
for (TicketAndStatusDao smileAgent : ticketAndStatusDaoList) { for (TicketAndStatusDao smileAgent : ticketAndStatusDaoList) {
//为没个uid的没个票提id 塞数据 //为没个uid的没个票提id 塞数据
...@@ -407,15 +417,18 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -407,15 +417,18 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
// userDataAgentVo.setAgent(showBaseVoDto.getType() == 1 ? tidMap.get(smileAgent.getTicketsId()).getTotalCarry() : tidMap.get(smileAgent.getTicketsId()).getOrdCarry()); // userDataAgentVo.setAgent(showBaseVoDto.getType() == 1 ? tidMap.get(smileAgent.getTicketsId()).getTotalCarry() : tidMap.get(smileAgent.getTicketsId()).getOrdCarry());
userDataAgentVo.setCommission(BigDecimal.ZERO); userDataAgentVo.setCommission(BigDecimal.ZERO);
} }
//判断是否为特邀代理 totalCommission = totalCommission.add(userDataAgentVo.getCommission());
if (baseVoDto.getType() != 5) {
Map orgMap = smileAgentMapper.getUserOrgByPerIdAndUidAndAgentMaster(performancesId, baseVoDto.getAgentId(), smileAgent.getTicketsId());
if (orgMap != null) {
userDataAgentVo.setCommission((userDataAgentVo.getCommission().add((BigDecimal) orgMap.get("totalPrice"))).stripTrailingZeros());
}
}
userDataAgentVos.add(userDataAgentVo); userDataAgentVos.add(userDataAgentVo);
} }
//判断是否为总代
if (baseVoDto.getType() == 5) {
//不是特邀代理 //在原有的数据上新增加该用户下所有普代的提成
if (agentIdMasterMap.get(baseVoDto.getAgentId()) != null) {
userData.setTotalCommission(totalCommission.add(agentIdMasterMap.get(baseVoDto.getAgentId())).stripTrailingZeros());
}
} else {
userData.setTotalCommission(totalCommission);
}
userData.setUid(showBaseVoDtoList.get(0).getAgentId()); userData.setUid(showBaseVoDtoList.get(0).getAgentId());
userData.setUsername(showBaseVoDtoList.get(0).getName()); userData.setUsername(showBaseVoDtoList.get(0).getName());
userData.setCityName(showBaseVoDtoList.get(0).getCity()); userData.setCityName(showBaseVoDtoList.get(0).getCity());
...@@ -433,7 +446,6 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -433,7 +446,6 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
smileUsers.forEach(smileUser -> { smileUsers.forEach(smileUser -> {
if (!ids.contains(smileUser.getUid())) { if (!ids.contains(smileUser.getUid())) {
UserData userData = UserData.getNew(); UserData userData = UserData.getNew();
BigDecimal price = BigDecimal.ZERO;
List<UserDataAgentVo> userDataAgentVos = new ArrayList<>(); List<UserDataAgentVo> userDataAgentVos = new ArrayList<>();
for (TicketAndStatusDao smileAgent : ticketAndStatusDaoList) { for (TicketAndStatusDao smileAgent : ticketAndStatusDaoList) {
UserDataAgentVo userDataAgentVo = UserDataAgentVo.getNew(); UserDataAgentVo userDataAgentVo = UserDataAgentVo.getNew();
...@@ -443,14 +455,11 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -443,14 +455,11 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
userDataAgentVo.setPrice(BigDecimal.ZERO); userDataAgentVo.setPrice(BigDecimal.ZERO);
userDataAgentVo.setPriceReal(BigDecimal.ZERO); userDataAgentVo.setPriceReal(BigDecimal.ZERO);
userDataAgentVo.setCommission(BigDecimal.ZERO); userDataAgentVo.setCommission(BigDecimal.ZERO);
//是总代 //在原有的数据上新增加该用户下所有普代的提成
Map orgMap = smileAgentMapper.getUserOrgByPerIdAndUidAndAgentMaster(performancesId, smileUser.getUid(), smileAgent.getTicketsId());
if (orgMap != null) {
userDataAgentVo.setCommission((userDataAgentVo.getCommission().add((BigDecimal) orgMap.get("totalPrice"))).stripTrailingZeros());
}
price = price.add(userDataAgentVo.getCommission());
userDataAgentVos.add(userDataAgentVo); userDataAgentVos.add(userDataAgentVo);
} }
//不是特邀代理 //在原有的数据上新增加该用户下所有普代的提成
BigDecimal decimal = agentIdMasterMap.get(smileUser.getUid());
userData.setTotalCommission(decimal);
userData.setUid(smileUser.getUid()); userData.setUid(smileUser.getUid());
userData.setUsername(smileUser.getName()); userData.setUsername(smileUser.getName());
userData.setCityName(smileUser.getCity()); userData.setCityName(smileUser.getCity());
...@@ -460,9 +469,7 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -460,9 +469,7 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
userData.setPriceStatus(smileRedisUtils.getShowPriceUid(performancesId, smileUser.getUid())); userData.setPriceStatus(smileRedisUtils.getShowPriceUid(performancesId, smileUser.getUid()));
//缓存用户redis记录 计算 //缓存用户redis记录 计算
smileRedisUtils.setUserDataByUid(userData, performancesId); smileRedisUtils.setUserDataByUid(userData, performancesId);
if (price.compareTo(BigDecimal.ZERO) > 0) { userDataList.add(userData);
userDataList.add(userData);
}
} }
}); });
} }
...@@ -509,54 +516,6 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc ...@@ -509,54 +516,6 @@ public class SmileShowServiceImpl extends ServiceImpl<SmileSchoolMapper, SmileSc
return AjaxResult.success(showIds); return AjaxResult.success(showIds);
} }
private UserData getUserData(String performancesId, SmileUser smileUser, Map<String, SmileAgent> tidMap, List<TicketAndStatusDao> smileAgentList) {
UserData userData = new UserData();
//个人用户的演出数据详情
//便利票种id 查询用户的销售数据信息
List<UserDataAgentVo> userDataAgentVos = new ArrayList<>();
for (TicketAndStatusDao smileAgent : smileAgentList) {
UserDataAgentVo userDataAgentVo = new UserDataAgentVo();
Map userMap = smileAgentMapper.getUserDataByPerIdAndTicketsId(performancesId, smileUser.getUid(), smileAgent.getTicketsId());
if (userMap != null) {
userDataAgentVo.setTicketsId((String) userMap.get("tid"));
userDataAgentVo.setTicketName((String) userMap.get("title"));
userDataAgentVo.setNumber((BigDecimal) userMap.get("num"));
userDataAgentVo.setPrice((BigDecimal) userMap.get("price"));
userDataAgentVo.setAgent((BigDecimal) userMap.get("use"));
userDataAgentVo.setCommission(((BigDecimal) userMap.get("totalPrice")).setScale(2, RoundingMode.HALF_UP));
} else {
userDataAgentVo.setTicketsId(smileAgent.getTicketsId());
userDataAgentVo.setTicketName(smileAgent.getTitle());
userDataAgentVo.setNumber(new BigDecimal(0));
userDataAgentVo.setPrice(new BigDecimal(0));
userDataAgentVo.setAgent(smileUser.getType() == 1 ? tidMap.get(smileAgent.getTicketsId()).getTotalCarry() : tidMap.get(smileAgent.getTicketsId()).getOrdCarry());
userDataAgentVo.setCommission(new BigDecimal("0.00"));
log.debug("saleData:演出id:{},用户id:{},票提id:{}", performancesId, smileUser.getUid(), smileAgent.getTicketsId());
}
//判断该用户是否是总代理
if (smileUser.getType() == 1) {
//是总代 //在原有的数据上新增加该用户下所有普代的提成
Map orgMap = smileAgentMapper.getUserOrgByPerIdAndUidAndAgentMaster(performancesId, smileUser.getUid(), smileAgent.getTicketsId());
if (orgMap != null) {
userDataAgentVo.setCommission((userDataAgentVo.getCommission().add((BigDecimal) orgMap.get("totalPrice"))).setScale(2, RoundingMode.HALF_UP));
} else {
log.debug("saleData:演出id:{},用户id:{},票提id:{}", performancesId, smileUser.getUid(), smileAgent.getTicketsId());
}
}
// if (userDataAgentVo.getCommission().compareTo(new BigDecimal(0)) != 0) {
userDataAgentVos.add(userDataAgentVo);
// }
}
userData.setUid(smileUser.getUid());
userData.setUsername(smileUser.getName());
userData.setCityName(smileUser.getCity());
userData.setType(smileUser.getType());
userData.setDataAgentVos(userDataAgentVos);
//设置打款状态
userData.setPriceStatus(smileRedisUtils.getShowPriceUid(performancesId, smileUser.getUid()));
return userData;
}
private Map<String, SmileAgent> getSmileAgentMap(List<SmileAgent> smileAgents) { private Map<String, SmileAgent> getSmileAgentMap(List<SmileAgent> smileAgents) {
Map<String, SmileAgent> map = new HashMap<>(smileAgents.size()); Map<String, SmileAgent> map = new HashMap<>(smileAgents.size());
smileAgents.forEach(smileAgent -> map.put(smileAgent.getTicketId(), smileAgent)); smileAgents.forEach(smileAgent -> map.put(smileAgent.getTicketId(), smileAgent));
......
...@@ -27,7 +27,7 @@ public interface SmileAgentMapper extends BaseMapper<SmileAgent> { ...@@ -27,7 +27,7 @@ public interface SmileAgentMapper extends BaseMapper<SmileAgent> {
Map getUserDataByPerIdAndTicketsId(@Param("performancesId")String performancesId,@Param("uid") String uid,@Param("ticketId") String ticketId); Map getUserDataByPerIdAndTicketsId(@Param("performancesId")String performancesId,@Param("uid") String uid,@Param("ticketId") String ticketId);
Map getUserOrgByPerIdAndUidAndAgentMaster(@Param("performancesId") String performancesId,@Param("uid") String uid,@Param("ticketId") String ticketId); List<Map<String,Object>> getUserOrgByPerIdAndUidAndAgentMaster(@Param("performancesId") String performancesId);
List<SmileAgentDao> selectAgentList(@Param("performancesId") String performancesId); List<SmileAgentDao> selectAgentList(@Param("performancesId") String performancesId);
......
...@@ -63,8 +63,8 @@ ...@@ -63,8 +63,8 @@
<select id="getUserOrgByPerIdAndUidAndAgentMaster" resultType="java.util.Map"> <select id="getUserOrgByPerIdAndUidAndAgentMaster" resultType="java.util.Map">
SELECT SELECT
SUM( kotr.agent_id_master uid,
( kot.price_actual - kot.price_refund )* kotr.agent_distributions_master) totalPrice SUM( ( kot.price_actual - kot.price_refund )* kotr.agent_distributions_master ) totalPrice
FROM FROM
kylin_order_ticket_relations AS kotr kylin_order_ticket_relations AS kotr
INNER JOIN kylin_order_tickets AS kot ON kot.order_tickets_id = kotr.order_id INNER JOIN kylin_order_tickets AS kot ON kot.order_tickets_id = kotr.order_id
...@@ -76,9 +76,17 @@ ...@@ -76,9 +76,17 @@
kylin_order_ticket_relations AS kotr kylin_order_ticket_relations AS kotr
LEFT JOIN kylin_order_ticket_status AS kots ON kots.order_id = kotr.order_id LEFT JOIN kylin_order_ticket_status AS kots ON kots.order_id = kotr.order_id
WHERE WHERE
kotr.agent_id_master = #{uid} kots.STATUS IN ( 1, 6, 3 ) )
AND kots.status IN (1,6,3) AND kotr.performance_id = #{performancesId}
) AND kotr.performance_id = #{performancesId} AND kotr.ticket_id = #{ticketId} AND kotr.ticket_id IN (
SELECT
sa.ticket_id
FROM
smile_agent AS sa
WHERE
sa.del_tag = 0
AND sa.performance_id = #{performancesId}
) AND kotr.agent_id_master >0 GROUP BY kotr.agent_id_master
</select> </select>
<select id="selectAgentList" resultType="com.liquidnet.service.smile.entity.dao.SmileAgentDao"> <select id="selectAgentList" resultType="com.liquidnet.service.smile.entity.dao.SmileAgentDao">
......
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