|
@@ -6,21 +6,24 @@ import org.jeecg.common.util.DateUtils;
|
|
|
import org.jeecg.modules.ctop.entity.Advertiser;
|
|
|
import org.jeecg.modules.ctop.entity.SalePerformanceDetail;
|
|
|
import org.jeecg.modules.ctop.service.IAdvertiserService;
|
|
|
+import org.jeecg.modules.ctop.service.IPerformanceAreaService;
|
|
|
import org.jeecg.modules.ctop.service.ISalePerformanceDetailService;
|
|
|
-import org.jeecg.modules.ctop.service.PerformanceAreaService;
|
|
|
import org.jeecg.modules.system.entity.SysUser;
|
|
|
import org.jeecg.modules.system.entity.SysUserRole;
|
|
|
import org.jeecg.modules.system.service.ISysUserRoleService;
|
|
|
import org.jeecg.modules.system.service.ISysUserService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
-public class PerformanceAreaServiceImpl implements PerformanceAreaService {
|
|
|
+@Service
|
|
|
+public class PerformanceAreaServiceImpl implements IPerformanceAreaService {
|
|
|
|
|
|
@Autowired
|
|
|
private ISysUserService sysUserService;
|
|
@@ -31,8 +34,18 @@ public class PerformanceAreaServiceImpl implements PerformanceAreaService {
|
|
|
public void loadSalsePerformance() {
|
|
|
//1:获取销售列表
|
|
|
List<SysUser> sales = sysUserService.getUserListByRoleId("75ee837e6f3de29c0e3ed75d4629438e");
|
|
|
+ if (null != sales && sales.size() > 0) {
|
|
|
+ sales.forEach(sale -> {
|
|
|
+ countPerformance(sale);
|
|
|
+ });
|
|
|
+ }
|
|
|
//2:获取销售AM列表
|
|
|
List<SysUser> saleAms = sysUserService.getUserListByRoleId("f5a68aa2acf86e842100f0fa4b050d28");
|
|
|
+ if (null != saleAms && saleAms.size() > 0) {
|
|
|
+ saleAms.forEach(saleAm -> {
|
|
|
+ countPerformance(saleAm);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Autowired
|
|
@@ -41,142 +54,151 @@ public class PerformanceAreaServiceImpl implements PerformanceAreaService {
|
|
|
private ISalePerformanceDetailService salePerformanceDetailService;
|
|
|
|
|
|
public void countPerformance(SysUser user) {
|
|
|
- Date getDate = DateUtils.addDay(new Date(), -1);
|
|
|
+// Date getDate = DateUtils.addDay(new Date(), -1)
|
|
|
+ Date getDate = DateUtils.addDay(new Date(), -5);
|
|
|
String startDateStr = DateUtils.getQuarterStartDate(getDate);
|
|
|
String endDateStr = DateUtils.getQuarterEndDate(getDate);
|
|
|
//获取用户角色信息
|
|
|
SysUserRole userRole = userRoleService.getUserRoleByUserId(user.getId());
|
|
|
//1:获取快手季度总消耗
|
|
|
- BigDecimal kuaishouDoSeasonTask = performanceService.getKuaishouSeasonTotalCost(startDateStr, endDateStr);
|
|
|
+ BigDecimal kuaishouFinishMediaTask = performanceService.getKuaishouSeasonTotalCost(startDateStr, endDateStr);
|
|
|
//2:获取快手个人季度总消耗
|
|
|
- BigDecimal kuaishouDoPersonnalTask = performanceService.getKuaishouSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null);
|
|
|
+ BigDecimal kuaishouFinishPersonnalTask = performanceService.getKuaishouSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null);
|
|
|
//1:获取头条季度总消耗
|
|
|
- BigDecimal bytedanceDoSeasonTask = performanceService.getBytedanceSeasonTotalCost(startDateStr, endDateStr);
|
|
|
+ BigDecimal bytedanceFinishMediaTask = performanceService.getBytedanceSeasonTotalCost(startDateStr, endDateStr);
|
|
|
//2:获取头条个人季度总消耗
|
|
|
- BigDecimal bytedanceDoPersonnalTask = performanceService.getBytedanceSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null);
|
|
|
+ BigDecimal bytedanceFinishPersonnalTask = performanceService.getBytedanceSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null);
|
|
|
//获取销售所属的广告主信息
|
|
|
List<Advertiser> advertiserList = advertiserService.getBySaleId(user.getId());
|
|
|
|
|
|
if (null != advertiserList && advertiserList.size() > 0) {
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
- Date startDate = null;
|
|
|
- Date endDate = null;
|
|
|
+ Date startSeasonDate = null;
|
|
|
+ Date endSeasonDate = null;
|
|
|
try {
|
|
|
- startDate = dateFormat.parse(startDateStr);
|
|
|
- endDate = dateFormat.parse(endDateStr);
|
|
|
+ startSeasonDate = dateFormat.parse(startDateStr);
|
|
|
+ endSeasonDate = dateFormat.parse(endDateStr);
|
|
|
} catch (ParseException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
for (Advertiser advertiser : advertiserList) {
|
|
|
- Date endODate = DateUtils.addDay(advertiser.getCreateTime(), 90);
|
|
|
- BigDecimal totalCost = BigDecimal.ZERO;
|
|
|
- if (startDate.after(endODate)) {
|
|
|
+ Date endOldDate = DateUtils.addDay(advertiser.getCreateTime(), 90);
|
|
|
+ if (startSeasonDate.after(endOldDate)) {
|
|
|
//季度开始时间大于新户结束时间(全部按照老户逻辑计算)
|
|
|
- SalePerformanceDetail detail = new SalePerformanceDetail();
|
|
|
- detail.setAdvertiserId(advertiser.getId());
|
|
|
- detail.setSaleId(user.getId());
|
|
|
- detail.setRoleId(userRole.getRoleId());
|
|
|
- detail.setYear(DateUtils.getYear(getDate));
|
|
|
- detail.setQuarter(DateUtils.getQuarter(getDate));
|
|
|
- if (user.getOrgCode().startsWith("A01A08")) {
|
|
|
- detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
|
- detail.setStartDate(startDateStr);
|
|
|
- detail.setEndDate(endDateStr);
|
|
|
- totalCost = performanceService.getSalesSeasonTotalCostByParams(startDateStr, endDateStr, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
|
- detail.setTotalCost(totalCost);
|
|
|
- //TODO ---需要设定头条媒体季度任务
|
|
|
- detail.setMediaTask(new BigDecimal("200000000"));
|
|
|
- detail.setDoMediaTask(bytedanceDoSeasonTask);
|
|
|
- detail.setPersonnalTask(new BigDecimal("2400000"));
|
|
|
- detail.setDoPersonalTask(bytedanceDoPersonnalTask);
|
|
|
- detail.setExtensionSelf(advertiser.getAdvertiserType());
|
|
|
- detail.setBrandNew(0);
|
|
|
- //提成比例
|
|
|
- detail.setPercentagePercent(new BigDecimal("1.5"));
|
|
|
- //
|
|
|
- detail.setPercentage(new BigDecimal(""));
|
|
|
- salePerformanceDetailService.save(detail);
|
|
|
- } else if (user.getOrgCode().startsWith("A01A07")) {
|
|
|
- detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
|
- detail.setStartDate(startDateStr);
|
|
|
- detail.setEndDate(endDateStr);
|
|
|
- totalCost = performanceService.getSalesSeasonTotalCostByParams(startDateStr, endDateStr, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
|
- detail.setTotalCost(totalCost);
|
|
|
- //TODO ---需要设定头条媒体季度任务
|
|
|
- detail.setMediaTask(new BigDecimal("200000000"));
|
|
|
- detail.setDoMediaTask(bytedanceDoSeasonTask);
|
|
|
- detail.setPersonnalTask(new BigDecimal("2400000"));
|
|
|
- detail.setDoPersonalTask(bytedanceDoPersonnalTask);
|
|
|
- detail.setExtensionSelf(advertiser.getAdvertiserType());
|
|
|
- detail.setBrandNew(0);
|
|
|
- //提成比例
|
|
|
- detail.setPercentagePercent(new BigDecimal("1.5"));
|
|
|
- //
|
|
|
- detail.setPercentage(new BigDecimal(""));
|
|
|
- salePerformanceDetailService.save(detail);
|
|
|
- } else {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- } else if (endODate.after(endDate)) {
|
|
|
- //新湖结束时间大于季度结束时间(全部按照新户计算)
|
|
|
- SalePerformanceDetail detail = new SalePerformanceDetail();
|
|
|
- detail.setAdvertiserId(advertiser.getId());
|
|
|
- detail.setSaleId(user.getId());
|
|
|
- detail.setRoleId(userRole.getRoleId());
|
|
|
- detail.setYear(DateUtils.getYear(getDate));
|
|
|
- detail.setQuarter(DateUtils.getQuarter(getDate));
|
|
|
- if (user.getOrgCode().startsWith("A01A08")) {
|
|
|
- detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
|
- detail.setStartDate(startDateStr);
|
|
|
- detail.setEndDate(endDateStr);
|
|
|
- totalCost = performanceService.getSalesSeasonTotalCostByParams(startDateStr, endDateStr, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
|
- detail.setTotalCost(totalCost);
|
|
|
- //TODO ---需要设定头条媒体季度任务
|
|
|
- detail.setMediaTask(new BigDecimal("200000000"));
|
|
|
- detail.setDoMediaTask(bytedanceDoSeasonTask);
|
|
|
- detail.setPersonnalTask(new BigDecimal("2400000"));
|
|
|
- detail.setDoPersonalTask(bytedanceDoPersonnalTask);
|
|
|
- detail.setExtensionSelf(advertiser.getAdvertiserType());
|
|
|
- detail.setBrandNew(1);
|
|
|
- //提成比例
|
|
|
- detail.setPercentagePercent(new BigDecimal("1.5"));
|
|
|
- //
|
|
|
- detail.setPercentage(new BigDecimal(""));
|
|
|
- salePerformanceDetailService.save(detail);
|
|
|
- } else if (user.getOrgCode().startsWith("A01A07")) {
|
|
|
- detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
|
- detail.setStartDate(startDateStr);
|
|
|
- detail.setEndDate(endDateStr);
|
|
|
- totalCost = performanceService.getSalesSeasonTotalCostByParams(startDateStr, endDateStr, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
|
- detail.setTotalCost(totalCost);
|
|
|
- //TODO ---需要设定头条媒体季度任务
|
|
|
- detail.setMediaTask(new BigDecimal("200000000"));
|
|
|
- detail.setDoMediaTask(bytedanceDoSeasonTask);
|
|
|
- detail.setPersonnalTask(new BigDecimal("2400000"));
|
|
|
- detail.setDoPersonalTask(bytedanceDoPersonnalTask);
|
|
|
- detail.setExtensionSelf(advertiser.getAdvertiserType());
|
|
|
- detail.setBrandNew(1);
|
|
|
- //提成比例
|
|
|
- detail.setPercentagePercent(new BigDecimal("1.5"));
|
|
|
- //
|
|
|
- detail.setPercentage(new BigDecimal(""));
|
|
|
- salePerformanceDetailService.save(detail);
|
|
|
- } else {
|
|
|
- continue;
|
|
|
- }
|
|
|
+ saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
+ startDateStr, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
+ kuaishouFinishPersonnalTask, 0);
|
|
|
+ } else if (endOldDate.after(endSeasonDate)) {
|
|
|
+ saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
+ startDateStr, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
+ kuaishouFinishPersonnalTask, 1);
|
|
|
} else {
|
|
|
//新户结束时间处于本季度中间
|
|
|
+ String endduring1Date = DateUtils.formatDate(endOldDate);
|
|
|
+ saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
+ startDateStr, endduring1Date, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
+ kuaishouFinishPersonnalTask, 1);
|
|
|
+ saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
+ endduring1Date, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
+ kuaishouFinishPersonnalTask, 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ public static final BigDecimal BYTEDANCE_MEDIA_TASK_COST = new BigDecimal("200000000");
|
|
|
+ public static final BigDecimal KUAISHOU_MEDIA_TASK_COST = new BigDecimal("200000000");
|
|
|
+ public static final BigDecimal BYTEDANCE_PERSONAL_TASK_COST = new BigDecimal("2400000");
|
|
|
+ public static final BigDecimal KUAISHOU_PERSONAL_TASK_COST = new BigDecimal("2400000");
|
|
|
|
|
|
- }
|
|
|
+ private void saveSalePerformanceDetail(Advertiser advertiser, SysUser user, SysUserRole userRole, int year, int quarter, String startDate, String endDate, BigDecimal bytedanceFinishMediaTask, BigDecimal bytedanceFinishPersonnalTask, BigDecimal kuaishouFinishMediaTask, BigDecimal kuaishouFinishPersonnalTask, Integer brandNew) {
|
|
|
+ SalePerformanceDetail detail = new SalePerformanceDetail();
|
|
|
+ detail.setAdvertiserId(advertiser.getId());
|
|
|
+ detail.setSaleId(user.getId());
|
|
|
+ detail.setRoleId(userRole.getRoleId());
|
|
|
+ detail.setYear(year);
|
|
|
+ detail.setQuarter(quarter);
|
|
|
+ detail.setStartDate(startDate);
|
|
|
+ detail.setEndDate(endDate);
|
|
|
+ detail.setExtensionSelf(advertiser.getAdvertiserType());
|
|
|
+ detail.setBrandNew(brandNew);
|
|
|
+ if (user.getOrgCode().startsWith("A01A11A02")) {
|
|
|
+ detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
|
+ BigDecimal totalCost = performanceService.getSalesSeasonTotalCostByParams(startDate, endDate, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
|
+ if (null == totalCost) {
|
|
|
+ totalCost = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ detail.setTotalCost(totalCost);
|
|
|
+ detail.setMediaTask(BYTEDANCE_MEDIA_TASK_COST);
|
|
|
+ detail.setDoMediaTask(bytedanceFinishMediaTask);
|
|
|
+ detail.setPersonnalTask(BYTEDANCE_PERSONAL_TASK_COST);
|
|
|
+ detail.setDoPersonalTask(bytedanceFinishPersonnalTask);
|
|
|
+ detail.setPercent(getPercentagePercent(detail));
|
|
|
+ detail.setPercentage(detail.getTotalCost().multiply(detail.getPercent()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ salePerformanceDetailService.save(detail);
|
|
|
+ } else if (user.getOrgCode().startsWith("A01A11A01")) {
|
|
|
+ detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
|
+ BigDecimal totalCost = performanceService.getSalesSeasonTotalCostByParams(startDate, endDate, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
|
+ if (null == totalCost) {
|
|
|
+ totalCost = BigDecimal.ZERO;
|
|
|
}
|
|
|
+ detail.setTotalCost(totalCost);
|
|
|
+ detail.setMediaTask(KUAISHOU_MEDIA_TASK_COST);
|
|
|
+ detail.setDoMediaTask(kuaishouFinishMediaTask);
|
|
|
+ detail.setPersonnalTask(KUAISHOU_PERSONAL_TASK_COST);
|
|
|
+ detail.setDoPersonalTask(kuaishouFinishPersonnalTask);
|
|
|
+ //提成比例
|
|
|
+ detail.setPercent(getPercentagePercent(detail));
|
|
|
+ detail.setPercentage(detail.getTotalCost().multiply(detail.getPercent()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ salePerformanceDetailService.save(detail);
|
|
|
+ } else {
|
|
|
+ return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void saveSalePerformanceDetail() {
|
|
|
+ //TODO 提成比例
|
|
|
+ private BigDecimal getPercentagePercent(SalePerformanceDetail detail) {
|
|
|
+ BigDecimal percent = detail.getDoMediaTask().divide(detail.getMediaTask()).multiply(new BigDecimal("100"));
|
|
|
+ //AM非自拓客户
|
|
|
+ if (detail.getRoleId().equals("f5a68aa2acf86e842100f0fa4b050d28") && detail.getExtensionSelf() != 1) {
|
|
|
+ return new BigDecimal("0.0005");
|
|
|
+ }
|
|
|
+ if (detail.getMediaType().equals(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE)) {
|
|
|
+ //头条
|
|
|
+ if (detail.getBrandNew() == 0) {
|
|
|
+ return new BigDecimal("0.001");
|
|
|
+ }
|
|
|
+ if (percent.compareTo(new BigDecimal("100")) >= 0) {
|
|
|
+ return new BigDecimal("0.003");
|
|
|
+ } else if (percent.compareTo(new BigDecimal("80")) >= 0) {
|
|
|
+ return new BigDecimal("0.0025");
|
|
|
+ } else if (percent.compareTo(new BigDecimal("60")) >= 0) {
|
|
|
+ return new BigDecimal("0.002");
|
|
|
+ } else {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //快手
|
|
|
+ if (detail.getBrandNew() == 1) {
|
|
|
+ if (percent.compareTo(new BigDecimal("100")) >= 0) {
|
|
|
+ return new BigDecimal("0.005");
|
|
|
+ } else if (percent.compareTo(new BigDecimal("80")) >= 0) {
|
|
|
+ return new BigDecimal("0.004");
|
|
|
+ } else if (percent.compareTo(new BigDecimal("60")) >= 0) {
|
|
|
+ return new BigDecimal("0.003");
|
|
|
+ } else {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //自拓
|
|
|
+ if (detail.getExtensionSelf() == 1) {
|
|
|
+ return new BigDecimal("0.0015");
|
|
|
+ } else {
|
|
|
+ return new BigDecimal("0.001");
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Autowired
|