Browse Source

对接核销费用申请

contract
Yen 2 years ago
parent
commit
a0ea68b918
  1. 1
      src/main/java/com/qs/serve/modules/pay/entity/PayPayment.java
  2. 6
      src/main/java/com/qs/serve/modules/pay/entity/PayPaymentItem.java
  3. 3
      src/main/java/com/qs/serve/modules/seeyon/service/XiaoLuTonService.java
  4. 5
      src/main/java/com/qs/serve/modules/seeyon/service/impl/XiaoLuTonServiceImpl.java
  5. 1
      src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java
  6. 11
      src/main/java/com/qs/serve/modules/third/PortalController.java
  7. 6
      src/main/java/com/qs/serve/modules/third/PortalOfCostController.java
  8. 74
      src/main/java/com/qs/serve/modules/third/entity/AptPolicyPayment.java
  9. 136
      src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java
  10. 6
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java
  11. 6
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java
  12. 26
      src/main/java/com/qs/serve/task/TzcPolicyTask.java

1
src/main/java/com/qs/serve/modules/pay/entity/PayPayment.java

@ -64,6 +64,7 @@ public class PayPayment implements Serializable {
@NotNull(message = "支付金额不能为空") @NotNull(message = "支付金额不能为空")
private BigDecimal payAmount; private BigDecimal payAmount;
/** 发货单号 */
@TableField(condition = SqlCondition.LIKE) @TableField(condition = SqlCondition.LIKE)
private String erpCode; private String erpCode;

6
src/main/java/com/qs/serve/modules/pay/entity/PayPaymentItem.java

@ -71,6 +71,12 @@ public class PayPaymentItem implements Serializable {
@Length(max = 30,message = "活动编码长度不能超过30字") @Length(max = 30,message = "活动编码长度不能超过30字")
private String activityCode; private String activityCode;
/** 政策项id */
private Long policyItemId;
/** 政策项编码 */
private String policyItemCode;
/** 科目id */ /** 科目id */
@NotNull(message = "科目id不能为空") @NotNull(message = "科目id不能为空")
private Long subjectId; private Long subjectId;

3
src/main/java/com/qs/serve/modules/seeyon/service/XiaoLuTonService.java

@ -35,4 +35,7 @@ public interface XiaoLuTonService {
*/ */
R<String> savePolicyItem(PolicyItemDto policyItemDto); R<String> savePolicyItem(PolicyItemDto policyItemDto);
R<String> listPolicyPayments();
} }

5
src/main/java/com/qs/serve/modules/seeyon/service/impl/XiaoLuTonServiceImpl.java

@ -39,4 +39,9 @@ public class XiaoLuTonServiceImpl implements XiaoLuTonService {
return syBaseService.postBase(TbsSeeYonConst.XLT_SAVE_POLICY,policyItemDto,title); return syBaseService.postBase(TbsSeeYonConst.XLT_SAVE_POLICY,policyItemDto,title);
} }
@Override
public R<String> listPolicyPayments() {
String title = "获取最近政策记录";
return syBaseService.postBase(TbsSeeYonConst.XLT_LIST_POLICY,null,title);
}
} }

1
src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java

@ -46,5 +46,6 @@ public interface TbsSeeYonConst {
String XLT_SAVE_CHECK = "/xlt/saveCheck"; String XLT_SAVE_CHECK = "/xlt/saveCheck";
String XLT_SAVE_PAYMENT = "/xlt/savePayment"; String XLT_SAVE_PAYMENT = "/xlt/savePayment";
String XLT_SAVE_POLICY = "/xlt/savePolicyItem"; String XLT_SAVE_POLICY = "/xlt/savePolicyItem";
String XLT_LIST_POLICY = "/xlt/listPolicyPayments";
} }

11
src/main/java/com/qs/serve/modules/third/PortalController.java

@ -1,13 +1,19 @@
package com.qs.serve.modules.third; package com.qs.serve.modules.third;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonArray;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.util.JsonUtil;
import com.qs.serve.modules.seeyon.service.XiaoLuTonService;
import com.qs.serve.modules.third.entity.AptPolicyPayment;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.List;
/** /**
* 第三方接口核销系统 * 第三方接口核销系统
* headers+ => tenant-id = 001 * headers+ => tenant-id = 001
@ -21,6 +27,8 @@ import javax.servlet.http.HttpServletRequest;
@RequestMapping("thirty/") @RequestMapping("thirty/")
public class PortalController { public class PortalController {
private XiaoLuTonService xiaoLuTonService;
/** /**
* 测试连通性 * 测试连通性
* @param request * @param request
@ -33,5 +41,4 @@ public class PortalController {
} }
} }

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

@ -42,11 +42,11 @@ public class PortalOfCostController {
* @param createBo * @param createBo
* @return * @return
*/ */
@PostMapping("createByPolicy") //@PostMapping("createByPolicy")
public R<?> createCostProcess2(@Valid @RequestBody ProcessCreatePolicyCostBo createBo, HttpServletRequest request){ public R<?> createCostProcess2(@Valid @RequestBody ProcessCreatePolicyCostBo createBo, HttpServletRequest request){
ThirdTokenUtil.checkToken(request); ThirdTokenUtil.checkToken(request);
log.debug("一站式创建费用(政策)===>{}", JsonUtil.objectToJson(createBo)); log.debug("一站式创建费用(政策)===>{}", JsonUtil.objectToJson(createBo));
//portalOfCostApplication.createCostProcessByPolicy(createBo); portalOfCostApplication.createCostProcessByPolicy(createBo);
return R.ok(); return R.ok();
} }
@ -65,4 +65,6 @@ public class PortalOfCostController {
} }
} }

74
src/main/java/com/qs/serve/modules/third/entity/AptPolicyPayment.java

@ -0,0 +1,74 @@
package com.qs.serve.modules.third.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @author YenHex
* @since 2023/3/15
*/
@Data
public class AptPolicyPayment {
private Long id;
@TableField(value = "aptifee_dingDanHao")
private String orderNo;
@TableField(value = "aptifee_quDaoZheCeHao")
private String policyItemCode;
@TableField(value = "aptifee_jingXiaoShangHao")
private String cusCode;
@TableField(value = "aptifee_chanPinHao")
private String invCode;
@TableField(value = "aptifee_kaiShiShiJian")
private Date startDate;
@TableField(value = "aptifee_jieShuShiJian")
private Date endDate;
@TableField(value = "aptifee_jinE")
private BigDecimal amount;
@TableField(value = "aptifee_keMuHao")
private String subjectCode;
@TableField(value = "aptifee_status")
private String status;
/** 发票号 */
@TableField(value = "aptifee_erpHao")
private String billCode;
@TableField(value = "aptifee_erpZhuTi")
private String title;
/** 核销编号 */
@TableField(value = "apticlaimfb_recid")
private String checkCostCode;
@TableField(value = "aptifee_isQuXiao")
private Integer cancelFlag;
@TableField(value = "aptifee_create_date")
private Date createTime;
@TableField(value = "aptifee_deal_date")
private Date dealTime;
@TableField(value = "deleteId")
private String deleteId;
@TableField(value = "aptifee_chengBenZhongXin")
private String centerCode;
}

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

@ -29,6 +29,7 @@ import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.tbs.service.*;
import com.qs.serve.modules.third.entity.AptPolicyPayment;
import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo; import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo;
import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo; import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo;
import com.qs.serve.modules.third.entity.ProcessGoodsItem; import com.qs.serve.modules.third.entity.ProcessGoodsItem;
@ -93,14 +94,122 @@ public class PortalOfCostApplication {
private VtbVerificationService verificationService; private VtbVerificationService verificationService;
private VtbVerificationSubjectService verificationSubjectService; private VtbVerificationSubjectService verificationSubjectService;
private TzcPolicyService policyService;
private TzcPolicyItemService policyItemServiceService; private TzcPolicyItemService policyItemServiceService;
private TzcPolicyItemLogService policyItemLogService; private TzcPolicyItemLogService policyItemLogService;
private TzcPolicyGoodsSyncService tzcPolicyGoodsSyncService; private TzcPolicyGoodsSyncService tzcPolicyGoodsSyncService;
private final XiaoLuTonService xiaoLuTonService; private final XiaoLuTonService xiaoLuTonService;
@Transactional(rollbackFor = Exception.class)
public void syncXltPolicyItemPayment(AptPolicyPayment createBo){
TzcPolicyItem policyItem = policyItemServiceService.getByPolicyItemCode(createBo.getPolicyItemCode());
if(policyItem==null){
return;
}
//发票号
String billNumber = createBo.getBillCode();
//拦截是否已保存
LambdaQueryWrapper<PayPayment> payLqw = new LambdaQueryWrapper<>();
payLqw.eq(PayPayment::getBillNumber,billNumber);
long countPay = paymentService.count(payLqw);
if(countPay>0){
//发票号已存在
return;
}
BmsSupplier supplier = supplierService.getById(policyItem.getSupplierId());
BmsSubject subject = subjectService.getById(policyItem.getSubjectId());
//常用参数
LocalDateTime nowTime = LocalDateTime.now();
String erpCode = "";
Long supplierId = Long.parseLong(supplier.getId());
BigDecimal totalAmount = createBo.getAmount();
//修改预算日志,记录政策使用情况
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();
verification.setVerificationCode("HX"+ IdUtil.timeStampId());
verification.setFinishedTime(nowTime);
verification.setVerificationState(VtbVerificationState.Finished.getCode());
verification.setPolicyItemId(policyItem.getId());
verification.setPolicyItemCode(policyItem.getPolicyItemCode());
verification.setSupplierId(supplierId);
verification.setSupplierCode(supplier.getCode());
verification.setSupplierName(supplier.getName());
verification.setUserId("000");
verification.setUserCode("000");
verification.setUserName("ApiUser");
verification.setAmount(totalAmount);
verification.setAmountRecord(totalAmount);
verification.setPaymentState(ResultFlag.OK);
verificationService.save(verification);
//保存核销费用结果
VtbVerificationSubject verificationSubject = new VtbVerificationSubject();
verificationSubject.setVerificationId(verification.getId());
verificationSubject.setVerificationSubCode(verification.getVerificationCode()+"_1");
verificationSubject.setPolicyItemId(policyItem.getId());
verificationSubject.setPolicyItemCode(policyItem.getPolicyItemCode());
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.setPayFinishedFlag(ResultFlag.OK);
verificationSubject.setUsedAmount(totalAmount);
verificationSubject.setUsedAmountRecord(totalAmount);
verificationSubject.setCountPerson(0);
verificationSubject.setCountSession(0);
verificationSubjectService.save(verificationSubject);
//保存支付
PayPayment payPayment = new PayPayment();
payPayment.setPayType(PaymentType.PAYMENT);
payPayment.setPayCode("PM"+ StringUtils.genShortId());
payPayment.setSupplierId(supplierId);
payPayment.setSupplierCode(supplier.getCode());
payPayment.setSupplierName(supplier.getName());
payPayment.setPayAmount(totalAmount);
payPayment.setUserId("000");
payPayment.setUserCode("000");
payPayment.setUserName("ApiUser");
payPayment.setPayTime(nowTime);
payPayment.setErpCode(erpCode);
payPayment.setBillNumber(billNumber);
paymentService.save(payPayment);
PayPaymentItem paymentItem = new PayPaymentItem();
paymentItem.setPaymentId(payPayment.getId());
paymentItem.setPayType(PaymentType.PAYMENT);
paymentItem.setSupplierId(supplierId);
paymentItem.setItemPayAmount(totalAmount);
paymentItem.setVerificationId(verification.getId());
paymentItem.setVerificationSubjectId(verificationSubject.getId());
paymentItem.setPolicyItemId(policyItem.getId());
paymentItem.setPolicyItemCode(policyItem.getPolicyItemCode());
paymentItem.setSubjectId(subject.getId());
paymentItem.setSubjectCode(subject.getSubjectCode());
paymentItem.setSubjectName(subject.getSubjectName());
paymentItemService.save(paymentItem);
}
/**
* 已弃用适用 syncXltPolicyItemPayment代替
* @param createBo
*/
@Deprecated
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void createCostProcessByPolicy(ProcessCreatePolicyCostBo createBo){ public void createCostProcessByPolicy(ProcessCreatePolicyCostBo createBo){
SysUser user = userService.getByAccount(createBo.getUserCode()); SysUser user = userService.getByAccount(createBo.getUserCode());
@ -130,7 +239,12 @@ public class PortalOfCostApplication {
} }
//初始化sku列表 //初始化sku列表
List<ProcessGoodsItem> processGoodsItems = createBo.getGoodsList(); List<ProcessGoodsItem> processGoodsItems = createBo.getGoodsList();
List<GoodsSku> skuList = this.initSkuListOfProcess(createBo.getGoodsList()); List<String> invCodes = new ArrayList<>();
if(CollectionUtil.isNotEmpty(createBo.getGoodsList())){
invCodes = createBo.getGoodsList().stream()
.map(ProcessGoodsItem::getInventoryCode).distinct().collect(Collectors.toList());;
}
List<GoodsSku> skuList = this.initSkuListOfProcess(invCodes);
//常用参数 //常用参数
final String GOODS_TYPE = "sku"; final String GOODS_TYPE = "sku";
final String CENTER_TYPE = "customer"; final String CENTER_TYPE = "customer";
@ -407,9 +521,6 @@ public class PortalOfCostApplication {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void createCostProcess(ProcessCreateCostApplyBo createBo){ public void createCostProcess(ProcessCreateCostApplyBo createBo){
SysUser user = userService.getByAccount(createBo.getUserCode()); SysUser user = userService.getByAccount(createBo.getUserCode());
@ -437,7 +548,12 @@ public class PortalOfCostApplication {
} }
//初始化sku列表 //初始化sku列表
List<ProcessGoodsItem> processGoodsItems = createBo.getGoodsList(); List<ProcessGoodsItem> processGoodsItems = createBo.getGoodsList();
List<GoodsSku> skuList = this.initSkuListOfProcess(createBo.getGoodsList()); List<String> invCodeList = new ArrayList<>();
if(CollectionUtil.isNotEmpty(createBo.getGoodsList())){
invCodeList = createBo.getGoodsList().stream()
.map(ProcessGoodsItem::getInventoryCode).distinct().collect(Collectors.toList());
}
List<GoodsSku> skuList = this.initSkuListOfProcess(invCodeList);
//常用参数 //常用参数
final String GOODS_TYPE = "sku"; final String GOODS_TYPE = "sku";
final String CENTER_TYPE = "customer"; final String CENTER_TYPE = "customer";
@ -704,14 +820,12 @@ public class PortalOfCostApplication {
/** /**
* 创建流程中初始化SKU列表 * 创建流程中初始化SKU列表
* @param goodsList * @param invCodes
* @return * @return
*/ */
private List<GoodsSku> initSkuListOfProcess(List<ProcessGoodsItem> goodsList) { private List<GoodsSku> initSkuListOfProcess(List<String> invCodes) {
List<GoodsSku> goodsSkus = null; List<GoodsSku> goodsSkus = null;
if(CollectionUtil.isNotEmpty(goodsList)){ if(CollectionUtil.isNotEmpty(invCodes)){
List<String> invCodes = goodsList.stream()
.map(ProcessGoodsItem::getInventoryCode).distinct().collect(Collectors.toList());
LambdaQueryWrapper<GoodsSku> skuLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<GoodsSku> skuLqw = new LambdaQueryWrapper<>();
skuLqw.in(GoodsSku::getSkuCode,invCodes); skuLqw.in(GoodsSku::getSkuCode,invCodes);
goodsSkus = goodsSkuService.list(skuLqw); goodsSkus = goodsSkuService.list(skuLqw);

6
src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java

@ -41,6 +41,12 @@ public class VtbVerification implements Serializable {
/** 活动id */ /** 活动id */
private Long activityId; private Long activityId;
/** 政策项id */
private Long policyItemId;
/** 政策项编码 */
private String policyItemCode;
/** 附件id */ /** 附件id */
@TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR)
private String[] attachIds; private String[] attachIds;

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

@ -46,6 +46,12 @@ public class VtbVerificationSubject implements Serializable {
@NotNull(message = "活动id不能为空") @NotNull(message = "活动id不能为空")
private Long activityId; private Long activityId;
/** 政策项id */
private Long policyItemId;
/** 政策项编码 */
private String policyItemCode;
/** 科目id */ /** 科目id */
@NotNull(message = "科目id不能为空") @NotNull(message = "科目id不能为空")
private Long subjectId; private Long subjectId;

26
src/main/java/com/qs/serve/task/TzcPolicyTask.java

@ -1,6 +1,11 @@
package com.qs.serve.task; package com.qs.serve.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.common.util.JsonUtil;
import com.qs.serve.modules.seeyon.service.XiaoLuTonService;
import com.qs.serve.modules.third.entity.AptPolicyPayment;
import com.qs.serve.modules.third.service.PortalOfCostApplication;
import com.qs.serve.modules.tzc.common.TzPolicyItemStatus; import com.qs.serve.modules.tzc.common.TzPolicyItemStatus;
import com.qs.serve.modules.tzc.entity.TzcPolicyItem; import com.qs.serve.modules.tzc.entity.TzcPolicyItem;
import com.qs.serve.modules.tzc.service.TzcPolicyApplicationService; import com.qs.serve.modules.tzc.service.TzcPolicyApplicationService;
@ -9,6 +14,8 @@ import com.qs.serve.modules.tzc.service.TzcPolicyService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* 政策同步方法 * 政策同步方法
* @author YenHex * @author YenHex
@ -21,9 +28,26 @@ public class TzcPolicyTask {
private TzcPolicyService policyService; private TzcPolicyService policyService;
private TzcPolicyItemService policyItemService; private TzcPolicyItemService policyItemService;
private TzcPolicyApplicationService policyApplicationService; private TzcPolicyApplicationService policyApplicationService;
private PortalOfCostApplication portalOfCostApplication;
private XiaoLuTonService xiaoLuTonService;
/**
* 根据销路通支付数据和本系统政策匹对并生成本系统核销及支付信息
*/
public void syncFromXltPolicyPayment(){
xiaoLuTonService.listPolicyPayments();
Object obj = xiaoLuTonService.listPolicyPayments().getData();
String json = obj.toString();
List<AptPolicyPayment> policyPaymentList = JsonUtil.jsonToList(json,AptPolicyPayment.class);
if(CollectionUtil.isNotEmpty(policyPaymentList)){
for (AptPolicyPayment policyPayment : policyPaymentList) {
portalOfCostApplication.syncXltPolicyItemPayment(policyPayment);
}
}
}
/** /**
* 同步数据到销路通 * 同步政策到销路通
*/ */
public void syncPolicyToXlt(){ public void syncPolicyToXlt(){
LambdaQueryWrapper<TzcPolicyItem> itemLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TzcPolicyItem> itemLqw = new LambdaQueryWrapper<>();

Loading…
Cancel
Save