Browse Source

预算费用占用

mssql
Yen 3 years ago
parent
commit
436d95cb9d
  1. 52
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  2. 90
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java
  3. 15
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java
  4. 14
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityGoods.java
  5. 2
      src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java
  6. 21
      src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java
  7. 3
      src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java
  8. 4
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCostResult.java
  9. 9
      src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetTableVo.java
  10. 85
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java
  11. 14
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetCostItemService.java
  12. 7
      src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java
  13. 10
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java
  14. 10
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetCostItemServiceImpl.java
  15. 79
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

52
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

@ -7,10 +7,12 @@ import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.PageUtil;
import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.tbs.common.TbsActivityState;
import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.common.TbsGoodsType;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.bo.TbsActivityReopenBo;
@ -20,6 +22,7 @@ import com.qs.serve.modules.vtb.service.VtbVerificationService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.tbs.entity.vo.TbsActivityVo;
@ -44,6 +47,7 @@ import java.util.stream.Collectors;
@RequestMapping("tbs/activity")
public class TbsActivityController {
private final TbsCostApplyService costApplyService;
private final TbsActivityService tbsActivityService;
private final TbsActivityGoodsService activityGoodsService;
private final TbsActivitySubjectService activitySubjectService;
@ -75,17 +79,7 @@ public class TbsActivityController {
if(goodsList.size()>0){
activity.setGoodsType(goodsList.get(0).getTargetType());
}
for (TbsActivityGoods goods : goodsList) {
if(goods.getTargetType().equals(TbsGoodsType.sku.name())){
try {
String[] names = goods.getTargetLevelPathNames().split("_");
goods.setSkuName(names[names.length-1]);
goods.setSpuName(names[names.length-2]);
} catch (Exception e) {
log.error("格式错误:{}",goods.getTargetLevelPathNames());
}
}
}
goodsList.forEach(TbsActivityGoods::initSpuSkuName);
activity.setGoodsList(goodsList);
List<TbsActivitySubject> activitySubjects = activitySubjectService.list(qw);
activity.setSubjectCenterList(activitySubjects);
@ -159,17 +153,7 @@ public class TbsActivityController {
List<TbsActivityGoods> goodsList = activityGoodsService.list(qw);
if(goodsList.size()>0){
activity.setGoodsType(goodsList.get(0).getTargetType());
goodsList.forEach(goods->{
if(goods.getTargetType().equals(TbsGoodsType.sku.name())){
try {
String[] names = goods.getTargetLevelPathNames().split("_");
goods.setSkuName(names[names.length-1]);
goods.setSpuName(names[names.length-2]);
} catch (Exception e) {
log.error("格式错误:{}",goods.getTargetLevelPathNames());
}
}
});
goodsList.forEach(TbsActivityGoods::initSpuSkuName);
}
activity.setGoodsList(goodsList);
List<TbsActivityChannel> activityChannels = activityChannelService.list(qw);
@ -190,17 +174,7 @@ public class TbsActivityController {
}
activity.setSubjectCenterList(activitySubjects);
List<TbsActivityCenterGoods> activityCenterGoodsList = activityCenterGoodsService.list(qw);
activityCenterGoodsList.forEach(goods->{
if(goods.getTargetType().equals(TbsGoodsType.sku.name())){
try {
String[] names = goods.getTargetLevelPathNames().split("_");
goods.setSkuName(names[names.length-1]);
goods.setSpuName(names[names.length-2]);
} catch (Exception e) {
log.error("格式错误:{}",goods.getTargetLevelPathNames());
}
}
});
activityCenterGoodsList.forEach(TbsActivityCenterGoods::initSpuSkuName);
activity.setCenterGoodsList(activityCenterGoodsList);
return R.ok(activity);
}
@ -266,8 +240,20 @@ public class TbsActivityController {
@DeleteMapping("/deleteById/{id}")
@SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.DELETE)
@PreAuthorize("hasRole('tbs:activity:delete')")
@Transactional(rollbackFor = Exception.class)
public R<?> deleteById(@PathVariable("id") Long id){
TbsActivity activity = tbsActivityService.getById(id);
TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId());
if(!costApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())
&&!costApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())){
return R.error("因费用状态不支持编辑!!");
}
boolean result = tbsActivityService.removeById(id);
//删除活动数量到费用申请
TbsCostApply costApplyParam = new TbsCostApply();
costApplyParam.setId(costApply.getId());
costApplyParam.setTotalActivity(costApply.getTotalActivity()-1);
costApplyService.updateById(costApplyParam);
return R.isTrue(result);
}

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

@ -26,6 +26,7 @@ import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo;
import com.qs.serve.modules.tbs.entity.bo.TbsCostApplyBo;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo;
import com.qs.serve.modules.tbs.entity.vo.TbsCostApplyVo;
import com.qs.serve.modules.tbs.service.*;
import lombok.AllArgsConstructor;
@ -59,12 +60,17 @@ public class TbsCostApplyController {
private TbsBudgetApplicationService budgetApplicationService;
@GetMapping("test")
public R<?> test(Long id,Integer ex,Integer tb){
Boolean throwEx = ex == 1;
Boolean buildTableFlag = tb == 1;
TbsBudgetCostResult result = budgetApplicationService.buildBudgetCostResult(id,throwEx,buildTableFlag);
return R.ok(result);
/**
* 预览
* @param id
* @return
*/
@GetMapping("preview")
@PreAuthorize("hasRole('tbs:costApply:query')")
public R<TbsBudgetTableVo> preview(Long id){
TbsBudgetCostResult result = budgetApplicationService.buildBudgetCostResult(id,false,true);
return R.ok(result.getTableData());
}
/**
@ -119,67 +125,8 @@ public class TbsCostApplyController {
@SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.UPDATE)
@PreAuthorize("hasRole('tbs:costApply:update')")
public R<?> commit(@PathVariable("id") String id){
TbsCostApply tbsCostApply = tbsCostApplyService.getById(id);
if(!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())
||!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
return R.error("操作失败,申请费用状态不支持");
}
// //统计预算dto
// for (TbsBudgetCostItem costItem : budgetCostItems) {
// List<TbsScheduleItemBudget> budgetItemList = costItem.getTempScheduleItemDtoList();
// //无可用预算拦截
// if(budgetItemList.size()<1){
//
// }else {
// for (TbsScheduleItemBudget itemBudget : budgetItemList) {
//
// }
// }
// //加载已用预算
// List<Long> budgetIdsByItem = budgetItemList.stream()
// .map(TbsScheduleItemBudget::getBudgetId).distinct().collect(Collectors.toList());
// List<TbsBudget> budgetListByItem = budgetList.stream()
// .filter(budget-> budgetIdsByItem.contains(budget.getId())).collect(Collectors.toList());
//
// }
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
if(tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())){
Map<String, Object> data = new HashMap<>(10);
data.put("empId",sysUser.getCode());
data.put("applyTime",DateUtils.format(LocalDateTime.now(), DateFormatString.DATE_TIME));
data.put("money",tbsCostApply.getTotalActivityAmount());
data.put("costApplyCode",tbsCostApply.getId());
data.put("costApplyId",tbsCostApply.getId());
BaseCreateProcessBo createProcess = new BaseCreateProcessBo();
createProcess.setTemplateCode(TbsSeeYonConst.COST_APPLY_FORM);
createProcess.setMemberLoginName(TbsSeeYonConst.COST_APPLY_USER);
createProcess.setSubjectTitle(tbsCostApply.getChargeTheme());
createProcess.setDataJson(JsonUtil.objectToJson(data));
R<String> flowIdResult = seeYonService.baseCreateProcess(createProcess);
if(flowIdResult.getStatus()!=200){
return R.error("远程服务调用失败");
}
String flowId = flowIdResult.getData();
String formId = null;
R<String> formIdResult = seeYonService.getFormId(tbsCostApply.getId());
if(formIdResult.getStatus()==200){
formId = formIdResult.getData();
}
TbsCostApply costApply = new TbsCostApply();
costApply.setId(tbsCostApply.getId());
costApply.setSyFlowId(flowId);
costApply.setSyFormId(formId);
tbsCostApplyService.updateById(costApply);
//todo 更新并占用预算
tbsCostApplyService.commitApply(id);
return R.ok();
}else if (tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
//todo 驳回重新申请
}
return R.error("当前状态不可申请");
}
@ -242,7 +189,7 @@ public class TbsCostApplyController {
}
/**
* 审批节点列表(翻页)
* 审批列表(翻页)
* @param state 状态0-未完成与已完成1-未完成2已完成其它-加载所有
* @param pageNum
* @param pageSize
@ -252,7 +199,7 @@ public class TbsCostApplyController {
@SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.DELETE)
public R<?> pageMemberAffair(Integer state,Integer pageNum,Integer pageSize){
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
if(!StringUtils.hasText(sysUser.getSyUserId())){
if(!StringUtils.hasText(sysUser.getSyUserId())||!StringUtils.hasText(sysUser.getSyAccount())){
return R.error("当前账号未绑定致远用户信息");
}
CtpAffairQo param = new CtpAffairQo();
@ -260,6 +207,7 @@ public class TbsCostApplyController {
param.setState(state);
param.setPageNum(pageNum);
param.setPageSize(pageSize);
param.setTemplateCodes(Arrays.asList("CostBill_Test"));
R<PageVo<CtpAffair>> syResult = seeYonService.pageMemberAffair(param);
PageVo<CtpAffair> pageVo = syResult.getData();
List<CtpAffair> ctpAffairs = pageVo.getList();
@ -294,9 +242,9 @@ public class TbsCostApplyController {
@PreAuthorize("hasRole('tbs:costApply:commit')")
public R<?> commitAffair(@RequestBody @Valid TbsAffairCommitBo affairCommit){
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
TbsCostApply costApply = tbsCostApplyService.getById(affairCommit.getAffairId());
TbsCostApply costApply = tbsCostApplyService.getById(affairCommit.getCostApplyId());
if(!costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())){
return R.error("param err1");
return R.error("费用申请处于未非审批状态!");
}
CtpAffairCommit param = new CtpAffairCommit();
param.setState(affairCommit.getState());
@ -311,7 +259,7 @@ public class TbsCostApplyController {
}
R<String> result = seeYonService.affairCommit(param);
if(result.getStatus()==200){
//判断是否有下一节点
// 判断是否含有下个节点
String flag = result.getData();
//审批中(next)、完成(finish)、拒绝(refused)
if("finish".equals(flag)){

15
src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java

@ -10,7 +10,9 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.modules.tbs.common.TbsGoodsType;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
@ -22,6 +24,7 @@ import javax.validation.constraints.NotBlank;
* @author YenHex
* @since 2022-11-08
*/
@Slf4j
@Data
@TableName("tbs_activity_center_goods")
public class TbsActivityCenterGoods implements Serializable {
@ -215,5 +218,17 @@ public class TbsActivityCenterGoods implements Serializable {
return budgetCostItem;
}
public void initSpuSkuName(){
if(this.getTargetType().equals(TbsGoodsType.sku.name())){
try {
String[] names = this.getTargetLevelPathNames().split("_");
this.setSkuName(names[names.length-1]);
this.setSpuName(names[names.length-2]);
} catch (Exception e) {
log.error("格式错误:{}",this.getTargetLevelPathNames());
}
}
}
}

14
src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityGoods.java

@ -9,7 +9,9 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qs.serve.modules.tbs.common.TbsGoodsType;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
@ -21,6 +23,7 @@ import javax.validation.constraints.NotBlank;
* @author YenHex
* @since 2022-11-08
*/
@Slf4j
@Data
@TableName("tbs_activity_goods")
public class TbsActivityGoods implements Serializable {
@ -109,5 +112,16 @@ public class TbsActivityGoods implements Serializable {
@TableField(exist = false)
private String skuName;
public void initSpuSkuName(){
if(this.getTargetType().equals(TbsGoodsType.sku.name())){
try {
String[] names = this.getTargetLevelPathNames().split("_");
this.setSkuName(names[names.length-1]);
this.setSpuName(names[names.length-2]);
} catch (Exception e) {
log.error("格式错误:{}",this.getTargetLevelPathNames());
}
}
}
}

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

@ -35,7 +35,7 @@ public class TbsBudget implements Serializable {
/** 预算编码 */
private String budgetCode;
/** 费用启用状态 */
/** 费用启用状态 0/1 */
private Integer budgetState;
/** 科目id */

21
src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java

@ -9,7 +9,9 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qs.serve.modules.tbs.common.TbsGoodsType;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
@ -21,6 +23,7 @@ import java.util.List;
* @author YenHex
* @since 2022-12-02
*/
@Slf4j
@Data
@TableName("tbs_budget_cost_item")
public class TbsBudgetCostItem implements Serializable {
@ -207,5 +210,23 @@ public class TbsBudgetCostItem implements Serializable {
@TableField(exist = false)
private List<TbsScheduleItemBudget> tempScheduleItemDtoList;
@TableField(exist = false)
private String spuName;
@TableField(exist = false)
private String skuName;
public void initSpuSkuName(){
if(this.getTargetType().equals(TbsGoodsType.sku.name())){
try {
String[] names = this.getTargetLevelPathNames().split("_");
this.setSkuName(names[names.length-1]);
this.setSpuName(names[names.length-2]);
} catch (Exception e) {
log.error("格式错误:{}",this.getTargetLevelPathNames());
}
}
}
}

3
src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java

@ -105,6 +105,9 @@ public class TbsCostApply implements Serializable {
@JsonProperty
private String delFlag;
/** 统计活动数量 */
private Integer totalActivity;
/** 统计所有活动申请的金额 */
private BigDecimal totalActivityAmount;

4
src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCostResult.java

@ -22,10 +22,10 @@ import java.util.List;
@Data
public class TbsBudgetCostResult {
/** 匹配费用占用 */
/** 匹配费用占用(含超支预算) */
private List<TbsBudgetCostItem> budgetMatchList;
/** 超支预算 */
/** 没有匹配预算的费用 */
private List<TbsBudgetCostItem> budgetUnMatchList;
/** 表数据封装 */

9
src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetTableVo.java

@ -4,6 +4,7 @@ import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.function.LongFunction;
/**
* @author YenHex
@ -21,7 +22,15 @@ public class TbsBudgetTableVo {
@Data
public static class LeftTheadHeader{
private String id;
private String labelCombo;
private String label;
private String targetType;
private Long targetId;
private Long subjectId;
private String subjectName;
private String centerId;
private String centerName;
private String activityCode;
}
@Data

85
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java

@ -1,23 +1,23 @@
package com.qs.serve.modules.tbs.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.model.consts.SysConfigKey;
import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.seeyon.service.SeeYonService;
import com.qs.serve.modules.sys.service.SysConfigService;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.TbsGoodsType;
import com.qs.serve.modules.tbs.common.util.TbsBudgetCostUtil;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo;
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper;
import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.temporal.ChronoField;
import java.util.*;
import java.util.stream.Collectors;
@ -31,24 +31,16 @@ import java.util.stream.Collectors;
@AllArgsConstructor
public class TbsBudgetApplicationService {
private TbsCostApplyService tbsCostApplyService;
private TbsActivityService tbsActivityService;
private TbsActivityCenterGoodsService tbsActivityCenterGoodsService;
private TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
private TbsBudgetService tbsBudgetService;
private TbsBudgetMapper tbsBudgetMapper;
private TbsBudgetConditionService tbsBudgetConditionService;
private TbsBudgetCostItemService tbsBudgetCostItemService;
private BmsSupplierService bmsSupplierService;
private SysUserService sysUserService;
private SysConfigService configService;
private SeeYonService seeYonService;
private TbsActivityMapper activityMapper;
/**
*
* 创建费用占用结果
* @param costApplyId
* @param throwEx 是否需要抛出异常
* @param buildTableFlag 创建表VO
@ -57,13 +49,12 @@ public class TbsBudgetApplicationService {
//允许超出预算标识
boolean overspend = configService.getByKey(SysConfigKey.TbsBudgetOverspend).getConfigValue().equals("1");
//加载活动
List<TbsActivity> activityList = tbsActivityService.listByCostApplyId(costApplyId);
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();
activityLqw.eq(TbsActivity::getCostApplyId,costApplyId);
List<TbsActivity> activityList = activityMapper.selectList(activityLqw);
if(activityList.size()<1){
if(throwEx){
Assert.throwEx("当前费用未设置活动");
}
return null;
}
//考核期有关的预算id,判断逻辑为活动需要允许在
List<Long> budgetIds = new ArrayList<>();
//没有预算的活动
@ -72,13 +63,21 @@ public class TbsBudgetApplicationService {
List<TbsScheduleItemBudget> scheduleItemList = this.loadScheduleBudgetAndSetting(activityList, budgetIds, noBudgetActivityIds);
//加载预算占用历史
List<Long> scheduleItemBudgetIds = scheduleItemList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList());
List<TbsBudgetCostItem> hisBudgetCostItemList = tbsBudgetCostItemService.listByScheduleItemBudgetIds(scheduleItemBudgetIds);
List<TbsBudgetCostItem> hisBudgetCostItemList = tbsBudgetCostItemService.listByScheduleItemBudgetIds(scheduleItemBudgetIds,costApplyId);
Map<Long,List<TbsBudgetCostItem>> hisCostGroupByItemBudget = hisBudgetCostItemList.stream()
.collect(Collectors.groupingBy(TbsBudgetCostItem::getScheduleItemBudgetId));
// 构建预算费用占用明细
List<TbsActivityCenterGoods> centerGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId);
// 加载所有条件
List<TbsBudget> budgetList = budgetIds.size()>0?tbsBudgetService.listByIds(budgetIds):new ArrayList<>();
List<TbsBudget> budgetList;
if(budgetIds.size()>0){
LambdaQueryWrapper<TbsBudget> budgetLqw = new LambdaQueryWrapper<>();
budgetLqw.in(TbsBudget::getId,budgetIds);
budgetLqw.eq(TbsBudget::getBudgetState,1);
budgetList = tbsBudgetMapper.selectList(budgetLqw);
}else {
budgetList = new ArrayList<>();
}
List<TbsBudget> noConditionBudgetList = new ArrayList<>();
boolean budgetNoCondition = this.loadConditionByBudgetsAndMatch(budgetList, noConditionBudgetList);
//活动拦截
@ -127,7 +126,6 @@ public class TbsBudgetApplicationService {
List<TbsBudgetCostItem> allBudgetItem = new ArrayList<>();
allBudgetItem.addAll(budgetMatchList);
allBudgetItem.addAll(budgetUnMatchList);
TbsBudgetTableVo tableVo = new TbsBudgetTableVo();
List<TbsBudgetTableVo.TopTheadHeader> topTheadHeaders = new ArrayList<>();
Map<Long,List<TbsBudgetCostItem>> tmpMap = allBudgetItem.stream().collect(Collectors.groupingBy(TbsBudgetCostItem::getScheduleItemBudgetId));
@ -149,7 +147,6 @@ public class TbsBudgetApplicationService {
break;
}
}
TbsBudgetTableVo.TopTheadHeader theadHeader = new TbsBudgetTableVo.TopTheadHeader();
theadHeader.setId(scheduleItemBudgetId+"");
theadHeader.setLabel(budgetCode+"("+scheduleItemName+")");
@ -160,7 +157,7 @@ public class TbsBudgetApplicationService {
//自定义超额预算
TbsBudgetTableVo.TopTheadHeader overTopHeader = new TbsBudgetTableVo.TopTheadHeader();
overTopHeader.setId("0");
overTopHeader.setLabel("超额预算");
overTopHeader.setLabel("其它预算");
overTopHeader.setBudgetAmount(BigDecimal.ZERO);
topTheadHeaders.add(overTopHeader);
@ -170,13 +167,29 @@ public class TbsBudgetApplicationService {
for (TbsActivity obj : activityList) {
if(obj.getId().equals(centerGoods.getActivityId())){
activity = obj;
break;
}
}
String actCode = activity==null?centerGoods.getActivityId().toString():activity.getActivityCode();
TbsBudgetTableVo.LeftTheadHeader theadHeader = new TbsBudgetTableVo.LeftTheadHeader();
theadHeader.setActivityCode(actCode);
theadHeader.setId(centerGoods.getCenterGoodItemId()+"");
String label = (activity==null?centerGoods.getActivityId():activity.getActivityCode())+"-"+centerGoods.getCenterName()+"-"
+centerGoods.getSubjectName()+"-"+centerGoods.getTargetName();
theadHeader.setLabel(label);
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());
leftTheadHeaders.add(theadHeader);
}
List<TbsBudgetTableVo.TableValue> tableValueList = new ArrayList<>();
@ -195,16 +208,16 @@ public class TbsBudgetApplicationService {
/**
* 匹配的主要方法
* @param activityCostItem
* @param throwEx
* @param overspend
* @param activityList
* @param activityCostItem 活动项
* @param throwEx 预算不够时抛出异常
* @param overspend 超值标识
* @param activityList 所有活动
* @param hisCostGroupByItemBudget 历史费用组
* @param budgetList
* @param noConditionBudgetList
* @param counterMap
* @param actMatchList
* @param actUnMatchList
* @param budgetList 所有预算
* @param noConditionBudgetList 没有条件的预算列表
* @param counterMap 历史预算占用
* @param actMatchList 匹配预算占用的费用(含超支预算)
* @param actUnMatchList 没有匹配预算的费用
*/
private void matchActivityMain(TbsActivityCenterGoods activityCostItem,
Boolean throwEx,

14
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetCostItemService.java

@ -12,8 +12,18 @@ import java.util.List;
*/
public interface TbsBudgetCostItemService extends IService<TbsBudgetCostItem> {
/**
* 移除费用申请占用
* @param costApplyId
*/
void removeByCostApplyId(Long costApplyId);
List<TbsBudgetCostItem> listByScheduleItemBudgetIds(List<Long> ids);
/**
* 查询费用占用
* @param ids
* @param neInCostApplyId 忽略的费用申请id
* @return
*/
List<TbsBudgetCostItem> listByScheduleItemBudgetIds(List<Long> ids,Long neInCostApplyId);
}

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

@ -1,6 +1,7 @@
package com.qs.serve.modules.tbs.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
/**
@ -10,5 +11,11 @@ import com.qs.serve.modules.tbs.entity.TbsCostApply;
*/
public interface TbsCostApplyService extends IService<TbsCostApply> {
/**
* 提交申请
* @param id
*/
void commitApply(String id);
}

10
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java

@ -20,6 +20,7 @@ import com.qs.serve.modules.sys.service.SysConfigService;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.TbsActivityState;
import com.qs.serve.modules.tbs.common.TbsCenterType;
import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.common.TbsGoodsType;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.bo.*;
@ -80,6 +81,10 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
@Transactional(rollbackFor = Exception.class)
public void modify(TbsActivityBo activityBo) {
TbsCostApply costApply = costApplyService.getById(activityBo.getCostApplyId());
if(!costApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())
&&!costApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())){
Assert.throwEx("因费用状态不支持编辑!!");
}
BmsSupplier supplier = supplierService.getById(costApply.getSupplierId());
TbsActivity activity;
if(activityBo.getId()!=null){
@ -91,6 +96,11 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
activity = CopierUtil.copy(activityBo,new TbsActivity());
String random = String.format("%03d",new Random().nextInt(999));
activity.setActivityCode("G"+ StringUtils.genShortId() + random);
//添加活动数量到费用申请
TbsCostApply costApplyParam = new TbsCostApply();
costApplyParam.setId(costApply.getId());
costApplyParam.setTotalActivity(costApply.getTotalActivity()+1);
costApplyService.updateById(costApplyParam);
}
activity.setTemplateValue(activityBo.getTemplateValue());
activity.setSupplierId(Long.parseLong(supplier.getId()));

10
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetCostItemServiceImpl.java

@ -24,10 +24,18 @@ import java.util.List;
public class TbsBudgetCostItemServiceImpl extends ServiceImpl<TbsBudgetCostItemMapper,TbsBudgetCostItem> implements TbsBudgetCostItemService {
@Override
public List<TbsBudgetCostItem> listByScheduleItemBudgetIds(List<Long> ids) {
public void removeByCostApplyId(Long costApplyId) {
LambdaQueryWrapper<TbsBudgetCostItem> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsBudgetCostItem::getCostApplyId,costApplyId);
this.remove(lqw);
}
@Override
public List<TbsBudgetCostItem> listByScheduleItemBudgetIds(List<Long> ids,Long neCostApplyId) {
if(CollectionUtil.isNotEmpty(ids)){
LambdaQueryWrapper<TbsBudgetCostItem> costLqw = new LambdaQueryWrapper<>();
costLqw.in(TbsBudgetCostItem::getScheduleItemBudgetId,ids);
costLqw.ne(TbsBudgetCostItem::getCostApplyId,neCostApplyId);
return this.list(costLqw);
}
return new ArrayList<>();

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

@ -1,12 +1,35 @@
package com.qs.serve.modules.tbs.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.AuthContextUtils;
import com.qs.serve.common.util.DateUtils;
import com.qs.serve.common.util.JsonUtil;
import com.qs.serve.common.util.model.DateFormatString;
import com.qs.serve.modules.seeyon.entity.BaseCreateProcessBo;
import com.qs.serve.modules.seeyon.service.SeeYonService;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.common.TbsSeeYonConst;
import com.qs.serve.modules.tbs.entity.TbsBudgetCostItem;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.service.TbsBudgetApplicationService;
import com.qs.serve.modules.tbs.service.TbsBudgetCostItemService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.service.TbsCostApplyService;
import com.qs.serve.modules.tbs.mapper.TbsCostApplyMapper;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 费用申请 服务实现类
@ -18,5 +41,61 @@ import com.qs.serve.modules.tbs.mapper.TbsCostApplyMapper;
@AllArgsConstructor
public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsCostApply> implements TbsCostApplyService {
private TbsBudgetApplicationService budgetApplicationService;
private TbsBudgetCostItemService budgetCostItemService;
private SysUserService sysUserService;
private SeeYonService seeYonService;
@Override
@Transactional(rollbackFor = Exception.class)
public void commitApply(String id) {
TbsCostApply tbsCostApply = this.getById(id);
if(!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())
||!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
Assert.throwEx("操作失败,申请费用状态不支持");
}
TbsBudgetCostResult result = budgetApplicationService.buildBudgetCostResult(tbsCostApply.getId(),true,false);
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
if(tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())){
Map<String, Object> data = new HashMap<>(10);
data.put("empId",sysUser.getCode());
data.put("applyTime", DateUtils.format(LocalDateTime.now(), DateFormatString.DATE_TIME));
data.put("money",tbsCostApply.getTotalActivityAmount());
data.put("costApplyCode",tbsCostApply.getId());
data.put("costApplyId",tbsCostApply.getId());
BaseCreateProcessBo createProcess = new BaseCreateProcessBo();
createProcess.setTemplateCode(TbsSeeYonConst.COST_APPLY_FORM);
createProcess.setMemberLoginName(TbsSeeYonConst.COST_APPLY_USER);
createProcess.setSubjectTitle(tbsCostApply.getChargeTheme());
createProcess.setDataJson(JsonUtil.objectToJson(data));
R<String> flowIdResult = seeYonService.baseCreateProcess(createProcess);
if(flowIdResult.getStatus()!=200){
Assert.throwEx("远程服务调用失败");
}
String flowId = flowIdResult.getData();
String formId = null;
R<String> formIdResult = seeYonService.getFormId(tbsCostApply.getId());
if(formIdResult.getStatus()==200){
formId = formIdResult.getData();
}
TbsCostApply costApply = new TbsCostApply();
costApply.setId(tbsCostApply.getId());
costApply.setSyFlowId(flowId);
costApply.setSyFormId(formId);
costApply.setChargeState(TbsCostApplyState.State_1_apply.getCode());
this.updateById(costApply);
//移除历史记录
budgetCostItemService.removeByCostApplyId(costApply.getId());
//重新保存
List<TbsBudgetCostItem> allBudgetItem = new ArrayList<>();
allBudgetItem.addAll(result.getBudgetMatchList());
allBudgetItem.addAll(result.getBudgetUnMatchList());
budgetCostItemService.saveBatch(allBudgetItem);
}else if (tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
//todo 驳回重新申请
}
}
}

Loading…
Cancel
Save