Przeglądaj źródła

Merge branch 'for_member_only' of https://git.youlane.cn/server/formallProject into release_real_202008

 Conflicts:
	mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java
release_toaliyun_real
xhxu 5 lat temu
rodzic
commit
a3482c3b4a
52 zmienionych plików z 894 dodań i 548 usunięć
  1. +6
    -3
      mallinkAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java
  2. +7
    -3
      mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java
  3. +4
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponChannelController.java
  4. +9
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java
  5. +3
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java
  6. +10
    -0
      mallinkAdmin/src/main/resources/db/migration/V202007311200__FOR_MEMBER_ONLY_001.sql
  7. +2
    -1
      mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java
  8. +2
    -1
      mallinkCApi/src/main/java/com/iformall/controller/WxCampaignController.java
  9. +1
    -0
      mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java
  10. +65
    -43
      mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java
  11. +1
    -0
      mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java
  12. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxAppinfo.java
  13. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java
  14. +29
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumAppPlat.java
  15. +10
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java
  16. +32
    -17
      mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java
  17. +4
    -3
      mallinkService/src/main/java/com/iformall/service/QrCodeService.java
  18. +1
    -0
      mallinkService/src/main/java/com/iformall/service/WxActivityService.java
  19. +2
    -1
      mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java
  20. +1
    -0
      mallinkService/src/main/java/com/iformall/service/WxCampaignService.java
  21. +1
    -0
      mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java
  22. +2
    -1
      mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java
  23. +1
    -0
      mallinkService/src/main/java/com/iformall/service/WxGameService.java
  24. +3
    -1
      mallinkService/src/main/java/com/iformall/service/WxMerchantService.java
  25. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxOrderService.java
  26. +3
    -2
      mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java
  27. +1
    -0
      mallinkService/src/main/java/com/iformall/service/WxTopicService.java
  28. +16
    -64
      mallinkService/src/main/java/com/iformall/service/impl/QrCodeServiceImpl.java
  29. +3
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java
  30. +3
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java
  31. +3
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java
  32. +1
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java
  33. +2
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java
  34. +1
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java
  35. +4
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java
  36. +2
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java
  37. +37
    -5
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java
  38. +2
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  39. +98
    -271
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java
  40. +9
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java
  41. +19
    -100
      mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java
  42. +4
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxTopicServiceImpl.java
  43. +30
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/PayAdapterService.java
  44. +230
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java
  45. +22
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/h5/WxH5PayService.java
  46. +17
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/appPay/WxMiniAppPayAdapterService.java
  47. +18
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/maPay/WxMiniMaPayAdapterService.java
  48. +24
    -1
      mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java
  49. +21
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/share/entity/ShareAccountResult.java
  50. +119
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java
  51. +2
    -1
      mallinkSysAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java
  52. +2
    -1
      mallinkSysAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java

+ 6
- 3
mallinkAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java Wyświetl plik

@@ -7,6 +7,7 @@ import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController; import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxCouponChannel;
import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxMerchant;
import com.iformall.enums.EnumPayWay;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxCouponChannelMapper;
import com.iformall.mapper.WxMerchantMapper; import com.iformall.mapper.WxMerchantMapper;
@@ -56,7 +57,7 @@ public class WxAppinfoController extends BaseController {
@Override @Override
public void run() { public void run() {
String param = merchant.getWeappScene(); String param = merchant.getWeappScene();
ResultData resultData = qrCodeService.uploadQrcode(merchant, 1, pageUrl, param, 0, "", "", "店铺详情");
ResultData resultData = qrCodeService.uploadQrcode(merchant, 1, pageUrl, param, 0, "", "", "店铺详情",EnumPayWay.PAY_WAY_WECHAT);
Map<String, String> map = (Map) resultData.data; Map<String, String> map = (Map) resultData.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");
@@ -82,7 +83,9 @@ public class WxAppinfoController extends BaseController {
@Override @Override
public void run() { public void run() {
String param = couponChannel.getWeappScene(); String param = couponChannel.getWeappScene();
ResultData resultData = qrCodeService.uploadQrcode(couponChannel,1,pageUrl,param,0,"","","券");
//暂时只有微信二维码,有别的码,需要加字段
ResultData resultData = qrCodeService.uploadQrcode(couponChannel,1,pageUrl,param,0,"","","券",EnumPayWay.PAY_WAY_WECHAT);
Map<String,String> map = (Map)resultData.data; Map<String,String> map = (Map)resultData.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");
@@ -125,7 +128,7 @@ public class WxAppinfoController extends BaseController {
qrCodeService.exportQrcode(request, response, qrCodeService.exportQrcode(request, response,
getTenantInfo(), type, pageUrl, sceneParam, getTenantInfo(), type, pageUrl, sceneParam,
withText, text1, text2, withText, text1, text2,
name);
name,EnumPayWay.PAY_WAY_WECHAT);
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
throw new MallinkException(Result.ERROR, "下载异常"); throw new MallinkException(Result.ERROR, "下载异常");


+ 7
- 3
mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java Wyświetl plik

@@ -12,6 +12,7 @@ import com.iformall.domain.po.WxProfitSharingReceiver;
import com.iformall.domain.vo.WxMerchantTradeDetailVo; import com.iformall.domain.vo.WxMerchantTradeDetailVo;
import com.iformall.domain.vo.WxMerchantTradeVo; import com.iformall.domain.vo.WxMerchantTradeVo;
import com.iformall.domain.vo.WxMerchantVo; import com.iformall.domain.vo.WxMerchantVo;
import com.iformall.enums.EnumPayWay;
import com.iformall.service.QrCodeService; import com.iformall.service.QrCodeService;
import com.iformall.service.WxMerchantService; import com.iformall.service.WxMerchantService;
import com.iformall.utils.Constant; import com.iformall.utils.Constant;
@@ -145,7 +146,9 @@ public class WxMerchantController extends BaseController {
//加载二维码图片 //加载二维码图片
String pageUrl = Constant.mainPageUrl; String pageUrl = Constant.mainPageUrl;
String param = "t:md:"+resultData.data; String param = "t:md:"+resultData.data;
ResultData resultQrCode = qrCodeService.uploadQrcode(wxMerchant,1,pageUrl,param,0,"","","店铺详情");
//这里暂时只有微信二维码,后续有别的二维码,再加字段
ResultData resultQrCode = qrCodeService.uploadQrcode(wxMerchant,1,pageUrl,param,0,"","","店铺详情",EnumPayWay.PAY_WAY_WECHAT);
Map<String,String> map = (Map)resultQrCode.data; Map<String,String> map = (Map)resultQrCode.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");
@@ -156,7 +159,8 @@ public class WxMerchantController extends BaseController {


return resultData; return resultData;
} }

@ApiOperation("更新商户接口") @ApiOperation("更新商户接口")
@PostMapping("updateMerchant") @PostMapping("updateMerchant")
@SystemControllerLog(description = "商户-更新") @SystemControllerLog(description = "商户-更新")
@@ -172,7 +176,7 @@ public class WxMerchantController extends BaseController {
public ResultData updateMerchantAccount(@RequestBody WxMerchant wxMerchant) { public ResultData updateMerchantAccount(@RequestBody WxMerchant wxMerchant) {
logger.debug("[" + getIpAddr() + "] WxMerchantController::updateMerchantAccount"); logger.debug("[" + getIpAddr() + "] WxMerchantController::updateMerchantAccount");
wxMerchant.updateTenantInfo(getTenantInfo()); wxMerchant.updateTenantInfo(getTenantInfo());
return wxMerchantService.updateMerchantAccount(wxMerchant);
return wxMerchantService.updateMerchantAccount(wxMerchant,EnumPayWay.PAY_WAY_WECHAT);
} }


@ApiOperation("更新管理员接口") @ApiOperation("更新管理员接口")


+ 4
- 1
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponChannelController.java Wyświetl plik

@@ -10,6 +10,7 @@ import com.iformall.controller.base.BaseController;
import com.iformall.domain.dto.WxCouponChannelDto; import com.iformall.domain.dto.WxCouponChannelDto;
import com.iformall.domain.po.*; import com.iformall.domain.po.*;
import com.iformall.domain.vo.WxCouponChannelVo; import com.iformall.domain.vo.WxCouponChannelVo;
import com.iformall.enums.EnumPayWay;
import com.iformall.domain.po.base.BaseEntity; import com.iformall.domain.po.base.BaseEntity;
import com.iformall.domain.vo.WxCouponChannelVo; import com.iformall.domain.vo.WxCouponChannelVo;
import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxCouponChannelMapper;
@@ -82,7 +83,9 @@ public class WxCouponChannelController extends BaseController {
if(couponChannel!=null){ if(couponChannel!=null){
String pageUrl = Constant.mainPageUrl; String pageUrl = Constant.mainPageUrl;
String param = couponChannel.getWeappScene(); String param = couponChannel.getWeappScene();
ResultData resultDataQ = qrCodeService.uploadQrcode(couponChannel,1,pageUrl,param,0,"","","券");
//此处只有微信二维码,别的二维码需要加字段
ResultData resultDataQ = qrCodeService.uploadQrcode(couponChannel,1,pageUrl,param,0,"","","券",EnumPayWay.PAY_WAY_WECHAT);
Map<String,String> map = (Map)resultDataQ.data; Map<String,String> map = (Map)resultDataQ.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");


+ 9
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java Wyświetl plik

@@ -6,9 +6,11 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController; import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxCouponOrder;
import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.domain.vo.WxCouponOrderBVo;
import com.iformall.enums.EnumAppType; import com.iformall.enums.EnumAppType;
import com.iformall.enums.EnumPayType; import com.iformall.enums.EnumPayType;
import com.iformall.enums.EnumPayWay;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.service.WxAppinfoService; import com.iformall.service.WxAppinfoService;
import com.iformall.service.WxCouponOrderService; import com.iformall.service.WxCouponOrderService;
@@ -93,8 +95,15 @@ public class WxCouponOrderController extends BaseController {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
} }


WxCouponOrder wxCouponOrder = wxCouponOrderService.getById(couponOrderId);
if (wxCouponOrder == null) {
logger.error("券ID不存在:" + couponOrderId);
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL);
}
WxAppinfo appinfoQ = new WxAppinfo(); WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.updateTenantInfo(getTenantInfo()); appinfoQ.updateTenantInfo(getTenantInfo());
appinfoQ.setPlat(EnumPayWay.getEnum(wxCouponOrder.getPayVendor()).getPlat().getCode());
appinfoQ.setType(EnumAppType.B.getCode()); appinfoQ.setType(EnumAppType.B.getCode());
PageInfo<WxAppinfo> appinfoPageInfo = wxAppinfoService.listAsPage(appinfoQ, 1, 1); PageInfo<WxAppinfo> appinfoPageInfo = wxAppinfoService.listAsPage(appinfoQ, 1, 1);
if (appinfoPageInfo.getList().size() > 0) { if (appinfoPageInfo.getList().size() > 0) {


+ 3
- 1
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java Wyświetl plik

@@ -10,6 +10,7 @@ import com.iformall.domain.po.base.BaseEntity;
import com.iformall.enums.EnumCouponPasswordStatus; import com.iformall.enums.EnumCouponPasswordStatus;
import com.iformall.enums.EnumCouponStatus; import com.iformall.enums.EnumCouponStatus;
import com.iformall.enums.EnumCouponValidType; import com.iformall.enums.EnumCouponValidType;
import com.iformall.enums.EnumPayWay;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.service.PushLimitService; import com.iformall.service.PushLimitService;
import com.iformall.service.WxCouponPasswordService; import com.iformall.service.WxCouponPasswordService;
@@ -127,7 +128,8 @@ public class WxCouponPresentController extends BaseController {
} }


wxCouponPresent.setCouponName(wxCoupon.getTitle()); wxCouponPresent.setCouponName(wxCoupon.getTitle());
wxCouponPresentService.add(wxCouponPresent, list, phoneSet);
//只需要给一端发就可以了。默认给微信小程序发
wxCouponPresentService.add(wxCouponPresent, list, phoneSet,EnumPayWay.PAY_WAY_WECHAT);
return new ResultData(); return new ResultData();
} }




+ 10
- 0
mallinkAdmin/src/main/resources/db/migration/V202007311200__FOR_MEMBER_ONLY_001.sql Wyświetl plik

@@ -30,6 +30,16 @@ ADD COLUMN `pay_vendor` SMALLINT(3) NOT NULL DEFAULT 1 COMMENT '订单渠道,Enu


UPDATE wx_coupon_order o INNER JOIN wx_pay_order po ON po.order_id = o.`id` SET o.pay_vendor = po.pay_vendor; UPDATE wx_coupon_order o INNER JOIN wx_pay_order po ON po.order_id = o.`id` SET o.pay_vendor = po.pay_vendor;


---刷新完之后把DEFAULT 1 去掉

ALTER TABLE `wx_card_spend` ALTER TABLE `wx_card_spend`
ADD COLUMN `remark` VARCHAR(30) DEFAULT NULL COMMENT '备注'; ADD COLUMN `remark` VARCHAR(30) DEFAULT NULL COMMENT '备注';


ALTER TABLE `wx_appinfo`
ADD COLUMN `plat` SMALLINT(3) NOT NULL DEFAULT 1 COMMENT 'app平台 1:微信 2:阿里 3:头条';

ALTER TABLE `wx_profit_sharing_receiver`
ADD COLUMN `plat` SMALLINT(3) NOT NULL DEFAULT 1 COMMENT '平台 1:微信 2:阿里 3:头条';




+ 2
- 1
mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java Wyświetl plik

@@ -4,6 +4,7 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.*; import com.iformall.domain.po.*;
import com.iformall.enums.EnumMsgSend; import com.iformall.enums.EnumMsgSend;
import com.iformall.enums.EnumPayWay;
import com.iformall.service.WxCUserService; import com.iformall.service.WxCUserService;
import com.iformall.service.WxMerchantService; import com.iformall.service.WxMerchantService;
import com.iformall.service.WxProfitSharingReceiverService; import com.iformall.service.WxProfitSharingReceiverService;
@@ -72,7 +73,7 @@ public class WxMerchantController extends BaseController {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号名称不能为空"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "账号名称不能为空");
} }
wxMerchant.updateTenantInfo(getTenantInfo()); wxMerchant.updateTenantInfo(getTenantInfo());
return wxMerchantService.updateMerchantAccount(wxMerchant);
return wxMerchantService.updateMerchantAccount(wxMerchant,EnumPayWay.PAY_WAY_WECHAT);
} }


@ApiOperation("删除分账账户") @ApiOperation("删除分账账户")


+ 2
- 1
mallinkCApi/src/main/java/com/iformall/controller/WxCampaignController.java Wyświetl plik

@@ -11,6 +11,7 @@ import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.WxCouponChannelVo; import com.iformall.domain.vo.WxCouponChannelVo;
import com.iformall.enums.EnumCampaignStatus; import com.iformall.enums.EnumCampaignStatus;
import com.iformall.enums.EnumCouponChannelType; import com.iformall.enums.EnumCouponChannelType;
import com.iformall.enums.EnumPayWay;
import com.iformall.service.WxCampaignService; import com.iformall.service.WxCampaignService;
import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxCouponChannelService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@@ -78,7 +79,7 @@ public class WxCampaignController extends BaseController {
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "sourceId", value = "", dataType = "Long", paramType = "query", required = true), @ApiImplicitParam(name = "sourceId", value = "", dataType = "Long", paramType = "query", required = true),
@ApiImplicitParam(name = "targetId", value = "", dataType = "Long", paramType = "query", required = true)}) @ApiImplicitParam(name = "targetId", value = "", dataType = "Long", paramType = "query", required = true)})
public ResultData move(Long sourceId, Long targetId) {
public ResultData move(Long sourceId, Long targetId,EnumPayWay payWay) {
WxCampaign source = wxCampaignService.getById(sourceId); WxCampaign source = wxCampaignService.getById(sourceId);
WxCampaign target = wxCampaignService.getById(targetId); WxCampaign target = wxCampaignService.getById(targetId);
if (source == null || target == null) { if (source == null || target == null) {


+ 1
- 0
mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java Wyświetl plik

@@ -120,6 +120,7 @@ public class CouponOrderExpiringSchedule {
WxAppinfo appinfo = new WxAppinfo(); WxAppinfo appinfo = new WxAppinfo();
appinfo.updateTenantInfo(co); appinfo.updateTenantInfo(co);
//appinfo.setType(EnumAppType.B.getCode()); //appinfo.setType(EnumAppType.B.getCode());
appinfo.setPlat(EnumPayWay.getEnum(co.getPayVendor()).getPlat().getCode());
appinfo.setType(EnumAppType.C.getCode()); appinfo.setType(EnumAppType.C.getCode());
appinfo = wxAppinfoMapper.findList(appinfo).get(0); appinfo = wxAppinfoMapper.findList(appinfo).get(0);




+ 65
- 43
mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java Wyświetl plik

@@ -18,10 +18,12 @@ import org.springframework.transaction.annotation.Transactional;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iformall.common.ErrorCode; import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.enums.EnumAppType; import com.iformall.enums.EnumAppType;
import com.iformall.enums.EnumOrderStatus; import com.iformall.enums.EnumOrderStatus;
import com.iformall.enums.EnumOrderType; import com.iformall.enums.EnumOrderType;
import com.iformall.enums.EnumPayStatus; import com.iformall.enums.EnumPayStatus;
import com.iformall.enums.EnumPayWay;
import com.iformall.enums.EnumRefundStatus; import com.iformall.enums.EnumRefundStatus;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.service.WxAppinfoService; import com.iformall.service.WxAppinfoService;
@@ -82,6 +84,14 @@ public class OrderExpiringSchedule {
@Scheduled(cron = "0 */5 * * * *?") // 每5分钟检查一次 @Scheduled(cron = "0 */5 * * * *?") // 每5分钟检查一次
//@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次
public void orderExpireSchedule() { public void orderExpireSchedule() {
for (EnumPayWay payWay: EnumPayWay.values()) {
if(null != payWay.getPlat()) {
orderExpireSchedule(payWay);
}
}
}
private void orderExpireSchedule(EnumPayWay payWay) {


Map dateMap = new HashMap(); Map dateMap = new HashMap();
Date curDate = new Date(); Date curDate = new Date();
@@ -96,7 +106,7 @@ public class OrderExpiringSchedule {
List<WxOrder> orderCoupons = wxOrderMapper.findListOfUnpaidOrderByDate(dateMap); List<WxOrder> orderCoupons = wxOrderMapper.findListOfUnpaidOrderByDate(dateMap);
orderCoupons.stream().forEach( o -> { orderCoupons.stream().forEach( o -> {
try { try {
proxy.orderExpired(o,true);
proxy.orderExpired(o,true,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("券过期失败" + e.getMessage()); logger.error("券过期失败" + e.getMessage());
} }
@@ -110,7 +120,7 @@ public class OrderExpiringSchedule {
List<WxOrder> orderPresss = wxOrderMapper.findListOfCompleteUnPaidPressOrderByDate(dateMap); List<WxOrder> orderPresss = wxOrderMapper.findListOfCompleteUnPaidPressOrderByDate(dateMap);
orderPresss.stream().forEach( o -> { orderPresss.stream().forEach( o -> {
try { try {
proxy.orderPressExpired(o, true,true);
proxy.orderPressExpired(o, true,true,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("砍价券支付过期失败" + e.getMessage()); logger.error("砍价券支付过期失败" + e.getMessage());
} }
@@ -121,7 +131,7 @@ public class OrderExpiringSchedule {
orderPresss = wxOrderMapper.findListOfUnpaidPressOrderByDate(dateMap); orderPresss = wxOrderMapper.findListOfUnpaidPressOrderByDate(dateMap);
orderPresss.stream().forEach( o -> { orderPresss.stream().forEach( o -> {
try { try {
proxy.orderPressExpired(o, false,true);
proxy.orderPressExpired(o, false,true,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("砍价券过期失败" +e.getMessage()); logger.error("砍价券过期失败" +e.getMessage());
} }
@@ -133,7 +143,7 @@ public class OrderExpiringSchedule {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode());
wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> {
try { try {
proxy.orderGroupExpired((WxOrder) o,true,true);
proxy.orderGroupExpired((WxOrder) o,true,true,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("拼团取消失败" + e.getMessage()); logger.error("拼团取消失败" + e.getMessage());
} }
@@ -145,7 +155,7 @@ public class OrderExpiringSchedule {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode());
wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> {
try { try {
proxy.expiredAndReturnMoney((WxOrder) o,false);
proxy.expiredAndReturnMoney((WxOrder) o,false,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("拼团过期退款失败" + e.getMessage()); logger.error("拼团过期退款失败" + e.getMessage());
} }
@@ -156,8 +166,7 @@ public class OrderExpiringSchedule {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode());
wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> {
try { try {
proxy.orderGroupBreak((WxOrder) o);
proxy.returnMoney((WxOrder) o);
proxy.returnMoney((WxOrder) o,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("拼团券下架退款失败" + e.getMessage()); logger.error("拼团券下架退款失败" + e.getMessage());
} }
@@ -167,7 +176,7 @@ public class OrderExpiringSchedule {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> {
try { try {
proxy.expiredAndReturnMoney((WxOrder) o,true);
proxy.expiredAndReturnMoney((WxOrder) o,true,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("参团失败退款失败" + e.getMessage()); logger.error("参团失败退款失败" + e.getMessage());
} }
@@ -177,7 +186,7 @@ public class OrderExpiringSchedule {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_SCHEDU_REFUND.getCode()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_SCHEDU_REFUND.getCode());
wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> {
try { try {
proxy.expiredAndReturnMoney((WxOrder) o,false);
proxy.expiredAndReturnMoney((WxOrder) o,false,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error("参团失败退款失败" + e.getMessage()); logger.error("参团失败退款失败" + e.getMessage());
} }
@@ -186,13 +195,13 @@ public class OrderExpiringSchedule {


} }
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void expiredAndReturnMoney(WxOrder wxOrder,boolean checkRealPay) throws MallinkException, Exception {
orderGroupExpired(wxOrder,checkRealPay,false);
returnMoney(wxOrder);
public void expiredAndReturnMoney(WxOrder wxOrder,boolean checkRealPay,EnumPayWay payWay) throws MallinkException, Exception {
orderGroupExpired(wxOrder,checkRealPay,false,payWay);
returnMoney(wxOrder,payWay);
} }
public boolean wxPaySuccess(WxOrder order,boolean autoReHandle) throws MallinkException, Exception {
public boolean wxPaySuccess(WxOrder order,boolean autoReHandle,EnumPayWay payWay) throws MallinkException, Exception {
WxPayOrder payOrderq = new WxPayOrder(); WxPayOrder payOrderq = new WxPayOrder();
payOrderq.setOrderId(order.getId()); payOrderq.setOrderId(order.getId());
List<WxPayOrder> payorderlist = wxPayOrderMapper.findList(payOrderq); List<WxPayOrder> payorderlist = wxPayOrderMapper.findList(payOrderq);
@@ -208,15 +217,16 @@ public class OrderExpiringSchedule {
if (null == user) { if (null == user) {
return true; return true;
} }
WxCUser cuUser = new WxCUser();
cuUser.updateTenantInfo(order);
cuUser.setUserId(user.getId());
WxCUser cUser = wxCUserMapper.selectOne(new QueryWrapper(cuUser));
//找不到用户,问题单,不能删
if (null == cUser) {
return true;
}
WxAppinfo appInfo = wxAppinfoService.getByAppId(cUser.getAppId());
// WxCUser cuUser = new WxCUser();
// cuUser.updateTenantInfo(order);
// cuUser.setUserId(user.getId());
// WxCUser cUser = wxCUserMapper.selectOne(new QueryWrapper(cuUser));
// //找不到用户,问题单,不能删
// if (null == cUser) {
// return true;
// }
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order, payWay);
//WxAppinfo appInfo = wxAppinfoService.getByAppId(cUser.getAppId());
//找不到appInfo,问题单,不能删 //找不到appInfo,问题单,不能删
if(appInfo == null) { if(appInfo == null) {
return true; return true;
@@ -241,9 +251,9 @@ public class OrderExpiringSchedule {
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void orderExpired(WxOrder order,boolean checkRealPay) throws MallinkException, Exception {
public void orderExpired(WxOrder order,boolean checkRealPay,EnumPayWay payWay) throws MallinkException, Exception {
if (checkRealPay) { if (checkRealPay) {
if (wxPaySuccess(order,true)) {
if (wxPaySuccess(order,true,payWay)) {
return; return;
} }
} }
@@ -251,7 +261,7 @@ public class OrderExpiringSchedule {
wxOrderService.stockBack(order); wxOrderService.stockBack(order);


// 微信 关单 // 微信 关单
wxOrderService.orderClose(order);
wxOrderService.orderClose(order,payWay);


// 订单状态更改 // 订单状态更改
WxOrder updateOrder = new WxOrder(); WxOrder updateOrder = new WxOrder();
@@ -264,9 +274,9 @@ public class OrderExpiringSchedule {
} }


@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void orderPressExpired(WxOrder order, boolean payExpired,boolean checkRealPay) throws MallinkException, Exception {
public void orderPressExpired(WxOrder order, boolean payExpired,boolean checkRealPay,EnumPayWay payWay) throws MallinkException, Exception {
if (checkRealPay) { if (checkRealPay) {
if (wxPaySuccess(order,true)) {
if (wxPaySuccess(order,true,payWay)) {
return; return;
} }
} }
@@ -290,9 +300,9 @@ public class OrderExpiringSchedule {




@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void orderGroupExpired(WxOrder order,boolean checkRealPay,boolean stockBack) throws MallinkException, Exception {
public void orderGroupExpired(WxOrder order,boolean checkRealPay,boolean stockBack,EnumPayWay payWay) throws MallinkException, Exception {
if (checkRealPay) { if (checkRealPay) {
if (wxPaySuccess(order,true)) {
if (wxPaySuccess(order,true,payWay)) {
return; return;
} }
} }
@@ -309,20 +319,9 @@ public class OrderExpiringSchedule {
wxOrderService.stockBack(order); wxOrderService.stockBack(order);
} }
// 微信 关单 // 微信 关单
wxOrderService.orderClose(updateOrder);
wxOrderService.orderClose(updateOrder,payWay);
logger.info("拼团订单: " + order.getId() + " create at " + order.getCreateDate() + " expired at " + curDate); logger.info("拼团订单: " + order.getId() + " create at " + order.getCreateDate() + " expired at " + curDate);
} }
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void orderGroupBreak(WxOrder order) {
Date curDate = new Date();
WxOrder updateOrder = new WxOrder();
updateOrder.setId(order.getId());
updateOrder.updateTenantInfo(order);
updateOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_BREAK.getCode());
updateOrder.setUpdateDate(curDate);
wxOrderMapper.updateById(updateOrder);
}


/** /**
* 回调会再次扣减库存 * 回调会再次扣减库存
@@ -331,14 +330,37 @@ public class OrderExpiringSchedule {
* @throws MallinkException * @throws MallinkException
*/ */
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void returnMoney(WxOrder order) throws MallinkException, Exception {
public void returnMoney(WxOrder order,EnumPayWay payWay) throws MallinkException, Exception {
//支付成功的才退款 //支付成功的才退款
if (!wxPaySuccess(order,false)) {
if (!wxPaySuccess(order,false,payWay)) {
return; return;
} }
// 查找支付订单
WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.updateTenantInfo(order);
payOrderQ.setCUserId(order.getCUserId());
payOrderQ.setOrderId(order.getId());
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());

WxPayOrder payOrder = null;
List<WxPayOrder> list = wxPayOrderMapper.findList(payOrderQ);
if (list.size() > 0) {
if (list.size() > 1) {
logger.error("TODO: payOrder成功记录应该只有一条????!!!");
}
logger.warn("");
payOrder = list.get(0);
}
if (payOrder == null) {
logger.error("支付订单不存在(payOrder不存在)");
return ;
}
//获取APP信息 //获取APP信息
WxAppinfo appinfo = new WxAppinfo(); WxAppinfo appinfo = new WxAppinfo();
appinfo.updateTenantInfo(order); appinfo.updateTenantInfo(order);
appinfo.setPlat(EnumPayWay.getEnum(payOrder.getPayVendor()).getPlat().getCode());
appinfo.setType(EnumAppType.C.getCode()); appinfo.setType(EnumAppType.C.getCode());
appinfo = wxAppinfoMapper.findList(appinfo).get(0); appinfo = wxAppinfoMapper.findList(appinfo).get(0);
Date limitDate = DateUtils.getTimeAfterDays(360, order.getCreateDate()); Date limitDate = DateUtils.getTimeAfterDays(360, order.getCreateDate());


+ 1
- 0
mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java Wyświetl plik

@@ -22,6 +22,7 @@ import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxUserVisit; import com.iformall.domain.po.WxUserVisit;
import com.iformall.enums.EnumAppType; import com.iformall.enums.EnumAppType;
import com.iformall.enums.EnumPayWay;
import com.iformall.service.WxAppinfoService; import com.iformall.service.WxAppinfoService;
import com.iformall.service.WxUserVisitService; import com.iformall.service.WxUserVisitService;




+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxAppinfo.java Wyświetl plik

@@ -44,5 +44,7 @@ public class WxAppinfo extends BaseTenantEntity {
private Integer groupSupport; private Integer groupSupport;
@io.swagger.annotations.ApiModelProperty(value="是否启用(0:启用,1禁用)",name="enable") @io.swagger.annotations.ApiModelProperty(value="是否启用(0:启用,1禁用)",name="enable")
private Integer enable; private Integer enable;
@io.swagger.annotations.ApiModelProperty(value="app平台 EnumAppPlat ",name="plat")
private Integer plat;


} }

+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxProfitSharingReceiver.java Wyświetl plik

@@ -39,6 +39,8 @@ public class WxProfitSharingReceiver extends TenantEntity {
private Integer status; private Integer status;
@io.swagger.annotations.ApiModelProperty(value="分账参数,目前为分账比例(单位为万分之一)",name="parameter") @io.swagger.annotations.ApiModelProperty(value="分账参数,目前为分账比例(单位为万分之一)",name="parameter")
private String parameter; private String parameter;
@io.swagger.annotations.ApiModelProperty(value="平台 EnumAppPlat",name="plat")
private Integer plat;


@TableField(exist = false) @TableField(exist = false)
@io.swagger.annotations.ApiModelProperty(value="分账金额(分)",name="sharingAmount") @io.swagger.annotations.ApiModelProperty(value="分账金额(分)",name="sharingAmount")


+ 29
- 0
mallinkService/src/main/java/com/iformall/enums/EnumAppPlat.java Wyświetl plik

@@ -0,0 +1,29 @@
package com.iformall.enums;

/**
* app平台
* @author alascor
*/
public enum EnumAppPlat {
WX(1,"微信"),ALI(2,"阿里"),TOUTIAO(3,"头条");
EnumAppPlat(Integer code,String name) {
this.code = code;
this.name = name;
}
private Integer code;
private String name;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

+ 10
- 1
mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java Wyświetl plik

@@ -7,7 +7,7 @@ public enum EnumCardSpendFrom {


// 0:C端小程序扫一扫, 1:POS支付 // 0:C端小程序扫一扫, 1:POS支付


C(0, "小程序支付"),
C(0, "微信小程序支付"),
POS(1, "POS支付") POS(1, "POS支付")
; ;


@@ -19,6 +19,15 @@ public enum EnumCardSpendFrom {
} }
return null; return null;
} }
public static EnumPayWay getPayWay(Integer code) {
for (EnumPayWay payWay:EnumPayWay.values()) {
if (null != payWay.getCardSpendFrom() && payWay.getCardSpendFrom().getCode().intValue() == code.intValue() ) {
return payWay;
}
}
return null;
}


private Integer code; private Integer code;
private String message; private String message;


+ 32
- 17
mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java Wyświetl plik

@@ -5,22 +5,22 @@ package com.iformall.enums;
*/ */
public enum EnumPayWay { public enum EnumPayWay {


PAY_WAY_WECHAT(1, "微信小程序支付",EnumPayWayType.WX_MINIPAY),
PAY_WAY_WECHAT_MA(12, "微信小程序B端扫码支付",EnumPayWayType.WX_MINIPAY),
PAY_WAY_WECHAT_WAP(2, "微信H5",EnumPayWayType.WX_H5PAY),
PAY_WAY_ALIPAY(3, "支付宝",EnumPayWayType.ALI_MINIPAY),
PAY_WAY_ALIPAY_WAP(4, "支付宝H5",EnumPayWayType.ALI_H5PAY),
PAY_WAY_POS_B(10, "POS B端",EnumPayWayType.POS),
PAY_WAY_POS_NEU(11, "POS 东软",EnumPayWayType.NEU_POS),
PAY_WAY_NOT_UNPAY_MERCHANT(91, "商户注券,无需支付",null),
PAY_WAY_NOT_UNPAY_VERRIFY(92, "核销发券,无需支付",null),
PAY_WAY_NOT_UNPAY_B_MA(93, "B端扫码支付发券,无需支付",null),
PAY_WAY_NOT_UNPAY_CAR_STOP(94, "停车发券,无需支付",null),
PAY_WAY_NOT_UNPAY_SYSTEM_SEND(95, "系统定时发放券,无需支付",null),
PAY_WAY_NOT_UNPAY_BATCH_SEND(96, "后台批量发券,无需支付",null),
PAY_WAY_NOT_UNPAY_TRADE(97, "交易发券,无需支付",null),
PAY_WAY_NOT_UNPAY_PASSWD(98, "根据卡密兑换卡,无需支付",null),
PAY_WAY_NOT_UNPAY_CREDIT(99, "积分兑换券,无需支付",null)
PAY_WAY_WECHAT(1, "微信小程序支付",EnumPayWayType.WX_MINIPAY,EnumAppPlat.WX,EnumCardSpendFrom.C),
PAY_WAY_WECHAT_MA(12, "微信小程序B端扫码支付",EnumPayWayType.WX_MINIPAY,EnumAppPlat.WX,null),
PAY_WAY_WECHAT_WAP(2, "微信H5",EnumPayWayType.WX_H5PAY,EnumAppPlat.WX,null),
PAY_WAY_ALIPAY(3, "支付宝",EnumPayWayType.ALI_MINIPAY,EnumAppPlat.ALI,null),
PAY_WAY_ALIPAY_WAP(4, "支付宝H5",EnumPayWayType.ALI_H5PAY,EnumAppPlat.ALI,null),
PAY_WAY_POS_B(10, "POS B端",EnumPayWayType.POS,null,null),
PAY_WAY_POS_NEU(11, "POS 东软",EnumPayWayType.NEU_POS,null,EnumCardSpendFrom.POS),
PAY_WAY_NOT_UNPAY_MERCHANT(91, "商户注券,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_VERRIFY(92, "核销发券,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_B_MA(93, "B端扫码支付发券,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_CAR_STOP(94, "停车发券,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_SYSTEM_SEND(95, "系统定时发放券,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_BATCH_SEND(96, "后台批量发券,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_TRADE(97, "交易发券,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_PASSWD(98, "根据卡密兑换卡,无需支付",null,null,null),
PAY_WAY_NOT_UNPAY_CREDIT(99, "积分兑换券,无需支付",null,null,null)
; ;


public static EnumPayWay getEnum(Integer code) { public static EnumPayWay getEnum(Integer code) {
@@ -32,14 +32,19 @@ public enum EnumPayWay {
return null; return null;
} }
private Integer code; private Integer code;
private String message; private String message;
private EnumPayWayType type; private EnumPayWayType type;
private EnumAppPlat plat;
private EnumCardSpendFrom cardSpendFrom;


EnumPayWay(Integer code, String message,EnumPayWayType type) {
EnumPayWay(Integer code, String message,EnumPayWayType type,EnumAppPlat plat,EnumCardSpendFrom cardSpendFrom) {
this.code = code; this.code = code;
this.message = message; this.message = message;
this.type = type; this.type = type;
this.plat = plat;
this.cardSpendFrom = cardSpendFrom;
} }


public Integer getCode() { public Integer getCode() {
@@ -54,6 +59,16 @@ public enum EnumPayWay {
return type; return type;
} }


public EnumAppPlat getPlat() {
return plat;
}

public EnumCardSpendFrom getCardSpendFrom() {
return cardSpendFrom;
}




public static enum EnumPayWayType { public static enum EnumPayWayType {
WX_MINIPAY,WX_H5PAY,ALI_MINIPAY,ALI_H5PAY,NEU_POS,POS WX_MINIPAY,WX_H5PAY,ALI_MINIPAY,ALI_H5PAY,NEU_POS,POS


+ 4
- 3
mallinkService/src/main/java/com/iformall/service/QrCodeService.java Wyświetl plik

@@ -3,6 +3,7 @@ package com.iformall.service;
import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.ObjectMetadata;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumPayWay;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@@ -14,14 +15,14 @@ import java.util.Map;
@Service @Service
public interface QrCodeService { public interface QrCodeService {


void downQrCode(TenantEntity tenantEntity, HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> params) throws MallinkException;
void downQrCode(TenantEntity tenantEntity, HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> params,EnumPayWay payWay) throws MallinkException;


ResultData exportQrcode(HttpServletRequest request, HttpServletResponse response, ResultData exportQrcode(HttpServletRequest request, HttpServletResponse response,
TenantEntity tenantEntity, int type, String pageUrl, String sceneParam, TenantEntity tenantEntity, int type, String pageUrl, String sceneParam,
int withText, String text1, String text2, int withText, String text1, String text2,
String name);
String name,EnumPayWay payWay);
ResultData uploadQrcode(TenantEntity tenantEntity, int type, String pageUrl, String sceneParam, ResultData uploadQrcode(TenantEntity tenantEntity, int type, String pageUrl, String sceneParam,
int withText, String text1, String text2, int withText, String text1, String text2,
String name);
String name,EnumPayWay payWay);
ResultData awsUpload(InputStream inputStream, ObjectMetadata metadata, String fileName, TenantEntity tenantEntity); ResultData awsUpload(InputStream inputStream, ObjectMetadata metadata, String fileName, TenantEntity tenantEntity);
} }

+ 1
- 0
mallinkService/src/main/java/com/iformall/service/WxActivityService.java Wyświetl plik

@@ -3,6 +3,7 @@ package com.iformall.service;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.WxActivity; import com.iformall.domain.po.WxActivity;
import com.iformall.enums.EnumPayWay;


import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;




+ 2
- 1
mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java Wyświetl plik

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxProjectConfig; import com.iformall.domain.po.WxProjectConfig;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumPayWay;


import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -60,7 +61,7 @@ public interface WxAppinfoService {
* 获取c端小程序信息 * 获取c端小程序信息
* @return * @return
*/ */
WxAppinfo getCAppInfo(TenantEntity tenantEntity);
WxAppinfo getCAppInfo(TenantEntity tenantEntity,EnumPayWay payWay);
/** /**
* 保存或更新实体 * 保存或更新实体


+ 1
- 0
mallinkService/src/main/java/com/iformall/service/WxCampaignService.java Wyświetl plik

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCampaign; import com.iformall.domain.po.WxCampaign;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumPayWay;


import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;




+ 1
- 0
mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java Wyświetl plik

@@ -6,6 +6,7 @@ import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxCouponChannel;
import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxCouponCVo;
import com.iformall.domain.vo.WxCouponChannelVo; import com.iformall.domain.vo.WxCouponChannelVo;
import com.iformall.enums.EnumPayWay;


import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;


+ 2
- 1
mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java Wyświetl plik

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.po.WxCouponPassword;
import com.iformall.domain.po.WxCouponPresent; import com.iformall.domain.po.WxCouponPresent;
import com.iformall.enums.EnumPayWay;


import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -18,6 +19,6 @@ public interface WxCouponPresentService {


WxCouponPresent findById(Long id); WxCouponPresent findById(Long id);


ResultData add(WxCouponPresent wxCouponPresent, List<WxCouponPassword> list, Set<String> phoneSet);
ResultData add(WxCouponPresent wxCouponPresent, List<WxCouponPassword> list, Set<String> phoneSet,EnumPayWay payWay);


} }

+ 1
- 0
mallinkService/src/main/java/com/iformall/service/WxGameService.java Wyświetl plik

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.WxGame; import com.iformall.domain.po.WxGame;
import com.iformall.domain.po.WxGameActionLog; import com.iformall.domain.po.WxGameActionLog;
import com.iformall.enums.EnumPayWay;


public interface WxGameService { public interface WxGameService {




+ 3
- 1
mallinkService/src/main/java/com/iformall/service/WxMerchantService.java Wyświetl plik

@@ -10,6 +10,8 @@ import com.iformall.domain.vo.WxMerchantSimpleVo;
import com.iformall.domain.vo.WxMerchantTradeDetailVo; import com.iformall.domain.vo.WxMerchantTradeDetailVo;
import com.iformall.domain.vo.WxMerchantTradeVo; import com.iformall.domain.vo.WxMerchantTradeVo;
import com.iformall.domain.vo.WxMerchantVo; import com.iformall.domain.vo.WxMerchantVo;
import com.iformall.enums.EnumPayWay;

import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;


import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@@ -115,7 +117,7 @@ public interface WxMerchantService {


ResultData updateMerchant(WxMerchant wxMerchant); ResultData updateMerchant(WxMerchant wxMerchant);


ResultData updateMerchantAccount(WxMerchant wxMerchant);
ResultData updateMerchantAccount(WxMerchant wxMerchant,EnumPayWay payWay);


ResultData updateMerchantAdmin(WxMerchant wxMerchant); ResultData updateMerchantAdmin(WxMerchant wxMerchant);




+ 1
- 1
mallinkService/src/main/java/com/iformall/service/WxOrderService.java Wyświetl plik

@@ -112,7 +112,7 @@ public interface WxOrderService {
/** /**
* 订单关单 * 订单关单
*/ */
ResultData orderClose(WxOrder order);
ResultData orderClose(WxOrder order,EnumPayWay payWay);


/** /**
* 根据Id获得实体 * 根据Id获得实体


+ 3
- 2
mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java Wyświetl plik

@@ -5,6 +5,7 @@ import com.iformall.common.ResultData;
import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.WxProfitSharingReceiver; import com.iformall.domain.po.WxProfitSharingReceiver;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumPayWay;


import java.util.List; import java.util.List;


@@ -44,11 +45,11 @@ public interface WxProfitSharingReceiverService {


WxProfitSharingReceiver findReceiver(WxMerchant merchant); WxProfitSharingReceiver findReceiver(WxMerchant merchant);


ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List<WxProfitSharingReceiver> delList);
ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List<WxProfitSharingReceiver> delList,EnumPayWay payWay);


ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send); ResultData delReceiver(WxProfitSharingReceiver receiver, Integer send);


ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver);
ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver,EnumPayWay payWay);


void sendMsg(String phone, String account, String merchant, String time, Integer modelType, TenantEntity tenantEntity); void sendMsg(String phone, String account, String merchant, String time, Integer modelType, TenantEntity tenantEntity);




+ 1
- 0
mallinkService/src/main/java/com/iformall/service/WxTopicService.java Wyświetl plik

@@ -3,6 +3,7 @@ package com.iformall.service;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.WxTopic; import com.iformall.domain.po.WxTopic;
import com.iformall.enums.EnumPayWay;


public interface WxTopicService { public interface WxTopicService {




+ 16
- 64
mallinkService/src/main/java/com/iformall/service/impl/QrCodeServiceImpl.java Wyświetl plik

@@ -18,11 +18,13 @@ import com.iformall.common.ResultData;
import com.iformall.config.AwsProperty; import com.iformall.config.AwsProperty;
import com.iformall.domain.po.MallResource; import com.iformall.domain.po.MallResource;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumPayWay;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.service.MallResourceService; import com.iformall.service.MallResourceService;
import com.iformall.service.QrCodeService; import com.iformall.service.QrCodeService;
import com.iformall.service.WxAppinfoService; import com.iformall.service.WxAppinfoService;
import com.iformall.service.pay.PayServiceFactory;
import com.iformall.service.wechat.FmOpenService; import com.iformall.service.wechat.FmOpenService;
import com.iformall.utils.MaUtil; import com.iformall.utils.MaUtil;
import com.iformall.utils.QRCodeUtils; import com.iformall.utils.QRCodeUtils;
@@ -47,8 +49,6 @@ public class QrCodeServiceImpl implements QrCodeService {
@Autowired @Autowired
private WxAppinfoService wxAppinfoService; private WxAppinfoService wxAppinfoService;
@Autowired @Autowired
private FmOpenService openService;
@Autowired
private boolean isFmOpen; private boolean isFmOpen;
@Autowired @Autowired
private AwsProperty awsProperty; private AwsProperty awsProperty;
@@ -56,6 +56,8 @@ public class QrCodeServiceImpl implements QrCodeService {
private MallResourceService mallResourceService; private MallResourceService mallResourceService;
@Autowired @Autowired
private String fmUploadDir; private String fmUploadDir;
@Autowired
private PayServiceFactory payServiceFactory;


private AmazonS3 s3 = null; private AmazonS3 s3 = null;


@@ -126,7 +128,7 @@ public class QrCodeServiceImpl implements QrCodeService {
} }


@Override @Override
public void downQrCode(TenantEntity tenantEntity, HttpServletRequest request, HttpServletResponse response, Map<String, Object> params) throws MallinkException {
public void downQrCode(TenantEntity tenantEntity, HttpServletRequest request, HttpServletResponse response, Map<String, Object> params,EnumPayWay payWay) throws MallinkException {
String name = (String) params.get("name"); String name = (String) params.get("name");
String pageUrl = (String) params.get("pageUrl"); String pageUrl = (String) params.get("pageUrl");
String sceneParam = (String) params.get("sceneParam"); String sceneParam = (String) params.get("sceneParam");
@@ -152,7 +154,7 @@ public class QrCodeServiceImpl implements QrCodeService {
exportQrcode(request, response, exportQrcode(request, response,
tenantEntity, type, pageUrl, sceneParam, tenantEntity, type, pageUrl, sceneParam,
withText, text1, text2, withText, text1, text2,
name);
name,payWay);
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
throw new MallinkException(Result.ERROR, "下载异常"); throw new MallinkException(Result.ERROR, "下载异常");
@@ -163,28 +165,10 @@ public class QrCodeServiceImpl implements QrCodeService {
public ResultData exportQrcode(HttpServletRequest request, HttpServletResponse response, public ResultData exportQrcode(HttpServletRequest request, HttpServletResponse response,
TenantEntity tenantEntity, int type, String pageUrl, String sceneParam, TenantEntity tenantEntity, int type, String pageUrl, String sceneParam,
int withText, String text1, String text2, int withText, String text1, String text2,
String name) {
String name,EnumPayWay payWay) {
// type 0 有限二维码, 1 无限制二维码 // type 0 有限二维码, 1 无限制二维码
// withText 0 不带字 1. 带下面的字,2 带下面的两行字 // withText 0 不带字 1. 带下面的字,2 带下面的两行字
WxAppinfo appinfo = wxAppinfoService.getCAppInfo(tenantEntity);
boolean autoColor = false;
boolean isHyaline = true;
WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0");

WxMaService wxMaService;
if(isFmOpen) {
wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId());
} else {
wxMaService = MaUtil.getWeappService(appinfo);
}

String pathStr = "";
if (StringUtils.isNotBlank(sceneParam)) {
pathStr = pageUrl + "?scene="+sceneParam;
} else {
pathStr = pageUrl;
}

WxAppinfo appinfo = wxAppinfoService.getCAppInfo(tenantEntity,payWay);


String filepath = fmUploadDir; String filepath = fmUploadDir;
String fileName = name + ".png"; String fileName = name + ".png";
@@ -197,16 +181,9 @@ public class QrCodeServiceImpl implements QrCodeService {
pDest.mkdirs(); pDest.mkdirs();
} }
try { try {
if(type == 0) {
final File codeFile = wxMaService.getQrcodeService().createQrcode(pathStr, QRCodeUtils.QR_WIDTH);
copyFileToDest(withText, text1, text2, destPath1, dest, codeFile);
org.apache.commons.io.FileUtils.forceDelete(codeFile);
} else {
final File codeFile = wxMaService.getQrcodeService().createWxaCodeUnlimit(sceneParam, pageUrl, QRCodeUtils.QR_WIDTH, autoColor, color, isHyaline);
copyFileToDest(withText, text1, text2, destPath1, dest, codeFile);
org.apache.commons.io.FileUtils.forceDelete(codeFile);
}

File codeFile = payServiceFactory.getPayAdapterService(payWay.getCode()).getQrcode(appinfo, pageUrl, type, sceneParam);
copyFileToDest(withText, text1, text2, destPath1, dest, codeFile);
org.apache.commons.io.FileUtils.forceDelete(codeFile);
} catch (WxErrorException e) { } catch (WxErrorException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
} catch (Exception e) { } catch (Exception e) {
@@ -225,28 +202,10 @@ public class QrCodeServiceImpl implements QrCodeService {
@Override @Override
public ResultData uploadQrcode(TenantEntity tenantEntity, int type, String pageUrl, String sceneParam, public ResultData uploadQrcode(TenantEntity tenantEntity, int type, String pageUrl, String sceneParam,
int withText, String text1, String text2, int withText, String text1, String text2,
String name) {
String name,EnumPayWay payWay) {
// type 0 有限二维码, 1 无限制二维码 // type 0 有限二维码, 1 无限制二维码
// withText 0 不带字 1. 带下面的字,2 带下面的两行字 // withText 0 不带字 1. 带下面的字,2 带下面的两行字
WxAppinfo appinfo = wxAppinfoService.getCAppInfo(tenantEntity);
boolean autoColor = false;
boolean isHyaline = true;
WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0");

WxMaService wxMaService;
if(isFmOpen) {
wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId());
} else {
wxMaService = MaUtil.getWeappService(appinfo);
}

String pathStr = "";
if (StringUtils.isNotBlank(sceneParam)) {
pathStr = pageUrl + "?scene="+sceneParam;
} else {
pathStr = pageUrl;
}

WxAppinfo appinfo = wxAppinfoService.getCAppInfo(tenantEntity,payWay);


String filepath = fmUploadDir; String filepath = fmUploadDir;
String fileName = name + ".png"; String fileName = name + ".png";
@@ -259,16 +218,9 @@ public class QrCodeServiceImpl implements QrCodeService {
pDest.mkdirs(); pDest.mkdirs();
} }
try { try {
if(type == 0) {
final File codeFile = wxMaService.getQrcodeService().createQrcode(pathStr, QRCodeUtils.QR_WIDTH);
copyFileToDest(withText, text1, text2, destPath1, dest, codeFile);
org.apache.commons.io.FileUtils.forceDelete(codeFile);
} else {
final File codeFile = wxMaService.getQrcodeService().createWxaCodeUnlimit(sceneParam, pageUrl, QRCodeUtils.QR_WIDTH, autoColor, color, isHyaline);
copyFileToDest(withText, text1, text2, destPath1, dest, codeFile);
org.apache.commons.io.FileUtils.forceDelete(codeFile);
}

File codeFile = payServiceFactory.getPayAdapterService(payWay.getCode()).getQrcode(appinfo, pageUrl, type, sceneParam);
copyFileToDest(withText, text1, text2, destPath1, dest, codeFile);
org.apache.commons.io.FileUtils.forceDelete(codeFile);
} catch (WxErrorException e) { } catch (WxErrorException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
} catch (Exception e) { } catch (Exception e) {


+ 3
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java Wyświetl plik

@@ -8,6 +8,7 @@ import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxProjectConfig; import com.iformall.domain.po.WxProjectConfig;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumAppType; import com.iformall.enums.EnumAppType;
import com.iformall.enums.EnumPayWay;
import com.iformall.mapper.WxAppinfoMapper; import com.iformall.mapper.WxAppinfoMapper;
import com.iformall.service.WxAppinfoService; import com.iformall.service.WxAppinfoService;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -25,9 +26,10 @@ public class WxAppinfoServiceImpl implements WxAppinfoService {
WxAppinfoMapper wxAppinfoMapper; WxAppinfoMapper wxAppinfoMapper;


@Override @Override
public WxAppinfo getCAppInfo(TenantEntity tenantEntity) {
public WxAppinfo getCAppInfo(TenantEntity tenantEntity,EnumPayWay payWay) {
WxAppinfo appInfo = null; WxAppinfo appInfo = null;
WxAppinfo appinfoQ = new WxAppinfo(); WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setPlat(payWay.getPlat().getCode());
appinfoQ.updateTenantInfo(tenantEntity); appinfoQ.updateTenantInfo(tenantEntity);
appinfoQ.setType(EnumAppType.C.getCode()); appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appList = wxAppinfoMapper.selectList(new QueryWrapper(appinfoQ)); List<WxAppinfo> appList = wxAppinfoMapper.selectList(new QueryWrapper(appinfoQ));


+ 3
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java Wyświetl plik

@@ -271,7 +271,9 @@ public class WxCampaignServiceImpl implements WxCampaignService {
couponChannel.setId(wxCouponChannel.getId()); couponChannel.setId(wxCouponChannel.getId());
couponChannel.setType(wxCouponChannel.getType()); couponChannel.setType(wxCouponChannel.getType());
String param = couponChannel.getWeappScene(); String param = couponChannel.getWeappScene();
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券");
//此处只有微信二维码,如果需要彼得二维码,需要加字段
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券",EnumPayWay.PAY_WAY_WECHAT);
Map<String,String> map = (Map)resultDataQ.data; Map<String,String> map = (Map)resultDataQ.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");


+ 3
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java Wyświetl plik

@@ -292,7 +292,9 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService {
couponChannel.setId(vo.getId()); couponChannel.setId(vo.getId());
couponChannel.setType(vo.getType()); couponChannel.setType(vo.getType());
String param = couponChannel.getWeappScene(); String param = couponChannel.getWeappScene();
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券");
//此处只有微信二维码
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券",EnumPayWay.PAY_WAY_WECHAT);
Map<String,String> map = (Map)resultDataQ.data; Map<String,String> map = (Map)resultDataQ.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java Wyświetl plik

@@ -626,7 +626,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR);
} }


WxAppinfo wxAppinfo = wxAppinfoService.getCAppInfo(couponOrder);
WxAppinfo wxAppinfo = wxAppinfoService.getCAppInfo(couponOrder,EnumPayWay.getEnum(couponOrder.getPayVendor()));
WxPayAccount payAccount = wxPayAccountMapper.selectById(wxAppinfo.getPayId()); WxPayAccount payAccount = wxPayAccountMapper.selectById(wxAppinfo.getPayId());


Integer subsidyNum = coupon.getSubsidyNum(); Integer subsidyNum = coupon.getSubsidyNum();


+ 2
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java Wyświetl plik

@@ -54,7 +54,7 @@ public class WxCouponPresentServiceImpl implements WxCouponPresentService {


@Async @Async
@Override @Override
public ResultData add(WxCouponPresent record, List<WxCouponPassword> list, Set<String> phoneSet) {
public ResultData add(WxCouponPresent record, List<WxCouponPassword> list, Set<String> phoneSet,EnumPayWay payWay) {
//添加记录 //添加记录
final IdWorker idWorker = IdWorker.get(); final IdWorker idWorker = IdWorker.get();
long id = idWorker.nextId(); long id = idWorker.nextId();
@@ -62,7 +62,7 @@ public class WxCouponPresentServiceImpl implements WxCouponPresentService {
record.setSendAmount(phoneSet.size()); record.setSendAmount(phoneSet.size());
wxCouponPresentMapper.insert(record); wxCouponPresentMapper.insert(record);
//小程序 //小程序
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record);
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,payWay);
String title = record.getCouponName(); String title = record.getCouponName();
String name = appInfo.getName(); String name = appInfo.getName();
List<WxCouponPassword> tempList = new ArrayList<>(); List<WxCouponPassword> tempList = new ArrayList<>();


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java Wyświetl plik

@@ -418,7 +418,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
String phone = user.getPhone(); String phone = user.getPhone();


//小程序名称 //小程序名称
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantEntity);
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantEntity,EnumPayWay.getEnum(couponOrder.getPayVendor()));
String appName = appInfo.getName(); String appName = appInfo.getName();
Map<String, String> msgReplaceMap = new HashMap(); Map<String, String> msgReplaceMap = new HashMap();
msgReplaceMap.put("title", title); msgReplaceMap.put("title", title);


+ 4
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java Wyświetl plik

@@ -16,6 +16,7 @@ import com.iformall.enums.EnumCouponChannelStatus;
import com.iformall.enums.EnumCouponChannelType; import com.iformall.enums.EnumCouponChannelType;
import com.iformall.enums.EnumCouponStatus; import com.iformall.enums.EnumCouponStatus;
import com.iformall.enums.EnumGameStatus; import com.iformall.enums.EnumGameStatus;
import com.iformall.enums.EnumPayWay;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxCouponChannelMapper;
import com.iformall.mapper.WxCouponOrderMapper; import com.iformall.mapper.WxCouponOrderMapper;
@@ -336,7 +337,9 @@ public class WxGameServiceImpl implements WxGameService {
couponChannel.setId(wxCouponChannel.getId()); couponChannel.setId(wxCouponChannel.getId());
couponChannel.setType(wxCouponChannel.getType()); couponChannel.setType(wxCouponChannel.getType());
String param = couponChannel.getWeappScene(); String param = couponChannel.getWeappScene();
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券");
//暂时只有微信二维码,如果有别的二维码,则需要别的字段
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券",EnumPayWay.PAY_WAY_WECHAT);
Map<String,String> map = (Map)resultDataQ.data; Map<String,String> map = (Map)resultDataQ.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");


+ 2
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java Wyświetl plik

@@ -457,7 +457,7 @@ public class WxMerchantServiceImpl implements WxMerchantService {


@Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
@Override @Override
public ResultData updateMerchantAccount(WxMerchant wxMerchant) {
public ResultData updateMerchantAccount(WxMerchant wxMerchant,EnumPayWay payWay) {
try { try {
if (wxMerchant.getId() == null) { if (wxMerchant.getId() == null) {
return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND);
@@ -473,7 +473,7 @@ public class WxMerchantServiceImpl implements WxMerchantService {
receiver.setReceiverType(wxMerchant.getAccountTypeValue()); receiver.setReceiverType(wxMerchant.getAccountTypeValue());
receiver.setTrueName(wxMerchant.getAccountName()); receiver.setTrueName(wxMerchant.getAccountName());
receiver.setParameter(wxMerchant.getAccountParameter()); receiver.setParameter(wxMerchant.getAccountParameter());
return wxProfitSharingReceiverService.updateReceiver(wxMerchant, receiver);
return wxProfitSharingReceiverService.updateReceiver(wxMerchant, receiver,payWay);
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("db failed: 账户操作失败, e:" + e.getMessage()); logger.error("db failed: 账户操作失败, e:" + e.getMessage());


+ 37
- 5
mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java Wyświetl plik

@@ -67,6 +67,9 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService {


@Autowired @Autowired
WxCouponChannelMapper wxCouponChannelMapper; WxCouponChannelMapper wxCouponChannelMapper;
@Autowired
WxPayOrderMapper wxPayOrderMapper;


private int updateOrderGroup(WxOrderGroup wxOrderGroup,WxOrder order, WxCoupon wxCoupon) { private int updateOrderGroup(WxOrderGroup wxOrderGroup,WxOrder order, WxCoupon wxCoupon) {
//锁住人数 //锁住人数
@@ -393,11 +396,9 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService {
order.setOrderGroupId(group.getId()); order.setOrderGroupId(group.getId());
order.setOrderStatus(group.getStatus()); order.setOrderStatus(group.getStatus());
wxOrderMapper.updateStatusByOrderGroupId(order); wxOrderMapper.updateStatusByOrderGroupId(order);
//获取APP信息
WxAppinfo appinfo = new WxAppinfo();
appinfo.setTenantId(order.getTenantId());
appinfo.setType(EnumAppType.C.getCode());
appinfo = wxAppinfoMapper.findList(appinfo).get(0);
WxAppinfo appinfo =null;
//退款流程 //退款流程
WxOrder wxOrder = new WxOrder(); WxOrder wxOrder = new WxOrder();
wxOrder.setTenantId(group.getTenantId()); wxOrder.setTenantId(group.getTenantId());
@@ -408,6 +409,37 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService {
|| temp.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode())) { || temp.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode())) {
boolean has = wxRefundOrderService.hasRefundOrder(order.getId(), EnumRefundStatus.REFUND_SUCCESS.getCode()); boolean has = wxRefundOrderService.hasRefundOrder(order.getId(), EnumRefundStatus.REFUND_SUCCESS.getCode());
if (!has) { if (!has) {
// 查找支付订单
WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.updateTenantInfo(wxOrder);
payOrderQ.setCUserId(wxOrder.getCUserId());
payOrderQ.setOrderId(wxOrder.getId());
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());

WxPayOrder payOrder = null;
List<WxPayOrder> payOrderlist = wxPayOrderMapper.findList(payOrderQ);
if (list.size() > 0) {
if (list.size() > 1) {
logger.error("TODO: payOrder成功记录应该只有一条????!!!");
}
logger.warn("");
payOrder = payOrderlist.get(0);
}
if (payOrder == null) {
logger.error("支付订单不存在(payOrder不存在)");
return ;
}
//获取APP信息
if (null == appinfo) {
appinfo = new WxAppinfo();
appinfo.setTenantId(order.getTenantId());
appinfo.setPlat(EnumPayWay.getEnum(payOrder.getPayVendor()).getPlat().getCode());
appinfo.setType(EnumAppType.C.getCode());
appinfo = wxAppinfoMapper.findList(appinfo).get(0);
}
//去库存 //去库存
wxOrderService.stockBack(temp); wxOrderService.stockBack(temp);
wxRefundOrderService.returnMoney(appinfo, temp.getId()); wxRefundOrderService.returnMoney(appinfo, temp.getId());


+ 2
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java Wyświetl plik

@@ -1629,9 +1629,9 @@ public class WxOrderServiceImpl implements WxOrderService {
* 微信关闭订单 * 微信关闭订单
*/ */
@Override @Override
public ResultData orderClose(WxOrder order) {
public ResultData orderClose(WxOrder order,EnumPayWay payWay) {
// 1. get c appid // 1. get c appid
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order);
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order,payWay);
// 2. get pay order // 2. get pay order
WxPayOrder payOrderQ = new WxPayOrder(); WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.updateTenantInfo(order); payOrderQ.updateTenantInfo(order);


+ 98
- 271
mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java Wyświetl plik

@@ -105,14 +105,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
"\"ORDERNOTEXIST\":{\"detail\":\"此交易订单号不存在\",\"reason\":\"查询系统中不存在此交易订单号\",\"resolution\":\"该API只能查提交支付交易返回成功的订单,请商户检查需要查询的订单号是否正确\"},\n" + "\"ORDERNOTEXIST\":{\"detail\":\"此交易订单号不存在\",\"reason\":\"查询系统中不存在此交易订单号\",\"resolution\":\"该API只能查提交支付交易返回成功的订单,请商户检查需要查询的订单号是否正确\"},\n" +
"\"SYSTEMERROR\":{\"detail\":\"系统错误\t\",\"reason\":\"后台系统返回错误\",\"resolution\":\"系统异常,请再调用发起查询\"}}"); "\"SYSTEMERROR\":{\"detail\":\"系统错误\t\",\"reason\":\"后台系统返回错误\",\"resolution\":\"系统异常,请再调用发起查询\"}}");


JSONObject errorMapClose = JSON.parseObject("{" +
"\"ORDERPAID\":{\"detail\":\"订单已支付\",\"reason\":\"订单已支付,不能发起关单\",\"resolution\":\"订单已支付,不能发起关单,请当作已支付的正常交易\"}," +
"\"SYSTEMERROR\":{\"detail\":\"系统错误\",\"reason\":\"系统错误\",\"resolution\":\"系统异常,请重新调用该API\"}," +
"\"ORDERCLOSED\":{\"detail\":\"订单已关闭\",\"reason\":\"订单已关闭,无法重复关闭\",\"resolution\":\"订单已关闭,无需继续调用\"}," +
"\"SIGNERROR\":{\"detail\":\"签名错误\",\"reason\":\"参数签名结果不正确\",\"resolution\":\"请检查签名参数和方法是否都符合签名算法要求\"}," +
"\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"}," +
"\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\t\",\"reason\":\"XML格式错误\",\"reason\":\"请检查XML参数格式是否正确\"}}");

//方法必须为public AopContext.currentProxy() //方法必须为public AopContext.currentProxy()
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
@Override @Override
@@ -402,7 +394,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
public ResultData createMicroPayOrder(WxMerchantBUser user, WxPayOrder record, EnumPayWay payWay,PayExtraParam params) { public ResultData createMicroPayOrder(WxMerchantBUser user, WxPayOrder record, EnumPayWay payWay,PayExtraParam params) {
final IdWorker idworker = IdWorker.get(); final IdWorker idworker = IdWorker.get();


WxAppinfo appInfo = wxAppinfoService.getCAppInfo(user);
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(user,payWay);
if (null == params) { if (null == params) {
params = new PayExtraParam(); params = new PayExtraParam();
} }
@@ -529,7 +521,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), "Order not found"); return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), "Order not found");
} }


WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record);
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,payWay);
PayAdapterService payService = payServiceFactory.getPayAdapterService(payWay.getCode()); PayAdapterService payService = payServiceFactory.getPayAdapterService(payWay.getCode());
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
PayQueryAdapterResult apiResult = payService.queryPayStatus(record, order, appInfo, payAccount); PayQueryAdapterResult apiResult = payService.queryPayStatus(record, order, appInfo, payAccount);
@@ -595,167 +587,40 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
} }
} }


private String wechatPayOrderClose(WxAppinfo appInfo, WxPayOrder record) {
// get payAccount
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
if (payAccount.getType() == EnumPayMode.MCH.getCode()) {
// 普通商户号模式
WxPayOrderQ payOrderC = new WxPayOrderQ();
String noncestr = Utility.generate32UUID();
payOrderC.setAppid(appInfo.getAppId());
payOrderC.setMch_id(payAccount.getMchId());
payOrderC.setNonce_str(noncestr);
payOrderC.setOut_trade_no(record.getPayOrderNo());

try {
Map map = BeanUtils.toStringMap(payOrderC);
payOrderC.setSign(WxPayment.createSign(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderC);
String response = WxPay.closeOrder(map);
logger.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
} else {
// 服务商模式
WxPayOrderSQ payOrderSC = new WxPayOrderSQ();
String noncestr = Utility.generate32UUID();
payOrderSC.setAppid(appInfo.getParentAppId());
payOrderSC.setSub_appid(appInfo.getAppId());
payOrderSC.setMch_id(payAccount.getMchId());
payOrderSC.setSub_mch_id(payAccount.getSubMchId());
payOrderSC.setNonce_str(noncestr);
payOrderSC.setOut_trade_no(record.getPayOrderNo());
payOrderSC.setSign_type("HMAC-SHA256");

try {
Map map = BeanUtils.toStringMap(payOrderSC);
payOrderSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderSC);
String response = WxPay.closeOrder(map);
logger.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
}
}

/** /**
* 微信关闭支付订单 * 微信关闭支付订单
*/ */
@Override @Override
public ResultData payOrderClose(WxAppinfo appInfo, WxPayOrder record) { public ResultData payOrderClose(WxAppinfo appInfo, WxPayOrder record) {

try {
String response = wechatPayOrderClose(appInfo, record);

logger.info("pay order close, " + record.toString() + ", response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
String result_code = returnMap.get("result_code");
if ("SUCCESS".equalsIgnoreCase(return_code)) {
if ("SUCCESS".equals(result_code)) {
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_CANCEL.getCode());
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(record);
} catch (Exception e) {
logger.error("pay order 关单:{} 成功", record.getId());
}
return new ResultData(Result.SUCCESS, "支付订单关闭成功", returnMap);
} else {
String errMsg = "";
JSONObject errObj = errorMapClose.getJSONObject(result_code);
if (errObj != null) {
errMsg = errObj.toJSONString();
} else {
errMsg = returnMap.get("return_msg");
}
record.setFailReason(errMsg);
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(record);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errMsg, returnMap);
}
} else {
String errMsg = returnMap.get("return_msg");
record.setFailReason(errMsg);
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(record);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errMsg, returnMap);
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
try {
PayAdapterResult result = payServiceFactory.getPayAdapterService(record.getPayVendor()).payOrderClose(appInfo, record, payAccount);
if (result.isSuccess()) {
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_CANCEL.getCode());
}else {
record.setFailReason(result.getMsg());
}
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(record);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
} }
} catch (RuntimeException e) {
if (result.isSuccess()) {
return new ResultData(Result.SUCCESS, "支付订单关闭成功", result.getData());
}else {
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), result.getMsg(), result.getData());
}
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) { } catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} }
} }


private String wechatPayOrderReverse(WxAppinfo appInfo, WxPayOrder record) {
// get payAccount
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
if (payAccount.getType() == EnumPayMode.MCH.getCode()) {
// 普通商户号模式
WxPayOrderQ payOrderC = new WxPayOrderQ();
String noncestr = Utility.generate32UUID();
payOrderC.setAppid(appInfo.getAppId());
payOrderC.setMch_id(payAccount.getMchId());
payOrderC.setNonce_str(noncestr);
payOrderC.setOut_trade_no(record.getPayOrderNo());

try {
Map map = BeanUtils.toStringMap(payOrderC);
payOrderC.setSign(WxPayment.createSign(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderC);
String response = WxPay.orderReverse(map, payAccount.getCertPath(), payAccount.getMchId());
logger.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
} else {
// 服务商模式
WxPayOrderSQ payOrderSC = new WxPayOrderSQ();
String noncestr = Utility.generate32UUID();
payOrderSC.setAppid(appInfo.getParentAppId());
payOrderSC.setSub_appid(appInfo.getAppId());
payOrderSC.setMch_id(payAccount.getMchId());
payOrderSC.setSub_mch_id(payAccount.getSubMchId());
payOrderSC.setNonce_str(noncestr);
payOrderSC.setOut_trade_no(record.getPayOrderNo());
payOrderSC.setSign_type("HMAC-SHA256");

try {
Map map = BeanUtils.toStringMap(payOrderSC);
payOrderSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderSC);
String response = WxPay.orderReverse(map, payAccount.getCertPath(), payAccount.getMchId());
logger.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
}
}


/** /**
* 撤销订单 - 刷卡支付 * 撤销订单 - 刷卡支付
@@ -763,102 +628,77 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
@Override @Override
public ResultData payOrderReverse(WxPayOrder record) { public ResultData payOrderReverse(WxPayOrder record) {


WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record);
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,EnumPayWay.getEnum(record.getPayVendor()));
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
try { try {
String response = wechatPayOrderReverse(appInfo, record);

logger.info("pay order reverse, " + record.toString() + ", response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
String result_code = returnMap.get("result_code");
if ("SUCCESS".equalsIgnoreCase(return_code)) {
if ("SUCCESS".equals(result_code)) {
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_REVERSE.getCode());
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(record);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
// 预核销撤回
WxPayOrder verifyPayOrder = null;
WxPayOrder verifyPayOrderQ = new WxPayOrder();
verifyPayOrderQ.setPayFrom(EnumOrderFrom.INSIDE.getCode());
verifyPayOrderQ.setOrderId(record.getOrderId());
verifyPayOrderQ.setCUserId(record.getCUserId());
verifyPayOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode());
try {
verifyPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(verifyPayOrderQ));
} catch (Exception e) {
logger.error(e.getMessage());
}
if (verifyPayOrder != null) {
verifyPayOrderQ = new WxPayOrder();
verifyPayOrderQ.setId(verifyPayOrder.getId());
verifyPayOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_REVERSE.getCode());
verifyPayOrderQ.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(verifyPayOrderQ);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}

PosCouponOrderVerify posCouponOrderVerifyQ = new PosCouponOrderVerify();
posCouponOrderVerifyQ.setCouponOrderId(verifyPayOrder.getPosPayOrderId());
posCouponOrderVerifyQ.setPosOrderId(record.getOrderId());
try {
posCouponOrderVerifyMapper.delete(new UpdateWrapper<>(posCouponOrderVerifyQ));
} catch (Exception e) {
logger.error(e.getMessage());
}
WxCouponOrder updateCouponOrder = new WxCouponOrder();
updateCouponOrder.setId(verifyPayOrder.getPosPayOrderId());
updateCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode());
updateCouponOrder.setUpdateDate(new Date());
try {
wxCouponOrderService.saveOrUpdate(updateCouponOrder);
} catch (Exception e) {
logger.error(e.getMessage());
}
}
// 预核销撤回-end

WxOrder order = new WxOrder();
order.setId(record.getOrderId());
order.setType(EnumOrderType.MICROPAY.getCode());
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode());
order.setUpdateDate(new Date());
try {
wxOrderMapper.updateById(order);
} catch (Exception e) {
logger.error("order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
return new ResultData(Result.SUCCESS, "订单撤销成功", returnMap);
} else {
String errMsg = "";
JSONObject errObj = errorMapClose.getJSONObject(result_code);
if (errObj != null) {
errMsg = errObj.toJSONString();
} else {
errMsg = returnMap.get("return_msg");
}
record.setFailReason(errMsg);
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(record);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errMsg, returnMap);
}
} else {
String errMsg = returnMap.get("return_msg");
record.setFailReason(errMsg);
PayAdapterResult result = payServiceFactory.getPayAdapterService(record.getPayVendor()).payOrderReverse(appInfo, record, payAccount);
if (result.isSuccess()) {
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_REVERSE.getCode());
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(record);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
// 预核销撤回
WxPayOrder verifyPayOrder = null;
WxPayOrder verifyPayOrderQ = new WxPayOrder();
verifyPayOrderQ.setPayFrom(EnumOrderFrom.INSIDE.getCode());
verifyPayOrderQ.setOrderId(record.getOrderId());
verifyPayOrderQ.setCUserId(record.getCUserId());
verifyPayOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode());
try {
verifyPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(verifyPayOrderQ));
} catch (Exception e) {
logger.error(e.getMessage());
}
if (verifyPayOrder != null) {
verifyPayOrderQ = new WxPayOrder();
verifyPayOrderQ.setId(verifyPayOrder.getId());
verifyPayOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_REVERSE.getCode());
verifyPayOrderQ.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateById(verifyPayOrderQ);
} catch (Exception e) {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
PosCouponOrderVerify posCouponOrderVerifyQ = new PosCouponOrderVerify();
posCouponOrderVerifyQ.setCouponOrderId(verifyPayOrder.getPosPayOrderId());
posCouponOrderVerifyQ.setPosOrderId(record.getOrderId());
try {
posCouponOrderVerifyMapper.delete(new UpdateWrapper<>(posCouponOrderVerifyQ));
} catch (Exception e) {
logger.error(e.getMessage());
}
WxCouponOrder updateCouponOrder = new WxCouponOrder();
updateCouponOrder.setId(verifyPayOrder.getPosPayOrderId());
updateCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode());
updateCouponOrder.setUpdateDate(new Date());
try {
wxCouponOrderService.saveOrUpdate(updateCouponOrder);
} catch (Exception e) {
logger.error(e.getMessage());
}
}
// 预核销撤回-end
WxOrder order = new WxOrder();
order.setId(record.getOrderId());
order.setType(EnumOrderType.MICROPAY.getCode());
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode());
order.setUpdateDate(new Date());
try {
wxOrderMapper.updateById(order);
} catch (Exception e) {
logger.error("order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
return new ResultData(Result.SUCCESS, result.getMsg(), result.getData());
}else {
record.setFailReason(result.getMsg());
record.setUpdateTime(new Date()); record.setUpdateTime(new Date());
try { try {
wxPayOrderMapper.updateById(record); wxPayOrderMapper.updateById(record);
@@ -866,8 +706,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
logger.error("pay order update error: " + record.toString()); logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL); throw new MallinkException(ErrorCode.DB_FAIL);
} }
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errMsg, returnMap);
}
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), result.getMsg(), result.getData());
}


} catch (RuntimeException e) { } catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
@@ -1120,7 +960,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND);
} }


WxAppinfo appinfo = wxAppinfoService.getCAppInfo(order);
WxAppinfo appinfo = wxAppinfoService.getCAppInfo(order,payWay);


if (record.getPayAmount().equals(order.getTotalPayment())) { if (record.getPayAmount().equals(order.getTotalPayment())) {
doCouponPayOrder(user, record, order,payWay); doCouponPayOrder(user, record, order,payWay);
@@ -1235,7 +1075,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
// 有价券 // 有价券
if (EnumPayStatus.PAY_STATUS_FAIL.getCode() == status) { if (EnumPayStatus.PAY_STATUS_FAIL.getCode() == status) {
// 1. get appinfo // 1. get appinfo
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order);
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(order,EnumPayWay.getEnum(record.getPayVendor()));
// 前端支付取消, // 前端支付取消,
// 回调未返回,主动检查支付订单状态 // 回调未返回,主动检查支付订单状态
try { try {
@@ -1318,19 +1158,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
} }
} }


private WxAppinfo getWxAppinfo(Integer orderType, String tenentId) {
WxAppinfo appInfo = null;
WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setTenantId(tenentId);
appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appList = wxAppinfoMapper.selectList(new QueryWrapper(appinfoQ));
if (appList.size() > 0) {
appInfo = appList.get(0);
}
return appInfo;
}


@Override @Override
public PageInfo<WxPayOrder> listAsPage(WxPayOrder record, Integer pageIndex, Integer pageSize) { public PageInfo<WxPayOrder> listAsPage(WxPayOrder record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxPayOrderMapper.findList(record)); return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxPayOrderMapper.findList(record));


+ 9
- 12
mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java Wyświetl plik

@@ -108,14 +108,11 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ






private WxAppinfo getAppinfo(Long cUserId) {
private WxAppinfo getAppinfo(String tenantId,Integer payWay) {
WxAppinfo wxAppinfo = new WxAppinfo(); WxAppinfo wxAppinfo = new WxAppinfo();

WxCUser wxCUser = wxCUserMapper.selectById(cUserId);
if (wxCUser == null)
throw new MallinkException(ErrorCode.USER_IS_EMPTY);

wxAppinfo.setAppId(wxCUser.getAppId());
wxAppinfo.setTenantId(tenantId);
wxAppinfo.setPlat(EnumPayWay.getEnum(payWay).getPlat().getCode());
wxAppinfo.setType(EnumAppType.C.getCode());
wxAppinfo = wxAppinfoMapper.selectOne(new QueryWrapper(wxAppinfo)); wxAppinfo = wxAppinfoMapper.selectOne(new QueryWrapper(wxAppinfo));
if (wxAppinfo == null) if (wxAppinfo == null)
throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND);
@@ -135,7 +132,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
} }


WxPayOrder payOrder = wxPayOrderMapper.selectById(sharingOrder.getOrderId()); WxPayOrder payOrder = wxPayOrderMapper.selectById(sharingOrder.getOrderId());
WxAppinfo appInfo = getAppinfo(payOrder.getCUserId());
WxAppinfo appInfo = getAppinfo(payOrder.getTenantId(),payOrder.getPayVendor());
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());


List<JSONObject> receivers; List<JSONObject> receivers;
@@ -251,7 +248,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
} }


WxAppinfo appInfo = getAppinfo(sharingOrderDto.getCUserId());
WxAppinfo appInfo = getAppinfo(sharingOrderDto.getTenantId(),payWay);
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());


//准备分账列表 //准备分账列表
@@ -389,13 +386,13 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
WxPayOrder wxPayOrder = wxPayOrderMapper.selectById(wxProfitSharingOrder.getOrderId()); WxPayOrder wxPayOrder = wxPayOrderMapper.selectById(wxProfitSharingOrder.getOrderId());
if (wxPayOrder == null) if (wxPayOrder == null)
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);
appInfo = getAppinfo(wxPayOrder.getCUserId());
appInfo = getAppinfo(wxPayOrder.getTenantId(),wxPayOrder.getPayVendor());
} else if(wxProfitSharingOrder.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode()) } else if(wxProfitSharingOrder.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode())
||wxProfitSharingOrder.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI_FINISH.getCode())){ ||wxProfitSharingOrder.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI_FINISH.getCode())){
WxCardSpend wxCardSpend = wxCardSpendMapper.selectById(wxProfitSharingOrder.getOrderId()); WxCardSpend wxCardSpend = wxCardSpendMapper.selectById(wxProfitSharingOrder.getOrderId());
if (wxCardSpend == null) if (wxCardSpend == null)
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);
appInfo = getAppinfo(wxCardSpend.getOwnerId());
appInfo = getAppinfo(wxCardSpend.getTenantId(),EnumCardSpendFrom.getPayWay(wxCardSpend.getPayFrom()).getCode());
} else { } else {
return new ResultData(ErrorCode.PROFIT_SHARING_QUERY_UNKNOWN_TYPE); return new ResultData(ErrorCode.PROFIT_SHARING_QUERY_UNKNOWN_TYPE);
} }
@@ -527,7 +524,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
} }


WxAppinfo appInfo = getAppinfo(sharingOrderDto.getCUserId());
WxAppinfo appInfo = getAppinfo(sharingOrderDto.getTenantId(),payWay);
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());






+ 19
- 100
mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java Wyświetl plik

@@ -26,6 +26,8 @@ import com.iformall.pay.WxPayment;
import com.iformall.pay.WxProfitSharing; import com.iformall.pay.WxProfitSharing;
import com.iformall.pay.WxProfitSharingReceiverP; import com.iformall.pay.WxProfitSharingReceiverP;
import com.iformall.service.WxProfitSharingReceiverService; import com.iformall.service.WxProfitSharingReceiverService;
import com.iformall.service.pay.PayServiceFactory;
import com.iformall.service.pay.service.share.entity.ShareAccountResult;
import com.iformall.utils.BeanUtils; import com.iformall.utils.BeanUtils;
import com.iformall.utils.DateUtils; import com.iformall.utils.DateUtils;
import com.iformall.utils.Utility; import com.iformall.utils.Utility;
@@ -65,6 +67,9 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv
WxMerchantMapper wxMerchantMapper; WxMerchantMapper wxMerchantMapper;
@Autowired @Autowired
private MqBaseProducer mqBaseProducer; private MqBaseProducer mqBaseProducer;
@Autowired
PayServiceFactory payServiceFactory;


@Override @Override
public PageInfo<WxProfitSharingReceiver> listAsPage(WxProfitSharingReceiver record, Integer pageIndex, Integer pageSize) { public PageInfo<WxProfitSharingReceiver> listAsPage(WxProfitSharingReceiver record, Integer pageIndex, Integer pageSize) {
@@ -106,10 +111,11 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv




@Override @Override
public ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List<WxProfitSharingReceiver> delList) {
public ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List<WxProfitSharingReceiver> delList,EnumPayWay payWay) {


WxAppinfo appInfo = new WxAppinfo(); WxAppinfo appInfo = new WxAppinfo();
appInfo.updateTenantInfo(merchant); appInfo.updateTenantInfo(merchant);
appInfo.setPlat(EnumPayWay.getEnum(payWay.getCode()).getPlat().getCode());
appInfo.setType(EnumAppType.C.getCode()); appInfo.setType(EnumAppType.C.getCode());


appInfo = wxAppinfoMapper.findList(appInfo).get(0); appInfo = wxAppinfoMapper.findList(appInfo).get(0);
@@ -124,6 +130,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv
receiver.setUpdateTime(date); receiver.setUpdateTime(date);
receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode());
receiver.setIsUse(EnumProfitSharingUse.APPLY.getCode()); receiver.setIsUse(EnumProfitSharingUse.APPLY.getCode());
receiver.setPlat(payWay.getPlat().getCode());
//passed from uplevel //passed from uplevel
//receiver.setReceiverAccount(receiverParam.getReceiverAccount()); //receiver.setReceiverAccount(receiverParam.getReceiverAccount());
//receiver.setReceiverComments(receiverParam.getReceiverComments()); //receiver.setReceiverComments(receiverParam.getReceiverComments());
@@ -131,53 +138,11 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv
//receiver.setTrueName(receiverParam.getTrueName()); //receiver.setTrueName(receiverParam.getTrueName());


//添加分账账户 //添加分账账户
WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP();
if (StringUtils.isNotBlank(appInfo.getParentAppId())) {
wxProfitSharingReceiverP.setAppid(appInfo.getParentAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
wxProfitSharingReceiverP.setSub_appid(appInfo.getAppId());
wxProfitSharingReceiverP.setSub_mch_id(payAccount.getSubMchId());
} else {
wxProfitSharingReceiverP.setAppid(appInfo.getAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
}
wxProfitSharingReceiverP.setNonce_str(Utility.generate32UUID());
wxProfitSharingReceiverP.setSign_type("HMAC-SHA256");


JSONObject receiverJSON = new JSONObject();
receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage());
receiverJSON.put("account", receiver.getReceiverAccount());
receiverJSON.put("name", receiver.getTrueName());

wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString());
String response;
try {
wxProfitSharingReceiverP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingReceiverP), payAccount.getApiKey()));
response = WxProfitSharing.addReceiver(BeanUtils.toStringMap(wxProfitSharingReceiverP));
logger.info(response);
} catch (Exception e) {
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + e.getMessage());
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED, e.getMessage());
ShareAccountResult createResult = payServiceFactory.getPayShareAdapterService(payWay.getCode()).createShareAccount(appInfo, payAccount, receiver);
if (!createResult.isSuccess()) {
return new ResultData(createResult.getCode(), createResult.getMsg());
} }
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
if (!"SUCCESS".equals(return_code)) {
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("return_msg"));
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("return_msg"));
}

String result_code = returnMap.get("result_code");
if (!"SUCCESS".equals(result_code)) {
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("err_code_des"));
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("err_code_des"));
}

if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) {
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + "verifyNotifyHMAC");
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage());
}

wxProfitSharingReceiverMapper.insert(receiver); wxProfitSharingReceiverMapper.insert(receiver);


//添加成功才删除账户 //添加成功才删除账户
@@ -198,7 +163,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv
//添加变更短信 //添加变更短信
sendMsgByType(EnumMsgModel.UPDATE_SHARING_ACCOUNT_NOTIFY_MERCHANT.getCode(), merchant.getId(), receiver.getReceiverAccount(), receiver); sendMsgByType(EnumMsgModel.UPDATE_SHARING_ACCOUNT_NOTIFY_MERCHANT.getCode(), merchant.getId(), receiver.getReceiverAccount(), receiver);
} }
return new ResultData(returnMap);
return new ResultData(createResult.getData());
} }


private void sendMsgByType(Integer type, Long merchantId, String account, TenantEntity tenantEntity) { private void sendMsgByType(Integer type, Long merchantId, String account, TenantEntity tenantEntity) {
@@ -282,56 +247,10 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv
))) { ))) {
//还有别的商户使用这个账号,不从微信服务器申请删除 //还有别的商户使用这个账号,不从微信服务器申请删除
} else { } else {
//删除分账账户从微信服务器
WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP();
if (StringUtils.isNotBlank(appInfo.getParentAppId())) {
wxProfitSharingReceiverP.setAppid(appInfo.getParentAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
wxProfitSharingReceiverP.setSub_appid(appInfo.getAppId());
wxProfitSharingReceiverP.setSub_mch_id(payAccount.getSubMchId());
} else {
wxProfitSharingReceiverP.setAppid(appInfo.getAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
}
wxProfitSharingReceiverP.setNonce_str(Utility.generate32UUID());
wxProfitSharingReceiverP.setSign_type("HMAC-SHA256");

JSONObject receiverJSON = new JSONObject();
receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage());
receiverJSON.put("account", receiver.getReceiverAccount());

wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString());
String response;
try {
wxProfitSharingReceiverP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingReceiverP), payAccount.getApiKey()));
response = WxProfitSharing.delReceiver(BeanUtils.toStringMap(wxProfitSharingReceiverP));
} catch (Exception e) {
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + e.getMessage());
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED, e.getMessage());
}
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
if (!"SUCCESS".equals(return_code)) {
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("return_msg"));
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("return_msg"));
}

String result_code = returnMap.get("result_code");
if (!"SUCCESS".equals(result_code)) {

if (returnMap.get("err_code").contains("USER_NOT_EXIST")) {
receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode());
receiver.setUpdateTime(new Date());
wxProfitSharingReceiverMapper.updateById(receiver);
}
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("err_code_des"));
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("err_code_des"));
}

if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) {
logger.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage());
return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), "verifyNotifyHMAC");
}
ShareAccountResult shareResult = payServiceFactory.getPayShareAdapterService(receiver.getPlat()).deleteShareAccount(appInfo, payAccount, receiver);
if (!shareResult.isSuccess()) {
return new ResultData(shareResult.getCode(), shareResult.getMsg());
}
} }


receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode()); receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode());
@@ -347,7 +266,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv
} }


@Override @Override
public ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver) {
public ResultData updateReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver,EnumPayWay payWay) {


WxProfitSharingReceiver oldReceiver = new WxProfitSharingReceiver(); WxProfitSharingReceiver oldReceiver = new WxProfitSharingReceiver();
oldReceiver.updateTenantInfo(merchant); oldReceiver.updateTenantInfo(merchant);
@@ -361,7 +280,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv
oldReceiver = wxProfitSharingReceiverMapper.selectOne(new QueryWrapper(oldReceiver)); oldReceiver = wxProfitSharingReceiverMapper.selectOne(new QueryWrapper(oldReceiver));


if (oldReceiver == null) { if (oldReceiver == null) {
return addReceiver(merchant, receiver, delList);
return addReceiver(merchant, receiver, delList,payWay);
} else { } else {
oldReceiver.setParameter(receiver.getParameter()); oldReceiver.setParameter(receiver.getParameter());
oldReceiver.setUpdateTime(new Date()); oldReceiver.setUpdateTime(new Date());


+ 4
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxTopicServiceImpl.java Wyświetl plik

@@ -10,6 +10,7 @@ import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxCouponChannel;
import com.iformall.domain.po.WxTopic; import com.iformall.domain.po.WxTopic;
import com.iformall.enums.EnumCouponChannelType; import com.iformall.enums.EnumCouponChannelType;
import com.iformall.enums.EnumPayWay;
import com.iformall.enums.EnumWxTopicStatus; import com.iformall.enums.EnumWxTopicStatus;
import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxCouponChannelMapper;
import com.iformall.mapper.WxCouponMapper; import com.iformall.mapper.WxCouponMapper;
@@ -141,7 +142,9 @@ public class WxTopicServiceImpl implements WxTopicService {
couponChannel.setId(wxCouponChannel.getId()); couponChannel.setId(wxCouponChannel.getId());
couponChannel.setType(wxCouponChannel.getType()); couponChannel.setType(wxCouponChannel.getType());
String param = couponChannel.getWeappScene(); String param = couponChannel.getWeappScene();
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券");
//这里暂时只有微信二维码,有其他的码需要加字段
ResultData resultDataQ = qrCodeService.uploadQrcode(wxCoupon,1,pageUrl,param,0,"","","券",EnumPayWay.PAY_WAY_WECHAT);
Map<String,String> map = (Map)resultDataQ.data; Map<String,String> map = (Map)resultDataQ.data;
if(map!=null && map.get("url") !=null) { if(map!=null && map.get("url") !=null) {
String url = map.get("url"); String url = map.get("url");


+ 30
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/pay/PayAdapterService.java Wyświetl plik

@@ -1,6 +1,9 @@
package com.iformall.service.pay.service.pay; package com.iformall.service.pay.service.pay;


import java.io.File;
import java.util.Date; import java.util.Date;
import java.util.Map;

import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxOrder;
import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayAccount;
@@ -56,4 +59,31 @@ public interface PayAdapterService {
* @throws Exception * @throws Exception
*/ */
public int queryPayStatusCode(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount) throws Exception; public int queryPayStatusCode(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount) throws Exception;
/**
* API关闭订单
* @param appInfo
* @param record
* @param payAccount
* @return
* @throws Exception
*/
public PayAdapterResult payOrderClose(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception;
/**
* API 订单撤回
* @param appInfo
* @param record
* @param payAccount
* @return
* @throws Exception
*/
public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception;
/**
* 获取二维码
* @param param
* @return
*/
public File getQrcode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws Exception;
} }

+ 230
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java Wyświetl plik

@@ -1,15 +1,53 @@
package com.iformall.service.pay.service.pay.wx; package com.iformall.service.pay.service.pay.wx;


import java.io.File;
import java.util.Date;
import java.util.Map; import java.util.Map;


import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.iformall.common.ErrorCode;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.PosCouponOrderVerify;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxCouponOrder;
import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxOrder;
import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.WxPayOrder;
import com.iformall.enums.EnumCouponOrderStatus;
import com.iformall.enums.EnumOrderFrom;
import com.iformall.enums.EnumOrderStatus;
import com.iformall.enums.EnumOrderType;
import com.iformall.enums.EnumPayMode;
import com.iformall.enums.EnumPayStatus;
import com.iformall.exception.MallinkException;
import com.iformall.pay.WxPay;
import com.iformall.pay.WxPayOrderQ;
import com.iformall.pay.WxPayOrderSQ;
import com.iformall.pay.WxPayment;
import com.iformall.service.QrCodeService;
import com.iformall.service.helper.WxPayOrderServiceHelper; import com.iformall.service.helper.WxPayOrderServiceHelper;
import com.iformall.service.pay.service.pay.PayAdapterService; import com.iformall.service.pay.service.pay.PayAdapterService;
import com.iformall.service.pay.service.pay.entity.PayAdapterResult;
import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult;
import com.iformall.utils.BeanUtils;
import com.iformall.utils.MaUtil;
import com.iformall.utils.QRCodeUtils;
import com.iformall.utils.Utility;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.open.api.WxOpenService;


@Slf4j
public class BaseWxPayAdapterService { public class BaseWxPayAdapterService {


protected PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, WxPayAccount payAccount) protected PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxOrder order, WxAppinfo appInfo, WxPayAccount payAccount)
@@ -29,4 +67,196 @@ public class BaseWxPayAdapterService {
throws Exception { throws Exception {
return WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, order, appInfo, payAccount); return WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, order, appInfo, payAccount);
} }
JSONObject errorMapClose = JSON.parseObject("{" +
"\"ORDERPAID\":{\"detail\":\"订单已支付\",\"reason\":\"订单已支付,不能发起关单\",\"resolution\":\"订单已支付,不能发起关单,请当作已支付的正常交易\"}," +
"\"SYSTEMERROR\":{\"detail\":\"系统错误\",\"reason\":\"系统错误\",\"resolution\":\"系统异常,请重新调用该API\"}," +
"\"ORDERCLOSED\":{\"detail\":\"订单已关闭\",\"reason\":\"订单已关闭,无法重复关闭\",\"resolution\":\"订单已关闭,无需继续调用\"}," +
"\"SIGNERROR\":{\"detail\":\"签名错误\",\"reason\":\"参数签名结果不正确\",\"resolution\":\"请检查签名参数和方法是否都符合签名算法要求\"}," +
"\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"}," +
"\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\t\",\"reason\":\"XML格式错误\",\"reason\":\"请检查XML参数格式是否正确\"}}");
protected PayAdapterResult closeOrder(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) {
String response = closeOrderWx(appInfo, record,payAccount);
log.info("pay order close, " + record.toString() + ", response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
String result_code = returnMap.get("result_code");
if ("SUCCESS".equalsIgnoreCase(return_code)) {
if ("SUCCESS".equals(result_code)) {
return new PayAdapterResult(true, "success", returnMap, null);
} else {
String errMsg = "";
JSONObject errObj = errorMapClose.getJSONObject(result_code);
if (errObj != null) {
errMsg = errObj.toJSONString();
} else {
errMsg = returnMap.get("return_msg");
}
return new PayAdapterResult(false, errMsg, returnMap, null);
}
} else {
String errMsg = returnMap.get("return_msg");
return new PayAdapterResult(false, errMsg, returnMap, null);
}
}
private String closeOrderWx(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) {
// get payAccount
if (payAccount.getType() == EnumPayMode.MCH.getCode()) {
// 普通商户号模式
WxPayOrderQ payOrderC = new WxPayOrderQ();
String noncestr = Utility.generate32UUID();
payOrderC.setAppid(appInfo.getAppId());
payOrderC.setMch_id(payAccount.getMchId());
payOrderC.setNonce_str(noncestr);
payOrderC.setOut_trade_no(record.getPayOrderNo());

try {
Map map = BeanUtils.toStringMap(payOrderC);
payOrderC.setSign(WxPayment.createSign(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderC);
String response = WxPay.closeOrder(map);
log.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
} else {
// 服务商模式
WxPayOrderSQ payOrderSC = new WxPayOrderSQ();
String noncestr = Utility.generate32UUID();
payOrderSC.setAppid(appInfo.getParentAppId());
payOrderSC.setSub_appid(appInfo.getAppId());
payOrderSC.setMch_id(payAccount.getMchId());
payOrderSC.setSub_mch_id(payAccount.getSubMchId());
payOrderSC.setNonce_str(noncestr);
payOrderSC.setOut_trade_no(record.getPayOrderNo());
payOrderSC.setSign_type("HMAC-SHA256");

try {
Map map = BeanUtils.toStringMap(payOrderSC);
payOrderSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderSC);
String response = WxPay.closeOrder(map);
log.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
}
}
protected PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception {
String response = payOrderReverseWx(appInfo, record,payAccount);
log.info("pay order reverse, " + record.toString() + ", response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
String result_code = returnMap.get("result_code");
if ("SUCCESS".equalsIgnoreCase(return_code)) {
if ("SUCCESS".equals(result_code)) {
return new PayAdapterResult(true, "订单撤销成功", returnMap, null);
} else {
String errMsg = "";
JSONObject errObj = errorMapClose.getJSONObject(result_code);
if (errObj != null) {
errMsg = errObj.toJSONString();
} else {
errMsg = returnMap.get("return_msg");
}
return new PayAdapterResult(false, errMsg, returnMap, null);
}
} else {
String errMsg = returnMap.get("return_msg");
return new PayAdapterResult(false, errMsg, returnMap, null);
}
}
private String payOrderReverseWx(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) {
// get payAccount
if (payAccount.getType() == EnumPayMode.MCH.getCode()) {
// 普通商户号模式
WxPayOrderQ payOrderC = new WxPayOrderQ();
String noncestr = Utility.generate32UUID();
payOrderC.setAppid(appInfo.getAppId());
payOrderC.setMch_id(payAccount.getMchId());
payOrderC.setNonce_str(noncestr);
payOrderC.setOut_trade_no(record.getPayOrderNo());

try {
Map map = BeanUtils.toStringMap(payOrderC);
payOrderC.setSign(WxPayment.createSign(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderC);
String response = WxPay.orderReverse(map, payAccount.getCertPath(), payAccount.getMchId());
log.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
} else {
// 服务商模式
WxPayOrderSQ payOrderSC = new WxPayOrderSQ();
String noncestr = Utility.generate32UUID();
payOrderSC.setAppid(appInfo.getParentAppId());
payOrderSC.setSub_appid(appInfo.getAppId());
payOrderSC.setMch_id(payAccount.getMchId());
payOrderSC.setSub_mch_id(payAccount.getSubMchId());
payOrderSC.setNonce_str(noncestr);
payOrderSC.setOut_trade_no(record.getPayOrderNo());
payOrderSC.setSign_type("HMAC-SHA256");

try {
Map map = BeanUtils.toStringMap(payOrderSC);
payOrderSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey()));
map = BeanUtils.toStringMap(payOrderSC);
String response = WxPay.orderReverse(map, payAccount.getCertPath(), payAccount.getMchId());
log.info("request:" + map.toString() + "\nresponse:" + response);
return response;
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
}
}
@Autowired
WxOpenService openService;
protected File getQrCode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws WxErrorException {
boolean isFmOpen = false;
WxMaService wxMaService;
if(isFmOpen) {
wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId());
} else {
wxMaService = MaUtil.getWeappService(appinfo);
}

boolean autoColor = false;
boolean isHyaline = true;
WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0");
String pathStr = "";
if (StringUtils.isNotBlank(sceneParam)) {
pathStr = pageUrl + "?scene="+sceneParam;
} else {
pathStr = pageUrl;
}
if(type == 0) {
final File codeFile = wxMaService.getQrcodeService().createQrcode(pathStr, QRCodeUtils.QR_WIDTH);
return codeFile;
}else {
final File codeFile = wxMaService.getQrcodeService().createWxaCodeUnlimit(sceneParam, pageUrl, QRCodeUtils.QR_WIDTH, autoColor, color, isHyaline);
return codeFile;
}
}
} }

+ 22
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/h5/WxH5PayService.java Wyświetl plik

@@ -1,6 +1,8 @@
package com.iformall.service.pay.service.pay.wx.h5; package com.iformall.service.pay.service.pay.wx.h5;


import java.io.File;
import java.util.Date; import java.util.Date;
import java.util.Map;


import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;


@@ -41,5 +43,25 @@ public class WxH5PayService extends BaseWxPayAdapterService implements CDriving
throws Exception { throws Exception {
return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount); return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount);
} }

@Override
public PayAdapterResult payOrderClose(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount)
throws Exception {
// TODO Auto-generated method stub
return null;
}

@Override
public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount)
throws Exception {
// TODO Auto-generated method stub
return null;
}

@Override
public File getQrcode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws Exception{
// TODO Auto-generated method stub
return null;
}
} }

+ 17
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/appPay/WxMiniAppPayAdapterService.java Wyświetl plik

@@ -1,5 +1,6 @@
package com.iformall.service.pay.service.pay.wx.miniApp.appPay; package com.iformall.service.pay.service.pay.wx.miniApp.appPay;


import java.io.File;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;


@@ -251,4 +252,20 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen
return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount); return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount);
} }


@Override
public PayAdapterResult payOrderClose(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception {
return super.closeOrder(appInfo, record, payAccount);
}

@Override
public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount)
throws Exception {
return super.payOrderReverse(appInfo, record, payAccount);
}

@Override
public File getQrcode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws Exception{
return super.getQrCode(appinfo, pageUrl, type, sceneParam);
}

} }

+ 18
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/miniApp/maPay/WxMiniMaPayAdapterService.java Wyświetl plik

@@ -1,5 +1,6 @@
package com.iformall.service.pay.service.pay.wx.miniApp.maPay; package com.iformall.service.pay.service.pay.wx.miniApp.maPay;


import java.io.File;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -31,6 +32,7 @@ import com.iformall.service.pay.service.pay.wx.BaseWxPayAdapterService;
import com.iformall.utils.BeanUtils; import com.iformall.utils.BeanUtils;
import com.iformall.utils.Utility; import com.iformall.utils.Utility;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;




@Slf4j @Slf4j
@@ -246,5 +248,21 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement
return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount); return super.queryPayStatusCode(oldRecord, order, appInfo, payAccount);
} }


@Override
public PayAdapterResult payOrderClose(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception {
return super.closeOrder(appInfo, record, payAccount);
}

@Override
public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount)
throws Exception {
return super.payOrderReverse(appInfo, record, payAccount);
}

@Override
public File getQrcode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws Exception {
return super.getQrCode(appinfo, pageUrl, type, sceneParam);
}



} }

+ 24
- 1
mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java Wyświetl plik

@@ -6,10 +6,12 @@ import com.alibaba.fastjson.JSONArray;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.WxProfitSharingOrder; import com.iformall.domain.po.WxProfitSharingOrder;
import com.iformall.domain.po.WxProfitSharingReceiver;
import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumPayWay;
import com.iformall.enums.EnumProfitSharingOrderType; import com.iformall.enums.EnumProfitSharingOrderType;
import com.iformall.enums.EnumProfitSharingReceiverType; import com.iformall.enums.EnumProfitSharingReceiverType;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.service.pay.service.share.entity.ShareAccountResult;
import com.iformall.service.pay.service.share.entity.PayShareResult; import com.iformall.service.pay.service.share.entity.PayShareResult;
import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult; import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult;


@@ -62,7 +64,28 @@ public interface PayShareAdapterService {
*/ */
public EnumProfitSharingReceiverType getShareAccount(Integer accountType); public EnumProfitSharingReceiverType getShareAccount(Integer accountType);
/**
* 分账异步通知接收
* @param paramMap
* @param payWay
* @return
*/
public ShareNotifyAdapterResult notify(Map<String, String> paramMap,EnumPayWay payWay); public ShareNotifyAdapterResult notify(Map<String, String> paramMap,EnumPayWay payWay);
/**
* 调用API 添加分账账户
* @param appInfo
* @param payAccount
* @param receiver
*/
public ShareAccountResult createShareAccount(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingReceiver receiver);
/**
* 调用API 删除分账账户
* @param appInfo
* @param payAccount
* @param receiver
*/
public ShareAccountResult deleteShareAccount(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingReceiver receiver);
} }

+ 21
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/share/entity/ShareAccountResult.java Wyświetl plik

@@ -0,0 +1,21 @@
package com.iformall.service.pay.service.share.entity;

import java.io.Serializable;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class ShareAccountResult implements Serializable{

private static final long serialVersionUID = -3701322871877301001L;

private boolean isSuccess;
private Integer code;
private String msg;
private Object data;
}

+ 119
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java Wyświetl plik

@@ -11,28 +11,35 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;


import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode; import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.WxPayOrder;
import com.iformall.domain.po.WxProfitSharingOrder; import com.iformall.domain.po.WxProfitSharingOrder;
import com.iformall.domain.po.WxProfitSharingReceiver;
import com.iformall.enums.EnumMerchantSubsidyType; import com.iformall.enums.EnumMerchantSubsidyType;
import com.iformall.enums.EnumPayEndFrom; import com.iformall.enums.EnumPayEndFrom;
import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumPayWay;
import com.iformall.enums.EnumProfitSharingOrderStatus; import com.iformall.enums.EnumProfitSharingOrderStatus;
import com.iformall.enums.EnumProfitSharingOrderType; import com.iformall.enums.EnumProfitSharingOrderType;
import com.iformall.enums.EnumProfitSharingReceiverStatus;
import com.iformall.enums.EnumProfitSharingReceiverType; import com.iformall.enums.EnumProfitSharingReceiverType;
import com.iformall.enums.EnumProfitSharingType; import com.iformall.enums.EnumProfitSharingType;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxAppinfoMapper; import com.iformall.mapper.WxAppinfoMapper;
import com.iformall.mapper.WxPayAccountMapper; import com.iformall.mapper.WxPayAccountMapper;
import com.iformall.mapper.WxPayOrderMapper; import com.iformall.mapper.WxPayOrderMapper;
import com.iformall.mapper.WxProfitSharingReceiverMapper;
import com.iformall.pay.WxPayment; import com.iformall.pay.WxPayment;
import com.iformall.pay.WxProfitSharing; import com.iformall.pay.WxProfitSharing;
import com.iformall.pay.WxProfitSharingFinishP; import com.iformall.pay.WxProfitSharingFinishP;
import com.iformall.pay.WxProfitSharingP; import com.iformall.pay.WxProfitSharingP;
import com.iformall.pay.WxProfitSharingReceiverP;
import com.iformall.service.pay.service.share.PayShareAdapterService; import com.iformall.service.pay.service.share.PayShareAdapterService;
import com.iformall.service.pay.service.share.PayShareBaseAdapterService; import com.iformall.service.pay.service.share.PayShareBaseAdapterService;
import com.iformall.service.pay.service.share.entity.ShareAccountResult;
import com.iformall.service.pay.service.share.entity.PayShareResult; import com.iformall.service.pay.service.share.entity.PayShareResult;
import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult; import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult;
import com.iformall.utils.BeanUtils; import com.iformall.utils.BeanUtils;
@@ -259,4 +266,116 @@ public class WxPayShareService extends PayShareBaseAdapterService{


return getErrorResult("FAILED"); return getErrorResult("FAILED");
} }

@Override
public ShareAccountResult createShareAccount(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingReceiver receiver) {
WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP();
if (StringUtils.isNotBlank(appInfo.getParentAppId())) {
wxProfitSharingReceiverP.setAppid(appInfo.getParentAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
wxProfitSharingReceiverP.setSub_appid(appInfo.getAppId());
wxProfitSharingReceiverP.setSub_mch_id(payAccount.getSubMchId());
} else {
wxProfitSharingReceiverP.setAppid(appInfo.getAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
}
wxProfitSharingReceiverP.setNonce_str(Utility.generate32UUID());
wxProfitSharingReceiverP.setSign_type("HMAC-SHA256");


JSONObject receiverJSON = new JSONObject();
receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage());
receiverJSON.put("account", receiver.getReceiverAccount());
receiverJSON.put("name", receiver.getTrueName());

wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString());
String response;
try {
wxProfitSharingReceiverP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingReceiverP), payAccount.getApiKey()));
response = WxProfitSharing.addReceiver(BeanUtils.toStringMap(wxProfitSharingReceiverP));
log.info(response);
} catch (Exception e) {
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + e.getMessage());
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), e.getMessage(), null);
}
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
if (!"SUCCESS".equals(return_code)) {
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("return_msg"));
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("return_msg"), null);
}

String result_code = returnMap.get("result_code");
if (!"SUCCESS".equals(result_code)) {
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("err_code_des"));
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("err_code_des"), null);
}

if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) {
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + "verifyNotifyHMAC");
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage(), null);
}

return new ShareAccountResult(true, null, "success", returnMap);
}

@Autowired
WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper;
@Override
public ShareAccountResult deleteShareAccount(WxAppinfo appInfo, WxPayAccount payAccount,
WxProfitSharingReceiver receiver) {
//删除分账账户从微信服务器
WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP();
if (StringUtils.isNotBlank(appInfo.getParentAppId())) {
wxProfitSharingReceiverP.setAppid(appInfo.getParentAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
wxProfitSharingReceiverP.setSub_appid(appInfo.getAppId());
wxProfitSharingReceiverP.setSub_mch_id(payAccount.getSubMchId());
} else {
wxProfitSharingReceiverP.setAppid(appInfo.getAppId());
wxProfitSharingReceiverP.setMch_id(payAccount.getMchId());
}
wxProfitSharingReceiverP.setNonce_str(Utility.generate32UUID());
wxProfitSharingReceiverP.setSign_type("HMAC-SHA256");

JSONObject receiverJSON = new JSONObject();
receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage());
receiverJSON.put("account", receiver.getReceiverAccount());

wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString());
String response;
try {
wxProfitSharingReceiverP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingReceiverP), payAccount.getApiKey()));
response = WxProfitSharing.delReceiver(BeanUtils.toStringMap(wxProfitSharingReceiverP));
} catch (Exception e) {
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + e.getMessage());
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), e.getMessage(), null);
}
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
if (!"SUCCESS".equals(return_code)) {
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("return_msg"));
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("return_msg"), null);
}

String result_code = returnMap.get("result_code");
if (!"SUCCESS".equals(result_code)) {

if (returnMap.get("err_code").contains("USER_NOT_EXIST")) {
receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode());
receiver.setUpdateTime(new Date());
wxProfitSharingReceiverMapper.updateById(receiver);
}
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("err_code_des"));
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("err_code_des"), null);
}

if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) {
log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage());
return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), "verifyNotifyHMAC", null);
}
return new ShareAccountResult(true, null, "success", returnMap);
}
} }

+ 2
- 1
mallinkSysAdmin/src/main/java/com/iformall/controller/app/WxAppinfoController.java Wyświetl plik

@@ -9,6 +9,7 @@ import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController; import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumPayWay;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.service.WxAppinfoService; import com.iformall.service.WxAppinfoService;
import com.iformall.service.wechat.FmOpenService; import com.iformall.service.wechat.FmOpenService;
@@ -139,7 +140,7 @@ public class WxAppinfoController extends BaseController {
String name) { String name) {
// type 0 有限二维码, 1 无限制二维码 // type 0 有限二维码, 1 无限制二维码
// withText 0 不带字 1. 带下面的字,2 带下面的两行字 // withText 0 不带字 1. 带下面的字,2 带下面的两行字
WxAppinfo appinfo = wxAppinfoService.getCAppInfo(tenantEntity);
WxAppinfo appinfo = wxAppinfoService.getCAppInfo(tenantEntity,EnumPayWay.PAY_WAY_WECHAT);
boolean autoColor = false; boolean autoColor = false;
boolean isHyaline = true; boolean isHyaline = true;
WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0"); WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0");


+ 2
- 1
mallinkSysAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java Wyświetl plik

@@ -8,6 +8,7 @@ import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.base.BaseEntity; import com.iformall.domain.po.base.BaseEntity;
import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.vo.WxMerchantVo; import com.iformall.domain.vo.WxMerchantVo;
import com.iformall.enums.EnumPayWay;
import com.iformall.service.WxMerchantService; import com.iformall.service.WxMerchantService;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
@@ -118,7 +119,7 @@ public class WxMerchantController extends BaseController {
public ResultData updateMerchantAccount(@RequestBody WxMerchant wxMerchant) { public ResultData updateMerchantAccount(@RequestBody WxMerchant wxMerchant) {
logger.debug("[" + getIpAddr() + "] WxMerchantController::updateMerchantAccount"); logger.debug("[" + getIpAddr() + "] WxMerchantController::updateMerchantAccount");
wxMerchant.updateTenantInfo(getTenantInfo()); wxMerchant.updateTenantInfo(getTenantInfo());
return wxMerchantService.updateMerchantAccount(wxMerchant);
return wxMerchantService.updateMerchantAccount(wxMerchant,EnumPayWay.PAY_WAY_WECHAT);
} }


@ApiOperation("更新管理员接口") @ApiOperation("更新管理员接口")


Ładowanie…
Anuluj
Zapisz