diff --git a/src/main/java/com/qs/serve/modules/package-info.java b/src/main/java/com/qs/serve/modules/package-info.java deleted file mode 100644 index 0551be05..00000000 --- a/src/main/java/com/qs/serve/modules/package-info.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.qs.serve.modules; -/** - * bpm 审核流程 - * cms 内容管理 - * edu 教学模块 - * sms 消息模块 - * job 任务调度模块 - * svc 第三方对接模块 - * sys 系统模块 - * wx 微信模块 - */ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java index e707c75a..a11e2928 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java @@ -34,14 +34,28 @@ public class TbsAffairCommitBo { private String comment; /** - * 修改金额列表 + * 修改金额列表(核销接口专用) */ private List affairSubjectLines; @Data public static class AffairSubjectLine{ - private Long verificationSubjectId; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 调整金额 + */ private BigDecimal amount; + + /** 场次 */ + private Integer countSession; + + /** 人数 */ + private Integer countPerson; } } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java b/src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java index 9dae9a01..5475355c 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java +++ b/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; + } diff --git a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java new file mode 100644 index 00000000..679cd582 --- /dev/null +++ b/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(); + } + +} diff --git a/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateBo.java b/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateBo.java new file mode 100644 index 00000000..eb4e570b --- /dev/null +++ b/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; + +} diff --git a/src/main/java/com/qs/serve/modules/third/entity/ProcessGoodsItem.java b/src/main/java/com/qs/serve/modules/third/entity/ProcessGoodsItem.java new file mode 100644 index 00000000..51676a8f --- /dev/null +++ b/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; + +} diff --git a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java new file mode 100644 index 00000000..1560d3c7 --- /dev/null +++ b/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()); + } + +} 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 80f11dc6..0c527742 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 @@ -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 subjectLqw = new LambdaQueryWrapper<>(); subjectLqw.eq(VtbVerificationSubject::getVerificationId,id); List subjectList = vtbVerificationSubjectService.list(subjectLqw); + List 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 yardLqw = new LambdaQueryWrapper<>(); + yardLqw.eq(VtbVerificationYard::getVerificationId,id); + List yardList = verificationYardService.list(yardLqw); + for (VtbVerificationYard yard : yardList) { + + } + return R.ok(); + } + /** * 提交核销 * @param param diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java index 9f6e0dea..a1a7e065 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java +++ b/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; } diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationYardItem.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationYardItem.java index 03920b11..eb10477a 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationYardItem.java +++ b/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") diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java index a70a04f9..4d3e0424 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java +++ b/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 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 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 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 buildCtpAffairVoList(List ctpAffairs){ + return this.buildCtpAffairVoList(ctpAffairs,false); + } + @NotNull - public List buildCtpAffairVoList(List ctpAffairs) { + public List buildCtpAffairVoList(List ctpAffairs,boolean loadCommit) { if(CollectionUtil.isEmpty(ctpAffairs)){ return new ArrayList<>(); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 237b3118..c6bb2767 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,7 +12,6 @@ spring: project: ignore-url: tenants: #忽略租户拦截 - - /portal/** - /api/dev/** #测试接口 - /bpm/appr/getById/** - /callback