From 6edb83e99bce08671186984e3b1f63470840d839 Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 2 Mar 2023 15:22:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=94=BF=E7=AD=96=E6=97=A5?= =?UTF-8?q?=E5=BF=97=EF=BC=9B=E4=B8=80=E6=9D=A1=E9=BE=99=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=8B=93=E5=B1=95=E4=BF=9D=E5=AD=98apt=E5=92=8Cxlt=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/ProcessCreatePolicyCostBo.java | 6 + .../service/PortalOfCostApplication.java | 84 ++++++-- .../modules/tzc/entity/TzcPolicyItemLog.java | 200 ++++++++++++++++++ .../tzc/mapper/TzcPolicyItemLogMapper.java | 14 ++ .../tzc/service/TzcPolicyItemLogService.java | 14 ++ .../impl/TzcPolicyItemLogServiceImpl.java | 22 ++ 6 files changed, 322 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItemLog.java create mode 100644 src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyItemLogMapper.java create mode 100644 src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyItemLogService.java create mode 100644 src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemLogServiceImpl.java diff --git a/src/main/java/com/qs/serve/modules/third/entity/ProcessCreatePolicyCostBo.java b/src/main/java/com/qs/serve/modules/third/entity/ProcessCreatePolicyCostBo.java index 1accf452..0e95a13d 100644 --- a/src/main/java/com/qs/serve/modules/third/entity/ProcessCreatePolicyCostBo.java +++ b/src/main/java/com/qs/serve/modules/third/entity/ProcessCreatePolicyCostBo.java @@ -43,4 +43,10 @@ public class ProcessCreatePolicyCostBo { @NotNull(message = "存货编码 不能为空") private List goodsList; + /** 拓展:是否保存核销到中间库 aptclaim,0->不保存(默认);1->保存 */ + private Integer toSaveCostCheckFlag; + + /** 拓展:是否保存支付到中间库 xlt,0->不保存(默认);1->保存 */ + private Integer toSavePaymentFlag; + } 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 index 7b0bd48c..a075642c 100644 --- a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java +++ b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java @@ -3,10 +3,7 @@ package com.qs.serve.modules.third.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.consts.BudgetLogOptFlag; import com.qs.serve.common.model.consts.ResultFlag; -import com.qs.serve.common.util.Assert; -import com.qs.serve.common.util.CollectionUtil; -import com.qs.serve.common.util.IdUtil; -import com.qs.serve.common.util.StringUtils; +import com.qs.serve.common.util.*; import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.service.BmsSubjectService; @@ -22,6 +19,9 @@ import com.qs.serve.modules.pay.entity.PayPayment; import com.qs.serve.modules.pay.entity.PayPaymentItem; import com.qs.serve.modules.pay.service.PayPaymentItemService; import com.qs.serve.modules.pay.service.PayPaymentService; +import com.qs.serve.modules.seeyon.entity.XltApticlaim; +import com.qs.serve.modules.seeyon.entity.XltPaymentRecord; +import com.qs.serve.modules.seeyon.service.XiaoLuTonService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsActivityState; @@ -32,10 +32,13 @@ import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo; import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo; import com.qs.serve.modules.third.entity.ProcessGoodsItem; +import com.qs.serve.modules.tzc.common.TzPolicyItemStatus; import com.qs.serve.modules.tzc.entity.TzcPolicy; import com.qs.serve.modules.tzc.entity.TzcPolicyGoodsSync; import com.qs.serve.modules.tzc.entity.TzcPolicyItem; +import com.qs.serve.modules.tzc.entity.TzcPolicyItemLog; import com.qs.serve.modules.tzc.service.TzcPolicyGoodsSyncService; +import com.qs.serve.modules.tzc.service.TzcPolicyItemLogService; import com.qs.serve.modules.tzc.service.TzcPolicyItemService; import com.qs.serve.modules.tzc.service.TzcPolicyService; import com.qs.serve.modules.vtb.common.VtbVerificationState; @@ -49,13 +52,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Random; import java.util.stream.Collectors; /** @@ -95,7 +95,9 @@ public class PortalOfCostApplication { private TzcPolicyService policyService; private TzcPolicyItemService policyItemServiceService; + private TzcPolicyItemLogService policyItemLogService; private TzcPolicyGoodsSyncService tzcPolicyGoodsSyncService; + private final XiaoLuTonService xiaoLuTonService; @@ -105,6 +107,9 @@ public class PortalOfCostApplication { if(user==null){Assert.throwEx("用户不存在,请重新编辑");} TzcPolicyItem policyItem = policyItemServiceService.getByPolicyItemCode(createBo.getPolicyItemCode()); if(policyItem==null){ Assert.throwEx("政策项不存在,请重新编辑");} + if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_2_SyncSuccess)){ + Assert.throwEx("政策项状态异常或未完成同步"); + } BmsSupplier supplier = supplierService.getById(policyItem.getSupplierId()); BmsSubject subject = subjectService.getById(policyItem.getSubjectId()); //发票号 @@ -114,15 +119,15 @@ public class PortalOfCostApplication { payLqw.eq(PayPayment::getBillNumber,billNumber); long countPay = paymentService.count(payLqw); if(countPay>0){Assert.throwEx("发票号已存在,请勿重复提交");} - //TODO 校验商品信息 -// List skuCodes = createBo.getGoodsList().stream().map(a->a.getInventoryCode()).collect(Collectors.toList()); -// LambdaQueryWrapper goodsSyncLambdaQueryWrapper = new LambdaQueryWrapper<>(); -// goodsSyncLambdaQueryWrapper.eq(TzcPolicyGoodsSync::getPolicyItemCode,policyItem.getPolicyItemCode()); -// goodsSyncLambdaQueryWrapper.in(TzcPolicyGoodsSync::getSkuCode,skuCodes); -// long countSku = tzcPolicyGoodsSyncService.count(goodsSyncLambdaQueryWrapper); -// if(countSku < skuCodes.size()){ -// Assert.throwEx("部分商品不在政策范围内"); -// } + //校验商品信息 + List skuCodes = createBo.getGoodsList().stream().map(a->a.getInventoryCode()).collect(Collectors.toList()); + LambdaQueryWrapper goodsSyncLambdaQueryWrapper = new LambdaQueryWrapper<>(); + goodsSyncLambdaQueryWrapper.eq(TzcPolicyGoodsSync::getPolicyItemCode,policyItem.getPolicyItemCode()); + goodsSyncLambdaQueryWrapper.in(TzcPolicyGoodsSync::getSkuCode,skuCodes); + long countSku = tzcPolicyGoodsSyncService.count(goodsSyncLambdaQueryWrapper); + if(countSku < skuCodes.size()){ + Assert.throwEx("部分商品不在政策范围内"); + } //初始化sku列表 List processGoodsItems = createBo.getGoodsList(); List skuList = this.initSkuListOfProcess(createBo.getGoodsList()); @@ -132,6 +137,7 @@ public class PortalOfCostApplication { final BigDecimal OneHundred = new BigDecimal("100"); LocalDateTime nowTime = LocalDateTime.now(); LocalDate nowDate = LocalDate.now(); + Date nowDate_ = new Date(); String erpCode = createBo.getErpCode(); Long supplierId = Long.parseLong(supplier.getId()); BigDecimal totalAmount = createBo.getTotalAmount(); @@ -280,8 +286,15 @@ public class PortalOfCostApplication { // 因为政策申请已扣除预算,这里旧不需要再进行保存 // budgetLogService.saveBatch(budgetLogList); - //TODO 修改预算日志,记录政策使用情况 + //修改预算日志,记录政策使用情况 + TzcPolicyItemLog policyItemLog = TzcPolicyItemLog.toNewObject(policyItem,totalAmount); + policyItemLogService.save(policyItemLog); + //更新项使用情况 + TzcPolicyItem policyItemParam = new TzcPolicyItem(); + policyItemParam.setId(policyItem.getId()); + policyItemParam.setUsedAmount(policyItem.getUsedAmount().add(totalAmount)); + policyItemServiceService.updateById(policyItemParam); //保存核销申请 VtbVerification verification = new VtbVerification(); @@ -300,6 +313,34 @@ public class PortalOfCostApplication { verification.setPaymentState(ResultFlag.OK); verificationService.save(verification); + if(createBo.getToSaveCostCheckFlag()!=null&&createBo.getToSaveCostCheckFlag().equals(1)){ + //发送请求到中间服务 + XltApticlaim apticlaim = new XltApticlaim(); + apticlaim.setVerificationCode(verification.getVerificationCode()); + apticlaim.setCostCode(costApply.getCode()); + apticlaim.setCostCode2(activity.getActivityCode()); + apticlaim.setCusCode(verification.getSupplierCode()); + apticlaim.setAmount(totalAmount); + apticlaim.setSubjectCode(subject.getSubjectCode()); + apticlaim.setSubjectName(subject.getSubjectName()); + apticlaim.setExpType("TI"); + apticlaim.setApplyType("01"); + apticlaim.setEffDate(nowDate_); + apticlaim.setInvoiced("2"); + apticlaim.setCreateTime(nowDate_); + apticlaim.setStatus("00"); + apticlaim.setDealTime(nowDate_); + apticlaim.setTopic(costApply.getChargeTheme()); + try { + //todo 如果失败做补偿处理 + xiaoLuTonService.saveApticlaim(apticlaim); + log.info("发送对象(apticlaim)到OA服务成功"); + } catch (Exception e) { + e.printStackTrace(); + log.error("发送对象到OA服务失败,数据内容如下:{}", JsonUtil.objectToJson(apticlaim)); + } + } + //保存核销费用结果 VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); verificationSubject.setVerificationId(verification.getId()); @@ -349,6 +390,13 @@ public class PortalOfCostApplication { paymentItem.setSubjectCode(subject.getSubjectCode()); paymentItem.setSubjectName(subject.getSubjectName()); paymentItemService.save(paymentItem); + + if(createBo.getToSavePaymentFlag()!=null&&createBo.getToSavePaymentFlag().equals(1)){ + //TODO 保存支付记录 + XltPaymentRecord paymentRecord = new XltPaymentRecord(); + xiaoLuTonService.savePaymentRecord(paymentRecord); + } + } diff --git a/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItemLog.java b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItemLog.java new file mode 100644 index 00000000..2bf9eedb --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItemLog.java @@ -0,0 +1,200 @@ +package com.qs.serve.modules.tzc.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-03-02 + */ +@Data +@TableName("tzc_policy_item_log") +public class TzcPolicyItemLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 主题 */ + @NotBlank(message = "主题不能为空") + @Length(max = 60,message = "主题长度不能超过60字") + private String title; + + /** 政策id */ + @NotNull(message = "政策id不能为空") + private Long policyId; + + /** 政策编码 */ + @NotBlank(message = "政策编码不能为空") + @Length(max = 50,message = "政策编码长度不能超过50字") + private String policyItemCode; + + /** 开始时间 */ + @NotNull(message = "开始时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate policyStartDate; + + /** 结束时间 */ + @NotNull(message = "结束时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate policyEndDate; + + /** 状态:0-未使用;1-已通过;2-已同步;3-已用完 */ + @NotNull(message = "状态:0-未使用;1-已通过;2-已同步;3-已用完不能为空") + private Integer policyItemStatus; + + /** 本次满减金额 */ + @NotNull(message = "本次满减金额不能为空") + private BigDecimal currentAmount; + + /** 客户id */ + @NotNull(message = "客户id不能为空") + private Long supplierId; + + /** 客户编码 */ + @NotBlank(message = "客户编码不能为空") + @Length(max = 30,message = "客户编码长度不能超过30字") + private String supplierCode; + + /** 客户名称 */ + @NotBlank(message = "客户名称不能为空") + @Length(max = 30,message = "客户名称长度不能超过30字") + private String supplierName; + + /** 申请人 */ + @NotBlank(message = "申请人不能为空") + @Length(max = 32,message = "申请人长度不能超过32字") + private String userId; + + /** 申请人 */ + @NotBlank(message = "申请人不能为空") + @Length(max = 32,message = "申请人长度不能超过32字") + private String userCode; + + /** 申请人 */ + @NotBlank(message = "申请人不能为空") + @Length(max = 32,message = "申请人长度不能超过32字") + private String userName; + + /** 成本中心类型 */ + @NotBlank(message = "成本中心类型不能为空") + @Length(max = 50,message = "成本中心类型长度不能超过50字") + 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 = 50,message = "成本中心名称长度不能超过50字") + private String centerName; + + /** 科目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; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + 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; + + + public static TzcPolicyItemLog toNewObject(TzcPolicyItem source,BigDecimal totalAmount){ + TzcPolicyItemLog policyItemLog = new TzcPolicyItemLog(); + policyItemLog.setId(source.getId()); + policyItemLog.setTitle(source.getTitle()); + policyItemLog.setPolicyId(source.getPolicyId()); + policyItemLog.setPolicyItemCode(source.getPolicyItemCode()); + policyItemLog.setPolicyStartDate(source.getPolicyStartDate()); + policyItemLog.setPolicyEndDate(source.getPolicyEndDate()); + policyItemLog.setPolicyItemStatus(source.getPolicyItemStatus()); + policyItemLog.setCurrentAmount(totalAmount); + policyItemLog.setSupplierId(source.getSupplierId()); + policyItemLog.setSupplierCode(source.getSupplierCode()); + policyItemLog.setSupplierName(source.getSupplierName()); + policyItemLog.setUserId(source.getUserId()); + policyItemLog.setUserCode(source.getUserCode()); + policyItemLog.setUserName(source.getUserName()); + policyItemLog.setCenterType(source.getCenterType()); + policyItemLog.setCenterId(source.getCenterId()); + policyItemLog.setCenterCode(source.getCenterCode()); + policyItemLog.setCenterName(source.getCenterName()); + policyItemLog.setSubjectId(source.getSubjectId()); + policyItemLog.setSubjectCode(source.getSubjectCode()); + policyItemLog.setSubjectName(source.getSubjectName()); + policyItemLog.setRemark(source.getRemark()); + policyItemLog.setCreateTime(source.getCreateTime()); + policyItemLog.setUpdateTime(source.getUpdateTime()); + policyItemLog.setTenantId(source.getTenantId()); + policyItemLog.setCreateBy(source.getCreateBy()); + policyItemLog.setUpdateBy(source.getUpdateBy()); + policyItemLog.setDelFlag(source.getDelFlag()); + return policyItemLog; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyItemLogMapper.java b/src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyItemLogMapper.java new file mode 100644 index 00000000..a4845f32 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyItemLogMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.tzc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.tzc.entity.TzcPolicyItemLog; + +/** + * 政策项使用日志 Mapper + * @author YenHex + * @date 2023-03-02 + */ +public interface TzcPolicyItemLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyItemLogService.java b/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyItemLogService.java new file mode 100644 index 00000000..c989d2f6 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyItemLogService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.tzc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.tzc.entity.TzcPolicyItemLog; + +/** + * 政策项使用日志 服务接口 + * @author YenHex + * @date 2023-03-02 + */ +public interface TzcPolicyItemLogService extends IService { + +} + diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemLogServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemLogServiceImpl.java new file mode 100644 index 00000000..79865ca1 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyItemLogServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.tzc.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.tzc.entity.TzcPolicyItemLog; +import com.qs.serve.modules.tzc.service.TzcPolicyItemLogService; +import com.qs.serve.modules.tzc.mapper.TzcPolicyItemLogMapper; + +/** + * 政策项使用日志 服务实现类 + * @author YenHex + * @since 2023-03-02 + */ +@Slf4j +@Service +@AllArgsConstructor +public class TzcPolicyItemLogServiceImpl extends ServiceImpl implements TzcPolicyItemLogService { + +} +