Browse Source

调整审批流程,支持修改核销金额

contract
Yen 2 years ago
parent
commit
ce098c461d
  1. 11
      src/main/java/com/qs/serve/modules/package-info.java
  2. 18
      src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java
  3. 9
      src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java
  4. 25
      src/main/java/com/qs/serve/modules/third/PortalOfCostController.java
  5. 46
      src/main/java/com/qs/serve/modules/third/entity/ProcessCreateBo.java
  6. 26
      src/main/java/com/qs/serve/modules/third/entity/ProcessGoodsItem.java
  7. 47
      src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java
  8. 41
      src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java
  9. 3
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java
  10. 18
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationYardItem.java
  11. 90
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java
  12. 1
      src/main/resources/application.yml

11
src/main/java/com/qs/serve/modules/package-info.java

@ -1,11 +0,0 @@
package com.qs.serve.modules;
/**
* bpm 审核流程
* cms 内容管理
* edu 教学模块
* sms 消息模块
* job 任务调度模块
* svc 第三方对接模块
* sys 系统模块
* wx 微信模块
*/

18
src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java

@ -34,14 +34,28 @@ public class TbsAffairCommitBo {
private String comment;
/**
* 修改金额列表
* 修改金额列表核销接口专用
*/
private List<AffairSubjectLine> affairSubjectLines;
@Data
public static class AffairSubjectLine{
private Long verificationSubjectId;
/**
* 科目id
*/
private Long subjectId;
/**
* 调整金额
*/
private BigDecimal amount;
/** 场次 */
private Integer countSession;
/** 人数 */
private Integer countPerson;
}
}

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

@ -3,8 +3,9 @@ package com.qs.serve.modules.tbs.entity.vo;
import com.qs.serve.modules.seeyon.entity.CtpAffair;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.vtb.entity.VtbVerification;
import com.qs.serve.modules.vtb.entity.VtbVerificationYard;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/12/7
@ -27,4 +28,10 @@ public class CtpAffairVo {
/** 活动 */
private Object activityInfo;
/** 审批日志 */
private Object commitLine;
/** 审批日志明细 */
private List<?> commitItems;
}

25
src/main/java/com/qs/serve/modules/third/PortalOfCostController.java

@ -0,0 +1,25 @@
package com.qs.serve.modules.third;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.modules.third.entity.ProcessCreateBo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 第三方接口核销系统
* @author YenHex
* @since 2023/2/14
*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("portal/cost")
public class PortalOfCostController {
public R<?> createCostProcess(ProcessCreateBo createBo){
return R.error();
}
}

46
src/main/java/com/qs/serve/modules/third/entity/ProcessCreateBo.java

@ -0,0 +1,46 @@
package com.qs.serve.modules.third.entity;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* @author YenHex
* @since 2023/2/14
*/
@Data
public class ProcessCreateBo {
/** 员工编码 */
@NotNull(message = "员工编码 不能为空")
private String userCode;
/** 费用编码 */
private String costCode;
/** 费用主题 */
private String costTheme;
/** 活动编码(可为空) */
private String activityCode;
@NotNull(message = "客户编码 不能为空")
private String customerCode;
/** 客户所属 */
private String customerBelong;
@NotNull(message = "成本中心编码 不能为空")
private String centerCode;
@NotNull(message = "合计金额 不能为空")
private BigDecimal totalAmount;
@NotNull(message = "成本中心id 不能为空")
private String centerId;
@NotNull(message = "成本中心类型 不能为空")
private String centerType;
}

26
src/main/java/com/qs/serve/modules/third/entity/ProcessGoodsItem.java

@ -0,0 +1,26 @@
package com.qs.serve.modules.third.entity;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author YenHex
* @since 2023/2/14
*/
@Data
public class ProcessGoodsItem {
/** 存货档案编码(SKU_CODE) */
private String inventoryCode;
/** 数量 */
private Integer number;
/** 单价 */
private BigDecimal price;
/** 合计 = 单价 * 数量 */
private BigDecimal amount;
}

47
src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java

@ -0,0 +1,47 @@
package com.qs.serve.modules.third.service;
import com.qs.serve.common.util.Assert;
import com.qs.serve.modules.bms.entity.BmsSupplier;
import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.goods.entity.dto.TbsCenterDto;
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.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.TbsCenterDtoService;
import com.qs.serve.modules.third.entity.ProcessCreateBo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author YenHex
* @since 2023/2/14
*/
@Slf4j
@Service
@AllArgsConstructor
public class PortalOfCostApplication {
private TbsActivityService tbsActivityService;
private BmsSupplierService supplierService;
private SysUserService userService;
private TbsCenterDtoService tbsCenterDtoService;
void createCostProcess(ProcessCreateBo createBo){
SysUser user = userService.getByAccount(createBo.getUserCode());
if(user==null){Assert.throwEx("用户不存在,请重新编辑");}
BmsSupplier supplier = supplierService.getByCode(createBo.getCustomerCode(),createBo.getCustomerBelong());
if(supplier==null){Assert.throwEx("客户不存在,请重新编辑");}
TbsCenterDto tbsCenterDto = tbsCenterDtoService.getCenterDto(createBo.getCenterType(),createBo.getCenterId());
if(tbsCenterDto==null){Assert.throwEx("部分成本中心不存在了,请重新编辑");}
TbsCostApply costApply = new TbsCostApply();
costApply.setCode(createBo.getCostCode());
costApply.setCode(createBo.getCostTheme());
costApply.setChargeState(TbsCostApplyState.State_3_finished.getCode());
}
}

41
src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java

@ -19,15 +19,15 @@ import com.qs.serve.modules.tbs.common.TbsActivityState;
import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.common.TbsSeeYonConst;
import com.qs.serve.modules.tbs.entity.TbsActivity;
import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
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.TbsActivityService;
import com.qs.serve.modules.tbs.service.TbsActivitySubjectService;
import com.qs.serve.modules.tbs.service.TbsCostApplyService;
import com.qs.serve.modules.vtb.common.VtbVerificationState;
import com.qs.serve.modules.vtb.entity.VtbVerificationChannel;
import com.qs.serve.modules.vtb.entity.VtbVerificationChannelPoint;
import com.qs.serve.modules.vtb.entity.VtbVerificationSubject;
import com.qs.serve.modules.vtb.entity.*;
import com.qs.serve.modules.vtb.entity.so.VtbVerificationSubjectSo;
import com.qs.serve.modules.vtb.service.*;
import com.tencentcloudapi.as.v20180419.models.Activity;
@ -39,13 +39,11 @@ import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.vtb.entity.so.VtbVerificationSo;
import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBo;
import com.qs.serve.modules.vtb.entity.VtbVerification;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -63,10 +61,12 @@ public class VtbVerificationController {
private VtbVerificationChannelService vtbVerificationChannelService;
private VtbVerificationChannelPointService vtbVerificationChannelPointService;
private VtbVerificationSubjectService vtbVerificationSubjectService;
private TbsActivitySubjectService activitySubjectService;
private SysAttachService attachService;
private SysUserService sysUserService;
private SeeYonService seeYonService;
private VtbVerificationApplication verificationApplication;
private VtbVerificationYardService verificationYardService;
/**
@ -116,10 +116,37 @@ public class VtbVerificationController {
LambdaQueryWrapper<VtbVerificationSubject> subjectLqw = new LambdaQueryWrapper<>();
subjectLqw.eq(VtbVerificationSubject::getVerificationId,id);
List<VtbVerificationSubject> subjectList = vtbVerificationSubjectService.list(subjectLqw);
List<TbsActivitySubject> activitySubjects = activitySubjectService.listByActivityId(vtbVerification.getActivityId());
for (VtbVerificationSubject verificationSubject : subjectList) {
for (TbsActivitySubject activitySubject : activitySubjects) {
if(verificationSubject.getSubjectId().equals(activitySubject.getSubjectId())){
BigDecimal used = activitySubject.getUsedAmount()==null?BigDecimal.ZERO:activitySubject.getUsedAmount();
BigDecimal diff = activitySubject.getAmount().subtract(used);
verificationSubject.setMaxChangeAmount(diff);
}
}
}
vtbVerification.setSubjectList(subjectList);
return R.ok(vtbVerification);
}
/**
* 查找
* @param id
* @return
*/
@GetMapping("/getForCommentList/{id}")
@SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.QUERY)
public R<?> getForCommentList(@PathVariable("id") String id){
LambdaQueryWrapper<VtbVerificationYard> yardLqw = new LambdaQueryWrapper<>();
yardLqw.eq(VtbVerificationYard::getVerificationId,id);
List<VtbVerificationYard> yardList = verificationYardService.list(yardLqw);
for (VtbVerificationYard yard : yardList) {
}
return R.ok();
}
/**
* 提交核销
* @param param

3
src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java

@ -142,5 +142,8 @@ public class VtbVerificationSubject implements Serializable {
/** 表单内容值 */
private String formContextValue;
/** 可更变的最大金额 */
@TableField(exist = false)
private BigDecimal maxChangeAmount;
}

18
src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationYardItem.java

@ -88,17 +88,27 @@ public class VtbVerificationYardItem implements Serializable {
@NotNull(message = "本次审批金额不能为空")
private BigDecimal currAmount;
/** 场次 */
/** 历史场次 */
@NotNull(message = "场次不能为空")
private Integer countSession;
private Integer lastSession;
/** 人数 */
/** 本次场次 */
@NotNull(message = "场次不能为空")
private Integer currSession;
/** 历史人数 */
@NotNull(message = "人数不能为空")
private Integer lastPerson;
/** 当前人数 */
@NotNull(message = "人数不能为空")
private Integer countPerson;
private Integer currPerson;
/** 备注 */
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
private String remark2;
private String remark3;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

90
src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.vtb.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.common.util.CopierUtil;
@ -11,10 +12,12 @@ import com.qs.serve.modules.sys.service.SysUserService;
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.TbsActivitySubject;
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.TbsActivityService;
import com.qs.serve.modules.tbs.service.TbsActivitySubjectService;
import com.qs.serve.modules.tbs.service.TbsCostApplyService;
import com.qs.serve.modules.vtb.common.VtbVerificationState;
import com.qs.serve.modules.vtb.entity.VtbVerification;
@ -57,7 +60,36 @@ public class VtbVerificationApplication {
if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){
return R.error("费用申请处于未非审批状态!");
}
if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){
List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId());
for (VtbVerificationSubject verificationSubject : verificationSubjects) {
for (TbsAffairCommitBo.AffairSubjectLine subjectLine : affairCommit.getAffairSubjectLines()) {
if(subjectLine.getSubjectId()==null||subjectLine.getAmount()==null){
return R.error("AffairSubjectLines参数错误");
}
if(subjectLine.getSubjectId().equals(verificationSubject.getSubjectId())){
if(subjectLine.getAmount().compareTo(verificationSubject.getUsedAmountRecord())>0){
return R.error("科目["+verificationSubject.getSubjectName()+"]额度不足");
}
}
}
}
// List<TbsActivitySubject> activitySubjects = activitySubjectService.listByActivityId(verification.getActivityId());
// for (TbsActivitySubject activitySubject : activitySubjects) {
// for (TbsAffairCommitBo.AffairSubjectLine subjectLine : affairCommit.getAffairSubjectLines()) {
// if(subjectLine.getSubjectId()==null||subjectLine.getAmount()==null){
// return R.error("AffairSubjectLines参数错误");
// }
// if(subjectLine.getSubjectId().equals(activitySubject.getSubjectId())){
// BigDecimal used = activitySubject.getUsedAmount()==null?BigDecimal.ZERO:activitySubject.getUsedAmount();
// BigDecimal diff = activitySubject.getAmount().subtract(used);
// if(subjectLine.getAmount().compareTo(diff)>=0){
// return R.error("科目["+activitySubject.getSubjectName()+"]余额为:"+ diff);
// }
// }
// }
// }
}
boolean isBackCommit = affairCommit.getState()==2;
R<String> result = seeYonService.commonCommit(affairCommit, TbsSeeYonConst.VERIFICATION_CODE);
@ -99,10 +131,14 @@ public class VtbVerificationApplication {
BigDecimal totalAmount = BigDecimal.ZERO;
for (VtbVerificationSubject currVs : verificationSubjects) {
BigDecimal changeAmount = null;
Integer countSession = null;
Integer countPerson = null;
if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){
for (TbsAffairCommitBo.AffairSubjectLine affairSubjectLine : affairCommit.getAffairSubjectLines()) {
if(currVs.getId().equals(affairSubjectLine.getVerificationSubjectId())){
if(currVs.getSubjectId().equals(affairSubjectLine.getSubjectId())){
changeAmount = affairSubjectLine.getAmount();
countSession = affairSubjectLine.getCountSession();
countPerson = affairSubjectLine.getCountPerson();
break;
}
}
@ -113,14 +149,54 @@ public class VtbVerificationApplication {
yardItem.initSetNull();
BigDecimal lastAmount = currVs.getUsedAmount();
yardItem.setLastAmount(lastAmount);
yardItem.setLastSession(currVs.getCountSession());
yardItem.setCurrSession(currVs.getCountSession());
if(countSession != null){
if(!countSession.equals(currVs.getCountSession())){
yardItem.setLastSession(currVs.getCountSession());
yardItem.setCurrSession(countSession);
VtbVerificationSubject verSub4Upd = new VtbVerificationSubject();
verSub4Upd.setId(currVs.getId());
verSub4Upd.setCountPerson(countSession);
verSubject4Update.add(verSub4Upd);
if(currVs.getCountSession()!=null){
if(currVs.getCountSession()>countSession){
yardItem.setRemark2("减少场次:"+ (currVs.getCountSession() - countSession));
}else {
yardItem.setRemark2("增加场次:"+ (countSession - currVs.getCountSession()));
}
}
}
}
yardItem.setLastSession(currVs.getCountSession());
yardItem.setCurrSession(currVs.getCountSession());
if( countPerson != null ){
if(!countPerson.equals(currVs.getCountPerson())){
yardItem.setLastPerson(currVs.getCountPerson());
yardItem.setCurrPerson(countPerson);
VtbVerificationSubject verSub4Upd = new VtbVerificationSubject();
verSub4Upd.setId(currVs.getId());
verSub4Upd.setCountPerson(countPerson);
verSubject4Update.add(verSub4Upd);
if(currVs.getCountPerson()!=null){
if(currVs.getCountPerson()>countPerson){
yardItem.setRemark3("减少人数:"+ (currVs.getCountPerson() - countPerson));
}else {
yardItem.setRemark3("增加人数:"+ (countPerson - currVs.getCountPerson()));
}
}
}
}
//金额有更变
if(changeAmount!=null&&changeAmount.compareTo(lastAmount)!=0){
yardItem.setCurrAmount(changeAmount);
BigDecimal diff = changeAmount.subtract(lastAmount);
if(diff.compareTo(BigDecimal.ZERO)>0){
yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]增加费用:"+diff);
yardItem.setRemark("增加费用:"+diff);
}else {
yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]减少费用:"+diff.negate());
yardItem.setRemark("减少费用:"+diff.negate());
}
VtbVerificationSubject verSub4Upd = new VtbVerificationSubject();
verSub4Upd.setId(currVs.getId());
@ -181,8 +257,12 @@ public class VtbVerificationApplication {
tbsActivityService.updateById(activity);
}
public List<CtpAffairVo> buildCtpAffairVoList(List<CtpAffair> ctpAffairs){
return this.buildCtpAffairVoList(ctpAffairs,false);
}
@NotNull
public List<CtpAffairVo> buildCtpAffairVoList(List<CtpAffair> ctpAffairs) {
public List<CtpAffairVo> buildCtpAffairVoList(List<CtpAffair> ctpAffairs,boolean loadCommit) {
if(CollectionUtil.isEmpty(ctpAffairs)){
return new ArrayList<>();
}

1
src/main/resources/application.yml

@ -12,7 +12,6 @@ spring:
project:
ignore-url:
tenants: #忽略租户拦截
- /portal/**
- /api/dev/** #测试接口
- /bpm/appr/getById/**
- /callback

Loading…
Cancel
Save