diff --git a/mallinkService/src/main/java/com/simple/common/ErrorCode.java b/mallinkService/src/main/java/com/simple/common/ErrorCode.java index 80bba434c..27e15469b 100644 --- a/mallinkService/src/main/java/com/simple/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/simple/common/ErrorCode.java @@ -157,6 +157,8 @@ public enum ErrorCode{ PROFIT_SHARING_QUERY_REQUEST_FAILED(12034, "分账查询请求失败"), PROFIT_SHARING_QUERY_APPLY_FAILED(12035, "分账查询业务失败"), PROFIT_SHARING_QUERY_RETURN_INVALID(12036, "分账查询返回校验失败"), + PROFIT_SHARING_RECEIVER_ADD_FAILED(12037, "分账账户添加失败"), + /** * 核销 */ diff --git a/mallinkService/src/main/java/com/simple/enums/EnumProfitSharingType.java b/mallinkService/src/main/java/com/simple/enums/EnumProfitSharingType.java new file mode 100644 index 000000000..de985a463 --- /dev/null +++ b/mallinkService/src/main/java/com/simple/enums/EnumProfitSharingType.java @@ -0,0 +1,35 @@ +package com.simple.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumProfitSharingType { + PROFIT_SHARING_TYPE_WEICHAT(1, "MERCHANT_ID"), + PROFIT_SHARING_TYPE_BANK(2, "PERSONAL_WECHATID"), + ; + + public static EnumProfitSharingType getEnum(Integer code) { + for (EnumProfitSharingType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumProfitSharingType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/simple/pay/WxProfitSharing.java b/mallinkService/src/main/java/com/simple/pay/WxProfitSharing.java index f1e57a5b8..93686e89b 100644 --- a/mallinkService/src/main/java/com/simple/pay/WxProfitSharing.java +++ b/mallinkService/src/main/java/com/simple/pay/WxProfitSharing.java @@ -42,6 +42,20 @@ public class WxProfitSharing { } + /** + * 分账接收方添加 + * @param params + * @return + */ + public static String addReceiver(Map params) {return doPost(RPOFIT_SHARING_ADD_RECEIVER_URL, params); } + + /** + * 分账接收方删除 + * @param params + * @return + */ + public static String delReceiver(Map params) {return doPost(RPOFIT_SHARING_REMOVE_RECEIVER_URL, params); } + public static String doPost(String url, Map params) { return HttpUtil.payPost(url, WxPayment.toXml(params)); } diff --git a/mallinkService/src/main/java/com/simple/pay/WxProfitSharingReceiverP.java b/mallinkService/src/main/java/com/simple/pay/WxProfitSharingReceiverP.java new file mode 100644 index 000000000..ae4205450 --- /dev/null +++ b/mallinkService/src/main/java/com/simple/pay/WxProfitSharingReceiverP.java @@ -0,0 +1,73 @@ +package com.simple.pay; + +import java.io.Serializable; + +/** + * Created by Peng on 2018/8/10. + */ +public class WxProfitSharingReceiverP implements Serializable { + private static final long serialVersionUID = 1L; + + private String mch_id; // 商户号 + private String sub_mch_id; // 子商户号 + private String appid; // 公众账号ID + private String sub_appid; // 子公众账号ID + private String nonce_str; // 随机字符串 + private String sign; // 签名 + private String receiver; // 分账接收方 + + public String getMch_id() { + return mch_id; + } + + public void setMch_id(String mch_id) { + this.mch_id = mch_id; + } + + public String getSub_mch_id() { return sub_mch_id; } + + public void setSub_mch_id(String sub_mch_id) { + this.sub_mch_id = sub_mch_id; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getSub_appid() { + return sub_appid; + } + + public void setSub_appid(String sub_appid) { + this.sub_appid = sub_appid; + } + + public String getNonce_str() { + return nonce_str; + } + + public void setNonce_str(String nonce_str) { + this.nonce_str = nonce_str; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + +} diff --git a/mallinkService/src/main/java/com/simple/service/WxProfitSharingReceiverService.java b/mallinkService/src/main/java/com/simple/service/WxProfitSharingReceiverService.java index 49ec0d3ed..a2e6ad555 100644 --- a/mallinkService/src/main/java/com/simple/service/WxProfitSharingReceiverService.java +++ b/mallinkService/src/main/java/com/simple/service/WxProfitSharingReceiverService.java @@ -2,6 +2,8 @@ package com.simple.service; import java.util.*; import com.github.pagehelper.PageInfo; +import com.simple.common.ResultData; +import com.simple.domain.po.WxMerchant; import com.simple.domain.po.WxProfitSharingReceiver; public interface WxProfitSharingReceiverService { @@ -37,12 +39,12 @@ public interface WxProfitSharingReceiverService { * @param id */ void deleteById(Long id); - - - - - - + + + ResultData addReceiver(WxMerchant merchant); + + + ResultData delReceiver(WxMerchant merchant); } diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java index c4a05a186..f6dad1792 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java @@ -13,6 +13,7 @@ import com.simple.domain.po.*; import com.simple.enums.EnumPayDomain; import com.simple.enums.EnumProfitSharingReceiverType; import com.simple.enums.EnumProfitSharingStatus; +import com.simple.enums.EnumProfitSharingType; import com.simple.exception.MallinkException; import com.simple.mapper.*; import com.simple.pay.WxPayment; @@ -185,7 +186,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ //添加分账接受方 WxProfitSharingReceiver wxProfitSharingReceiver = new WxProfitSharingReceiver(); wxProfitSharingReceiver.setMerchantId(wxOrder.getMerchantId().toString()); - wxProfitSharingReceiver.setSharingType(1); + wxProfitSharingReceiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_WEICHAT.getCode()); List wxProfitSharingReceiverList = wxProfitSharingReceiverMapper.findList(wxProfitSharingReceiver); if (wxProfitSharingReceiverList.size()<=0 || wxProfitSharingReceiverList.size() > 50) { throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(), ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getMessage()); diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingReceiverServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingReceiverServiceImpl.java index bc96d5222..e4df05bb5 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingReceiverServiceImpl.java @@ -1,11 +1,30 @@ package com.simple.service.impl; import java.util.*; + +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.simple.common.ErrorCode; +import com.simple.common.ResultData; +import com.simple.domain.po.WxAppinfo; +import com.simple.domain.po.WxMerchant; +import com.simple.domain.po.WxPayAccount; import com.simple.domain.po.WxProfitSharingReceiver; +import com.simple.enums.EnumAppType; +import com.simple.enums.EnumProfitSharingReceiverType; +import com.simple.enums.EnumProfitSharingStatus; +import com.simple.enums.EnumProfitSharingType; +import com.simple.mapper.WxAppinfoMapper; +import com.simple.mapper.WxPayAccountMapper; import com.simple.mapper.WxProfitSharingReceiverMapper; +import com.simple.pay.WxPayment; +import com.simple.pay.WxProfitSharing; +import com.simple.pay.WxProfitSharingP; +import com.simple.pay.WxProfitSharingReceiverP; import com.simple.service.WxProfitSharingReceiverService; +import com.simple.utils.BeanUtils; +import com.simple.utils.Utility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.simple.common.IdWorker; @@ -15,7 +34,10 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv @Autowired WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper; - + @Autowired + WxAppinfoMapper wxAppinfoMapper; + @Autowired + WxPayAccountMapper wxPayAccountMapper; @Override public PageInfo listAsPage(WxProfitSharingReceiver record, Integer pageIndex, Integer pageSize) { @@ -43,12 +65,80 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv public void deleteById(Long id) { wxProfitSharingReceiverMapper.deleteByPrimaryKey(id); } - - - - - - - + + + + @Override + public ResultData addReceiver(WxMerchant merchant) { + + WxAppinfo subAppInfo = new WxAppinfo(); + subAppInfo.setTenantId(merchant.getTenantId()); + subAppInfo.setType(EnumAppType.C.getCode()); + + subAppInfo = wxAppinfoMapper.findList(subAppInfo).get(0); + WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(subAppInfo.getPayId()); + //WxPayAccount mainPayAccount = wxPayAccountMapper.selectByPrimaryKey(new Long(EnumPayDomain.PAY_DOMAIN_MASTER_ACCOUNT_ID.getCode())); + //WxAppinfo mainAppInfo = wxAppinfoMapper.selectByPrimaryKey(new Long(EnumPayDomain.PAY_DOMAIN_MASTER_APPINFO_ID.getCode())); + + + WxProfitSharingReceiver receiver = new WxProfitSharingReceiver(); + receiver.setMerchantId(merchant.getId().toString()); + receiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_WEICHAT.getCode()); + receiver.setId(IdWorker.get().nextId()); + receiver.setCreateTime(new Date()); + receiver.setUpdateTime(new Date()); + receiver.setReceiverAccount(merchant.getReceiverAccount().toString()); + receiver.setReceiverComments(merchant.getName()); + receiver.setReceiverType(EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_MERCHANT_ID.getCode()); + receiver.setTrueName(merchant.getName()); + + //分账提交 + WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP(); + //wxProfitSharingP.setAppid(mainAppInfo.getAppId()); + //wxProfitSharingP.setMch_id(mainPayAccount.getMchId()); + wxProfitSharingReceiverP.setAppid(subAppInfo.getAppId()); + wxProfitSharingReceiverP.setMch_id(payAccount.getMchId()); + wxProfitSharingReceiverP.setSub_appid(subAppInfo.getAppId()); + wxProfitSharingReceiverP.setSub_mch_id(payAccount.getMchId()); + wxProfitSharingReceiverP.setNonce_str(Utility.generate32UUID()); + + + JSONObject receiverJSON = new JSONObject(); + receiverJSON.put("type",EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_MERCHANT_ID.getMessage()); + receiverJSON.put("acount",merchant.getReceiverAccount()); + receiverJSON.put("name",merchant.getName()); + + wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString()); + String response; + try { + wxProfitSharingReceiverP.setSign(WxPayment.createSign(BeanUtils.toStringMap(wxProfitSharingReceiverP), payAccount.getApiKey())); + response = WxProfitSharing.addReceiver(BeanUtils.toStringMap(wxProfitSharingReceiverP)); + }catch (Exception e) { + return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED, e.getMessage()); + } + Map returnMap = WxPayment.xmlToMap(response); + String return_code = returnMap.get("return_code"); + if (!"SUCCESS".equals(return_code)) { + return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("return_msg")); + } + + if (!WxPayment.verifyNotify(returnMap,payAccount.getApiKey())){ + return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), ErrorCode.PROFIT_SHARING_RETURN_INVALID.getMessage()); + } + + String result_code = returnMap.get("result_code"); + if (!"SUCCESS".equals(result_code)) { + return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("result_msg")); + } + + wxProfitSharingReceiverMapper.insertSelective(receiver); + return new ResultData(returnMap); + } + + @Override + public ResultData delReceiver(WxMerchant merchant) { + return new ResultData(); + } + }