diff --git a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsSpuVo.java b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsSpuVo.java index 6065e5d5..73cd3f03 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsSpuVo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsSpuVo.java @@ -64,4 +64,7 @@ public class GoodsSpuVo { /** 是否可以下单 1、是;0否 */ private Integer orderFlag; + + /** 可投放费用标识 */ + private Integer costFlag; } diff --git a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java index ea8f66a3..15d115d9 100644 --- a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java @@ -582,7 +582,7 @@ public class OmsOrderServiceImpl extends ServiceImpl im if(supplierAddress.getTmsSysId()==null){ Assert.throwEx("地址缺失TmsSysId关联"); } - xltOrder.setTmsSysId(supplierAddress.getTmsSysId()); + xltOrder.setTmsSysId(supplierAddress.getId()+""); xltOrder.setEmpName(omsOrder.getUserName()); xltOrder.setCusCode(omsOrder.getSupplierCode()); xltOrder.setCusName(omsOrder.getSupplierName()); diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java index 4c23fede..67ce8389 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java @@ -215,7 +215,10 @@ public class TbsActivity implements Serializable { /** 是否取消(异动时设置) */ private Integer cancelFlag; - + /** + * 核销匹配标识(区分是否自定义核销比例) + */ + private Integer vtbMatchTypeFlag; @TableField(exist = false) private List attachList; @@ -283,6 +286,7 @@ public class TbsActivity implements Serializable { @TableField(exist = false) private Long birActId; + /** * 处理预警时间 * @param preDays 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 index b231ac0c..690ee687 100644 --- 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 @@ -101,7 +101,8 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service { if(orgCost.getCancelFlag().equals(1)){ Assert.throwEx("该记录的费用已异动"); } - if(!userId.equals(orgCost.getUserId())){ + boolean isExtUser = orgCost.getExtUserId()!=null&&userId.equals(orgCost.getExtUserId()); + if(!userId.equals(orgCost.getUserId())&&!isExtUser){ Assert.throwEx("拒绝访问"); } if(!orgCost.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())&& diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java index d9099503..91e7a605 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java @@ -61,6 +61,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -120,7 +121,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ policyItemDto.setStartDate(DateUtils.localDateToDate(policyItem.getPolicyStartDate())); policyItemDto.setEndDate(DateUtils.localDateToDate(policyItem.getPolicyEndDate())); policyItemDto.setDiscountAmount(policyItem.getDiscountAmount()); - policyItemDto.setDiscountRate(policyItem.getDiscountRate()); + policyItemDto.setDiscountRate(policyItem.getDiscountRate().divide(new BigDecimal("100"),4, RoundingMode.DOWN)); policyItemDto.setDiscountMax(policyItem.getDiscountMax()); //加载InvCode List policyGoods = tzcPolicyGoodsService.listByItemId(policyItemId); @@ -159,13 +160,11 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ } policyItemDto.setInvCodeList(invCodes); //保存异步处理的 - R result = xiaoLuTonService.savePolicyItem(policyItemDto); - if(result.getStatus()==200){ - TzcPolicyItem updParam = new TzcPolicyItem(); - updParam.setId(policyItemId); - updParam.setPolicyItemStatus(TzPolicyItemStatus.Status_2_SyncSuccess); - tzcPolicyItemService.updateById(updParam); - } + xiaoLuTonService.savePolicyItem(policyItemDto); + TzcPolicyItem updParam = new TzcPolicyItem(); + updParam.setId(policyItemId); + updParam.setPolicyItemStatus(TzPolicyItemStatus.Status_2_SyncSuccess); + tzcPolicyItemService.updateById(updParam); } /** 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 9216c8ca..ed86d761 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 @@ -20,7 +20,6 @@ import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.sys.service.SysUserService; 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.TbsActivitySubject; import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; @@ -31,7 +30,9 @@ 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.*; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationCenterCommitBo; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationContactBo; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationSubjectCommitBo; import com.qs.serve.modules.vtb.service.*; import com.qs.serve.modules.vtb.service.impl.VtbVerificationOperationServiceImpl; import lombok.AllArgsConstructor; @@ -74,6 +75,7 @@ public class VtbVerificationController { private VtbVerificationYardService verificationYardService; private VtbVerificationYardItemService vtbVerificationYardItemService; private VtbVerificationOperationServiceImpl vtbVerificationOperationService; + private VtbVerificationExtService vtbVerificationExtService; /** @@ -253,15 +255,31 @@ public class VtbVerificationController { /** * 提交核销 - * @param param + * @param commitBo * @return */ @LimitSubmit(interval = 3000) @PostMapping("/commit") @SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE) @PreAuthorize("hasRole('vtb:verification:commit')") - public R commit(@RequestBody @Valid VtbVerificationBo param){ + public R commit(@RequestBody @Valid VtbVerificationSubjectCommitBo commitBo){ + seeYonService.testConnection(); + VtbVerificationBo param = CopierUtil.copy(commitBo,new VtbVerificationBo()); + vtbVerificationService.commit(param); + return R.ok(); + } + + /** + * 提交核销2 + * @param commitBo + * @return + */ + @LimitSubmit(interval = 3000) + @PostMapping("/commitWithChange") + @SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE) + public R commit(@RequestBody @Valid VtbVerificationCenterCommitBo commitBo){ seeYonService.testConnection(); + VtbVerificationBo param = CopierUtil.copy(commitBo,new VtbVerificationBo()); vtbVerificationService.commit(param); return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java new file mode 100644 index 00000000..f78a017f --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java @@ -0,0 +1,193 @@ +package com.qs.serve.modules.vtb.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 核销成本中心费用 实体类 + * @author YenHex + * @since 2023-11-28 + */ +@Data +@TableName("vtb_verification_subject_center") +public class VtbVerificationSubjectCenter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 核算id */ + @NotNull(message = "核算id不能为空") + private Long verificationId; + + /** 科目核销编码 */ + @NotBlank(message = "科目核销编码不能为空") + @Length(max = 32,message = "科目核销编码长度不能超过32字") + private String verificationSubCode; + + /** 费用申请id */ + private Long costApplyId; + + /** 活动id */ + private Long activityId; + + /** 科目id */ + @NotNull(message = "科目id不能为空") + private Long subjectId; + + /** 科目编码 */ + @NotBlank(message = "科目编码不能为空") + @Length(max = 50,message = "科目编码长度不能超过50字") + private String subjectCode; + + /** 科目名称 */ + @NotBlank(message = "科目名称不能为空") + @Length(max = 50,message = "科目名称长度不能超过50字") + private String subjectName; + + /** 客户id */ + @NotNull(message = "客户id不能为空") + private Long supplierId; + + /** 客户编码 */ + @NotBlank(message = "客户编码不能为空") + @Length(max = 30,message = "客户编码长度不能超过30字") + private String supplierCode; + + /** 客户名称 */ + @NotBlank(message = "客户名称不能为空") + @Length(max = 200,message = "客户名称长度不能超过200字") + private String supplierName; + + /** 本次核销额 */ + @NotNull(message = "本次核销额不能为空") + private BigDecimal usedAmount; + + /** 申请时本次核销额 */ + @NotNull(message = "申请时本次核销额不能为空") + private BigDecimal usedAmountRecord; + + /** 已支付核销费用 */ + @NotNull(message = "已支付核销费用不能为空") + private BigDecimal payAmount; + + /** 支付完成 */ + @NotNull(message = "支付完成不能为空") + private Integer payFinishedFlag; + + /** 备注 */ + @Length(max = 600,message = "备注长度不能超过600字") + private String remark; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** 是否无效 */ + @NotNull(message = "是否无效不能为空") + private Integer effectiveFlag; + + /** 支付是否标识 */ + private Integer payReleaseFlag; + + /** 成本中心类型 */ + @NotBlank(message = "成本中心类型不能为空") + @Length(max = 255,message = "成本中心类型长度不能超过255字") + private String centerType; + + /** 成本中心id */ + @NotBlank(message = "成本中心id不能为空") + @Length(max = 32,message = "成本中心id长度不能超过32字") + private String centerId; + + /** 成本中心编码 */ + @NotBlank(message = "成本中心编码不能为空") + @Length(max = 50,message = "成本中心编码长度不能超过50字") + private String centerCode; + + /** 成本中心名称 */ + @NotBlank(message = "成本中心名称不能为空") + @Length(max = 200,message = "成本中心名称长度不能超过200字") + private String centerName; + + /** 活动成本中心ID */ + private Long activityCenterId; + + + public static VtbVerificationSubjectCenter toNewObject(VtbVerificationSubjectCenter source){ + VtbVerificationSubjectCenter verificationSubjectCenter = new VtbVerificationSubjectCenter(); + verificationSubjectCenter.setId(source.getId()); + verificationSubjectCenter.setVerificationId(source.getVerificationId()); + verificationSubjectCenter.setVerificationSubCode(source.getVerificationSubCode()); + verificationSubjectCenter.setCostApplyId(source.getCostApplyId()); + verificationSubjectCenter.setActivityId(source.getActivityId()); + verificationSubjectCenter.setSubjectId(source.getSubjectId()); + verificationSubjectCenter.setSubjectCode(source.getSubjectCode()); + verificationSubjectCenter.setSubjectName(source.getSubjectName()); + verificationSubjectCenter.setSupplierId(source.getSupplierId()); + verificationSubjectCenter.setSupplierCode(source.getSupplierCode()); + verificationSubjectCenter.setSupplierName(source.getSupplierName()); + verificationSubjectCenter.setUsedAmount(source.getUsedAmount()); + verificationSubjectCenter.setUsedAmountRecord(source.getUsedAmountRecord()); + verificationSubjectCenter.setPayAmount(source.getPayAmount()); + verificationSubjectCenter.setPayFinishedFlag(source.getPayFinishedFlag()); + verificationSubjectCenter.setRemark(source.getRemark()); + verificationSubjectCenter.setCreateTime(source.getCreateTime()); + verificationSubjectCenter.setUpdateTime(source.getUpdateTime()); + verificationSubjectCenter.setTenantId(source.getTenantId()); + verificationSubjectCenter.setCreateBy(source.getCreateBy()); + verificationSubjectCenter.setUpdateBy(source.getUpdateBy()); + verificationSubjectCenter.setDelFlag(source.getDelFlag()); + verificationSubjectCenter.setEffectiveFlag(source.getEffectiveFlag()); + verificationSubjectCenter.setPayReleaseFlag(source.getPayReleaseFlag()); + verificationSubjectCenter.setCenterType(source.getCenterType()); + verificationSubjectCenter.setCenterId(source.getCenterId()); + verificationSubjectCenter.setCenterCode(source.getCenterCode()); + verificationSubjectCenter.setCenterName(source.getCenterName()); + verificationSubjectCenter.setActivityCenterId(source.getActivityCenterId()); + return verificationSubjectCenter; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBo.java b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBo.java index 920ffafd..ec5c50db 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBo.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBo.java @@ -45,9 +45,12 @@ public class VtbVerificationBo implements Serializable { /** 网点 */ private List pointList; - /** 科目 */ + /** 科目(科目维度核销) */ private List subjectList; + /** 成本中心(科目成本中心维度核销) */ + private List subjectCenterList; + /** 支付条件id */ private Long payConditionId; diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationCenterCommitBo.java b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationCenterCommitBo.java new file mode 100644 index 00000000..f7b94cb0 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationCenterCommitBo.java @@ -0,0 +1,49 @@ +package com.qs.serve.modules.vtb.entity.bo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author YenHex + * @since 2023/11/27 + */ +@Data +public class VtbVerificationCenterCommitBo { + + /** id(退回的核销要传) */ + private Long id; + + /** 活动id */ + private Long activityId; + + /** 附件id */ + private String[] attachIds; + + /** 备注 */ + private String remark; + + /** 渠道 */ + private List channelList; + + /** 网点 */ + private List pointList; + + /** 科目 */ + @NotNull(message = "subject center list is null") + private List subjectCenterList; + + /** 支付条件id */ + private Long payConditionId; + + /** 支付方式 */ + private Long payWayId; + + /** 原来的审批id */ + private Long orgVerificationId; + + /** 是否释放 */ + private Integer inputReleaseFlag; + +} diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java new file mode 100644 index 00000000..c7c46c36 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java @@ -0,0 +1,66 @@ +package com.qs.serve.modules.vtb.entity.bo; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 核销科目费用 Bo + * @author YenHex + * @since 2022-11-24 + */ +@Data +public class VtbVerificationSubjectCenterBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 科目id */ + private Long subjectId; + + /** 场次 */ + @NotNull(message = "场次不能为空") + private Integer countSession; + + /** 人数 */ + @NotNull(message = "人数不能为空") + private Integer countPerson; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 表单id */ + private Long formId; + + /** 表单标题 */ + private String formTitle; + + /** 表单版本 */ + private Integer formVersion; + + /** 表单内容 */ + private String formContext; + + /** 表单内容值 */ + private String formContextValue; + + private List centerAmount; + + @Data + public class ChangeSubjectCenter{ + + @NotNull(message = "subjectCenterId不能为空") + private Long subjectCenterId; + + /** 费用额 */ + @NotNull(message = "费用额不能为空") + private BigDecimal amount; + + } + +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCommitBo.java b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCommitBo.java new file mode 100644 index 00000000..7bac2bd0 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCommitBo.java @@ -0,0 +1,51 @@ +package com.qs.serve.modules.vtb.entity.bo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 核销 Bo + * @author YenHex + * @since 2022-11-24 + */ +@Data +public class VtbVerificationSubjectCommitBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id(退回的核销要传) */ + private Long id; + + /** 活动id */ + private Long activityId; + + /** 附件id */ + private String[] attachIds; + + /** 备注 */ + private String remark; + + /** 渠道 */ + private List channelList; + + /** 网点 */ + private List pointList; + + /** 科目*/ + private List subjectList; + + /** 支付条件id */ + private Long payConditionId; + + /** 支付方式 */ + private Long payWayId; + + /** 原来的审批id */ + private Long orgVerificationId; + + /** 是否释放 */ + private Integer inputReleaseFlag; +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/dto/PayPaymentItemExtend.java b/src/main/java/com/qs/serve/modules/vtb/entity/dto/PayPaymentItemExtend.java index 969fa4d5..55d41a5a 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/dto/PayPaymentItemExtend.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/dto/PayPaymentItemExtend.java @@ -31,6 +31,11 @@ public class PayPaymentItemExtend { **/ private String payType; + /** + * 支付编码 + */ + private String payCode; + /** 支付id */ @NotNull(message = "支付id不能为空") private Long paymentId; @@ -39,6 +44,14 @@ public class PayPaymentItemExtend { @NotNull(message = "供应商id不能为空") private Long supplierId; + private String supplierCode; + + private String supplierName; + + private String userCode; + + private String userName; + /** 支付金额 */ @NotNull(message = "支付金额不能为空") private BigDecimal itemPayAmount; diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/so/PayPaymentItemExtendSo.java b/src/main/java/com/qs/serve/modules/vtb/entity/so/PayPaymentItemExtendSo.java index be3a80cf..ecbd4116 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/so/PayPaymentItemExtendSo.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/so/PayPaymentItemExtendSo.java @@ -22,6 +22,7 @@ import java.util.List; */ @Data public class PayPaymentItemExtendSo { + /** * 支付类型 * pay - 支付 @@ -29,6 +30,11 @@ public class PayPaymentItemExtendSo { **/ private String payType; + /** + * 支付编码 + */ + private String payCode; + /** 支付id */ @NotNull(message = "支付id不能为空") private Long paymentId; @@ -37,6 +43,15 @@ public class PayPaymentItemExtendSo { @NotNull(message = "供应商id不能为空") private Long supplierId; + /** 供应商 */ + private String supplierCode; + + private String supplierName; + + private String userCode; + + private String userName; + /** 核销Code */ private String verificationMainCode; diff --git a/src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationSubjectCenterMapper.java b/src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationSubjectCenterMapper.java new file mode 100644 index 00000000..45785c3b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationSubjectCenterMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.vtb.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubjectCenter; + +/** + * 核销成本中心费用 Mapper + * @author YenHex + * @date 2023-11-28 + */ +public interface VtbVerificationSubjectCenterMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationExtService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationExtService.java new file mode 100644 index 00000000..69846669 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationExtService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.vtb.service; + +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationCenterCommitBo; + +/** + * 核销 服务接口 + * @author YenHex + * @date 2023-11-24 + */ +public interface VtbVerificationExtService { + + +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java index 5d013ab8..6316d951 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java @@ -8,9 +8,7 @@ import com.qs.serve.modules.tbs.entity.bo.TbsActivityReopenBo; import com.qs.serve.modules.vtb.entity.VtbVerification; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBo; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationContactBo; -import org.springframework.web.bind.annotation.RequestBody; -import javax.validation.Valid; import java.util.Map; /** @@ -51,6 +49,7 @@ public interface VtbVerificationService extends IService { */ void commit(VtbVerificationBo vtbVerificationBo); + /** * 提交到致远审批流程的DATA * @param activityId diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java new file mode 100644 index 00000000..04738dee --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java @@ -0,0 +1,16 @@ +package com.qs.serve.modules.vtb.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubjectCenter; + +/** + * 核销成本中心费用 服务接口 + * @author YenHex + * @date 2023-11-28 + */ +public interface VtbVerificationSubjectCenterService extends IService { + + void removeByVerificationId(Long verificationId); + +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationExtServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationExtServiceImpl.java new file mode 100644 index 00000000..ba13d46d --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationExtServiceImpl.java @@ -0,0 +1,65 @@ +package com.qs.serve.modules.vtb.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.config.properties.ProjectApisProperties; +import com.qs.serve.common.config.properties.ProjectProperties; +import com.qs.serve.common.framework.manager.AsyncFactory; +import com.qs.serve.common.framework.manager.AsyncManager; +import com.qs.serve.common.util.*; +import com.qs.serve.modules.bir.service.BirCenterRateService; +import com.qs.serve.modules.bms.entity.*; +import com.qs.serve.modules.bms.mapper.BmsRegion2Mapper; +import com.qs.serve.modules.bms.mapper.BmsRegionMapper; +import com.qs.serve.modules.bms.service.BmsChannelPointService; +import com.qs.serve.modules.bms.service.BmsChannelService; +import com.qs.serve.modules.bms.service.BmsSubjectService; +import com.qs.serve.modules.bms.service.BmsSupplierService; +import com.qs.serve.modules.pay.entity.PayWay; +import com.qs.serve.modules.pay.mapper.PayWayMapper; +import com.qs.serve.modules.seeyon.service.SeeYonRequestService; +import com.qs.serve.modules.seeyon.service.XiaoLuTonService; +import com.qs.serve.modules.sys.entity.SysUser; +import com.qs.serve.modules.sys.service.SysSyncLogService; +import com.qs.serve.modules.sys.service.SysUserService; +import com.qs.serve.modules.tbs.common.TbsActivityState; +import com.qs.serve.modules.tbs.common.TbsCostApplyState; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsActivityPayCondition; +import com.qs.serve.modules.tbs.entity.TbsCostApply; +import com.qs.serve.modules.tbs.mapper.TbsCostPercentMapper; +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.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.bo.VtbVerificationCenterCommitBo; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationChannelBo; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationChannelPointBo; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationSubjectBo; +import com.qs.serve.modules.vtb.mapper.VtbVerificationYardItemMapper; +import com.qs.serve.modules.vtb.mapper.VtbVerificationYardMapper; +import com.qs.serve.modules.vtb.service.*; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 核销 服务实现类 + * @author YenHex + * @since 2022-11-27 + */ +@EnableAsync +@Slf4j +@Service +@AllArgsConstructor +public class VtbVerificationExtServiceImpl implements VtbVerificationExtService { + + + +} 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 55674d76..6049ed8d 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 @@ -83,6 +83,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl subjectCenterBoList = verificationBo.getSubjectCenterList(); + boolean isCenterCheck = CollectionUtil.isNotEmpty(subjectCenterBoList); + if(activity.getVtbMatchTypeFlag().equals(1) && !isCenterCheck){ + Assert.throwEx("页面参数异常,请刷新页面重试"); + } TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId()); if(costApply.getContractFlag().equals(1)){ Assert.throwEx("协议类申请不支持CRM核销"); @@ -625,10 +632,19 @@ public class VtbVerificationServiceImpl extends ServiceImpl subjectBoList = verificationBo.getSubjectList(); BigDecimal totalSubjectAmt = BigDecimal.ZERO; - for (VtbVerificationSubjectBo subjectBo : subjectBoList) { - totalSubjectAmt = totalSubjectAmt.add(subjectBo.getAmount()); + if(isCenterCheck){ + List subjectCenterList = verificationBo.getSubjectCenterList(); + for (VtbVerificationSubjectCenterBo subjectCenterBo : subjectCenterList) { + for (VtbVerificationSubjectCenterBo.ChangeSubjectCenter subjectCenter : subjectCenterBo.getCenterAmount()) { + totalSubjectAmt = totalSubjectAmt.add(subjectCenter.getAmount()); + } + } + }else { + List subjectBoList = verificationBo.getSubjectList(); + for (VtbVerificationSubjectBo subjectBo : subjectBoList) { + totalSubjectAmt = totalSubjectAmt.add(subjectBo.getAmount()); + } } TbsActivityPayCondition payCondition = activityPayConditionService.getById(verificationBo.getPayConditionId()); if(payCondition.getPaymentPrice().compareTo(totalSubjectAmt)>1){ @@ -714,7 +730,16 @@ public class VtbVerificationServiceImpl extends ServiceImpl verificationSubjects = validCreateVeriSubject(verification.getVerificationCode(),verificationBo, activity, costApply, supplier); + List verificationSubjects = new ArrayList<>(); + List verificationCenters = new ArrayList<>(); + String verificationCode = verification.getVerificationCode(); + if(isCenterCheck){ + //建立核销 VtbVerificationSubjectCenter + this.validCreateVeriSubjectAndCenter(activity, subjectCenterBoList, costApply, supplier, verificationSubjects, verificationCenters, verificationCode); + }else { + //建立核销 VtbVerificationSubject + verificationSubjects = this.validCreateVeriSubject(verificationCode,verificationBo, activity, costApply, supplier); + } //设置总金额 BigDecimal totalAmount = BigDecimal.ZERO; for (VtbVerificationSubject verificationSubject : verificationSubjects) { @@ -734,6 +759,7 @@ public class VtbVerificationServiceImpl extends ServiceImplobj.setVerificationId(verification.getId())); @@ -745,6 +771,10 @@ public class VtbVerificationServiceImpl extends ServiceImplobj.setVerificationId(verification.getId())); + verificationCenters.forEach(obj->obj.setVerificationId(verification.getId())); + if(CollectionUtil.isNotEmpty(verificationCenters)){ + vtbVerificationSubjectCenterService.saveBatch(verificationCenters); + } verificationSubjectService.saveBatch(verificationSubjects); TbsActivity activityParam = new TbsActivity(); activityParam.setId(activity.getId()); @@ -764,6 +794,118 @@ public class VtbVerificationServiceImpl extends ServiceImpl subjectCenterBoList, TbsCostApply costApply, BmsSupplier supplier, List verificationSubjects, List verificationCenters, String verificationCode) { + List activitySubjects = activitySubjectService.listByActivityId(activity.getId()); + List activityCenters = activityCenterService.listByActivity(activity.getId()); + List existFundFlowList = fundFlowService.listByActivity(activity.getId(), VtbFundFlowType.Verification); + Map> funFlowListMap = existFundFlowList.stream().collect(Collectors.groupingBy(VtbFundFlow::getSubjectId)); + //校验余额 + int countCode = 1; + for (VtbVerificationSubjectCenterBo subjectCenterBo : subjectCenterBoList) { + //科目总金额 + BmsSubject subject = subjectService.getById(subjectCenterBo.getSubjectId()); + BigDecimal totalSubjectAmt = BigDecimal.ZERO; + for (VtbVerificationSubjectCenterBo.ChangeSubjectCenter centerBo : subjectCenterBo.getCenterAmount()) { + BigDecimal centerAmt = centerBo.getAmount(); + if(centerAmt==null){ + Assert.throwEx("SubjectCenterId: "+centerBo.getSubjectCenterId()+" amount is null"); + } + if (centerAmt.compareTo(BigDecimal.ZERO)==0){ + //0核销,成本中心维度不进行保存 + continue; + } + totalSubjectAmt = totalSubjectAmt.add(centerAmt); + //当前活动成本中心进行校验,再构建 + TbsActivityCenter currActivityCenter = null; + for (TbsActivityCenter activityCenter : activityCenters) { + if(activityCenter.getSubjectId().equals(subjectCenterBo.getSubjectId())&&activityCenter.getId().equals(centerBo.getSubjectCenterId())){ + currActivityCenter = activityCenter; + break; + } + } + if(currActivityCenter==null){ + Assert.throwEx("SubjectCenterId: "+centerBo.getSubjectCenterId()+" 不匹配"); + } + + //判断是否够核销 + BigDecimal surplus = currActivityCenter.getCenterAmount() + .subtract(currActivityCenter.getUsedAmount()) + .subtract(centerAmt); + if(surplus.compareTo(BigDecimal.ZERO)<0){ + Assert.throwEx("SubjectCenterId: "+centerBo.getSubjectCenterId()+" 金额不足"); + } + VtbVerificationSubjectCenter subjectCenter = new VtbVerificationSubjectCenter(); + subjectCenter.setVerificationSubCode(verificationCode +"_"+countCode); + subjectCenter.setCostApplyId(costApply.getId()); + subjectCenter.setActivityId(activity.getId()); + subjectCenter.setSubjectId(subject.getId()); + subjectCenter.setSubjectCode(subject.getSubjectCode()); + subjectCenter.setSubjectName(subject.getSubjectName()); + subjectCenter.setSupplierId(Long.parseLong(supplier.getId())); + subjectCenter.setSupplierCode(supplier.getCode()); + subjectCenter.setSupplierName(supplier.getName()); + subjectCenter.setUsedAmount(centerAmt); + subjectCenter.setUsedAmountRecord(centerAmt); + subjectCenter.setCenterType(currActivityCenter.getCenterType()); + subjectCenter.setCenterId(currActivityCenter.getCenterId()); + subjectCenter.setCenterCode(currActivityCenter.getCenterCode()); + subjectCenter.setCenterName(currActivityCenter.getCenterName()); + subjectCenter.setActivityCenterId(currActivityCenter.getId()); + verificationCenters.add(subjectCenter); + } + boolean isCheckZero = totalSubjectAmt.compareTo(BigDecimal.ZERO)==0; + //忽略金额为0的数据 + if (!isCheckZero && totalSubjectAmt.compareTo(BigDecimal.ZERO) < 1) { + continue; + } + //判断是否超额 + TbsActivitySubject currentActivitySubject = null; + for (TbsActivitySubject activitySubject : activitySubjects) { + if (activitySubject.getSubjectId().equals(subject.getId())) { + currentActivitySubject = activitySubject; + break; + } + } + //兼容支持非0元核销 + if(!isCheckZero){ + List subjectFundFlowItems = funFlowListMap.get(subject.getId()); + BigDecimal totalSubjectUsedAmount = BigDecimal.ZERO; + if (CollectionUtil.isNotEmpty(subjectFundFlowItems)) { + for (VtbFundFlow subjectFundFlowItem : subjectFundFlowItems) { + totalSubjectUsedAmount = totalSubjectUsedAmount.add(subjectFundFlowItem.getUsedAmount()); + } + } + totalSubjectUsedAmount = totalSubjectUsedAmount.add(totalSubjectAmt); + if (totalSubjectUsedAmount.compareTo(currentActivitySubject.getAmount()) > 0) { + Assert.throwEx("费用类型[" + subject.getSubjectName() + "]超额"); + } + } + //保存费用结果 + VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); + verificationSubject.setVerificationSubCode(verificationCode +"_"+countCode); + countCode++; + verificationSubject.setCostApplyId(costApply.getId()); + verificationSubject.setActivityId(activity.getId()); + verificationSubject.setSubjectId(subject.getId()); + verificationSubject.setSubjectCode(subject.getSubjectCode()); + verificationSubject.setSubjectName(subject.getSubjectName()); + verificationSubject.setSupplierId(Long.parseLong(supplier.getId())); + verificationSubject.setSupplierCode(supplier.getCode()); + verificationSubject.setSupplierName(supplier.getName()); + verificationSubject.setUsedAmount(totalSubjectAmt); + verificationSubject.setUsedAmountRecord(totalSubjectAmt); + verificationSubject.setCountPerson(subjectCenterBo.getCountPerson()); + verificationSubject.setCountSession(subjectCenterBo.getCountSession()); + verificationSubject.setRemark(subjectCenterBo.getRemark()); + verificationSubject.setFormId(subjectCenterBo.getFormId()); + verificationSubject.setFormTitle(subjectCenterBo.getFormTitle()); + verificationSubject.setFormVersion(subjectCenterBo.getFormVersion()); + verificationSubject.setFormContext(subjectCenterBo.getFormContext()); + verificationSubject.setFormContextValue(subjectCenterBo.getFormContextValue()); + verificationSubjects.add(verificationSubject); + } + } + /** * 提交到致远审批流程 diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectCenterServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectCenterServiceImpl.java new file mode 100644 index 00000000..3572f07c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectCenterServiceImpl.java @@ -0,0 +1,31 @@ +package com.qs.serve.modules.vtb.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubjectCenter; +import com.qs.serve.modules.vtb.service.VtbVerificationSubjectCenterService; +import com.qs.serve.modules.vtb.mapper.VtbVerificationSubjectCenterMapper; + +/** + * 核销成本中心费用 服务实现类 + * @author YenHex + * @since 2023-11-28 + */ +@Slf4j +@Service +@AllArgsConstructor +public class VtbVerificationSubjectCenterServiceImpl extends ServiceImpl implements VtbVerificationSubjectCenterService { + + @Override + public void removeByVerificationId(Long verificationId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbVerificationSubjectCenter::getVerificationId,verificationId); + this.remove(lqw); + } + +} + diff --git a/src/main/resources/mapper/goods/GoodsSkuMapper.xml b/src/main/resources/mapper/goods/GoodsSkuMapper.xml index 9256e7d0..20eb58ef 100644 --- a/src/main/resources/mapper/goods/GoodsSkuMapper.xml +++ b/src/main/resources/mapper/goods/GoodsSkuMapper.xml @@ -149,7 +149,7 @@ goods_sku.tenant_id = #{tenantId} and goods_sku.del_flag = 0 and goods_sku.enable = 1 - and goods_spu.shlef = 1 + and goods_spu.shelf = 1 and goods_spu.category_third in #{selectId} diff --git a/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml b/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml index 40f02606..0b5c5e81 100644 --- a/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml +++ b/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml @@ -71,7 +71,7 @@ SELECT `tbs_budget_log`.budget_id, `tbs_budget_log`.schedule_item_id, - sum (`tbs_budget_log`.amount) amount + sum(`tbs_budget_log`.amount) amount FROM `tbs_budget_log` LEFT JOIN @@ -116,7 +116,7 @@ SELECT `tbs_budget_log`.budget_id, `tbs_budget_log`.schedule_item_id, - sum (`tbs_budget_log`.amount) amount + sum(`tbs_budget_log`.amount) amount FROM `tbs_budget_log` LEFT JOIN diff --git a/src/main/resources/mapper/vtb/VtbVerForPayReportMapper.xml b/src/main/resources/mapper/vtb/VtbVerForPayReportMapper.xml index 78ed19af..cbeb6d99 100644 --- a/src/main/resources/mapper/vtb/VtbVerForPayReportMapper.xml +++ b/src/main/resources/mapper/vtb/VtbVerForPayReportMapper.xml @@ -210,6 +210,7 @@ pay_payment_item.`id`, pay_payment_item.`verification_main_code`, pay_payment_item.`verification_code`, + pay_payment.`pay_code`, pay_payment_item.`pay_time`, pay_payment_item.`pay_date`, pay_payment_item.`bill_number`, @@ -242,8 +243,13 @@ and act.cancel_flag = 0 and pay_payment.del_flag = 0 and `pay_payment_item`.`pay_type` = #{query.payType} + and `pay_payment`.`pay_code` like concat('%',#{query.payCode},'%') and `pay_payment_item`.`payment_id` = #{query.paymentId} and `cost`.`code` like concat('%',#{query.costApplyCode},'%') + and `pay_payment`.`supplier_code` like concat('%',#{query.supplierCode},'%') + and `pay_payment`.`supplier_name` like concat('%',#{query.supplierName},'%') + and `pay_payment`.`user_code` like concat('%',#{query.userCode},'%') + and `pay_payment`.`user_name` like concat('%',#{query.userName},'%') and `cost`.`charge_theme` like concat('%',#{query.costApplyTitle},'%') and `act`.`act_title` like concat('%',#{query.activityTitle},'%') and `pay_payment_item`.`supplier_id` = #{query.supplierId}