Browse Source

ROI费率底表

contract
Yen 2 years ago
parent
commit
c598174fd8
  1. 12
      src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java
  2. 26
      src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java
  3. 18
      src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java

12
src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java

@ -9,6 +9,7 @@ import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.PageUtil;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.bir.service.BirBaseActivityService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
@ -32,6 +33,16 @@ import java.util.List;
public class BirRoiRateController {
private BirRoiRateService birRoiRateService;
private BirBaseActivityService activityService;
@GetMapping("/test")
public R<PageVo<BirRoiRate>> getPage(){
for (int i = 0; i < 12; i++) {
activityService.buildReport(2023,i+1);
}
return R.ok();
}
/**
* 翻页
@ -39,7 +50,6 @@ public class BirRoiRateController {
* @return
*/
//@GetMapping("/page")
@PreAuthorize("hasRole('bir:roiRate:query')")
public R<PageVo<BirRoiRate>> getPage(BirRoiRate param){
LambdaQueryWrapper<BirRoiRate> lqw = new LambdaQueryWrapper<>(param);
PageUtil.startPage();

26
src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java

@ -43,7 +43,7 @@ public class BirBaseActivity implements Serializable {
@NotNull(message = "活动金额(费用投入金额)不能为空")
private BigDecimal activityAmt;
/** 活动金额(费用投入金额) */
/** 活动金额(费用投入金额) */
@NotNull(message = "活动总金额(费用投入金额)不能为空")
private BigDecimal activityTotalAmt;
@ -70,23 +70,20 @@ public class BirBaseActivity implements Serializable {
@Length(max = 64,message = "用户id长度不能超过64字")
private String userId;
/** 用户编码 */
@NotBlank(message = "用户编码不能为空")
@Length(max = 255,message = "用户编码长度不能超过255字")
private String userCode;
/** 用户名 */
@NotBlank(message = "用户名不能为空")
@Length(max = 255,message = "用户名长度不能超过255字")
private String userName;
/** 当月有多少天 */
private Integer monthDays;
/** 活动总天数 */
@Length(max = 255,message = "活动总天数长度不能超过255字")
private Integer totalDays;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate startDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate endDate;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@ -116,15 +113,16 @@ public class BirBaseActivity implements Serializable {
baseActivity.setKeyNum(source.getKeyNum());
baseActivity.setActivityId(source.getActivityId());
baseActivity.setActivityAmt(source.getActivityAmt());
baseActivity.setActivityTotalAmt(source.getActivityTotalAmt());
baseActivity.setVerificationAmt(source.getVerificationAmt());
baseActivity.setSupplierId(source.getSupplierId());
baseActivity.setSupplierCode(source.getSupplierCode());
baseActivity.setSupplierName(source.getSupplierName());
baseActivity.setUserId(source.getUserId());
baseActivity.setUserCode(source.getUserCode());
baseActivity.setUserName(source.getUserName());
baseActivity.setMonthDays(source.getMonthDays());
baseActivity.setTotalDays(source.getTotalDays());
baseActivity.setStartDate(source.getStartDate());
baseActivity.setEndDate(source.getEndDate());
baseActivity.setCreateTime(source.getCreateTime());
baseActivity.setUpdateTime(source.getUpdateTime());
baseActivity.setTenantId(source.getTenantId());

18
src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java

@ -39,7 +39,8 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
@Override
public void buildReport(int year, int month) {
int yearMonth = Integer.parseInt(year+""+month);
String monthStr = month<10?"0"+month:month+"";
int yearMonth = Integer.parseInt(year+""+monthStr);
LocalDate startDate = LocalDate.of(year,month,1);
int lastDayNum2 = startDate.lengthOfMonth();
LocalDate endDate = LocalDate.of(year,month,lastDayNum2);
@ -53,10 +54,10 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
List<TbsActivity> activityList = activityMapper.selectList(activityLqw);
List<BirBaseActivity> birBaseActivities = new ArrayList<>();
for (TbsActivity activity : activityList) {
BirBaseActivity baseActivity = new BirBaseActivity();
LocalDate actStartDate = activity.getActStartDate();
LocalDate actEndDate = activity.getActEndDate();
Period period = Period.between(startDate, endDate);
int currentActDays = period.getDays()+1;
int currentActDays = (int) (actEndDate.toEpochDay()-actStartDate.toEpochDay()+1);
BigDecimal amount = activity.getTotalAmount();
List<DateSplitDTO> dateSplitList = DateSplitUtil.getSplitDto(actStartDate,actEndDate);
//活动金额
@ -70,6 +71,8 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
.filter(a->a.getYearMonth().equals(yearMonth))
.collect(Collectors.toList()).get(0);
currItemDays = currDateSplit.getDays();
baseActivity.setStartDate(currDateSplit.getStartDate());
baseActivity.setEndDate(currDateSplit.getEndDate());
if(currDateSplit.getSort().equals(dateSplitList.size())){
//活动金额
currentAmount = activity.getTotalAmount();
@ -82,28 +85,27 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
}
//日期占比
BigDecimal dayRate = new BigDecimal(splitDTO.getDays()+"")
.multiply(new BigDecimal(currentActDays+""))
.divide(new BigDecimal("100"), RoundingMode.HALF_DOWN);
.divide(new BigDecimal(currentActDays+""),2, BigDecimal.ROUND_HALF_DOWN);
currentAmount = currentAmount.subtract(amount.multiply(dayRate));
currentCheckAmount = currentCheckAmount.subtract(activity.getUsedAmount().multiply(dayRate));
}
}else {
//日期占比
BigDecimal dayRate = new BigDecimal(currDateSplit.getDays()+"")
.multiply(new BigDecimal(currentActDays+""))
.divide(new BigDecimal("100"), RoundingMode.HALF_DOWN);
.divide(new BigDecimal(currentActDays+""),2, BigDecimal.ROUND_HALF_DOWN);
currentAmount = amount.multiply(dayRate);
currentCheckAmount = activity.getUsedAmount().multiply(dayRate);
}
}else if (dateSplitList.size()==1){
DateSplitDTO dateSplit = dateSplitList.get(0);
baseActivity.setStartDate(dateSplit.getStartDate());
baseActivity.setEndDate(dateSplit.getEndDate());
currentAmount = amount;
currentCheckAmount = activity.getUsedAmount();
currItemDays = dateSplit.getDays();
}else {
Assert.throwEx("dateSplitList is empty");
}
BirBaseActivity baseActivity = new BirBaseActivity();
baseActivity.setKeyNum(yearMonth);
baseActivity.setActivityId(activity.getId());
baseActivity.setActivityAmt(currentAmount);

Loading…
Cancel
Save