Browse Source

协议类费用申请调整

contract
Yen 2 years ago
parent
commit
0d1713787e
  1. 6
      src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java
  2. 53
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java
  3. 108
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java
  4. 233
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

6
src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java

@ -24,6 +24,12 @@ public interface TbsSeeYonConst {
return DevEnvironmentConfig.isDev()?"CostBill_Test":"CostBill";
}
}
/** 费用申请2-协议类 */
class CostApplyContractConf{
public static String Code(){
return DevEnvironmentConfig.isDev()?"contractApply_Test":"contractApply";
}
}
/** 核销 */
class CostCheckConf{

53
src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java

@ -0,0 +1,53 @@
package com.qs.serve.modules.tbs.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* @author YenHex
* @since 2023/5/9
*/
public class TbsContractCostSubItem {
@Data
public static class Activity{
private String activityCode;
private String activityPurpose;
private String costCode;
private LocalDate startDate;
private LocalDate endDate;
private LocalDate writeOffDate;
private String productType;
private String product;
private String accountCode;
private String accountName;
private String costCenterNo;
private String costCenterName;
private BigDecimal costMoney;
}
@Data
public static class Payment{
private String payItem;
private String payCondition;
private BigDecimal money;
private LocalDate payDate;
private String actualPayDate;
private Integer payCompleteState;
private String payRemark;
}
@Data
public static class ToDoItem{
private String serviceDescription;
private String deliveryStandard;
private LocalDate deliveryDate;
private String agreeRemark;
}
}

108
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java

@ -5,9 +5,16 @@ import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.model.consts.BudgetLogRollbackFlag;
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.StringUtils;
import com.qs.serve.modules.seeyon.entity.CtpAffair;
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.seeyon.service.SeeYonOperationService;
import com.qs.serve.modules.seeyon.service.SeeYonRequestService;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.mapper.SysUserMapper;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.TbsActivityState;
@ -28,7 +35,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
/**
@ -68,6 +77,43 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService
return TbsSeeYonConst.CostApplyConf.Code();
}
@Override
public R<String> addNode(CtpAddNodeParam param) {
getRequestService().testConnection();
TbsCostApply tbsCostApply = costApplyService.getById(param.getTargetId());
CtpAddNodeDTO addNodeDTO = new CtpAddNodeDTO();
addNodeDTO.setBackToMe(param.getBackToMe());
addNodeDTO.setTargetId(param.getTargetId());
List<String> selectUserIds = new ArrayList<>();
SysUser loginUser = getUserMapper().selectById(AuthContextUtils.getSysUserId());
for (String userId : param.getUserIds()) {
SysUser user = getUserMapper().selectById(userId);
if(loginUser.getSyUserId().equals(user.getSyUserId())){
return R.error("不能选择相同的OA账号的员工");
}
if(StringUtils.hasText(user.getSyUserId())&&!user.getSyUserId().equals("0")){
selectUserIds.add(user.getSyUserId());
}
}
if(selectUserIds.size()==0){
Assert.throwEx("选中的用户未绑定OA凭证");
}
addNodeDTO.setUserIds(selectUserIds);
SysUser sysUser = getUserMapper().selectById(AuthContextUtils.getSysUserId());
addNodeDTO.setUserCode(sysUser.getAccount());
addNodeDTO.setUserSyId(sysUser.getSyUserId());
String templateCode = getTemplateCode();
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(1)){
addNodeDTO.setTemplateCode(TbsSeeYonConst.CostApplyContractConf.Code());
}
addNodeDTO.setTemplateCode(templateCode);
R<String> result = getRequestService().addNode(addNodeDTO);
if(result.getData()!=null&&result.getData().toLowerCase(Locale.ROOT).contains("ok")){
return R.ok();
}
return R.error(result.getMsg());
}
@Override
public SeeYonRequestService getRequestService() {
return requestService;
@ -187,7 +233,42 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService
@Override
public R<?> commitAffair(TbsAffairCommitBo affairCommit) {
return SeeYonOperationService.super.commitAffair(affairCommit);
getRequestService().testConnection();
TbsCostApply costApply = costApplyService.getById(affairCommit.getCostApplyId());
if(!costApply.getChargeState().equals(TbsCostApplyState.State_1_apply.getCode())){
Assert.throwEx("费用申请处于未非审批状态");
}
String syFormId = costApply.getSyFormId();
String templateCode = getTemplateCode();
//判断是否协议类
if(costApply.getContractFlag()!=null&&costApply.getContractFlag().equals(1)){
templateCode = TbsSeeYonConst.CostApplyContractConf.Code();
}
R<String> result = getRequestService().commonCommit(affairCommit, templateCode ,syFormId);
boolean isBackCommit = affairCommit.getState()==2;
if(result.getStatus()==200){
// 判断是否含有下个节点
String flag = result.getData();
//审批中(next)、完成(finish)、拒绝(refused)
if("finish".equals(flag)){
this.doFinished(affairCommit);
return R.ok();
}else if ("stop".equals(flag)){
if(isBackCommit){
this.doBacked(affairCommit);
return R.ok();
}else {
this.doRefuse(affairCommit);
return R.ok();
}
}else if ("next".equals(flag)){
this.doNext(affairCommit);
return R.ok();
}
}else if (result.getStatus()==500){
return result;
}
return R.ok();
}
@Override
@ -236,4 +317,29 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService
}
return null;
}
@Override
public R<?> runCompensate(String targetId) {
testConnection();
String templateCode = getTemplateCode();
TbsCostApply costApply = costApplyService.getById(targetId);
if(costApply.getContractFlag()!=null&&costApply.getContractFlag().equals(1)){
templateCode = TbsSeeYonConst.CostApplyContractConf.Code();
}
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无相关审批数据");
}
}
}

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

@ -40,6 +40,7 @@ import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodBirDTO;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.dto.TbsContractCostSubItem;
import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem;
import com.qs.serve.modules.tbs.mapper.*;
import com.qs.serve.modules.tbs.service.*;
@ -80,14 +81,17 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
private BmsRegionMapper regionMapper;
private BmsRegion2Mapper region2Mapper;
private BmsSubjectService subjectService;
private TbsCostTodoMapper tbsCostTodoMapper;
private TbsActivitySlottingFeeMapper activitySlottingFeeMapper;
private TbsActivityPayConditionMapper tbsActivityPayConditionMapper;
private TbsActivityMapper tbsActivityMapper;
private TbsActivityCenterGoodsMapper tbsActivityCenterGoodsMapper;
private ProjectProperties projectProperties;
private BirRoiRateService birRoiRateService;
private TbsCostPercentMapper tbsCostPercentMapper;
private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper;
private final ErpDispatchDataMapper dispatchDataMapper;
private TbsCostContractMapper costContractMapper;
@Override
@ -174,10 +178,11 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
}
}
List<TbsActivityPayCondition> payConditions = null;
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(1)){
LambdaQueryWrapper<TbsActivityPayCondition> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsActivityPayCondition::getCostApplyId,id);
List<TbsActivityPayCondition> payConditions = tbsActivityPayConditionMapper.selectList(lqw);
payConditions = tbsActivityPayConditionMapper.selectList(lqw);
if(payConditions.size()<1){
Assert.throwEx("请补充支付条件");
}
@ -212,71 +217,113 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
//恢复绑定
this.releaseCost(tbsCostApply.getId(),0);
Map<String, Object> data = new HashMap<>(10);
String actTitles = activityList.stream().map(TbsActivity::getActTitle).collect(Collectors.joining("; "));
data.put("costApplyCode",tbsCostApply.getCode());
data.put("applyUserCode",sysUser.getCode());
data.put("applyUserName",sysUser.getName());
data.put("supplierName",tbsCostApply.getSupplierName());
data.put("supplierCode",tbsCostApply.getSupplierCode());
data.put("title",tbsCostApply.getChargeTheme());
data.put("rowDate",DateUtils.format(LocalDateTime.now(), DateFormatString.DATE_TIME));
data.put("rowState","03");
data.put("orgId",tbsCostApply.getId()+"");
data.put("targetId",tbsCostApply.getId()+"");
data.put("targetCode",tbsCostApply.getCode());
data.put("exsp1",TbsSeeYonConst.CostApplyConf.Code());
data.put("money",tbsCostApply.getTotalActivityAmount());
//记录主表费率参数
try {
this.buildMainData4ROI(tbsCostApply, data);
} catch (Exception e) {
e.printStackTrace();
}
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(1)){
//创建协议类data数据
data.put("serialNumber",tbsCostApply.getCode());
data.put("applySubject",tbsCostApply.getChargeTheme());
data.put("supplierCode",tbsCostApply.getSupplierCode());
data.put("supplierName",tbsCostApply.getSupplierName());
data.put("totalSalesMoney",tbsCostApply.getTotalActivityAmount());
data.put("totalExpenseRate",tbsCostApply.getTotalActivityPreNotAmount());
data.put("remark",tbsCostApply.getRemark());
// data.put("payee","");
// data.put("bankName","");
// data.put("bankAccount","");
// data.put("sealID","");
// data.put("sealName","");
// data.put("sealNum","");
// data.put("fileNum","");
LambdaQueryWrapper<TbsCostContract> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsCostContract::getCostApplyId,tbsCostApply.getId());
List<TbsCostContract> contracts = costContractMapper.selectList(lqw);
if(contracts.size()>0){
TbsCostContract contract = contracts.get(0);
data.put("contractName",contract.getContractName());
data.put("applyMoney",contract.getContractAmount());
data.put("signDate",contract.getSignTime());
data.put("expireDate",contract.getExpireTime());
data.put("contractContent",contract.getContractCondition());
//data.put("contractFile","");
}
//拓展添加审批关联区域
String saleRegionId = supplier.handleSaleRegionId();
String bizRegionId = supplier.handleBizRegionId();
BmsRegion saleRegion = regionMapper.selectById(saleRegionId);
BmsRegion2 bizRegion = region2Mapper.selectById(bizRegionId);
String saleRegionNames = saleRegion!=null?saleRegion.getPathNames():"null_申请时未录入";
String bizRegionNames = bizRegion!=null?bizRegion.getPathNames():"null_申请时未录入";
//创建子表数据
List<Object> subList = new ArrayList<>();
//活动明细
LambdaQueryWrapper<TbsActivityCenterGoods> actCgLqw = new LambdaQueryWrapper<>();
actCgLqw.eq(TbsActivityCenterGoods::getCostApplyId,id);
List<TbsActivityCenterGoods> activityCenterGoodsList = tbsActivityCenterGoodsMapper.selectList(actCgLqw);
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
TbsActivity currActivity = null;
for (TbsActivity activity : activityList) {
if(centerGoods.getActivityId().equals(activity.getId())){
currActivity = activity;
break;
}
}
TbsContractCostSubItem.Activity dataActivity = new TbsContractCostSubItem.Activity();
dataActivity.setActivityCode(currActivity.getActivityCode());
dataActivity.setActivityPurpose(currActivity.getActTitle());
dataActivity.setCostCode(tbsCostApply.getCode());
dataActivity.setStartDate(currActivity.getActStartDate());
dataActivity.setEndDate(currActivity.getActEndDate());
dataActivity.setWriteOffDate(currActivity.getPreCheckDate());
dataActivity.setProductType(centerGoods.getTargetType());
dataActivity.setProduct(centerGoods.getTargetName());
dataActivity.setAccountCode(centerGoods.getSubjectCode());
dataActivity.setAccountName(centerGoods.getSubjectName());
dataActivity.setCostCenterNo(centerGoods.getCenterType());
dataActivity.setCostCenterName(centerGoods.getCenterName());
dataActivity.setCostMoney(centerGoods.getCenterGoodsAmount());
subList.add(dataActivity);
}
//拓展添加审批关联
data.put("biz_region",bizRegionNames);
data.put("exsp2",saleRegionNames);
data.put("data_state",TbsCostApplyState.State_1_apply.getCode()+"");
// 付款条件
for (TbsActivityPayCondition payCondition : payConditions) {
TbsActivity currActivity = null;
for (TbsActivity activity : activityList) {
if(payCondition.getActivityId().equals(activity.getId())){
currActivity = activity;
break;
}
}
TbsContractCostSubItem.Payment subPayment = new TbsContractCostSubItem.Payment();
subPayment.setPayItem(payCondition.getTitle());
subPayment.setPayCondition(payCondition.getConditionMsg());
subPayment.setMoney(currActivity.getTotalAmount());
subPayment.setPayDate(payCondition.getPaymentDate());
subPayment.setActualPayDate(null);
subPayment.setPayCompleteState(payCondition.getPreNotifyStatus());
subPayment.setPayRemark(payCondition.getRemark());
subList.add(subPayment);
}
//添加跳转地址业务
String urlKey = "exsp5"+IdUtil.simpleUUID();
String baseJumpUrl = JumpToUtil.getUrl(projectProperties.getHostUrl(),TbsSeeYonConst.CostApplyConf.Code(),urlKey);
data.put("exsp5",urlKey);
data.put("cmsLink",baseJumpUrl);
data.put("activitySummary",actTitles);
// 协议条款
LambdaQueryWrapper<TbsCostTodo> todoLqw = new LambdaQueryWrapper<>();
todoLqw.eq(TbsCostTodo::getCostApplyId,tbsCostApply.getId());
List<TbsCostTodo> costTodoList = tbsCostTodoMapper.selectList(todoLqw);
for (TbsCostTodo costTodo : costTodoList) {
TbsContractCostSubItem.ToDoItem toDoItem = new TbsContractCostSubItem.ToDoItem();
toDoItem.setServiceDescription(costTodo.getDescr());
toDoItem.setDeliveryStandard(costTodo.getPayMsg());
toDoItem.setDeliveryDate(costTodo.getPrePayDate());
toDoItem.setAgreeRemark(costTodo.getRemark());
subList.add(toDoItem);
}
//关联
data.put("sub", subList);
//添加科目和成本中心
List<TbsActivityCenter> tbsActivityCenters = tbsActivityCenterService.listByCostApplyId(Long.parseLong(id));
List<TbsActivitySubject> tbsActivitySubjects = tbsActivitySubjectService.listByCostApplyId(Long.parseLong(id));
List<String> subjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).distinct().collect(Collectors.toList());
List<Object> subList = new ArrayList<>();
//创建子表数据
try {
this.buildSubList(result, tbsActivityCenters, subjectNames, subList);
} catch (Exception e) {
e.printStackTrace();
}
//创建商品抬头列表
List<TbsActivityGoods> tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id));
Set<String> bands = new HashSet<>();
for (TbsActivityGoods tbsActivityGood : tbsActivityGoods) {
String band = tbsActivityGood.getTargetLevelPathNames().split("_")[0];
bands.add(band);
}else {
//创建通用的费用申请Data
this.buildCommonApplyData(id, tbsCostApply, activityList, supplier, result, sysUser, data);
}
String goods = bands.stream().collect(Collectors.joining(","));
data.put("chanPinPinLei",goods);
data.put("sub",subList);
//修改申请编码
String templateCode = tbsCostApply.getCostThemeEditFlag().equals(1)
?TbsSeeYonConst.CostApplyContractConf.Code()
:TbsSeeYonConst.CostApplyConf.Code();
BaseCreateProcessBo createProcess = new BaseCreateProcessBo();
createProcess.setTemplateCode(TbsSeeYonConst.CostApplyConf.Code());
createProcess.setTemplateCode(templateCode);
createProcess.setMemberLoginName(sysUser.getSyAccount());
createProcess.setSubjectTitle(TbsSeeYonConst.PRE_TITLE_COST_APPLY + tbsCostApply.getChargeTheme());
createProcess.setTargetId(tbsCostApply.getId()+"");
@ -358,6 +405,72 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
}
private void buildCommonApplyData(String id, TbsCostApply tbsCostApply, List<TbsActivity> activityList, BmsSupplier supplier, TbsBudgetCostResult result, SysUser sysUser, Map<String, Object> data) {
String actTitles = activityList.stream().map(TbsActivity::getActTitle).collect(Collectors.joining("; "));
data.put("costApplyCode", tbsCostApply.getCode());
data.put("applyUserCode", sysUser.getCode());
data.put("applyUserName", sysUser.getName());
data.put("supplierName", tbsCostApply.getSupplierName());
data.put("supplierCode", tbsCostApply.getSupplierCode());
data.put("title", tbsCostApply.getChargeTheme());
data.put("rowDate",DateUtils.format(LocalDateTime.now(), DateFormatString.DATE_TIME));
data.put("rowState","03");
data.put("orgId", tbsCostApply.getId()+"");
data.put("targetId", tbsCostApply.getId()+"");
data.put("targetCode", tbsCostApply.getCode());
data.put("exsp1",TbsSeeYonConst.CostApplyConf.Code());
data.put("money", tbsCostApply.getTotalActivityAmount());
//记录主表费率参数
try {
this.buildMainData4ROI(tbsCostApply, data);
} catch (Exception e) {
e.printStackTrace();
}
//拓展添加审批关联区域
String saleRegionId = supplier.handleSaleRegionId();
String bizRegionId = supplier.handleBizRegionId();
BmsRegion saleRegion = regionMapper.selectById(saleRegionId);
BmsRegion2 bizRegion = region2Mapper.selectById(bizRegionId);
String saleRegionNames = saleRegion!=null?saleRegion.getPathNames():"null_申请时未录入";
String bizRegionNames = bizRegion!=null?bizRegion.getPathNames():"null_申请时未录入";
//拓展添加审批关联
data.put("biz_region",bizRegionNames);
data.put("exsp2",saleRegionNames);
data.put("data_state",TbsCostApplyState.State_1_apply.getCode()+"");
//添加跳转地址业务
String urlKey = "exsp5"+IdUtil.simpleUUID();
String baseJumpUrl = JumpToUtil.getUrl(projectProperties.getHostUrl(),TbsSeeYonConst.CostApplyConf.Code(),urlKey);
data.put("exsp5",urlKey);
data.put("cmsLink",baseJumpUrl);
data.put("activitySummary",actTitles);
//添加科目和成本中心
List<TbsActivityCenter> tbsActivityCenters = tbsActivityCenterService.listByCostApplyId(Long.parseLong(id));
List<TbsActivitySubject> tbsActivitySubjects = tbsActivitySubjectService.listByCostApplyId(Long.parseLong(id));
List<String> subjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).distinct().collect(Collectors.toList());
List<Object> subList = new ArrayList<>();
//创建子表数据
try {
this.buildSubList(result, tbsActivityCenters, subjectNames, subList);
} catch (Exception e) {
e.printStackTrace();
}
//创建商品抬头列表
List<TbsActivityGoods> tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id));
Set<String> bands = new HashSet<>();
for (TbsActivityGoods tbsActivityGood : tbsActivityGoods) {
String band = tbsActivityGood.getTargetLevelPathNames().split("_")[0];
bands.add(band);
}
String goods = bands.stream().collect(Collectors.joining(","));
data.put("chanPinPinLei",goods);
data.put("sub",subList);
}
/**
* 记录主表费率参数
* @param tbsCostApply

Loading…
Cancel
Save