| | |
| | | import com.java110.core.event.cmd.Cmd; |
| | | import com.java110.core.event.cmd.CmdEvent; |
| | | import com.java110.core.log.LoggerFactory; |
| | | import com.java110.doc.annotation.*; |
| | | import com.java110.dto.fee.PayFeeDto; |
| | | import com.java110.dto.payment.PaymentOrderDto; |
| | | import com.java110.dto.payment.PaymentPoolDto; |
| | | import com.java110.dto.payment.PaymentPoolConfigDto; |
| | | import com.java110.intf.acct.IPaymentPoolConfigV1InnerServiceSMO; |
| | | import com.java110.intf.acct.IPaymentPoolV1InnerServiceSMO; |
| | | import com.java110.intf.fee.IPayFeeV1InnerServiceSMO; |
| | | import com.java110.utils.cache.CommonCache; |
| | | import com.java110.utils.cache.MappingCache; |
| | | import com.java110.utils.constant.MappingConstant; |
| | | import com.java110.utils.constant.WechatConstant; |
| | | import com.java110.utils.exception.CmdException; |
| | | import com.java110.utils.factory.ApplicationContextFactory; |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import org.slf4j.Logger; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | | |
| | | import java.text.ParseException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | private static final Logger logger = LoggerFactory.getLogger(CashierCmd.class); |
| | | |
| | | protected static final String DEFAULT_PAYMENT_ADAPT = "wechatPaymentFactory";// 默认微信通用支付 |
| | | |
| | | @Autowired |
| | | private IPaymentPoolConfigV1InnerServiceSMO paymentPoolConfigV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IPaymentPoolV1InnerServiceSMO paymentPoolV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IPayFeeV1InnerServiceSMO payFeeV1InnerServiceSMOImpl; |
| | | |
| | | /** |
| | | * 校验 |
| | |
| | | |
| | | Assert.hasKeyAndValue(reqJson, "business", "未包含业务"); |
| | | Assert.hasKeyAndValue(reqJson, "cashierUserId", "未包含收银人员"); |
| | | Assert.hasKeyAndValue(reqJson, "openId", "未包含openId"); |
| | | Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID"); |
| | | |
| | | context.getReqHeaders().put("user-id", reqJson.getString("cashierUserId")); |
| | | } |
| | | |
| | | @Override |
| | | public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { |
| | | |
| | | if(reqJson.containsKey("custStartTime") && reqJson.containsKey("custEndTime")){ |
| | | reqJson.put("cycle", (DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringB(reqJson.get("custStartTime").toString().split(" ")[0]), |
| | | DateUtil.getDateFromStringB(reqJson.get("custEndTime").toString().split(" ")[0]) |
| | | ))); |
| | | } |
| | | logger.debug(">>>>>>>>>>>>>>>>支付参数报文,{}", reqJson.toJSONString()); |
| | | String appId = context.getReqHeaders().get("app-id"); |
| | | String userId = reqJson.getString("cashierUserId"); |
| | |
| | | PaymentOrderDto paymentOrderDto = paymentBusiness.unified(context, reqJson); |
| | | paymentOrderDto.setAppId(appId); |
| | | paymentOrderDto.setUserId(userId); |
| | | |
| | | // paymentOrderDto.setMoney(1); // TODO 测试数据 |
| | | |
| | | logger.debug(">>>>>>>>>>>>>>>>支付业务下单返回,{}", JSONObject.toJSONString(paymentOrderDto)); |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | // 3.0 寻找当前支付适配器 |
| | | String payAdapt = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAYMENT_ADAPT); |
| | | // todo 3.0 寻找当前支付适配器 |
| | | String payAdapt = computeAdapt(reqJson.getString("business"), reqJson); |
| | | //MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAYMENT_ADAPT); |
| | | payAdapt = StringUtil.isEmpty(payAdapt) ? DEFAULT_PAYMENT_ADAPT : payAdapt; |
| | | |
| | | if (reqJson.containsKey("payAdapt") && !StringUtil.isEmpty(reqJson.getString("payAdapt"))) { |
| | |
| | | // redis 中 保存 请求参数 |
| | | CommonCache.setValue("unifiedPayment_" + paymentOrderDto.getOrderId(), reqJson.toJSONString(), CommonCache.PAY_DEFAULT_EXPIRE_TIME); |
| | | } |
| | | |
| | | /** |
| | | * 计算适配器 |
| | | * |
| | | * @param business |
| | | * @param reqJson |
| | | * @return |
| | | */ |
| | | private String computeAdapt(String business, JSONObject reqJson) { |
| | | |
| | | String communityId = reqJson.getString("communityId"); |
| | | //todo 如果是单个费用缴费 |
| | | PaymentPoolDto paymentPoolDto = ifPayFeeBusiness(business, reqJson); |
| | | if (paymentPoolDto != null) { |
| | | reqJson.put("paymentPoolId", paymentPoolDto.getPpId()); |
| | | return paymentPoolDto.getBeanJsapi(); |
| | | } |
| | | |
| | | //todo 如果是临时车 |
| | | paymentPoolDto = ifTempCarFeeBusiness(business, communityId); |
| | | if (paymentPoolDto != null) { |
| | | reqJson.put("paymentPoolId", paymentPoolDto.getPpId()); |
| | | return paymentPoolDto.getBeanJsapi(); |
| | | } |
| | | |
| | | //todo 按小区查询 支付信息 |
| | | paymentPoolDto = new PaymentPoolDto(); |
| | | paymentPoolDto.setCommunityId(communityId); |
| | | paymentPoolDto.setPayType(PaymentPoolDto.PAY_TYPE_COMMUNITY); |
| | | paymentPoolDto.setState("Y"); |
| | | List<PaymentPoolDto> paymentPoolDtos = paymentPoolV1InnerServiceSMOImpl.queryPaymentPools(paymentPoolDto); |
| | | if (paymentPoolDtos == null || paymentPoolDtos.isEmpty()) { |
| | | throw new IllegalArgumentException("小区未配置支付信息"); |
| | | } |
| | | |
| | | reqJson.put("paymentPoolId", paymentPoolDtos.get(0).getPpId()); |
| | | return paymentPoolDtos.get(0).getBeanJsapi(); |
| | | } |
| | | |
| | | /** |
| | | * 临时车场景处理 |
| | | * |
| | | * @param business |
| | | * @param communityId |
| | | * @return |
| | | */ |
| | | private PaymentPoolDto ifTempCarFeeBusiness(String business, String communityId) { |
| | | if (!"tempCarFee".equals(business)) { |
| | | return null; |
| | | } |
| | | //todo 按小区查询 支付信息 |
| | | PaymentPoolDto paymentPoolDto = new PaymentPoolDto(); |
| | | paymentPoolDto.setCommunityId(communityId); |
| | | paymentPoolDto.setPayType(PaymentPoolDto.PAY_TYPE_TEMP_CAT); |
| | | paymentPoolDto.setState("Y"); |
| | | List<PaymentPoolDto> paymentPoolDtos = paymentPoolV1InnerServiceSMOImpl.queryPaymentPools(paymentPoolDto); |
| | | if (paymentPoolDtos == null || paymentPoolDtos.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | return paymentPoolDtos.get(0); |
| | | } |
| | | |
| | | private PaymentPoolDto ifPayFeeBusiness(String business, JSONObject reqJson) { |
| | | String feeId = ""; |
| | | if (!"payFee".equals(business) || !reqJson.containsKey("feeId")) { |
| | | return null; |
| | | } |
| | | |
| | | feeId = reqJson.getString("feeId"); |
| | | if (StringUtil.isNumber(feeId)) { |
| | | return null; |
| | | } |
| | | |
| | | PayFeeDto feeDto = new PayFeeDto(); |
| | | feeDto.setFeeId(feeId); |
| | | feeDto.setCommunityId(reqJson.getString("communityId")); |
| | | List<PayFeeDto> feeDtos = payFeeV1InnerServiceSMOImpl.queryPayFees(feeDto); |
| | | |
| | | if (feeDtos == null || feeDtos.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | PaymentPoolConfigDto paymentPoolConfigDto = new PaymentPoolConfigDto(); |
| | | paymentPoolConfigDto.setConfigId(feeDtos.get(0).getConfigId()); |
| | | paymentPoolConfigDto.setCommunityId(feeDtos.get(0).getCommunityId()); |
| | | List<PaymentPoolConfigDto> paymentPoolConfigDtos = paymentPoolConfigV1InnerServiceSMOImpl.queryPaymentPoolConfigs(paymentPoolConfigDto); |
| | | if (paymentPoolConfigDtos == null || paymentPoolConfigDtos.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | PaymentPoolDto paymentPoolDto = new PaymentPoolDto(); |
| | | paymentPoolDto.setPpId(paymentPoolConfigDtos.get(0).getPpId()); |
| | | paymentPoolDto.setCommunityId(paymentPoolConfigDtos.get(0).getCommunityId()); |
| | | paymentPoolDto.setPayType(PaymentPoolDto.PAY_TYPE_FEE_CONFIG); |
| | | paymentPoolDto.setState("Y"); |
| | | List<PaymentPoolDto> paymentPoolDtos = paymentPoolV1InnerServiceSMOImpl.queryPaymentPools(paymentPoolDto); |
| | | if (paymentPoolDtos == null || paymentPoolDtos.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | return paymentPoolDtos.get(0); |
| | | } |
| | | } |