Browse Source

feat(rebate): 返利匹配日志

master
Yen 2 months ago
parent
commit
08735898ba
  1. 2
      cms-api/cms-admin-svc/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java
  2. 1
      cms-framework/cms-framework-redis/src/main/java/com/qs/serve/framework/redis/utils/CodeGenUtil.java
  3. 14
      cms-modules/cms-actuator/src/main/java/com/qs/serve/actuator/SysLogAspect.java
  4. 2
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java
  5. 2
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/sync/AsyncFactory.java
  6. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/sys/entity/SysOperationLog.java
  7. 172
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityCheckController.java
  8. 61
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java
  9. 15
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java
  10. 4
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
  11. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBo.java
  12. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java
  13. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java
  14. 2
      cms-modules/cms-system/src/main/resources/mapper/sys/SysOperationLogMapper.xml

2
cms-api/cms-admin-svc/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java

@ -195,6 +195,7 @@ public class WxSvcLoginApi {
redisService.set(redisKey,pctoken);
tokenMap.put("token", pctoken);
tokenMap.put("userId", wxUser.getSysUserId());
tokenMap.put("openId", wxUser.getOpenId());
tokenMap.put("IP", loginUser.getLoginIp());
tokenMap.put("tenant", sysTenantMapper.selectById(loginUser.getTenant()));
tokenMap.put("loginType",client);
@ -229,6 +230,7 @@ public class WxSvcLoginApi {
tokenMap.put("IP", loginUser.getLoginIp());
tokenMap.put("tenant", sysTenantMapper.selectById(loginUser.getTenant()));
tokenMap.put("loginType",client);
tokenMap.put("openId","test-open-id");
tokenMap.put("client",client);
//关联
objectMap.put("adminTokenInfo",tokenMap);

1
cms-framework/cms-framework-redis/src/main/java/com/qs/serve/framework/redis/utils/CodeGenUtil.java

@ -87,6 +87,7 @@ public class CodeGenUtil {
return IdUtil.getSnowflakeNextIdStr();
}
public static String getCommonValue(String key){
Long value = getIdx(key);
String digitsNum = "";

14
cms-modules/cms-actuator/src/main/java/com/qs/serve/actuator/SysLogAspect.java

@ -27,6 +27,8 @@ import org.springframework.web.servlet.HandlerMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
@ -95,9 +97,9 @@ public class SysLogAspect {
}
//GET只保存请求时间长的请求
if(request.getMethod().equals("GET") && !isLongTime){
return;
}
// if(request.getMethod().equals("GET") && !isLongTime){
// return;
// }
// 获取当前的用户
LoginUser loginUser = AuthContextUtils.getLoginUser(false);
SysOperationLog operLog = new SysOperationLog();
@ -128,6 +130,12 @@ public class SysLogAspect {
// 处理设置注解上的参数
getControllerMethodDescription(joinPoint, controllerLog, operLog);
operLog.setTenantId(AuthContextUtils.getTenant());
LocalDate localDateTime = LocalDate.now();
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMM");
String localTime = df.format(localDateTime);
operLog.setTableNameExt(localTime);
// 保存数据库
AsyncManager.me().execute(AsyncFactory.saveOperationLog(operLog));
} catch (Exception exp) {

2
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java

@ -48,7 +48,7 @@ public class TzcRebateParam{
private Integer checkModel;
/** 超过多少金额自动核销变为人工核销 */
@NotNull(message = "超过多少金额自动核销变为人工核销不能为空")
//@NotNull(message = "超过多少金额自动核销变为人工核销不能为空")
private BigDecimal checkMaxAmount;
/** 自动核销日期类型:0-手动设置;1-自然月;2-自然周 */

2
cms-modules/cms-system/src/main/java/com/qs/serve/modules/sync/AsyncFactory.java

@ -22,6 +22,8 @@ import com.qs.serve.modules.vtb.service.impl.VtbVerificationOperationServiceImpl
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;

3
cms-modules/cms-system/src/main/java/com/qs/serve/modules/sys/entity/SysOperationLog.java

@ -112,5 +112,8 @@ public class SysOperationLog implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime queryEndTime;
@TableField(exist = false)
private String tableNameExt;
}

172
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityCheckController.java

@ -0,0 +1,172 @@
package com.qs.serve.modules.tbs.controller;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.annotation.SysLog;
import com.qs.serve.common.enums.BizType;
import com.qs.serve.common.enums.SystemModule;
import com.qs.serve.framework.base.model.R;
import com.qs.serve.framework.base.model.dto.CommonIdsParam;
import com.qs.serve.modules.erp.entity.vo.ErpDispatchSumPmsVo;
import com.qs.serve.modules.erp.entity.vo.SubjectDispatchSumVo;
import com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper;
import com.qs.serve.modules.tbs.entity.TbsActivity;
import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper;
import com.qs.serve.modules.tbs.service.*;
import com.qs.serve.modules.tzc.entity.TzcRebatePeriod;
import com.qs.serve.modules.tzc.entity.dto.TzcRebateCalculateDTO;
import com.qs.serve.modules.tzc.service.TzcRebateApplication4VerificationService;
import com.qs.serve.modules.tzc.service.TzcRebatePeriodService;
import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBatchBo;
import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBo;
import com.qs.serve.modules.vtb.entity.bo.VtbVerificationSubjectBo;
import com.qs.serve.modules.vtb.entity.bo.VtbVerificationSubjectCenterBo;
import com.qs.serve.modules.vtb.event.VtbRebateAutoEvent;
import com.qs.serve.modules.vtb.service.VtbFundFlowService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.Nullable;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 预算 费用活动
* @module 预算
* @service 费用活动
* @author YenHex
* @since 2022-11-08
*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("tbs/activity")
public class TbsActivityCheckController {
private final VtbFundFlowService vtbFundFlowService;
private final TbsActivityService tbsActivityService;
private final TbsCostApplyService tbsCostApplyService;
private final TbsCostApplyPart1Service tbsCostApplyPart1Service;
private final TbsActivityApplicationService tbsActivityApplicationService;
private final TbsActivityGoodsService tbsActivityGoodsService;
private final TbsActivitySubjectService tbsActivitySubjectService;
private final ErpDispatchDataMapper erpDispatchDataMapper;
private final TzcRebatePeriodService tzcRebatePeriodService;
private final TbsActivityMapper tbsActivityMapper;
private final TzcRebateApplication4VerificationService tzcRebateApplication4VerificationService;
private final ApplicationEventPublisher eventPublisher;
public void createAutoEvent(){
List<Long> rebateAutoActIds = tbsActivityMapper.listRebateAutoActIds();
for (Long actId : rebateAutoActIds) {
createAutoEvent(actId);
}
}
/**
* 创建返利自动核销事件
* @param activityId
*/
@GetMapping("/createRebateAutoEvent/{actId}")
public void createAutoEvent(@PathVariable("actId") Long activityId){
TbsActivity activity = tbsActivityService.getById(activityId);
TbsCostApply costApply = tbsCostApplyService.getById(activity.getCostApplyId());
VtbVerificationBo commitBo = createVerificationBo(activity);
if (commitBo == null) return;
eventPublisher.publishEvent(new VtbRebateAutoEvent(this, commitBo, costApply.getUserId()));
}
@Nullable
private VtbVerificationBo createVerificationBo(TbsActivity activity) {
Long activityId = activity.getId();
// 通过周期查询发货金额
ErpDispatchSumPmsVo erpDispatchSumPmsVo = tbsActivityService.getDispatchSumByActivity(activity);
BigDecimal dispatchAmount = erpDispatchSumPmsVo.getTotalAmount();
// 此次核销金额
TzcRebateCalculateDTO calculateDTO = tzcRebateApplication4VerificationService.getActivityRebateAmount(activityId,dispatchAmount);
BigDecimal vtbAmt = calculateDTO.getTotalReturnAmt();
if (vtbAmt.compareTo(BigDecimal.ZERO)==0){
// 没有返利金额
return null;
}
// 计算返利金额
VtbVerificationBo commitBo = new VtbVerificationBo();
commitBo.setActivityId(activityId);
commitBo.setAttachIds(null);
commitBo.setRemark("返利核销自动:"+calculateDTO.getDebugMsg());
commitBo.setChannelList(null);
commitBo.setPointList(null);
List<TbsActivitySubject> activitySubjects = tbsActivitySubjectService.listByActivityId(activityId);
List<VtbVerificationSubjectBo> subjectBoList = new ArrayList<>();
// 平均每个科目金额
BigDecimal avgAmt = vtbAmt.divide(BigDecimal.valueOf(activitySubjects.size()), 2,RoundingMode.DOWN);
// 剩余金额,计算最后一项金额
BigDecimal surplusAmt = vtbAmt;
for (int i = 0; i < activitySubjects.size(); i++) {
VtbVerificationSubjectBo subjectBo = new VtbVerificationSubjectBo();
subjectBo.setSubjectId(activitySubjects.get(i).getSubjectId());
subjectBo.setCountSession(0);
subjectBo.setCountPerson(0);
if (i==activitySubjects.size()-1){
subjectBo.setAmount(surplusAmt);
}else {
subjectBo.setAmount(avgAmt);
surplusAmt = surplusAmt.subtract(avgAmt);
}
}
commitBo.setSubjectList(subjectBoList);
commitBo.setPayConditionId(0L);
commitBo.setPayWayId(0L);
// 不释放
commitBo.setInputReleaseFlag(0);
commitBo.setAutoFlag(1);
return commitBo;
}
/**
* 年度返利批量自动核销事件
* @param costApplyId
*/
@GetMapping("/createBatchRebateAutoEvent/{costApplyId}")
public void createBatchRebateAutoEvent(@PathVariable("costApplyId") Long costApplyId){
TbsCostApply costApply = tbsCostApplyService.getById(costApplyId);
LambdaQueryWrapper<TbsActivity> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsActivity::getCostApplyId,costApplyId)
.eq(TbsActivity::getActivityState,0)
.eq(TbsActivity::getAutoCheckState,1);
List<TbsActivity> activityList = tbsActivityService.list(lqw);
List<VtbVerificationBo> verificationBoList = new ArrayList<>();
BigDecimal totalAmount = BigDecimal.ZERO;
for (TbsActivity activity : activityList) {
VtbVerificationBo verificationBo = this.createVerificationBo(activity);
if (verificationBo==null){
continue;
}
verificationBoList.add(verificationBo);
for (VtbVerificationSubjectCenterBo centerBo : verificationBo.getSubjectCenterList()) {
}
}
VtbVerificationBatchBo batchBo = new VtbVerificationBatchBo();
batchBo.setVerificationList(verificationBoList);
batchBo.setRemark("年度返利核销");
//batchBo.setPayWayId(0);
batchBo.setCostApplyId(costApplyId);
//batchBo.setTotalAmount();
batchBo.setRebateOfYearFlag(1);
}
}

61
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java

@ -61,67 +61,6 @@ public class TbsActivityController2 {
private final TzcRebateApplication4VerificationService tzcRebateApplication4VerificationService;
private final ApplicationEventPublisher eventPublisher;
public void createAutoEvent(){
List<Long> rebateAutoActIds = tbsActivityMapper.listRebateAutoActIds();
for (Long actId : rebateAutoActIds) {
createAutoEvent(actId);
}
}
/**
* 创建返利自动核销事件
* @param activityId
*/
@GetMapping("/createRebateAutoEvent/{actId}")
public void createAutoEvent(@PathVariable("actId") Long activityId){
TbsActivity activity = tbsActivityService.getById(activityId);
TbsCostApply costApply = tbsCostApplyService.getById(activity.getCostApplyId());
// 通过周期查询发货金额
ErpDispatchSumPmsVo erpDispatchSumPmsVo = tbsActivityService.getDispatchSumByActivity(activity);
BigDecimal dispatchAmount = erpDispatchSumPmsVo.getTotalAmount();
// 此次核销金额
TzcRebateCalculateDTO calculateDTO = tzcRebateApplication4VerificationService.getActivityRebateAmount(activityId,dispatchAmount);
BigDecimal vtbAmt = calculateDTO.getTotalReturnAmt();
if (vtbAmt.compareTo(BigDecimal.ZERO)==0){
// 没有返利金额
return;
}
// 计算返利金额
VtbVerificationBo commitBo = new VtbVerificationBo();
commitBo.setActivityId(activityId);
commitBo.setAttachIds(null);
commitBo.setRemark("返利核销自动:"+calculateDTO.getDebugMsg());
commitBo.setChannelList(null);
commitBo.setPointList(null);
List<TbsActivitySubject> activitySubjects = tbsActivitySubjectService.listByActivityId(activityId);
List<VtbVerificationSubjectBo> subjectBoList = new ArrayList<>();
// 平均每个科目金额
BigDecimal avgAmt = vtbAmt.divide(BigDecimal.valueOf(activitySubjects.size()), 2,RoundingMode.DOWN);
// 剩余金额,计算最后一项金额
BigDecimal surplusAmt = vtbAmt;
for (int i = 0; i < activitySubjects.size(); i++) {
VtbVerificationSubjectBo subjectBo = new VtbVerificationSubjectBo();
subjectBo.setSubjectId(activitySubjects.get(i).getSubjectId());
subjectBo.setCountSession(0);
subjectBo.setCountPerson(0);
if (i==activitySubjects.size()-1){
subjectBo.setAmount(surplusAmt);
}else {
subjectBo.setAmount(avgAmt);
surplusAmt = surplusAmt.subtract(avgAmt);
}
}
commitBo.setSubjectList(subjectBoList);
commitBo.setPayConditionId(0L);
commitBo.setPayWayId(0L);
// 不释放
commitBo.setInputReleaseFlag(0);
eventPublisher.publishEvent(new VtbRebateAutoEvent(this, commitBo, costApply.getUserId()));
}
/**
* 获取返利年度的活动ID
* @param costApplyId

15
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.tbs.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.framework.base.model.AmountDTO;
import com.qs.serve.framework.base.util.CollectionUtil;
import com.qs.serve.common.utils.StringUtils;
@ -88,16 +89,24 @@ public class TbsBudgetMatchApplication {
TbsCostApply costApply = tbsCostApplyMapper.selectById(costApplyId);
boolean isBack = costApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())||
costApply.getChargeState().equals(TbsCostApplyState.State_7_changed.getCode());
//加载所有预算
//加载所有预算(防止赠品和试吃品时,条件出现不生效)
allBudgetIds.add(0L);
List<TbsBudget> allBudgetList = budgetMapper.selectBatchIds(allBudgetIds);
List<TbsBudget> allBudgetList = budgetMapper
.selectList(new LambdaQueryWrapper<TbsBudget>()
.in(TbsBudget::getId,allBudgetIds)
.eq(!isBack,TbsBudget::getStopFlag,0)
.eq(!isBack,TbsBudget::getInactiveFlag,0)
);
Map<Long,TbsBudget> allBudgetMap = new HashMap<>(allBudgetList.size());
for (TbsBudget budget : allBudgetList) {
//不是回退和异动,需要过滤停用条件
if(!costApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())&&
!costApply.getChargeState().equals(TbsCostApplyState.State_7_changed.getCode())){
//跨年和不运作状态时跳过
//跨年和不运作状态时跳过(使用赠品和试吃品时,条件出现不生效)
if(budget.getStopFlag().equals(1)||budget.getInactiveFlag().equals(1)){
continue;
}

4
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java

@ -335,6 +335,10 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
for (String levelNumStr : levelNumSet) {
// 当前坎级最高返利金额
BigDecimal currentLevelMaxAmount = levelAmountMap.get(levelNumStr);
if (currentLevelMaxAmount==null){
DebugStrUtil.appendStr("获取坎级 "+levelNumStr+" ,返利金额金额为空");
currentLevelMaxAmount = BigDecimal.ZERO;
}
if (currentLevelMaxAmount.compareTo(BigDecimal.ZERO)>0){
currentConfAmount = currentConfAmount.add(currentLevelMaxAmount);
}

3
cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBo.java

@ -63,5 +63,8 @@ public class VtbVerificationBo implements Serializable {
/** 是否释放(这个值取反 0-表示释放;1-表示不释放) */
private Integer inputReleaseFlag;
/** 是否系统自动执行 */
private Integer autoFlag;
}

1
cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -828,6 +828,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
boolean isCurrentCommit = verificationBo.getId()!=null;
validActivity(cotractFlag,activity,true,isCurrentCommit);
VtbVerification verification = new VtbVerification();
verification.setAutoCheckState(verificationBo.getAutoFlag());
verification.setId(verificationBo.getId());
verification.setRebateId(activity.getRebateId());
verification.setRebatePeriodId(activity.getRebatePeriodId());

1
cms-modules/cms-system/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java

@ -108,6 +108,7 @@ public class WxSvcUserApi {
@GetMapping("/phoneCode/{phone}")
public R<?> phoneCode(@PathVariable("phone") String phone){
//拦截未注册的手机号
phone = phone.trim();
LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
lqw.eq(SysUser::getMobile,phone);
Long count = sysUserService.count(lqw);

2
cms-modules/cms-system/src/main/resources/mapper/sys/SysOperationLogMapper.xml

@ -53,7 +53,7 @@
</sql>
<insert id="saveLog" parameterType="com.qs.serve.modules.sys.entity.SysOperationLog">
INSERT INTO sys_operation_log
INSERT INTO sys_operation_log_${tableNameExt}
(module,title, biz_type, inter_type, code_method, req_method, req_url, req_param, req_ip, user_type, user_id,
err_msg, json_result, elapsed_time, user_agent, create_time, create_by, tenant_id,creator_name)
VALUES

Loading…
Cancel
Save