|
|
@ -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<String> skuCodes = createBo.getGoodsList().stream().map(a->a.getInventoryCode()).collect(Collectors.toList());
|
|
|
|
// LambdaQueryWrapper<TzcPolicyGoodsSync> 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<String> skuCodes = createBo.getGoodsList().stream().map(a->a.getInventoryCode()).collect(Collectors.toList()); |
|
|
|
LambdaQueryWrapper<TzcPolicyGoodsSync> 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<ProcessGoodsItem> processGoodsItems = createBo.getGoodsList(); |
|
|
|
List<GoodsSku> 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); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|