From 436d95cb9d0ea9a82e6caab2247bb3762733de09 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 7 Dec 2022 16:20:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=AE=97=E8=B4=B9=E7=94=A8=E5=8D=A0?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tbs/controller/TbsActivityController.java | 52 ++++------- .../controller/TbsCostApplyController.java | 92 ++++--------------- .../tbs/entity/TbsActivityCenterGoods.java | 15 +++ .../modules/tbs/entity/TbsActivityGoods.java | 14 +++ .../serve/modules/tbs/entity/TbsBudget.java | 2 +- .../modules/tbs/entity/TbsBudgetCostItem.java | 21 +++++ .../modules/tbs/entity/TbsCostApply.java | 3 + .../tbs/entity/dto/TbsBudgetCostResult.java | 4 +- .../tbs/entity/vo/TbsBudgetTableVo.java | 9 ++ .../service/TbsBudgetApplicationService.java | 87 ++++++++++-------- .../tbs/service/TbsBudgetCostItemService.java | 14 ++- .../tbs/service/TbsCostApplyService.java | 7 ++ .../service/impl/TbsActivityServiceImpl.java | 10 ++ .../impl/TbsBudgetCostItemServiceImpl.java | 10 +- .../service/impl/TbsCostApplyServiceImpl.java | 79 ++++++++++++++++ 15 files changed, 271 insertions(+), 148 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java index 93e25bcb..5822cf60 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java +++ b/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 activitySubjects = activitySubjectService.list(qw); activity.setSubjectCenterList(activitySubjects); @@ -159,17 +153,7 @@ public class TbsActivityController { List 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 activityChannels = activityChannelService.list(qw); @@ -190,17 +174,7 @@ public class TbsActivityController { } activity.setSubjectCenterList(activitySubjects); List 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); } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index 8647a128..0140dba0 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/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 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 budgetItemList = costItem.getTempScheduleItemDtoList(); -// //无可用预算拦截 -// if(budgetItemList.size()<1){ -// -// }else { -// for (TbsScheduleItemBudget itemBudget : budgetItemList) { -// -// } -// } -// //加载已用预算 -// List budgetIdsByItem = budgetItemList.stream() -// .map(TbsScheduleItemBudget::getBudgetId).distinct().collect(Collectors.toList()); -// List 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 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 flowIdResult = seeYonService.baseCreateProcess(createProcess); - if(flowIdResult.getStatus()!=200){ - return R.error("远程服务调用失败"); - } - String flowId = flowIdResult.getData(); - String formId = null; - R 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 更新并占用预算 - return R.ok(); - }else if (tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){ - //todo 驳回重新申请 - } - return R.error("当前状态不可申请"); + tbsCostApplyService.commitApply(id); + return R.ok(); } @@ -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> syResult = seeYonService.pageMemberAffair(param); PageVo pageVo = syResult.getData(); List 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 result = seeYonService.affairCommit(param); if(result.getStatus()==200){ - //判断是否有下一节点 + // 判断是否含有下个节点 String flag = result.getData(); //审批中(next)、完成(finish)、拒绝(refused) if("finish".equals(flag)){ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java index f2b8b4f8..255383ac 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java +++ b/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()); + } + } + } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityGoods.java index e07004ef..6a2ad851 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityGoods.java +++ b/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()); + } + } + } } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java index d3a50a98..f1e90683 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java +++ b/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 */ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java index 8c5e1a79..12118912 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java +++ b/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 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()); + } + } + } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java index 3ba0ef91..ff5cf486 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java +++ b/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; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCostResult.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCostResult.java index 9f9ce2d9..c08e76c8 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCostResult.java +++ b/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 budgetMatchList; - /** 超支预算 */ + /** 没有匹配预算的费用 */ private List budgetUnMatchList; /** 表数据封装 */ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetTableVo.java b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetTableVo.java index 32eab276..732e520a 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetTableVo.java +++ b/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 diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java index 220ccc3a..677224b8 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java +++ b/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,12 +49,11 @@ public class TbsBudgetApplicationService { //允许超出预算标识 boolean overspend = configService.getByKey(SysConfigKey.TbsBudgetOverspend).getConfigValue().equals("1"); //加载活动 - List activityList = tbsActivityService.listByCostApplyId(costApplyId); + LambdaQueryWrapper activityLqw = new LambdaQueryWrapper<>(); + activityLqw.eq(TbsActivity::getCostApplyId,costApplyId); + List activityList = activityMapper.selectList(activityLqw); if(activityList.size()<1){ - if(throwEx){ - Assert.throwEx("当前费用未设置活动"); - } - return null; + Assert.throwEx("当前费用未设置活动"); } //考核期有关的预算id,判断逻辑为活动需要允许在 List budgetIds = new ArrayList<>(); @@ -72,13 +63,21 @@ public class TbsBudgetApplicationService { List scheduleItemList = this.loadScheduleBudgetAndSetting(activityList, budgetIds, noBudgetActivityIds); //加载预算占用历史 List scheduleItemBudgetIds = scheduleItemList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); - List hisBudgetCostItemList = tbsBudgetCostItemService.listByScheduleItemBudgetIds(scheduleItemBudgetIds); + List hisBudgetCostItemList = tbsBudgetCostItemService.listByScheduleItemBudgetIds(scheduleItemBudgetIds,costApplyId); Map> hisCostGroupByItemBudget = hisBudgetCostItemList.stream() .collect(Collectors.groupingBy(TbsBudgetCostItem::getScheduleItemBudgetId)); // 构建预算费用占用明细 List centerGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId); // 加载所有条件 - List budgetList = budgetIds.size()>0?tbsBudgetService.listByIds(budgetIds):new ArrayList<>(); + List budgetList; + if(budgetIds.size()>0){ + LambdaQueryWrapper budgetLqw = new LambdaQueryWrapper<>(); + budgetLqw.in(TbsBudget::getId,budgetIds); + budgetLqw.eq(TbsBudget::getBudgetState,1); + budgetList = tbsBudgetMapper.selectList(budgetLqw); + }else { + budgetList = new ArrayList<>(); + } List noConditionBudgetList = new ArrayList<>(); boolean budgetNoCondition = this.loadConditionByBudgetsAndMatch(budgetList, noConditionBudgetList); //活动拦截 @@ -127,7 +126,6 @@ public class TbsBudgetApplicationService { List allBudgetItem = new ArrayList<>(); allBudgetItem.addAll(budgetMatchList); allBudgetItem.addAll(budgetUnMatchList); - TbsBudgetTableVo tableVo = new TbsBudgetTableVo(); List topTheadHeaders = new ArrayList<>(); Map> 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 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, diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetCostItemService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetCostItemService.java index e33db5a8..09940af8 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetCostItemService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetCostItemService.java @@ -12,8 +12,18 @@ import java.util.List; */ public interface TbsBudgetCostItemService extends IService { + /** + * 移除费用申请占用 + * @param costApplyId + */ + void removeByCostApplyId(Long costApplyId); - - List listByScheduleItemBudgetIds(List ids); + /** + * 查询费用占用 + * @param ids + * @param neInCostApplyId 忽略的费用申请id + * @return + */ + List listByScheduleItemBudgetIds(List ids,Long neInCostApplyId); } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java index 3ed9253a..c48fe9e5 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java +++ b/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 { + /** + * 提交申请 + * @param id + */ + void commitApply(String id); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java index fa2142dd..9da2f9ae 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java +++ b/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 implements TbsBudgetCostItemService { @Override - public List listByScheduleItemBudgetIds(List ids) { + public void removeByCostApplyId(Long costApplyId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsBudgetCostItem::getCostApplyId,costApplyId); + this.remove(lqw); + } + + @Override + public List listByScheduleItemBudgetIds(List ids,Long neCostApplyId) { if(CollectionUtil.isNotEmpty(ids)){ LambdaQueryWrapper costLqw = new LambdaQueryWrapper<>(); costLqw.in(TbsBudgetCostItem::getScheduleItemBudgetId,ids); + costLqw.ne(TbsBudgetCostItem::getCostApplyId,neCostApplyId); return this.list(costLqw); } return new ArrayList<>(); diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java index 0c7c79f7..7ec18922 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java +++ b/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 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 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 flowIdResult = seeYonService.baseCreateProcess(createProcess); + if(flowIdResult.getStatus()!=200){ + Assert.throwEx("远程服务调用失败"); + } + String flowId = flowIdResult.getData(); + String formId = null; + R 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 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 驳回重新申请 + + } + } + }