From a0ea68b9185984953226d1ecc77eb74c9526da0c Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 15 Mar 2023 11:08:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=A0=B8=E9=94=80=E8=B4=B9?= =?UTF-8?q?=E7=94=A8=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serve/modules/pay/entity/PayPayment.java | 1 + .../modules/pay/entity/PayPaymentItem.java | 6 + .../seeyon/service/XiaoLuTonService.java | 3 + .../service/impl/XiaoLuTonServiceImpl.java | 5 + .../modules/tbs/common/TbsSeeYonConst.java | 1 + .../serve/modules/third/PortalController.java | 11 +- .../modules/third/PortalOfCostController.java | 6 +- .../third/entity/AptPolicyPayment.java | 74 ++++++++++ .../service/PortalOfCostApplication.java | 136 ++++++++++++++++-- .../modules/vtb/entity/VtbVerification.java | 6 + .../vtb/entity/VtbVerificationSubject.java | 6 + .../java/com/qs/serve/task/TzcPolicyTask.java | 26 +++- 12 files changed, 265 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/third/entity/AptPolicyPayment.java diff --git a/src/main/java/com/qs/serve/modules/pay/entity/PayPayment.java b/src/main/java/com/qs/serve/modules/pay/entity/PayPayment.java index c9bd4307..f221e2aa 100644 --- a/src/main/java/com/qs/serve/modules/pay/entity/PayPayment.java +++ b/src/main/java/com/qs/serve/modules/pay/entity/PayPayment.java @@ -64,6 +64,7 @@ public class PayPayment implements Serializable { @NotNull(message = "支付金额不能为空") private BigDecimal payAmount; + /** 发货单号 */ @TableField(condition = SqlCondition.LIKE) private String erpCode; diff --git a/src/main/java/com/qs/serve/modules/pay/entity/PayPaymentItem.java b/src/main/java/com/qs/serve/modules/pay/entity/PayPaymentItem.java index ce40171c..8ec285d2 100644 --- a/src/main/java/com/qs/serve/modules/pay/entity/PayPaymentItem.java +++ b/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字") private String activityCode; + /** 政策项id */ + private Long policyItemId; + + /** 政策项编码 */ + private String policyItemCode; + /** 科目id */ @NotNull(message = "科目id不能为空") private Long subjectId; diff --git a/src/main/java/com/qs/serve/modules/seeyon/service/XiaoLuTonService.java b/src/main/java/com/qs/serve/modules/seeyon/service/XiaoLuTonService.java index a1fc8705..40c1d4c2 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/service/XiaoLuTonService.java +++ b/src/main/java/com/qs/serve/modules/seeyon/service/XiaoLuTonService.java @@ -35,4 +35,7 @@ public interface XiaoLuTonService { */ R savePolicyItem(PolicyItemDto policyItemDto); + + R listPolicyPayments(); + } diff --git a/src/main/java/com/qs/serve/modules/seeyon/service/impl/XiaoLuTonServiceImpl.java b/src/main/java/com/qs/serve/modules/seeyon/service/impl/XiaoLuTonServiceImpl.java index ca09d9ca..a2236e2b 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/service/impl/XiaoLuTonServiceImpl.java +++ b/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); } + @Override + public R listPolicyPayments() { + String title = "获取最近政策记录"; + return syBaseService.postBase(TbsSeeYonConst.XLT_LIST_POLICY,null,title); + } } diff --git a/src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java b/src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java index 089e6971..1bb0ddf4 100644 --- a/src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java +++ b/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_PAYMENT = "/xlt/savePayment"; String XLT_SAVE_POLICY = "/xlt/savePolicyItem"; + String XLT_LIST_POLICY = "/xlt/listPolicyPayments"; } diff --git a/src/main/java/com/qs/serve/modules/third/PortalController.java b/src/main/java/com/qs/serve/modules/third/PortalController.java index b3ffadf8..fd9fccb8 100644 --- a/src/main/java/com/qs/serve/modules/third/PortalController.java +++ b/src/main/java/com/qs/serve/modules/third/PortalController.java @@ -1,13 +1,19 @@ 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.util.JsonUtil; +import com.qs.serve.modules.seeyon.service.XiaoLuTonService; +import com.qs.serve.modules.third.entity.AptPolicyPayment; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; - +import java.util.List; /** * 【第三方接口】核销系统 * headers+ => tenant-id = 001 @@ -21,6 +27,8 @@ import javax.servlet.http.HttpServletRequest; @RequestMapping("thirty/") public class PortalController { + private XiaoLuTonService xiaoLuTonService; + /** * 测试连通性 * @param request @@ -33,5 +41,4 @@ public class PortalController { } - } diff --git a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java index 985a85a6..ccec786d 100644 --- a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java +++ b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java @@ -42,11 +42,11 @@ public class PortalOfCostController { * @param createBo * @return */ - @PostMapping("createByPolicy") + //@PostMapping("createByPolicy") public R createCostProcess2(@Valid @RequestBody ProcessCreatePolicyCostBo createBo, HttpServletRequest request){ ThirdTokenUtil.checkToken(request); log.debug("一站式创建费用(政策)===>{}", JsonUtil.objectToJson(createBo)); - //portalOfCostApplication.createCostProcessByPolicy(createBo); + portalOfCostApplication.createCostProcessByPolicy(createBo); return R.ok(); } @@ -65,4 +65,6 @@ public class PortalOfCostController { } + + } diff --git a/src/main/java/com/qs/serve/modules/third/entity/AptPolicyPayment.java b/src/main/java/com/qs/serve/modules/third/entity/AptPolicyPayment.java new file mode 100644 index 00000000..fe9161b9 --- /dev/null +++ b/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; + +} 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 7340f643..9e562a6f 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 @@ -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.dto.TbsBudgetCostResult; 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.ProcessCreatePolicyCostBo; import com.qs.serve.modules.third.entity.ProcessGoodsItem; @@ -93,14 +94,122 @@ public class PortalOfCostApplication { private VtbVerificationService verificationService; private VtbVerificationSubjectService verificationSubjectService; - private TzcPolicyService policyService; private TzcPolicyItemService policyItemServiceService; private TzcPolicyItemLogService policyItemLogService; private TzcPolicyGoodsSyncService tzcPolicyGoodsSyncService; 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 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) public void createCostProcessByPolicy(ProcessCreatePolicyCostBo createBo){ SysUser user = userService.getByAccount(createBo.getUserCode()); @@ -130,7 +239,12 @@ public class PortalOfCostApplication { } //初始化sku列表 List processGoodsItems = createBo.getGoodsList(); - List skuList = this.initSkuListOfProcess(createBo.getGoodsList()); + List invCodes = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(createBo.getGoodsList())){ + invCodes = createBo.getGoodsList().stream() + .map(ProcessGoodsItem::getInventoryCode).distinct().collect(Collectors.toList());; + } + List skuList = this.initSkuListOfProcess(invCodes); //常用参数 final String GOODS_TYPE = "sku"; final String CENTER_TYPE = "customer"; @@ -407,9 +521,6 @@ public class PortalOfCostApplication { - - - @Transactional(rollbackFor = Exception.class) public void createCostProcess(ProcessCreateCostApplyBo createBo){ SysUser user = userService.getByAccount(createBo.getUserCode()); @@ -437,7 +548,12 @@ public class PortalOfCostApplication { } //初始化sku列表 List processGoodsItems = createBo.getGoodsList(); - List skuList = this.initSkuListOfProcess(createBo.getGoodsList()); + List invCodeList = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(createBo.getGoodsList())){ + invCodeList = createBo.getGoodsList().stream() + .map(ProcessGoodsItem::getInventoryCode).distinct().collect(Collectors.toList()); + } + List skuList = this.initSkuListOfProcess(invCodeList); //常用参数 final String GOODS_TYPE = "sku"; final String CENTER_TYPE = "customer"; @@ -704,14 +820,12 @@ public class PortalOfCostApplication { /** * 创建流程中,初始化SKU列表 - * @param goodsList + * @param invCodes * @return */ - private List initSkuListOfProcess(List goodsList) { + private List initSkuListOfProcess(List invCodes) { List goodsSkus = null; - if(CollectionUtil.isNotEmpty(goodsList)){ - List invCodes = goodsList.stream() - .map(ProcessGoodsItem::getInventoryCode).distinct().collect(Collectors.toList()); + if(CollectionUtil.isNotEmpty(invCodes)){ LambdaQueryWrapper skuLqw = new LambdaQueryWrapper<>(); skuLqw.in(GoodsSku::getSkuCode,invCodes); goodsSkus = goodsSkuService.list(skuLqw); diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java index 051a4718..72aed23e 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java @@ -41,6 +41,12 @@ public class VtbVerification implements Serializable { /** 活动id */ private Long activityId; + /** 政策项id */ + private Long policyItemId; + + /** 政策项编码 */ + private String policyItemCode; + /** 附件id */ @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) private String[] attachIds; 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 a1a7e065..045e37be 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 @@ -46,6 +46,12 @@ public class VtbVerificationSubject implements Serializable { @NotNull(message = "活动id不能为空") private Long activityId; + /** 政策项id */ + private Long policyItemId; + + /** 政策项编码 */ + private String policyItemCode; + /** 科目id */ @NotNull(message = "科目id不能为空") private Long subjectId; diff --git a/src/main/java/com/qs/serve/task/TzcPolicyTask.java b/src/main/java/com/qs/serve/task/TzcPolicyTask.java index b43c3643..1352903f 100644 --- a/src/main/java/com/qs/serve/task/TzcPolicyTask.java +++ b/src/main/java/com/qs/serve/task/TzcPolicyTask.java @@ -1,6 +1,11 @@ package com.qs.serve.task; 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.entity.TzcPolicyItem; import com.qs.serve.modules.tzc.service.TzcPolicyApplicationService; @@ -9,6 +14,8 @@ import com.qs.serve.modules.tzc.service.TzcPolicyService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import java.util.List; +import java.util.stream.Collectors; + /** * 政策同步方法 * @author YenHex @@ -21,9 +28,26 @@ public class TzcPolicyTask { private TzcPolicyService policyService; private TzcPolicyItemService policyItemService; private TzcPolicyApplicationService policyApplicationService; + private PortalOfCostApplication portalOfCostApplication; + private XiaoLuTonService xiaoLuTonService; + + /** + * 根据销路通支付数据,和本系统政策匹对,并生成本系统核销及支付信息 + */ + public void syncFromXltPolicyPayment(){ + xiaoLuTonService.listPolicyPayments(); + Object obj = xiaoLuTonService.listPolicyPayments().getData(); + String json = obj.toString(); + List policyPaymentList = JsonUtil.jsonToList(json,AptPolicyPayment.class); + if(CollectionUtil.isNotEmpty(policyPaymentList)){ + for (AptPolicyPayment policyPayment : policyPaymentList) { + portalOfCostApplication.syncXltPolicyItemPayment(policyPayment); + } + } + } /** - * 同步数据到销路通 + * 同步政策到销路通 */ public void syncPolicyToXlt(){ LambdaQueryWrapper itemLqw = new LambdaQueryWrapper<>();