求解orderservice值为空如何解决

馨渡 2017-03-16 11:43:09

楼主
发表于: 2017-03-16 11:30:09
if (returnMap.get("serverCode").equals("0000")) {// 保存数据库,校验订单号
if (!orderService.saveOrder(out, merchantDomain, channelDomain, merchantNo, commodityName, Long.parseLong(amount), orderNo, 1, profit,
tradeFee, channelFee, backEndUrl, subMerchantNo, subMerchantName, msDeclareId, frontEndUrl)) {
return;
}

完整代码如下

/*@Component("wechatNativePayInFactory")*/
public class WechatNativePayInFactory extends PayInAbstractFactory{

protected Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private static OrderService<OrderDomain<?>> orderService;
@Autowired
private static SubMerchantService<SubMerchantDomain<?>> subMerchantService;

//微信native处理订单
@Override
public void dealwithOrder(PrintWriter out,
MerchantDomain<?> merchantDomain, ChannelDomain<?> channelDomain,
RateDomain<?> rateDomain, String merchantNo, String amount,
String commodityName, String frontEndUrl, String backEndUrl,
String remark, String requestXML, String isT0, String subMerchantNo) {
Map<String, String> map = JSONObject.fromObject(requestXML);
String mchCreateIp = map.get("mch_create_ip");
// 根据2个参数判断是否为子商户模式,是的话就验证
Result<SubMerchantDomain<?>> subMerchantResult = null;
if (StringUtils.isNotEmpty(isT0) && StringUtils.isNotEmpty(subMerchantNo)) {
subMerchantResult = subMerchantService.findUnique(SpecificationBuilder.builder()
.where(SubMerchantDomain_.merchantId.eq(merchantDomain.getId())).and(SubMerchantDomain_.subMerchantNo.eq(subMerchantNo)).build());
}
// 校验金额是否合格
if (Long.valueOf(amount) > merchantDomain.getTradeMax() || Long.valueOf(amount) < merchantDomain.getTradeMin()) {
ChannelUtils.responsePrintWriter(out, "0002", "金额非法");
return;
}
// 根据商户交易费率计算
Long tradeFee = ChannelUtils.reckonTradeFee(PayType.WECHAT_NATIVE, rateDomain, amount);
Long channelFee = TradeUtils.isRound(Double.valueOf(channelDomain.getChannelFee()) * Double.valueOf(amount), channelDomain.getIsTrunc());
Long profit = tradeFee - channelFee;
if (profit < 0 || tradeFee < 0) {
ChannelUtils.responsePrintWriter(out, "0002", "金额非法");
return;
}

Map<String, String> returnMap = new HashMap<String, String>();
String orderNo = SuPayWayConfig.createOrderStr(merchantDomain.getId());// 商户订单号
Long cId = Long.valueOf(channelDomain.getChannelInfoId());// 商户分配的通道Id
String subMerchant = "";
subMerchantNo = "";
String subMerchantName = "";
String msDeclareId = "";
if (cId == PayWay.CJ_WECHAT_NATIVE.getId()) {// 畅捷微信Native
returnMap = HttpPostToChPay.wxNative(commodityName, amount, frontEndUrl, orderNo);
} else if (cId == PayWay.HF_WECHAT_NATIVE.getId()) {// 好付微信Native
returnMap = HttpPostToHaofu.wxNative(amount, frontEndUrl, orderNo);
}else if (cId == PayWay.OFFICIAL_WEIXIN_NATIVE.getId()) {// 官方微信Native
returnMap = OfficialWeChatRequest.weixinNative(commodityName, amount, orderNo);
}else if (cId == PayWay.HK_WECHAT_NATIVE.getId()) {// 汇卡微信Native-子商户模式
if ((!subMerchantResult.isSuccess()) || subMerchantResult.domain().getSubMerchantStatus() != 2) {// 子商户校验
ChannelUtils.responsePrintWriter(out, "0009", "子商户身份校验不通过");
return;
}
subMerchant = subMerchantResult.domain().getHicardSubmerchantNo();
subMerchantName = subMerchantResult.domain().getSubMerchantName();
returnMap = HttpPostToHicard.wxNative(merchantDomain, commodityName, commodityName, orderNo, "1", amount, frontEndUrl, remark, null,
subMerchant, isT0);
} else if (cId == PayWay.MS_WECHAT_NATIVE.getId()) {// 民生微信Native
subMerchantNo = CmbConfig.gainCmbcWxSubMerchant(subMerchantNo , amount , merchantDomain.getId());// 获取民生子商户号
MsDeclareDomain domain = new MsDeclareDomain();// 获取民生子商户
String storeId = "S001000000044";
String subMerName = "厦门速煜信息技术有限公司";
if (getMsDomain().getStoreNo()!=null && getMsDomain().getStoreName()!=null) {
storeId = getMsDomain().getStoreNo();
subMerName = getMsDomain().getStoreName();
msDeclareId = String.valueOf(getMsDomain().getId());
}
if (subMerchantNo.isEmpty()) {
returnMap = HttpPostToCmb.wxNative(commodityName, amount, frontEndUrl, orderNo, storeId, subMerName);
} else {
returnMap = HttpPostToCmb.wxNativeV2(commodityName, amount, frontEndUrl, orderNo, subMerchantNo, storeId, subMerName);
}
} else if (cId == PayWay.WS_WECHAT_NATIVE.getId()) {// 魏石微信Native-子商户模式
if ((!subMerchantResult.isSuccess()) || subMerchantResult.domain().getSubMerchantStatus() != 2) {// 子商户校验
ChannelUtils.responsePrintWriter(out, "0009", "子商户身份校验不通过");
return;
}
subMerchant = subMerchantResult.domain().getWeishiSubmerchantNo();
subMerchantName = subMerchantResult.domain().getSubMerchantName();
returnMap = HttpPostToWsPay.wxNative(commodityName, amount, orderNo, mchCreateIp, subMerchant, subMerchant);
} else {
ChannelUtils.responsePrintWriter(out, "0006", "暂未开放此服务");
return;
}

if (returnMap.get("serverCode").equals("0000")) {// 保存数据库,校验订单号
if (!orderService.saveOrder(out, merchantDomain, channelDomain, merchantNo, commodityName, Long.parseLong(amount), orderNo, 1, profit,
tradeFee, channelFee, backEndUrl, subMerchantNo, subMerchantName, msDeclareId, frontEndUrl)) {
return;
}
}
out.print(returnMap);
}


orderserviceImpl代码如下
package com.suyu.pay.way.service.impl;



/**
* 订单服务实现类
*

*/
@Service
public class OrderServiceImpl extends BaseService<OrderEntity> implements OrderService<OrderEntity> {

@Autowired
private OrderEntity OrderEntity;
protected Logger logger = LoggerFactory.getLogger(getClass());

/**
* 保存订单

*/
@Override
public synchronized boolean saveOrder(PrintWriter out, MerchantDomain<?> merchantDomain, ChannelDomain<?> channelDomain, String merchantNo,
String commodityName, Long amount, String orderNo, int payType, Long profit, Long tradeFee, Long channelFee, String backEndUrl,
String subMerchantNo, String subMerchantName, String msDeclareId, String returnUrl) {
Collection<OrderEntity> orderEntityCollection = OrderEntity.create(OrderEntity.class).all(
SpecificationBuilder.builder().where(OrderDomain_.merchantId.eq(merchantDomain.getId())).and(OrderDomain_.outTradeNo.eq(merchantNo))
.build());
if (!orderEntityCollection.isEmpty()) {// 订单重复
logger.error("【保存订单】订单号重复。订单号:" + merchantNo);
ChannelUtils.responsePrintWriter(out, "0008", "商户订单号重复");
return false;
}
OrderEntity orderEntity = new OrderEntity();
orderEntity.setChannelId(channelDomain.getId());
orderEntity.setChannelName(channelDomain.getChannelName());
orderEntity.setOutTradeNo(merchantNo);// 外部订单号
orderEntity.setProductName(commodityName);// 商品名称
orderEntity.setAmount(amount);// 金额
orderEntity.setOrderSerialno(orderNo);// 系统订单号
orderEntity.setIsInAccount(false);// 一开始设置为false
orderEntity.setMerchantId(merchantDomain.getId());
orderEntity.setMerchantName(merchantDomain.getMerchantName());
orderEntity.setOrderStatus(1);// 订单状态(1.创建2.完成)
orderEntity.setPayType(payType);// 支付类型(1.wx-Native2.ali-Native3.wx-JSAPI4.ali-Jsapi5.无卡支付)
orderEntity.setXml(null);// 请求报文
orderEntity.setFailTime(0);// 失败次数 初始为0
orderEntity.setProfit(profit);// 利润
orderEntity.setTradeFee(tradeFee);// 交易手续费
orderEntity.setChannelFee(channelFee);// 通道手续费
orderEntity.setQrCodeUrl(null);
orderEntity.setBackEndUrl(backEndUrl);// 商户的回调地址
orderEntity.setSimpleData(Integer.parseInt(DateUtils.format8(new Date())));
orderEntity.setSubMerchantNo(subMerchantNo);
orderEntity.setSubMerchantName(subMerchantName);
orderEntity.addFeatures("msDeclareId", msDeclareId);
orderEntity.addFeatures("returnUrl", returnUrl);
try {
createOrUpdate(orderEntity);
} catch (Exception e) {
logger.error("【保存订单】保存数据库错误。数据原格式:" + orderEntity.toString());
ChannelUtils.responsePrintWriter(out, "0005", "系统错误");
e.printStackTrace();
return false;
}
return true;
}

}
orderservice代码:

package com.suyu.pay.way.service;

import java.io.PrintWriter;

import com.suyu.pay.way.domain.ChannelDomain;
import com.suyu.pay.way.domain.MerchantDomain;
import com.suyu.pay.way.domain.OrderDomain;

/**
* 订单服务
*

*/
public interface OrderService<T extends OrderDomain<?>> extends CrudService<T> {

/**
* 保存订单
*
*/
boolean saveOrder(PrintWriter out, MerchantDomain<?> merchantDomain, ChannelDomain<?> channelDomain, String merchantNo, String commodityName,
Long amount, String orderNo, int payType, Long profit, Long tradeFee, Long channelFee, String backEndUrl,String subMerchantNo,String subMerchantName,
String msDeclareId, String returnUrl);
}
...全文
375 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
馨渡 2017-03-16
  • 打赏
  • 举报
回复
还是不行,需要其他配置吗?
鱿鱼ing 2017-03-16
  • 打赏
  • 举报
回复
@Autowired private static OrderService<OrderDomain<?>> orderService; @Autowired private static SubMerchantService<SubMerchantDomain<?>> subMerchantService; 去掉static 试试

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧