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 1e1a7f75..b9eb5302 100644 --- a/src/main/java/com/qs/serve/common/util/CodeGenUtil.java +++ b/src/main/java/com/qs/serve/common/util/CodeGenUtil.java @@ -33,7 +33,8 @@ public class CodeGenUtil { public enum SourceDataKey{ SaleRegion("S","SaleRegion"), Budget("","Budget"), - BizRegion("B","BizRegion"); + BizRegion("B","BizRegion"), + ActivityPayCondition("K","ActivityPayCondition"); private String prefix; private String code; } diff --git a/src/main/java/com/qs/serve/modules/tbs/common/TbsCostApplyState.java b/src/main/java/com/qs/serve/modules/tbs/common/TbsCostApplyState.java index 4daeaf93..60e39675 100644 --- a/src/main/java/com/qs/serve/modules/tbs/common/TbsCostApplyState.java +++ b/src/main/java/com/qs/serve/modules/tbs/common/TbsCostApplyState.java @@ -15,14 +15,16 @@ import java.util.List; @AllArgsConstructor public enum TbsCostApplyState { - //状态:0=未发布;1=审批中;2=待执行;3=完成;4-被驳回;5-中止;6-作废 + //状态:0=未发布;1=审批中;2=待执行;3=完成;4-被驳回;5-中止;6-作废;7-异动 State_0_unPublish(0), State_1_apply(1), State_2_actioning(2), State_3_finished(3), State_4_refused(4), State_5_stop(5), - State_6_remove(6); + State_6_remove(6), + State_7_changed(6) + ; private Integer code; diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityPayConditionController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityPayConditionController.java index be5f73ae..ea2848de 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityPayConditionController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityPayConditionController.java @@ -6,10 +6,7 @@ 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.PageUtil; -import com.qs.serve.common.util.CopierUtil; -import com.qs.serve.common.util.StringUtils; +import com.qs.serve.common.util.*; import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.entity.TbsActivity; import com.qs.serve.modules.tbs.entity.TbsCostApply; @@ -127,6 +124,7 @@ public class TbsActivityPayConditionController { Long actId = activityList.get(0).getId(); entity.setActivityId(actId); entity.setPreNotifyStatus(param.getPreNotifyTime()==null?0:1); + entity.setCode(CodeGenUtil.getDataCode(CodeGenUtil.SourceDataKey.ActivityPayCondition)); boolean result = tbsActivityPayConditionService.save(entity); 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 6c20512a..776469c9 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 @@ -25,10 +25,7 @@ import com.qs.serve.modules.tbs.common.TbsSeeYonConst; import com.qs.serve.modules.tbs.common.dto.CompensateDTO; import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.entity.*; -import com.qs.serve.modules.tbs.entity.bo.TbsActivityBo; -import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; -import com.qs.serve.modules.tbs.entity.bo.TbsCostApplyActivityBo; -import com.qs.serve.modules.tbs.entity.bo.TbsCostApplyBo; +import com.qs.serve.modules.tbs.entity.bo.*; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; @@ -57,6 +54,7 @@ import java.util.stream.Collectors; @RequestMapping("tbs/costApply") public class TbsCostApplyController { + private TbsCostApplyPart1Service costApplyPart1Service; private TbsCostContractService costContractService; private TbsCostApplyService tbsCostApplyService; private TbsActivityService tbsActivityService; @@ -262,6 +260,18 @@ public class TbsCostApplyController { return R.ok(entity); } + /** + * 异动申请 + * @param id + * @return + */ + @PostMapping("/settingWithChange/{id}") + @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.INSERT) + @Transactional(rollbackFor = Exception.class) + public R save(@PathVariable("id") Long id){ + return R.ok(costApplyPart1Service.toSetChanged(id)); + } + /** * 根据模板,新增费用及活动 * @param param diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityPayCondition.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityPayCondition.java index 73da3ced..5e5dca7b 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityPayCondition.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityPayCondition.java @@ -31,6 +31,8 @@ public class TbsActivityPayCondition implements Serializable { @TableId(type = IdType.AUTO) private Long id; + private String code; + /** 标题 */ @TableField(condition = SqlCondition.LIKE) private String title; 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 33ab08b7..41179e4c 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 @@ -55,7 +55,7 @@ public class TbsCostApply implements Serializable { @TableField(condition = SqlCondition.LIKE) private String supplierName; - /** 状态:0=未发布;1=审批中;2=待执行;3=完成;4-被驳回 */ + /** 状态:0=未发布;1=审批中;2=待执行;3=完成;4-被驳回;5-中止;6-作废;7-异动 @{link TbsCostApplyState} */ @NotNull(message = "状态不能为空") private Integer chargeState; @@ -150,6 +150,11 @@ public class TbsCostApply implements Serializable { private Integer costThemeEditFlag; + private Integer cancelFlag; + + private Long changeSourceId; + + @TableField(exist = false) private String affairId; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyChangeBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyChangeBo.java new file mode 100644 index 00000000..f750cdb0 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyChangeBo.java @@ -0,0 +1,19 @@ +package com.qs.serve.modules.tbs.entity.bo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author YenHex + * @since 2022/12/19 + */ +@Data +public class TbsCostApplyChangeBo { + + @NotNull + TbsCostApplyBo costApplyBo; + + + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java index 34cf01ed..4efe8298 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java @@ -22,11 +22,11 @@ public class TbsContractCostSubItem { private String writeOffDate; private String productType; private String product; - private String accountCode; - private String accountName; - private String costCenterNo; - private String costCenterName; - private BigDecimal applyMoney; + private String activityAccountCode; + private String activityAccountName; + private String activityCostCenterNo; + private String activityCostCenterName; + private BigDecimal money; } @@ -34,11 +34,17 @@ public class TbsContractCostSubItem { public static class Payment{ private String payItem; private String payCondition; - private BigDecimal money; + private BigDecimal applyMoney; private String payDate; private String actualPayDate; - private Integer payCompleteState; + private String payCompleteState; private String payRemark; + private String payCode;// 唯一 + private String accountCode;// 拼科目编号 + private String accountName;// 拼科目名称 + private String costCenterNo;// 拼成本中心编号 + private String costCenterName;// 拼成本中心名称 + } @Data @@ -47,6 +53,7 @@ public class TbsContractCostSubItem { private String deliveryStandard; private String deliveryDate; private String agreeRemark; + private String agreeCompleteState; } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyPart1Service.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyPart1Service.java new file mode 100644 index 00000000..7a32ed00 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyPart1Service.java @@ -0,0 +1,19 @@ +package com.qs.serve.modules.tbs.service; + +import com.qs.serve.common.model.dto.R; +import com.qs.serve.modules.tbs.entity.TbsCostApply; + +/** + * @author YenHex + * @since 2023/7/27 + */ +public interface TbsCostApplyPart1Service { + + /** + * 执行异动 + * @param costId + * @return 返回新的活动申请ID + */ + TbsCostApply toSetChanged(Long costId); + +} 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 044d85ce..eb7fc524 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 @@ -16,6 +16,7 @@ import java.util.List; */ public interface TbsCostApplyService extends IService { + /** * 作废 * @param id diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java new file mode 100644 index 00000000..1e722b9e --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java @@ -0,0 +1,189 @@ +package com.qs.serve.modules.tbs.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qs.serve.common.config.properties.ProjectProperties; +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.CopierUtil; +import com.qs.serve.modules.bir.service.BirCenterRateService; +import com.qs.serve.modules.bir.service.BirRoiRateService; +import com.qs.serve.modules.bms.mapper.BmsRegion2Mapper; +import com.qs.serve.modules.bms.mapper.BmsRegionMapper; +import com.qs.serve.modules.bms.service.BmsSubjectService; +import com.qs.serve.modules.bms.service.BmsSupplierService; +import com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper; +import com.qs.serve.modules.seeyon.service.SeeYonRequestService; +import com.qs.serve.modules.sys.service.SysAttachService; +import com.qs.serve.modules.sys.service.SysUserService; +import com.qs.serve.modules.tbs.common.TbsCostApplyState; +import com.qs.serve.modules.tbs.entity.*; +import com.qs.serve.modules.tbs.mapper.*; +import com.qs.serve.modules.tbs.service.*; +import com.qs.serve.modules.vtb.common.VtbVerificationState; +import com.qs.serve.modules.vtb.entity.VtbVerification; +import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/7/27 + */ +@Slf4j +@Service +@AllArgsConstructor +public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service { + + private TbsCostApplyService tbsCostApplyService; + + private TbsActivityCenterService tbsActivityCenterService; + private TbsActivitySubjectService tbsActivitySubjectService; + private TbsActivityGoodsService tbsActivityGoodsService; + private TbsActivitySlottingFeeService tbsActivitySlottingFeeService; + private TbsActivityPayConditionService activitySlottingConditionService; + private TbsActivityMapper tbsActivityMapper; + private TbsActivityCenterGoodsService tbsActivityCenterGoodsService; + private TbsActivityChannelService tbsActivityChannelService; + private TbsActivityChannelPointService tbsActivityChannelPointService; + private TbsCostContractMapper costContractMapper; + private VtbVerificationMapper verificationMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public TbsCostApply toSetChanged(Long costId) { + String userId = AuthContextUtils.getSysUserId(); + TbsCostApply orgCost = tbsCostApplyService.getById(costId); + if(!userId.equals(orgCost.getUserId())){ + Assert.throwEx("拒绝访问"); + } + if(!orgCost.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){ + Assert.throwEx("费用申请的状态不支持"); + } + //判断是否有核销记录 + LambdaQueryWrapper vtbLqwCount = new LambdaQueryWrapper<>(); + vtbLqwCount.eq(VtbVerification::getCostApplyId,costId); + vtbLqwCount.and(qw->{ + qw.eq(VtbVerification::getVerificationState, VtbVerificationState.Commiting.getCode()) + .or().eq(VtbVerification::getVerificationState,VtbVerificationState.Finished.getCode()); + }); + Long count = verificationMapper.selectCount(vtbLqwCount); + if(count>0){ + Assert.throwEx("含有核销记录不支持异动"); + } + //复制新记录 + TbsCostApply costApply = CopierUtil.copy(orgCost,new TbsCostApply()); + costApply.setId(null); + costApply.setChargeState(TbsCostApplyState.State_0_unPublish.getCode()); + tbsCostApplyService.save(costApply); + final Long newCostApplyId = costApply.getId(); + //费用相关复制 + QueryWrapper qw_cost_apply = new QueryWrapper(); + qw_cost_apply.eq("cost_apply_id",costId); + List contracts = costContractMapper.selectList(qw_cost_apply); + contracts.forEach(con->{ + con.setId(null); + con.setCostApplyId(newCostApplyId); + }); + //活动相关复制 + List activityList = tbsActivityMapper.selectList(qw_cost_apply); + this.copyAboutActivityData(newCostApplyId, activityList); + + //更变旧记录 + orgCost.setChargeState(TbsCostApplyState.State_7_changed.getCode()); + orgCost.setCancelFlag(1); + tbsCostApplyService.updateById(orgCost); + return costApply; + } + + /** + * 活动相关复制 + * @param newCostApplyId + * @param activityList + */ + private void copyAboutActivityData(Long newCostApplyId, List activityList) { + for (TbsActivity orgActivity : activityList) { + //原ActivityID + Long orgActivityId = orgActivity.getId(); + //重新保存 + orgActivity.setId(null); + tbsActivityMapper.insert(orgActivity); + final Long newActivityId = orgActivity.getId(); + + QueryWrapper qw_activity = new QueryWrapper(); + qw_activity.eq("activity_id",orgActivityId); + + List goodsList = tbsActivityGoodsService.list(qw_activity); + goodsList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + tbsActivityGoodsService.saveBatch(goodsList); + + List centerList = tbsActivityCenterService.list(qw_activity); + centerList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + tbsActivityCenterService.saveBatch(centerList); + + List subjectList = tbsActivitySubjectService.list(qw_activity); + subjectList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + tbsActivitySubjectService.saveBatch(subjectList); + + List centerGoodsList = tbsActivityCenterGoodsService.list(qw_activity); + centerGoodsList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + tbsActivityCenterGoodsService.saveBatch(centerGoodsList); + + List channelList = tbsActivityChannelService.list(qw_activity); + channelList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + tbsActivityChannelService.saveBatch(channelList); + + List channelPointList = tbsActivityChannelPointService.list(qw_activity); + channelPointList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + tbsActivityChannelPointService.saveBatch(channelPointList); + + + List payConditionList = activitySlottingConditionService.list(qw_activity); + payConditionList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + activitySlottingConditionService.saveBatch(payConditionList); + + List slottingFeeList = tbsActivitySlottingFeeService.list(qw_activity); + slottingFeeList.forEach(obj->{ + obj.setId(null); + obj.setCostApplyId(newCostApplyId); + obj.setActivityId(newActivityId); + }); + tbsActivitySlottingFeeService.saveBatch(slottingFeeList); + + } + } + +} 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 ff2dafe6..e6f9faf7 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,6 +1,7 @@ package com.qs.serve.modules.tbs.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.config.properties.ProjectProperties; @@ -93,6 +94,8 @@ public class TbsCostApplyServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); @@ -350,14 +354,20 @@ public class TbsCostApplyServiceImpl extends ServiceImpl tbsActivityCenters = tbsActivityCenterService.listByCostApplyId(Long.parseLong(id)); + String concatCenterCodes = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterCode).collect(Collectors.joining(",")); + String concatCenterNames = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterName).collect(Collectors.joining(",")); + List tbsActivitySubjects = tbsActivitySubjectService.listByCostApplyId(Long.parseLong(id)); + String concatSubjectCodes = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectCode).collect(Collectors.joining(",")); + String concatSubjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).collect(Collectors.joining(",")); // 付款条件 for (TbsActivityPayCondition payCondition : payConditions) { TbsActivity currActivity = null; @@ -370,11 +380,17 @@ public class TbsCostApplyServiceImpl extends ServiceImpl attachList; @@ -172,5 +173,6 @@ public class VtbVerification implements Serializable { @TableField(exist = false) private Object costApplyInfo; + } 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 892c8ef2..76e879f8 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 @@ -111,6 +111,9 @@ public class VtbVerificationServiceImpl extends ServiceImpl