diff --git a/src/main/java/com/qs/serve/common/framework/redis/RedisService.java b/src/main/java/com/qs/serve/common/framework/redis/RedisService.java index 3da522e7..dfae685c 100644 --- a/src/main/java/com/qs/serve/common/framework/redis/RedisService.java +++ b/src/main/java/com/qs/serve/common/framework/redis/RedisService.java @@ -227,6 +227,14 @@ public class RedisService { return null; } + public Long getLong(final String key) { + String result = getString(key); + if(result!=null){ + return Long.parseLong(result); + } + return null; + } + /** * 哈希 添加 * diff --git a/src/main/java/com/qs/serve/common/util/CodeGenUtil.java b/src/main/java/com/qs/serve/common/util/CodeGenUtil.java index 73ce7fb4..68ae32f7 100644 --- a/src/main/java/com/qs/serve/common/util/CodeGenUtil.java +++ b/src/main/java/com/qs/serve/common/util/CodeGenUtil.java @@ -2,6 +2,8 @@ package com.qs.serve.common.util; import cn.hutool.core.util.IdUtil; import com.qs.serve.common.framework.redis.RedisService; +import lombok.AllArgsConstructor; +import lombok.Getter; import org.springframework.beans.BeansException; import java.time.LocalDate; @@ -15,19 +17,76 @@ import java.time.format.DateTimeFormatter; */ public class CodeGenUtil { - public static String generate(String key,int perch){ + @Getter + @AllArgsConstructor + public enum SourceKey{ + CostApply("cost_apply"), + Activity("activity"), + Verification("verification"), + Policy("policy"), + PolicyItem("policy_item"); + private String code; + } + + public static String generate(SourceKey sourceKey){ try { + String key = "code_index:"+sourceKey.getCode(); RedisService redisService = SpringUtils.getBean(RedisService.class); + Long value = redisService.getLong(key); + if(value==null){ + redisService.set(key,1); + value = 1L; + }else { + value++; + } + if(value>8000000){ + redisService.set(key,1); + }else { + redisService.set(key,value); + } LocalDate localDateTime = LocalDate.now(); DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMdd"); String localTime = df.format(localDateTime); - Integer value = redisService.getInteger(key)+1; - String appendStr = String.format("%0"+perch+"d", value); - return localTime + appendStr; + String appendStr = digits32(value); + return localTime.substring(2) + appendStr; } catch (BeansException e) { e.printStackTrace(); } return IdUtil.getSnowflakeNextIdStr(); } + /** + * 32个字符,用来表示32进制 + */ + final static char[] digits = { + '0' , '1' , '2' , '3' , '4' , '5' , + '6' , '7' , '8' , '9' , 'A' , 'B' , + 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , + 'J' , 'K' , 'L' , 'M' , 'N' , 'P' , + 'Q' , 'R' , 'T' , 'U' , 'V' , 'W' , + 'X' , 'Y' + }; + + /** + * 10=>32 + * @param val + * @return + */ + static String digits32(long val) { + // 32=2^5=二进制100000 + int shift = 5; + // numberOfLeadingZeros 获取long值从高位连续为0的个数,比如val=0,则返回64 + // 此处mag=long值二进制减去高位0之后的长度 + int mag = Long.SIZE - Long.numberOfLeadingZeros(val); + int len = Math.max(((mag + (shift - 1)) / shift), 1); + char[] buf = new char[len]; + do { + // &31相当于%32 + buf[--len] = digits[((int) val) & 31]; + val >>>= shift; + } while (val != 0 && len > 0); + return new String(buf); + } + + } diff --git a/src/main/java/com/qs/serve/controller/AdminPortalController.java b/src/main/java/com/qs/serve/controller/AdminPortalController.java index ef5759e1..ebd264bc 100644 --- a/src/main/java/com/qs/serve/controller/AdminPortalController.java +++ b/src/main/java/com/qs/serve/controller/AdminPortalController.java @@ -30,7 +30,6 @@ import com.qs.serve.modules.tbs.entity.TbsActivity; import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.service.TbsActivityService; import com.qs.serve.modules.tbs.service.TbsCostApplyService; -import com.qs.serve.modules.tbs.service.impl.TbsCostApplyCompensateServiceImpl; import com.qs.serve.modules.third.ThirdTokenUtil; import com.qs.serve.modules.tzc.entity.TzcPolicy; import com.qs.serve.modules.tzc.service.TzcPolicyService; diff --git a/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java index b8773838..7b67336d 100644 --- a/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java @@ -93,6 +93,9 @@ public class BirActivityCenterGoods implements Serializable { /** 活动完成主题 */ private Integer activityFinishedFlag; + /** 活动释放 */ + private BigDecimal activityTotalReleaseAmount; + /** 科目id */ @NotNull(message = "科目id不能为空") private Long subjectId; diff --git a/src/main/java/com/qs/serve/modules/bir/entity/dto/BirCenterGoodSplitDTO.java b/src/main/java/com/qs/serve/modules/bir/entity/dto/BirCenterGoodSplitDTO.java index 961fe7bc..f81c22a7 100644 --- a/src/main/java/com/qs/serve/modules/bir/entity/dto/BirCenterGoodSplitDTO.java +++ b/src/main/java/com/qs/serve/modules/bir/entity/dto/BirCenterGoodSplitDTO.java @@ -17,4 +17,7 @@ public class BirCenterGoodSplitDTO { //当前CenterGoods分割项核销金额(粗略计算) BigDecimal currentSplitCheckAmount; + //当前CenterGoods分割项核销金额(粗略计算) + BigDecimal currentSplitReleaseAmount; + } diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java index 9219393d..5cfe6b5f 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java @@ -18,6 +18,10 @@ import com.qs.serve.modules.tbs.entity.TbsActivity; import com.qs.serve.modules.tbs.entity.TbsActivityCenter; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import com.qs.serve.modules.tbs.service.TbsActivityCenterGoodsService; +import com.qs.serve.modules.vtb.common.VtbFundFlowType; +import com.qs.serve.modules.vtb.entity.VtbFundFlow; +import com.qs.serve.modules.vtb.entity.dto.VtbFundFlowSumAmtDTO; +import com.qs.serve.modules.vtb.mapper.VtbFundFlowMapper; import com.tencentcloudapi.cii.v20201210.models.ResultObject; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +34,7 @@ import com.qs.serve.modules.bir.mapper.BirActivityCenterGoodsMapper; import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -52,6 +57,8 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl> collectMap = activityCenterGoodsAllList.stream() .collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId)); + //TODO查询费用释放 + VtbFundFlow flow = new VtbFundFlow(); + flow.setFundType(VtbFundFlowType.Release); + flow.setSelectActivityIds(new ArrayList<>(collectMap.keySet())); + List actReleaseList = fundFlowMapper.listSumAmount(flow); + final Map actReleaseMap = new HashMap<>(); + actReleaseList.forEach(actRelease -> actReleaseMap.put(actRelease.getActivityId(),actRelease.getTotalAmt())); + for (Long activityId : collectMap.keySet()) { //用于保存的对象列表 List bacgList = new ArrayList<>(); @@ -90,20 +105,20 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl actReleaseMap) { BirActivityCenterGoods entity = new BirActivityCenterGoods(); entity.setActivityCenterGoodsId(activityCenterGoods.getId()); entity.setKeyNum(currDateSplit.getYearMonth()); @@ -138,12 +154,14 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl dateSplitList , DateSplitDTO currDateSplit, - Integer currentActDays){ + Integer currentActDays, + Map actReleaseMap){ + //释放金额 + BigDecimal activityReleaseAmt = actReleaseMap.get(activityCenterGoods.getActivityId()); //活动相关 BigDecimal activityAmt = activityCenterGoods.getActivityAmt(); BigDecimal activityCheckAmt = activityCenterGoods.getActivityCheckAmt(); //当前CenterGoods项金额 BigDecimal centerGoodsAmount = activityCenterGoods.getCenterGoodsAmount(); + //当前CenterGoods项释放金额 + BigDecimal currentReleaseAmount = activityReleaseAmt==null?BigDecimal.ZERO: + activityReleaseAmt + .multiply(activityCenterGoods.getCenterGoodsRate()) + .multiply(activityCenterGoods.getCenterGoodsRate()) + .divide(new BigDecimal("10000"),BigDecimal.ROUND_DOWN); //当前CenterGoods分割项金额 BigDecimal currentSplitAmount = activityCenterGoods.getCenterGoodsAmount(); //当前CenterGoods项核销金额(粗略计算) @@ -288,7 +315,7 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl runCompensate(String targetId){ - testConnection(); - String templateCode = getTemplateCode(); - SyAffairStateResult stateResult =checkAffairState(targetId,templateCode); - SyAffairState affairState = stateResult.getState(); - if(affairState.equals(SyAffairState.next)){ - return R.ok(compensateNext(targetId)); - }else if(affairState.equals(SyAffairState.backed)){ - return R.ok(compensateBacked(targetId)); - }else if(affairState.equals(SyAffairState.finished)){ - return R.ok(compensateFinished(targetId)); - }else if(affairState.equals(SyAffairState.refuse)){ - return R.ok(compensateRefuse(targetId)); - }else if(affairState.equals(SyAffairState.error)){ - return R.error("数据异常请联系管理员"); - }else{ - return R.error("OA无相关审批数据"); - } - } - - /** - * 发送请求获取状态 - * @param targetId - * @param templateCode - * @return - */ - default SyAffairStateResult checkAffairState(String targetId, String templateCode){ - return getRequestService().checkAffairState(targetId,templateCode); - }; - -} diff --git a/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonOperationService.java b/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonOperationService.java index 1adcc19b..ff65f49a 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonOperationService.java +++ b/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonOperationService.java @@ -8,8 +8,10 @@ import com.qs.serve.common.util.SpringUtils; import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.seeyon.entity.CtpAffair; import com.qs.serve.modules.seeyon.entity.CtpAffairQo; +import com.qs.serve.modules.seeyon.entity.SyAffairStateResult; import com.qs.serve.modules.seeyon.entity.bo.CtpAddNodeDTO; import com.qs.serve.modules.seeyon.entity.bo.CtpAddNodeParam; +import com.qs.serve.modules.seeyon.enums.SyAffairState; import com.qs.serve.modules.sys.entity.SysPostUser; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysPostUserService; @@ -75,7 +77,9 @@ public interface SeeYonOperationService extends SeeYonBaseService{ * @param param * @return */ - Object doNext(TbsAffairCommitBo param); + default Object doNext(TbsAffairCommitBo param){ + return null; + } default SysUserService getSysUserService(){ return SpringUtils.getBean(SysUserService.class); @@ -278,4 +282,69 @@ public interface SeeYonOperationService extends SeeYonBaseService{ } + /** + * 补偿:审批中 + * @param targetId + * @return + */ + default Object compensateNext(String targetId){ + return null; + } + + /** + * 补偿:审批退回 + * @param targetId + * @return + */ + Object compensateBacked(String targetId); + + /** + * 补偿:审批完成 + * @param targetId + * @return + */ + Object compensateFinished(String targetId); + + /** + * 补偿:审批拒绝 + * @param targetId + * @return + */ + Object compensateRefuse(String targetId); + + /** + * 执行的主要方法 + * @param targetId + * @return + */ + default R runCompensate(String targetId){ + testConnection(); + String templateCode = getTemplateCode(); + SyAffairStateResult stateResult =checkAffairState(targetId,templateCode); + SyAffairState affairState = stateResult.getState(); + if(affairState.equals(SyAffairState.next)){ + return R.ok(compensateNext(targetId)); + }else if(affairState.equals(SyAffairState.backed)){ + return R.ok(compensateBacked(targetId)); + }else if(affairState.equals(SyAffairState.finished)){ + return R.ok(compensateFinished(targetId)); + }else if(affairState.equals(SyAffairState.refuse)){ + return R.ok(compensateRefuse(targetId)); + }else if(affairState.equals(SyAffairState.error)){ + return R.error("数据异常请联系管理员"); + }else{ + return R.error("OA无相关审批数据"); + } + } + + /** + * 发送请求获取状态 + * @param targetId + * @param templateCode + * @return + */ + default SyAffairStateResult checkAffairState(String targetId, String templateCode){ + return getRequestService().checkAffairState(targetId,templateCode); + }; + } 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 afc08253..17f7cdfa 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 @@ -34,7 +34,6 @@ import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; 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 com.qs.serve.modules.tbs.service.impl.TbsCostApplyCompensateServiceImpl; import com.qs.serve.modules.tbs.service.impl.TbsCostApplyOperationServiceImpl; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -74,7 +73,6 @@ public class TbsCostApplyController { private SeeYonRequestService seeYonService; private TbsBudgetApplicationService budgetApplicationService; private SysPostUserService postUserService; - private TbsCostApplyCompensateServiceImpl tbsCostApplyCompensateService; private TbsCostApplyOperationServiceImpl tbsCostApplyOperationServiceImpl; /** @@ -242,7 +240,7 @@ public class TbsCostApplyController { if(contract&&!supplier.getSupplierFlag().equals(1)){ return R.error("当前用户非供应商"); } - entity.setCode(IdUtil.dateTimeStampId()); + entity.setCode(CodeGenUtil.generate(CodeGenUtil.SourceKey.CostApply)); entity.setSupplierCode(supplier.getCode()); entity.setSupplierName(supplier.getName()); SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); @@ -273,7 +271,7 @@ public class TbsCostApplyController { TbsCostApply entity = CopierUtil.copy(costApplyBo,new TbsCostApply()); BmsSupplier supplier = bmsSupplierService.getById(entity.getSupplierId()); //entity.setId(IdUtil.getSnowFlakeId()); - entity.setCode("CA"+IdUtil.timeStampId()); + entity.setCode(CodeGenUtil.generate(CodeGenUtil.SourceKey.CostApply)); entity.setTemplateId(param.getTemplateId()); entity.setTemplateTitle(param.getTemplateTitle()); activityBo.setTemplateId(param.getTemplateId()); @@ -367,18 +365,6 @@ public class TbsCostApplyController { return tbsCostApplyOperationServiceImpl.commitAffair(affairCommit); } - /** - * 补偿接口 - * @param param - * @return - */ - @PostMapping("/compensate") - @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.DELETE) - public R compensateOAResult(@RequestBody CompensateDTO param){ - tbsCostApplyCompensateService.runCompensate(param.getId()); - return R.ok(); - } - /** * 补偿按钮 * @param id @@ -387,7 +373,7 @@ public class TbsCostApplyController { @PostMapping("/compensate/{id}") @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.UPDATE) public R compensate(@PathVariable("id") String id){ - return tbsCostApplyCompensateService.runCompensate(id); + return tbsCostApplyOperationServiceImpl.runCompensate(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 6bd37be9..c906b2a4 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 @@ -124,8 +124,20 @@ public class TbsActivityServiceImpl extends ServiceImpl activityList = listByCostApplyId(costApply.getId()); + int max = 0; + for (TbsActivity tbsActivity : activityList) { + try { + String tml = tbsActivity.getActivityCode().split("_")[1]; + Integer i = Integer.parseInt(tml); + if(i>max){ + max = i; + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + activity.setActivityCode(costApply.getCode()+"_"+(max+1)); } if(activityBo.getTemplateBudgetIds()!=null && activityBo.getTemplateBudgetIds().size()>0){ String budgetIds = activityBo.getTemplateBudgetIds().stream() diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyCompensateServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyCompensateServiceImpl.java deleted file mode 100644 index e8bbfb57..00000000 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyCompensateServiceImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.qs.serve.modules.tbs.service.impl; - -import com.qs.serve.common.model.dto.R; -import com.qs.serve.common.util.Assert; -import com.qs.serve.modules.seeyon.enums.SyAffairState; -import com.qs.serve.modules.seeyon.service.SeeYonCompensateService; -import com.qs.serve.modules.seeyon.service.SeeYonRequestService; -import com.qs.serve.modules.sys.mapper.SysUserMapper; -import com.qs.serve.modules.tbs.common.TbsCostApplyState; -import com.qs.serve.modules.tbs.common.TbsSeeYonConst; -import com.qs.serve.modules.tbs.entity.TbsCostApply; -import com.qs.serve.modules.tbs.mapper.TbsCostApplyMapper; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 费用申请补偿实现类 - * @author YenHex - * @since 2023/5/23 - */ -@Slf4j -@Service -@AllArgsConstructor -public class TbsCostApplyCompensateServiceImpl implements SeeYonCompensateService { - - private final SeeYonRequestService requestService; - private final TbsCostApplyMapper costApplyMapper; - private final SysUserMapper userMapper; - - @Override - public SysUserMapper getUserMapper() { - return userMapper; - } - - @Override - public String getTemplateCode() { - return TbsSeeYonConst.CostApplyConf.Code(); - } - - @Override - public SeeYonRequestService getRequestService() { - return requestService; - } - - @Override - public Object compensateNext(String targetId) { - TbsCostApply costApply = costApplyMapper.selectById(targetId); - if (costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())) { - - } - return null; - } - - @Override - public Object compensateBacked(String targetId) { - TbsCostApply costApply = costApplyMapper.selectById(targetId); - if (costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())) { - - } - return null; - } - - @Override - public Object compensateFinished(String targetId) { - TbsCostApply costApply = costApplyMapper.selectById(targetId); - if (costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())) { - - } - return null; - } - - @Override - public Object compensateRefuse(String targetId) { - TbsCostApply costApply = costApplyMapper.selectById(targetId); - if (costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())) { - - } - return null; - } - -} diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java index 997679bf..c5e8502f 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java @@ -204,4 +204,36 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService return costApply.getSyFormId(); } + @Override + public Object compensateBacked(String targetId) { + TbsCostApply costApply = costApplyService.getById(targetId); + if(costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())){ + TbsAffairCommitBo bo = new TbsAffairCommitBo(); + bo.setCostApplyId(costApply.getId()); + this.doBacked(bo); + } + return null; + } + + @Override + public Object compensateFinished(String targetId) { + TbsCostApply costApply = costApplyService.getById(targetId); + if(costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())){ + TbsAffairCommitBo bo = new TbsAffairCommitBo(); + bo.setCostApplyId(costApply.getId()); + this.doFinished(bo); + } + return null; + } + + @Override + public Object compensateRefuse(String targetId) { + TbsCostApply costApply = costApplyService.getById(targetId); + if(costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())){ + TbsAffairCommitBo bo = new TbsAffairCommitBo(); + bo.setCostApplyId(costApply.getId()); + this.doRefuse(bo); + } + return null; + } } 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 34d1b3d2..a24edf4e 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 @@ -174,7 +174,6 @@ public class TbsCostApplyServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); lqw.eq(TbsActivityPayCondition::getCostApplyId,id); @@ -229,7 +228,11 @@ public class TbsCostApplyServiceImpl extends ServiceImpl subjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).distinct().collect(Collectors.toList()); List subList = new ArrayList<>(); //创建子表数据 - this.buildSubList(result, tbsActivityCenters, subjectNames, subList); + try { + this.buildSubList(result, tbsActivityCenters, subjectNames, subList); + } catch (Exception e) { + e.printStackTrace(); + } //创建商品抬头列表 List tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id)); Set bands = new HashSet<>(); @@ -520,33 +527,36 @@ public class TbsCostApplyServiceImpl extends ServiceImpl erpDispatchSumVoList = supplierCodeMapWithCenterType.get(centerKey); - //年费率 + //所有相关费率记录 List centerGoods = birGroupByCenter.get(centerKey); - TbsCenterGoodBirDTO bir4Year = this.getTbsCenterGoodBirDTO(centerGoods,erpDispatchSumVoList); - costCenter.setYtdRealSales(bir4Year.getRealSales()); - costCenter.setYtdRealCost(bir4Year.getRealCost()); - costCenter.setYtdRealExpenseRate(bir4Year.getRealExpenseRate()); - - //季度 - List yearMonthList =QuarterUtil.getQuarterNumbers(year, month); - List centerGoodsQuarter = centerGoods.stream() - .filter(a-> yearMonthList.contains(a.getKeyNum())) - .collect(Collectors.toList()); - TbsCenterGoodBirDTO bir4Quarter = this.getTbsCenterGoodBirDTO(centerGoodsQuarter,erpDispatchSumVoList); - costCenter.setQtdRealSales(bir4Quarter.getRealSales()); - costCenter.setQtdRealCost(bir4Quarter.getRealCost()); - costCenter.setQtdRealExpenseRate(bir4Quarter.getRealExpenseRate()); - - //月份 - String mStr = month >9? month +"":"0"+ month; - Integer currYearMonth = Integer.parseInt(year +mStr); - List centerGoodsM = centerGoods.stream() - .filter(a-> currYearMonth.equals(a.getKeyNum())) - .collect(Collectors.toList()); - TbsCenterGoodBirDTO bir4Month = this.getTbsCenterGoodBirDTO(centerGoodsM,erpDispatchSumVoList); - costCenter.setMtdRealSales(bir4Month.getRealSales()); - costCenter.setMtdRealCost(bir4Month.getRealCost()); - costCenter.setMtdRealExpenseRate(bir4Month.getRealExpenseRate()); + if(CollectionUtil.isNotEmpty(centerGoods)){ + //年费率 + TbsCenterGoodBirDTO bir4Year = this.getTbsCenterGoodBirDTO(centerGoods,erpDispatchSumVoList); + costCenter.setYtdRealSales(bir4Year.getRealSales()); + costCenter.setYtdRealCost(bir4Year.getRealCost()); + costCenter.setYtdRealExpenseRate(bir4Year.getRealExpenseRate()); + + //季度 + List yearMonthList =QuarterUtil.getQuarterNumbers(year, month); + List centerGoodsQuarter = centerGoods.stream() + .filter(a-> yearMonthList.contains(a.getKeyNum())) + .collect(Collectors.toList()); + TbsCenterGoodBirDTO bir4Quarter = this.getTbsCenterGoodBirDTO(centerGoodsQuarter,erpDispatchSumVoList); + costCenter.setQtdRealSales(bir4Quarter.getRealSales()); + costCenter.setQtdRealCost(bir4Quarter.getRealCost()); + costCenter.setQtdRealExpenseRate(bir4Quarter.getRealExpenseRate()); + + //月份 + String mStr = month >9? month +"":"0"+ month; + Integer currYearMonth = Integer.parseInt(year +mStr); + List centerGoodsM = centerGoods.stream() + .filter(a-> currYearMonth.equals(a.getKeyNum())) + .collect(Collectors.toList()); + TbsCenterGoodBirDTO bir4Month = this.getTbsCenterGoodBirDTO(centerGoodsM,erpDispatchSumVoList); + costCenter.setMtdRealSales(bir4Month.getRealSales()); + costCenter.setMtdRealCost(bir4Month.getRealCost()); + costCenter.setMtdRealExpenseRate(bir4Month.getRealExpenseRate()); + } return costCenter; } diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemServiceImpl.java index 93d547e9..491aebf3 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemServiceImpl.java @@ -86,7 +86,19 @@ public class TzcPolicyItemServiceImpl extends ServiceImpl policyItemList = this.listByPolicyId(tzcPolicy.getId()); - tzcPolicyItem.setPolicyItemCode(tzcPolicy.getPolicyCode()+"_"+(policyItemList.size()+1)); + int max = 0; + for (TzcPolicyItem policyItem : policyItemList) { + try { + String tml = policyItem.getPolicyItemCode().split("_")[1]; + Integer i = Integer.parseInt(tml); + if(i>max){ + max = i; + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + tzcPolicyItem.setPolicyItemCode(tzcPolicy.getPolicyCode()+"_"+(max+1)); } BmsSubject bmsSubject = bmsSubjectService.getByCode("FYMC05"); TbsCenterDto centerDto = tbsCenterDtoService.getCenterDto(param.getCenterType(),param.getCenterId()); diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java index c1236e5b..bbb20aec 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java @@ -9,7 +9,6 @@ import com.qs.serve.modules.seeyon.service.SeeYonOperationService; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.entity.TbsBudgetLog; -import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; import com.qs.serve.modules.tbs.service.TbsBudgetLogService; @@ -151,4 +150,24 @@ public class TzcPolicyOperationServiceImpl implements SeeYonOperationService { return TbsSeeYonConst.PolicyConf.Code(); } + + @Override + public Object compensateNext(String targetId) { + return null; + } + + @Override + public Object compensateBacked(String targetId) { + return null; + } + + @Override + public Object compensateFinished(String targetId) { + return null; + } + + @Override + public Object compensateRefuse(String targetId) { + return null; + } } diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyServiceImpl.java index e2f4ab5c..7e1cb4e3 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyServiceImpl.java @@ -3,10 +3,7 @@ package com.qs.serve.modules.tzc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.model.dto.R; -import com.qs.serve.common.util.AuthContextUtils; -import com.qs.serve.common.util.CopierUtil; -import com.qs.serve.common.util.IdUtil; -import com.qs.serve.common.util.StringUtils; +import com.qs.serve.common.util.*; import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.service.BmsSubjectService; @@ -57,7 +54,7 @@ public class TzcPolicyServiceImpl extends ServiceImpl }else { tzcPolicy = new TzcPolicy(); //tzcPolicy.setId(IdUtil.getSnowFlakeId()); - tzcPolicy.setPolicyCode(StringUtils.genShortId()+""); + tzcPolicy.setPolicyCode(CodeGenUtil.generate(CodeGenUtil.SourceKey.Policy)); SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); tzcPolicy.setUserId(sysUser.getId()); tzcPolicy.setUserCode(sysUser.getCode()); diff --git a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java index ac495240..a70bbbd2 100644 --- a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java +++ b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java @@ -310,7 +310,15 @@ public class VtbVerificationController { return vtbVerificationOperationService.getUnfinished(); } - + /** + * 补偿按钮 + * @param id + * @return + */ + @PostMapping("/compensate/{id}") + public R compensate(@PathVariable("id") String id){ + return vtbVerificationOperationService.runCompensate(id); + } } diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbFundFlow.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbFundFlow.java index 90db6524..11907d5b 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbFundFlow.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbFundFlow.java @@ -15,7 +15,7 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; - +import java.util.List; /** * 核销流水 实体类 * @author YenHex @@ -153,5 +153,9 @@ public class VtbFundFlow implements Serializable { /** 客户名称 */ private String supplierName; + + @TableField(exist = false) + private List selectActivityIds; + } diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/dto/VtbFundFlowSumAmtDTO.java b/src/main/java/com/qs/serve/modules/vtb/entity/dto/VtbFundFlowSumAmtDTO.java new file mode 100644 index 00000000..392e3e6a --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/entity/dto/VtbFundFlowSumAmtDTO.java @@ -0,0 +1,18 @@ +package com.qs.serve.modules.vtb.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/7/13 + */ +@Data +public class VtbFundFlowSumAmtDTO { + + private BigDecimal totalAmt; + + private Long activityId; + +} diff --git a/src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java b/src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java index 3bfab78f..b95210d9 100644 --- a/src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java +++ b/src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java @@ -2,7 +2,10 @@ package com.qs.serve.modules.vtb.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.modules.vtb.entity.VtbFundFlow; +import com.qs.serve.modules.vtb.entity.dto.VtbFundFlowSumAmtDTO; +import org.apache.ibatis.annotations.Param; +import java.util.List; /** * 核销流水 Mapper * @author YenHex @@ -10,5 +13,12 @@ import com.qs.serve.modules.vtb.entity.VtbFundFlow; */ public interface VtbFundFlowMapper extends BaseMapper { + /** + * 统计金额 + * @param flow + * @return + */ + List listSumAmount(@Param("query") VtbFundFlow flow); + } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationOperationServiceImpl.java index b926fd5c..4aa013ca 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationOperationServiceImpl.java @@ -1,14 +1,34 @@ package com.qs.serve.modules.vtb.service.impl; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.common.util.SpringUtils; +import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.seeyon.service.SeeYonOperationService; +import com.qs.serve.modules.tbs.common.TbsActivityState; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsActivityPayCondition; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; +import com.qs.serve.modules.tbs.service.TbsActivityPayConditionService; +import com.qs.serve.modules.tbs.service.TbsActivityService; +import com.qs.serve.modules.vtb.common.VtbVerificationState; import com.qs.serve.modules.vtb.entity.VtbVerification; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; +import com.qs.serve.modules.vtb.entity.VtbVerificationYard; import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper; +import com.qs.serve.modules.vtb.service.VtbVerificationService; +import com.qs.serve.modules.vtb.service.VtbVerificationSubjectService; +import com.qs.serve.modules.vtb.service.VtbVerificationYardService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + /** * @author YenHex * @since 2023/5/26 @@ -19,6 +39,8 @@ import org.springframework.stereotype.Service; public class VtbVerificationOperationServiceImpl implements SeeYonOperationService { private VtbVerificationMapper vtbVerificationMapper; + private TbsActivityPayConditionService activityPayConditionService; + private TbsActivityService tbsActivityService; @Override public String getTemplateCode() { @@ -32,12 +54,12 @@ public class VtbVerificationOperationServiceImpl implements SeeYonOperationServi @Override public String getSyFormIdByTargetInfo(TbsAffairCommitBo affairCommit) { - VtbVerification verification = vtbVerificationMapper.selectById(affairCommit.getCostApplyId()); + Assert.throwEx("方法未定义"); return null; } @Override - public Object doBacked(TbsAffairCommitBo param) { + public Object doBacked(TbsAffairCommitBo affairCommit) { return null; } @@ -47,12 +69,92 @@ public class VtbVerificationOperationServiceImpl implements SeeYonOperationServi } @Override - public Object doRefuse(TbsAffairCommitBo param) { + public Object doRefuse(TbsAffairCommitBo affairCommit) { + return null; + } + + @Override + public Object compensateBacked(String targetId) { + VtbVerification verification = vtbVerificationMapper.selectById(targetId); + if(verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ + //设置回退 + VtbVerification vtbVer = new VtbVerification(); + vtbVer.setId(verification.getId()); + vtbVer.setVerificationState(VtbVerificationState.Rollback.getCode()); + vtbVer.setSyFormId(""); + vtbVer.setSyFlowId(""); + vtbVerificationMapper.updateById(vtbVer); + //还原支付条件 + if(verification.getPayConditionId()!=null){ + TbsActivityPayCondition payCondition = activityPayConditionService.getById(verification.getPayConditionId()); + payCondition.setFinishedFlag(0); + activityPayConditionService.updateById(payCondition); + } + //还原活动为待核销状态 + TbsActivity activity = new TbsActivity(); + activity.setId(verification.getActivityId()); + activity.setActivityState(TbsActivityState.STATE_0_Todo); + tbsActivityService.updateById(activity); + } + return null; + } + + @Override + public Object compensateFinished(String targetId) { + VtbVerification verification = vtbVerificationMapper.selectById(targetId); + if(verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ + if(verification.getPayConditionId()!=null){ + //支付条件完成 + TbsActivityPayCondition payCondition = activityPayConditionService.getById(verification.getPayConditionId()); + payCondition.setFinishedFlag(1); + activityPayConditionService.updateById(payCondition); + }else { + //刷新活动金额 + TbsActivity activity = tbsActivityService.getById(verification.getActivityId()); + BigDecimal totalUsed = activity.getUsedAmount().add(verification.getAmount()); + TbsActivity activity4Upd = new TbsActivity(); + activity4Upd.setId(activity.getId()); + activity4Upd.setUsedAmount(totalUsed); + if(totalUsed.compareTo(activity.getTotalAmount())>=0){ + activity4Upd.setActivityState(TbsActivityState.STATE_1_Finished); + }else { + activity4Upd.setActivityState(TbsActivityState.STATE_0_Todo); + } + tbsActivityService.updateById(activity4Upd); + } + //更新金额,已完成 + VtbVerification vtbVer = new VtbVerification(); + vtbVer.setId(verification.getId()); + vtbVer.setVerificationState(VtbVerificationState.Finished.getCode()); + vtbVer.setFinishedTime(LocalDateTime.now()); + vtbVerificationMapper.updateById(vtbVer); + VtbVerificationService vtbVerificationService = SpringUtils.getBean(VtbVerificationService.class); + vtbVerificationService.successCommit(verification.getId()); + } return null; } @Override - public Object doNext(TbsAffairCommitBo param) { + public Object compensateRefuse(String targetId) { + VtbVerification verification = vtbVerificationMapper.selectById(targetId); + if(verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ + //设置拒绝 + VtbVerification vtbVer = new VtbVerification(); + vtbVer.setId(verification.getId()); + vtbVer.setVerificationState(VtbVerificationState.Stop.getCode()); + vtbVerificationMapper.updateById(vtbVer); + //还原支付条件 + if(verification.getPayConditionId()!=null){ + TbsActivityPayCondition payCondition = activityPayConditionService.getById(verification.getPayConditionId()); + payCondition.setFinishedFlag(0); + activityPayConditionService.updateById(payCondition); + } + //还原活动为待核销状态 + TbsActivity activity = new TbsActivity(); + activity.setId(verification.getActivityId()); + activity.setActivityState(TbsActivityState.STATE_0_Todo); + tbsActivityService.updateById(activity); + } return null; } } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java index b4a083ab..d0d51ccf 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java @@ -273,7 +273,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vtb_fund_flow.`id`, + vtb_fund_flow.`fund_type`, + vtb_fund_flow.`verification_id`, + vtb_fund_flow.`center_goods_code`, + vtb_fund_flow.`cost_apply_id`, + vtb_fund_flow.`activity_id`, + vtb_fund_flow.`subject_id`, + vtb_fund_flow.`subject_code`, + vtb_fund_flow.`subject_name`, + vtb_fund_flow.`center_type`, + vtb_fund_flow.`center_id`, + vtb_fund_flow.`center_code`, + vtb_fund_flow.`center_name`, + vtb_fund_flow.`used_amount`, + vtb_fund_flow.`target_type`, + vtb_fund_flow.`target_id`, + vtb_fund_flow.`target_code`, + vtb_fund_flow.`target_name`, + vtb_fund_flow.`target_level_path_ids`, + vtb_fund_flow.`target_level_path_names`, + vtb_fund_flow.`remark`, + vtb_fund_flow.`create_time`, + vtb_fund_flow.`update_time`, + vtb_fund_flow.`tenant_id`, + vtb_fund_flow.`create_by`, + vtb_fund_flow.`update_by`, + vtb_fund_flow.`del_flag`, + vtb_fund_flow.`center_good_item_id`, + vtb_fund_flow.`supplier_id`, + vtb_fund_flow.`supplier_code`, + vtb_fund_flow.`supplier_name` + + + + + +