diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java index 7604cab2..032043d8 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java @@ -11,6 +11,8 @@ import com.mdp.safe.client.utils.LoginUtils; import com.xm.core.entity.XmProjectMCostUser; import com.xm.core.entity.XmTask; import com.xm.core.entity.XmTaskExecuser; +import com.xm.core.service.client.CashOperateServie; +import com.xm.core.service.client.MkClient; import com.xm.core.service.push.XmPushMsgService; import com.xm.core.vo.XmProjectGroupVo; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +47,12 @@ public class XmTaskExecuserService extends BaseService { @Autowired XmPushMsgService pushMsgService ; + + @Autowired + CashOperateServie cashOperateServie; + + @Autowired + MkClient mkClient; public void addExecuser(XmTaskExecuser xmTaskExecuser){ User user = LoginUtils.getCurrentUserInfo(); @@ -458,7 +466,10 @@ public class XmTaskExecuserService extends BaseService { this.updateFlowStateByProcInst("1", flowVars); }else if("PROCESS_COMPLETED".equals(eventName)) { if("1".equals(agree)) { //结算通过,需要调用财务系统进行记账结算到用户的结算账户中。//用户可以通过该账户提现取现金 - // todo 需要调用财务系统进行记账结算到用户的结算账户中。用户可以通过该账户提现取现金 + // 需要调用财务系统进行记账结算到用户的结算账户中。用户可以通过该账户提现取现金 + cashOperateServie.shopBalancePayToClient(bizExecuser.getBranchId(),"platform",bizExecuser.getId(),bizExecuser.getSettleAmount(),bizExecuser.getTaskName()+"结算费用给执行人",bizExecuser.getUserid(),bizExecuser.getBranchId()); + // 需要调用营销系统,计算佣金 + mkClient.pushActiExecOrder(bizExecuser.getTaskId(), bizExecuser.getUserid(), bizExecuser.getBranchId(),bizExecuser.getTaskId(),new BigDecimal(1),bizExecuser.getSettleAmount(),bizExecuser.getSettleAmount()); flowVars.put("settleStatus","6"); flowVars.put("status","6"); this.updateFlowStateByProcInst("2", flowVars); diff --git a/xm-core/src/main/java/com/xm/core/service/client/CashOperateServie.java b/xm-core/src/main/java/com/xm/core/service/client/CashOperateServie.java new file mode 100644 index 00000000..e2034e0a --- /dev/null +++ b/xm-core/src/main/java/com/xm/core/service/client/CashOperateServie.java @@ -0,0 +1,144 @@ +package com.xm.core.service.client; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.mdp.core.entity.Tips; +import com.mdp.core.err.BizException; +import com.mdp.core.utils.BaseUtils; +import com.mdp.core.utils.SequenceFormat; +import com.mdp.micro.client.CallBizService; +import com.mdp.tpa.client.entity.AppShopConfig; +import com.mdp.tpa.client.service.AppShopConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +@Service +public class CashOperateServie { + @Autowired + CallBizService restTemplate; + + @Autowired + ObjectMapper om; + + @Autowired + AppShopConfigService appShopConfigService; + + Set userCardCodeSet=new HashSet(1000); + + + /** + * 结算商家付款给客户。不适用第三方支付、而是直接使用本系统账户余额支付。登记流水及记账一次性完成 + * @param payShopId 支付商户编号 + * @param payLocationId 支付方店铺编号 + * @param acctPrjType 核算项目类型 platfrom/shop/location + * @param orderId 订单号 如没有,调用者自行编码一个订单号 + * @param orderAmount 订单总金额 如果有多次付款,即为所有子单总金额之和 + * @param remark 备注 + * @param goodsShopId 收款方商户编号 + * @param goodsLocationId 收款方店铺编号 + * @return + */ + public Map shopBalancePayToClient(String payShopId,String payLocationId,String acctPrjType, String orderId, BigDecimal orderAmount, String remark, + String incomeUserid, String goodsShopId, String goodsLocationId){ + String urls = "/accore/accore/tpa/pay/shopBalancePayToClient"; + Map m=new HashMap<>(); + m.put("payShopId", payShopId); + m.put("payLocationId", payLocationId); + m.put("acctPrjType", acctPrjType); + m.put("orderId",orderId); + m.put("orderAmount", orderAmount); + m.put("remark", remark); + m.put("incomeUserid", incomeUserid); + m.put("goodsShopId", goodsShopId); + m.put("goodsLocationId", goodsLocationId); + Map tipMap = restTemplate.postForMap(urls,m); + Tips tips= BaseUtils.mapToTips(tipMap); + if(!tips.isOk()){ + throw new BizException(tips); + } + return tipMap; + } + + + /** + * 结算商家付款给客户。不适用第三方支付、而是直接使用本系统账户余额支付。登记流水及记账一次性完成 + * @param payBranchId 支付商户归属机构编号 + * @param acctPrjType 核算项目类型 platfrom/shop/location + * @param orderId 订单号 如没有,调用者自行编码一个订单号 + * @param orderAmount 订单总金额 如果有多次付款,即为所有子单总金额之和 + * @param remark 备注 + * @param receBranchId 收款方商户归属机构编号 + * @return + */ + public Map shopBalancePayToClient(String payBranchId,String acctPrjType, String orderId, BigDecimal orderAmount, String remark, + String incomeUserid,String receBranchId){ + AppShopConfig payConfig=appShopConfigService.getShopConfigByBranchId(payBranchId); + + AppShopConfig receConfig=payConfig; + if( StringUtils.hasText(receBranchId) && !payBranchId.equals(receBranchId)){ + receConfig=appShopConfigService.getShopConfigByBranchId(receBranchId); + } + String urls = "/accore/accore/tpa/pay/shopBalancePayToClient"; + Map m=new HashMap<>(); + m.put("payShopId", payConfig.getShopId()); + m.put("payLocationId", payConfig.getHeadLocationId()); + m.put("acctPrjType", acctPrjType); + m.put("orderId",orderId); + m.put("orderAmount", orderAmount); + m.put("remark", remark); + m.put("incomeUserid", incomeUserid); + m.put("goodsShopId", receConfig.getShopId()); + m.put("goodsLocationId", receConfig.getHeadLocationId()); + Map tipMap = restTemplate.postForMap(urls,m); + Tips tips= BaseUtils.mapToTips(tipMap); + if(!tips.isOk()){ + throw new BizException(tips); + } + return tipMap; + } + /** + * 结算商家 付款 给 合作商家、用于退还合作商家缴纳的活动保证金等。核销卡券时,付款给合作商家等。不适用第三方支付、而是直接使用本系统账户余额支付。登记流水及记账一次性完成 + * @param payShopId 支付商户编号 + * @param payLocationId 支付方店铺编号 + * @param acctPrjType 核算项目类型 platfrom/shop/location + * @param orderId 订单号 如没有,调用者自行编码一个订单号 + * @param orderAmount 订单总金额 如果有多次付款,即为所有子单总金额之和 + * @param remark 备注 + * @param goodsShopId 收款方商户编号 + * @param goodsLocationId 收款方店铺编号 + * @return + */ + public Map shopBanlancePayToShop(String payShopId,String payLocationId,String acctPrjType, String orderId, BigDecimal orderAmount, String remark, + String goodsShopId, String goodsLocationId){ + String urls = "/accore/accore/tpa/pay/shopBanlancePayToShop"; + Map m=new HashMap<>(); + m.put("payShopId", payShopId); + m.put("payLocationId", payLocationId); + m.put("acctPrjType", acctPrjType); + m.put("orderId",orderId); + m.put("orderAmount", orderAmount); + m.put("remark", remark); + m.put("goodsShopId", goodsShopId); + m.put("goodsLocationId", goodsLocationId); + Map tipMap = restTemplate.postForMap(urls,m); + Tips tips= BaseUtils.mapToTips(tipMap); + if(!tips.isOk()){ + throw new BizException(tips); + } + return tipMap; + } + public String getOrderId(){ + String s= SequenceFormat.parse("{date:yyMMddHH}{rands:2}{rand:2}"); + while(userCardCodeSet.contains(s)){ + s= SequenceFormat.parse("{date:yyMMddHH}{rands:2}{rand:2}"); + } + userCardCodeSet.add(s); + return s; + } +} diff --git a/xm-core/src/main/java/com/xm/core/service/client/MkClient.java b/xm-core/src/main/java/com/xm/core/service/client/MkClient.java new file mode 100644 index 00000000..3f66db59 --- /dev/null +++ b/xm-core/src/main/java/com/xm/core/service/client/MkClient.java @@ -0,0 +1,46 @@ +package com.xm.core.service.client; + +import com.mdp.core.entity.Tips; +import com.mdp.core.utils.BaseUtils; +import com.mdp.micro.client.CallBizService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + +@Service +/** + * 对mk接口调用 + */ +public class MkClient { + + @Autowired + CallBizService callBizService; + + /** + * execOrder.setOrderId(sequence.getReqFlowNo()); + * execOrder.setActNum(new BigDecimal("1")); + * execOrder.setEntityId(entityId); + * execOrder.setCustId(receiverId); + * execOrder.setActSinglePrice(new BigDecimal("10.22")); + * execOrder.setTotalPrice(new BigDecimal("10.22")); + * execOrder.setCustBranchId("platform-branch-001"); + * @return + */ + public Tips pushActiExecOrder(String orderId,String custId,String custBranchId, String entityId,BigDecimal actNum,BigDecimal actSinglePrice,BigDecimal totalPrice){ + Tips tips = new Tips("推送订单成功"); + String restUrl="/mk/mk/acti/execOrder/add"; + Map params=new HashMap<>(); + params.put("orderId",orderId); + params.put("custId",custId); + params.put("entityId",entityId); + params.put("actNum",actNum); + params.put("actSinglePrice",orderId); + params.put("totalPrice",totalPrice); + Map resultMap=callBizService.postForMap(restUrl,params); + tips= BaseUtils.mapToTips(resultMap); + return tips; + } +}