service-api/src/main/java/com/java110/api/listener/fee/PayFeePreListener.java
@@ -9,7 +9,9 @@ import com.java110.core.context.DataFlowContext; import com.java110.core.event.service.api.ServiceDataFlowEvent; import com.java110.core.factory.GenerateCodeFactory; import com.java110.core.log.LoggerFactory; import com.java110.dto.app.AppDto; import com.java110.dto.community.CommunityDto; import com.java110.dto.fee.FeeAttrDto; import com.java110.dto.fee.FeeDetailDto; import com.java110.dto.fee.FeeDto; @@ -19,6 +21,7 @@ import com.java110.dto.repair.RepairUserDto; import com.java110.entity.center.AppService; import com.java110.entity.order.Orders; import com.java110.intf.community.ICommunityV1InnerServiceSMO; import com.java110.intf.community.IRepairUserInnerServiceSMO; import com.java110.intf.community.IRoomInnerServiceSMO; import com.java110.intf.fee.*; @@ -35,7 +38,6 @@ import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; import org.slf4j.Logger; import com.java110.core.log.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -103,6 +105,9 @@ public HttpMethod getHttpMethod() { return HttpMethod.POST; } @Autowired private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl; @Override public void soService(ServiceDataFlowEvent event) throws ParseException { @@ -244,10 +249,38 @@ //这里调整为实收金额 paramOut.put("receivableAmount", paramObj.getString("receivableAmount")); paramOut.put("receivedAmount", paramObj.getString("receivedAmount")); FeeDto feeDto = (FeeDto) paramObj.get("feeInfo"); String feeName = getObjName(feeDto); paramOut.put("feeName", feeName); responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK); dataFlowContext.setResponseEntity(responseEntity); } private String getObjName(FeeDto feeDto) { //查询小区名称 CommunityDto communityDto = new CommunityDto(); communityDto.setCommunityId(feeDto.getCommunityId()); List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto); Assert.listOnlyOne(communityDtos, "小区不存在"); List<FeeAttrDto> feeAttrDtos = feeDto.getFeeAttrDtos(); if (feeAttrDtos == null || feeAttrDtos.size() < 1) { return communityDtos.get(0).getName() + "-" + feeDto.getFeeName(); } for (FeeAttrDto feeAttrDto : feeAttrDtos) { if (FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME.equals(feeAttrDto.getSpecCd())) { return communityDtos.get(0).getName() + "-" + feeAttrDto.getValue() + "-" + feeDto.getFeeName(); } } return communityDtos.get(0).getName() + "-" + feeDto.getFeeName(); } private void dealOwnerCartEndTime(JSONObject paramObj, JSONArray businesses) { //为停车费单独处理 if (paramObj.containsKey("carPayerObjType") service-api/src/main/java/com/java110/api/smo/payment/IToPayOweFeeSMO.java
@@ -13,5 +13,5 @@ * @param pd * @return */ public ResponseEntity<String> toPay(IPageData pd); ResponseEntity<String> toPay(IPageData pd); } service-api/src/main/java/com/java110/api/smo/payment/adapt/wechatPay/WechatPayAdapt.java
@@ -15,16 +15,15 @@ */ package com.java110.api.smo.payment.adapt.wechatPay; import com.java110.core.factory.WechatFactory; import com.java110.dto.smallWeChat.SmallWeChatDto; import com.java110.api.properties.WechatAuthProperties; import com.java110.api.smo.payment.adapt.IPayAdapt; import com.java110.core.factory.WechatFactory; import com.java110.core.log.LoggerFactory; import com.java110.dto.smallWeChat.SmallWeChatDto; import com.java110.utils.cache.MappingCache; import com.java110.utils.constant.WechatConstant; import com.java110.utils.util.PayUtil; import com.java110.utils.util.StringUtil; import org.slf4j.Logger; import com.java110.core.log.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -153,13 +152,17 @@ String tradeType, double payAmount, String openid, SmallWeChatDto smallWeChatDto, String notifyUrl) throws Exception { String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME); //String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME); if (feeName.length() > 127) { feeName = feeName.substring(0, 126); } SortedMap<String, String> paramMap = new TreeMap<String, String>(); paramMap.put("appid", smallWeChatDto.getAppId()); paramMap.put("mch_id", smallWeChatDto.getMchId()); paramMap.put("nonce_str", PayUtil.makeUUID(32)); paramMap.put("body", systemName + feeName); paramMap.put("body", feeName); paramMap.put("out_trade_no", orderNum); paramMap.put("total_fee", PayUtil.moneyToIntegerStr(payAmount)); paramMap.put("spbill_create_ip", PayUtil.getLocalIp()); service-api/src/main/java/com/java110/api/smo/payment/impl/ToPayOweFeeSMOImpl.java
@@ -2,20 +2,23 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.core.context.IPageData; import com.java110.core.context.PageData; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.app.AppDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.owner.OwnerAppUserDto; import com.java110.dto.smallWeChat.SmallWeChatDto; import com.java110.api.properties.WechatAuthProperties; import com.java110.api.smo.AppAbstractComponentSMO; import com.java110.api.smo.payment.IToPayOweFeeSMO; import com.java110.api.smo.payment.adapt.IPayAdapt; import com.java110.core.context.IPageData; import com.java110.core.context.PageData; import com.java110.core.factory.GenerateCodeFactory; import com.java110.core.log.LoggerFactory; import com.java110.dto.app.AppDto; import com.java110.dto.community.CommunityDto; import com.java110.dto.fee.FeeAttrDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.owner.OwnerAppUserDto; import com.java110.dto.smallWeChat.SmallWeChatDto; import com.java110.intf.community.ICommunityV1InnerServiceSMO; import com.java110.utils.cache.CommonCache; import com.java110.utils.cache.MappingCache; import com.java110.utils.constant.ServiceConstant; import com.java110.utils.constant.WechatConstant; import com.java110.utils.factory.ApplicationContextFactory; import com.java110.utils.util.Assert; @@ -23,7 +26,6 @@ import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; import org.slf4j.Logger; import com.java110.core.log.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -33,6 +35,7 @@ import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; @Service("toPayOweFeeSMOImpl") @@ -46,6 +49,9 @@ @Autowired private RestTemplate outRestTemplate; @Autowired private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl; @Autowired private WechatAuthProperties wechatAuthProperties; @@ -54,7 +60,6 @@ public ResponseEntity<String> toPay(IPageData pd) { return super.businessProcess(pd); } @Override @@ -82,13 +87,13 @@ } String payObjType = "3333"; if(paramIn.containsKey("payObjType")){ if (paramIn.containsKey("payObjType")) { payObjType = paramIn.getString("payObjType"); } //查询用户ID paramIn.put("userId", pd.getUserId()); String url = "/feeApi/listOweFees?page=1&row=50&communityId=" + paramIn.getString("communityId") + "&payObjId=" + paramIn.getString("roomId") + "&payObjType="+payObjType; String url = "/feeApi/listOweFees?page=1&row=50&communityId=" + paramIn.getString("communityId") + "&payObjId=" + paramIn.getString("roomId") + "&payObjType=" + payObjType; responseEntity = super.callCenterService(restTemplate, pd, "", url, HttpMethod.GET); if (responseEntity.getStatusCode() != HttpStatus.OK) { @@ -108,6 +113,8 @@ feePrice = new BigDecimal(fees.getJSONObject(feeIndex).getDouble("feePrice")); tmpMoney = tmpMoney.add(feePrice); } String feeName = getFeeName(fees.getJSONObject(0)); money = tmpMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); String appType = OwnerAppUserDto.APP_TYPE_WECHAT_MINA; if (AppDto.WECHAT_OWNER_APP_ID.equals(pd.getAppId())) { @@ -140,8 +147,8 @@ payAdapt = StringUtil.isEmpty(payAdapt) ? DEFAULT_PAY_ADAPT : payAdapt; //支付适配器 IPayAdapt tPayAdapt = ApplicationContextFactory.getBean(payAdapt, IPayAdapt.class); Map result = tPayAdapt.java110Payment(outRestTemplate, paramIn.getString("feeName"), paramIn.getString("tradeType"), orderId, money, openId, smallWeChatDto,wechatAuthProperties.getOweFeeNotifyUrl()); Map result = tPayAdapt.java110Payment(outRestTemplate, feeName, paramIn.getString("tradeType"), orderId, money, openId, smallWeChatDto, wechatAuthProperties.getOweFeeNotifyUrl()); responseEntity = new ResponseEntity(JSONObject.toJSONString(result), HttpStatus.OK); if (!"0".equals(result.get("code"))) { return responseEntity; @@ -156,7 +163,27 @@ return responseEntity; } private String getFeeName(JSONObject feeDto) { //查询小区名称 CommunityDto communityDto = new CommunityDto(); communityDto.setCommunityId(feeDto.getString("communityId")); List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto); Assert.listOnlyOne(communityDtos, "小区不存在"); JSONArray feeAttrDtos = feeDto.getJSONArray("feeAttrDtos"); if (feeAttrDtos == null || feeAttrDtos.size() < 1) { return communityDtos.get(0).getName() + "-" + feeDto.getString("feeName"); } for (int attrIndex = 0; attrIndex < feeAttrDtos.size(); attrIndex++) { if (FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME.equals(feeAttrDtos.getJSONObject(attrIndex).getString("specCd"))) { return communityDtos.get(0).getName() + "-" + feeAttrDtos.getJSONObject(attrIndex).getString("value") + "-" + feeDto.getString("feeName"); } } return communityDtos.get(0).getName() + "-" + feeDto.getString("feeName"); } private SmallWeChatDto getSmallWechat(IPageData pd, JSONObject paramIn) { @@ -168,7 +195,7 @@ pd.getAppId()); responseEntity = this.callCenterService(restTemplate, pd, "", "smallWeChat.listSmallWeChats?appId=" + paramIn.getString("appId") + "&page=1&row=1&communityId="+paramIn.getString("communityId"), HttpMethod.GET); + paramIn.getString("appId") + "&page=1&row=1&communityId=" + paramIn.getString("communityId"), HttpMethod.GET); if (responseEntity.getStatusCode() != HttpStatus.OK) { return null; service-api/src/main/java/com/java110/api/smo/payment/impl/ToPaySMOImpl.java
@@ -91,6 +91,7 @@ } JSONObject orderInfo = JSONObject.parseObject(responseEntity.getBody().toString()); String orderId = orderInfo.getString("oId"); String feeName = orderInfo.getString("feeName"); double money = Double.parseDouble(orderInfo.getString("receivedAmount")); //需要判断金额是否 == 0 等于0 直接掉缴费通知接口 if (money <= 0) { @@ -142,7 +143,7 @@ payAdapt = StringUtil.isEmpty(payAdapt) ? DEFAULT_PAY_ADAPT : payAdapt; //支付适配器 IPayAdapt tPayAdapt = ApplicationContextFactory.getBean(payAdapt, IPayAdapt.class); Map result = tPayAdapt.java110Payment(outRestTemplate, paramIn.getString("feeName"), paramIn.getString("tradeType"), orderId, money, openId, smallWeChatDto); Map result = tPayAdapt.java110Payment(outRestTemplate, feeName, paramIn.getString("tradeType"), orderId, money, openId, smallWeChatDto); responseEntity = new ResponseEntity(JSONObject.toJSONString(result), HttpStatus.OK); return responseEntity; service-fee/src/main/java/com/java110/fee/cmd/fee/PayFeePreCmd.java
@@ -7,14 +7,18 @@ import com.java110.core.event.cmd.AbstractServiceCmdListener; import com.java110.core.event.cmd.CmdEvent; import com.java110.core.factory.GenerateCodeFactory; import com.java110.core.log.LoggerFactory; import com.java110.core.smo.IComputeFeeSMO; import com.java110.dto.account.AccountDto; import com.java110.dto.community.CommunityDto; import com.java110.dto.couponUser.CouponUserDto; import com.java110.dto.fee.FeeAttrDto; import com.java110.dto.fee.FeeDetailDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.feeDiscount.ComputeDiscountDto; import com.java110.intf.acct.IAccountInnerServiceSMO; import com.java110.intf.acct.ICouponUserV1InnerServiceSMO; import com.java110.intf.community.ICommunityV1InnerServiceSMO; import com.java110.intf.community.IRepairUserInnerServiceSMO; import com.java110.intf.community.IRoomInnerServiceSMO; import com.java110.intf.fee.*; @@ -27,7 +31,6 @@ import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.DateUtil; import org.slf4j.Logger; import com.java110.core.log.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -88,6 +91,9 @@ @Autowired private IAccountInnerServiceSMO accountInnerServiceSMOImpl; @Autowired private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) { @@ -151,12 +157,37 @@ } paramOut.put("receivedAmount", receivedAmount); String feeName = getObjName(feeDto); paramOut.put("feeName", feeName); ResponseEntity<String> responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK); reqJson.putAll(paramOut); CommonCache.setValue("payFeePre" + paramOut.getString("oId"), reqJson.toJSONString(), 24 * 60 * 60); cmdDataFlowContext.setResponseEntity(responseEntity); } private String getObjName(FeeDto feeDto) { //查询小区名称 CommunityDto communityDto = new CommunityDto(); communityDto.setCommunityId(feeDto.getCommunityId()); List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto); Assert.listOnlyOne(communityDtos, "小区不存在"); List<FeeAttrDto> feeAttrDtos = feeDto.getFeeAttrDtos(); if (feeAttrDtos == null || feeAttrDtos.size() < 1) { return communityDtos.get(0).getName() + "-" + feeDto.getFeeName(); } for (FeeAttrDto feeAttrDto : feeAttrDtos) { if (FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME.equals(feeAttrDto.getSpecCd())) { return communityDtos.get(0).getName() + "-" + feeAttrDto.getValue() + "-" + feeDto.getFeeName(); } } return communityDtos.get(0).getName() + "-" + feeDto.getFeeName(); } /** * 考虑账户抵消 *