Browse Source

费用匹配预览表;费用作废

v1.0
Yen 2 years ago
parent
commit
e4aa762dec
  1. 1
      src/main/java/com/qs/serve/common/util/CodeGenUtil.java
  2. 5
      src/main/java/com/qs/serve/modules/seeyon/SeeYonController.java
  3. 3
      src/main/java/com/qs/serve/modules/tbs/common/TbsCostApplyState.java
  4. 11
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java
  5. 5
      src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java
  6. 6
      src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java
  7. 68
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java
  8. 6
      src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java
  9. 6
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java
  10. 27
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  11. 4
      src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml

1
src/main/java/com/qs/serve/common/util/CodeGenUtil.java

@ -32,6 +32,7 @@ public class CodeGenUtil {
@AllArgsConstructor @AllArgsConstructor
public enum SourceDataKey{ public enum SourceDataKey{
SaleRegion("S","SaleRegion"), SaleRegion("S","SaleRegion"),
Budget("","Budget"),
BizRegion("B","BizRegion"); BizRegion("B","BizRegion");
private String prefix; private String prefix;
private String code; private String code;

5
src/main/java/com/qs/serve/modules/seeyon/SeeYonController.java

@ -67,7 +67,10 @@ public class SeeYonController {
SysUser sysUser = sysUserService.getById(userId); SysUser sysUser = sysUserService.getById(userId);
sysUser.checkSyAccount(); sysUser.checkSyAccount();
query.setMemberId(sysUser.getSyUserId()); query.setMemberId(sysUser.getSyUserId());
return R.ok(123456L); query.setPageNum(1);
query.setPageSize(1);
long count = listAllCha(query).getData().getTotal();
return R.ok(count);
} }
/** /**

3
src/main/java/com/qs/serve/modules/tbs/common/TbsCostApplyState.java

@ -21,7 +21,8 @@ public enum TbsCostApplyState {
State_2_actioning(2), State_2_actioning(2),
State_3_finished(3), State_3_finished(3),
State_4_refused(4), State_4_refused(4),
State_5_stop(5); State_5_stop(5),
State_6_remove(6);
private Integer code; private Integer code;

11
src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java

@ -75,6 +75,17 @@ public class TbsCostApplyController {
private SysPostUserService postUserService; private SysPostUserService postUserService;
private TbsCostApplyOperationServiceImpl tbsCostApplyOperationServiceImpl; private TbsCostApplyOperationServiceImpl tbsCostApplyOperationServiceImpl;
/**
* 作废费用申请
* @param id
* @return
*/
@DeleteMapping("/removeCostById/{id}")
public R<?> removeCostById(@PathVariable("id") String id){
return R.ok();
}
/** /**
* 统计即将逾期 * 统计即将逾期
* @return * @return

5
src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java

@ -34,9 +34,12 @@ public class TbsBudget implements Serializable {
@TableId(type = IdType.AUTO) @TableId(type = IdType.AUTO)
private Long id; private Long id;
/** 预算编码 */ /** 预算名称 */
private String budgetCode; private String budgetCode;
/** 预算编码 */
private String budgetNumber;
/** 费用启用状态 0/1 */ /** 费用启用状态 0/1 */
private Integer budgetState; private Integer budgetState;

6
src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java

@ -138,6 +138,12 @@ public class TbsScheduleItemBudget implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String conditionGoodsIds; private String conditionGoodsIds;
@TableField(exist = false)
private String budgetName;
@TableField(exist = false)
private String budgetCode;
public BigDecimal compareTargetExpenseRate(){ public BigDecimal compareTargetExpenseRate(){
if(budgetAmount!=null&&preDispatchAmount!=null&&preDispatchAmount.compareTo(BigDecimal.ZERO)!=0){ if(budgetAmount!=null&&preDispatchAmount!=null&&preDispatchAmount.compareTo(BigDecimal.ZERO)!=0){
return budgetAmount.divide(preDispatchAmount,BigDecimal.ROUND_DOWN); return budgetAmount.divide(preDispatchAmount,BigDecimal.ROUND_DOWN);

68
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java

@ -1,6 +1,8 @@
package com.qs.serve.modules.tbs.service; package com.qs.serve.modules.tbs.service;
import com.qs.serve.modules.tbs.common.TbsGoodsType;
import com.qs.serve.modules.tbs.common.util.CostSort2WrapperUtil; import com.qs.serve.modules.tbs.common.util.CostSort2WrapperUtil;
import com.qs.serve.modules.tbs.entity.TbsActivity;
import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods;
import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget;
import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO; import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO;
@ -24,11 +26,20 @@ import java.util.*;
public class TbsBudgetMatchApplication { public class TbsBudgetMatchApplication {
private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService; private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService;
private final TbsActivityService activityService;
private final TbsBudgetMatchMapper budgetMatchMapper; private final TbsBudgetMatchMapper budgetMatchMapper;
public TbsBudgetTableVo buildResultTable(Long costApplyId){ public TbsBudgetTableVo buildResultTable(Long costApplyId){
List<TbsActivity> activityList = activityService.listByCostApplyId(costApplyId);
Map<Long,TbsActivity> activityMap = new HashMap<>(activityList.size());
for (TbsActivity activity : activityList) {
activityMap.put(activity.getId(),activity);
}
List<TbsActivityCenterGoods> activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId); List<TbsActivityCenterGoods> activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId);
// 记录使用金额
Map<Long, BigDecimal> usableAmountMap = new HashMap<>(); Map<Long, BigDecimal> usableAmountMap = new HashMap<>();
// 提取命中的预算
Map<Long,TbsScheduleItemBudget> matchItemBudgetsMap = new HashMap<>();
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
// 通过TbsActivityCenterGoods获取匹配条件的预算 // 通过TbsActivityCenterGoods获取匹配条件的预算
List<TbsScheduleItemBudget> scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods); List<TbsScheduleItemBudget> scheduleItemBudgetList = this.centerGoodsMatchTbsScheduleItemBudget(centerGoods);
@ -47,15 +58,68 @@ public class TbsBudgetMatchApplication {
usableAmountMap.put(scheduleItemBudgetId,usableAmt); usableAmountMap.put(scheduleItemBudgetId,usableAmt);
//标记使用那个预算 //标记使用那个预算
centerGoods.setScheduleItemBudgetId(itemBudget.getId()); centerGoods.setScheduleItemBudgetId(itemBudget.getId());
matchItemBudgetsMap.put(scheduleItemBudgetId,itemBudget);
break; break;
} }
} }
} }
//TODO 拼接Table,要重新设计显示内容 //TODO 拼接Table,要重新设计显示内容
TbsBudgetTableVo tableData = new TbsBudgetTableVo(); List<TbsBudgetTableVo.TopTheadHeader> topTheadHeaderList = new ArrayList<>();
List<TbsBudgetTableVo.TableValue> tableValueList = new ArrayList<>();
List<TbsBudgetTableVo.LeftTheadHeader> leftTheadHeaderList = new ArrayList<>();
for (Long scheduleItemBudgetId : matchItemBudgetsMap.keySet()) {
TbsScheduleItemBudget itemBudget = matchItemBudgetsMap.get(scheduleItemBudgetId);
TbsBudgetTableVo.TopTheadHeader header = new TbsBudgetTableVo.TopTheadHeader();
header.setId(scheduleItemBudgetId.toString());
header.setLabel(itemBudget.getBudgetName()+"-"+itemBudget.getItemName());
header.setBudgetAmount(itemBudget.getUnUsedBudgetAmount());
header.setTotalAmount(itemBudget.getFinalBudgetAmount());
header.setCostAppliedAmount(itemBudget.getUsedBudgetAmount());
header.setCostApplyAmount(BigDecimal.ZERO);
topTheadHeaderList.add(header);
}
TbsBudgetTableVo.TopTheadHeader overTopHeader = new TbsBudgetTableVo.TopTheadHeader();
overTopHeader.setId("0");
overTopHeader.setLabel("无匹配预算");
overTopHeader.setBudgetAmount(BigDecimal.ZERO);
topTheadHeaderList.add(overTopHeader);
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
TbsBudgetTableVo.LeftTheadHeader theadHeader = new TbsBudgetTableVo.LeftTheadHeader();
String actCode = activityMap.get(centerGoods.getActivityId()).getActivityCode();
theadHeader.setActivityCode(actCode);
theadHeader.setId(centerGoods.getId()+"");
theadHeader.setSubjectId(centerGoods.getSubjectId());
theadHeader.setSubjectName(centerGoods.getSubjectName());
theadHeader.setCenterId(centerGoods.getCenterId());
theadHeader.setCenterName(centerGoods.getCenterName());
theadHeader.setTargetType(centerGoods.getTargetType());
theadHeader.setTargetId(centerGoods.getTargetId());
if(centerGoods.getTargetType().equals(TbsGoodsType.sku.name())){
centerGoods.initSpuSkuName();
theadHeader.setLabel(centerGoods.getSpuName()+"("+centerGoods.getSkuName()+")");
}else {
theadHeader.setLabel(centerGoods.getTargetName());
}
theadHeader.setLabelCombo(actCode+"-"
+theadHeader.getSubjectName()+"-"
+theadHeader.getCenterName()+"-"
+theadHeader.getLabel());
leftTheadHeaderList.add(theadHeader);
TbsBudgetTableVo.TableValue tableValue = new TbsBudgetTableVo.TableValue();
tableValue.setTopId(centerGoods.getScheduleItemBudgetId()+"");
tableValue.setLeftId(centerGoods.getCenterId()+"");
tableValue.setValue(centerGoods.getCenterGoodsAmount());
tableValueList.add(tableValue);
}
TbsBudgetTableVo tableData = new TbsBudgetTableVo();
tableData.setTableValueList(tableValueList);
tableData.setTopTheadHeaderList(topTheadHeaderList);
tableData.setLeftTheadHeaderList(leftTheadHeaderList);
//TODO 关联通用数据 //TODO 关联通用数据
return null; return tableData;
} }
/** /**

6
src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java

@ -16,6 +16,12 @@ import java.util.List;
*/ */
public interface TbsCostApplyService extends IService<TbsCostApply> { public interface TbsCostApplyService extends IService<TbsCostApply> {
/**
* 作废
* @param id
*/
void removeCostById(Long id);
/** /**
* 统计即将逾期 * 统计即将逾期
* @param userId * @param userId

6
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java

@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.*;
import com.qs.serve.common.util.AuthContextUtils;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.entity.BmsSubject;
import com.qs.serve.modules.bms.service.BmsSubjectService; import com.qs.serve.modules.bms.service.BmsSubjectService;
import com.qs.serve.modules.goods.entity.GoodsCategory; import com.qs.serve.modules.goods.entity.GoodsCategory;
@ -100,6 +97,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
budgetConditionService.remove(lqw); budgetConditionService.remove(lqw);
}else { }else {
budget = CopierUtil.copy(budgetBo,new TbsBudget()); budget = CopierUtil.copy(budgetBo,new TbsBudget());
budget.setBudgetNumber(CodeGenUtil.getDataCode(CodeGenUtil.SourceDataKey.Budget));
} }
List<Long> skuIds = budgetBo.getSkuIds(); List<Long> skuIds = budgetBo.getSkuIds();
List<Long> spuIds = budgetBo.getSpuIds(); List<Long> spuIds = budgetBo.getSpuIds();

27
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

@ -44,6 +44,9 @@ import com.qs.serve.modules.tbs.entity.dto.TbsContractCostSubItem;
import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem; import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem;
import com.qs.serve.modules.tbs.mapper.*; import com.qs.serve.modules.tbs.mapper.*;
import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.tbs.service.*;
import com.qs.serve.modules.vtb.common.VtbVerificationState;
import com.qs.serve.modules.vtb.entity.VtbVerification;
import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -93,8 +96,32 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper; private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper;
private final ErpDispatchDataMapper dispatchDataMapper; private final ErpDispatchDataMapper dispatchDataMapper;
private TbsCostContractMapper costContractMapper; private TbsCostContractMapper costContractMapper;
private VtbVerificationMapper verificationMapper;
@Override
public void removeCostById(Long id) {
TbsCostApply costApply = this.getById(id);
if(!costApply.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){
Assert.throwEx("当前单据状态不可作废");
}
LambdaQueryWrapper<VtbVerification> vtbLqw = new LambdaQueryWrapper<>();
vtbLqw.eq(VtbVerification::getCostApplyId,id);
vtbLqw.and(
qw->qw.eq(VtbVerification::getVerificationState, VtbVerificationState.Finished)
.or()
.eq(VtbVerification::getVerificationState, VtbVerificationState.Commiting)
);
long count = verificationMapper.selectCount(vtbLqw);
if(count>0){
Assert.throwEx("含核销记录不可作废");
}
//删除费用占用的预算
LambdaQueryWrapper<TbsBudgetLog> rmLogLqw = new LambdaQueryWrapper<>();
rmLogLqw.eq(TbsBudgetLog::getCostApplyId,id);
budgetLogService.remove(rmLogLqw);
}
@Override @Override
public Long selectCountOverdueState(String userId) { public Long selectCountOverdueState(String userId) {
int sysConfOfWarningDays = 0; int sysConfOfWarningDays = 0;

4
src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml

@ -21,6 +21,8 @@
<result property="budgetConditionFlag" column="budget_condition_flag"/> <result property="budgetConditionFlag" column="budget_condition_flag"/>
<result property="budgetSubjectId" column="subject_id"/> <result property="budgetSubjectId" column="subject_id"/>
<result property="conditionGoodsIds" column="condition_goods_ids"/> <result property="conditionGoodsIds" column="condition_goods_ids"/>
<result property="budgetName" column="budget_name"/>
<result property="budgetCode" column="budget_code"/>
</resultMap> </resultMap>
@ -33,6 +35,8 @@
temp_tbg3.amt used_budget_amount, temp_tbg3.amt used_budget_amount,
tb.condition_flag budget_condition_flag, tb.condition_flag budget_condition_flag,
tb.subject_id subject_id, tb.subject_id subject_id,
tb.budget_code budget_name,
tb.budget_number budget_code,
tbc.target_level_path_ids condition_goods_ids tbc.target_level_path_ids condition_goods_ids
from tbs_schedule_item_budget tsib from tbs_schedule_item_budget tsib
left join tbs_budget tb on tsib.budget_id = tb.id left join tbs_budget tb on tsib.budget_id = tb.id

Loading…
Cancel
Save